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);
});
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';"))
{