confirm status and add transactions

This commit is contained in:
ma0068
2024-03-04 15:45:54 +01:00
parent a7f1e43225
commit caac612a0d
3 changed files with 164 additions and 39 deletions
+129 -16
View File
@@ -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);
}
}
@@ -111,8 +111,6 @@ export default {
}
});*/
},
detectChanges() {
const delta = {};
@@ -537,7 +535,7 @@ export default {
</form-input>
</div>
<div class="row mb-3">
<!-- <div class="row mb-3">
<form-input
container-class="col-5"
label="MentorIn"
@@ -546,7 +544,7 @@ export default {
name="mentor"
>
</form-input>
</div>
</div>-->
</fieldset>
@@ -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{
<!--Modal: Add New Status-->
<BsModal ref="newStatusModal">
<!--TODO(manu) check stati: in FAs Absolvent, Abbrecher, Wartender nicht in Liste-->
<template #title>Neuen Status hinzufügen</template>
<form-form class="row g-3" ref="statusData">
@@ -428,7 +457,7 @@ export default{
</form-input>
</div>
</div>
<!-- TODO(manu) if(defined('VORRUECKUNG_STATUS_MAX_SEMESTER') && VORRUECKUNG_STATUS_MAX_SEMESTER==false)-->
<!-- TODO(manu) if(defined('VORRUECKUNG_STATUS_MAX_SEMESTER') && VORRUECKUNG_STATUS_MAX_SEMESTER==false) 100 Semester-->
<div class="row mb-3">
<label for="ausbildungssemester" class="form-label col-sm-4">Ausbildungssemester</label>
<div class="col-sm-6">
@@ -729,21 +758,6 @@ export default{
<p>Prestudentstatus {{statusData.status_kurzbz}} (id: {{statusData.prestudent_id}}
/ {{statusData.studiensemester_kurzbz}}) im {{statusData.ausbildungssemester}}. Ausbildungssemester wirklich löschen?</p>
</template>
<!-- <template #footer>
<button
ref="Close"
type="button"
class="btn btn-primary"
@click="deleteStatus({
'prestudent_id': statusData.prestudent_id,
'status_kurzbz': statusData.studiensemester_kurzbz,
'studiensemester_kurzbz': statusData.studiensemester_kurzbz,
'ausbildungssemester': statusData.ausbildungssemester
})">OK</button>
</template> -->
<!-- <template #footer>
<button ref="Close" type="button" class="btn btn-primary" @click="deleteStatus(statusData.prestudent_id, statusData.status_kurzbz, statusData.ausbildungssemester, statusData.studiensemester_kurzbz)">OK</button>
</template>-->
<template #footer>
<button ref="Close" type="button" class="btn btn-primary" @click="deleteStatus(statusId)">OK</button>
</template>