Studierendenverwaltung: added new prestudenstatus checks, created PrestudentstatusCheckLib

This commit is contained in:
Alexei Karpenko
2024-06-19 20:42:14 +02:00
parent 823579dc59
commit e78598900a
5 changed files with 459 additions and 236 deletions
@@ -23,6 +23,7 @@ class Status extends FHCAPI_Controller
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$this->load->library('PrestudentstatusCheckLib');
// Load language phrases
$this->loadPhrases([
@@ -126,6 +127,7 @@ class Status extends FHCAPI_Controller
$datum = $this->input->post('datum');
$bestaetigtam = $this->input->post('bestaetigtam');
$bewerbung_abgeschicktamum = $this->input->post('bewerbung_abgeschicktamum');
$studienplan_id = $this->input->post('studienplan_id');
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
$anmerkung = $this->input->post('anmerkung');
$statusgrund_id = $this->input->post('statusgrund_id');
@@ -165,7 +167,8 @@ class Status extends FHCAPI_Controller
{
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
if($result->retval == '1')
if(getData($result) == '1')
{
return $this->terminateWithError($name . ": " . $this->p->t('lehre','error_rolleBereitsVorhanden'), self::ERROR_TYPE_GENERAL);
}
@@ -249,21 +252,17 @@ class Status extends FHCAPI_Controller
if(!$isBerechtigtNoStudstatusCheck)
{
//Block STATUSCHECKS
$new_status_datum = isset($datum) ? $datum : date('Y-m-d');
$result = $this->PrestudentstatusModel->checkDatumNewStatus($new_status_datum);
if (isError($result))
{
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$new_status_datum = isset($datum) ? $datum : date('Y-m-d');
$result = $this->PrestudentstatusModel->checkIfValidStatusHistory(
$result = $this->prestudentstatuschecklib->checkStatusAdd(
$prestudent_id,
$name,
$status_kurzbz,
$studiensemester_kurzbz,
$new_status_datum,
$ausbildungssemester
$ausbildungssemester,
$studienplan_id
);
if (isError($result))
{
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
@@ -545,9 +544,9 @@ class Status extends FHCAPI_Controller
$sqlundo =
"
INSERT INTO public.tbl_prestudentstatus(prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester,
datum, insertamum, insertvon, updateamum, updatevon, ext_id, orgform_kurzbz, bestaetigtam, bestaetigtvon,
anmerkung, bewerbung_abgeschicktamum, studienplan_id, rt_stufe, statusgrund_id)
INSERT INTO public.tbl_prestudentstatus(prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester,
datum, insertamum, insertvon, updateamum, updatevon, ext_id, orgform_kurzbz, bestaetigtam, bestaetigtvon,
anmerkung, bewerbung_abgeschicktamum, studienplan_id, rt_stufe, statusgrund_id)
VALUES('" . $prestudent_id . "','" . $status_kurzbz . "','" . $studiensemester_kurzbz . "','" . $ausbildungssemester . "',"
. $quotes_datum . $datum . $quotes_datum . ","
. $quotes_insertamum . $insertamum . $quotes_insertamum . ","
@@ -795,7 +794,7 @@ class Status extends FHCAPI_Controller
aufnahmeschluessel, facheinschlberuf, anmeldungreihungstest, reihungstestangetreten, reihungstest_id,
rt_gesamtpunkte, rt_punkte1, rt_punkte2, rt_punkte3, bismelden, person_id, anmerkung, mentor, ext_id,
dual, ausstellungsstaat, zgvdoktor_code, zgvdoktorort, zgvdoktordatum, zgvdoktornation,
gsstudientyp_kurzbz, aufnahmegruppe_kurzbz, priorisierung, zgvdoktor_erfuellt)
gsstudientyp_kurzbz, aufnahmegruppe_kurzbz, priorisierung, zgvdoktor_erfuellt)
VALUES('" . $prestudent_id . "',"
. $quotes_aufmerksamdurch_kurzbz . $aufmerksamdurch_kurzbz . $quotes_aufmerksamdurch_kurzbz . ","
. $quotes_studiengang_kz . $studiengang_kz . $quotes_studiengang_kz . ","
@@ -974,14 +973,17 @@ class Status extends FHCAPI_Controller
{
//Block STATUSCHECKS
$result = $this->PrestudentstatusModel->checkIfValidStatusHistory(
$result = $this->prestudentstatuschecklib->checkStatusUpdate(
$prestudent_id,
'',
$status_kurzbz,
$studiensemester_kurzbz,
$datum,
$ausbildungssemester
$ausbildungssemester,
$studienplan_id,
$key_studiensemester_kurzbz,
$key_ausbildungssemester
);
if (isError($result))
{
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
@@ -0,0 +1,301 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class PrestudentstatusCheckLib
{
const INTERESSENT_STATUS = 'Interessent';
const BEWERBER_STATUS = 'Bewerber';
const AUFGENOMMENER_STATUS = 'Aufgenommener';
const UNTERBRECHER_STATUS = 'Unterbrecher';
const STUDENT_STATUS = 'Student';
const DIPLOMAND_STATUS = 'Diplomand';
const ABSOLVENT_STATUS = 'Absolvent';
const ABBRECHER_STATUS = 'Abbrecher';
private $_ci;
private $_statusAbfolgeVorStudent = [self::INTERESSENT_STATUS, self::BEWERBER_STATUS, self::AUFGENOMMENER_STATUS];
private $_endStatusArr = [self::ABSOLVENT_STATUS, self::ABBRECHER_STATUS];
/**
* Object initialization
*/
public function __construct()
{
$this->_ci =& get_instance();
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->_ci->load->model('person/Person_model', 'PersonModel');
$this->_ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->_ci->load->model('organisation/Studienplan_model', 'StudienplanModel');
}
/**
* Checks if a status add is valid.
* @return object error if invalid
*/
public function checkStatusAdd(
$prestudent_id,
$status_kurzbz,
$new_status_studiensemester_kurzbz,
$new_status_datum,
$new_status_ausbildungssemester,
$new_studienplan_id
) {
$studentName = '';
$nameRes = $this->_ci->PersonModel->loadPrestudent($prestudent_id);
if (hasData($nameRes))
{
$nameData = getData($nameRes)[0];
$studentName = $nameData->vorname.' '.$nameData->nachname;
}
// Datum des neuen Status darf nicht in Vergangenheit liegen, sonst Probleme wenn neues Datum < Bismeldedatum
if (new DateTime($new_status_datum) < new DateTime('today'))
return error($studentName . $this->_ci->p->t('lehre', 'error_entryInPast'));
return $this->_checkIfValidStatusHistory(
$prestudent_id,
$status_kurzbz,
$new_status_studiensemester_kurzbz,
$new_status_datum,
$new_status_ausbildungssemester,
$new_studienplan_id
);
}
/**
* Checks if a status update is valid.
* @return error if invalid
*/
public function checkStatusUpdate(
$prestudent_id,
$status_kurzbz,
$new_status_studiensemester_kurzbz,
$new_status_datum,
$new_status_ausbildungssemester,
$new_studienplan_id,
$old_status_studiensemester,
$old_status_ausbildungssemester
) {
return $this->_checkIfValidStatusHistory(
$prestudent_id,
$status_kurzbz,
$new_status_studiensemester_kurzbz,
$new_status_datum,
$new_status_ausbildungssemester,
$new_studienplan_id,
$old_status_studiensemester,
$old_status_ausbildungssemester
);
}
/**
* Check if History of StatusData is valid
* @param integer $prestudent_id
* @return error if not valid, array StatusArr if valid
*/
private function _checkIfValidStatusHistory(
$prestudent_id,
$status_kurzbz,
$new_status_studiensemester_kurzbz,
$new_status_datum,
$new_status_ausbildungssemester,
$new_studienplan_id,
$old_status_studiensemester = null,
$old_status_ausbildungssemester = null
) {
//get start studiensemester
$semResult = $this->_ci->StudiensemesterModel->load([
'studiensemester_kurzbz' => $new_status_studiensemester_kurzbz
]);
if (isError($semResult))
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($semResult));
}
if (!hasData($semResult)) {
return error($this->_ci->p->t('lehre', 'error_noStudiensemester') . $new_status_studiensemester_kurzbz);
}
$studiensemester = getData($semResult)[0];
$new_status_semesterstart = $studiensemester->start;
// get studienplan orgform
$new_studienplan_orgform_kurzbz = '';
$this->_ci->StudienplanModel->addSelect('orgform_kurzbz');
$stplResult = $this->_ci->StudienplanModel->load([
'studienplan_id' => $new_studienplan_id
]);
if (isError($stplResult))
{
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
return $this->outputJson(getError($stplResult));
}
if (hasData($stplResult)) $new_studienplan_orgform_kurzbz = getData($stplResult)[0]->orgform_kurzbz;
//get all prestudentstati
$resultPs = $this->_ci->PrestudentstatusModel->getAllPrestudentstatiWithStudiensemester($prestudent_id);
if (isError($resultPs)) return $resultPs;
$resultArr = hasData($resultPs) ? getData($resultPs) : [];
$statusArr = [];
$newStatusInserted = false;
$new_status_datum_form = new DateTime($new_status_datum);
$new_status_semesterstart_form = new DateTime($new_status_semesterstart);
$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;
$neuer_status->studienplan_orgform_kurzbz = $new_studienplan_orgform_kurzbz;
foreach ($resultArr as $row)
{
// gerade bearbeiteten Status überspringen
if (isset($old_status_studiensemester)
&& isset($old_status_ausbildungssemester)
&& $row->status_kurzbz == $status_kurzbz
&& $row->studiensemester_kurzbz == $old_status_studiensemester
&& $row->ausbildungssemester == $old_status_ausbildungssemester)
continue;
$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;
$neuer_status->studienplan_orgform_kurzbz = $new_studienplan_orgform_kurzbz;
$neuer_status->matrikelnr = $row->matrikelnr;
$neuer_status->vorname = $row->vorname;
$neuer_status->nachname = $row->nachname;
$statusArr[] = $neuer_status;
$newStatusInserted = true;
}
$statusArr[] = $row;
}
elseif ($new_status_datum_form <= $status_datum && $new_status_semesterstart_form <= $studiensemester_start)
{
$statusArr[] = $row;
}
else
{
// Zeitabfolge ungültig, Fehler
return error($this->_ci->p->t('lehre', 'error_statuseintrag_zeitabfolge'));
}
}
// erster Studentstatus
$ersterStudent = null;
// Ü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;
$studentName = $curr_status->vorname . ' ' . $curr_status->nachname;
if ($curr_status_kurzbz == self::STUDENT_STATUS) $ersterStudent = $curr_status;
// Abbrecher- oder Absolventenstatus muss Endstatus sein
if (isset($next_status) && in_array($curr_status_kurzbz, $this->_endStatusArr))
{
return error($studentName . ' ' . $this->_ci->p->t('lehre', 'error_endstatus'));
}
// wenn Unterbrecher auf Unterbrecher folgt, muss Ausbildungssemester gleich sein
if
($curr_status_kurzbz == self::UNTERBRECHER_STATUS && isset($next_status) && $next_status->status_kurzbz == self::UNTERBRECHER_STATUS
&& $curr_status_ausbildungssemester != $next_status->ausbildungssemester)
{
return error($studentName . ' ' . $this->_ci->p->t('lehre', 'error_consecutiveUnterbrecher'));
}
// wenn Abbrecher auf Unterbrecher folgt, muss Ausbildungssemester gleich sein
if (isset($next_status)
&& $curr_status_kurzbz == self::UNTERBRECHER_STATUS
&& $next_status->status_kurzbz == self::ABBRECHER_STATUS && $curr_status_ausbildungssemester != $next_status->ausbildungssemester)
{
return error($studentName . ' ' . $this->_ci->p->t('lehre', 'error_consecutiveUnterbrecherAbbrecher'));
}
if (isset($next_status) && $next_status->status_kurzbz == self::STUDENT_STATUS)
{
$restliche_status_obj = array_slice($statusArr, $i);
$restliche_status = array_unique(array_column($restliche_status_obj, 'status_kurzbz'));
$status_intersected = array_intersect($restliche_status, $this->_statusAbfolgeVorStudent);
// Vor Studentstatus darf kein Diplomand Status vorhanden sein
if (in_array(self::DIPLOMAND_STATUS, $restliche_status))
{
return error($studentName . ' ' . $this->_ci->p->t('lehre', 'error_consecutiveDiplomandStudent'));
}
// Vor Studentstatus müssen bestimmte Status vorhanden sein
if (array_values($status_intersected) != array_values(array_reverse($this->_statusAbfolgeVorStudent)))
{
return error(
$studentName . ' '
. $this->_ci->p->t('lehre', 'error_wrongStatusOrderBeforeStudent', array(implode(', ', $this->_statusAbfolgeVorStudent)))
);
}
}
}
if (isset($ersterStudent))
{
$studentName = $ersterStudent->vorname . ' ' . $ersterStudent->nachname;
// wenn erster Studentstatus, checken ob Personenkennzeichen passt
$studienjahrNumber = $this->_ci->StudiensemesterModel->getStudienjahrNumberFromStudiensemester($ersterStudent->studiensemester_kurzbz);
if ($studienjahrNumber != mb_substr($ersterStudent->matrikelnr, 0, 2))
{
return error($studentName . ' ' . $this->_ci->p->t('lehre', 'error_personenkennzeichenPasstNichtZuStudiensemester'));
}
// wenn erster Studentstatus, checken ob Orgform des Bewerbers mit Studenten übereinstimmt
if (!isEmptyArray(
array_filter(
$restliche_status_obj,
function ($s) use ($ersterStudent) {
return
$s->status_kurzbz == self::BEWERBER_STATUS
&& (
$s->studienplan_orgform_kurzbz != $ersterStudent->studienplan_orgform_kurzbz
);
}
)
)
)
{
return error($studentName . ' ' . $this->_ci->p->t('lehre', 'error_bewerberOrgformUngleichStudentOrgform'));
}
}
return $resultPs;
}
}
+32 -184
View File
@@ -365,11 +365,11 @@ class Prestudentstatus_model extends DB_Model
{
$qry = "SELECT
*
FROM
FROM
public.tbl_prestudentstatus
WHERE
prestudent_id = ?
AND
prestudent_id = ?
AND
status_kurzbz = ?
AND
studiensemester_kurzbz = ?
@@ -401,11 +401,11 @@ class Prestudentstatus_model extends DB_Model
{
$qry = "SELECT
*
FROM
FROM
public.tbl_prestudentstatus
WHERE
prestudent_id = ?
AND
prestudent_id = ?
AND
status_kurzbz = 'Bewerber'";
$result = $this->execQuery($qry, array($prestudent_id));
@@ -434,7 +434,7 @@ class Prestudentstatus_model extends DB_Model
{
$qry = "SELECT
COUNT(*) as anzahl
FROM
FROM
public.tbl_prestudentstatus
WHERE
prestudent_id = ?
@@ -471,186 +471,34 @@ class Prestudentstatus_model extends DB_Model
}
}
/**
* Check if Datum New Status is in the Past
* @param integer $prestudent_id
* @return error if in past
*/
public function checkDatumNewStatus($new_status_datum)
public function getAllPrestudentstatiWithStudiensemester($prestudent_id)
{
$today = new DateTime('today');
$new_status_datum = new DateTime($new_status_datum);
if($new_status_datum < $today)
{
return error($this->p->t('lehre','error_entryInPast'));
}
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, $nameStud, $status_kurzbz, $new_status_studiensemester_kurzbz, $new_status_datum, $new_status_ausbildungssemester, $old_status_studiensemester_kurzbz = '', $old_status_ausbildungssemester = '')
{
$name = ($nameStud != '') ? $nameStud . ": " : '';
//$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($this->p->t('lehre','error_noStudiensemester') . $new_status_studiensemester_kurzbz);
}
$studiensemester = current($result->retval);
$new_status_semesterstart = $studiensemester->start;
//get all prestudentstati
//TODO(manu) check errorlogic
$resultPs = $this->getAllPrestudentstatiWithStudiensemester($prestudent_id);
if (isError($resultPs))
{
$resultArr = [];
}
if(!hasData($resultPs))
{
$resultArr = [];
}
else
$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)
{
$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;
}
else
{
return error($this->p->t('lehre','error_statuseintrag'));
}
}
$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($name . $this->p->t('lehre','error_endstatus'));
}
// wenn Unterbrecher auf Unterbrecher folgt, muss Ausbildungssemester gleich sein
if (
$curr_status_kurzbz == 'Unterbrecher' && isset($next_status) && $next_status->status_kurzbz == 'Unterbrecher'
&& $curr_status_ausbildungssemester != $next_status->ausbildungssemester
)
{
return error($name . $this->p->t('lehre','error_consecutiveUnterbrecher'));
}
// wenn Abbrecher auf Unterbrecher folgt, muss Ausbildungssemester gleich sein
if (
isset($next_status) && $curr_status_kurzbz == 'Unterbrecher'
&& $next_status->status_kurzbz == 'Abbrecher' && $curr_status_ausbildungssemester != $next_status->ausbildungssemester
)
{
return error($name . $this->p->t('lehre','error_consecutiveUnterbrecherAbbrecher'));
}
// keine Studenten nach Diplomand Status
if (
isset($next_status) && $curr_status_kurzbz == 'Diplomand' && $next_status->status_kurzbz == 'Student'
)
{
return error($name . $this->p->t('lehre','error_consecutiveDiplomandStudent'));
}
}
return $resultPs;
}
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 = "
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
SELECT
tbl_prestudentstatus.status_kurzbz,
tbl_prestudentstatus.studiensemester_kurzbz,
tbl_prestudentstatus.ausbildungssemester,
tbl_prestudentstatus.datum,
s.start AS studiensemester_start,
pl.orgform_kurzbz AS studienplan_orgform_kurzbz,
stud.matrikelnr,
pers.vorname,
pers.nachname
FROM
public.tbl_prestudentstatus
JOIN public.tbl_studiensemester s USING (studiensemester_kurzbz)
JOIN public.tbl_prestudent USING (prestudent_id)
JOIN public.tbl_person pers USING (person_id)
LEFT JOIN public.tbl_student stud USING (prestudent_id)
LEFT JOIN lehre.tbl_studienplan pl USING (studienplan_id)
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 success("0", $this->p->t('lehre','error_noStatusFound'));
}
return $result;
return $this->execQuery($qry, array($prestudent_id));
}
}
@@ -13,35 +13,35 @@ class Studiensemester_model extends DB_Model
$this->hasSequence = false;
}
/**
* Get actual Studiensemester.
*
* @return array
*/
public function getAkt()
{
return $this->loadWhere(array(
'start <= ' => 'NOW()',
'ende >= ' => 'NOW()'
)
);
}
/**
* Get actual Studiensemester.
*
* @return array
*/
public function getAkt()
{
return $this->loadWhere(array(
'start <= ' => 'NOW()',
'ende >= ' => 'NOW()'
)
);
}
// Get next study semester
public function getNext()
{
$query = '
SELECT *
FROM
public.tbl_studiensemester
WHERE
start > now()
ORDER BY start
LIMIT 1;
';
{
$query = '
SELECT *
FROM
public.tbl_studiensemester
WHERE
start > now()
ORDER BY start
LIMIT 1;
';
return $this->execQuery($query);
}
return $this->execQuery($query);
}
/**
* getLastOrAktSemester
@@ -182,10 +182,10 @@ class Studiensemester_model extends DB_Model
return success(array());
$query = "
SELECT *
FROM public.tbl_studiensemester
WHERE ( ?::date < ende AND ?::date > start )
ORDER BY start DESC";
SELECT *
FROM public.tbl_studiensemester
WHERE ( ?::date < ende AND ?::date > start )
ORDER BY start DESC";
return $this->execQuery($query, array($from, $to));
}
@@ -200,7 +200,7 @@ class Studiensemester_model extends DB_Model
{
$query = "SELECT studiensemester_kurzbz, start, ende FROM public.vw_studiensemester
WHERE studiensemester_kurzbz <> ?
ORDER BY delta, start LIMIT 1";
ORDER BY delta, start LIMIT 1";
return $this->execQuery($query, array($studiensemester_kurzbz));
}
@@ -211,7 +211,7 @@ class Studiensemester_model extends DB_Model
FROM public.tbl_studiensemester
WHERE start >= NOW() OR (start <= NOW() AND ende >= NOW())
ORDER BY start';
return $this->execQuery($query);
}
@@ -241,4 +241,16 @@ class Studiensemester_model extends DB_Model
$this->db->where_in($this->pk, '(' . $plus . ') UNION (' . $minus . ')', false);
}
/**
* Holt letzen zwei Ziffern des Studienjahres von Studiensemester, z.B. 24 für WS2024 und SS2025
* @param studiensemester_kurzbz
* @return string Studienjahr Nummer
*/
public function getStudienjahrNumberFromStudiensemester($studiensemester_kurzbz)
{
$studienjahrNumber = mb_substr($studiensemester_kurzbz, 4, 2);
if (is_numeric($studienjahrNumber) && mb_substr($studiensemester_kurzbz, 0, 2) == 'SS') (int)$studienjahrNumber -= 1;
return $studienjahrNumber;
}
}
+64 -4
View File
@@ -24832,7 +24832,7 @@ array(
'insertvon' => 'system'
)
)
),
),
// Personalverwaltung end
array(
'app' => 'core',
@@ -27885,18 +27885,18 @@ array(
array(
'app' => 'core',
'category' => 'lehre',
'phrase' => 'error_statuseintrag',
'phrase' => 'error_statuseintrag_zeitabfolge',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Datum des Statuseintrags muss nach dem Statusdatum, das Semesterstartdatum nach Semesterstartdatum des vorherigen Statuseintrags sein',
'text' => 'Ungültige Zeitabfolge der Statuseinträge (Statusdatum oder Semester)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Error: Date of the status entry must be after the start date, the semester start date after the semester start date of the previous status entry',
'text' => 'Error: Invalid date order of statuses (date or semester)',
'description' => '',
'insertvon' => 'system'
)
@@ -28202,6 +28202,66 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'lehre',
'phrase' => 'error_wrongStatusOrderBeforeStudent',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Vor dem Studentenstatus müssen folgende Status eingetragen werden: {0}',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Error: Following status should be present before student status: {0}',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'lehre',
'phrase' => 'error_personenkennzeichenPasstNichtZuStudiensemester',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Personenkennzeichen passt nicht zu Studiensemester des ersten Studentstatus',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Error: Personenkennzeichen does not fit with semester of first student status',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'lehre',
'phrase' => 'error_bewerberOrgformUngleichStudentOrgform',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Erster Studentstatus muss gleiche Organisationsform haben wie Bewerberstatus (Studienplan Orgform)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Error: first student status should have same organisational form as bewerber status (Studienplan)',
'description' => '',
'insertvon' => 'system'
)
)
)
);