diff --git a/application/controllers/components/stv/Status.php b/application/controllers/components/stv/Status.php index a4ad5fd62..1618a3d52 100644 --- a/application/controllers/components/stv/Status.php +++ b/application/controllers/components/stv/Status.php @@ -55,7 +55,6 @@ class Status extends FHC_Controller }*/ //check rights - //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([ @@ -75,8 +74,8 @@ class Status extends FHC_Controller $zgv_code = $result->zgv_code; //TODO(Manu) check: Annahme, dass hier immer suid bei Berechtigung STG vergeben wird! - $granted_Ass = $this->permissionlib->getSTG_isEntitledFor('assistenz'); - $granted_Adm = $this->permissionlib->getSTG_isEntitledFor('admin'); + $granted_Ass = $this->permissionlib->getSTG_isEntitledFor('assistenz') ? $this->permissionlib->getSTG_isEntitledFor('assistenz') : []; + $granted_Adm = $this->permissionlib->getSTG_isEntitledFor('admin') ? $this->permissionlib->getSTG_isEntitledFor('admin') : []; $granted = array_merge($granted_Ass, $granted_Adm); if(!in_array($stg, $granted)){ @@ -88,7 +87,6 @@ class Status extends FHC_Controller $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - //var_dump($_POST); $uid = getAuthUID(); $status_kurzbz = $this->input->post('status_kurzbz'); $ausbildungssemester = $this->input->post('ausbildungssemester'); @@ -100,7 +98,7 @@ class Status extends FHC_Controller $anmerkung = $this->input->post('anmerkung'); $statusgrund_id = $this->input->post('statusgrund_id'); $rt_stufe = $this->input->post('rt_stufe'); - $bestaetigtvon = $this->input->post('bestaetigtvon'); + $bestaetigtvon = $uid; // Start DB transaction //$this->db->trans_start(false); @@ -123,10 +121,11 @@ class Status extends FHC_Controller $ausbildungssemester = $lastStatusData->ausbildungssemester; } - if($status_kurzbz != 'Student') + //Todo(manu) check if this check makes sense? +/* if($status_kurzbz != 'Student') { $ausbildungssemester = $lastStatusData->ausbildungssemester; - } + }*/ //check if Rolle already exists $result = $this->PrestudentstatusModel->checkIfExistingPrestudentRolle($prestudent_id, $status_kurzbz, $studiensemester_kurzbz, $ausbildungssemester); @@ -134,8 +133,13 @@ class Status extends FHC_Controller { $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); return $this->outputJson(getError($result)); - //return $this->outputJson("DEBUG: in Funktion checkIfExistingPrestudentRolle"); } + if($result->retval == '1') + { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($result->code); + } + //Check ob Reihungstest berücksichtigt werden soll if(REIHUNGSTEST_CHECK) @@ -185,7 +189,24 @@ class Status extends FHC_Controller //TODO(manu) Wartender NICHT in Liste!? nur in diesem Code //FAS: Aufnahme ist möglich: Beispiel prestudent_id = 129629 - $result = $this->PrestudentstatusModel->checkIfExistingBewerberstatus($prestudent_id); + $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 + if($status_kurzbz == 'Student') + { + $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); @@ -215,13 +236,9 @@ class Status extends FHC_Controller { $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); return $this->outputJson(getError($result)); - //return $this->outputJson("DEBUG: in Funktion checkIfValidStatusHistory"); } - $statusArr = $result; //wenn return result ok - } - $result = $this->PrestudentstatusModel->insert( [ 'prestudent_id' => $prestudent_id, @@ -243,8 +260,7 @@ class Status extends FHC_Controller if (isError($result)) { $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - //return $this->outputJson(getError($result)); - return $this->outputJson("DEBUG: in insert Funktion"); + return $this->outputJson(getError($result)); } return $this->outputJsonSuccess(true); @@ -258,8 +274,6 @@ class Status extends FHC_Controller $status_kurzbz = $this->input->post('status_kurzbz'); $ausbildungssemester = $this->input->post('ausbildungssemester'); $studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz'); - //echo $prestudent_id . $status_kurzbz . $ausbildungssemester . $studiensemester_kurzbz; - $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); @@ -281,29 +295,74 @@ class Status extends FHC_Controller } else { - //var_dump($result); $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'); -/* var_dump($prestudent_id); - var_dump($status_kurzbz);*/ - //var_dump($_POST); + //TODO(Manu) check: warum sind beim Löschen andere Berechtigungen? + //ich darf keine Stati anlegen, aber löschen, wenn mehr als einer übrig??? +/* $granted_Ass = $this->permissionlib->getSTG_isEntitledFor('assistenz'); + $granted_Adm = $this->permissionlib->getSTG_isEntitledFor('admin'); + $granted = array_merge($granted_Ass, $granted_Adm); - //Todo(manu) - //Löschen auch aus anderen Tabellen + $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; - $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + if(!in_array($stg, $granted)) + { + $result = "Sie haben keine Schreibrechte fuer diesen Studiengang!"; + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($result); + }*/ + $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"); + } + + + if(!$isBerechtigtAdmin && !$isBerechtigtNoStudstatusCheck) + { + //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") + { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($result->code); + } + } + + //Delete Status $result = $this->PrestudentstatusModel->delete( array( 'prestudent_id' => $prestudent_id, @@ -312,20 +371,88 @@ class Status extends FHC_Controller 'studiensemester_kurzbz' => $studiensemester_kurzbz ) ); - if (isError($result)) { $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); $this->outputJson($result); } - elseif (!hasData($result)) { + elseif(!hasData($result)) { $this->outputJson($result); } - return $this->outputJsonSuccess(current(getData($result))); + //return $this->outputJsonSuccess(current(getData($result))); + + // 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)); + } + $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 (isError($result)) + { + $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); + } + return $this->outputJsonSuccess(true); + } + //TODO(manu) $this->db->trans_start(false); and rollback? + //TODO(manu) ganzen Prestudenten löschen, wenn kein Eintrag mehr + return $this->outputJsonSuccess(true); + + } - public function updateStatus($prestudent_id) + public function updateStatus($key_prestudent_id, $key_status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester) { + //TODO(Manu) check: Annahme, dass hier immer suid bei Berechtigung STG vergeben wird! + $granted_Ass = $this->permissionlib->getSTG_isEntitledFor('assistenz') ? $this->permissionlib->getSTG_isEntitledFor('assistenz') : []; + $granted_Adm = $this->permissionlib->getSTG_isEntitledFor('admin') ? $this->permissionlib->getSTG_isEntitledFor('admin') : []; + $granted = array_merge($granted_Ass, $granted_Adm); + + //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(!in_array($stg, $granted)){ + $result = "Sie haben keine Schreibrechte fuer diesen Studiengang!"; + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($result); + } + //var_dump($key_prestudent_id, $key_status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester); + /* $this->load->library('form_validation'); @@ -337,10 +464,8 @@ class Status extends FHC_Controller $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - var_dump($_POST); - $uid = getAuthUID(); - //$prestudent_id = $this->input->post('prestudent_id'); + $prestudent_id = $this->input->post('prestudent_id'); $status_kurzbz = $this->input->post('status_kurzbz'); $ausbildungssemester = $this->input->post('ausbildungssemester'); $datum = $this->input->post('datum'); @@ -348,23 +473,74 @@ class Status extends FHC_Controller $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 '); + $anmerkung = $this->input->post('anmerkung'); $statusgrund_id = $this->input->post('statusgrund_id'); $rt_stufe = $this->input->post('rt_stufe'); - $bestaetigtvon = $this->input->post('bestaetigtvon'); + $bestaetigtvon = $uid; // Start DB transaction //$this->db->trans_start(false); + //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); + } + } + + //TODO(Manu) permission not working here... + $hasPermissionToSkipStatusCheck = $this->permissionlib->isBerechtigt('student/keine_studdatuspruefung'); + /* var_dump($hasPermissionToSkipStatusCheck); + + $basis = $this->permissionlib->isBerechtigt('basis/prestudent'); + var_dump($basis);*/ + if(!$hasPermissionToSkipStatusCheck) + { + //Block STATUSCHECKS + //bei update wohl nicht? +/* $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)); + }*/ + + $new_status_datum = isset($datum) ? $datum : date('Y-m-d'); + + $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)); + //return $this->outputJson("DEBUG: in Funktion checkIfValidStatusHistory"); + } + $statusArr = $result; //wenn return result ok + + } + $result = $this->PrestudentstatusModel->update( + [ + 'prestudent_id' => $key_prestudent_id, + 'status_kurzbz' => $key_status_kurzbz, + 'studiensemester_kurzbz' => $key_studiensemester_kurzbz, + 'ausbildungssemester' => $key_ausbildungssemester, + ], [ 'prestudent_id' => $prestudent_id, 'status_kurzbz' => $status_kurzbz, 'studiensemester_kurzbz' => $studiensemester_kurzbz, 'ausbildungssemester' => $ausbildungssemester, - ], - [ - 'bewerbung_abgeschicktamum' => $bewerbung_abgeschicktamum, 'studienplan_id' => $studienplan_id, 'anmerkung' => $anmerkung, @@ -382,7 +558,186 @@ class Status extends FHC_Controller $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); } + public function advanceStatus($key_prestudent_id, $key_status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester) + { + //TODO(Manu) check: Annahme, dass hier immer suid bei Berechtigung STG vergeben wird! + $granted_Ass = $this->permissionlib->getSTG_isEntitledFor('assistenz') ? $this->permissionlib->getSTG_isEntitledFor('assistenz') : []; + $granted_Adm = $this->permissionlib->getSTG_isEntitledFor('admin') ? $this->permissionlib->getSTG_isEntitledFor('admin') : []; + $granted = array_merge($granted_Ass, $granted_Adm); + + //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(!in_array($stg, $granted)){ + $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') + { + $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); + } + } + + //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->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + //return $this->outputJson(getError($result)); + return $this->outputJson("DEBUG: in insert Funktion"); + } + + //Studentlehrverband anlegen + $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; + + //check if Lehrverband exists + $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); + $result = $this->StudentlehrverbandModel->checkIfLehrverbandExists($student_uid, $studiensem_next); + if (isError($result)) + { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } + if ($result->retval == "0") + { + //load Data Lehrverband + $result = $this->StudentlehrverbandModel->load( + [ + 'student_uid' => $student_uid, + 'studiensemester_kurzbz' => $key_studiensemester_kurzbz + ]); + if (isError($result)) + { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + + return $this->outputJson("Error in insert Studentlehrverband"); + } + $lvbData = current(getData($result)); + + $result = $this->StudentlehrverbandModel->insert( + [ + 'student_uid' => $student_uid, + 'studiensemester_kurzbz' => $studiensem_next, + 'semester' => $ausbildungssem_next, + 'verband' => $lvbData->verband, + 'gruppe' => $lvbData->gruppe, + 'insertamum' => date('c'), + 'insertvon' => $uid, + 'studiengang_kz' => $lvbData->studiengang_kz + ]); + if (isError($result)) + { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + + return $this->outputJson("Error in insert Studentlehrverband"); + } + } + return $this->outputJsonSuccess(true); + + } + } diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 742a823f5..08653c481 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -740,6 +740,10 @@ class Prestudent_model extends DB_Model $result = $this->StudentModel->checkIfUID($prestudent_id); if(isError($result)) + { + return getData($result); + } + if($result->retval != "0") { $query = " SELECT @@ -778,7 +782,7 @@ class Prestudent_model extends DB_Model { $query = " SELECT - ps.status_kurzbz, + ps.status_kurzbz2, ps.studiensemester_kurzbz, ps.ausbildungssemester, CASE WHEN ps.status_kurzbz IN ('Student', 'Diplomand') THEN CONCAT(lv.semester, lv.verband, lv.gruppe) END AS lehrverband, @@ -813,8 +817,6 @@ class Prestudent_model extends DB_Model "; } - - return $this->execQuery($query, array($prestudent_id)); } } diff --git a/application/models/crm/Prestudentstatus_model.php b/application/models/crm/Prestudentstatus_model.php index 84d281877..e824ebaf3 100644 --- a/application/models/crm/Prestudentstatus_model.php +++ b/application/models/crm/Prestudentstatus_model.php @@ -345,7 +345,7 @@ class Prestudentstatus_model extends DB_Model * @param string $status_kurzbz * @param string $studiensemester_kurzbz * @param integer $ausbildungssemester - * @return error if already exists, success if not + * @return 1: if Rolle exists, 0: if it doesn't * Copy from studentDBDML.php */ public function checkIfExistingPrestudentRolle($prestudent_id, $status_kurzbz, $studiensemester_kurzbz, $ausbildungssemester) @@ -369,12 +369,13 @@ class Prestudentstatus_model extends DB_Model { return error($result); } - elseif (!hasData($result)) { - return success($result); + elseif (!hasData($result)) + { + return success(0); } else { - return error('Diese Rolle ist bereits vorhanden: ' . $prestudent_id . ' / ' . $studiensemester_kurzbz . ' : ' . $status_kurzbz . ' /' . $ausbildungssemester . ')'); + return success("1","Diese Rolle ist bereits vorhanden!"); } } @@ -383,7 +384,7 @@ class Prestudentstatus_model extends DB_Model * @param integer $prestudent_id * @return error if no bewerberstatus, success if existing */ - public function checkIfExistingBewerberstatus($prestudent_id) + public function checkIfExistingBewerberstatus($prestudent_id, $name = null) { $qry = "SELECT * @@ -400,8 +401,10 @@ class Prestudentstatus_model extends DB_Model { return error($result); } - elseif (!hasData($result)) { - return error("Person muss zuerst zum Bewerber gemacht werden! " . $prestudent_id ); + elseif (!hasData($result)) + { + $person = $name ? $name : "Person"; + return success("0", $person . " muss zuerst zum Bewerber gemacht werden!"); } else { @@ -409,6 +412,50 @@ class Prestudentstatus_model extends DB_Model } } + /** + * Check if there is only one prestudentstatus left + * @param integer $prestudent_id + * @return success("1") if last prestudentstatusentry, else success("0") + */ + public function checkIfLastStatusEntry($prestudent_id) + { + $qry = "SELECT + COUNT(*) as anzahl + FROM + public.tbl_prestudentstatus + WHERE + prestudent_id = ? "; + + $result = $this->execQuery($qry, array($prestudent_id)); + + if (isError($result)) + { + return error($result); + } + else + { + $resultObject = current(getData($result)); + + if (property_exists($resultObject, 'anzahl')) + { + $anzahl = (int) $resultObject->anzahl; + 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 + { + return error("PrestudentstatusModel: Error During Check if Last Status Entry."); + } + } + } + /** * Check if Datum New Status is in the Past * @param integer $prestudent_id @@ -456,8 +503,6 @@ class Prestudentstatus_model extends DB_Model $studiensemester = current($result->retval); $new_status_semesterstart = $studiensemester->start; - //print_r($new_status_semesterstart); - //get all prestudentstati $resultPs = $this->getAllPrestudentstatiWithStudiensemester($prestudent_id); if (isError($resultPs)) @@ -474,9 +519,6 @@ class Prestudentstatus_model extends DB_Model foreach ($resultArr as $row) { -/* print_r($row->studiensemester_start . " >= " . $row->datum . " UND "); - print_r($new_status_semesterstart . " >= " . $new_status_datum . " ? ");*/ - $studiensemester_start = new DateTime($row->studiensemester_start); $status_datum = new DateTime ($row->datum); @@ -498,17 +540,14 @@ class Prestudentstatus_model extends DB_Model } elseif($new_status_datum_form <= $status_datum && $new_status_semesterstart_form <= $studiensemester_start){ $statusArr[] = $row; - //print_r( "cond 2 met\n"); } else { return error("Datum des Statuseintrags muss nach dem Statusdatum, das Semesterstartdatum nach Semesterstartdatum des vorherigen Statuseintrags sein"); - // print_r( "cond not met" . $count . "\n"); } } - //var_dump($statusArr); $endstatusArr = array('Absolvent', 'Abbrecher'); // Über alle gespeicherten Status gehen und Statusabfolge prüfen @@ -526,7 +565,6 @@ class Prestudentstatus_model extends DB_Model } // wenn Unterbrecher auf Unterbrecher folgt, muss Ausbildungssemester gleich sein - //TODO(Manu) check, warum hier automatisch ausbildungssemester korrigiert wird if ( $curr_status_kurzbz == 'Unterbrecher' && isset($next_status) && $next_status->status_kurzbz == 'Unterbrecher' && $curr_status_ausbildungssemester != $next_status->ausbildungssemester @@ -536,7 +574,6 @@ class Prestudentstatus_model extends DB_Model } // wenn Abbrecher auf Unterbrecher folgt, muss Ausbildungssemester gleich sein - //TODO(Manu) check, warum hier automatisch ausbildungssemester korrigiert wird if ( isset($next_status) && $curr_status_kurzbz == 'Unterbrecher' && $next_status->status_kurzbz == 'Abbrecher' && $curr_status_ausbildungssemester != $next_status->ausbildungssemester @@ -561,47 +598,10 @@ class Prestudentstatus_model extends DB_Model return $resultPs; } - public function miniFunction() - { - $array = [ - 'key1' => 'value1', - 'key2' => 'value2', - 'key3' => 'value3' - ]; - - return $array; - } - - public function checkStatusabfolge($statusArr) - { - $endstatusArr = array('Absolvent', 'Abbrecher'); - $statusArr = json_decode($statusArr); - - //var_dump($statusArr); - var_dump($statusArr[0]->status_kurzbz); - // Prüfungen den Prestudentstatus betreffend - // Über alle gespeicherten Status gehen und Statusabfolge prüfen -/* for ($i = 0; $i < count($statusArr); $i++) { - $curr_status = $statusArr[$i]; - $curr_status_kurzbz = $curr_status->status_kurzbz; - $curr_status_ausbildungssemester = $curr_status->ausbildungssemester; - $next_idx = $i - 1; //absteigend sortiert, nächster Status ist vorheriger Eintrag - $next_status = isset($statusArr[$next_idx]) ? $statusArr[$next_idx] : null; - - // Abbrecher- oder Absolventenstatus muss Endstatus sein - if (isset($next_status) && in_array($curr_status_kurzbz, $endstatusArr)) { - - return error("Nach Abbrecher- und Absolventenstatus darf kein anderer Status mehr eingetragen werden"); - } - }*/ - - return $endstatusArr; - - } - public function getAllPrestudentstatiWithStudiensemester($prestudent_id, $old_status_studiensemester_kurzbz = '', $old_status_ausbildungssemester = '') { + //Todo(manu) check isNewStatus $isNewStatus = $old_status_studiensemester_kurzbz == '' && $old_status_ausbildungssemester == ''; $qry = " @@ -630,26 +630,6 @@ class Prestudentstatus_model extends DB_Model return $result; - - -/* $this->addSelect($this->dbTable . '.status_kurzbz'); - $this->addSelect($this->dbTable . '.studiensemester_kurzbz'); - $this->addSelect($this->dbTable . '.ausbildungssemester'); - $this->addSelect($this->dbTable . '.datum'); - $this->addSelect('s.start AS studiensemester_start'); - - $this->addJoin('public.tbl_studiensemester s', 'studiensemester_kurzbz'); - $this->addOrder($this->dbTable . '.datum', 'DESC'); - $this->addOrder($this->dbTable . '.insertamum', 'DESC'); - - $this->addOrder($this->dbTable . '.ext_id', 'DESC'); - - return $this->loadWhere([ - 'prestudent_id' => $prestudent_id - ] - );*/ - - } diff --git a/application/models/crm/Student_model.php b/application/models/crm/Student_model.php index d307c36c0..9ccaff1a4 100644 --- a/application/models/crm/Student_model.php +++ b/application/models/crm/Student_model.php @@ -80,12 +80,20 @@ class Student_model extends DB_Model array('prestudent_id' => $prestudent_id) ); - if (!hasData($result)) + if(isError($result)) { - return error($result); + return error("0", "Error while checking student_uid"); } - return $result->retval[0]->student_uid; + if (!hasData($result)) + { + return success("0","Keine Student_uid vorhanden"); + } + + $student_uid = $result->retval[0]->student_uid; + + return success ($student_uid); + } public function searchStudent($filter) @@ -113,4 +121,45 @@ class Student_model extends DB_Model { return $student_uid . '@' . DOMAIN; } + + /** + * Check if StudentenRolle already exists + * @param integer $prestudent_id + * @return 0 if not exists, count(rollen) if it does + * Copy from studentDBDML.php + */ + public function checkIfExistingStudentRolle($prestudent_id) + { + $qry = "SELECT + count(*) as anzahl + FROM + public.tbl_student + WHERE + prestudent_id = ? "; + + $result = $this->execQuery($qry, array($prestudent_id)); + + if (isError($result)) + { + return error($result); + } + else { + $resultObject = current(getData($result)); + + if (property_exists($resultObject, 'anzahl')) { + $resultValue = (int) $resultObject->anzahl; + + if ($resultValue > 0) + { + return success($resultValue, $resultValue . " vorhandene Rollen"); + } + else + { + return success("0", "Ein Studentenstatus kann hier nur hinzugefuegt werden wenn die Person bereits Student ist. Um einen Bewerber zum Studenten zu machen waehlen Sie bitte unter 'Status aendern' den Punkt 'Student'"); + } + } else { + return error("StudentModel: Error During Check if Existing Student Rolle."); + } + } + } } diff --git a/application/models/education/Studentlehrverband_model.php b/application/models/education/Studentlehrverband_model.php index 765429396..e27b14b00 100644 --- a/application/models/education/Studentlehrverband_model.php +++ b/application/models/education/Studentlehrverband_model.php @@ -12,4 +12,39 @@ class Studentlehrverband_model extends DB_Model $this->pk = array('studiensemester_kurzbz', 'student_uid'); $this->hasSequence = false; } + + /** + * Check if Rolle already exists + * @param integer $prestudent_id + * @param string $status_kurzbz + * @param string $studiensemester_kurzbz + * @param integer $ausbildungssemester + * @return 1: if Rolle exists, 0: if it doesn't + */ + public function checkIfLehrverbandExists($student_uid, $studiensemester_kurzbz) + { + $qry = "SELECT + * + FROM + public.tbl_studentlehrverband + WHERE + student_uid = ? + AND + studiensemester_kurzbz = ?"; + + $result = $this->execQuery($qry, array($student_uid, $studiensemester_kurzbz)); + + if (isError($result)) + { + return error($result); + } + elseif (!hasData($result)) + { + return success("0", "Kein Lehrverband vorhanden!"); + } + else + { + return success("1","Lehrverband vorhanden!"); + } + } } diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/Status.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/Status.js index b7e2c1b93..1d83db1b1 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/Status.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/Status.js @@ -186,11 +186,16 @@ export default{ actionAdvanceStatus(status, stdsem, ausbildungssemester){ console.log("Action: Status vorrücken: (" + status + ": " + stdsem + "/" + ausbildungssemester + ")") //this.$refs.deleteStatusModal.show(); - - /* this.loadStatus(status_id).then(() => { - if(this.statusData.bankverbindung_id) - this.$refs.deleteStatusModal.show(); - });*/ + this.statusId = { + 'prestudent_id': this.prestudent_id, + 'status_kurzbz': status, + 'studiensemester_kurzbz': stdsem, + 'ausbildungssemester': ausbildungssemester + }; + this.loadStatus(this.statusId).then(() => { + if(this.statusData) + this.advanceStatus(this.statusId); + }); }, actionConfirmStatus(status, stdsem, ausbildungssemester){ console.log("Action: Status bestätigen: (" + status + ": " + stdsem + "/" + ausbildungssemester + ")") @@ -226,6 +231,33 @@ export default{ this.reload(); }); }, + advanceStatus(statusId){ + return CoreRESTClient.post('components/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(() => { + window.scrollTo(0, 0); + this.reload(); + }); + }, deleteStatus(status_id){ return CoreRESTClient.post('components/stv/Status/deleteStatus/', status_id) @@ -243,14 +275,21 @@ export default{ } /* return result;*/ }).catch(error => { - this.$fhcAlert.alertError('Fehler bei Löschen von Status aufgetreten'); + if (error.response) { + //console.log(error.response); + this.$fhcAlert.alertError(error.response.data); + } }).finally(() => { window.scrollTo(0, 0); this.reload(); }); }, - editStatus(status_id){ - return CoreRESTClient.post('components/stv/Status/updateStatus/' + this.prestudent_id, + editStatus(){ + return CoreRESTClient.post('components/stv/Status/updateStatus/' + + this.statusId.prestudent_id + '/' + + this.statusId.status_kurzbz + '/' + + this.statusId.studiensemester_kurzbz + '/' + + this.statusId.ausbildungssemester, this.statusData) .then( result => { @@ -266,7 +305,10 @@ export default{ } /* return result;*/ }).catch(error => { - this.$fhcAlert.alertError('Fehler beim Bearbeiten des Status aufgetreten'); + if (error.response) { + console.log(error.response); + this.$fhcAlert.alertError(error.response.data); + } }).finally(() => { window.scrollTo(0, 0); this.reload(); @@ -330,17 +372,17 @@ export default{
- +
- +
+

{{statusId}}

@@ -515,6 +557,8 @@ export default{ + +
@@ -524,6 +568,7 @@ export default{ v-model="statusData['status_kurzbz']" name="status_kurzbz" type="select" + disabled > @@ -670,7 +715,7 @@ export default{