Statuschecks, Berechtigungen, add new Status

This commit is contained in:
ma0068
2024-02-23 12:28:26 +01:00
parent 6a5b2db79d
commit 843ddad987
8 changed files with 802 additions and 59 deletions
@@ -23,6 +23,10 @@ class Studentenverwaltung extends FHC_Controller
'student/bpk' => $this->permissionlib->isBerechtigt('student/bpk'),
'student/alias' => $this->permissionlib->isBerechtigt('student/alias'),
'basis/prestudent' => $this->permissionlib->isBerechtigt('basis/prestudent'),
'assistenz_stgs' => $this->permissionlib->getSTG_isEntitledFor('assistenz'),
'admin' => $this->permissionlib->isBerechtigt('admin'),
'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz','suid'),
'student/keine_studdatuspruefung' => $this->permissionlib->isBerechtigt('student/keine_studdatuspruefung')
],
'variables' => [
@@ -13,6 +13,7 @@ class Status extends FHC_Controller
// Load Libraries
$this->load->library('AuthLib');
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$this->load->library('PermissionLib');
// Load language phrases
/* $this->loadPhrases([
@@ -53,11 +54,42 @@ class Status extends FHC_Controller
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([
'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));
//Variablen für Statuscheck
$stg = $result->studiengang_kz;
$reihungstest_angetreten = $result->reihungstestangetreten;
$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');
$granted_Adm = $this->permissionlib->getSTG_isEntitledFor('admin');
$granted = array_merge($granted_Ass, $granted_Adm);
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);
}
$_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');
$datum = $this->input->post('datum');
@@ -65,7 +97,7 @@ 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');
@@ -73,6 +105,123 @@ class Status extends FHC_Controller
// Start DB transaction
//$this->db->trans_start(false);
//GET lastStatus
$result = $this->PrestudentstatusModel->getLastStatus($prestudent_id);
if (isError($result))
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($result));
}
$lastStatusData = current(getData($result));
//var_dump($lastStatusData);
//Different handling depending on newStatus
if($status_kurzbz == 'Absolvent' || $status_kurzbz == 'Diplomand')
{
//$studiensemester = $semester_aktuell; //TODO(Manu) oder ist hier defaultsemester gemeint?
$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);
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 checkIfExistingPrestudentRolle");
}
//Check ob Reihungstest berücksichtigt werden soll
if(REIHUNGSTEST_CHECK)
{
if($status_kurzbz=='Bewerber' && !$reihungstest_angetreten)
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson($name . ": Um einen Interessenten zum Bewerber zu machen, muss die Person das Reihungstestverfahren abgeschlossen haben");
}
}
//Check ZGV
if(!defined("ZGV_CHECK") || ZGV_CHECK)
{
if($status_kurzbz=='Bewerber' && $zgv_code=='')
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson($name . ": Um einen Interessenten zum Bewerber zu machen, muss die Zugangsvoraussetzung eingetragen sein.");
}
}
//Check ZGV-Master
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$result = $this->StudiengangModel->load([
'studiengang_kz'=> $stg
]);
if(isError($result))
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($result));
}
$result = current(getData($result));
$typ = $result->typ;
if(!defined("ZGV_CHECK") || ZGV_CHECK)
{
if($status_kurzbz=='Bewerber' && $zgv_code=='' && $typ=='m')
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson($name . ": Um einen Interessenten zum Bewerber zu machen, muss die Zugangsvoraussetzung Master eingetragen sein.");
}
}
//check if bewerberstatus exists
if($status_kurzbz == 'Aufgenommener' || $status_kurzbz == 'Wartender')
{
//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);
if (isError($result))
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($result));
}
}
//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
$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));
}
$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->insert(
[
'prestudent_id' => $prestudent_id,
@@ -83,7 +232,7 @@ class Status extends FHC_Controller
'ausbildungssemester' => $ausbildungssemester,
'anmerkung' => $anmerkung,
'statusgrund_id' => $statusgrund_id,
'insertvon' => 'uid',
'insertvon' => $uid,
'insertamum' => date('c'),
'bestaetigtam' => $bestaetigtam,
'bestaetigtvon' => $bestaetigtvon,
@@ -94,8 +243,10 @@ 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(getError($result));
return $this->outputJson("DEBUG: in insert Funktion");
}
return $this->outputJsonSuccess(true);
}
@@ -143,6 +294,13 @@ class Status extends FHC_Controller
$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)
//Löschen auch aus anderen Tabellen
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
@@ -166,6 +324,65 @@ class Status extends FHC_Controller
return $this->outputJsonSuccess(current(getData($result)));
}
public function updateStatus($prestudent_id)
{
/* $this->load->library('form_validation');
if ($this->form_validation->run() == false)
{
return $this->outputJsonError($this->form_validation->error_array());
}*/
$_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');
$status_kurzbz = $this->input->post('status_kurzbz');
$ausbildungssemester = $this->input->post('ausbildungssemester');
$datum = $this->input->post('datum');
$bestaetigtam = $this->input->post('bestaetigtam');
$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 ');
$statusgrund_id = $this->input->post('statusgrund_id');
$rt_stufe = $this->input->post('rt_stufe');
$bestaetigtvon = $this->input->post('bestaetigtvon');
// Start DB transaction
//$this->db->trans_start(false);
$result = $this->PrestudentstatusModel->update(
[
'prestudent_id' => $prestudent_id,
'status_kurzbz' => $status_kurzbz,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'ausbildungssemester' => $ausbildungssemester,
],
[
'bewerbung_abgeschicktamum' => $bewerbung_abgeschicktamum,
'studienplan_id' => $studienplan_id,
'anmerkung' => $anmerkung,
'statusgrund_id' => $statusgrund_id,
'updatevon' => $uid,
'updateamum' => date('c'),
'bestaetigtam' => $bestaetigtam,
'bestaetigtvon' => $bestaetigtvon,
'datum' => $datum,
'rt_stufe' => $rt_stufe
]
);
if (isError($result))
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($result));
}
return $this->outputJsonSuccess(true);
}
}
+62 -19
View File
@@ -734,20 +734,26 @@ class Prestudent_model extends DB_Model
*/
public function getHistoryPrestudent($prestudent_id)
{
$query = "
//TODO(Manu) refactor
$this->load->model('crm/Student_model', 'StudentModel');
$result = $this->StudentModel->checkIfUID($prestudent_id);
if(isError($result))
{
$query = "
SELECT
ps.status_kurzbz,
ps.studiensemester_kurzbz,
ps.ausbildungssemester,
CASE WHEN ps.status_kurzbz = 'Student' THEN CONCAT(lv.semester, lv.verband, lv.gruppe) END AS lehrverband,
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.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,
@@ -760,17 +766,54 @@ class Prestudent_model extends DB_Model
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 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 = ?
and lv.studiensemester_kurzbz = ps.studiensemester_kurzbz
ORDER BY datum DESC
ORDER BY datum DESC
";
}
else
{
$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.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
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)
WHERE prestudent_id = ?
and lv.studiensemester_kurzbz = ps.studiensemester_kurzbz
ORDER BY datum DESC
";
}
// var_dump($query);
return $this->execQuery($query, array($prestudent_id));
}
@@ -338,4 +338,319 @@ class Prestudentstatus_model extends DB_Model
return $this;
}
/**
* Check if Rolle already exists
* @param integer $prestudent_id
* @param string $status_kurzbz
* @param string $studiensemester_kurzbz
* @param integer $ausbildungssemester
* @return error if already exists, success if not
* Copy from studentDBDML.php
*/
public function checkIfExistingPrestudentRolle($prestudent_id, $status_kurzbz, $studiensemester_kurzbz, $ausbildungssemester)
{
$qry = "SELECT
*
FROM
public.tbl_prestudentstatus
WHERE
prestudent_id = ?
AND
status_kurzbz = ?
AND
studiensemester_kurzbz = ?
AND
ausbildungssemester = ?";
$result = $this->execQuery($qry, array($prestudent_id, $status_kurzbz, $studiensemester_kurzbz, $ausbildungssemester));
if (isError($result))
{
return error($result);
}
elseif (!hasData($result)) {
return success($result);
}
else
{
return error('Diese Rolle ist bereits vorhanden: ' . $prestudent_id . ' / ' . $studiensemester_kurzbz . ' : ' . $status_kurzbz . ' /' . $ausbildungssemester . ')');
}
}
/**
* Check if Rolle there is an existing Bewerberstatus
* @param integer $prestudent_id
* @return error if no bewerberstatus, success if existing
*/
public function checkIfExistingBewerberstatus($prestudent_id)
{
$qry = "SELECT
*
FROM
public.tbl_prestudentstatus
WHERE
prestudent_id = ?
AND
status_kurzbz = 'Bewerber'";
$result = $this->execQuery($qry, array($prestudent_id));
if (isError($result))
{
return error($result);
}
elseif (!hasData($result)) {
return error("Person muss zuerst zum Bewerber gemacht werden! " . $prestudent_id );
}
else
{
return success($result);
}
}
/**
* Check if Datum New Status is in the Past
* @param integer $prestudent_id
* @return error if in past
*/
public function checkDatumNewStatus($new_status_datum)
{
$today = new DateTime('today');
$new_status_datum = new DateTime($new_status_datum);
if($new_status_datum < $today)
{
return error("Datum eines neuen Statuseintrags darf nicht in der Vergangenheit liegen ");
}
else
{
return success();
}
}
/**
* Check if History of StatusData is valid
* @param integer $prestudent_id
* @return error if not valid, array StatusArr if valid
*/
public function checkIfValidStatusHistory($prestudent_id, $status_kurzbz, $new_status_studiensemester_kurzbz, $new_status_datum, $new_status_ausbildungssemester, $old_status_studiensemester_kurzbz = '', $old_status_ausbildungssemester = '')
{
//$isNewStatus = $this->checkIfNewStatus($prestudent_id, $status_kurzbz);
$isNewStatus = $old_status_studiensemester_kurzbz == '' && $old_status_ausbildungssemester == '';
//get start studiensemester
$result = $this->StudiensemesterModel->load([
'studiensemester_kurzbz' => $new_status_studiensemester_kurzbz
]);
if(isError($result))
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($result));
}
elseif(!hasData($result)) {
return error("Kein Eintrag für Studiensemester vorhanden! :-/" . $new_status_studiensemester_kurzbz);
}
$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))
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($resultPs));
}
$resultArr = $resultPs->retval;
$statusArr = array();
$newStatusInserted = false;
$new_status_datum_form = new DateTime($new_status_datum);
$new_status_semesterstart_form = new DateTime($new_status_semesterstart);
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);
if ($new_status_datum_form >= $status_datum && $new_status_semesterstart_form >= $studiensemester_start) {
if (!$newStatusInserted)
{
// neuer Status erstmals größer als Datum eines bestehenden Status -> neuen Status EINMALIG einfügen für spätere Statusprüfung
$neuer_status = new stdClass();
$neuer_status->status_kurzbz = $status_kurzbz;
$neuer_status->studiensemester_kurzbz = $new_status_studiensemester_kurzbz;
$neuer_status->datum = $new_status_datum;
$neuer_status->ausbildungssemester = $new_status_ausbildungssemester;
$statusArr[] = $neuer_status;
$newStatusInserted = true;
}
$statusArr[] = $row;
}
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
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");
}
// 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
)
{
return error("Aufeinanderfolgende Unterbrecher müssen gleiches Ausbildungssemester haben");
}
// 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
)
{
return error("Unterbrecher und folgender Abbrecher müssen gleiches Ausbildungssemester haben");
}
// keine Studenten nach Diplomand Status
if (
isset($next_status) && $curr_status_kurzbz == 'Diplomand' && $next_status->status_kurzbz == 'Student'
)
{
return error("Nach Diplomantenstatus darf kein Studentenstatus mehr eingetragen werden");
}
}
//return $statusArr; //rot
//return $resultPs->retval; //rot
//TODO(Manu) check, warum Fehlermeldung bei anderem returnwert!
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 = '')
{
$isNewStatus = $old_status_studiensemester_kurzbz == '' && $old_status_ausbildungssemester == '';
$qry = "
SELECT public.tbl_prestudentstatus.status_kurzbz,
public.tbl_prestudentstatus.studiensemester_kurzbz,
public.tbl_prestudentstatus.ausbildungssemester,
public.tbl_prestudentstatus.datum,
s.start AS studiensemester_start
FROM public.tbl_prestudentstatus
JOIN public.tbl_studiensemester s USING (studiensemester_kurzbz)
WHERE prestudent_id = ?
ORDER BY public.tbl_prestudentstatus.datum DESC,
public.tbl_prestudentstatus.insertamum DESC,
public.tbl_prestudentstatus.ext_id DESC
";
$result = $this->execQuery($qry, array($prestudent_id));
if (isError($result))
{
return error($result);
}
if (!hasData($result)) {
return error('No Statusdata vorhanden');
}
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
]
);*/
}
}
+21
View File
@@ -67,6 +67,27 @@ class Student_model extends DB_Model
return $result->retval[0]->student_uid;
}
/**
* Get students UID by PrestudentID.
* @param $prestudent_id
* @return mixed
*/
public function checkIfUID($prestudent_id)
{
$this->addSelect('student_uid');
$result = $this->loadWhere(
array('prestudent_id' => $prestudent_id)
);
if (!hasData($result))
{
return error($result);
}
return $result->retval[0]->student_uid;
}
public function searchStudent($filter)
{
$this->addSelect('vorname, nachname, gebdatum, person.person_id, student_uid');
@@ -51,7 +51,12 @@ export default {
hasBpkPermission: this.permissions['student/bpk'],
hasAliasPermission: this.permissions['student/alias'],
hasPrestudentPermission: this.permissions['basis/prestudent'],
lists: this.lists
hasAssistenzPermissionForStgs: this.permissions['assistenz_stgs'],
hasSchreibrechtAss: this.permissions['assistenz_schreibrechte'],
hasAdminPermission: this.permissions['admin'],
//hasPermissionToSkipStatusCheck: this.permission['student/keine_studdatuspruefung'],
lists: this.lists,
defaultSemester: this.defaultSemester
}
},
data() {
@@ -28,9 +28,20 @@ export default {
from: 'hasPrestudentPermission',
default: false
},
hasAssistenzPermission: {
from: 'hasAssistenzPermission',
default: false
},
hasAdminPermission: {
from: 'hasAdminPermission',
default: false
},
defaultSemester: {
from: 'defaultSemester',
}
},
props: {
modelValue: Object
modelValue: Object,
},
data(){
return {
@@ -541,6 +552,8 @@ export default {
</form-form>
<br>
<!-- {{defaultSemester}} | {{hasAdminPermission}} | {{hasAdminPermission}}-->
<div class="col-12 pb-3">
<legend>Status</legend>
@@ -549,18 +562,13 @@ export default {
<hr>
<!-- <div class="row mb-3">
<div class="col-8">
<legend>Status</legend>
<TblStatus :prestudent_id="modelValue.prestudent_id"></TblStatus>
</div>-->
<div class="col-8">
<legend>Gesamthistorie</legend>
<TblHistory :person_id="modelValue.person_id"></TblHistory>
</div>
<div class="col-8">
<legend>Gesamthistorie</legend>
<TblHistory :person_id="modelValue.person_id"></TblHistory>
</div>
<!-- </div>-->
@@ -11,6 +11,35 @@ export default{
FormForm,
FormInput,
},
inject: {
defaultSemester: {
from: 'defaultSemester',
},
hasPermissionToSkipStatusCheck: {
from: 'hasPermissionToSkipStatusCheck',
default: false
},
hasPrestudentPermission: {
from: 'hasPrestudentPermission',
default: false
},
hasAssistenzPermission: {
from: 'hasAssistenzPermission',
default: false
},
hasAdminPermission: {
from: 'hasAdminPermission',
default: false
},
hasAssistenzPermissionForStgs: {
from: 'hasAssistenzPermissionForStgs',
default: false
},
hasSchreibrechtAss: {
from: 'hasSchreibrechtAss',
default: false
}
},
props: {
prestudent_id: String
},
@@ -94,11 +123,11 @@ export default{
tabulatorEvents: [],
statusData: {},
listStudiensemester: [],
//maySem: [0,1,2,4,6,7],
maxSem: Array.from({ length: 11 }, (_, index) => index),
listStudienplaene: [],
aufnahmestufen: {'': '-- keine Auswahl --', 1: 1, 2: 2, 3: 3},
listStatusgruende: []
listStatusgruende: [],
statusId: {}
}
},
computed: {
@@ -106,19 +135,25 @@ export default{
return this.listStatusgruende.filter(grund => grund.status_kurzbz == this.statusData.status_kurzbz);
},
},
methods:{
actionNewStatus(){
methods: {
actionNewStatus() {
console.log("Action: Neuen Status hinzufügen");
this.statusData.status_kurzbz = 'Interessent';
this.statusData.studiensemester_kurzbz = this.defaultSemester;
this.statusData.ausbildungssemester = 1;
this.statusData.datum = this.getDefaultDate();
this.statusData.bestaetigtam = this.getDefaultDate();
this.$refs.newStatusModal.show();
},
actionEditStatus(status, stdsem, ausbildungssemester){
console.log("Action: Status bearbeiten: (" + status + ": " + stdsem + "/" + ausbildungssemester + ")")
this.loadStatus({
this.statusId = {
'prestudent_id': this.prestudent_id,
'status_kurzbz': status,
'studiensemester_kurzbz': stdsem,
'ausbildungssemester': ausbildungssemester
}).then(() => {
};
this.loadStatus(this.statusId).then(() => {
if(this.statusData)
this.$refs.editStatusModal.show();
});
@@ -126,8 +161,19 @@ export default{
actionDeleteStatus(status, stdsem, ausbildungssemester){
console.log("Action: Status löschen: (" + status + ": " + stdsem + "/" + ausbildungssemester + ")")
//this.$refs.deleteStatusModal.show();
this.statusId = {
'prestudent_id': this.prestudent_id,
'status_kurzbz': status,
'studiensemester_kurzbz': stdsem,
'ausbildungssemester': ausbildungssemester
};
this.loadStatus({
this.loadStatus(this.statusId).then(() => {
if(this.statusData)
this.$refs.deleteStatusModal.show();
});
/* this.loadStatus({
'prestudent_id': this.prestudent_id,
'status_kurzbz': status,
'studiensemester_kurzbz': stdsem,
@@ -135,7 +181,7 @@ export default{
}).then(() => {
if(this.statusData)
this.$refs.deleteStatusModal.show();
});
});*/
},
actionAdvanceStatus(status, stdsem, ausbildungssemester){
console.log("Action: Status vorrücken: (" + status + ": " + stdsem + "/" + ausbildungssemester + ")")
@@ -155,7 +201,7 @@ export default{
this.$refs.deleteStatusModal.show();
});*/
},
addNewStatus(statusData){
addNewStatus(){
CoreRESTClient.post('components/stv/Status/addNewStatus/' + this.prestudent_id,
this.statusData
).then(response => {
@@ -171,12 +217,61 @@ export default{
});
}
}).catch(error => {
this.$fhcAlert.alertError('Fehler bei Speichern Status aufgetreten');
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)
.then(
result => {
if(!result.data.error) {
this.$fhcAlert.alertSuccess('Löschen erfolgreich');
this.hideModal('deleteStatusModal');
this.resetModal();
}
else
{
const errorData = result.data.retval;
this.$fhcAlert.alertError('Kein Status mit Id ' + status_id + ' gefunden');
}
/* return result;*/
}).catch(error => {
this.$fhcAlert.alertError('Fehler bei Löschen von Status aufgetreten');
}).finally(() => {
window.scrollTo(0, 0);
this.reload();
});
},
editStatus(status_id){
return CoreRESTClient.post('components/stv/Status/updateStatus/' + this.prestudent_id,
this.statusData)
.then(
result => {
if(!result.data.error) {
this.$fhcAlert.alertSuccess('Bearbeitung Status erfolgreich');
this.hideModal('editStatusModal');
this.resetModal();
}
else
{
const errorData = result.data.retval;
this.$fhcAlert.alertError('Kein Status mit Id ' + status_id + ' gefunden');
}
/* return result;*/
}).catch(error => {
this.$fhcAlert.alertError('Fehler beim Bearbeiten des Status aufgetreten');
}).finally(() => {
window.scrollTo(0, 0);
this.reload();
});
},
loadStatus(status_id){
return CoreRESTClient.post('components/stv/Status/loadStatus/',
status_id)
@@ -201,7 +296,12 @@ export default{
},
resetModal(){
this.statusData = {};
this.statusId = {};
},
getDefaultDate() {
const today = new Date();
return today;
}
},
created(){
CoreRESTClient
@@ -230,13 +330,23 @@ export default{
<div class="stv-list h-100 pt-3">
<p>TestData</p>
<!-- <p>TestData</p>
{{statusData}}
<hr>-->
<!-- Berechtigungen:
Skip Check: {{hasPermissionToSkipStatusCheck}} |
Admin: {{hasAdminPermission}} |
Studiengaenge: {{hasAssistenzPermissionForStgs}} |
Schreibrecht ASS: {{hasSchreibrechtAss}}-->
<!-- <hr>
<p>{{statusId}}</p> -->
<!--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">
<div class="row mb-3">
@@ -256,6 +366,8 @@ export default{
<option value="Unterbrecher">UnterbrecherIn</option>
<option value="Diplomand">DiplomandIn</option>
<option value="Incoming">Incoming</option>
<option value="Absolvent">AbsolventIn</option>
<option value="Abbrecher">AbbrecherIn</option>
</form-input>
</div>
</div>
@@ -267,8 +379,8 @@ export default{
type="select"
name="studiensemester_kurzbz"
v-model="statusData['studiensemester_kurzbz']"
> <!--TODO(manu) default aktueller Eintrag-->
<option v-for="sem in listStudiensemester" :key="sem.studiensemester_kurzbz" :value="sem.studiensemester_kurzbz">{{sem.studiensemester_kurzbz}}</option>
>
<option v-for="sem in listStudiensemester" :key="sem.studiensemester_kurzbz" :value="sem.studiensemester_kurzbz" :selected="sem.studiensemester_kurzbz === defaultSemester">{{sem.studiensemester_kurzbz}}</option>
</form-input>
</div>
</div>
@@ -280,7 +392,7 @@ export default{
type="select"
:readonly="readonly"
name="ausbildungssemester"
v-model="statusData['ausbildungssemester']"
v-model="statusData.ausbildungssemester"
>
<option v-for="number in maxSem" :key="number" :value="number">{{ number }}</option>
</form-input>
@@ -294,7 +406,7 @@ export default{
type="DatePicker"
:readonly="readonly"
name="datum"
v-model="statusData['datum']"
v-model="statusData.datum"
auto-apply
:enable-time-picker="false"
format="dd.MM.yyyy"
@@ -310,7 +422,7 @@ export default{
type="DatePicker"
:readonly="readonly"
name="datum"
v-model="statusData['bestaetigtam']"
v-model="statusData.bestaetigtam"
auto-apply
:enable-time-picker="false"
format="dd.MM.yyyy"
@@ -320,7 +432,7 @@ export default{
</div>
</div>
<div class="row mb-3">
<label for="bewerbung_abgeschicktamum" class="form-label col-sm-4">B. abgeschickt am</label>
<label for="bewerbung_abgeschicktamum" class="form-label col-sm-4">Bewerbung abgeschickt am</label>
<div class="col-sm-6">
<form-input
type="DatePicker"
@@ -399,6 +511,7 @@ export default{
<!--Modal: Edit Status-->
<BsModal ref="editStatusModal">
<!--TODO(manu) check stati: in FAs Absolvent, Abbrecher, Wartender nicht in Liste-->
<template #title>Status bearbeiten</template>
<form-form class="row g-3" ref="statusData">
@@ -419,6 +532,8 @@ export default{
<option value="Unterbrecher">UnterbrecherIn</option>
<option value="Diplomand">DiplomandIn</option>
<option value="Incoming">Incoming</option>
<option value="Absolvent">AbsolventIn</option>
<option value="Abbrecher">AbbrecherIn</option>
</form-input>
</div>
</div>
@@ -432,7 +547,7 @@ export default{
v-model="statusData['studiensemester_kurzbz']"
> <!--TODO(manu) default aktueller Eintrag-->
<option v-for="sem in listStudiensemester" :key="sem.studiensemester_kurzbz" :value="sem.studiensemester_kurzbz">{{sem.studiensemester_kurzbz}}</option>
</form-input>f
</form-input>
</div>
</div>
<!-- TODO(manu) if(defined('VORRUECKUNG_STATUS_MAX_SEMESTER') && VORRUECKUNG_STATUS_MAX_SEMESTER==false)-->
@@ -555,7 +670,7 @@ export default{
</form-form>
<template #footer>
<button type="button" class="btn btn-primary" @click="editStatus()">OK</button>
<button type="button" class="btn btn-primary" @click="editStatus(statusId)">OK</button>
</template>
</BsModal>
@@ -565,10 +680,25 @@ export default{
<template #title>Status löschen</template>
<template #default>
<p>Prestudentstatus {{statusData.status_kurzbz}} (id: {{statusData.prestudent_id}}
/ {{statusData.studiensemester_kurzbz}}) im {{statusData.ausbildungssemester}}. Ausbildungssemester wirklich löschen?</p>
</template>
/ {{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()">OK</button>
<button ref="Close" type="button" class="btn btn-primary" @click="deleteStatus(statusId)">OK</button>
</template>
</BsModal>