From 3a9f6a0edd1744b06c951c4c81757d13210acb30 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 7 Mar 2024 14:20:46 +0100 Subject: [PATCH] check Meldestichtag, update function getHistoryPrestudent --- .../controllers/components/stv/Status.php | 83 +++++++++++++++++- .../models/codex/Bismeldestichtag_model.php | 72 ++++++++++++++++ application/models/crm/Prestudent_model.php | 84 ++++++------------- .../models/crm/Prestudentstatus_model.php | 4 +- 4 files changed, 177 insertions(+), 66 deletions(-) diff --git a/application/controllers/components/stv/Status.php b/application/controllers/components/stv/Status.php index d29c32982..ec46d7d16 100644 --- a/application/controllers/components/stv/Status.php +++ b/application/controllers/components/stv/Status.php @@ -78,6 +78,8 @@ class Status extends FHC_Controller $granted_Adm = $this->permissionlib->getSTG_isEntitledFor('admin') ? $this->permissionlib->getSTG_isEntitledFor('admin') : []; $granted = array_merge($granted_Ass, $granted_Adm); + $isStudent = false; + if(!in_array($stg, $granted)){ $result = "Sie haben keine Schreibrechte fuer diesen Studiengang!"; $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); @@ -142,7 +144,7 @@ class Status extends FHC_Controller } - //Check ob Reihungstest berücksichtigt werden soll + //Check Reihungstest if(REIHUNGSTEST_CHECK) { if($status_kurzbz=='Bewerber' && !$reihungstest_angetreten) @@ -218,6 +220,10 @@ class Status extends FHC_Controller $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); return $this->outputJson($result->code); } + if($result->retval != "0") + { + $isStudent = true; + } } //TODO(Manu) check permission... @@ -243,6 +249,25 @@ class Status extends FHC_Controller $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)); + } +/* if($result->retval == "0") + { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson($result->code); + }*/ } // Start DB transaction @@ -276,11 +301,61 @@ class Status extends FHC_Controller $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); return $this->outputJson(getError($result)); } - else + + if($isStudent) { - $this->db->trans_commit(); - return $this->outputJsonSuccess(true); + //Studentlehrverband anlegen + $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; + + //check if Lehrverband exists + $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); + $result = $this->StudentlehrverbandModel->checkIfLehrverbandExists($student_uid, $studiensemester_kurzbz); + 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' => $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' => $studiensemester_kurzbz, + 'semester' => $ausbildungssemester, + 'verband' => $lvbData->verband, + 'gruppe' => $lvbData->gruppe, + 'insertamum' => date('c'), + 'insertvon' => $uid, + 'studiengang_kz' => $lvbData->studiengang_kz + ]); + if (isError($result)) { + $this->db->trans_rollback(); + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + + return $this->outputJson("Error in insert Studentlehrverband"); + } + } } + $this->db->trans_commit(); + return $this->outputJsonSuccess(true); + } public function loadStatus() diff --git a/application/models/codex/Bismeldestichtag_model.php b/application/models/codex/Bismeldestichtag_model.php index 1a45f0fbd..e0491de01 100644 --- a/application/models/codex/Bismeldestichtag_model.php +++ b/application/models/codex/Bismeldestichtag_model.php @@ -11,4 +11,76 @@ class Bismeldestichtag_model extends DB_Model $this->dbTable = 'bis.tbl_bismeldestichtag'; $this->pk = 'meldestichtag_id'; } + + public function getLastReachedMeldestichtag($studiensemester_kurzbz = null) + { + $qry = " + SELECT + meldestichtag_id, meldestichtag, studiensemester_kurzbz, insertamum, insertvon, updateamum, updatevon + FROM + bis.tbl_bismeldestichtag + WHERE + meldestichtag < NOW() + "; + + if (isset($studiensemester_kurzbz)) + { + $qry .= " + AND + studiensemester_kurzbz= ?"; + } + + $qry .= " + ORDER BY + meldestichtag DESC + LIMIT 1;"; + + $result = $this->execQuery($qry, array($studiensemester_kurzbz)); + + if (isError($result)) + { + return error($result); + } + if (!hasData($result)) { + return success("0",'Kein Meldestichtag vorhanden'); + } + return $result; + + } + + /** + * Prüft, ob Meldestichtag für ein bestimmtes Statusdatum und Studiensemester erreicht ist. + * + * @param $status_datum + * @return boolean true wenn erreicht, oder false + */ + public function checkIfMeldestichtagErreicht($status_datum) + { + $erreicht = false; + // letztes erreichtes Bismeldedatum holen + $result = $this->getLastReachedMeldestichtag(); + if (isError($result)) + { + return error($result); + } + if (!hasData($result)) { + return success("0",'No Statusdata vorhanden'); + } + $stichtag = current(getData($result)); + $stichtag = $stichtag->meldestichtag; + var_dump($status_datum . " < " . $stichtag . "?"); + + // Prüfen, ob Studentstatusdatum oder Studiensemester vor dem Stichtagsdatum liegen + if (isset($statusDatum)) + { + if (isset($stichtag)) + $erreicht = $statusDatum < $stichtag; + } + + if($erreicht) + return success("1", "Studentstatus mit Datum oder Semesterende vor erreichtem Meldestichtag können nicht hinzugefügt werden"); + + return success("0", "Meldestatus nicht erreicht"); + } + } diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 1938e661a..e045eaf84 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -734,58 +734,15 @@ class Prestudent_model extends DB_Model */ public function getHistoryPrestudent($prestudent_id) { - //TODO(Manu) refactor - $this->load->model('crm/Student_model', 'StudentModel'); - - $result = $this->StudentModel->checkIfUID($prestudent_id); - - if(isError($result)) - { - return getData($result); - } - if($result->retval == "0") //wenn kein studentlehrband eingetragen - { - $query = " - SELECT - ps.status_kurzbz, - ps.studiensemester_kurzbz, - ps.ausbildungssemester, - ps.datum, - TO_CHAR(ps.datum::timestamp, 'DD.MM.YYYY') AS format_datum, - sp.bezeichnung, - ps.bestaetigtam, - TO_CHAR(ps.bestaetigtam::timestamp, 'DD.MM.YYYY') AS format_bestaetigtam, - ps.bewerbung_abgeschicktamum, - TO_CHAR(ps.bewerbung_abgeschicktamum::timestamp, 'DD.MM.YYYY HH24:MI:SS') AS format_bewerbung_abgeschicktamum, - stg.statusgrund_kurzbz, - ps.orgform_kurzbz, - ps.prestudent_id, - sp.studienplan_id, - ps.anmerkung, - ps.bestaetigtvon, - ps.insertamum, - TO_CHAR(ps.insertamum::timestamp, 'DD.MM.YYYY HH24:MI:SS') AS format_insertamum, - ps.insertvon, - ps.updateamum, - TO_CHAR(ps.updateamum::timestamp, 'DD.MM.YYYY HH24:MI:SS') AS format_updateamum, - ps.updatevon - FROM public.tbl_prestudentstatus ps - LEFT JOIN public.tbl_student st USING (prestudent_id) - LEFT JOIN public.tbl_studiengang sg ON (st.studiengang_kz = sg.studiengang_kz) - LEFT JOIN lehre.tbl_studienplan sp USING (studienplan_id) - LEFT JOIN public.tbl_status_grund stg USING (statusgrund_id) - WHERE prestudent_id = ? - ORDER BY datum DESC - "; - } - else - { - $query = " - SELECT + $query = " + SELECT ps.status_kurzbz, ps.studiensemester_kurzbz, - ps.ausbildungssemester, - CASE WHEN ps.status_kurzbz IN ('Student', 'Diplomand') THEN CONCAT(lv.semester, lv.verband, lv.gruppe) END AS lehrverband, + ps.ausbildungssemester, + CASE WHEN ps.status_kurzbz IN ('Student', 'Diplomand') + THEN CONCAT(lv.semester, lv.verband, lv.gruppe) + ELSE '' + END AS lehrverband, ps.datum, TO_CHAR(ps.datum::timestamp, 'DD.MM.YYYY') AS format_datum, sp.bezeichnung, @@ -804,19 +761,26 @@ class Prestudent_model extends DB_Model ps.insertvon, ps.updateamum, TO_CHAR(ps.updateamum::timestamp, 'DD.MM.YYYY HH24:MI:SS') AS format_updateamum, - ps.updatevon - FROM public.tbl_prestudentstatus ps - JOIN public.tbl_student st USING (prestudent_id) - JOIN public.tbl_studentlehrverband lv ON (st.student_uid = lv.student_uid) - JOIN public.tbl_studiengang sg ON (lv.studiengang_kz = sg.studiengang_kz) - LEFT JOIN lehre.tbl_studienplan sp USING (studienplan_id) - LEFT JOIN public.tbl_status_grund stg USING (statusgrund_id) + ps.updatevon + FROM + public.tbl_prestudentstatus ps + JOIN + public.tbl_student st USING (prestudent_id) + JOIN + public.tbl_studiengang sg ON (st.studiengang_kz = sg.studiengang_kz) + LEFT JOIN + lehre.tbl_studienplan sp USING (studienplan_id) + LEFT JOIN + public.tbl_status_grund stg USING (statusgrund_id) + LEFT JOIN + public.tbl_studentlehrverband lv ON + (st.student_uid = lv.student_uid + AND st.student_uid IS NOT NULL + AND lv.studiensemester_kurzbz = ps.studiensemester_kurzbz) WHERE prestudent_id = ? - and lv.studiensemester_kurzbz = ps.studiensemester_kurzbz ORDER BY datum DESC - "; + "; - } return $this->execQuery($query, array($prestudent_id)); } } diff --git a/application/models/crm/Prestudentstatus_model.php b/application/models/crm/Prestudentstatus_model.php index 593a13452..d3f99801c 100644 --- a/application/models/crm/Prestudentstatus_model.php +++ b/application/models/crm/Prestudentstatus_model.php @@ -593,7 +593,7 @@ class Prestudentstatus_model extends DB_Model isset($next_status) && $curr_status_kurzbz == 'Diplomand' && $next_status->status_kurzbz == 'Student' ) { - return error("Nach Diplomantenstatus darf kein Studentenstatus mehr eingetragen werden"); + return error("Nach Diplomandenstatus darf kein Studentenstatus mehr eingetragen werden"); } } @@ -611,7 +611,7 @@ class Prestudentstatus_model extends DB_Model $isNewStatus = $old_status_studiensemester_kurzbz == '' && $old_status_ausbildungssemester == ''; $qry = " - SELECT public.tbl_prestudentstatus.status_kurzbz, + SELECT public.tbl_prestudentstatus.status_kurzbz, public.tbl_prestudentstatus.studiensemester_kurzbz, public.tbl_prestudentstatus.ausbildungssemester, public.tbl_prestudentstatus.datum,