check Meldestichtag, update function getHistoryPrestudent

This commit is contained in:
ma0068
2024-03-07 14:20:46 +01:00
parent fdbbba5038
commit 3a9f6a0edd
4 changed files with 177 additions and 66 deletions
@@ -78,6 +78,8 @@ class Status extends FHC_Controller
$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!";
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
@@ -142,7 +144,7 @@ class Status extends FHC_Controller
}
//Check ob Reihungstest berücksichtigt werden soll
//Check Reihungstest
if(REIHUNGSTEST_CHECK)
{
if($status_kurzbz=='Bewerber' && !$reihungstest_angetreten)
@@ -218,6 +220,10 @@ class Status extends FHC_Controller
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson($result->code);
}
if($result->retval != "0")
{
$isStudent = true;
}
}
//TODO(Manu) check permission...
@@ -243,6 +249,25 @@ 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));
}
/* if($result->retval == "0")
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson($result->code);
}*/
}
// Start DB transaction
@@ -276,11 +301,61 @@ class Status extends FHC_Controller
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($result));
}
else
if($isStudent)
{
$this->db->trans_commit();
return $this->outputJsonSuccess(true);
//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 Lehrverband
$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->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()
@@ -11,4 +11,76 @@ 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)
{
$erreicht = false;
// 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;
var_dump($status_datum . " < " . $stichtag . "?");
// Prüfen, ob Studentstatusdatum oder Studiensemester vor dem Stichtagsdatum liegen
if (isset($statusDatum))
{
if (isset($stichtag))
$erreicht = $statusDatum < $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");
}
}
+24 -60
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") //wenn kein studentlehrband eingetragen
{
$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
$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));
}
}
@@ -593,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");
}
}
@@ -611,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,