From 1339077b5784d56a17b758870a014e770b4d64b5 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 15 Apr 2026 09:45:57 +0200 Subject: [PATCH] use single tagLibs for dynamisation new tagLibs (doubleDegree, jgv, missingZgv, Outgoing, StudienbeitragErhoeht, Unterbrecher) refactor tagJob rebuildAutomatedTags --- application/config/stv.php | 17 ----- application/controllers/jobs/TagJob.php | 21 ++--- application/libraries/TagLib.php | 24 +++++- .../libraries/tags/CoreDoubleDegreeTagLib.php | 67 ++++++++++++++++ application/libraries/tags/CoreJgvTagLib.php | 60 +++++++++++++++ .../libraries/tags/CoreMissingZgvTagLib.php | 76 +++++++++++++++++++ .../libraries/tags/CoreOutgoingTagLib.php | 59 ++++++++++++++ .../tags/CorePrewiederholerTagLib.php | 4 +- .../tags/CoreStudienbeitragErhoehtTagLib.php | 68 +++++++++++++++++ .../libraries/tags/CoreUnterbrecherTagLib.php | 64 ++++++++++++++++ .../libraries/tags/CoreWiederholerTagLib.php | 4 +- application/models/codex/Bisio_model.php | 52 +++++++++++++ .../models/person/Benutzerfunktion_model.php | 59 ++++++++++++++ 13 files changed, 536 insertions(+), 39 deletions(-) create mode 100644 application/libraries/tags/CoreDoubleDegreeTagLib.php create mode 100644 application/libraries/tags/CoreJgvTagLib.php create mode 100644 application/libraries/tags/CoreMissingZgvTagLib.php create mode 100644 application/libraries/tags/CoreOutgoingTagLib.php create mode 100644 application/libraries/tags/CoreStudienbeitragErhoehtTagLib.php create mode 100644 application/libraries/tags/CoreUnterbrecherTagLib.php diff --git a/application/config/stv.php b/application/config/stv.php index f902b30ce..6aa621a84 100644 --- a/application/config/stv.php +++ b/application/config/stv.php @@ -153,20 +153,3 @@ $config['stv_prestudent_tags'] = [ 'jgv_auto' => ['readonly' => false], 'nachteilausgl_auto' => ['readonly' => false], ]; - -//TODO(manu) check ob das besser als param für job übergeben werden soll -$config['stv_automatic_tags'] = [ - 'dd_auto', - 'wh_auto', - 'out_auto', - 'prewh_auto', - 'zgv_auto', - 'wiedereinstieg_auto', - 'stbtr_erh_auto', - 'beitr_befr_auto', - 'jgv_auto', - 'nachteilausgl_auto' -]; - -$config['stv_stgs_to_tag'] = ['254']; - diff --git a/application/controllers/jobs/TagJob.php b/application/controllers/jobs/TagJob.php index 644f9b521..9ff43def4 100644 --- a/application/controllers/jobs/TagJob.php +++ b/application/controllers/jobs/TagJob.php @@ -90,14 +90,10 @@ class TagJob extends JOB_Controller public function rebuildAutomatedTags() { print_r( PHP_EOL . "Start Job rebuild" . PHP_EOL); - $automaticTags = $this->config->item('stv_automatic_tags'); - print_r( implode( ", ", $automaticTags) . PHP_EOL); $automatedTagsRes = $this->NotiztypModel->loadWhere(array('automatisiert' => true, 'taglib IS NOT NULL' => null)); - //echo $this->NotiztypModel->db->last_query(); $automatedTags = hasData($automatedTagsRes) ? getData($automatedTagsRes) : []; - print_r($automatedTags); - + //print_r($automatedTags); foreach($automatedTags as $autoTag) { @@ -125,15 +121,12 @@ class TagJob extends JOB_Controller if (isError($result)) return error ('Error occurred during updateAutomatedTags'); - print_r(PHP_EOL ."ALL TAGS " . $kurz_bz . " " . count($data[0]) . " TO ADD " . count($data[1]) . " TO RECYLE: " . count($data[2]) . " TO DELETE: " . count($data[3])); - - - print_r( PHP_EOL . "Count Recycled: "); - print_r($data[4]); - print_r( PHP_EOL . "Count Added: "); - print_r($data[6]); - print_r( PHP_EOL . "Count Deleted: "); - print_r($data[8] . PHP_EOL . PHP_EOL); + //Output with Summary and Details + print_r(PHP_EOL . "-- TAG " . $result->retval['input']['tag'] . " --"); + print_r( PHP_EOL . "Count Recycled: " . $result->retval['summary']['recycled']); + print_r(PHP_EOL . "Count Added: ". $result->retval['summary']['added']); + print_r(PHP_EOL . "Count Deleted: ". $result->retval['summary']['deleted']); + print_r(PHP_EOL); } print_r( PHP_EOL . "End Job rebuild" . PHP_EOL); diff --git a/application/libraries/TagLib.php b/application/libraries/TagLib.php index aa9fb640e..c84cd19f8 100644 --- a/application/libraries/TagLib.php +++ b/application/libraries/TagLib.php @@ -163,8 +163,28 @@ class TagLib $deleted[] = $value; } - return success([$allTags, $toAdd, $toRecycle, $toDelete, $countRecyled, $retagged, $countAdded, $tagged, $countDeleted, $deleted]); - + return success([ + 'input' => [ + 'tag' => $tag, + 'prestudentIds' => $prestudentIds, + ], + 'summary' => [ + 'recycled' => $countRecyled, + 'added' => $countAdded, + 'deleted' => $countDeleted, + ], + 'details' => [ + 'existingTags' => $allTags, + 'toAdd' => $toAdd, + 'toRecycle' => $toRecycle, + 'toDelete' => $toDelete, + ], + 'results' => [ + 'retaggedNotizIds' => $retagged, + 'newTags' => $tagged, + 'deletedNotizIds' => $deleted, + ] + ]); } public function updateAutomatedTagsForPrestudent($tag, $prestudent_id) diff --git a/application/libraries/tags/CoreDoubleDegreeTagLib.php b/application/libraries/tags/CoreDoubleDegreeTagLib.php new file mode 100644 index 000000000..eed489fae --- /dev/null +++ b/application/libraries/tags/CoreDoubleDegreeTagLib.php @@ -0,0 +1,67 @@ +ci = get_instance(); + $this->ci->load->model('codex/Mobilitaet_model', 'MobilitaetModel'); + } + + public function getZuordnungIds(array $params) + { + if(!isset($params['studiensemester_kurzbz'])) + { + return (object) array( + 'prestudent_id' => [] + ); + } + + $semester = $params['studiensemester_kurzbz']; + + $this->ci->MobilitaetModel->addJoin('bis.tbl_gsprogramm', 'gsprogramm_id'); + $result = $this->ci->MobilitaetModel-> loadWhere(array( + 'gsprogrammtyp_kurzbz' => 'Double', + 'studiensemester_kurzbz' => $semester + )); + $data = $result->retval; + $ids = array_map(function($item) { + return $item->prestudent_id; + }, $data); + + return (object) array( + 'prestudent_id' => $ids + ); + } + + public function isCriteriaSetFor(array $params) + { + if(!isset($params['prestudent_id']) || !isset($params['studiensemester_kurzbz'])) + { + return false; + } + + $semester = $params['studiensemester_kurzbz']; + $prestudent_id = $params['prestudent_id']; + + $this->ci->MobilitaetModel->addJoin('bis.tbl_gsprogramm', 'gsprogramm_id'); + $result = $this->ci->MobilitaetModel->loadWhere(array( + 'gsprogrammtyp_kurzbz' => 'Double', + 'studiensemester_kurzbz' => $semester, + 'prestudent_id' => $prestudent_id + )); + if(hasData($result)) + { + return true; + } + else + return false; + } + +} diff --git a/application/libraries/tags/CoreJgvTagLib.php b/application/libraries/tags/CoreJgvTagLib.php new file mode 100644 index 000000000..1117e997b --- /dev/null +++ b/application/libraries/tags/CoreJgvTagLib.php @@ -0,0 +1,60 @@ +ci = get_instance(); + $this->ci->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel'); + } + + public function getZuordnungIds(array $params) + { + if(!isset($params['studiensemester_kurzbz'])) + { + return (object) array( + 'prestudent_id' => [] + ); + } + + $semester = $params['studiensemester_kurzbz']; + + $result = $this->ci->BenutzerfunktionModel->getPrestudentsOfJgv($semester); + + $data = $result->retval; + $ids = array_map(function($item) { + return $item->prestudent_id; + }, $data); + + return (object) array( + 'prestudent_id' => $ids + ); + } + + public function isCriteriaSetFor(array $params) + { + if(!isset($params['prestudent_id']) || !isset($params['studiensemester_kurzbz'])) + { + return false; + } + + $semester = $params['studiensemester_kurzbz']; + $prestudent_id = $params['prestudent_id']; + + $result = $this->ci->BenutzerfunktionModel->isJgv($semester, $prestudent_id); + + if(hasData($result)) + { + return true; + } + else + return false; + } + +} diff --git a/application/libraries/tags/CoreMissingZgvTagLib.php b/application/libraries/tags/CoreMissingZgvTagLib.php new file mode 100644 index 000000000..acf71c4d2 --- /dev/null +++ b/application/libraries/tags/CoreMissingZgvTagLib.php @@ -0,0 +1,76 @@ +ci = get_instance(); + $this->ci->load->model('crm/Prestudent_model', 'PrestudentModel'); + } + + public function getZuordnungIds(array $params) + { + if(!isset($params['studiensemester_kurzbz'])) + { + return (object) array( + 'prestudent_id' => [] + ); + } + + $semester = $params['studiensemester_kurzbz']; + + $this->ci->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id'); + $this->ci->PrestudentModel->addJoin('public.tbl_benutzer bn', 'person_id'); + $this->ci->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); + $result = $this->ci->PrestudentModel-> loadWhere(array( + 'bn.aktiv' => true, //check if necessary + 'zgvdatum' => null, + 'typ' => 'b', + 'studiensemester_kurzbz' => $semester + )); + + $data = $result->retval; + $ids = array_map(function($item) { + return $item->prestudent_id; + }, $data); + + return (object) array( + 'prestudent_id' => $ids + ); + } + + public function isCriteriaSetFor(array $params) + { + if(!isset($params['prestudent_id']) || !isset($params['studiensemester_kurzbz'])) + { + return false; + } + + $semester = $params['studiensemester_kurzbz']; + $prestudent_id = $params['prestudent_id']; + + $this->ci->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id'); + $this->ci->PrestudentModel->addJoin('public.tbl_benutzer bn', 'person_id'); + $this->ci->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); + $result = $this->ci->PrestudentModel->loadWhere(array( + 'bn.aktiv' => true, //check if necessary + 'zgvdatum' => null, + 'typ' => 'b', + 'studiensemester_kurzbz' => $semester, + 'prestudent_id' => $prestudent_id + )); + if(hasData($result)) + { + return true; + } + else + return false; + } + +} diff --git a/application/libraries/tags/CoreOutgoingTagLib.php b/application/libraries/tags/CoreOutgoingTagLib.php new file mode 100644 index 000000000..f1764611a --- /dev/null +++ b/application/libraries/tags/CoreOutgoingTagLib.php @@ -0,0 +1,59 @@ +ci = get_instance(); + $this->ci->load->model('codex/Bisio_model', 'BisioModel'); + } + + public function getZuordnungIds(array $params) + { + if(!isset($params['studiensemester_kurzbz'])) + { + return (object) array( + 'prestudent_id' => [] + ); + } + + $semester = $params['studiensemester_kurzbz']; + + $result = $this->ci->BisioModel->getOutgoingsOfSemester($semester); + + $data = $result->retval; + $ids = array_map(function($item) { + return $item->prestudent_id; + }, $data); + + return (object) array( + 'prestudent_id' => $ids + ); + } + + public function isCriteriaSetFor(array $params) + { + if(!isset($params['prestudent_id']) || !isset($params['studiensemester_kurzbz'])) + { + return false; + } + + $semester = $params['studiensemester_kurzbz']; + $prestudent_id = $params['prestudent_id']; + + $result = $this->ci->BisioModel->isPrestudentOutgoing($semester, $prestudent_id); + if(hasData($result)) + { + return true; + } + else + return false; + } + +} diff --git a/application/libraries/tags/CorePrewiederholerTagLib.php b/application/libraries/tags/CorePrewiederholerTagLib.php index ac6d152c6..cf15bd938 100644 --- a/application/libraries/tags/CorePrewiederholerTagLib.php +++ b/application/libraries/tags/CorePrewiederholerTagLib.php @@ -42,9 +42,7 @@ class CorePrewiederholerTagLib { if(!isset($params['prestudent_id']) || !isset($params['studiensemester_kurzbz'])) { - return (object) array( - 'isSet' => false - ); + return false; } $semester = $params['studiensemester_kurzbz']; diff --git a/application/libraries/tags/CoreStudienbeitragErhoehtTagLib.php b/application/libraries/tags/CoreStudienbeitragErhoehtTagLib.php new file mode 100644 index 000000000..3e0eaaa26 --- /dev/null +++ b/application/libraries/tags/CoreStudienbeitragErhoehtTagLib.php @@ -0,0 +1,68 @@ +ci = get_instance(); + $this->ci->load->model('crm/Konto_model', 'KontoModel'); + } + + public function getZuordnungIds(array $params) + { + if(!isset($params['studiensemester_kurzbz'])) + { + return (object) array( + 'prestudent_id' => [] + ); + } + + $semester = $params['studiensemester_kurzbz']; + + $this->ci->KontoModel->addJoin('public.tbl_prestudent', 'person_id'); + $result = $this->ci->KontoModel-> loadWhere(array( + 'buchungstyp_kurzbz' => 'StudiengebuehrErhoeht', + 'studiensemester_kurzbz' => $semester + )); + $data = $result->retval; + $ids = array_map(function($item) { + return $item->prestudent_id; + }, $data); + + return (object) array( + 'prestudent_id' => $ids + ); + } + + public function isCriteriaSetFor(array $params) + { + if(!isset($params['prestudent_id']) || !isset($params['studiensemester_kurzbz'])) + { + return false; + } + + $semester = $params['studiensemester_kurzbz']; + $prestudent_id = $params['prestudent_id']; + + $this->ci->KontoModel->addJoin('public.tbl_prestudent', 'person_id'); + $result = $this->ci->KontoModel-> loadWhere(array( + 'buchungstyp_kurzbz' => 'StudiengebuehrErhoeht', + 'studiensemester_kurzbz' => $semester, + 'prestudent_id' => $prestudent_id + )); + + if(hasData($result)) + { + return true; + } + else + return false; + } + +} diff --git a/application/libraries/tags/CoreUnterbrecherTagLib.php b/application/libraries/tags/CoreUnterbrecherTagLib.php new file mode 100644 index 000000000..8ea16e378 --- /dev/null +++ b/application/libraries/tags/CoreUnterbrecherTagLib.php @@ -0,0 +1,64 @@ +ci = get_instance(); + $this->ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + } + + public function getZuordnungIds(array $params) + { + if(!isset($params['studiensemester_kurzbz'])) + { + return (object) array( + 'prestudent_id' => [] + ); + } + + $semester = $params['studiensemester_kurzbz']; + $result = $this->ci->PrestudentstatusModel-> loadWhere(array( + 'status_kurzbz' => 'Unterbrecher', + 'studiensemester_kurzbz' => $semester + )); + $data = $result->retval; + $ids = array_map(function($item) { + return $item->prestudent_id; + }, $data); + + return (object) array( + 'prestudent_id' => $ids + ); + } + + public function isCriteriaSetFor(array $params) + { + if(!isset($params['prestudent_id']) || !isset($params['studiensemester_kurzbz'])) + { + return false; + } + + $semester = $params['studiensemester_kurzbz']; + $prestudent_id = $params['prestudent_id']; + + $result = $this->ci->PrestudentstatusModel-> loadWhere(array( + 'status_kurzbz' => 'Unterbrecher', + 'studiensemester_kurzbz' => $semester, + 'prestudent_id' => $prestudent_id + )); + if(hasData($result)) + { + return true; + } + else + return false; + } + +} diff --git a/application/libraries/tags/CoreWiederholerTagLib.php b/application/libraries/tags/CoreWiederholerTagLib.php index 9f0dc3720..43fa6fce3 100644 --- a/application/libraries/tags/CoreWiederholerTagLib.php +++ b/application/libraries/tags/CoreWiederholerTagLib.php @@ -42,9 +42,7 @@ class CoreWiederholerTagLib { if(!isset($params['prestudent_id']) || !isset($params['studiensemester_kurzbz'])) { - return (object) array( - 'isSet' => false - ); + return false; } $semester = $params['studiensemester_kurzbz']; diff --git a/application/models/codex/Bisio_model.php b/application/models/codex/Bisio_model.php index 1cff1dc54..765f01b84 100644 --- a/application/models/codex/Bisio_model.php +++ b/application/models/codex/Bisio_model.php @@ -44,4 +44,56 @@ class Bisio_model extends DB_Model else return success("Bisio not found"); } + + /** + * Gets outgoing students of certain Semester + * @param String studiensemester_kurzbz + * @return array of prestudent_ids + */ + public function getOutgoingsOfSemester($studiensemester_kurzbz) + { + $query = " + SELECT DISTINCT ps.prestudent_id + FROM bis.tbl_bisio + JOIN public.tbl_student USING (student_uid) + JOIN public.tbl_prestudent ps USING (prestudent_id) + JOIN public.tbl_prestudentstatus pss ON (ps.prestudent_id = pss.prestudent_id) + JOIN public.tbl_studiensemester ss ON (pss.studiensemester_kurzbz = ss.studiensemester_kurzbz) + WHERE ss.studiensemester_kurzbz = ? + AND ( + tbl_bisio.von <= ss.ende + AND ( + tbl_bisio.bis >= ss.start + OR tbl_bisio.bis IS NULL + ) + ) + "; + + return $this->execQuery($query, array($studiensemester_kurzbz)); + } + + public function isPrestudentOutgoing($studiensemester_kurzbz, $prestudent_id) + { + $query = " + SELECT + * + FROM bis.tbl_bisio + JOIN public.tbl_student USING (student_uid) + JOIN public.tbl_prestudent ps USING (prestudent_id) + JOIN public.tbl_prestudentstatus pss ON (ps.prestudent_id = pss.prestudent_id) + JOIN public.tbl_studiensemester ss ON (pss.studiensemester_kurzbz = ss.studiensemester_kurzbz) + WHERE ss.studiensemester_kurzbz = ? + AND pss.status_kurzbz = 'Student' + AND ( + tbl_bisio.von <= ss.ende + AND ( + tbl_bisio.bis >= ss.start + OR tbl_bisio.bis IS NULL + ) + ) + AND ps.prestudent_id = ? + "; + + return $this->execQuery($query, array($studiensemester_kurzbz, $prestudent_id)); + } } diff --git a/application/models/person/Benutzerfunktion_model.php b/application/models/person/Benutzerfunktion_model.php index 8c43e4f84..f5a453bd0 100644 --- a/application/models/person/Benutzerfunktion_model.php +++ b/application/models/person/Benutzerfunktion_model.php @@ -314,5 +314,64 @@ class Benutzerfunktion_model extends DB_Model return success($funktionJson); } + /** + * Gets all Prestudents with details for a given Benutzerfunktion and optionally semester + * + * @param String $studiensemester_kurzbz + * @return object |null + */ + public function getPrestudentsOfJgv($semester) + { + $query = " + SELECT DISTINCT ps.prestudent_id + FROM public.tbl_benutzerfunktion bf + JOIN public.tbl_benutzer bn USING (uid) + JOIN public.tbl_prestudent ps USING (person_id) + JOIN public.tbl_prestudentstatus pss ON (ps.prestudent_id = pss.prestudent_id) + JOIN public.tbl_studiensemester ss ON (pss.studiensemester_kurzbz = ss.studiensemester_kurzbz) + WHERE ss.studiensemester_kurzbz = ? + AND bf.funktion_kurzbz = 'jgv' + AND ( + bf.datum_von <= ss.ende + AND ( + bf.datum_bis >= ss.start + OR bf.datum_bis IS NULL + ) + ) + "; + + return $this->execQuery($query, array($semester)); + } + + /** + * Checks if a certain prestudent has the Benutzerfunktion jgv for a certain semester + * + * @param String $studiensemester_kurzbz + * @param $prestudent_id + * @return object |null + */ + public function isJgv($semester, $prestudent_id) + { + $query = " + SELECT * + FROM public.tbl_benutzerfunktion bf + JOIN public.tbl_benutzer bn USING (uid) + JOIN public.tbl_prestudent ps USING (person_id) + JOIN public.tbl_prestudentstatus pss ON (ps.prestudent_id = pss.prestudent_id) + JOIN public.tbl_studiensemester ss ON (pss.studiensemester_kurzbz = ss.studiensemester_kurzbz) + WHERE ss.studiensemester_kurzbz = ? + AND bf.funktion_kurzbz = 'jgv' + AND ( + bf.datum_von <= ss.ende + AND ( + bf.datum_bis >= ss.start + OR bf.datum_bis IS NULL + ) + ) + AND ps.prestudent_id = ? + "; + + return $this->execQuery($query, array($semester, $prestudent_id)); + } }