From 49cb30ee2ba09838f484b370b003fb7989b1e6f7 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Mon, 25 Nov 2024 15:18:21 +0100 Subject: [PATCH] Personenkennzeichen: if date after Meldestichtag, next Studienjahr is used for generation (for Summersemester) --- application/libraries/PrestudentLib.php | 27 ++++++++++++------------ application/models/crm/Student_model.php | 23 +++++++++++++++++--- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/application/libraries/PrestudentLib.php b/application/libraries/PrestudentLib.php index ef5e2e3a9..f51675747 100644 --- a/application/libraries/PrestudentLib.php +++ b/application/libraries/PrestudentLib.php @@ -222,18 +222,18 @@ class PrestudentLib $statusgrund_id = null ) { $ausbildungssemester_plus = 0; - + if (!$insertvon) $insertvon = getAuthUID(); $result = $this->_ci->PrestudentstatusModel->getLastStatus($prestudent_id, $studiensemester_kurzbz); - + if (isError($result)) return $result; - + $result = getData($result); - + if (!$result) { // NOTE(chris): no status in target stdsem //NOTE(manu): only valid if nextSemester focus max @@ -304,7 +304,7 @@ class PrestudentLib return $result; $result = getData($result); - + if (!$result) return error($this->_ci->p->t('studierendenantrag', 'error_no_student_for_prestudent', ['prestudent_id' => $prestudent_id])); @@ -612,16 +612,17 @@ class PrestudentLib // Genererate Personenkennzeichen - $personenkennzeichen = $this->_ci->StudentModel->generateMatrikelnummer2( + $personenkennzeichen = $this->_ci->StudentModel->generatePersonenkennzeichen( $student_data->studiengang_kz, $studiensemester_kurzbz, + $today, $student_data->typ ); if (isError($personenkennzeichen)) return $personenkennzeichen; $personenkennzeichen = getData($personenkennzeichen); - - + + // Generate UID $uid = $this->_ci->StudentModel->generateUID( $student_data->kurzbz, @@ -695,7 +696,7 @@ class PrestudentLib if (isError($result)) return $result; - + // Add Student $result = $this->_ci->StudentModel->insert([ @@ -712,14 +713,14 @@ class PrestudentLib if (isError($result)) return $result; - + // Add Lehrverband if it does not exist $result = $this->_ci->LehrverbandModel->load([' ', ' ', $ausbildungssemester, $student_data->studiengang_kz]); - + if (isError($result)) return $result; - + if (!hasData($result)) { $result = $this->_ci->LehrverbandModel->insert([ 'studiengang_kz' => $student_data->studiengang_kz, @@ -804,7 +805,7 @@ class PrestudentLib if (isError($result)) return $result; - + // Load Student $result = $this->_ci->StudentModel->loadWhere(['prestudent_id' => $prestudent_id]); diff --git a/application/models/crm/Student_model.php b/application/models/crm/Student_model.php index bd7ab41b6..541009024 100644 --- a/application/models/crm/Student_model.php +++ b/application/models/crm/Student_model.php @@ -15,6 +15,8 @@ class Student_model extends DB_Model $this->dbTable = 'public.tbl_student'; $this->pk = array('student_uid'); $this->hasSequence = false; + + $this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel'); } // **** @@ -62,15 +64,15 @@ class Student_model extends DB_Model * logic FH Burgenland * * TODO(chris): replace function above with this? - * TODO(chris): rename to generatePersonenkennzeichen? * * @param integer $studiengang_kz * @param string $studiensemester_kurzbz + * @param string $beginndatum * @param string $typ * * @return stdClass */ - public function generateMatrikelnummer2($studiengang_kz, $studiensemester_kurzbz, $typ = null) + public function generatePersonenkennzeichen($studiengang_kz, $studiensemester_kurzbz, $beginndatum, $typ = null) { $personenkennzeichen = false; @@ -128,7 +130,22 @@ class Student_model extends DB_Model break; } } - if($art=='2' || $art=='4') + + // get Bismeldestichtag for the semester + $meldestichtagRes = $this->BismeldestichtagModel->getByStudiensemester($studiensemester_kurzbz); + + if (isError($meldestichtagRes)) + return $meldestichtagRes; + + // if start of study is after Bismeldestichtag, Studienjahr of next semester is used, so 1 doesn't need to be subtracted for SS + $afterMeldeStichtag = false; + if (hasData($meldestichtagRes)) + { + $meldestichtag = getData($meldestichtagRes)[0]->meldestichtag; + $afterMeldeStichtag = isset($beginndatum) && new DateTime($beginndatum) > new DateTime($meldestichtag); + } + + if (($art=='2' || $art=='4') && !$afterMeldeStichtag) $jahr = $jahr-1; //FH-Burgenland - weil leider die AO Studiengänge aufgeteilt sind