diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php
index 9ee0f8267..ccfcfc05e 100644
--- a/system/dbupdate_3.4.php
+++ b/system/dbupdate_3.4.php
@@ -83,6 +83,7 @@ require_once('dbupdate_3.4/63436_cis4_iframe_component.php');
require_once('dbupdate_3.4/60882_lehrfaecherverteilung_favorites.php');
require_once('dbupdate_3.4/66982_berufsschule.php');
require_once('dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php');
+require_once('dbupdate_3.4/68345_orgform.php');
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '
Pruefe Tabellen und Attribute!
';
diff --git a/system/dbupdate_3.4/68345_orgform.php b/system/dbupdate_3.4/68345_orgform.php
new file mode 100644
index 000000000..a2cbc8915
--- /dev/null
+++ b/system/dbupdate_3.4/68345_orgform.php
@@ -0,0 +1,189 @@
+db_query("SELECT public.get_orgform_prestudent(0, null)"))
+{
+ $qry = 'CREATE FUNCTION public.get_orgform_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;
+ DECLARE rec RECORD;
+ BEGIN
+ IF (cv_studiensemester_kurzbz IS NULL) THEN
+ SELECT INTO rec COALESCE(
+ tbl_studienplan.orgform_kurzbz,
+ tbl_prestudentstatus.orgform_kurzbz,
+ tbl_studiengang.orgform_kurzbz
+ ) AS orgform_kurzbz
+ FROM public.tbl_prestudentstatus
+ JOIN lehre.tbl_studienplan USING (studienplan_id)
+ JOIN public.tbl_prestudent USING (prestudent_id)
+ JOIN public.tbl_studiengang USING (studiengang_kz)
+ WHERE tbl_prestudentstatus.prestudent_id = i_prestudent_id
+ ORDER BY
+ tbl_prestudentstatus.datum desc,
+ tbl_prestudentstatus.insertamum desc,
+ tbl_prestudentstatus.ext_id desc
+ LIMIT 1;
+ ELSE
+ SELECT INTO rec COALESCE(
+ tbl_studienplan.orgform_kurzbz,
+ tbl_prestudentstatus.orgform_kurzbz,
+ tbl_studiengang.orgform_kurzbz
+ ) AS orgform_kurzbz
+ FROM public.tbl_prestudentstatus
+ JOIN lehre.tbl_studienplan USING (studienplan_id)
+ JOIN public.tbl_prestudent USING (prestudent_id)
+ JOIN public.tbl_studiengang USING (studiengang_kz)
+ WHERE tbl_prestudentstatus.prestudent_id = i_prestudent_id
+ AND tbl_prestudentstatus.studiensemester_kurzbz = cv_studiensemester_kurzbz
+ ORDER BY
+ tbl_prestudentstatus.datum desc,
+ tbl_prestudentstatus.insertamum desc,
+ tbl_prestudentstatus.ext_id desc
+ LIMIT 1;
+ END IF;
+
+ RETURN rec.orgform_kurzbz;
+ END;
+ $_$;
+
+ ALTER FUNCTION public.get_orgform_prestudent(integer, character varying) OWNER TO fhcomplete;';
+
+ if(!$db->db_query($qry))
+ echo 'public.get_orgform_prestudent(integer, character varying): '.$db->db_last_error().'
';
+ else
+ echo '
public.get_orgform_prestudent(integer, character varying): function created';
+}
+
+// public.vw_prestudentstatus use get_orgform_prestudent function
+if($result = $db->db_query("SELECT view_definition FROM information_schema.views WHERE table_schema='public' AND table_name='vw_prestudentstatus'"))
+{
+ if($row = $db->db_fetch_object($result))
+ {
+ if(!mb_stristr($row->view_definition, 'get_orgform_prestudent'))
+ {
+ $qry = "
+ CREATE OR REPLACE VIEW public.vw_prestudentstatus AS
+ SELECT tbl_prestudent.prestudent_id,
+ tbl_person.person_id,
+ tbl_person.staatsbuergerschaft,
+ tbl_person.geburtsnation,
+ tbl_person.sprache,
+ tbl_person.anrede,
+ tbl_person.titelpost,
+ tbl_person.titelpre,
+ tbl_person.nachname,
+ tbl_person.vorname,
+ tbl_person.vornamen,
+ tbl_person.gebdatum,
+ tbl_person.gebort,
+ tbl_person.gebzeit,
+ tbl_person.foto,
+ tbl_person.homepage,
+ tbl_person.svnr,
+ tbl_person.ersatzkennzeichen,
+ tbl_person.familienstand,
+ tbl_person.geschlecht,
+ tbl_person.anzahlkinder,
+ tbl_person.aktiv,
+ tbl_person.bundesland_code,
+ tbl_person.kompetenzen,
+ tbl_person.kurzbeschreibung,
+ tbl_person.zugangscode,
+ tbl_person.foto_sperre,
+ tbl_person.matr_nr,
+ tbl_prestudent.aufmerksamdurch_kurzbz,
+ tbl_prestudent.studiengang_kz,
+ tbl_prestudent.berufstaetigkeit_code,
+ tbl_prestudent.ausbildungcode,
+ tbl_prestudent.zgv_code,
+ tbl_prestudent.zgvort,
+ tbl_prestudent.zgvdatum,
+ tbl_prestudent.zgvmas_code,
+ tbl_prestudent.zgvmaort,
+ tbl_prestudent.zgvmadatum,
+ tbl_prestudent.aufnahmeschluessel,
+ tbl_prestudent.facheinschlberuf,
+ tbl_prestudent.reihungstest_id,
+ (SELECT
+ COALESCE(anmeldedatum, tbl_rt_person.insertamum::date)
+ FROM
+ public.tbl_rt_person
+ JOIN public.tbl_reihungstest ON(rt_id=reihungstest_id)
+ JOIN lehre.tbl_studienplan USING(studienplan_id)
+ JOIN lehre.tbl_studienordnung USING(studienordnung_id)
+ WHERE
+ person_id=tbl_prestudent.person_id
+ AND tbl_reihungstest.studiensemester_kurzbz=prestudentstatus.studiensemester_kurzbz
+ AND tbl_studienordnung.studiengang_kz=tbl_prestudent.studiengang_kz
+ ORDER BY anmeldedatum DESC, tbl_rt_person.insertamum DESC limit 1
+ ) as anmeldungreihungstest,
+ tbl_prestudent.reihungstestangetreten,
+ tbl_prestudent.rt_gesamtpunkte,
+ tbl_prestudent.bismelden,
+ tbl_prestudent.anmerkung,
+ tbl_prestudent.dual,
+ tbl_prestudent.rt_punkte1,
+ tbl_prestudent.rt_punkte2,
+ tbl_prestudent.ausstellungsstaat,
+ tbl_prestudent.rt_punkte3,
+ tbl_prestudent.zgvdoktor_code,
+ tbl_prestudent.zgvdoktorort,
+ tbl_prestudent.zgvdoktordatum,
+ tbl_prestudent.mentor,
+ prestudentstatus.status_kurzbz,
+ prestudentstatus.studiensemester_kurzbz,
+ prestudentstatus.ausbildungssemester,
+ prestudentstatus.datum,
+ prestudentstatus.insertamum,
+ prestudentstatus.insertvon,
+ prestudentstatus.updateamum,
+ prestudentstatus.updatevon,
+ public.get_orgform_prestudent(
+ prestudentstatus.prestudent_id,
+ prestudentstatus.studiensemester_kurzbz
+ )::character varying(3) AS orgform_kurzbz,
+ prestudentstatus.studienplan_id,
+ prestudentstatus.bestaetigtam,
+ prestudentstatus.bestaetigtvon,
+ prestudentstatus.fgm,
+ prestudentstatus.faktiv,
+ tbl_studiengang.kurzbz,
+ tbl_studiengang.kurzbzlang,
+ tbl_studiengang.typ,
+ tbl_studiensemester.start,
+ tbl_studiensemester.ende,
+ tbl_studiensemester.studienjahr_kurzbz,
+ substr(tbl_studiensemester.studiensemester_kurzbz::text, 3) || lower(substr(tbl_studiensemester.studiensemester_kurzbz::text, 1, 1)) AS studiensemester,
+ CASE
+ WHEN tbl_studiengang.typ = 'b'::bpchar AND tbl_prestudent.zgv_code IS NOT NULL OR tbl_studiengang.typ = 'm'::bpchar AND tbl_prestudent.zgvmas_code IS NOT NULL OR tbl_studiengang.typ = 'd'::bpchar AND tbl_prestudent.zgvdoktor_code IS NOT NULL THEN true
+ ELSE false
+ END AS zgv,
+ CASE
+ WHEN tbl_prestudentstatus.prestudent_id IS NULL THEN false
+ ELSE true
+ END AS student,
+ date_part('week'::text, prestudentstatus.datum) AS kw,
+ tbl_prestudent.priorisierung
+ FROM public.tbl_person
+ JOIN public.tbl_prestudent USING (person_id)
+ JOIN public.tbl_prestudentstatus prestudentstatus USING (prestudent_id)
+ JOIN public.tbl_studiengang USING (studiengang_kz)
+ JOIN public.tbl_studiensemester USING (studiensemester_kurzbz)
+ LEFT JOIN public.tbl_prestudentstatus ON tbl_prestudentstatus.prestudent_id = prestudentstatus.prestudent_id AND tbl_prestudentstatus.studiensemester_kurzbz::text = prestudentstatus.studiensemester_kurzbz::text AND tbl_prestudentstatus.status_kurzbz::text = 'Student'::text;
+
+ GRANT SELECT ON public.vw_prestudentstatus TO vilesci;
+ GRANT SELECT ON public.vw_prestudentstatus TO web;
+ ";
+
+ if(!$db->db_query($qry))
+ echo 'public.vw_prestudentstatus:'.$db->db_last_error().'
';
+ else
+ echo '
public.vw_prestudentstatus adapted to use get_orgform_prestudent';
+ }
+ }
+}