diff --git a/application/controllers/api/frontend/v1/stv/Prestudent.php b/application/controllers/api/frontend/v1/stv/Prestudent.php index 1663e0dae..93a6c381b 100644 --- a/application/controllers/api/frontend/v1/stv/Prestudent.php +++ b/application/controllers/api/frontend/v1/stv/Prestudent.php @@ -12,24 +12,23 @@ class Prestudent extends FHCAPI_Controller 'get' => ['admin:r', 'assistenz:r'], 'updatePrestudent' => ['admin:w', 'assistenz:w'], 'getHistoryPrestudents' => ['admin:r', 'assistenz:r'], - 'getBezeichnungZGV' => 'admin:r', // TODO(manu): self::PERM_LOGGED - 'getBezeichnungDZgv' => 'admin:r', // TODO(manu): self::PERM_LOGGED - 'getBezeichnungMZgv' => 'admin:r', // TODO(manu): self::PERM_LOGGED - 'getAusbildung' => 'admin:r', // TODO(manu): self::PERM_LOGGED - 'getAufmerksamdurch' => 'admin:r', // TODO(manu): self::PERM_LOGGED - 'getBerufstaetigkeit' => 'admin:r', // TODO(manu): self::PERM_LOGGED - 'getTypenStg' => 'admin:r', // TODO(manu): self::PERM_LOGGED - 'getStudiensemester' => 'admin:r', // TODO(manu): self::PERM_LOGGED - 'getStudienplaene' => 'admin:r', // TODO(manu): self::PERM_LOGGED + 'getBezeichnungZGV' => 'assistenz:r', // TODO(manu): self::PERM_LOGGED + 'getBezeichnungDZgv' => 'assistenz:r', // TODO(manu): self::PERM_LOGGED + 'getBezeichnungMZgv' => 'assistenz:r', // TODO(manu): self::PERM_LOGGED + 'getAusbildung' => 'assistenz:r', // TODO(manu): self::PERM_LOGGED + 'getAufmerksamdurch' => 'assistenz:r', // TODO(manu): self::PERM_LOGGED + 'getBerufstaetigkeit' => 'assistenz:r', // TODO(manu): self::PERM_LOGGED + 'getTypenStg' => 'assistenz:r', // TODO(manu): self::PERM_LOGGED + 'getStudiensemester' => 'assistenz:r', // TODO(manu): self::PERM_LOGGED + 'getStudienplaene' => 'assistenz:r', // TODO(manu): self::PERM_LOGGED ]); // Load Libraries $this->load->library('VariableLib', ['uid' => getAuthUID()]); - // Load language phrases $this->loadPhrases([ - 'ui', 'studierendenantrag' + 'ui', 'studierendenantrag', 'lehre' ]); } @@ -40,13 +39,15 @@ class Prestudent extends FHCAPI_Controller $this->PrestudentModel->addSelect('*'); $result = $this->PrestudentModel->loadWhere(['prestudent_id' => $prestudent_id]); - if (isError($result)) { + if (isError($result)) + { $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); - } elseif (!hasData($result)) { - return show_404(); - } else { - $this->terminateWithSuccess(current(getData($result))); } + if(!hasData($result)) + { + return show_404(); + } + $this->terminateWithSuccess(current(getData($result))); } public function updatePrestudent($prestudent_id) @@ -67,6 +68,11 @@ class Prestudent extends FHCAPI_Controller $stg = $result->studiengang_kz; + if(!$this->permissionlib->isBerechtigt('admin', 'suid', $stg) && !$this->permissionlib->isBerechtigt('assistenz', 'suid', $stg)) + { + return $this->terminateWithError($this->p->t('lehre','error_keineSchreibrechte'), self::ERROR_TYPE_GENERAL); + } + //Form validation $this->form_validation->set_rules('priorisierung', 'Priorisierung', 'numeric', [ 'numeric' => $this->p->t('ui','error_fieldNotNumeric',['field' => 'Priorisierung']) diff --git a/application/controllers/api/frontend/v1/stv/Status.php b/application/controllers/api/frontend/v1/stv/Status.php index e69de29bb..00602cf95 100644 --- a/application/controllers/api/frontend/v1/stv/Status.php +++ b/application/controllers/api/frontend/v1/stv/Status.php @@ -0,0 +1,1362 @@ + ['admin:r', 'assistenz:r'], + 'addNewStatus' => ['admin:r', 'assistenz:r', 'student/keine_studstatuspruefung'], + 'getStatusgruende' => 'assistenz:r', // TODO(manu): self::PERM_LOGGED + 'getLastBismeldestichtag' => 'assistenz:r', // TODO(manu): self::PERM_LOGGED + 'isLastStatus' => 'assistenz:r', // TODO(manu): self::PERM_LOGGED + 'deleteStatus' => ['admin:r','assistenz:r'], + 'loadStatus' => ['admin:r', 'assistenz:r'], + 'updateStatus' => ['admin:r', 'assistenz:r'], + 'advanceStatus' => ['admin:r', 'assistenz:r'], + 'confirmStatus' => ['admin:r', 'assistenz:r'] + ]); + + // Load Libraries + $this->load->library('VariableLib', ['uid' => getAuthUID()]); + + // Load language phrases + $this->loadPhrases([ + 'ui', 'bismeldestichtag','lehre' + ]); + } + + public function getHistoryPrestudent($prestudent_id) + { + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + + $result = $this->PrestudentModel->getHistoryPrestudent($prestudent_id); + if (isError($result)) + { + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + $this->terminateWithSuccess((getData($result) ?: [])); + } + + public function getStatusgruende() + { + $this->load->model('crm/Statusgrund_model', 'StatusgrundModel'); + + $result = $this->StatusgrundModel->load(); + if (isError($result)) { + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + return $this->terminateWithSuccess(getData($result) ?: []); + } + + public function getLastBismeldestichtag() + { + $this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel'); + + $result = $this->BismeldestichtagModel->getLastReachedMeldestichtag(); + if (isError($result)) { + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + return $this->terminateWithSuccess($result); + } + + public function isLastStatus($prestudent_id) + { + //TODO(Manu) translate here + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + $result = $this->PrestudentstatusModel->checkIfLastStatusEntry($prestudent_id); + if (isError($result)) + { + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + if($result->retval == "1") + { + //return $this->outputJson($result->retval); + return $this->terminateWithError("Die letzte Rolle kann nur durch den Administrator geloescht werden", self::ERROR_TYPE_GENERAL); + } + return $this->terminateWithSuccess($result); + } + + public function addNewStatus($prestudent_id) + { + //get Studiengang von prestudent_id + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $this->PrestudentModel->addJoin('public.tbl_person p', 'ON (p.person_id = public.tbl_prestudent.person_id)'); + $result = $this->PrestudentModel->load([ + 'prestudent_id'=> $prestudent_id, + ]); + if(isError($result)) + { + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + $result = current(getData($result)); + + //Variablen für Statuscheck + $stg = $result->studiengang_kz; + $reihungstest_angetreten = $result->reihungstestangetreten; + $name = trim($result->vorname . " ". $result->nachname); + $zgv_code = $result->zgv_code; + + $isStudent = false; + + if(!$this->permissionlib->isBerechtigt('admin', 'suid', $stg) && !$this->permissionlib->isBerechtigt('assistenz', 'suid', $stg)) + { + $result = $this->p->t('lehre','error_keineSchreibrechte'); + + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + + $uid = getAuthUID(); + $status_kurzbz = $this->input->post('status_kurzbz'); + $ausbildungssemester = $this->input->post('ausbildungssemester'); + $datum = $this->input->post('datum'); + $bestaetigtam = $this->input->post('bestaetigtam'); + $bewerbung_abgeschicktamum = $this->input->post('bewerbung_abgeschicktamum'); + $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); + $anmerkung = $this->input->post('anmerkung'); + $statusgrund_id = $this->input->post('statusgrund_id'); + $rt_stufe = $this->input->post('rt_stufe'); + $bestaetigtvon = $uid; + + //GET lastStatus + $result = $this->PrestudentstatusModel->getLastStatus($prestudent_id); + + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + elseif(!hasData($result)) + { + $lastStatusData = []; + } + else + $lastStatusData = current(getData($result)); + + //Different handling depending on newStatus + //Todo(manu) check later with multiactions + /* if($status_kurzbz == 'Absolvent' || $status_kurzbz == 'Diplomand') + { + //$studiensemester = $semester_aktuell; + $ausbildungssemester = $lastStatusData->ausbildungssemester; + }*/ + + /* if($status_kurzbz != 'Student') + { + $ausbildungssemester = $lastStatusData->ausbildungssemester; + }*/ + + //check if Rolle already exists + $result = $this->PrestudentstatusModel->checkIfExistingPrestudentRolle( + $prestudent_id, + $status_kurzbz, + $studiensemester_kurzbz, + $ausbildungssemester + ); + + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); +/* $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result));*/ + } + if($result->retval == '1') + { +/* $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($result->code);*/ + return $this->terminateWithError($this->p->t('lehre','error_rolleBereitsVorhanden'), self::ERROR_TYPE_GENERAL); + //return $this->terminateWithError("test error_rolleBereitsVorhanden", self::ERROR_TYPE_GENERAL); + } + + + //Check Reihungstest + //TODO(manu) erst später für multiactions releveant + if(REIHUNGSTEST_CHECK) + { + if($status_kurzbz=='Bewerber' && !$reihungstest_angetreten) + { +/* $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($name . ": Um einen Interessenten zum Bewerber zu machen, muss die Person das Reihungstestverfahren abgeschlossen haben");*/ + return $this->terminateWithError($this->p->t('lehre','error_keinReihungstestverfahren', $name), self::ERROR_TYPE_GENERAL); + } + } + + //Check ZGV + //TODO(manu) erst später für multiactions releveant + if(!defined("ZGV_CHECK") || ZGV_CHECK) + { + if($status_kurzbz=='Bewerber' && $zgv_code=='') + { +/* $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($name . ": Um einen Interessenten zum Bewerber zu machen, muss die Zugangsvoraussetzung eingetragen sein.");*/ + return $this->terminateWithError($this->p->t('lehre','error_ZGVNichtEingetragen', $name), self::ERROR_TYPE_GENERAL); + + } + } + + //Check ZGV-Master + //TODO(manu) erst später für multiactions releveant + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + $result = $this->StudiengangModel->load([ + 'studiengang_kz'=> $stg + ]); + if(isError($result)) + { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } + $result = current(getData($result)); + $typ = $result->typ; + + if(!defined("ZGV_CHECK") || ZGV_CHECK) + { + if($status_kurzbz=='Bewerber' && $zgv_code=='' && $typ=='m') + { +/* $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($name . ": Um einen Interessenten zum Bewerber zu machen, muss die Zugangsvoraussetzung Master eingetragen sein.");*/ + return $this->terminateWithError($this->p->t('lehre','error_ZGVMasterNichtEingetragen', $name), self::ERROR_TYPE_GENERAL); + } + } + + //check if bewerberstatus exists + if($status_kurzbz == 'Aufgenommener' || $status_kurzbz == 'Wartender') + { + //TODO(manu) erst später für multiactions releveant + //FAS: Aufnahme ist möglich: Beispiel prestudent_id = 129629 + + $result = $this->PrestudentstatusModel->checkIfExistingBewerberstatus($prestudent_id, $name); + if (isError($result)) + { +/* $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result));*/ + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + if($result->retval == "0") + { +/* $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($result->code);*/ + return $this->terminateWithError($this->p->t('lehre','error_keinBewerber', $name), self::ERROR_TYPE_GENERAL); + } + } + + //check if studentrolle already exists + //TODO(manu) eigener Code für Diplomand? + if($status_kurzbz == 'Student' || $status_kurzbz == 'Diplomand') + { + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->checkIfExistingStudentRolle($prestudent_id); + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + if($result->retval == "0") + { +/* $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($result->code);*/ + return $this->terminateWithError($this->p->t('lehre','error_noStudstatus'), self::ERROR_TYPE_GENERAL); + } + if($result->retval != "0") + { + $isStudent = true; + } + } + + $isBerechtigtNoStudstatusCheck = $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'); + + if(!$isBerechtigtNoStudstatusCheck) + { + //Block STATUSCHECKS + $new_status_datum = isset($datum) ? $datum : date('Y-m-d'); + $result = $this->PrestudentstatusModel->checkDatumNewStatus($new_status_datum); + if (isError($result)) + { +/* $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result));*/ + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + + $result = $this->PrestudentstatusModel->checkIfValidStatusHistory( + $prestudent_id, + $status_kurzbz, + $studiensemester_kurzbz, + $new_status_datum, + $ausbildungssemester + ); + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + + //check if Bismeldestichtag erreicht + $this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel'); + $result = $this->BismeldestichtagModel->checkIfMeldestichtagErreicht($new_status_datum); + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + if($result->retval == "1") + { + return $this->terminateWithError($this->p->t('lehre','error_dataVorMeldestichtag'), self::ERROR_TYPE_GENERAL); + } + } + + + // Start DB transaction + $this->db->trans_begin(); // Beginnen der Transaktion + + $result = $this->PrestudentstatusModel->insert( + [ + 'prestudent_id' => $prestudent_id, + 'status_kurzbz' => $status_kurzbz, + 'bewerbung_abgeschicktamum' => $bewerbung_abgeschicktamum, + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'studienplan_id' => $lastStatusData->studienplan_id, + 'ausbildungssemester' => $ausbildungssemester, + 'anmerkung' => $anmerkung, + 'statusgrund_id' => $statusgrund_id, + 'insertvon' => $uid, + 'insertamum' => date('c'), + 'bestaetigtam' => $bestaetigtam, + 'bestaetigtvon' => $bestaetigtvon, + 'datum' => $datum, + 'rt_stufe' => $rt_stufe + ] + ); + + if ($this->db->trans_status() === false || isError($result)) + { + $this->db->trans_rollback(); + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + + + + if($isStudent) + { + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->checkIfUid($prestudent_id); + if (isError($result)) { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + $student_uid = $result->retval; + + //load student + $result = $this->StudentModel->loadWhere( + array( + 'student_uid' => $student_uid + ) + ); + if (isError($result)) + { + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + $studentData = current(getData($result) ? : []); + $verband = $studentData->verband == '' ? '' : $studentData->verband; + $gruppe = $studentData->gruppe == '' ? '' : $studentData->gruppe; + $studiengang_kz = $studentData->studiengang_kz; + + //Handle Abbrecher and Unterbrecher + //TODO (manu) implement later with multiactions + // not active yet: works only for "status ändern" in FAS + /* if($status_kurzbz == 'Abbrecher' || $status_kurzbz == 'Unterbrecher') + { + $ausbildungssemester = 0; + $gruppe = ''; + $verband = $status_kurzbz == 'Abbrecher' ? 'A' : 'B'; + }*/ + + //process studentlehrverband + $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); + $result = $this->StudentlehrverbandModel->processStudentlehrverband( + $student_uid, + $studiengang_kz, + $ausbildungssemester, + $verband, + $gruppe, + $studiensemester_kurzbz + ); + if ($this->db->trans_status() === false || isError($result)) + { + $this->db->trans_rollback(); +/* $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($result->code);*/ + return $this->terminateWithError($this->p->t('lehre','error_duringInsertUpdateLehrverband'), self::ERROR_TYPE_GENERAL); + } + + //Student updaten (fuer Abbrecher und Unterbrecher) + //not active yet: works only for "status ändern" in FAS + //Todo(Manu) Later for multiactions + + /* + if($status_kurzbz == 'Abbrecher' || $status_kurzbz == 'Unterbrecher') + { + $result = $this->StudentModel->update( + [ + 'student_uid' => $student_uid + ], + [ + 'studiengang_kz' => $studiengang_kz, + 'semester' => $ausbildungssemester, + 'verband' => $verband, + 'gruppe' => $gruppe, + 'updateamum' => date('c'), + 'updatevon' => $uid + ]); + if ($this->db->trans_status() === false || isError($result)) + { + $this->db->trans_rollback(); + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($result->code); + } + } + */ + } + + $this->db->trans_commit(); + + return $this->outputJsonSuccess(true); + } + + public function loadStatus() + { + $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); + + $prestudent_id = $this->input->post('prestudent_id'); + $status_kurzbz = $this->input->post('status_kurzbz'); + $ausbildungssemester = $this->input->post('ausbildungssemester'); + $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); + + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + + $result = $this->PrestudentstatusModel->loadWhere( + array( + 'prestudent_id' => $prestudent_id, + 'status_kurzbz' => $status_kurzbz, + 'ausbildungssemester' => $ausbildungssemester, + 'studiensemester_kurzbz' => $studiensemester_kurzbz + ) + ); + if (isError($result)) + { + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + elseif (!hasData($result)) + { + $this->terminateWithError($this->p->t('lehre','error_noStatusFound'), self::ERROR_TYPE_GENERAL); + } + else + { + $this->terminateWithSuccess(current(getData($result))); + } + } + + public function deleteStatus() + { + + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + + $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); + + $prestudent_id = $this->input->post('prestudent_id'); + $status_kurzbz = $this->input->post('status_kurzbz'); + $ausbildungssemester = $this->input->post('ausbildungssemester'); + $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); + $deletePrestudent = false; + + //get Studiengang von prestudent_id + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $result = $this->PrestudentModel->load([ + 'prestudent_id'=> $prestudent_id, + ]); + if(isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + $result = current(getData($result)); + + $stg = $result->studiengang_kz; + + $isBerechtigtAdmin = $this->permissionlib->isBerechtigt('admin', null, 'suid'); + $isBerechtigtNoStudstatusCheck = $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung', null, 'suid'); + + if(!$this->permissionlib->isBerechtigt('admin', 'suid', $stg) && !$this->permissionlib->isBerechtigt('assistenz', 'suid', $stg)) + { + return $this->terminateWithError($this->p->t('lehre','error_keineSchreibrechte'), self::ERROR_TYPE_GENERAL); + } + + if($status_kurzbz=="Student" && !$isBerechtigtAdmin && !$isBerechtigtNoStudstatusCheck) + { + return $this->terminateWithError($this->p->t('lehre','error_onlyAdminDeleteRolleStudent'), self::ERROR_TYPE_GENERAL); + } + + //check if last status + $result = $this->PrestudentstatusModel->checkIfLastStatusEntry($prestudent_id); + //return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + + if (isError($result)) + { +/* $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($result);*/ + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + if($result->retval == "1") + { + //Berechtigungen nach Check prüfen! + if(!$isBerechtigtAdmin && !$isBerechtigtNoStudstatusCheck) + { + return $this->terminateWithError($this->p->t('lehre','error_onlyAdminDeleteLastStatus'), self::ERROR_TYPE_GENERAL); + } + else + { + $deletePrestudent = true; + } + } + + // Start DB transaction + $this->db->trans_begin(); + + //load rolle für LOG sqlundo + $result = $this->PrestudentstatusModel->loadWhere( + array( + 'prestudent_id' => $prestudent_id, + 'status_kurzbz' => $status_kurzbz, + 'ausbildungssemester' => $ausbildungssemester, + 'studiensemester_kurzbz' => $studiensemester_kurzbz + ) + ); + + if (isError($result)) + { + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + if (!hasData($result)) { + return $this->terminateWithError($this->p->t('lehre','error_noStatusFound'), self::ERROR_TYPE_GENERAL); + + } + + //Data of current Rolle + $statusData = current(getData($result)); + + $datum = $statusData->datum == '' ? 'null' : $statusData->datum; + $insertamum = $statusData->insertamum == '' ? 'null' : $statusData->insertamum; + $insertvon = $statusData->insertvon == '' ? 'null' : $statusData->insertvon; + $updateamum = $statusData->updateamum == '' ? 'null' : $statusData->updateamum; + $updatevon = $statusData->updatevon == '' ? 'null' : $statusData->updatevon; + $ext_id = $statusData->ext_id == '' ? 'null' : $statusData->ext_id; + $orgform_kurzbz = $statusData->orgform_kurzbz == '' ? 'null' : $statusData->orgform_kurzbz; + $bestaetigtam = $statusData->bestaetigtam == '' ? 'null' : $statusData->bestaetigtam; + $bestaetigtvon = $statusData->bestaetigtvon == '' ? 'null' : $statusData->bestaetigtvon; + $anmerkung = $statusData->anmerkung == '' ? 'null' : $statusData->anmerkung; + $bewerbung_abgeschicktamum = $statusData->bewerbung_abgeschicktamum == '' ? 'null' : $statusData->bewerbung_abgeschicktamum; + $studienplan_id = $statusData->studienplan_id == '' ? 'null' : $statusData->studienplan_id; + $rt_stufe = $statusData->rt_stufe == '' ? 'null' : $statusData->rt_stufe; + $statusgrund_id = $statusData->statusgrund_id == '' ? 'null' : $statusData->statusgrund_id; + + $quotes_datum = $datum == "null" ? " " : "'"; + $quotes_insertamum = $insertamum == "null" ? " " : "'"; + $quotes_insertvon = $insertvon == "null" ? " " : "'"; + $quotes_updateamum = $updateamum == "null" ? " " : "'"; + $quotes_updatevon = $updatevon == "null" ? " " : "'"; + $quotes_ext_id = $ext_id == "null" ? " " : "'"; + $quotes_orgform_kurzbz = $orgform_kurzbz == "null" ? " " : "'"; + $quotes_bestaetigtam = $bestaetigtam == "null" ? " " : "'"; + $quotes_bestaetigtvon = $bestaetigtvon == "null" ? " " : "'"; + $quotes_anmerkung = $anmerkung == "null" ? " " : "'"; + $quotes_bewerbung_abgeschicktamum = $bewerbung_abgeschicktamum == "null" ? " " : "'"; + $quotes_studienplan_id = $studienplan_id == "null" ? " " : "'"; + $quotes_rt_stufe = $rt_stufe == "null" ? " " : "'"; + $quotes_statusgrund_id = $statusgrund_id == "null" ? " " : "'"; + + $sqlundo = + " + INSERT INTO public.tbl_prestudentstatus(prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester, + datum, insertamum, insertvon, updateamum, updatevon, ext_id, orgform_kurzbz, bestaetigtam, bestaetigtvon, + anmerkung, bewerbung_abgeschicktamum, studienplan_id, rt_stufe, statusgrund_id) + VALUES('" . $prestudent_id . "','" . $status_kurzbz . "','" . $studiensemester_kurzbz . "','" . $ausbildungssemester . "'," + . $quotes_datum . $datum . $quotes_datum . "," + . $quotes_insertamum . $insertamum . $quotes_insertamum . "," + . $quotes_insertvon . $insertvon . $quotes_insertvon . "," + . $quotes_updateamum . $updateamum . $quotes_updateamum . "," + . $quotes_updatevon . $updatevon . $quotes_updatevon . "," + . $quotes_ext_id . $ext_id . $quotes_ext_id . "," + . $quotes_orgform_kurzbz . $orgform_kurzbz . $quotes_orgform_kurzbz . "," + . $quotes_bestaetigtam . $bestaetigtam . $quotes_bestaetigtam . "," + . $quotes_bestaetigtvon . $bestaetigtvon . $quotes_bestaetigtvon . "," + . $quotes_anmerkung . $anmerkung . $quotes_anmerkung . "," + . $quotes_bewerbung_abgeschicktamum . $bewerbung_abgeschicktamum . $quotes_bewerbung_abgeschicktamum . "," + . $quotes_studienplan_id . $studienplan_id . $quotes_studienplan_id . "," + . $quotes_rt_stufe . $rt_stufe . $quotes_rt_stufe . "," + . $quotes_statusgrund_id . $statusgrund_id . $quotes_statusgrund_id . "); + "; + + //Delete Status + $result = $this->PrestudentstatusModel->delete( + [ + 'prestudent_id' => $prestudent_id, + 'status_kurzbz' => $status_kurzbz, + 'ausbildungssemester' => $ausbildungssemester, + 'studiensemester_kurzbz' => $studiensemester_kurzbz + ] + ); + + if($this->db->trans_status() === false || isError($result)) + { + $this->db->trans_rollback(); + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + if(!hasData($result)) + { + return $this->terminateWithError($this->p->t('lehre','error_noStatusFound'), self::ERROR_TYPE_GENERAL); + + } + + //save log delete prestudentstatus + $uid = getAuthUID(); + $beschreibung = 'Loeschen der Rolle ' . $status_kurzbz . " bei " . $prestudent_id; + $sql = "DELETE FROM public.tbl_prestudentstatus + WHERE prestudent_id = " . $prestudent_id . " + AND status_kurzbz = '" . $status_kurzbz . "' + AND ausbildungssemester ='" . $ausbildungssemester . "' + AND studiensemester_kurzbz = '" . $studiensemester_kurzbz . "'"; + + $this->load->model('system/Log_model', 'LogModel'); + $result = $this->LogModel->insert([ + 'mitarbeiter_uid' => $uid, + 'beschreibung' => $beschreibung, + 'sql' => $sql, + 'sqlundo' => $sqlundo + ]); + if (isError($result) || !hasData($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + + $logId = $result->retval; + + //Delete Studentlehrverband if no Status left + $result = $this->PrestudentstatusModel->checkIfLastStatusEntry($prestudent_id, true); + + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + if ($result->retval == "1") + { + //get student_uid + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->checkIfUid($prestudent_id); + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + if (!hasData($result)) + { + return $this->terminateWithError($this->p->t('studierendenantrag','error_no_student_for_prestudent'), self::ERROR_TYPE_GENERAL); + } + $student_uid = $result->retval; + + $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); + $result = $this->StudentlehrverbandModel->delete( + array( + 'student_uid' => $student_uid, + 'studiensemester_kurzbz' => $studiensemester_kurzbz + ) + ); + if ($this->db->trans_status() === false || isError($result) || !hasData($result)) + { + $this->db->trans_rollback(); + + return $this->terminateWithError($this->p->t('lehre','error_duringDeleteLehrverband'), self::ERROR_TYPE_GENERAL); + } + + $this->terminateWithSuccess(true); + + } + //Delete Prestudent if no data is left + + if($deletePrestudent && $isBerechtigtAdmin) + { + //TODO(manu) check all connected tables, Handling of Deletion + //check if existing dokumentprestudent + $this->load->model('crm/Dokumentprestudent_model', 'DokumentprestudentModel'); + $result = $this->DokumentprestudentModel->loadWhere( + array( + 'prestudent_id' => $prestudent_id + ) + ); + if (isError($result)) + { + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + + } + if (hasData($result)) + { + return $this->terminateWithError("Es sind noch zu loeschende Dokumente vorhanden: ", self::ERROR_TYPE_GENERAL); + } + + //check if Anrechnungen tbl_anrechnung + $output_anrechnungen = ''; + $this->load->model('education/Anrechnung_model', 'AnrechnungModel'); + $result = $this->AnrechnungModel->loadWhere( + array( + 'prestudent_id' => $prestudent_id + ) + ); + if (isError($result)) + { + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + if (hasData($result)) + { + return $this->terminateWithError("Mit dieser Prestudent_id sind verbundene Anrechnungen vorhanden!", self::ERROR_TYPE_GENERAL); + } + + //DELETE Prestudent + + //save log delete prestudent + $uid = getAuthUID(); + $beschreibung = 'Loeschen der Prestudent ID ' . $prestudent_id; + $sql = "DELETE FROM public.tbl_prestudent + WHERE prestudent_id = " . $prestudent_id; + + //load prestudent für LOG sqlundo + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $result = $this->PrestudentModel->loadWhere( + array( + 'prestudent_id' => $prestudent_id + ) + ); + if (isError($result) || !hasData($result)) + { + //TODO(Manu) in these case: löschen stautus erlauben aber rückmeldung, dass Prestudent nicht gelöscht wurde + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + //Data of current Prestudent + $prestudentData = current(getData($result)); + + $aufmerksamdurch_kurzbz = $prestudentData->aufmerksamdurch_kurzbz == '' ? 'null' : $prestudentData->aufmerksamdurch_kurzbz; + $studiengang_kz = $prestudentData->studiengang_kz == '' ? 'null' : $prestudentData->studiengang_kz; + $berufstaetigkeit_code = $prestudentData->berufstaetigkeit_code == '' ? 'null' : $prestudentData->berufstaetigkeit_code; + $ausbildungcode = $prestudentData->ausbildungcode == '' ? 'null' : $prestudentData->ausbildungcode; + $zgv_code = $prestudentData->zgv_code == '' ? 'null' : $prestudentData->zgv_code; + $zgvort = $prestudentData->zgvort == '' ? 'null' : $prestudentData->zgvort; + $zgvdatum = $prestudentData->zgvdatum == '' ? 'null' : $prestudentData->zgvdatum; + $zgvnation = $prestudentData->zgvnation == '' ? 'null' : $prestudentData->zgvnation; + $zgv_erfuellt = $prestudentData->zgv_erfuellt == '' ? 'null' : $prestudentData->zgv_erfuellt; + $zgvmas_code = $prestudentData->zgvmas_code == '' ? 'null' : $prestudentData->zgvmas_code; + $zgvmaort = $prestudentData->zgvmaort == '' ? 'null' : $prestudentData->zgvmaort; + $zgvmadatum = $prestudentData->zgvmadatum == '' ? 'null' : $prestudentData->zgvmadatum; + $zgvmanation = $prestudentData->zgvmanation == '' ? 'null' : $prestudentData->zgvmanation; + $zgvmas_erfuellt = $prestudentData->zgvmas_erfuellt == '' ? 'null' : $prestudentData->zgvmas_erfuellt; + $aufnahmeschluessel = $prestudentData->aufnahmeschluessel == '' ? 'null' : $prestudentData->aufnahmeschluessel; + $facheinschlberuf = $prestudentData->facheinschlberuf == '' ? 'null' : $prestudentData->facheinschlberuf; + $anmeldungreihungstest = $prestudentData->anmeldungreihungstest == '' ? 'null' : $prestudentData->anmeldungreihungstest; + $reihungstestangetreten = $prestudentData->reihungstestangetreten == 1 ? 'true' : 'false'; + $reihungstest_id = $prestudentData->reihungstest_id == '' ? 'null' : $prestudentData->reihungstest_id; + $rt_gesamtpunkte = $prestudentData->rt_gesamtpunkte == '' ? 'null' : $prestudentData->rt_gesamtpunkte; + $rt_punkte1 = $prestudentData->rt_punkte1 == '' ? 'null' : $prestudentData->rt_punkte1; + $rt_punkte2 = $prestudentData->rt_punkte2 == '' ? 'null' : $prestudentData->rt_punkte2; + $rt_punkte3 = $prestudentData->rt_punkte3 == '' ? 'null' : $prestudentData->rt_punkte3; + $bismelden = $prestudentData->bismelden == 1 ? 'true' : 'false'; + $person_id = $prestudentData->person_id == '' ? 'null' : $prestudentData->person_id; + $anmerkung = $prestudentData->anmerkung == '' ? 'null' : $prestudentData->anmerkung; + $mentor = $prestudentData->mentor == '' ? 'null' : $prestudentData->mentor; + $ext_id = $prestudentData->ext_id == '' ? 'null' : $prestudentData->ext_id; + $dual = $prestudentData->dual == 1 ? 'true' : 'false'; + $ausstellungsstaat = $prestudentData->ausstellungsstaat == '' ? 'null' : $prestudentData->ausstellungsstaat; + $zgvdoktor_code = $prestudentData->zgvdoktor_code == '' ? 'null' : $prestudentData->zgvdoktor_code; + $zgvdoktorort = $prestudentData->zgvdoktorort == '' ? 'null' : $prestudentData->zgvdoktorort; + $zgvdoktordatum = $prestudentData->zgvdoktordatum == '' ? 'null' : $prestudentData->zgvdoktordatum; + $zgvdoktornation = $prestudentData->zgvdoktornation == '' ? 'null' : $prestudentData->zgvdoktornation; + $gsstudientyp_kurzbz = $prestudentData->gsstudientyp_kurzbz == '' ? 'null' : $prestudentData->gsstudientyp_kurzbz; + $aufnahmegruppe_kurzbz = $prestudentData->aufnahmegruppe_kurzbz == '' ? 'null' : $prestudentData->aufnahmegruppe_kurzbz; + $priorisierung = $prestudentData->priorisierung == '' ? 'null' : $prestudentData->priorisierung; + $zgvdoktor_erfuellt= $prestudentData->zgvdoktor_erfuellt == '' ? 'null' : $prestudentData->zgvdoktor_erfuellt; + + $quotes_aufmerksamdurch_kurzbz = $aufmerksamdurch_kurzbz == "null" ? " " : "'"; + $quotes_studiengang_kz = $studiengang_kz == "null" ? " " : "'"; + $quotes_berufstaetigkeit_code = $berufstaetigkeit_code == "null" ? " " : "'"; + $quotes_ausbildungcode = $ausbildungcode == "null" ? " " : "'"; + $quotes_zgv_code = $zgv_code == "null" ? " " : "'"; + $quotes_zgvort = $zgvort == "null" ? " " : "'"; + $quotes_zgvdatum = $zgvdatum == "null" ? " " : "'"; + $quotes_zgvnation = $zgvnation == "null" ? " " : "'"; + $quotes_zgv_erfuellt = $zgv_erfuellt == "null" ? " " : "'"; + $quotes_zgvmas_code = $zgvmas_code == "null" ? " " : "'"; + $quotes_zgvmaort = $zgvmaort == "null" ? " " : "'"; + $quotes_zgvmadatum = $zgvmadatum == "null" ? " " : "'"; + $quotes_zgvmanation = $zgvmanation == "null" ? " " : "'"; + $quotes_zgvmas_erfuellt = $zgvmas_erfuellt == "null" ? " " : "'"; + $quotes_aufnahmeschluessel = $aufnahmeschluessel == "null" ? " " : "'"; + $quotes_facheinschlberuf = $facheinschlberuf == "null" ? " " : "'"; + $quotes_anmeldungreihungstest = $anmeldungreihungstest == "null" ? " " : "'"; + $quotes_reihungstestangetreten = $reihungstestangetreten == "null" ? " " : "'"; + $quotes_reihungstest_id = $reihungstest_id == "null" ? " " : "'"; + $quotes_rt_gesamtpunkte = $rt_gesamtpunkte == "null" ? " " : "'"; + $quotes_rt_punkte1 = $rt_punkte1 == "null" ? " " : "'"; + $quotes_rt_punkte2 = $rt_punkte2 == "null" ? " " : "'"; + $quotes_rt_punkte3 = $rt_punkte3 == "null" ? " " : "'"; + $quotes_bismelden = $bismelden == "null" ? " " : "'"; + $quotes_person_id = $person_id == "null" ? " " : "'"; + $quotes_anmerkung = $anmerkung == "null" ? " " : "'"; + $quotes_mentor = $mentor == "null" ? " " : "'"; + $quotes_ext_id = $ext_id == "null" ? " " : "'"; + $quotes_dual = $dual == "null" ? " " : "'"; + $quotes_ausstellungsstaat = $ausstellungsstaat == "null" ? " " : "'"; + $quotes_zgvdoktor_code = $zgvdoktor_code == "null" ? " " : "'"; + $quotes_zgvdoktorort = $zgvdoktorort == "null" ? " " : "'"; + $quotes_zgvdoktordatum = $zgvdoktordatum == "null" ? " " : "'"; + $quotes_zgvdoktornation = $zgvdoktornation == "null" ? " " : "'"; + $quotes_gsstudientyp_kurzbz = $gsstudientyp_kurzbz == "null" ? " " : "'"; + $quotes_aufnahmegruppe_kurzbz = $aufnahmegruppe_kurzbz == "null" ? " " : "'"; + $quotes_priorisierung = $priorisierung == "null" ? " " : "'"; + $quotes_zgvdoktor_erfuellt = $zgvdoktor_erfuellt == "null" ? " " : "'"; + + + $sqlundo = + " + INSERT INTO public.tbl_prestudent(prestudent_id, aufmerksamdurch_kurzbz, studiengang_kz, berufstaetigkeit_code, ausbildungcode, + zgv_code, zgvort, zgvdatum, zgvnation,zgv_erfuellt, zgvmas_code, zgvmaort, zgvmadatum, zgvmanation,zgvmas_erfuellt, + aufnahmeschluessel, facheinschlberuf, anmeldungreihungstest, reihungstestangetreten, reihungstest_id, + rt_gesamtpunkte, rt_punkte1, rt_punkte2, rt_punkte3, bismelden, person_id, anmerkung, mentor, ext_id, + dual, ausstellungsstaat, zgvdoktor_code, zgvdoktorort, zgvdoktordatum, zgvdoktornation, + gsstudientyp_kurzbz, aufnahmegruppe_kurzbz, priorisierung, zgvdoktor_erfuellt) + VALUES('" . $prestudent_id . "'," + . $quotes_aufmerksamdurch_kurzbz . $aufmerksamdurch_kurzbz . $quotes_aufmerksamdurch_kurzbz . "," + . $quotes_studiengang_kz . $studiengang_kz . $quotes_studiengang_kz . "," + . $quotes_berufstaetigkeit_code . $berufstaetigkeit_code . $quotes_berufstaetigkeit_code . "," + . $quotes_ausbildungcode . $ausbildungcode . $quotes_ausbildungcode . "," + . $quotes_zgv_code . $zgv_code . $quotes_zgv_code . "," + . $quotes_zgvort . $zgvort . $quotes_zgvort . "," + . $quotes_zgvdatum . $zgvdatum . $quotes_zgvdatum . "," + . $quotes_zgvnation . $zgvnation . $quotes_zgvnation . "," + . $quotes_zgv_erfuellt . $zgv_erfuellt . $quotes_zgv_erfuellt . "," + . $quotes_zgvmas_code . $zgvmas_code . $quotes_zgvmas_code . "," + . $quotes_zgvmaort . $zgvmaort . $quotes_zgvmaort . "," + . $quotes_zgvmadatum . $zgvmadatum . $quotes_zgvmadatum . "," + . $quotes_zgvmanation . $zgvmanation . $quotes_zgvmanation . "," + . $quotes_zgvmas_erfuellt . $zgvmas_erfuellt . $quotes_zgvmas_erfuellt . "," + . $quotes_aufnahmeschluessel . $aufnahmeschluessel . $quotes_aufnahmeschluessel . "," + . $quotes_facheinschlberuf . $facheinschlberuf . $quotes_facheinschlberuf . "," + . $quotes_anmeldungreihungstest . $anmeldungreihungstest . $quotes_anmeldungreihungstest . "," + . $quotes_reihungstestangetreten . $reihungstestangetreten . $quotes_reihungstestangetreten . "," + . $quotes_reihungstest_id . $reihungstest_id . $quotes_reihungstest_id . "," + . $quotes_rt_gesamtpunkte . $rt_gesamtpunkte . $quotes_rt_gesamtpunkte . "," + . $quotes_rt_punkte1 . $rt_punkte1 . $quotes_rt_punkte1 . "," + . $quotes_rt_punkte2 . $rt_punkte2 . $quotes_rt_punkte2 . "," + . $quotes_rt_punkte3 . $rt_punkte3 . $quotes_rt_punkte3 . "," + . $quotes_bismelden . $bismelden . $quotes_bismelden . "," + . $quotes_person_id . $person_id . $quotes_person_id . "," + . $quotes_anmerkung . $anmerkung . $quotes_anmerkung . "," + . $quotes_mentor . $mentor . $quotes_mentor . "," + . $quotes_ext_id . $ext_id . $quotes_ext_id . "," + . $quotes_dual . $dual . $quotes_dual . "," + . $quotes_ausstellungsstaat . $ausstellungsstaat . $quotes_ausstellungsstaat . "," + . $quotes_zgvdoktor_code . $zgvdoktor_code . $quotes_zgvdoktor_code . "," + . $quotes_zgvdoktorort . $zgvdoktorort . $quotes_zgvdoktorort . "," + . $quotes_zgvdoktordatum . $zgvdoktordatum . $quotes_zgvdoktordatum . "," + . $quotes_zgvdoktornation . $zgvdoktornation . $quotes_zgvdoktornation . "," + . $quotes_gsstudientyp_kurzbz . $gsstudientyp_kurzbz . $quotes_gsstudientyp_kurzbz . "," + . $quotes_aufnahmegruppe_kurzbz . $aufnahmegruppe_kurzbz . $quotes_aufnahmegruppe_kurzbz . "," + . $quotes_priorisierung . $priorisierung . $quotes_priorisierung . "," + . $quotes_zgvdoktor_erfuellt . $zgvdoktor_erfuellt . $quotes_zgvdoktor_erfuellt . "); + "; + + $this->load->model('system/Log_model', 'LogModel'); + $result = $this->LogModel->insert([ + 'mitarbeiter_uid' => $uid, + 'beschreibung' => $beschreibung, + 'sql' => $sql, + 'sqlundo' => $sqlundo + ]); + if (isError($result) || !hasData($result)) + { + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + //$logId = $result->retval; + + //independent transaction + $this->db->trans_start(); + + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $result = $this->PrestudentModel->delete( + array( + 'prestudent_id' => $prestudent_id + ) + ); + if ($this->db->trans_status() === false) + { + $this->db->trans_rollback(); + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + $this->db->trans_commit(); + $this->terminateWithSuccess($result); + } + $this->db->trans_commit(); + + return $this->terminateWithSuccess(true); + } + + public function updateStatus($key_prestudent_id, $key_status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester) + { + $isStudent = false; + $isBerechtigtNoStudstatusCheck = $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'); + + //get Studiengang von prestudent_id + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $result = $this->PrestudentModel->load([ + 'prestudent_id'=> $key_prestudent_id, + ]); + if(isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + $result = current(getData($result)); + + $stg = $result->studiengang_kz; + + if (!$this->permissionlib->isBerechtigt('admin', 'suid', $stg) && !$this->permissionlib->isBerechtigt('assistenz', 'suid', $stg)) + { + return $this->terminateWithError($this->p->t('lehre','error_keineSchreibrechte'), self::ERROR_TYPE_GENERAL); + } + + $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + + $uid = getAuthUID(); + $prestudent_id = $this->input->post('prestudent_id'); + $status_kurzbz = $this->input->post('status_kurzbz'); + $ausbildungssemester = $this->input->post('ausbildungssemester'); + $datum = $this->input->post('datum'); + $bestaetigtam = $this->input->post('bestaetigtam'); + $bewerbung_abgeschicktamum = $this->input->post('bewerbung_abgeschicktamum'); + $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); + $studienplan_id = $this->input->post('studienplan_id'); + $anmerkung = $this->input->post('anmerkung'); + $statusgrund_id = $this->input->post('statusgrund_id'); + $rt_stufe = $this->input->post('rt_stufe'); + $bestaetigtvon = $uid; + + //check if Bismeldestichtag erreicht + if(!$isBerechtigtNoStudstatusCheck) + { + // only check datum (without semester) + $this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel'); + /* $result = $this->BismeldestichtagModel->checkIfMeldestichtagErreicht($datum, $studiensemester_kurzbz);*/ + $result = $this->BismeldestichtagModel->checkIfMeldestichtagErreicht($datum); + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + if ($result->retval == "1") + { + return $this->terminateWithError($this->p->t('lehre','error_dataVorMeldestichtag'), self::ERROR_TYPE_GENERAL); + } + } + + //check if Rolle already exists + if(($key_studiensemester_kurzbz != $studiensemester_kurzbz) + || ($key_ausbildungssemester != $ausbildungssemester)) + { + $result = $this->PrestudentstatusModel->checkIfExistingPrestudentRolle( + $prestudent_id, + $status_kurzbz, + $studiensemester_kurzbz, + $ausbildungssemester + ); + if (isError($result)) + { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } + if($result->retval == '1') + { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($result->code); + } + } + + //check if studentrolle already exists + if($status_kurzbz == 'Student' || $status_kurzbz == 'Diplomand') + { + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->checkIfExistingStudentRolle($prestudent_id); + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + if($result->retval == "0") + { + return $this->terminateWithError($this->p->t('lehre','error_noStudstatus'), self::ERROR_TYPE_GENERAL); + } + if($result->retval != "0") + { + $isStudent = true; + } + } + + + if(!$isBerechtigtNoStudstatusCheck) + { + //Block STATUSCHECKS + + $result = $this->PrestudentstatusModel->checkIfValidStatusHistory( + $prestudent_id, + $status_kurzbz, + $studiensemester_kurzbz, + $datum, + $ausbildungssemester + ); + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + } + + + // Start DB transaction + $this->db->trans_begin(); + + //update status + $result = $this->PrestudentstatusModel->update( + [ + 'prestudent_id' => $key_prestudent_id, + 'status_kurzbz' => $key_status_kurzbz, + 'studiensemester_kurzbz' => $key_studiensemester_kurzbz, + 'ausbildungssemester' => $key_ausbildungssemester, + ], + [ + 'status_kurzbz' => $status_kurzbz, + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'ausbildungssemester' => $ausbildungssemester, + 'bewerbung_abgeschicktamum' => $bewerbung_abgeschicktamum, + 'studienplan_id' => $studienplan_id, + 'anmerkung' => $anmerkung, + 'statusgrund_id' => $statusgrund_id, + 'updatevon' => $uid, + 'updateamum' => date('c'), + 'bestaetigtam' => $bestaetigtam, + 'bestaetigtvon' => $bestaetigtvon, + 'datum' => $datum, + 'rt_stufe' => $rt_stufe + ] + ); + if (isError($result)) + { + $this->db->trans_rollback(); + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } + + + if($isStudent) + { + //check Studentlehrverband + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->checkIfUid($prestudent_id); + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + if (!hasData($result)) + { + $this->terminateWithError($this->p->t('lehre','error_no_student_for_prestudent'), self::ERROR_TYPE_GENERAL); + } + $student_uid = $result->retval; + + //process studentlehrverband + $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); + $result = $this->StudentlehrverbandModel->loadWhere( + array( + 'student_uid' => $student_uid, + 'studiensemester_kurzbz' => $studiensemester_kurzbz + ) + ); + if (isError($result)) + { + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + //Data of current Semester + $studentlvbData = current(getData($result) ? : []); + + $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); + $result = $this->StudentlehrverbandModel->processStudentlehrverband( + $student_uid, + $studentlvbData->studiengang_kz, + $ausbildungssemester, + $studentlvbData->verband, + $studentlvbData->gruppe, + $studiensemester_kurzbz + ); + if ($this->db->trans_status() === false || isError($result)) + { + $this->db->trans_rollback(); + return $this->terminateWithError($this->p->t('lehre','error_duringInsertUpdateLehrverband'), self::ERROR_TYPE_GENERAL); + } + } + $this->db->trans_commit(); + return $this->outputJsonSuccess(true); + } + + public function advanceStatus($key_prestudent_id, $key_status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester) + { + $isStudent = false; + + //get Studiengang von prestudent_id + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $result = $this->PrestudentModel->load([ + 'prestudent_id'=> $key_prestudent_id, + ]); + if(isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + $result = current(getData($result)); + + $stg = $result->studiengang_kz; + + if(!$this->permissionlib->isBerechtigt('admin', 'suid', $stg) && !$this->permissionlib->isBerechtigt('assistenz', 'suid', $stg)) + { + return $this->terminateWithError($this->p->t('lehre','error_keineSchreibrechte'), self::ERROR_TYPE_GENERAL); + } + + //Data Vorrücken + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + + $result = $this->PrestudentstatusModel->loadWhere( + array( + 'prestudent_id' => $key_prestudent_id, + 'status_kurzbz' => $key_status_kurzbz, + 'ausbildungssemester' => $key_ausbildungssemester, + 'studiensemester_kurzbz' => $key_studiensemester_kurzbz + ) + ); + + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + + elseif (!hasData($result)) + { + return $this->terminateWithError($this->p->t('lehre','error_noStatusFound'), self::ERROR_TYPE_GENERAL); + } + else + { + $statusData = current(getData($result)); + } + + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $result = $this->StudiensemesterModel->getNextFrom($key_studiensemester_kurzbz); + + if (isError($result)) + { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } + $studiensem_next = current(getData($result)); + $studiensem_next = $studiensem_next->studiensemester_kurzbz; + + $ausbildungssem_next = $key_ausbildungssemester+1; + + //check if Rolle already exists + $result = $this->PrestudentstatusModel->checkIfExistingPrestudentRolle( + $key_prestudent_id, + $key_status_kurzbz, + $studiensem_next, + $ausbildungssem_next + ); + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + if($result->retval == '1') + { + return $this->terminateWithError($this->p->t('lehre','error_rolleBereitsVorhanden'), self::ERROR_TYPE_GENERAL); + } + + //check if studentrolle already exists + if($key_status_kurzbz == 'Student') + { + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->checkIfExistingStudentRolle($key_prestudent_id); + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + if ($result->retval == "0") + { + return $this->terminateWithError($this->p->t('lehre','error_noStudstatus'), self::ERROR_TYPE_GENERAL); + } + } + + // Start DB transaction + $this->db->trans_begin(); + + //insert prestudentstatus + $uid = getAuthUID(); + $result = $this->PrestudentstatusModel->insert( + [ + 'prestudent_id' => $key_prestudent_id, + 'status_kurzbz' => $key_status_kurzbz, + 'studiensemester_kurzbz' => $studiensem_next, + 'ausbildungssemester' => $ausbildungssem_next, + 'insertamum' => date('c'), + 'insertvon' => $uid, + 'bestaetigtam' => date('c'), + 'bestaetigtvon' => $uid, + 'studienplan_id' => $statusData->studienplan_id, + 'datum' => date('c'), + 'anmerkung' => $statusData->anmerkung + ] + ); + + if (isError($result)) + { + $this->db->trans_rollback(); + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->checkIfUid($key_prestudent_id); + if(isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + if (!hasData($result)) + { + $this->terminateWithError($this->p->t('lehre','error_no_student_for_prestudent'), self::ERROR_TYPE_GENERAL); + } + $student_uid = $result->retval; + + //process studentlehrverband + $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); + $result = $this->StudentlehrverbandModel->loadWhere( + array( + 'student_uid' => $student_uid, + 'studiensemester_kurzbz' => $key_studiensemester_kurzbz + ) + ); + if (isError($result)) + { + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + //Data of current Semester + $result = getData($result) ? : []; + $studentlvbData = current($result); + + $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); + $result = $this->StudentlehrverbandModel->processStudentlehrverband( + $student_uid, + $studentlvbData->studiengang_kz, + $ausbildungssem_next, + $studentlvbData->verband, + $studentlvbData->gruppe, + $studiensem_next + ); + if ($this->db->trans_status() === false || isError($result)) + { + $this->db->trans_rollback(); + return $this->terminateWithError($this->p->t('lehre','error_duringInsertUpdateLehrverband'), self::ERROR_TYPE_GENERAL); + } + + $this->db->trans_commit(); + + return $this->outputJsonSuccess(true); + } + + public function confirmStatus($key_prestudent_id, $key_status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester) + { + $uid = getAuthUID(); + + //get Studiengang von prestudent_id + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $result = $this->PrestudentModel->load([ + 'prestudent_id'=> $key_prestudent_id, + ]); + if(isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + $result = current(getData($result)); + + $stg = $result->studiengang_kz; + + if (!$this->permissionlib->isBerechtigt('admin', 'suid', $stg) && !$this->permissionlib->isBerechtigt('assistenz', 'suid', $stg)) + { + return $this->terminateWithError($this->p->t('lehre','error_keineSchreibrechte'), self::ERROR_TYPE_GENERAL); + } + + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + + $result = $this->PrestudentstatusModel->loadWhere( + array( + 'prestudent_id' => $key_prestudent_id, + 'status_kurzbz' => $key_status_kurzbz, + 'ausbildungssemester' => $key_ausbildungssemester, + 'studiensemester_kurzbz' => $key_studiensemester_kurzbz + ) + ); + + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + + elseif (!hasData($result)) + { + return $this->terminateWithError($this->p->t('lehre','error_noStatusFound'), self::ERROR_TYPE_GENERAL); + } + + $statusData = current(getData($result)); + + //check if Status is unconfirmed.. + if($statusData->bestaetigtam != null) + { + //return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + return $this->terminateWithError($this->p->t('lehre','error_statusConfirmedYet'), self::ERROR_TYPE_GENERAL); + } + + //check if Bewerbung abgeschickt + if($statusData->bewerbung_abgeschicktamum == null) + { + return $this->terminateWithError($this->p->t('lehre','error_bewerbungNochNichtAbgeschickt'), self::ERROR_TYPE_GENERAL); + } + + $result = $this->PrestudentstatusModel->update( + [ + 'prestudent_id' => $key_prestudent_id, + 'status_kurzbz' => $key_status_kurzbz, + 'studiensemester_kurzbz' => $key_studiensemester_kurzbz, + 'ausbildungssemester' => $key_ausbildungssemester, + ], + [ + 'prestudent_id' => $key_prestudent_id, + 'status_kurzbz' => $key_status_kurzbz, + 'studiensemester_kurzbz' => $key_studiensemester_kurzbz, + 'ausbildungssemester' => $key_ausbildungssemester, + 'bestaetigtam' => date('c'), + 'bestaetigtvon' => $uid, + 'updateamum' => date('c'), + 'updatevon' => $uid + ] + ); + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + return $this->outputJsonSuccess(true); + } +} diff --git a/application/controllers/components/stv/Prestudent.php b/application/controllers/components/stv/Prestudent.php deleted file mode 100644 index 2a1364c87..000000000 --- a/application/controllers/components/stv/Prestudent.php +++ /dev/null @@ -1,316 +0,0 @@ -load->library('AuthLib'); - $this->load->library('VariableLib', ['uid' => getAuthUID()]); - - - // Load language phrases - $this->loadPhrases([ - 'ui', 'studierendenantrag' - ]); - } - - public function get($prestudent_id) - { - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - - $this->PrestudentModel->addSelect('*'); - $result = $this->PrestudentModel->loadWhere(['prestudent_id' => $prestudent_id]); - - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $this->outputJson(getError($result)); - } elseif (!hasData($result)) { - $this->output->set_status_header(REST_Controller::HTTP_NOT_FOUND); - $this->outputJson('NOT FOUND'); - } else { - $this->outputJson(current(getData($result))); - } - } - - public function updatePrestudent($prestudent_id) - { - $this->load->library('form_validation'); - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - - //get Studiengang von prestudent_id - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - $result = $this->PrestudentModel->load([ - 'prestudent_id'=> $prestudent_id, - ]); - if(isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - $result = current(getData($result)); - - $stg = $result->studiengang_kz; - - if (!$this->permissionlib->isBerechtigt('admin', 'suid', $stg) && !$this->permissionlib->isBerechtigt('assistenz', 'suid', $stg)) - { - $result = $this->p->t('lehre','error_keineSchreibrechte'); - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result); - } - - //TODO(Manu) API Controller - $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); - - - //Form validation - $this->form_validation->set_rules('priorisierung', 'Priorisierung', 'numeric', [ - 'numeric' => $this->p->t('ui','error_fieldNotNumeric',['field' => 'Priorisierung']) - ]); - - if ($this->form_validation->run() == false) - { - return $this->outputJsonError($this->form_validation->error_array()); - } - - $deltaData = $_POST; - - if(!$prestudent_id) - { - return $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - - $uid = getAuthUID(); - - $array_allowed_props_prestudent = [ - 'aufmerksamdurch_kurzbz', - 'studiengang_kz', - 'gsstudientyp_kurzbz', - 'person_id', - 'berufstaetigkeit_code', - 'ausbildungcode', - 'zgv_code', - 'zgvort', - 'zgvdatum', - 'zgvnation', - 'zgvmas_code', - 'zgvmaort', - 'zgvmadatum', - 'zgvmanation', - 'facheinschlberuf', - 'bismelden', - 'anmerkung', - 'dual', - 'zgvdoktor_code', - 'zgvdoktorort', - 'zgvdoktordatum', - 'zgvdoktornation', - 'aufnahmegruppe_kurzbz', - 'priorisierung', - 'foerderrelevant', - 'zgv_erfuellt', - 'zgvmas_erfuellt', - 'zgvdoktor_erfuellt', - 'mentor', - 'aufnahmeschluessel', - 'standort_code' - ]; - - $update_prestudent = array(); - foreach ($array_allowed_props_prestudent as $prop) - { - $val = isset($deltaData[$prop]) ? $deltaData[$prop] : null; - if ($val !== null || $prop == 'foerderrelevant') { - $update_prestudent[$prop] = $val; - } - } - - $update_prestudent['updateamum'] = date('c'); - $update_prestudent['updatevon'] = $uid; - - //utf8-decode for special chars (eg tag der offenen Tür, FH-Führer) - function utf8_decode_if_string($value) - { - if (is_string($value)) { - return utf8_decode($value); - } else { - return $value; - } - } - $update_prestudent_encoded = array_map('utf8_decode_if_string', $update_prestudent); - - if (count($update_prestudent) && $prestudent_id === null) { - $this->output->set_status_header(REST_Controller::HTTP_BAD_REQUEST); - // TODO(manu): check phrase - //return $this->outputJson("Kein/e PrestudentIn vorhanden!"); - return $this->outputJson($this->p->t('studierendenantrag','error_no_prestudent', $prestudent_id)); - } - - if (count($update_prestudent)) - { - $result = $this->PrestudentModel->update( - $prestudent_id, - $update_prestudent_encoded - ); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - return $this->outputJsonSuccess(true); - } - } - - public function getHistoryPrestudents($person_id) - { - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - - $result = $this->PrestudentModel->getHistoryPrestudents($person_id); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson(getData($result) ?: []); - } - - public function getBezeichnungZgv() - { - $this->load->model('codex/Zgv_model', 'ZgvModel'); - - $this->ZgvModel->addOrder('zgv_code'); - - $result = $this->ZgvModel->load(); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson($result); - } - - public function getBezeichnungDZgv() - { - $this->load->model('codex/Zgvdoktor_model', 'ZgvdoktorModel'); - - $this->ZgvdoktorModel->addOrder('zgvdoktor_code'); - - $result = $this->ZgvdoktorModel->load(); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson($result); - } - - public function getBezeichnungMZgv() - { - $this->load->model('codex/Zgvmaster_model', 'ZgvmasterModel'); - - $this->ZgvmasterModel->addOrder('zgvmas_code'); - - $result = $this->ZgvmasterModel->load(); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson($result); - } - - public function getAusbildung() - { - $this->load->model('codex/Ausbildung_model', 'AusbildungModel'); - - $this->AusbildungModel->addOrder('ausbildungcode'); - - $result = $this->AusbildungModel->load(); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson($result); - } - - public function getAufmerksamdurch() - { - $this->load->model('codex/Aufmerksamdurch_model', 'AufmerksamdurchModel'); - - $this->AufmerksamdurchModel->addOrder('aufmerksamdurch_kurzbz'); - - $result = $this->AufmerksamdurchModel->load(); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson($result); - } - - public function getBerufstaetigkeit() - { - $this->load->model('codex/Berufstaetigkeit_model', 'BerufstaetigkeitModel'); - - $this->BerufstaetigkeitModel->addOrder('berufstaetigkeit_code'); - - $result = $this->BerufstaetigkeitModel->load(); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson($result); - } - - public function getTypenStg() - { - $this->load->model('education/Gsstudientyp_model', 'GsstudientypModel'); - - $this->GsstudientypModel->addOrder('gsstudientyp_kurzbz'); - - $result = $this->GsstudientypModel->load(); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson($result); - } - - public function getStudiensemester() - { - $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); - - $this->StudiensemesterModel->addOrder('start', 'DESC'); - $this->StudiensemesterModel->addLimit(20); - - $result = $this->StudiensemesterModel->load(); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson($result); - } - - public function getStudienplaene($prestudent_id) - { - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - - $result = $this->PrestudentModel->loadWhere( - array('prestudent_id' => $prestudent_id) - ); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - - $result = current(getData($result)); - $studiengang_kz = $result->studiengang_kz; - - $this->load->model('organisation/Studienplan_model', 'StudienplanModel'); - - $this->StudienplanModel->addOrder('studienplan_id', 'DESC'); - - $result = $this->StudienplanModel->getStudienplaene($studiengang_kz); - - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson($result); - } -} diff --git a/application/controllers/components/stv/Status.php b/application/controllers/components/stv/Status.php deleted file mode 100644 index ac880be37..000000000 --- a/application/controllers/components/stv/Status.php +++ /dev/null @@ -1,1399 +0,0 @@ -load->library('AuthLib'); - $this->load->library('VariableLib', ['uid' => getAuthUID()]); - $this->load->library('PermissionLib'); - - // Load language phrases - $this->loadPhrases([ - 'ui', 'bismeldestichtag','lehre' - ]); - } - - public function getHistoryPrestudent($prestudent_id) - { - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - - $result = $this->PrestudentModel->getHistoryPrestudent($prestudent_id); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson(getData($result) ?: []); - } - - public function getStatusgruende() - { - $this->load->model('crm/Statusgrund_model', 'StatusgrundModel'); - - $result = $this->StatusgrundModel->load(); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson($result); - } - - public function getLastBismeldestichtag() - { - $this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel'); - - $result = $this->BismeldestichtagModel->getLastReachedMeldestichtag(); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - } - $this->outputJson($result); - } - - public function isLastStatus($prestudent_id) - { - $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - $result = $this->PrestudentstatusModel->checkIfLastStatusEntry($prestudent_id); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result); - } - if($result->retval == "1") - { - return $this->outputJson($result->retval); - } - $this->outputJson($result); - } - - public function addNewStatus($prestudent_id) - { - //get Studiengang von prestudent_id - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - $this->PrestudentModel->addJoin('public.tbl_person p', 'ON (p.person_id = public.tbl_prestudent.person_id)'); - $result = $this->PrestudentModel->load([ - 'prestudent_id'=> $prestudent_id, - ]); - if(isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - $result = current(getData($result)); - - //Variablen für Statuscheck - $stg = $result->studiengang_kz; - $reihungstest_angetreten = $result->reihungstestangetreten; - $name = trim($result->vorname . " ". $result->nachname); - $zgv_code = $result->zgv_code; - - $isStudent = false; - - if(!$this->permissionlib->isBerechtigt('admin', 'suid', $stg) && !$this->permissionlib->isBerechtigt('assistenz', 'suid', $stg)) - { - $result = "Sie haben keine Schreibrechte fuer diesen Studiengang!"; - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result); - } - - $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); - $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - - $uid = getAuthUID(); - $status_kurzbz = $this->input->post('status_kurzbz'); - $ausbildungssemester = $this->input->post('ausbildungssemester'); - $datum = $this->input->post('datum'); - $bestaetigtam = $this->input->post('bestaetigtam'); - $bewerbung_abgeschicktamum = $this->input->post('bewerbung_abgeschicktamum'); - $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); - $anmerkung = $this->input->post('anmerkung'); - $statusgrund_id = $this->input->post('statusgrund_id'); - $rt_stufe = $this->input->post('rt_stufe'); - $bestaetigtvon = $uid; - - //GET lastStatus - $result = $this->PrestudentstatusModel->getLastStatus($prestudent_id); - - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - elseif(!hasData($result)) - { - $lastStatusData = []; - } - else - $lastStatusData = current(getData($result)); - - //Different handling depending on newStatus - //Todo(manu) check later with multiactions - /* if($status_kurzbz == 'Absolvent' || $status_kurzbz == 'Diplomand') - { - //$studiensemester = $semester_aktuell; - $ausbildungssemester = $lastStatusData->ausbildungssemester; - }*/ - - /* if($status_kurzbz != 'Student') - { - $ausbildungssemester = $lastStatusData->ausbildungssemester; - }*/ - - //check if Rolle already exists - $result = $this->PrestudentstatusModel->checkIfExistingPrestudentRolle( - $prestudent_id, - $status_kurzbz, - $studiensemester_kurzbz, - $ausbildungssemester - ); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if($result->retval == '1') - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result->code); - } - - - //Check Reihungstest - if(REIHUNGSTEST_CHECK) - { - if($status_kurzbz=='Bewerber' && !$reihungstest_angetreten) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($name . ": Um einen Interessenten zum Bewerber zu machen, muss die Person das Reihungstestverfahren abgeschlossen haben"); - } - } - - //Check ZGV - if(!defined("ZGV_CHECK") || ZGV_CHECK) - { - if($status_kurzbz=='Bewerber' && $zgv_code=='') - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($name . ": Um einen Interessenten zum Bewerber zu machen, muss die Zugangsvoraussetzung eingetragen sein."); - } - } - - //Check ZGV-Master - $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); - $result = $this->StudiengangModel->load([ - 'studiengang_kz'=> $stg - ]); - if(isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - $result = current(getData($result)); - $typ = $result->typ; - - if(!defined("ZGV_CHECK") || ZGV_CHECK) - { - if($status_kurzbz=='Bewerber' && $zgv_code=='' && $typ=='m') - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($name . ": Um einen Interessenten zum Bewerber zu machen, muss die Zugangsvoraussetzung Master eingetragen sein."); - } - } - - //check if bewerberstatus exists - if($status_kurzbz == 'Aufgenommener' || $status_kurzbz == 'Wartender') - { - //TODO(manu) erst später für multiactions releveant - //FAS: Aufnahme ist möglich: Beispiel prestudent_id = 129629 - - $result = $this->PrestudentstatusModel->checkIfExistingBewerberstatus($prestudent_id, $name); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if($result->retval == "0") - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result->code); - } - } - - //check if studentrolle already exists - //TODO(manu) eigener Code für Diplomand? - if($status_kurzbz == 'Student' || $status_kurzbz == 'Diplomand') - { - $this->load->model('crm/Student_model', 'StudentModel'); - $result = $this->StudentModel->checkIfExistingStudentRolle($prestudent_id); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if($result->retval == "0") - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result->code); - } - if($result->retval != "0") - { - $isStudent = true; - } - } - - $isBerechtigtNoStudstatusCheck = $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'); - - if(!$isBerechtigtNoStudstatusCheck) - { - //Block STATUSCHECKS - $new_status_datum = isset($datum) ? $datum : date('Y-m-d'); - $result = $this->PrestudentstatusModel->checkDatumNewStatus($new_status_datum); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - - $result = $this->PrestudentstatusModel->checkIfValidStatusHistory( - $prestudent_id, - $status_kurzbz, - $studiensemester_kurzbz, - $new_status_datum, - $ausbildungssemester - ); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - - //check if Bismeldestichtag erreicht - $this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel'); - $result = $this->BismeldestichtagModel->checkIfMeldestichtagErreicht($new_status_datum); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if($result->retval == "1") - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result->code)); - } - } - - - // Start DB transaction - $this->db->trans_begin(); // Beginnen der Transaktion - - $result = $this->PrestudentstatusModel->insert( - [ - 'prestudent_id' => $prestudent_id, - 'status_kurzbz' => $status_kurzbz, - 'bewerbung_abgeschicktamum' => $bewerbung_abgeschicktamum, - 'studiensemester_kurzbz' => $studiensemester_kurzbz, - 'studienplan_id' => $lastStatusData->studienplan_id, - 'ausbildungssemester' => $ausbildungssemester, - 'anmerkung' => $anmerkung, - 'statusgrund_id' => $statusgrund_id, - 'insertvon' => $uid, - 'insertamum' => date('c'), - 'bestaetigtam' => $bestaetigtam, - 'bestaetigtvon' => $bestaetigtvon, - 'datum' => $datum, - 'rt_stufe' => $rt_stufe - ] - ); - - if ($this->db->trans_status() === false || isError($result)) - { - $this->db->trans_rollback(); - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - - - - if($isStudent) - { - $this->load->model('crm/Student_model', 'StudentModel'); - $result = $this->StudentModel->checkIfUid($prestudent_id); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - $student_uid = $result->retval; - - //load student - $result = $this->StudentModel->loadWhere( - array( - 'student_uid' => $student_uid - ) - ); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $this->outputJson($result); - } - if (!hasData($result)) { - $this->outputJson($result); - } - - $studentData = current(getData($result)); - $verband = $studentData->verband == '' ? '' : $studentData->verband; - $gruppe = $studentData->gruppe == '' ? '' : $studentData->gruppe; - $studiengang_kz = $studentData->studiengang_kz; - - //Handle Abbrecher and Unterbrecher - //TODO (manu) implement later with multiactions - // not active yet: works only for "status ändern" in FAS - /* if($status_kurzbz == 'Abbrecher' || $status_kurzbz == 'Unterbrecher') - { - $ausbildungssemester = 0; - $gruppe = ''; - $verband = $status_kurzbz == 'Abbrecher' ? 'A' : 'B'; - }*/ - - //process studentlehrverband - $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); - $result = $this->StudentlehrverbandModel->processStudentlehrverband( - $student_uid, - $studiengang_kz, - $ausbildungssemester, - $verband, - $gruppe, - $studiensemester_kurzbz - ); - if ($this->db->trans_status() === false || isError($result)) - { - $this->db->trans_rollback(); - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result->code); - } - - //Student updaten (fuer Abbrecher und Unterbrecher) - //not active yet: works only for "status ändern" in FAS - //Todo(Manu) Later for multiactions - - /* - if($status_kurzbz == 'Abbrecher' || $status_kurzbz == 'Unterbrecher') - { - $result = $this->StudentModel->update( - [ - 'student_uid' => $student_uid - ], - [ - 'studiengang_kz' => $studiengang_kz, - 'semester' => $ausbildungssemester, - 'verband' => $verband, - 'gruppe' => $gruppe, - 'updateamum' => date('c'), - 'updatevon' => $uid - ]); - if ($this->db->trans_status() === false || isError($result)) - { - $this->db->trans_rollback(); - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result->code); - } - } - */ - } - - $this->db->trans_commit(); - - return $this->outputJsonSuccess(true); - } - - - - public function loadStatus() - { - $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); - - $prestudent_id = $this->input->post('prestudent_id'); - $status_kurzbz = $this->input->post('status_kurzbz'); - $ausbildungssemester = $this->input->post('ausbildungssemester'); - $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); - - $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - - $result = $this->PrestudentstatusModel->loadWhere( - array( - 'prestudent_id' => $prestudent_id, - 'status_kurzbz' => $status_kurzbz, - 'ausbildungssemester' => $ausbildungssemester, - 'studiensemester_kurzbz' => $studiensemester_kurzbz - ) - ); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $this->outputJson($result); - } - - elseif (!hasData($result)) { - $this->outputJson($result); - } - else - { - $this->outputJsonSuccess(current(getData($result))); - } - } - - public function deleteStatus() - { - $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - - $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); - - $prestudent_id = $this->input->post('prestudent_id'); - $status_kurzbz = $this->input->post('status_kurzbz'); - $ausbildungssemester = $this->input->post('ausbildungssemester'); - $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); - $deletePrestudent = false; - - $isBerechtigtAdmin = $this->permissionlib->isBerechtigt('admin', null, 'suid'); - $isBerechtigtNoStudstatusCheck = $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung', null, 'suid'); - - - if($status_kurzbz=="Student" && !$isBerechtigtAdmin && !$isBerechtigtNoStudstatusCheck) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson("Studentenrolle kann nur durch den Administrator geloescht werden"); - } - - //check if last status - $result = $this->PrestudentstatusModel->checkIfLastStatusEntry($prestudent_id); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result); - } - if($result->retval == "1") - { - //Berechtigungen nach Check prüfen! - if(!$isBerechtigtAdmin && !$isBerechtigtNoStudstatusCheck) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result->code); - } - else - { - $deletePrestudent = true; - } - } - - // Start DB transaction - $this->db->trans_begin(); - - //load rolle für LOG sqlundo - $result = $this->PrestudentstatusModel->loadWhere( - array( - 'prestudent_id' => $prestudent_id, - 'status_kurzbz' => $status_kurzbz, - 'ausbildungssemester' => $ausbildungssemester, - 'studiensemester_kurzbz' => $studiensemester_kurzbz - ) - ); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result); - } - if (!hasData($result)) { - return $this->outputJson($result); - } - - //Data of current Rolle - $statusData = current(getData($result)); - - $datum = $statusData->datum == '' ? 'null' : $statusData->datum; - $insertamum = $statusData->insertamum == '' ? 'null' : $statusData->insertamum; - $insertvon = $statusData->insertvon == '' ? 'null' : $statusData->insertvon; - $updateamum = $statusData->updateamum == '' ? 'null' : $statusData->updateamum; - $updatevon = $statusData->updatevon == '' ? 'null' : $statusData->updatevon; - $ext_id = $statusData->ext_id == '' ? 'null' : $statusData->ext_id; - $orgform_kurzbz = $statusData->orgform_kurzbz == '' ? 'null' : $statusData->orgform_kurzbz; - $bestaetigtam = $statusData->bestaetigtam == '' ? 'null' : $statusData->bestaetigtam; - $bestaetigtvon = $statusData->bestaetigtvon == '' ? 'null' : $statusData->bestaetigtvon; - $anmerkung = $statusData->anmerkung == '' ? 'null' : $statusData->anmerkung; - $bewerbung_abgeschicktamum = $statusData->bewerbung_abgeschicktamum == '' ? 'null' : $statusData->bewerbung_abgeschicktamum; - $studienplan_id = $statusData->studienplan_id == '' ? 'null' : $statusData->studienplan_id; - $rt_stufe = $statusData->rt_stufe == '' ? 'null' : $statusData->rt_stufe; - $statusgrund_id = $statusData->statusgrund_id == '' ? 'null' : $statusData->statusgrund_id; - - $quotes_datum = $datum == "null" ? " " : "'"; - $quotes_insertamum = $insertamum == "null" ? " " : "'"; - $quotes_insertvon = $insertvon == "null" ? " " : "'"; - $quotes_updateamum = $updateamum == "null" ? " " : "'"; - $quotes_updatevon = $updatevon == "null" ? " " : "'"; - $quotes_ext_id = $ext_id == "null" ? " " : "'"; - $quotes_orgform_kurzbz = $orgform_kurzbz == "null" ? " " : "'"; - $quotes_bestaetigtam = $bestaetigtam == "null" ? " " : "'"; - $quotes_bestaetigtvon = $bestaetigtvon == "null" ? " " : "'"; - $quotes_anmerkung = $anmerkung == "null" ? " " : "'"; - $quotes_bewerbung_abgeschicktamum = $bewerbung_abgeschicktamum == "null" ? " " : "'"; - $quotes_studienplan_id = $studienplan_id == "null" ? " " : "'"; - $quotes_rt_stufe = $rt_stufe == "null" ? " " : "'"; - $quotes_statusgrund_id = $statusgrund_id == "null" ? " " : "'"; - - $sqlundo = - " - INSERT INTO public.tbl_prestudentstatus(prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester, - datum, insertamum, insertvon, updateamum, updatevon, ext_id, orgform_kurzbz, bestaetigtam, bestaetigtvon, - anmerkung, bewerbung_abgeschicktamum, studienplan_id, rt_stufe, statusgrund_id) - VALUES('" . $prestudent_id . "','" . $status_kurzbz . "','" . $studiensemester_kurzbz . "','" . $ausbildungssemester . "'," - . $quotes_datum . $datum . $quotes_datum . "," - . $quotes_insertamum . $insertamum . $quotes_insertamum . "," - . $quotes_insertvon . $insertvon . $quotes_insertvon . "," - . $quotes_updateamum . $updateamum . $quotes_updateamum . "," - . $quotes_updatevon . $updatevon . $quotes_updatevon . "," - . $quotes_ext_id . $ext_id . $quotes_ext_id . "," - . $quotes_orgform_kurzbz . $orgform_kurzbz . $quotes_orgform_kurzbz . "," - . $quotes_bestaetigtam . $bestaetigtam . $quotes_bestaetigtam . "," - . $quotes_bestaetigtvon . $bestaetigtvon . $quotes_bestaetigtvon . "," - . $quotes_anmerkung . $anmerkung . $quotes_anmerkung . "," - . $quotes_bewerbung_abgeschicktamum . $bewerbung_abgeschicktamum . $quotes_bewerbung_abgeschicktamum . "," - . $quotes_studienplan_id . $studienplan_id . $quotes_studienplan_id . "," - . $quotes_rt_stufe . $rt_stufe . $quotes_rt_stufe . "," - . $quotes_statusgrund_id . $statusgrund_id . $quotes_statusgrund_id . "); - "; - - //Delete Status - $result = $this->PrestudentstatusModel->delete( - [ - 'prestudent_id' => $prestudent_id, - 'status_kurzbz' => $status_kurzbz, - 'ausbildungssemester' => $ausbildungssemester, - 'studiensemester_kurzbz' => $studiensemester_kurzbz - ] - ); - - if($this->db->trans_status() === false || isError($result)) - { - $this->db->trans_rollback(); - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result); - } - if(!hasData($result)) - { - $this->outputJson($result); - } - - //save log delete prestudentstatus - $uid = getAuthUID(); - $beschreibung = 'Loeschen der Rolle ' . $status_kurzbz . " bei " . $prestudent_id; - $sql = "DELETE FROM public.tbl_prestudentstatus - WHERE prestudent_id = " . $prestudent_id . " - AND status_kurzbz = '" . $status_kurzbz . "' - AND ausbildungssemester ='" . $ausbildungssemester . "' - AND studiensemester_kurzbz = '" . $studiensemester_kurzbz . "'"; - - $this->load->model('system/Log_model', 'LogModel'); - $result = $this->LogModel->insert([ - 'mitarbeiter_uid' => $uid, - 'beschreibung' => $beschreibung, - 'sql' => $sql, - 'sqlundo' => $sqlundo - ]); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if (!hasData($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - - $logId = $result->retval; - - //Delete Studentlehrverband if no Status left - $result = $this->PrestudentstatusModel->getLastStatus($prestudent_id, $studiensemester_kurzbz); - - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if (!hasData($result)) - { - //get student_uid - $this->load->model('crm/Student_model', 'StudentModel'); - $result = $this->StudentModel->checkIfUid($prestudent_id); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if (!hasData($result)) - { - $this->outputJson($result); - } - $student_uid = $result->retval; - - $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); - $result = $this->StudentlehrverbandModel->delete( - array( - 'student_uid' => $student_uid, - 'studiensemester_kurzbz' => $studiensemester_kurzbz - ) - ); - if ($this->db->trans_status() === false || isError($result)) - { - $this->db->trans_rollback(); - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $this->outputJson("Fehler beim Löschen der Lehrverbandszuordnung"); - } - if (!hasData($result)) - { - $this->outputJson($result); - //var_dump("no data Löschen der Lehrverbandszuordnung"); - } - $this->outputJsonSuccess(true); - } - - //Delete Prestudent if no data is left - - if($deletePrestudent && $isBerechtigtAdmin) - { - //TODO(manu) check all connected tables - - //check if existing dokumentprestudent - $output = ""; - $this->load->model('crm/Dokumentprestudent_model', 'DokumentprestudentModel'); - $result = $this->DokumentprestudentModel->loadWhere( - array( - 'prestudent_id' => $prestudent_id - ) - ); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $this->outputJson($result); - } - if (hasData($result)) - { - $documentPrestudent = $result->retval; - foreach ($documentPrestudent as $doc) - { - $output .= ' '. $doc->dokument_kurzbz; - } - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson("Es sind noch zu loeschende Dokumente vorhanden: " . $output); - } - - //check if Anrechnungen tbl_anrechnung - $output_anrechnungen = ''; - $this->load->model('education/Anrechnung_model', 'AnrechnungModel'); - $result = $this->AnrechnungModel->loadWhere( - array( - 'prestudent_id' => $prestudent_id - ) - ); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $this->outputJson($result); - } - if (hasData($result)) - { - $anrechnungPrestudent = $result->retval; - foreach ($anrechnungPrestudent as $anr) - { - $output_anrechnungen .= ' '. $anr->anrechnung_id; - } - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson("Mit dieser Prestudent_id sind verbundene Anrechnungen vorhanden (id) : " . $output_anrechnungen); - } - - //DELETE Prestudent - - //save log delete prestudent - $uid = getAuthUID(); - $beschreibung = 'Loeschen der Prestudent ID ' . $prestudent_id; - $sql = "DELETE FROM public.tbl_prestudent - WHERE prestudent_id = " . $prestudent_id; - - //load prestudent für LOG sqlundo - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - $result = $this->PrestudentModel->loadWhere( - array( - 'prestudent_id' => $prestudent_id - ) - ); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result); - } - if (!hasData($result)) { - return $this->outputJson($result); - } - - //Data of current Prestudent - $prestudentData = current(getData($result)); - - $aufmerksamdurch_kurzbz = $prestudentData->aufmerksamdurch_kurzbz == '' ? 'null' : $prestudentData->aufmerksamdurch_kurzbz; - $studiengang_kz = $prestudentData->studiengang_kz == '' ? 'null' : $prestudentData->studiengang_kz; - $berufstaetigkeit_code = $prestudentData->berufstaetigkeit_code == '' ? 'null' : $prestudentData->berufstaetigkeit_code; - $ausbildungcode = $prestudentData->ausbildungcode == '' ? 'null' : $prestudentData->ausbildungcode; - $zgv_code = $prestudentData->zgv_code == '' ? 'null' : $prestudentData->zgv_code; - $zgvort = $prestudentData->zgvort == '' ? 'null' : $prestudentData->zgvort; - $zgvdatum = $prestudentData->zgvdatum == '' ? 'null' : $prestudentData->zgvdatum; - $zgvnation = $prestudentData->zgvnation == '' ? 'null' : $prestudentData->zgvnation; - $zgv_erfuellt = $prestudentData->zgv_erfuellt == '' ? 'null' : $prestudentData->zgv_erfuellt; - $zgvmas_code = $prestudentData->zgvmas_code == '' ? 'null' : $prestudentData->zgvmas_code; - $zgvmaort = $prestudentData->zgvmaort == '' ? 'null' : $prestudentData->zgvmaort; - $zgvmadatum = $prestudentData->zgvmadatum == '' ? 'null' : $prestudentData->zgvmadatum; - $zgvmanation = $prestudentData->zgvmanation == '' ? 'null' : $prestudentData->zgvmanation; - $zgvmas_erfuellt = $prestudentData->zgvmas_erfuellt == '' ? 'null' : $prestudentData->zgvmas_erfuellt; - $aufnahmeschluessel = $prestudentData->aufnahmeschluessel == '' ? 'null' : $prestudentData->aufnahmeschluessel; - $facheinschlberuf = $prestudentData->facheinschlberuf == '' ? 'null' : $prestudentData->facheinschlberuf; - $anmeldungreihungstest = $prestudentData->anmeldungreihungstest == '' ? 'null' : $prestudentData->anmeldungreihungstest; - $reihungstestangetreten = $prestudentData->reihungstestangetreten == 1 ? 'true' : 'false'; - $reihungstest_id = $prestudentData->reihungstest_id == '' ? 'null' : $prestudentData->reihungstest_id; - $rt_gesamtpunkte = $prestudentData->rt_gesamtpunkte == '' ? 'null' : $prestudentData->rt_gesamtpunkte; - $rt_punkte1 = $prestudentData->rt_punkte1 == '' ? 'null' : $prestudentData->rt_punkte1; - $rt_punkte2 = $prestudentData->rt_punkte2 == '' ? 'null' : $prestudentData->rt_punkte2; - $rt_punkte3 = $prestudentData->rt_punkte3 == '' ? 'null' : $prestudentData->rt_punkte3; - $bismelden = $prestudentData->bismelden == 1 ? 'true' : 'false'; - $person_id = $prestudentData->person_id == '' ? 'null' : $prestudentData->person_id; - $anmerkung = $prestudentData->anmerkung == '' ? 'null' : $prestudentData->anmerkung; - $mentor = $prestudentData->mentor == '' ? 'null' : $prestudentData->mentor; - $ext_id = $prestudentData->ext_id == '' ? 'null' : $prestudentData->ext_id; - $dual = $prestudentData->dual == 1 ? 'true' : 'false'; - $ausstellungsstaat = $prestudentData->ausstellungsstaat == '' ? 'null' : $prestudentData->ausstellungsstaat; - $zgvdoktor_code = $prestudentData->zgvdoktor_code == '' ? 'null' : $prestudentData->zgvdoktor_code; - $zgvdoktorort = $prestudentData->zgvdoktorort == '' ? 'null' : $prestudentData->zgvdoktorort; - $zgvdoktordatum = $prestudentData->zgvdoktordatum == '' ? 'null' : $prestudentData->zgvdoktordatum; - $zgvdoktornation = $prestudentData->zgvdoktornation == '' ? 'null' : $prestudentData->zgvdoktornation; - $gsstudientyp_kurzbz = $prestudentData->gsstudientyp_kurzbz == '' ? 'null' : $prestudentData->gsstudientyp_kurzbz; - $aufnahmegruppe_kurzbz = $prestudentData->aufnahmegruppe_kurzbz == '' ? 'null' : $prestudentData->aufnahmegruppe_kurzbz; - $priorisierung = $prestudentData->priorisierung == '' ? 'null' : $prestudentData->priorisierung; - $zgvdoktor_erfuellt= $prestudentData->zgvdoktor_erfuellt == '' ? 'null' : $prestudentData->zgvdoktor_erfuellt; - - $quotes_aufmerksamdurch_kurzbz = $aufmerksamdurch_kurzbz == "null" ? " " : "'"; - $quotes_studiengang_kz = $studiengang_kz == "null" ? " " : "'"; - $quotes_berufstaetigkeit_code = $berufstaetigkeit_code == "null" ? " " : "'"; - $quotes_ausbildungcode = $ausbildungcode == "null" ? " " : "'"; - $quotes_zgv_code = $zgv_code == "null" ? " " : "'"; - $quotes_zgvort = $zgvort == "null" ? " " : "'"; - $quotes_zgvdatum = $zgvdatum == "null" ? " " : "'"; - $quotes_zgvnation = $zgvnation == "null" ? " " : "'"; - $quotes_zgv_erfuellt = $zgv_erfuellt == "null" ? " " : "'"; - $quotes_zgvmas_code = $zgvmas_code == "null" ? " " : "'"; - $quotes_zgvmaort = $zgvmaort == "null" ? " " : "'"; - $quotes_zgvmadatum = $zgvmadatum == "null" ? " " : "'"; - $quotes_zgvmanation = $zgvmanation == "null" ? " " : "'"; - $quotes_zgvmas_erfuellt = $zgvmas_erfuellt == "null" ? " " : "'"; - $quotes_aufnahmeschluessel = $aufnahmeschluessel == "null" ? " " : "'"; - $quotes_facheinschlberuf = $facheinschlberuf == "null" ? " " : "'"; - $quotes_anmeldungreihungstest = $anmeldungreihungstest == "null" ? " " : "'"; - $quotes_reihungstestangetreten = $reihungstestangetreten == "null" ? " " : "'"; - $quotes_reihungstest_id = $reihungstest_id == "null" ? " " : "'"; - $quotes_rt_gesamtpunkte = $rt_gesamtpunkte == "null" ? " " : "'"; - $quotes_rt_punkte1 = $rt_punkte1 == "null" ? " " : "'"; - $quotes_rt_punkte2 = $rt_punkte2 == "null" ? " " : "'"; - $quotes_rt_punkte3 = $rt_punkte3 == "null" ? " " : "'"; - $quotes_bismelden = $bismelden == "null" ? " " : "'"; - $quotes_person_id = $person_id == "null" ? " " : "'"; - $quotes_anmerkung = $anmerkung == "null" ? " " : "'"; - $quotes_mentor = $mentor == "null" ? " " : "'"; - $quotes_ext_id = $ext_id == "null" ? " " : "'"; - $quotes_dual = $dual == "null" ? " " : "'"; - $quotes_ausstellungsstaat = $ausstellungsstaat == "null" ? " " : "'"; - $quotes_zgvdoktor_code = $zgvdoktor_code == "null" ? " " : "'"; - $quotes_zgvdoktorort = $zgvdoktorort == "null" ? " " : "'"; - $quotes_zgvdoktordatum = $zgvdoktordatum == "null" ? " " : "'"; - $quotes_zgvdoktornation = $zgvdoktornation == "null" ? " " : "'"; - $quotes_gsstudientyp_kurzbz = $gsstudientyp_kurzbz == "null" ? " " : "'"; - $quotes_aufnahmegruppe_kurzbz = $aufnahmegruppe_kurzbz == "null" ? " " : "'"; - $quotes_priorisierung = $priorisierung == "null" ? " " : "'"; - $quotes_zgvdoktor_erfuellt = $zgvdoktor_erfuellt == "null" ? " " : "'"; - - - $sqlundo = - " - INSERT INTO public.tbl_prestudent(prestudent_id, aufmerksamdurch_kurzbz, studiengang_kz, berufstaetigkeit_code, ausbildungcode, - zgv_code, zgvort, zgvdatum, zgvnation,zgv_erfuellt, zgvmas_code, zgvmaort, zgvmadatum, zgvmanation,zgvmas_erfuellt, - aufnahmeschluessel, facheinschlberuf, anmeldungreihungstest, reihungstestangetreten, reihungstest_id, - rt_gesamtpunkte, rt_punkte1, rt_punkte2, rt_punkte3, bismelden, person_id, anmerkung, mentor, ext_id, - dual, ausstellungsstaat, zgvdoktor_code, zgvdoktorort, zgvdoktordatum, zgvdoktornation, - gsstudientyp_kurzbz, aufnahmegruppe_kurzbz, priorisierung, zgvdoktor_erfuellt) - VALUES('" . $prestudent_id . "'," - . $quotes_aufmerksamdurch_kurzbz . $aufmerksamdurch_kurzbz . $quotes_aufmerksamdurch_kurzbz . "," - . $quotes_studiengang_kz . $studiengang_kz . $quotes_studiengang_kz . "," - . $quotes_berufstaetigkeit_code . $berufstaetigkeit_code . $quotes_berufstaetigkeit_code . "," - . $quotes_ausbildungcode . $ausbildungcode . $quotes_ausbildungcode . "," - . $quotes_zgv_code . $zgv_code . $quotes_zgv_code . "," - . $quotes_zgvort . $zgvort . $quotes_zgvort . "," - . $quotes_zgvdatum . $zgvdatum . $quotes_zgvdatum . "," - . $quotes_zgvnation . $zgvnation . $quotes_zgvnation . "," - . $quotes_zgv_erfuellt . $zgv_erfuellt . $quotes_zgv_erfuellt . "," - . $quotes_zgvmas_code . $zgvmas_code . $quotes_zgvmas_code . "," - . $quotes_zgvmaort . $zgvmaort . $quotes_zgvmaort . "," - . $quotes_zgvmadatum . $zgvmadatum . $quotes_zgvmadatum . "," - . $quotes_zgvmanation . $zgvmanation . $quotes_zgvmanation . "," - . $quotes_zgvmas_erfuellt . $zgvmas_erfuellt . $quotes_zgvmas_erfuellt . "," - . $quotes_aufnahmeschluessel . $aufnahmeschluessel . $quotes_aufnahmeschluessel . "," - . $quotes_facheinschlberuf . $facheinschlberuf . $quotes_facheinschlberuf . "," - . $quotes_anmeldungreihungstest . $anmeldungreihungstest . $quotes_anmeldungreihungstest . "," - . $quotes_reihungstestangetreten . $reihungstestangetreten . $quotes_reihungstestangetreten . "," - . $quotes_reihungstest_id . $reihungstest_id . $quotes_reihungstest_id . "," - . $quotes_rt_gesamtpunkte . $rt_gesamtpunkte . $quotes_rt_gesamtpunkte . "," - . $quotes_rt_punkte1 . $rt_punkte1 . $quotes_rt_punkte1 . "," - . $quotes_rt_punkte2 . $rt_punkte2 . $quotes_rt_punkte2 . "," - . $quotes_rt_punkte3 . $rt_punkte3 . $quotes_rt_punkte3 . "," - . $quotes_bismelden . $bismelden . $quotes_bismelden . "," - . $quotes_person_id . $person_id . $quotes_person_id . "," - . $quotes_anmerkung . $anmerkung . $quotes_anmerkung . "," - . $quotes_mentor . $mentor . $quotes_mentor . "," - . $quotes_ext_id . $ext_id . $quotes_ext_id . "," - . $quotes_dual . $dual . $quotes_dual . "," - . $quotes_ausstellungsstaat . $ausstellungsstaat . $quotes_ausstellungsstaat . "," - . $quotes_zgvdoktor_code . $zgvdoktor_code . $quotes_zgvdoktor_code . "," - . $quotes_zgvdoktorort . $zgvdoktorort . $quotes_zgvdoktorort . "," - . $quotes_zgvdoktordatum . $zgvdoktordatum . $quotes_zgvdoktordatum . "," - . $quotes_zgvdoktornation . $zgvdoktornation . $quotes_zgvdoktornation . "," - . $quotes_gsstudientyp_kurzbz . $gsstudientyp_kurzbz . $quotes_gsstudientyp_kurzbz . "," - . $quotes_aufnahmegruppe_kurzbz . $aufnahmegruppe_kurzbz . $quotes_aufnahmegruppe_kurzbz . "," - . $quotes_priorisierung . $priorisierung . $quotes_priorisierung . "," - . $quotes_zgvdoktor_erfuellt . $zgvdoktor_erfuellt . $quotes_zgvdoktor_erfuellt . "); - "; - - $this->load->model('system/Log_model', 'LogModel'); - $result = $this->LogModel->insert([ - 'mitarbeiter_uid' => $uid, - 'beschreibung' => $beschreibung, - 'sql' => $sql, - 'sqlundo' => $sqlundo - ]); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if (!hasData($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - - $logId = $result->retval; - - //independent transaction - $this->db->trans_start(); - - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - $result = $this->PrestudentModel->delete( - array( - 'prestudent_id' => $prestudent_id - ) - ); - if ($this->db->trans_status() === false) - { - $this->db->trans_rollback(); - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $this->outputJson($result); - } - if(!hasData($result)) - { - $this->outputJson($result); - } - $this->db->trans_commit(); - $this->outputJson($result); - } - $this->db->trans_commit(); - return $this->outputJsonSuccess(true); - } - - public function updateStatus($key_prestudent_id, $key_status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester) - { - $isStudent = false; - $isBerechtigtNoStudstatusCheck = $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'); - - //get Studiengang von prestudent_id - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - $result = $this->PrestudentModel->load([ - 'prestudent_id'=> $key_prestudent_id, - ]); - if(isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - $result = current(getData($result)); - - $stg = $result->studiengang_kz; - - if (!$this->permissionlib->isBerechtigt('admin', 'suid', $stg) && !$this->permissionlib->isBerechtigt('assistenz', 'suid', $stg)) - { - $result = "Sie haben keine Schreibrechte fuer diesen Studiengang!"; - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result); - } - - $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); - $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - - $uid = getAuthUID(); - $prestudent_id = $this->input->post('prestudent_id'); - $status_kurzbz = $this->input->post('status_kurzbz'); - $ausbildungssemester = $this->input->post('ausbildungssemester'); - $datum = $this->input->post('datum'); - $bestaetigtam = $this->input->post('bestaetigtam'); - $bewerbung_abgeschicktamum = $this->input->post('bewerbung_abgeschicktamum'); - $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); - $studienplan_id = $this->input->post('studienplan_id'); - $anmerkung = $this->input->post('anmerkung'); - $statusgrund_id = $this->input->post('statusgrund_id'); - $rt_stufe = $this->input->post('rt_stufe'); - $bestaetigtvon = $uid; - - //check if Bismeldestichtag erreicht - if(!$isBerechtigtNoStudstatusCheck) - { - //Fas only check datum - $this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel'); -/* $result = $this->BismeldestichtagModel->checkIfMeldestichtagErreicht($datum, $studiensemester_kurzbz);*/ - $result = $this->BismeldestichtagModel->checkIfMeldestichtagErreicht($datum); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if ($result->retval == "1") { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - //return $this->outputJson($result->code); - //Fehlermeldung überschrieben, passender - //TODO(Manu) phrase - //$this->p->t('bismeldestichtag','meldestichtag_erreicht'); - //return $this->outputJson($this->p->t('bismeldestichtag','status_confirm_delete')); - return $this->outputJson($this->p->t('lehre', 'meldestichtag_erreicht')); - //return $this->outputJson("Meldestichtag erreicht - Bearbeiten nicht mehr möglich"); - } - } - - //check if Rolle already exists - if(($key_studiensemester_kurzbz != $studiensemester_kurzbz) - || ($key_ausbildungssemester != $ausbildungssemester)) - { - $result = $this->PrestudentstatusModel->checkIfExistingPrestudentRolle( - $prestudent_id, - $status_kurzbz, - $studiensemester_kurzbz, - $ausbildungssemester - ); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if($result->retval == '1') - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result->code); - } - } - - //check if studentrolle already exists - if($status_kurzbz == 'Student' || $status_kurzbz == 'Diplomand') - { - $this->load->model('crm/Student_model', 'StudentModel'); - $result = $this->StudentModel->checkIfExistingStudentRolle($prestudent_id); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if($result->retval == "0") - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result->code); - } - if($result->retval != "0") - { - $isStudent = true; - } - } - - - if(!$isBerechtigtNoStudstatusCheck) - { - //Block STATUSCHECKS - - $result = $this->PrestudentstatusModel->checkIfValidStatusHistory( - $prestudent_id, - $status_kurzbz, - $studiensemester_kurzbz, - $datum, - $ausbildungssemester - ); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - } - - - // Start DB transaction - $this->db->trans_begin(); - - //update status - //var_dump($ausbildungssemester, $studiensemester_kurzbz); - $result = $this->PrestudentstatusModel->update( - [ - 'prestudent_id' => $key_prestudent_id, - 'status_kurzbz' => $key_status_kurzbz, - 'studiensemester_kurzbz' => $key_studiensemester_kurzbz, - 'ausbildungssemester' => $key_ausbildungssemester, - ], - [ - 'status_kurzbz' => $status_kurzbz, - 'studiensemester_kurzbz' => $studiensemester_kurzbz, - 'ausbildungssemester' => $ausbildungssemester, - 'bewerbung_abgeschicktamum' => $bewerbung_abgeschicktamum, - 'studienplan_id' => $studienplan_id, - 'anmerkung' => $anmerkung, - 'statusgrund_id' => $statusgrund_id, - 'updatevon' => $uid, - 'updateamum' => date('c'), - 'bestaetigtam' => $bestaetigtam, - 'bestaetigtvon' => $bestaetigtvon, - 'datum' => $datum, - 'rt_stufe' => $rt_stufe - ] - ); - if (isError($result)) - { - $this->db->trans_rollback(); - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - - - if($isStudent) - { - //check Studentlehrverband - $this->load->model('crm/Student_model', 'StudentModel'); - $result = $this->StudentModel->checkIfUid($prestudent_id); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - $student_uid = $result->retval; - - //process studentlehrverband - $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); - $result = $this->StudentlehrverbandModel->loadWhere( - array( - 'student_uid' => $student_uid, - 'studiensemester_kurzbz' => $studiensemester_kurzbz - ) - ); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $this->outputJson($result); - } - if (!hasData($result)) { - $this->outputJson($result); - } - - //Data of current Semester - $studentlvbData = current(getData($result)); - - $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); - $result = $this->StudentlehrverbandModel->processStudentlehrverband( - $student_uid, - $studentlvbData->studiengang_kz, - $ausbildungssemester, - $studentlvbData->verband, - $studentlvbData->gruppe, - $studiensemester_kurzbz - ); - if ($this->db->trans_status() === false || isError($result)) - { - $this->db->trans_rollback(); - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result->code); - } - } - - $this->db->trans_commit(); - return $this->outputJsonSuccess(true); - } - - public function advanceStatus($key_prestudent_id, $key_status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester) - { - $isStudent = false; - - //get Studiengang von prestudent_id - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - $result = $this->PrestudentModel->load([ - 'prestudent_id'=> $key_prestudent_id, - ]); - if(isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - $result = current(getData($result)); - - $stg = $result->studiengang_kz; - - if (!$this->permissionlib->isBerechtigt('admin', 'suid', $stg) && !$this->permissionlib->isBerechtigt('assistenz', 'suid', $stg)) - { - $result = "Sie haben keine Schreibrechte fuer diesen Studiengang!"; - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result); - } - - - //Data Vorrücken - $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - - $result = $this->PrestudentstatusModel->loadWhere( - array( - 'prestudent_id' => $key_prestudent_id, - 'status_kurzbz' => $key_status_kurzbz, - 'ausbildungssemester' => $key_ausbildungssemester, - 'studiensemester_kurzbz' => $key_studiensemester_kurzbz - ) - ); - - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $this->outputJson($result); - } - - elseif (!hasData($result)) { - $this->outputJson($result); - } - else - { - $statusData = current(getData($result)); - } - - $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); - $result = $this->StudiensemesterModel->getNextFrom($key_studiensemester_kurzbz); - - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - $studiensem_next = current(getData($result)); - $studiensem_next = $studiensem_next->studiensemester_kurzbz; - - $ausbildungssem_next = $key_ausbildungssemester+1; - - //check if Rolle already exists - $result = $this->PrestudentstatusModel->checkIfExistingPrestudentRolle( - $key_prestudent_id, - $key_status_kurzbz, - $studiensem_next, - $ausbildungssem_next - ); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if($result->retval == '1') - { - $isStudent = true; - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result->code); - } - - //check if studentrolle already exists - if($key_status_kurzbz == 'Student') - { - $this->load->model('crm/Student_model', 'StudentModel'); - $result = $this->StudentModel->checkIfExistingStudentRolle($key_prestudent_id); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if ($result->retval == "0") - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result->code); - } - } - - // Start DB transaction - $this->db->trans_begin(); - - //insert prestudentstatus - $uid = getAuthUID(); - $result = $this->PrestudentstatusModel->insert( - [ - 'prestudent_id' => $key_prestudent_id, - 'status_kurzbz' => $key_status_kurzbz, - 'studiensemester_kurzbz' => $studiensem_next, - 'ausbildungssemester' => $ausbildungssem_next, - 'insertamum' => date('c'), - 'insertvon' => $uid, - 'bestaetigtam' => date('c'), - 'bestaetigtvon' => $uid, - 'studienplan_id' => $statusData->studienplan_id, - 'datum' => date('c'), - 'anmerkung' => $statusData->anmerkung - ] - ); - - if (isError($result)) - { - $this->db->trans_rollback(); - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - - $this->load->model('crm/Student_model', 'StudentModel'); - $result = $this->StudentModel->checkIfUid($key_prestudent_id); - if(isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - $student_uid = $result->retval; - - //process studentlehrverband - $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); - $result = $this->StudentlehrverbandModel->loadWhere( - array( - 'student_uid' => $student_uid, - 'studiensemester_kurzbz' => $key_studiensemester_kurzbz - ) - ); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $this->outputJson($result); - } - if (!hasData($result)) { - $this->outputJson($result); - } - - //Data of current Semester - $result = getData($result) ? : []; - $studentlvbData = current($result); - - $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); - $result = $this->StudentlehrverbandModel->processStudentlehrverband( - $student_uid, - $studentlvbData->studiengang_kz, - $ausbildungssem_next, - $studentlvbData->verband, - $studentlvbData->gruppe, - $studiensem_next - ); - if ($this->db->trans_status() === false || isError($result)) - { - $this->db->trans_rollback(); - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result->code); - } - - $this->db->trans_commit(); - - return $this->outputJsonSuccess(true); - } - - public function confirmStatus($key_prestudent_id, $key_status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester) - { - $uid = getAuthUID(); - - //get Studiengang von prestudent_id - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - $result = $this->PrestudentModel->load([ - 'prestudent_id'=> $key_prestudent_id, - ]); - if(isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - $result = current(getData($result)); - - $stg = $result->studiengang_kz; - - if (!$this->permissionlib->isBerechtigt('admin', 'suid', $stg) && !$this->permissionlib->isBerechtigt('assistenz', 'suid', $stg)) - { - $result = "Sie haben keine Schreibrechte fuer diesen Studiengang!"; - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result); - } - - $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - - $result = $this->PrestudentstatusModel->loadWhere( - array( - 'prestudent_id' => $key_prestudent_id, - 'status_kurzbz' => $key_status_kurzbz, - 'ausbildungssemester' => $key_ausbildungssemester, - 'studiensemester_kurzbz' => $key_studiensemester_kurzbz - ) - ); - - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $this->outputJson($result); - } - - elseif (!hasData($result)) { - $this->outputJson($result); - } - else - { - $statusData = current(getData($result)); - } - - //check if Status is unconfirmed.. - if($statusData->bestaetigtam != null) - { - $result = "Der Status ist bereits bestätigt!"; - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result); - } - - //check if Bewerbung abgeschickt - if($statusData->bewerbung_abgeschicktamum == null) - { - $result = "Die Bewerbung wurde noch nicht abgeschickt und kann deshalb nicht bestaetigt werden!"; - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson($result); - } - - $result = $this->PrestudentstatusModel->update( - [ - 'prestudent_id' => $key_prestudent_id, - 'status_kurzbz' => $key_status_kurzbz, - 'studiensemester_kurzbz' => $key_studiensemester_kurzbz, - 'ausbildungssemester' => $key_ausbildungssemester, - ], - [ - 'prestudent_id' => $key_prestudent_id, - 'status_kurzbz' => $key_status_kurzbz, - 'studiensemester_kurzbz' => $key_studiensemester_kurzbz, - 'ausbildungssemester' => $key_ausbildungssemester, - 'bestaetigtam' => date('c'), - 'bestaetigtvon' => $uid, - 'updateamum' => date('c'), - 'updatevon' => $uid - ] - ); - if (isError($result)) - { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson(getError($result)); - } - if (!hasData($result)) { - return error('No Statusdata vorhanden'); - } - return $this->outputJsonSuccess(true); - } -} diff --git a/application/models/crm/Prestudentstatus_model.php b/application/models/crm/Prestudentstatus_model.php index db860f1e6..624912fe2 100644 --- a/application/models/crm/Prestudentstatus_model.php +++ b/application/models/crm/Prestudentstatus_model.php @@ -384,7 +384,8 @@ class Prestudentstatus_model extends DB_Model } else { - return success("1", $this->p->t('studierendenantrag','error_rolleBereitsVorhanden')); + //TODO(manu) nur retval übergeben + return success("1", $this->p->t('lehre','error_rolleBereitsVorhanden')); } } @@ -426,14 +427,20 @@ class Prestudentstatus_model extends DB_Model * @param integer $prestudent_id * @return success("1") if last prestudentstatusentry, else success("0") */ - public function checkIfLastStatusEntry($prestudent_id) + public function checkIfLastStatusEntry($prestudent_id, $isStudent=false ) { $qry = "SELECT COUNT(*) as anzahl FROM public.tbl_prestudentstatus WHERE - prestudent_id = ? "; + prestudent_id = ? + "; + + if($isStudent) + { + $qry .= "AND status_kurzbz = 'Student'"; + } $result = $this->execQuery($qry, array($prestudent_id)); @@ -451,11 +458,9 @@ class Prestudentstatus_model extends DB_Model if ($anzahl <= 1 ) { return success ("1", "Die letzte Rolle kann nur durch den Administrator geloescht werden"); - //return error("Die letzte Rolle kann nur durch den Administrator geloescht werden"); } else return success("0", $anzahl . " Rollen vorhanden"); - //return success($anzahl); } else @@ -479,7 +484,6 @@ class Prestudentstatus_model extends DB_Model { return error("Datum eines neuen Statuseintrags darf nicht in der Vergangenheit liegen "); } - else { return success(); diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js index cd3afe91a..351902339 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js @@ -81,7 +81,6 @@ export default { this.actionUpdate = true; } } - //this.deltaArray.push(delta); this.deltaArray = delta; }, deep: true diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/Status.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/Status.js index 2fc00a642..cf4f7728a 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/Status.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/Status.js @@ -1,5 +1,4 @@ import {CoreFilterCmpt} from "../../../../filter/Filter.js"; -import {CoreRESTClient} from "../../../../../RESTClient"; import BsModal from "../../../../Bootstrap/Modal.js"; import FormForm from '../../../../Form/Form.js'; import FormInput from '../../../../Form/Input.js'; @@ -47,8 +46,9 @@ export default{ data() { return { tabulatorOptions: { - ajaxURL: CoreRESTClient._generateRouterURI('components/stv/Status/getHistoryPrestudent/' + this.prestudent_id), - //autoColumns: true, + ajaxURL: 'api/frontend/v1/stv/Status/getHistoryPrestudent/' + this.prestudent_id, + ajaxRequestFunc: this.$fhcApi.get, + ajaxResponse: (url, params, response) => response.data, columns: [ {title: "Kurzbz", field: "status_kurzbz", tooltip: true}, {title: "StSem", field: "studiensemester_kurzbz"}, @@ -237,7 +237,6 @@ export default{ }, methods: { actionNewStatus() { - console.log("Action: Neuen Status hinzufügen"); this.statusData.status_kurzbz = 'Interessent'; this.statusData.studiensemester_kurzbz = this.defaultSemester; this.statusData.ausbildungssemester = 1; @@ -246,7 +245,6 @@ export default{ this.$refs.newStatusModal.show(); }, actionEditStatus(status, stdsem, ausbildungssemester){ - console.log("Action: Status bearbeiten: (" + status + ": " + stdsem + "/" + ausbildungssemester + ")") this.statusId = { 'prestudent_id': this.prestudent_id, 'status_kurzbz': status, @@ -259,8 +257,6 @@ export default{ }); }, actionDeleteStatus(status, stdsem, ausbildungssemester){ - console.log("Action: Status löschen: (" + status + ": " + stdsem + "/" + ausbildungssemester + ")") - //this.$refs.deleteStatusModal.show(); this.statusId = { 'prestudent_id': this.prestudent_id, 'status_kurzbz': status, @@ -276,8 +272,6 @@ export default{ }); }, actionAdvanceStatus(status, stdsem, ausbildungssemester){ - console.log("Action: Status vorrücken: (" + status + ": " + stdsem + "/" + ausbildungssemester + ")") - //this.$refs.deleteStatusModal.show(); this.statusId = { 'prestudent_id': this.prestudent_id, 'status_kurzbz': status, @@ -290,8 +284,6 @@ export default{ }); }, actionConfirmStatus(status, stdsem, ausbildungssemester){ - console.log("Action: Status bestätigen: (" + status + ": " + stdsem + "/" + ausbildungssemester + ")") - //this.$refs.deleteStatusModal.show(); this.statusId = { 'prestudent_id': this.prestudent_id, 'status_kurzbz': status, @@ -304,112 +296,67 @@ export default{ }); }, addNewStatus(){ - CoreRESTClient.post('components/stv/Status/addNewStatus/' + this.prestudent_id, + this.$fhcApi.post('api/frontend/v1/stv/status/addNewStatus/' + this.prestudent_id, this.statusData ).then(response => { - if (!response.data.error) { this.$fhcAlert.alertSuccess('Speichern erfolgreich'); this.hideModal('newStatusModal'); this.resetModal(); - } else { - const errorData = response.data.retval; - Object.entries(errorData).forEach(entry => { - const [key, value] = entry; - this.$fhcAlert.alertError(value); - }); - } - }).catch(error => { - if (error.response) { - console.log(error.response); - this.$fhcAlert.alertError(error.response.data); - } - }).finally(() => { + }).catch(this.$fhcAlert.handleSystemError) + .finally(() => { window.scrollTo(0, 0); this.reload(); }); }, advanceStatus(statusId){ - return CoreRESTClient.post('components/stv/Status/advanceStatus/' + + return this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/' + this.statusId.prestudent_id + '/' + this.statusId.status_kurzbz + '/' + this.statusId.studiensemester_kurzbz + '/' + this.statusId.ausbildungssemester) .then( result => { - if(!result.data.error) { this.$fhcAlert.alertSuccess('Vorrückung Status erfolgreich'); - } - else - { - const errorData = result.data.retval; - this.$fhcAlert.alertError('Kein Status mit Id ' + status_id + ' gefunden'); - } - /* return result;*/ - }).catch(error => { - if (error.response) { - console.log(error.response); - this.$fhcAlert.alertError(error.response.data); - } - }).finally(() => { + }) + .catch(this.$fhcAlert.handleSystemError) + .finally(() => { window.scrollTo(0, 0); this.reload(); }); }, confirmStatus(statusId){ - return CoreRESTClient.post('components/stv/Status/confirmStatus/' + + return this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/' + this.statusId.prestudent_id + '/' + this.statusId.status_kurzbz + '/' + this.statusId.studiensemester_kurzbz + '/' + this.statusId.ausbildungssemester) .then( result => { - if(!result.data.error) { this.$fhcAlert.alertSuccess('Bestätigung Status erfolgreich'); - } - else - { - const errorData = result.data.retval; - this.$fhcAlert.alertError('Kein Status mit Id ' + status_id + ' gefunden'); - } - } - ).catch(error => { - if (error.response) { - console.log(error.response); - this.$fhcAlert.alertError(error.response.data); - } - }).finally(() => { - window.scrollTo(0, 0); + }) + .catch(this.$fhcAlert.handleSystemError) + .finally(() => { +/* window.scrollTo(0, 0);*/ this.reload(); }); }, deleteStatus(status_id){ - return CoreRESTClient.post('components/stv/Status/deleteStatus/', + return this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/', status_id) .then( result => { - if(!result.data.error) { this.$fhcAlert.alertSuccess('Löschen erfolgreich'); this.hideModal('deleteStatusModal'); this.resetModal(); - } - else - { - const errorData = result.data.retval; - this.$fhcAlert.alertError('Kein Status mit Id ' + status_id + ' gefunden'); - } - /* return result;*/ - }).catch(error => { - if (error.response) { - //console.log(error.response); - this.$fhcAlert.alertError(error.response.data); - } - }).finally(() => { + }) + .catch(this.$fhcAlert.handleSystemError) + .finally(() => { window.scrollTo(0, 0); this.reload(); }); }, editStatus(){ - return CoreRESTClient.post('components/stv/Status/updateStatus/' + + return this.$fhcApi.post('api/frontend/v1/stv/status/updateStatus/' + this.statusId.prestudent_id + '/' + this.statusId.status_kurzbz + '/' + this.statusId.studiensemester_kurzbz + '/' + @@ -417,33 +364,19 @@ export default{ this.statusData) .then( result => { - if(!result.data.error) { this.$fhcAlert.alertSuccess('Bearbeitung Status erfolgreich'); this.hideModal('editStatusModal'); this.resetModal(); - } - else - { -/* const errorData = result.data.retval; - Object.entries(errorData).forEach(entry => { - const [key, value] = entry; - this.$fhcAlert.alertError(value); - });*/ - this.$fhcAlert.alertError('Kein Status mit Id ' + status_id + ' gefunden'); - } - /* return result;*/ - }).catch(error => { - if (error.response) { - console.log(error.response); - this.$fhcAlert.alertError(error.response.data); - } - }).finally(() => { + }) + .catch(this.$fhcAlert.handleSystemError) + .finally(() => { window.scrollTo(0, 0); this.reload(); }); }, checkIfLastStatus(){ - return CoreRESTClient.get('components/stv/Status/isLastStatus/' + this.prestudent_id) + return this.$fhcApi + .get('api/frontend/v1/stv/status/isLastStatus/' + this.prestudent_id) .then( result => { if(result.data){ @@ -452,29 +385,17 @@ export default{ this.isLastStatus = {}; } return result; - }).catch(error => { - if (error.response) { - console.log(error.response); - this.$fhcAlert.alertError(error.response.data); - } - } - ); + }) + .catch(this.$fhcAlert.handleSystemError); }, loadStatus(status_id){ - return CoreRESTClient.post('components/stv/Status/loadStatus/', + return this.$fhcApi.post('api/frontend/v1/stv/status/loadStatus/', status_id) - .then( - result => { - if(result.data.retval) - this.statusData = result.data.retval; - else - { - this.statusData = {}; - this.$fhcAlert.alertError('Kein Status mit Id ' + status_id + ' gefunden'); - } + .then(result => { + this.statusData = result.data; return result; - } - ); + }) + .catch(this.$fhcAlert.handleSystemError); }, reload(){ this.$refs.table.reloadTable(); @@ -492,32 +413,32 @@ export default{ } }, created(){ - CoreRESTClient - .get('components/stv/Prestudent/getStudiensemester') - .then(result => CoreRESTClient.getData(result.data) || []) + this.$fhcApi + .get('api/frontend/v1/stv/prestudent/getStudiensemester') + .then(result => result.data) .then(result => { this.listStudiensemester = result; }) .catch(this.$fhcAlert.handleSystemError); - CoreRESTClient - .get('components/stv/Prestudent/getStudienplaene/' + this.prestudent_id) - .then(result => CoreRESTClient.getData(result.data) || []) + this.$fhcApi + .get('api/frontend/v1/stv/prestudent/getStudienplaene/' + this.prestudent_id) + .then(result => result.data) .then(result => { this.listStudienplaene = result; }) .catch(this.$fhcAlert.handleSystemError); - CoreRESTClient - .get('components/stv/Status/getStatusgruende/') - .then(result => CoreRESTClient.getData(result.data) || []) + this.$fhcApi + .get('api/frontend/v1/stv/status/getStatusgruende/') + .then(result => result.data) .then(result => { this.listStatusgruende = result; }) .catch(this.$fhcAlert.handleSystemError); - CoreRESTClient - .get('components/stv/Status/getLastBismeldestichtag/') - .then(result => CoreRESTClient.getData(result.data) || []) + this.$fhcApi + .get('api/frontend/v1/stv/status/getLastBismeldestichtag/') + .then(result => result.data) .then(result => { - this.dataMeldestichtag = result[0].meldestichtag; + this.dataMeldestichtag = result.retval[0].meldestichtag; }) .catch(this.$fhcAlert.handleSystemError); }, @@ -526,7 +447,6 @@ export default{ }, template: `