From aa5868826ff949fdfbd57c5c0b03ef6c314f6ffe Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Wed, 27 Dec 2023 10:26:42 +0100 Subject: [PATCH 1/2] getAntraege --- .../27351_digitalisierung_formulare.php | 64 +++++++++++++++++-- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/system/dbupdate_3.4/27351_digitalisierung_formulare.php b/system/dbupdate_3.4/27351_digitalisierung_formulare.php index 1f8dd4b4b..4bf52dc3a 100644 --- a/system/dbupdate_3.4/27351_digitalisierung_formulare.php +++ b/system/dbupdate_3.4/27351_digitalisierung_formulare.php @@ -170,9 +170,12 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht } } -if (!$result = @$db->db_query("SELECT campus.get_status_studierendenantrag(0)")) { +if (!$result = @$db->db_query("SELECT campus.get_status_studierendenantrag(0)")) +{ $qry = 'CREATE FUNCTION campus.get_status_studierendenantrag(integer) RETURNS character varying LANGUAGE plpgsql + STABLE + RETURNS NULL ON NULL INPUT AS $_$ DECLARE i_studierendenantrag_id ALIAS FOR $1; DECLARE rec RECORD; @@ -194,10 +197,25 @@ if (!$result = @$db->db_query("SELECT campus.get_status_studierendenantrag(0)")) else echo '
campus.get_status_studierendenantrag(integer): function created'; } +elseif ($result = @$db->db_query("SELECT 1 FROM pg_proc WHERE proname='get_status_studierendenantrag' AND provolatile='s'")) +{ + if ($db->db_num_rows($result) == 0) { + $qry = 'ALTER FUNCTION campus.get_status_studierendenantrag(integer) STABLE;'; + $qry .= 'ALTER FUNCTION campus.get_status_studierendenantrag(integer) RETURNS NULL ON NULL INPUT;'; -if (!$result = @$db->db_query("SELECT campus.get_status_id_studierendenantrag(0)")) { + if(!$db->db_query($qry)) + echo 'campus.get_status_studierendenantrag(integer): '.$db->db_last_error().'
'; + else + echo '
campus.get_status_studierendenantrag(integer): function updated'; + } +} + +if (!$result = @$db->db_query("SELECT campus.get_status_id_studierendenantrag(0)")) +{ $qry = 'CREATE FUNCTION campus.get_status_id_studierendenantrag(integer) RETURNS integer LANGUAGE plpgsql + STABLE + RETURNS NULL ON NULL INPUT AS $_$ DECLARE i_studierendenantrag_id ALIAS FOR $1; DECLARE rec RECORD; @@ -219,10 +237,24 @@ if (!$result = @$db->db_query("SELECT campus.get_status_id_studierendenantrag(0) else echo '
campus.get_status_id_studierendenantrag(integer): function created'; } +elseif ($result = @$db->db_query("SELECT 1 FROM pg_proc WHERE proname='get_status_id_studierendenantrag' AND provolatile='s'")) +{ + if ($db->db_num_rows($result) == 0) { + $qry = 'ALTER FUNCTION campus.get_status_id_studierendenantrag(integer) STABLE;'; + $qry .= 'ALTER FUNCTION campus.get_status_id_studierendenantrag(integer) RETURNS NULL ON NULL INPUT;'; -if (!$result = @$db->db_query("SELECT public.get_absem_prestudent(0, null)")) { + if(!$db->db_query($qry)) + echo 'campus.get_status_id_studierendenantrag(integer): '.$db->db_last_error().'
'; + else + echo '
campus.get_status_id_studierendenantrag(integer): function updated'; + } +} + +if (!$result = @$db->db_query("SELECT public.get_absem_prestudent(0, null)")) +{ $qry = 'CREATE FUNCTION public.get_absem_prestudent(integer, character varying) RETURNS integer LANGUAGE plpgsql + STABLE AS $_$ DECLARE i_prestudent_id ALIAS FOR $1; DECLARE cv_studiensemester_kurzbz ALIAS FOR $2; @@ -253,9 +285,22 @@ if (!$result = @$db->db_query("SELECT public.get_absem_prestudent(0, null)")) { else echo '
public.get_absem_prestudent(integer, character varying): function created'; } -if (!$result = @$db->db_query("SELECT public.get_stdsem_prestudent(0, null)")) { +elseif ($result = @$db->db_query("SELECT 1 FROM pg_proc WHERE proname='get_absem_prestudent' AND provolatile='s'")) +{ + if ($db->db_num_rows($result) == 0) { + $qry = 'ALTER FUNCTION public.get_absem_prestudent(integer, character varying) STABLE;'; + + if(!$db->db_query($qry)) + echo 'public.get_absem_prestudent(integer, character varying): '.$db->db_last_error().'
'; + else + echo '
public.get_absem_prestudent(integer, character varying): function updated'; + } +} +if (!$result = @$db->db_query("SELECT public.get_stdsem_prestudent(0, null)")) +{ $qry = 'CREATE FUNCTION public.get_stdsem_prestudent(integer, character varying) RETURNS character varying LANGUAGE plpgsql + STABLE AS $_$ DECLARE i_prestudent_id ALIAS FOR $1; DECLARE cv_studiensemester_kurzbz ALIAS FOR $2; @@ -286,6 +331,17 @@ if (!$result = @$db->db_query("SELECT public.get_stdsem_prestudent(0, null)")) { else echo '
public.get_stdsem_prestudent(integer, character varying): function created'; } +elseif ($result = @$db->db_query("SELECT 1 FROM pg_proc WHERE proname='get_stdsem_prestudent' AND provolatile='s'")) +{ + if ($db->db_num_rows($result) == 0) { + $qry = 'ALTER FUNCTION public.get_stdsem_prestudent(integer, character varying) STABLE;'; + + if(!$db->db_query($qry)) + echo 'public.get_stdsem_prestudent(integer, character varying): '.$db->db_last_error().'
'; + else + echo '
public.get_stdsem_prestudent(integer, character varying): function updated'; + } +} if($result = @$db->db_query("SELECT 1 FROM public.tbl_status_grund WHERE statusgrund_kurzbz = 'abbrecherStgl';")) { From 43813b3ef01ef13fd8f61b8b768b59a3db56e82e Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Wed, 27 Dec 2023 10:51:57 +0100 Subject: [PATCH 2/2] getActiveStgs --- .../controllers/components/Antrag/Leitung.php | 46 +++---------------- .../education/Studierendenantrag_model.php | 19 +++++++- .../components/Studierendenantrag/Leitung.js | 2 +- 3 files changed, 26 insertions(+), 41 deletions(-) diff --git a/application/controllers/components/Antrag/Leitung.php b/application/controllers/components/Antrag/Leitung.php index 4c99fcca1..8d333d5b8 100644 --- a/application/controllers/components/Antrag/Leitung.php +++ b/application/controllers/components/Antrag/Leitung.php @@ -33,46 +33,14 @@ class Leitung extends FHC_Controller public function getActiveStgs() { - $studiengaenge = $this->permissionlib->getSTG_isEntitledFor('student/antragfreigabe'); - $stgsNeuanlage = $this->permissionlib->getSTG_isEntitledFor('student/studierendenantrag'); - - $stgs = []; - - if ($studiengaenge) { - $result = $this->StudierendenantragModel->loadForStudiengaenge($studiengaenge); - - if (isError($result)) - return $this->outputJson($result); - $antraege = getData($result) ?: []; - - foreach ($antraege as $antrag) { - if (!isset($stgs[$antrag->studiengang_kz])) { - $stgs[$antrag->studiengang_kz] = new stdClass(); - $stgs[$antrag->studiengang_kz]->bezeichnung = $antrag->bezeichnung; - $stgs[$antrag->studiengang_kz]->orgform = $antrag->orgform; - $stgs[$antrag->studiengang_kz]->studiengang_kz = $antrag->studiengang_kz; - } - } + $studiengaenge = $this->permissionlib->getSTG_isEntitledFor('student/antragfreigabe') ?: []; + $studiengaenge = array_merge($studiengaenge, $this->permissionlib->getSTG_isEntitledFor('student/studierendenantrag') ?: []); + + $result = $this->StudierendenantragModel->loadStgsWithAntraege($studiengaenge); + if (isError($result)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); } - - if ($stgsNeuanlage) { - $result = $this->StudierendenantragModel->loadForStudiengaenge($stgsNeuanlage); - - if (isError($result)) - return $this->outputJson($result); - $antraege = getData($result) ?: []; - - foreach ($antraege as $antrag) { - if (!isset($stgs[$antrag->studiengang_kz])) { - $stgs[$antrag->studiengang_kz] = new stdClass(); - $stgs[$antrag->studiengang_kz]->bezeichnung = $antrag->bezeichnung; - $stgs[$antrag->studiengang_kz]->orgform = $antrag->orgform; - $stgs[$antrag->studiengang_kz]->studiengang_kz = $antrag->studiengang_kz; - } - } - } - - $this->outputJsonSuccess($stgs); + $this->outputJson($result); } public function getAntraege($studiengang = null, $extra = null) diff --git a/application/models/education/Studierendenantrag_model.php b/application/models/education/Studierendenantrag_model.php index 3d688eb82..0eda91886 100644 --- a/application/models/education/Studierendenantrag_model.php +++ b/application/models/education/Studierendenantrag_model.php @@ -74,7 +74,8 @@ class Studierendenantrag_model extends DB_Model return $this->loadWhere($where); } - public function loadActiveForStudiengaenge($studiengaenge) { + public function loadActiveForStudiengaenge($studiengaenge) + { // NOTE(chris): get language before changing things in the global db object because getUserLanguage() might use it and it should not have been tampered with $sql = "SELECT index FROM public.tbl_sprache WHERE sprache='" . getUserLanguage() . "' LIMIT 1"; @@ -94,6 +95,22 @@ class Studierendenantrag_model extends DB_Model return $this->loadForStudiengaenge($studiengaenge, null, null, $sql); } + public function loadStgsWithAntraege($studiengaenge) + { + $this->addDistinct(); + $this->addSelect('UPPER(stg.typ) || UPPER(stg.kurzbz) || \' \' || stg.bezeichnung AS bezeichnung'); + $this->addSelect('p.studiengang_kz'); + + $this->addJoin('public.tbl_prestudent p', 'prestudent_id'); + $this->addJoin('public.tbl_studiengang stg', 'p.studiengang_kz=stg.studiengang_kz'); + + $this->addOrder('UPPER(stg.typ) || UPPER(stg.kurzbz) || \' \' || stg.bezeichnung'); + + $this->db->where_in('p.studiengang_kz', $studiengaenge); + + return $this->load(); + } + public function isInStudiengang($studierendenantrag_id, $studiengaenge) { $this->addJoin('public.tbl_prestudent', 'prestudent_id'); diff --git a/public/js/components/Studierendenantrag/Leitung.js b/public/js/components/Studierendenantrag/Leitung.js index 0db2cc2c0..a56e23725 100644 --- a/public/js/components/Studierendenantrag/Leitung.js +++ b/public/js/components/Studierendenantrag/Leitung.js @@ -44,7 +44,7 @@ export default { FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Antrag/Leitung/getActiveStgs' ).then(result => { - this.stgs = Object.values(result.data.retval).sort((a,b) => a.bezeichnung == b.bezeichnung ? (a.orgform == b.orgform ? 0 : (a.orgform > b.orgform ? 1 : -1)) : (a.bezeichnung > b.bezeichnung ? 1 : -1)); + this.stgs = result.data.retval; }).catch(error => { console.error(error); });