From caac612a0d4247c7ce3155b0c97472dc010f7c6b Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 4 Mar 2024 15:45:54 +0100 Subject: [PATCH] confirm status and add transactions --- .../controllers/components/stv/Status.php | 145 ++++++++++++++++-- .../Studentenverwaltung/Details/Prestudent.js | 6 +- .../Details/Prestudent/Status.js | 52 ++++--- 3 files changed, 164 insertions(+), 39 deletions(-) diff --git a/application/controllers/components/stv/Status.php b/application/controllers/components/stv/Status.php index 4c5770779..d29c32982 100644 --- a/application/controllers/components/stv/Status.php +++ b/application/controllers/components/stv/Status.php @@ -100,9 +100,6 @@ class Status extends FHC_Controller $rt_stufe = $this->input->post('rt_stufe'); $bestaetigtvon = $uid; - // Start DB transaction - //$this->db->trans_start(false); - //GET lastStatus $result = $this->PrestudentstatusModel->getLastStatus($prestudent_id); @@ -114,12 +111,9 @@ class Status extends FHC_Controller elseif(!hasData($result)) { $lastStatusData = []; -/* $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - return $this->outputJson("donn holt nittan");*/ } else $lastStatusData = current(getData($result)); - //var_dump($lastStatusData); //Different handling depending on newStatus if($status_kurzbz == 'Absolvent' || $status_kurzbz == 'Diplomand') @@ -251,6 +245,9 @@ class Status extends FHC_Controller } } + // Start DB transaction + $this->db->trans_start(false); + $result = $this->PrestudentstatusModel->insert( [ 'prestudent_id' => $prestudent_id, @@ -269,13 +266,21 @@ class Status extends FHC_Controller 'rt_stufe' => $rt_stufe ] ); - if (isError($result)) + + // Transaction complete! + $this->db->trans_complete(); + + 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)); } - - return $this->outputJsonSuccess(true); + else + { + $this->db->trans_commit(); + return $this->outputJsonSuccess(true); + } } public function loadStatus() @@ -380,6 +385,9 @@ class Status extends FHC_Controller } } + // Start DB transaction + $this->db->trans_start(false); + //TODO(manu) $this->db->trans_start(false); and rollback? //Delete Status $result = $this->PrestudentstatusModel->delete( @@ -390,15 +398,22 @@ class Status extends FHC_Controller 'studiensemester_kurzbz' => $studiensemester_kurzbz ) ); - if (isError($result)) + + // Transaction complete! + $this->db->trans_complete(); + + 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($result); + return $this->outputJson($result); } if(!hasData($result)) { $this->outputJson($result); } + $this->db->trans_commit(); + //Delete Studentlehrverband if no Status left $result = $this->PrestudentstatusModel->getLastStatus($prestudent_id, $studiensemester_kurzbz); @@ -706,6 +721,9 @@ class Status extends FHC_Controller } } + // Start DB transaction + $this->db->trans_start(false); + //insert prestudentstatus $uid = getAuthUID(); $result = $this->PrestudentstatusModel->insert( @@ -721,14 +739,17 @@ class Status extends FHC_Controller 'studienplan_id' => $statusData->studienplan_id, 'datum' => date('c'), 'anmerkung' => $statusData->anmerkung - ] ); - if (isError($result)) + + // Transaction complete! + $this->db->trans_complete(); + + 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)); - return $this->outputJson("DEBUG: in insert Funktion"); + return $this->outputJson(getError($result)); } //Studentlehrverband anlegen @@ -778,13 +799,105 @@ class Status extends FHC_Controller ]); 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 confirmStatus($key_prestudent_id, $key_status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester) + { + $uid = getAuthUID(); + //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); + } + + $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.. TODO(manu) check further conditions? Status < Student + 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, + ], + [ + 'bestaetigtam' => date('c'), + 'bestaetigtvon' => $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/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js index 6f067795c..c4015114d 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js @@ -111,8 +111,6 @@ export default { } });*/ - - }, detectChanges() { const delta = {}; @@ -537,7 +535,7 @@ export default { -
+ diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/Status.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/Status.js index 97e47dfa1..03effa24b 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/Status.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/Status.js @@ -206,7 +206,10 @@ export default{ 'studiensemester_kurzbz': stdsem, 'ausbildungssemester': ausbildungssemester }; - console.log(this.statusId); + this.loadStatus(this.statusId).then(() => { + if(this.statusData) + this.confirmStatus(this.statusId); + }); }, addNewStatus(){ CoreRESTClient.post('components/stv/Status/addNewStatus/' + this.prestudent_id, @@ -260,6 +263,33 @@ export default{ this.reload(); }); }, + confirmStatus(statusId){ + return CoreRESTClient.post('components/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'); + } + /* 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) @@ -356,7 +386,7 @@ export default{ }) .catch(this.$fhcAlert.handleSystemError); CoreRESTClient - .get('components/stv/Prestudent/getStudienplaene/' + this.modelValue.prestudent_id) + .get('components/stv/Prestudent/getStudienplaene/' + this.prestudent_id) .then(result => CoreRESTClient.getData(result.data) || []) .then(result => { this.listStudienplaene = result; @@ -388,7 +418,6 @@ export default{ - @@ -428,7 +457,7 @@ export default{
- +
@@ -729,21 +758,6 @@ export default{

Prestudentstatus {{statusData.status_kurzbz}} (id: {{statusData.prestudent_id}} / {{statusData.studiensemester_kurzbz}}) im {{statusData.ausbildungssemester}}. Ausbildungssemester wirklich löschen?

- -