diff --git a/application/controllers/Studentenverwaltung.php b/application/controllers/Studentenverwaltung.php
index 29a04e51d..bd8ef7aa9 100644
--- a/application/controllers/Studentenverwaltung.php
+++ b/application/controllers/Studentenverwaltung.php
@@ -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' => [
diff --git a/application/controllers/components/stv/Status.php b/application/controllers/components/stv/Status.php
index fa0ea5a80..a4ad5fd62 100644
--- a/application/controllers/components/stv/Status.php
+++ b/application/controllers/components/stv/Status.php
@@ -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);
+ }
+
}
diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php
index 0d0399bed..742a823f5 100644
--- a/application/models/crm/Prestudent_model.php
+++ b/application/models/crm/Prestudent_model.php
@@ -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));
}
diff --git a/application/models/crm/Prestudentstatus_model.php b/application/models/crm/Prestudentstatus_model.php
index 08c081153..84d281877 100644
--- a/application/models/crm/Prestudentstatus_model.php
+++ b/application/models/crm/Prestudentstatus_model.php
@@ -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
+ ]
+ );*/
+
+
+ }
+
+
}
diff --git a/application/models/crm/Student_model.php b/application/models/crm/Student_model.php
index e27fa68dc..d307c36c0 100644
--- a/application/models/crm/Student_model.php
+++ b/application/models/crm/Student_model.php
@@ -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');
diff --git a/public/js/components/Stv/Studentenverwaltung.js b/public/js/components/Stv/Studentenverwaltung.js
index 4706b5b93..5a6e62a38 100644
--- a/public/js/components/Stv/Studentenverwaltung.js
+++ b/public/js/components/Stv/Studentenverwaltung.js
@@ -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() {
diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js
index 394a6de27..aaab14983 100644
--- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js
+++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js
@@ -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 {
+
+
TestData
+ + + +Prestudentstatus {{statusData.status_kurzbz}} (id: {{statusData.prestudent_id}} - / {{statusData.studiensemester_kurzbz}}) im {{statusData.ausbildungssemester}}. Ausbildungssemester wirklich löschen?
- + / {{statusData.studiensemester_kurzbz}}) im {{statusData.ausbildungssemester}}. Ausbildungssemester wirklich löschen? + + + - +