Merge remote-tracking branch 'origin/feature-30660/FHC4_StudierendenGUI_Prototyp' into feature-30660/FHC4_StudierendenGUI_Prototyp

This commit is contained in:
cgfhtw
2024-03-12 15:16:54 +01:00
14 changed files with 989 additions and 294 deletions
@@ -31,6 +31,10 @@ class Config extends FHC_Controller
'title' => 'PreStudentIn',
'component' => './Stv/Studentenverwaltung/Details/Prestudent.js'
];
$result['status'] = [
'title' => 'Status',
'component' => './Stv/Studentenverwaltung/Details/Status.js'
];
$result['noten'] = [
'title' => 'Noten',
'component' => './Stv/Studentenverwaltung/Details/Noten.js'
+475 -123
View File
@@ -44,17 +44,24 @@ class Status extends FHC_Controller
$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 addNewStatus($prestudent_id)
{
/* $this->load->library('form_validation');
$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 ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}*/
//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([
@@ -73,10 +80,7 @@ class Status extends FHC_Controller
$name = trim($result->vorname . " ". $result->nachname);
$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') ? $this->permissionlib->getSTG_isEntitledFor('assistenz') : [];
$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!";
@@ -100,9 +104,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);
@@ -111,8 +112,12 @@ class Status extends FHC_Controller
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($result));
}
$lastStatusData = current(getData($result));
//var_dump($lastStatusData);
elseif(!hasData($result))
{
$lastStatusData = [];
}
else
$lastStatusData = current(getData($result));
//Different handling depending on newStatus
if($status_kurzbz == 'Absolvent' || $status_kurzbz == 'Diplomand')
@@ -122,10 +127,10 @@ class Status extends FHC_Controller
}
//Todo(manu) check if this check makes sense?
/* if($status_kurzbz != 'Student')
{
$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);
@@ -141,7 +146,7 @@ class Status extends FHC_Controller
}
//Check ob Reihungstest berücksichtigt werden soll
//Check Reihungstest
if(REIHUNGSTEST_CHECK)
{
if($status_kurzbz=='Bewerber' && !$reihungstest_angetreten)
@@ -212,9 +217,17 @@ class Status extends FHC_Controller
$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;
}
}
//TODO(Manu) permission not working here...
$hasPermissionToSkipStatusCheck = $this->permissionlib->isBerechtigt('student/keine_studdatuspruefung');
/* var_dump($hasPermissionToSkipStatusCheck);
@@ -237,17 +250,34 @@ 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));
}
}
// Start DB transaction
$this->db->trans_start(false);
$result = $this->PrestudentstatusModel->insert(
[
'prestudent_id' => $prestudent_id,
'status_kurzbz' => $status_kurzbz,
'bewerbung_abgeschicktamum' => $bewerbung_abgeschicktamum,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'studienplan_id' => $studienplan_id,
'studienplan_id' => $lastStatusData->studienplan_id,
'ausbildungssemester' => $ausbildungssemester,
'anmerkung' => $anmerkung,
'statusgrund_id' => $statusgrund_id,
'insertvon' => $uid,
'insertamum' => date('c'),
@@ -257,15 +287,103 @@ 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));
}
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;
//check if Studentlehrverband exists
$this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel');
$result = $this->StudentlehrverbandModel->checkIfStudentLehrverbandExists($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")
{
$result = $this->StudentlehrverbandModel->insert(
[
'student_uid' => $student_uid,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'semester' => $ausbildungssemester,
'verband' => $verband,
'gruppe' => $gruppe,
'insertamum' => date('c'),
'insertvon' => $uid,
'studiengang_kz' => $studentData->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");
}
}
else
{
$result = $this->StudentlehrverbandModel->update(
[
'student_uid' => $student_uid,
'studiensemester_kurzbz' => $studiensemester_kurzbz
],
[
'semester' => $ausbildungssemester,
'verband' => $verband,
'gruppe' => $gruppe,
'updateamum' => date('c'),
'updatevon' => $uid,
'studiengang_kz' => $studentData->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()
{
$_POST = json_decode(utf8_encode($this->input->raw_input_stream), true);
@@ -309,31 +427,32 @@ class Status extends FHC_Controller
$status_kurzbz = $this->input->post('status_kurzbz');
$ausbildungssemester = $this->input->post('ausbildungssemester');
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
$deletePrestudent = false;
//TODO(Manu) check: warum sind beim Löschen andere Berechtigungen?
//TODO(Manu) check permissions: 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);
/* $granted_Ass = $this->permissionlib->getSTG_isEntitledFor('assistenz');
$granted_Adm = $this->permissionlib->getSTG_isEntitledFor('admin');
$granted = array_merge($granted_Ass, $granted_Adm);
$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/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(!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);
}*/
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');
@@ -346,22 +465,31 @@ class Status extends FHC_Controller
}
if(!$isBerechtigtAdmin && !$isBerechtigtNoStudstatusCheck)
//check if last status
$result = $this->PrestudentstatusModel->checkIfLastStatusEntry($prestudent_id);
if (isError($result))
{
//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);
}
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_start(false);
//TODO(manu) $this->db->trans_start(false); and rollback?
//Delete Status
$result = $this->PrestudentstatusModel->delete(
array(
@@ -371,34 +499,43 @@ 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)) {
$this->outputJson($result);
}
//return $this->outputJsonSuccess(current(getData($result)));
// Delete Studentlehrverband if no Status left
// 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($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);
if(isError($result))
{
if (isError($result)) {
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($result));
}
if(!hasData($result))
if (!hasData($result))
{
//get student_uid
$this->load->model('crm/Student_model', 'StudentModel');
$result = $this->StudentModel->checkIfUid($prestudent_id);
if(isError($result))
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');
@@ -413,25 +550,53 @@ class Status extends FHC_Controller
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
$this->outputJson("Fehler beim Löschen der Lehrverbandszuordnung");
}
if(!hasData($result)) {
if (!hasData($result))
{
$this->outputJson($result);
var_dump("no data2");
}
$this->outputJsonSuccess(true);
}
//Delete Prestudent if no data is left
if($deletePrestudent)
{
//TODO(manu) check all connected tables and delete them
//es wird noch auf prestudent_dokumentprestudent verwiesen
//löschen zuerst von Doks
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$result = $this->PrestudentModel->delete(
array(
'prestudent_id' => $prestudent_id
)
);
if (isError($result))
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
$this->outputJson($result);
}
return $this->outputJsonSuccess(true);
if(!hasData($result))
{
$this->outputJson($result);
}
$this->outputJson($result);
}
//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($key_prestudent_id, $key_status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester)
{
//TODO(Manu) check: Annahme, dass hier immer suid bei Berechtigung STG vergeben wird!
$hasPermissionToSkipStatusCheck = $this->permissionlib->isBerechtigt('student/keine_studdatuspruefung');
$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);
$isStudent = false;
//get Studiengang von prestudent_id
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$result = $this->PrestudentModel->load([
@@ -451,6 +616,9 @@ class Status extends FHC_Controller
$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');
@@ -478,57 +646,134 @@ class Status extends FHC_Controller
$rt_stufe = $this->input->post('rt_stufe');
$bestaetigtvon = $uid;
// Start DB transaction
//$this->db->trans_start(false);
//check if Bismeldestichtag erreicht
if(!$hasPermissionToSkipStatusCheck)
{
$this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel');
$result = $this->BismeldestichtagModel->checkIfMeldestichtagErreicht($datum, $studiensemester_kurzbz);
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));
//Fehlermeldung überschrieben, passender
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))
{
$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);
}
$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')
{
$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;
}
}
//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);
//$new_status_datum = isset($datum) ? $datum : date('Y-m-d');
$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));
}*/
$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
}
// Start DB transaction
$this->db->trans_start(false);
if($isStudent)
{
//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 Studentlehrverband
$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->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson("Error in insert Studentlehrverband");
}
}
}
//update status
$result = $this->PrestudentstatusModel->update(
[
'prestudent_id' => $key_prestudent_id,
@@ -553,20 +798,24 @@ 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));
}
if (!hasData($result)) {
return error('No Statusdata vorhanden');
}
$this->db->trans_commit();
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);
@@ -659,6 +908,9 @@ class Status extends FHC_Controller
}
}
// Start DB transaction
$this->db->trans_start(false);
//insert prestudentstatus
$uid = getAuthUID();
$result = $this->PrestudentstatusModel->insert(
@@ -674,16 +926,20 @@ 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));
}
//TodoManu -> check if student, was wenn kein Studentstatus
//Studentlehrverband anlegen
$this->load->model('crm/Student_model', 'StudentModel');
$result = $this->StudentModel->checkIfUid($key_prestudent_id);
@@ -694,9 +950,9 @@ class Status extends FHC_Controller
}
$student_uid = $result->retval;
//check if Lehrverband exists
//check if Studentehrverband exists
$this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel');
$result = $this->StudentlehrverbandModel->checkIfLehrverbandExists($student_uid, $studiensem_next);
$result = $this->StudentlehrverbandModel->checkIfStudentlehrverbandExists($student_uid, $studiensem_next);
if (isError($result))
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
@@ -704,7 +960,7 @@ class Status extends FHC_Controller
}
if ($result->retval == "0")
{
//load Data Lehrverband
//load Data Studentlehrverband
$result = $this->StudentlehrverbandModel->load(
[
'student_uid' => $student_uid,
@@ -717,6 +973,7 @@ class Status extends FHC_Controller
return $this->outputJson("Error in insert Studentlehrverband");
}
$lvbData = current(getData($result));
var_dump($lvbData);
$result = $this->StudentlehrverbandModel->insert(
[
@@ -731,13 +988,108 @@ 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,
'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);
}
}
@@ -1,7 +1,6 @@
<?php
class Bismeldestichtag_model extends DB_Model
{
/**
* Constructor
*/
@@ -11,4 +10,100 @@ 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, $studiensemester_kurzbz = null)
{
$erreicht = false;
if (isset($studiensemester_kurzbz))
{
// Studiensemesterende holen
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$result = $this->StudiensemesterModel->loadWhere(
array(
'studiensemester_kurzbz' => $studiensemester_kurzbz
)
);
if(isError($result))
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($result));
}
$result = current(getData($result));
$studiensemester_ende = $result->ende;
}
// 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;
// Prüfen, ob Studentstatusdatum oder Studiensemester vor dem Stichtagsdatum liegen
if (isset($statusDatum))
{
if (isset($stichtag))
$erreicht = $statusDatum < $stichtag;
}
if (isset($studiensemester_ende))
{
$erreicht = $erreicht || $studiensemester_ende < $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");
}
}
+25 -61
View File
@@ -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")
{
$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
ps.status_kurzbz2,
$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));
}
}
@@ -504,13 +504,19 @@ class Prestudentstatus_model extends DB_Model
$new_status_semesterstart = $studiensemester->start;
//get all prestudentstati
//TODO(manu) errorlogic
$resultPs = $this->getAllPrestudentstatiWithStudiensemester($prestudent_id);
if (isError($resultPs))
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($resultPs));
$resultArr = [];
}
$resultArr = $resultPs->retval;
if(!hasData($resultPs))
{
$resultArr = [];
}
else
$resultArr = $resultPs->retval;
$statusArr = array();
$newStatusInserted = false;
@@ -587,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");
}
}
@@ -605,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,
@@ -625,7 +631,7 @@ class Prestudentstatus_model extends DB_Model
return error($result);
}
if (!hasData($result)) {
return error('No Statusdata vorhanden');
return success("0",'No Statusdata vorhanden');
}
return $result;
+3 -2
View File
@@ -82,7 +82,7 @@ class Student_model extends DB_Model
if(isError($result))
{
return error("0", "Error while checking student_uid");
return error( "Error while checking student_uid");
}
if (!hasData($result))
@@ -143,7 +143,8 @@ class Student_model extends DB_Model
{
return error($result);
}
else {
else
{
$resultObject = current(getData($result));
if (property_exists($resultObject, 'anzahl')) {
@@ -14,14 +14,12 @@ class Studentlehrverband_model extends DB_Model
}
/**
* Check if Rolle already exists
* @param integer $prestudent_id
* @param string $status_kurzbz
* Check if Studentlehrverband already exists
* @param string $student_id
* @param string $studiensemester_kurzbz
* @param integer $ausbildungssemester
* @return 1: if Rolle exists, 0: if it doesn't
*/
public function checkIfLehrverbandExists($student_uid, $studiensemester_kurzbz)
public function checkIfStudentlehrverbandExists($student_uid, $studiensemester_kurzbz)
{
$qry = "SELECT
*
@@ -40,11 +38,11 @@ class Studentlehrverband_model extends DB_Model
}
elseif (!hasData($result))
{
return success("0", "Kein Lehrverband vorhanden!");
return success("0", "Kein Studentlehrverband vorhanden!");
}
else
{
return success("1","Lehrverband vorhanden!");
return success("1","Studentlehrverband vorhanden!");
}
}
}
@@ -11,4 +11,37 @@ class Lehrverband_model extends DB_Model
$this->dbTable = 'public.tbl_lehrverband';
$this->pk = array('gruppe', 'verband', 'semester', 'studiengang_kz');
}
/**
* Check if Lehrverband already exists
* @param string $student_id
* @param string $studiensemester_kurzbz
* @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!");
}
}
}