use single tagLibs for dynamisation

new tagLibs (doubleDegree, jgv, missingZgv, Outgoing, StudienbeitragErhoeht, Unterbrecher)
refactor tagJob rebuildAutomatedTags
This commit is contained in:
ma0068
2026-04-15 09:45:57 +02:00
parent ee6f28c06d
commit 1339077b57
13 changed files with 536 additions and 39 deletions
-17
View File
@@ -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'];
+7 -14
View File
@@ -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);
+22 -2
View File
@@ -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)
@@ -0,0 +1,67 @@
<?php
/**
* Description of dd_auto
*
* @author ma0068
*/
class CoreDoubleDegreeTagLib
{
protected $ci;
public function __construct()
{
$this->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;
}
}
@@ -0,0 +1,60 @@
<?php
/**
* Description of jgv_auto (Jahrgangsvertretung)
*
* @author ma0068
*/
class CoreJgvTagLib
{
protected $ci;
public function __construct()
{
$this->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;
}
}
@@ -0,0 +1,76 @@
<?php
/**
* Description of zgv_auto
*
* @author ma0068
*/
class CoreMissingZgvTagLib
{
protected $ci;
public function __construct()
{
$this->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;
}
}
@@ -0,0 +1,59 @@
<?php
/**
* Description of out_auto
*
* @author ma0068
*/
class CoreOutgoingTagLib
{
protected $ci;
public function __construct()
{
$this->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;
}
}
@@ -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'];
@@ -0,0 +1,68 @@
<?php
/**
* Description of dd_auto
*
* @author ma0068
*/
class CoreStudienbeitragErhoehtTagLib
{
protected $ci;
public function __construct()
{
$this->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;
}
}
@@ -0,0 +1,64 @@
<?php
/**
* Description of wiedereinstieg_auto
*
* @author ma0068
*/
class CoreUnterbrecherTagLib
{
protected $ci;
public function __construct()
{
$this->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;
}
}
@@ -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'];
+52
View File
@@ -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));
}
}
@@ -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));
}
}