From ba1401f98db0f0b89bc721af08ea69c9d0b653a6 Mon Sep 17 00:00:00 2001 From: chfhtw Date: Thu, 2 Oct 2025 15:43:24 +0200 Subject: [PATCH] use postgres function --- application/config/search.php | 12 +----------- application/models/crm/Prestudentstatus_model.php | 14 ++++++++++++-- application/models/education/Pruefung_model.php | 4 ++-- .../models/education/Studierendenantrag_model.php | 6 +++--- .../models/organisation/Studiengang_model.php | 2 +- include/prestudent.class.php | 8 ++++---- rdf/AntragAbmeldung.xml.php | 2 +- rdf/AntragAbmeldungStgl.xml.php | 2 +- rdf/AntragUnterbrechung.xml.php | 2 +- rdf/AntragWiederholung.xml.php | 2 +- 10 files changed, 27 insertions(+), 27 deletions(-) diff --git a/application/config/search.php b/application/config/search.php index bedf8d888..df2460a15 100644 --- a/application/config/search.php +++ b/application/config/search.php @@ -328,17 +328,7 @@ $config['prestudent'] = [ WHERE status_kurzbz = public.get_rolle_prestudent(ps.prestudent_id, NULL) LIMIT 1 ) AS status", - "COALESCE( - ( - SELECT COALESCE(plan.orgform_kurzbz, pss.orgform_kurzbz) - FROM public.tbl_prestudentstatus pss - LEFT JOIN lehre.tbl_studienplan plan USING (studienplan_id) - WHERE pss.prestudent_id=ps.prestudent_id - ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC - LIMIT 1 - ), - sg.orgform_kurzbz - ) AS orgform", + "public.get_orgform_prestudent(ps.prestudent_id, NULL) AS orgform", "b.aktiv", "array_position(" . $prestudent_sort_array . ", public.get_rolle_prestudent(ps.prestudent_id, NULL)) AS sort" ], diff --git a/application/models/crm/Prestudentstatus_model.php b/application/models/crm/Prestudentstatus_model.php index de91319b9..ac3999b51 100644 --- a/application/models/crm/Prestudentstatus_model.php +++ b/application/models/crm/Prestudentstatus_model.php @@ -330,7 +330,14 @@ class Prestudentstatus_model extends DB_Model $this->addJoin('public.tbl_studiengang', 'studiengang_kz', 'LEFT'); $this->addJoin('public.tbl_status', 'tbl_status.status_kurzbz = tbl_prestudentstatus.status_kurzbz'); $this->addJoin('public.tbl_status_grund', 'statusgrund_id', 'LEFT'); - $this->addJoin('bis.tbl_orgform', 'COALESCE(tbl_studienplan.orgform_kurzbz, ' . $this->dbTable . '.orgform_kurzbz, tbl_studiengang.orgform_kurzbz) = tbl_orgform.orgform_kurzbz', 'LEFT'); + $this->addJoin( + 'bis.tbl_orgform', + 'public.get_orgform_prestudent( + ' . $this->dbTable . '.prestudent_id, + ' . $this->dbTable . '.studiensemester_kurzbz + ) = tbl_orgform.orgform_kurzbz', + 'LEFT' + ); $this->db->where('tbl_status.status_kurzbz = tbl_prestudentstatus.status_kurzbz'); $where = array('prestudent_id' => $prestudent_id); @@ -377,7 +384,10 @@ class Prestudentstatus_model extends DB_Model $this->addJoin('public.tbl_person pers', 'person_id'); $this->addJoin('public.tbl_studiengang g', 'p.studiengang_kz=g.studiengang_kz'); $this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT'); - $this->addJoin('bis.tbl_orgform o', 'COALESCE(plan.orgform_kurzbz, ' . $this->dbTable . '.orgform_kurzbz, g.orgform_kurzbz)=o.orgform_kurzbz'); + $this->addJoin( + 'bis.tbl_orgform o', + 'public.get_orgform_prestudent(' . $this->dbTable . '.prestudent_id, ' . $this->dbTable . '.studiensemester_kurzbz) = o.orgform_kurzbz' + ); $this->addOrder($this->dbTable . '.datum', 'DESC'); $this->addOrder($this->dbTable . '.insertamum', 'DESC'); diff --git a/application/models/education/Pruefung_model.php b/application/models/education/Pruefung_model.php index 927d83c82..5495f5a62 100644 --- a/application/models/education/Pruefung_model.php +++ b/application/models/education/Pruefung_model.php @@ -124,7 +124,7 @@ class Pruefung_model extends DB_Model 'LEFT' ); $this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT'); - $this->addJoin('bis.tbl_orgform o', 'COALESCE(plan.orgform_kurzbz, pss.orgform_kurzbz, g.orgform_kurzbz)=o.orgform_kurzbz'); + $this->addJoin('bis.tbl_orgform o', 'public.get_orgform_prestudent(ps.prestudent_id, le.studiensemester_kurzbz)=o.orgform_kurzbz'); $this->db->join('campus.tbl_studierendenantrag a', 'ps.prestudent_id=a.prestudent_id and a.typ = ?', 'LEFT', false); $this->db->where("n.positiv", false); @@ -221,7 +221,7 @@ class Pruefung_model extends DB_Model 'LEFT' ); $this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT'); - $this->addJoin('bis.tbl_orgform o', 'COALESCE(plan.orgform_kurzbz, pss.orgform_kurzbz, g.orgform_kurzbz)=o.orgform_kurzbz'); + $this->addJoin('bis.tbl_orgform o', 'public.get_orgform_prestudent(ps.prestudent_id, le.studiensemester_kurzbz)=o.orgform_kurzbz'); $this->addJoin( 'campus.tbl_studierendenantrag a', 'ps.prestudent_id=a.prestudent_id and a.typ=' . $this->escape(Studierendenantrag_model::TYP_WIEDERHOLUNG), diff --git a/application/models/education/Studierendenantrag_model.php b/application/models/education/Studierendenantrag_model.php index 677d01f04..4bd3516b6 100644 --- a/application/models/education/Studierendenantrag_model.php +++ b/application/models/education/Studierendenantrag_model.php @@ -65,7 +65,7 @@ class Studierendenantrag_model extends DB_Model 'LEFT' ); $this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT'); - $this->addJoin('bis.tbl_orgform of', 'of.orgform_kurzbz=COALESCE(plan.orgform_kurzbz, ps.orgform_kurzbz, stg.orgform_kurzbz)'); + $this->addJoin('bis.tbl_orgform of', 'of.orgform_kurzbz=public.get_orgform_prestudent(p.prestudent_id, ss.studiensemester_kurzbz)'); $this->addJoin( 'campus.tbl_studierendenantrag_status as s', 'campus.get_status_id_studierendenantrag('. $this->dbTable .'.studierendenantrag_id) = studierendenantrag_status_id' @@ -197,7 +197,7 @@ class Studierendenantrag_model extends DB_Model $this->addSelect('stg.bezeichnung'); $this->addSelect('s.ausbildungssemester'); $this->addSelect('plan.sprache'); - $this->addSelect('COALESCE(plan.orgform_kurzbz, s.orgform_kurzbz, stg.orgform_kurzbz) AS orgform_kurzbz'); + $this->addSelect('public.get_orgform_prestudent(s.prestudent_id, s.studiensemester_kurzbz) AS orgform_kurzbz'); $this->addJoin( 'public.tbl_prestudentstatus s', @@ -288,7 +288,7 @@ class Studierendenantrag_model extends DB_Model 'LEFT' ); $this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT'); - $this->addJoin('bis.tbl_orgform of', 'of.orgform_kurzbz=COALESCE(plan.orgform_kurzbz, ps.orgform_kurzbz, stg.orgform_kurzbz)'); + $this->addJoin('bis.tbl_orgform of', 'of.orgform_kurzbz=public.get_orgform_prestudent(p.prestudent_id, ps.studiensemester_kurzbz)'); $this->addJoin( 'campus.tbl_studierendenantrag_status s', 'campus.get_status_id_studierendenantrag(' . $this->dbTable . '.studierendenantrag_id)=s.studierendenantrag_status_id', diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 02f972690..9308912f6 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -605,7 +605,7 @@ class Studiengang_model extends DB_Model AND ps.status_kurzbz=get_rolle_prestudent(p.prestudent_id, NULL)' ); $this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id'); - $this->addJoin('bis.tbl_orgform o', 'COALESCE(plan.orgform_kurzbz, ps.orgform_kurzbz, ' . $this->dbTable . '.orgform_kurzbz)=o.orgform_kurzbz'); + $this->addJoin('bis.tbl_orgform o', 'public.get_orgform_prestudent(p.prestudent_id, NULL)=o.orgform_kurzbz'); $this->addJoin('public.tbl_person pers', 'person_id'); $this->addJoin('public.tbl_student stud', 'p.prestudent_id=stud.prestudent_id', 'LEFT'); diff --git a/include/prestudent.class.php b/include/prestudent.class.php index 7317572ba..866c2ec8d 100644 --- a/include/prestudent.class.php +++ b/include/prestudent.class.php @@ -1861,7 +1861,7 @@ class prestudent extends person tbl_prestudentstatus.studiensemester_kurzbz, tbl_prestudent.studiengang_kz, tbl_prestudentstatus.ausbildungssemester, - COALESCE(tbl_prestudentstatus.orgform_kurzbz, tbl_studiengang.orgform_kurzbz) as orgform_kurzbz + public.get_orgform_prestudent(tbl_prestudentstatus.prestudent_id, tbl_prestudentstatus.studiensemester_kurzbz) as orgform_kurzbz FROM public.tbl_prestudent JOIN public.tbl_prestudentstatus USING(prestudent_id) @@ -1924,7 +1924,7 @@ class prestudent extends person tbl_prestudentstatus.studiensemester_kurzbz, tbl_prestudent.studiengang_kz, tbl_prestudentstatus.ausbildungssemester, - COALESCE(tbl_prestudentstatus.orgform_kurzbz, tbl_studiengang.orgform_kurzbz) as orgform_kurzbz + public.get_orgform_prestudent(tbl_prestudentstatus.prestudent_id, tbl_prestudentstatus.studiensemester_kurzbz) as orgform_kurzbz FROM public.tbl_prestudent JOIN public.tbl_prestudentstatus USING(prestudent_id) @@ -1981,7 +1981,7 @@ class prestudent extends person tbl_prestudentstatus.studiensemester_kurzbz, tbl_prestudent.studiengang_kz, tbl_prestudentstatus.ausbildungssemester, - COALESCE(tbl_prestudentstatus.orgform_kurzbz, tbl_studiengang.orgform_kurzbz) as orgform_kurzbz + public.get_orgform_prestudent(tbl_prestudentstatus.prestudent_id, tbl_prestudentstatus.studiensemester_kurzbz) as orgform_kurzbz FROM public.tbl_prestudent JOIN public.tbl_prestudentstatus USING(prestudent_id) @@ -2038,7 +2038,7 @@ class prestudent extends person tbl_prestudentstatus.studiensemester_kurzbz, tbl_prestudent.studiengang_kz, tbl_prestudentstatus.ausbildungssemester, - COALESCE(tbl_prestudentstatus.orgform_kurzbz, tbl_studiengang.orgform_kurzbz) as orgform_kurzbz + public.get_orgform_prestudent(tbl_prestudentstatus.prestudent_id, tbl_prestudentstatus.studiensemester_kurzbz) as orgform_kurzbz FROM public.tbl_prestudent JOIN public.tbl_prestudentstatus USING(prestudent_id) diff --git a/rdf/AntragAbmeldung.xml.php b/rdf/AntragAbmeldung.xml.php index 6615ac046..ef8777ca7 100644 --- a/rdf/AntragAbmeldung.xml.php +++ b/rdf/AntragAbmeldung.xml.php @@ -46,7 +46,7 @@ $query = " JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) LEFT JOIN public.tbl_prestudentstatus pss ON (pss.prestudent_id = a.prestudent_id AND pss.studiensemester_kurzbz=a.studiensemester_kurzbz AND pss.status_kurzbz=get_rolle_prestudent(a.prestudent_id, a.studiensemester_kurzbz)) LEFT JOIN lehre.tbl_studienplan plan USING (studienplan_id) - JOIN bis.tbl_orgform ON (tbl_orgform.orgform_kurzbz = COALESCE(plan.orgform_kurzbz, pss.orgform_kurzbz, stg.orgform_kurzbz))" . $where; + JOIN bis.tbl_orgform ON (tbl_orgform.orgform_kurzbz = public.get_orgform_prestudent(a.prestudent_id, a.studiensemester_kurzbz))" . $where; if (!$db->db_query($query) || !$db->db_num_rows()) diff --git a/rdf/AntragAbmeldungStgl.xml.php b/rdf/AntragAbmeldungStgl.xml.php index 854121b5d..d1c45b120 100644 --- a/rdf/AntragAbmeldungStgl.xml.php +++ b/rdf/AntragAbmeldungStgl.xml.php @@ -46,7 +46,7 @@ $query = " JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) LEFT JOIN public.tbl_prestudentstatus pss ON (pss.prestudent_id = a.prestudent_id AND pss.studiensemester_kurzbz=a.studiensemester_kurzbz AND pss.status_kurzbz=get_rolle_prestudent(a.prestudent_id, a.studiensemester_kurzbz)) LEFT JOIN lehre.tbl_studienplan plan USING (studienplan_id) - JOIN bis.tbl_orgform ON (tbl_orgform.orgform_kurzbz = COALESCE(plan.orgform_kurzbz, pss.orgform_kurzbz, stg.orgform_kurzbz))" . $where; + JOIN bis.tbl_orgform ON (tbl_orgform.orgform_kurzbz = public.get_orgform_prestudent(a.prestudent_id, a.studiensemester_kurzbz))" . $where; if (!$db->db_query($query) || !$db->db_num_rows()) diff --git a/rdf/AntragUnterbrechung.xml.php b/rdf/AntragUnterbrechung.xml.php index 38a584377..b54bf8fa9 100644 --- a/rdf/AntragUnterbrechung.xml.php +++ b/rdf/AntragUnterbrechung.xml.php @@ -47,7 +47,7 @@ $query = " JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) LEFT JOIN public.tbl_prestudentstatus pss ON (pss.prestudent_id = a.prestudent_id AND pss.studiensemester_kurzbz=a.studiensemester_kurzbz AND pss.status_kurzbz=get_rolle_prestudent(a.prestudent_id, a.studiensemester_kurzbz)) LEFT JOIN lehre.tbl_studienplan plan USING (studienplan_id) - JOIN bis.tbl_orgform ON (tbl_orgform.orgform_kurzbz = COALESCE(plan.orgform_kurzbz, pss.orgform_kurzbz, stg.orgform_kurzbz))" . $where; + JOIN bis.tbl_orgform ON (tbl_orgform.orgform_kurzbz = public.get_orgform_prestudent(a.prestudent_id, a.studiensemester_kurzbz))" . $where; if (!$db->db_query($query) || !$db->db_num_rows()) diff --git a/rdf/AntragWiederholung.xml.php b/rdf/AntragWiederholung.xml.php index d38775020..5a0dcc350 100644 --- a/rdf/AntragWiederholung.xml.php +++ b/rdf/AntragWiederholung.xml.php @@ -97,7 +97,7 @@ $query = " JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) LEFT JOIN public.tbl_prestudentstatus pss ON (pss.prestudent_id = a.prestudent_id AND pss.studiensemester_kurzbz=a.studiensemester_kurzbz AND pss.status_kurzbz=get_rolle_prestudent(a.prestudent_id, a.studiensemester_kurzbz)) LEFT JOIN lehre.tbl_studienplan plan USING (studienplan_id) - JOIN bis.tbl_orgform ON (tbl_orgform.orgform_kurzbz = COALESCE(plan.orgform_kurzbz, pss.orgform_kurzbz, stg.orgform_kurzbz))" . $where; + JOIN bis.tbl_orgform ON (tbl_orgform.orgform_kurzbz = public.get_orgform_prestudent(a.prestudent_id, a.studiensemester_kurzbz))" . $where; if (!$db->db_query($query) || !$db->db_num_rows())