diff --git a/application/config/stv.php b/application/config/stv.php index 3090e3f2e..4893560e0 100644 --- a/application/config/stv.php +++ b/application/config/stv.php @@ -150,4 +150,6 @@ $config['stv_prestudent_tags'] = [ 'unterbrecher_auto' => ['readonly' => true], 'stbtr_erh_auto' => ['readonly' => true], 'jgv_auto' => ['readonly' => true], + 'in_auto' => ['readonly' => true], + 'preabbr_auto' => ['readonly' => true], ]; diff --git a/application/libraries/tags/CoreIncomingTagLib.php b/application/libraries/tags/CoreIncomingTagLib.php new file mode 100644 index 000000000..26d7dad0b --- /dev/null +++ b/application/libraries/tags/CoreIncomingTagLib.php @@ -0,0 +1,63 @@ +ci = get_instance(); + $this->ci->load->model('codex/Bisio_model', 'BisioModel'); + } + + public function getZuordnungIds(array $params) + { + if(!isset($params['studiensemester_kurzbz'])) + { + return (object) array( + 'idArray' => [] + ); + } + + $semester = $params['studiensemester_kurzbz']; + + $result = $this->ci->BisioModel->getIncomingsOfSemester($semester); + + $data = $result->retval; + + $outgoing_data = array_map(function($item) { + return [ + 'id' => $item->prestudent_id, + 'von' => $item->von, + 'bis' => $item->bis + ]; + }, $data); + + return (object) array( + 'data' => $outgoing_data, + 'typeId' => 'prestudent_id', + ); + } + + public function isCriteriaSetFor(array $params) + { + if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id') + return false; + + $semester = $params['studiensemester_kurzbz']; + $prestudent_id = $params['id']; + + $result = $this->ci->BisioModel->isPrestudentIncoming($semester, $prestudent_id); + + if (hasData($result)) { + return $result; + } + else + return null; + } + +} diff --git a/application/libraries/tags/CorePreabbrecherTagLib.php b/application/libraries/tags/CorePreabbrecherTagLib.php new file mode 100644 index 000000000..41712ac3b --- /dev/null +++ b/application/libraries/tags/CorePreabbrecherTagLib.php @@ -0,0 +1,80 @@ +ci = get_instance(); + $this->ci->load->model('education/Studierendenantrag_model', 'StudierendenantragModel'); + } + + public function getZuordnungIds(array $params) + { + if(!isset($params['studiensemester_kurzbz'])) + { + return (object) array( + 'idArray' => [] + ); + } + + $semester = $params['studiensemester_kurzbz']; + + $this->ci->StudierendenantragModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz'); + $this->ci->StudierendenantragModel->db->where_in('typ', self::TYP_ABMELDUNG); + $this->ci->StudierendenantragModel->db->where('studiensemester_kurzbz', $semester); + $result = $this->ci->StudierendenantragModel->getWithLastStatusWhere([ + 'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_CREATED + ]); + + $data = $result->retval; + + $prewiederholer_data = array_map(function($item) { + return [ + 'id' => $item->prestudent_id, + 'von' => $item->start, + 'bis' => $item->ende + ]; + }, $data); + + return (object) array( + 'data' => $prewiederholer_data, + 'typeId' => 'prestudent_id', + ); + } + + public function isCriteriaSetFor(array $params) + { + if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id') + return false; + + $semester = $params['studiensemester_kurzbz']; + $prestudent_id = $params['id']; + + $this->ci->StudierendenantragModel->addSelect('prestudent_id'); + $this->ci->StudierendenantragModel->addSelect('start as von'); + $this->ci->StudierendenantragModel->addSelect('ende as bis'); + + $this->ci->StudierendenantragModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz'); + $this->ci->StudierendenantragModel->db->where_in('typ', self::TYP_ABMELDUNG); + $this->ci->StudierendenantragModel->db->where('studiensemester_kurzbz', $semester); + $this->ci->StudierendenantragModel->db->where('prestudent_id', $prestudent_id); + $result = $this->ci->StudierendenantragModel->getWithLastStatusWhere([ + 'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_CREATED + ]); + + if(hasData($result)) + { + return $result; + } + else + return null; + } + +} diff --git a/application/models/codex/Bisio_model.php b/application/models/codex/Bisio_model.php index 9a9fd37fb..972661c8b 100644 --- a/application/models/codex/Bisio_model.php +++ b/application/models/codex/Bisio_model.php @@ -73,6 +73,34 @@ class Bisio_model extends DB_Model return $this->execQuery($query, array($studiensemester_kurzbz)); } + /** + * Gets incoming students of certain Semester + * @param String studiensemester_kurzbz + * @return array of prestudent_ids + */ + public function getIncomingsOfSemester($studiensemester_kurzbz) + { + $query = " + SELECT DISTINCT ps.prestudent_id, tbl_bisio.von, tbl_bisio.bis + 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 nation_code = 'A' + 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 = " @@ -97,4 +125,29 @@ class Bisio_model extends DB_Model return $this->execQuery($query, array($studiensemester_kurzbz, $prestudent_id)); } + + public function isPrestudentIncoming($studiensemester_kurzbz, $prestudent_id) + { + $query = " + SELECT + ps.prestudent_id, tbl_bisio.von, tbl_bisio.bis + 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 nation_code = 'A' + 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/public/css/tags.css b/public/css/tags.css index 3b3377d5d..0634c5ce3 100644 --- a/public/css/tags.css +++ b/public/css/tags.css @@ -91,6 +91,15 @@ color: black; } +.tag_skyblue { + background-color: #90D5FF; + color: black; +} +.tag_blush { + background-color: #A83E3E; + color: white; +} + .tag_done { text-decoration: line-through; } diff --git a/system/dbupdate_3.4/75959_StudVw_Automatische_Tags.php b/system/dbupdate_3.4/75959_StudVw_Automatische_Tags.php index 1b6d6b1dd..1954ae48d 100644 --- a/system/dbupdate_3.4/75959_StudVw_Automatische_Tags.php +++ b/system/dbupdate_3.4/75959_StudVw_Automatische_Tags.php @@ -16,7 +16,7 @@ if(!@$db->db_query("SELECT taglib FROM public.tbl_notiz_typ LIMIT 1")) $tags = [ [ 'typ_kurzbz' => 'wh_auto', - 'bezeichnung' => '{WH, R}', + 'bezeichnung' => '{WH, WH}', 'style' => 'tag_dark_grey', 'prioritaet' => 11, 'taglib' => 'tags/CoreWiederholerTagLib' @@ -30,14 +30,14 @@ $tags = [ ], [ 'typ_kurzbz' => 'out_auto', - 'bezeichnung' => '{Out, Out}', + 'bezeichnung' => '{Outgoing, Outgoing}', 'style' => 'tag_limette', 'prioritaet' => 12, 'taglib' => 'tags/CoreOutgoingTagLib' ], [ 'typ_kurzbz' => 'prewh_auto', - 'bezeichnung' => '{Pre-WH, pre-R}', + 'bezeichnung' => '{Pre-WH, pre-WH}', 'style' => 'tag_light_grey', 'prioritaet' => 13, 'taglib' => 'tags/CorePrewiederholerTagLib' @@ -51,7 +51,7 @@ $tags = [ ], [ 'typ_kurzbz' => 'unterbrecher_auto', - 'bezeichnung' => '{UB, I}', + 'bezeichnung' => '{UB, UB}', 'style' => 'tag_turquoise', 'prioritaet' => 15, 'taglib' => 'tags/CoreUnterbrecherTagLib' @@ -70,6 +70,20 @@ $tags = [ 'prioritaet' => 17, 'taglib' => 'tags/CoreJgvTagLib' ], + [ + 'typ_kurzbz' => 'preabbr_auto', + 'bezeichnung' => '{Pre-Abbr, pre-Abbr}', + 'style' => 'tag_blush', + 'prioritaet' => 18, + 'taglib' => 'tags/CorePreabbrecherTagLib' + ], + [ + 'typ_kurzbz' => 'in_auto', + 'bezeichnung' => '{Incoming, Incoming}', + 'style' => 'tag_skyblue', + 'prioritaet' => 19, + 'taglib' => 'tags/CoreIncomingTagLib' + ], ];