From 7a1027280e96d82b11a037fc15297f4579aa0039 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 28 Feb 2019 15:04:17 +0100 Subject: [PATCH] Added Reihungstest-Gebiete for person Now the areas for the Reihungstest are put together depending on the studies the examinee is interested in and if the examinee is a Quereinsteiger or not. Therefore all prestudents of the examinee are detected that are set for the actual and future studiensemester. The areas are chosen because of the Studienplan. If not available, they are chosen because of the Studiengang. --- cis/testtool/menu.php | 127 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 125 insertions(+), 2 deletions(-) diff --git a/cis/testtool/menu.php b/cis/testtool/menu.php index a9538ea8e..1399ad019 100644 --- a/cis/testtool/menu.php +++ b/cis/testtool/menu.php @@ -70,7 +70,7 @@ if(isset($_GET['sprache_user'])) setSpracheUser(DEFAULT_LANGUAGE); } -$sprache_user = getSpracheUser(); +$sprache_user = getSpracheUser(); $p = new phrasen($sprache_user); $sprache = getSprache(); @@ -103,7 +103,130 @@ if (isset($_SESSION['pruefling_id'])) $sprache_mehrsprachig = new sprache(); $bezeichnung_mehrsprachig = $sprache_mehrsprachig->getSprachQuery('bezeichnung_mehrsprachig'); - $qry = "SELECT vw_ablauf.*, ".$bezeichnung_mehrsprachig." FROM testtool.vw_ablauf JOIN testtool.tbl_gebiet USING (gebiet_id) WHERE studiengang_kz=".$db->db_add_param($_SESSION['studiengang_kz'])." ORDER BY semester,reihung"; + + /** + * Spaltennamen-Aliase extrahieren um sie im Outer-Select verwenden zu können + * $bezeichnung_mehrsprachig liefert: bezeichnung_mehrsprachig[1] as bezeichnung_mehrsprachig_1,... + * $bezeichnung_mehrsprachig_sel liefert: bezeichnung_mehrsprachig_1, bezeichnung_mehrsprachig_2,... + */ + $bezeichnung_mehrsprachig_sel = explode(",", $bezeichnung_mehrsprachig); + foreach ($bezeichnung_mehrsprachig_sel as &$bm) + { + $bm = strrchr($bm, ' as '); + } + $bezeichnung_mehrsprachig_sel = implode(', ', $bezeichnung_mehrsprachig_sel); + + /** + * Reihungstestgebiete der Person ermitteln; Zusammenfassen, falls RT für mehrere Studien + * 1. Aktuelle Prestudenten zur Person über den Prüfling ermitteln, + * 2. Einstiegssemester (Erstsemester/Quereinsteiger) und Studienplan pro Prestudent ermitteln, + * 3. RT-Gebiete falls vorhanden über Studienplan, sonst über STG ermitteln + * 4. Für Quereinsteiger zusätzlich auch Erstsemestrigen-Gebiete + */ + $qry = " + WITH prestudent_data AS + ( + SELECT DISTINCT ON (prestudent_id) + prestudent_id, + studienplan_id, + studiengang_kz, + ausbildungssemester AS semester + FROM + public.tbl_prestudentstatus + JOIN + public.tbl_prestudent USING (prestudent_id) + WHERE + tbl_prestudent.person_id = ( + SELECT + person_id + FROM + public.tbl_prestudent + WHERE + prestudent_id = ".$db->db_add_param($_SESSION['prestudent_id'])." + ) + + -- Filter only future studiensemester (incl. actual one) + AND + studiensemester_kurzbz IN ( + SELECT + studiensemester_kurzbz + FROM + public.tbl_studiensemester + WHERE + ende > now() + ) + + AND + status_kurzbz = 'Interessent' + + -- Order to get last semester when using distinct on + ORDER BY + prestudent_id, + datum DESC, + tbl_prestudentstatus.insertamum DESC, + tbl_prestudentstatus.ext_id DESC + ) + + + SELECT DISTINCT + semester, + gebiet_id, + bezeichnung, + ". $bezeichnung_mehrsprachig_sel. " + FROM + ( + (SELECT + prestudent_data.semester AS ps_sem, + gebiet_id, + bezeichnung, + tbl_ablauf.studienplan_id, + tbl_ablauf.studiengang_kz, + tbl_ablauf.semester, + tbl_ablauf.reihung, + ".$bezeichnung_mehrsprachig. " + FROM + prestudent_data + JOIN + testtool.tbl_ablauf USING (studiengang_kz) + JOIN + testtool.tbl_gebiet USING (gebiet_id) + WHERE + (prestudent_data.semester= 1 AND tbl_ablauf.semester = 1) + OR + (prestudent_data.semester= 3 AND tbl_ablauf.semester IN (1,3)) + ) + + UNION + + ( + SELECT + prestudent_data.semester AS ps_sem, + gebiet_id, + bezeichnung, + tbl_ablauf.studienplan_id, + tbl_ablauf.studiengang_kz, + tbl_ablauf.semester, + tbl_ablauf.reihung, + ". $bezeichnung_mehrsprachig. " + FROM + prestudent_data + JOIN + testtool.tbl_ablauf USING (studienplan_id) + JOIN + testtool.tbl_gebiet USING (gebiet_id) + WHERE + (prestudent_data.semester= 1 AND tbl_ablauf.semester = 1) + OR + (prestudent_data.semester= 3 AND tbl_ablauf.semester IN (1,3)) + ) + + ORDER BY + reihung + ) temp + + ORDER BY + semester + "; $result = $db->db_query($qry); $lastsemester = '';