Update, Vorrücken, Delete, Refactoring Statusvalidations

This commit is contained in:
ma0068
2024-02-27 16:53:37 +01:00
parent 843ddad987
commit 88df5057fb
6 changed files with 597 additions and 131 deletions
+5 -3
View File
@@ -740,6 +740,10 @@ class Prestudent_model extends DB_Model
$result = $this->StudentModel->checkIfUID($prestudent_id);
if(isError($result))
{
return getData($result);
}
if($result->retval != "0")
{
$query = "
SELECT
@@ -778,7 +782,7 @@ class Prestudent_model extends DB_Model
{
$query = "
SELECT
ps.status_kurzbz,
ps.status_kurzbz2,
ps.studiensemester_kurzbz,
ps.ausbildungssemester,
CASE WHEN ps.status_kurzbz IN ('Student', 'Diplomand') THEN CONCAT(lv.semester, lv.verband, lv.gruppe) END AS lehrverband,
@@ -813,8 +817,6 @@ class Prestudent_model extends DB_Model
";
}
return $this->execQuery($query, array($prestudent_id));
}
}
@@ -345,7 +345,7 @@ class Prestudentstatus_model extends DB_Model
* @param string $status_kurzbz
* @param string $studiensemester_kurzbz
* @param integer $ausbildungssemester
* @return error if already exists, success if not
* @return 1: if Rolle exists, 0: if it doesn't
* Copy from studentDBDML.php
*/
public function checkIfExistingPrestudentRolle($prestudent_id, $status_kurzbz, $studiensemester_kurzbz, $ausbildungssemester)
@@ -369,12 +369,13 @@ class Prestudentstatus_model extends DB_Model
{
return error($result);
}
elseif (!hasData($result)) {
return success($result);
elseif (!hasData($result))
{
return success(0);
}
else
{
return error('Diese Rolle ist bereits vorhanden: ' . $prestudent_id . ' / ' . $studiensemester_kurzbz . ' : ' . $status_kurzbz . ' /' . $ausbildungssemester . ')');
return success("1","Diese Rolle ist bereits vorhanden!");
}
}
@@ -383,7 +384,7 @@ class Prestudentstatus_model extends DB_Model
* @param integer $prestudent_id
* @return error if no bewerberstatus, success if existing
*/
public function checkIfExistingBewerberstatus($prestudent_id)
public function checkIfExistingBewerberstatus($prestudent_id, $name = null)
{
$qry = "SELECT
*
@@ -400,8 +401,10 @@ class Prestudentstatus_model extends DB_Model
{
return error($result);
}
elseif (!hasData($result)) {
return error("Person muss zuerst zum Bewerber gemacht werden! " . $prestudent_id );
elseif (!hasData($result))
{
$person = $name ? $name : "Person";
return success("0", $person . " muss zuerst zum Bewerber gemacht werden!");
}
else
{
@@ -409,6 +412,50 @@ class Prestudentstatus_model extends DB_Model
}
}
/**
* Check if there is only one prestudentstatus left
* @param integer $prestudent_id
* @return success("1") if last prestudentstatusentry, else success("0")
*/
public function checkIfLastStatusEntry($prestudent_id)
{
$qry = "SELECT
COUNT(*) as anzahl
FROM
public.tbl_prestudentstatus
WHERE
prestudent_id = ? ";
$result = $this->execQuery($qry, array($prestudent_id));
if (isError($result))
{
return error($result);
}
else
{
$resultObject = current(getData($result));
if (property_exists($resultObject, 'anzahl'))
{
$anzahl = (int) $resultObject->anzahl;
if ($anzahl <= 1 )
{
return success ("1", "Die letzte Rolle kann nur durch den Administrator geloescht werden");
//return error("Die letzte Rolle kann nur durch den Administrator geloescht werden");
}
else
return success("0", $anzahl . " Rollen vorhanden");
//return success($anzahl);
}
else
{
return error("PrestudentstatusModel: Error During Check if Last Status Entry.");
}
}
}
/**
* Check if Datum New Status is in the Past
* @param integer $prestudent_id
@@ -456,8 +503,6 @@ class Prestudentstatus_model extends DB_Model
$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))
@@ -474,9 +519,6 @@ class Prestudentstatus_model extends DB_Model
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);
@@ -498,17 +540,14 @@ class Prestudentstatus_model extends DB_Model
}
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
@@ -526,7 +565,6 @@ class Prestudentstatus_model extends DB_Model
}
// 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
@@ -536,7 +574,6 @@ class Prestudentstatus_model extends DB_Model
}
// 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
@@ -561,47 +598,10 @@ class Prestudentstatus_model extends DB_Model
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 = '')
{
//Todo(manu) check isNewStatus
$isNewStatus = $old_status_studiensemester_kurzbz == '' && $old_status_ausbildungssemester == '';
$qry = "
@@ -630,26 +630,6 @@ class Prestudentstatus_model extends DB_Model
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
]
);*/
}
+52 -3
View File
@@ -80,12 +80,20 @@ class Student_model extends DB_Model
array('prestudent_id' => $prestudent_id)
);
if (!hasData($result))
if(isError($result))
{
return error($result);
return error("0", "Error while checking student_uid");
}
return $result->retval[0]->student_uid;
if (!hasData($result))
{
return success("0","Keine Student_uid vorhanden");
}
$student_uid = $result->retval[0]->student_uid;
return success ($student_uid);
}
public function searchStudent($filter)
@@ -113,4 +121,45 @@ class Student_model extends DB_Model
{
return $student_uid . '@' . DOMAIN;
}
/**
* Check if StudentenRolle already exists
* @param integer $prestudent_id
* @return 0 if not exists, count(rollen) if it does
* Copy from studentDBDML.php
*/
public function checkIfExistingStudentRolle($prestudent_id)
{
$qry = "SELECT
count(*) as anzahl
FROM
public.tbl_student
WHERE
prestudent_id = ? ";
$result = $this->execQuery($qry, array($prestudent_id));
if (isError($result))
{
return error($result);
}
else {
$resultObject = current(getData($result));
if (property_exists($resultObject, 'anzahl')) {
$resultValue = (int) $resultObject->anzahl;
if ($resultValue > 0)
{
return success($resultValue, $resultValue . " vorhandene Rollen");
}
else
{
return success("0", "Ein Studentenstatus kann hier nur hinzugefuegt werden wenn die Person bereits Student ist. Um einen Bewerber zum Studenten zu machen waehlen Sie bitte unter 'Status aendern' den Punkt 'Student'");
}
} else {
return error("StudentModel: Error During Check if Existing Student Rolle.");
}
}
}
}
@@ -12,4 +12,39 @@ class Studentlehrverband_model extends DB_Model
$this->pk = array('studiensemester_kurzbz', 'student_uid');
$this->hasSequence = false;
}
/**
* Check if Rolle already exists
* @param integer $prestudent_id
* @param string $status_kurzbz
* @param string $studiensemester_kurzbz
* @param integer $ausbildungssemester
* @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!");
}
}
}