From 8253ba90fd73aee0afe6aef4c39f4ef4adc3634b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 21 Jan 2019 15:09:26 +0100 Subject: [PATCH] =?UTF-8?q?Kollisionspr=C3=BCfung=20angepasst=20damit=20di?= =?UTF-8?q?rekte=20Gruppen=20ignoriert=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/lehreinheit.class.php | 5 ++++ include/lehrstunde.class.php | 10 +++++-- include/wochenplan.class.php | 51 ++++++++++++++++++++++++++++++----- skin/tempus.css | 1 + 4 files changed, 59 insertions(+), 8 deletions(-) diff --git a/include/lehreinheit.class.php b/include/lehreinheit.class.php index 421c8c4bb..91688691b 100644 --- a/include/lehreinheit.class.php +++ b/include/lehreinheit.class.php @@ -524,6 +524,9 @@ class lehreinheit extends basis_db //Gruppen / Verbaende pruefen $sql_query="SELECT $stpl_id, studiengang_kz, semester, verband, gruppe_kurzbz, stunde, gruppe FROM $stpl_table WHERE datum=".$this->db_add_param($datum)." AND stunde=".$this->db_add_param($stunde); + + // Direkte Lehreinheitsgruppen kollidieren nicht + $sql_query.=" AND NOT EXISTS(SELECT 1 FROM public.tbl_gruppe g WHERE g.gruppe_kurzbz=gruppe_kurzbz AND direktinskription=true)"; if (is_numeric($this->unr)) $sql_query.=" AND unr!=".$this->db_add_param($this->unr)." AND (1=2 "; @@ -532,7 +535,9 @@ class lehreinheit extends basis_db $sql_query.=" OR ((studiengang_kz=".$this->db_add_param($this->studiengang_kz[$anz])." AND semester=".$this->db_add_param($this->semester[$anz]).")"; if ($this->gruppe_kurzbz[$anz]!=null && $this->gruppe_kurzbz[$anz]!='' && $this->gruppe_kurzbz[$anz]!=' ') + { $sql_query.=" OR (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz[$anz]).")"; + } else { if ($this->verband[$anz]!=null && $this->verband[$anz]!='' && $this->verband[$anz]!=' ') diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php index 6cbc5db0a..b3249822b 100644 --- a/include/lehrstunde.class.php +++ b/include/lehrstunde.class.php @@ -728,7 +728,13 @@ class lehrstunde extends basis_db // Datenbank abfragen $sql_query="SELECT $stpl_id AS id, lektor, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde FROM $stpl_table - WHERE datum=".$this->db_add_param($this->datum)." AND stunde=".$this->db_add_param($this->stunde)." AND (ort_kurzbz=".$this->db_add_param($this->ort_kurzbz)." "; + WHERE datum=".$this->db_add_param($this->datum)." AND stunde=".$this->db_add_param($this->stunde); + + // Direkte Lehreinheitsgruppen kollidieren nicht + $sql_query.=" AND NOT EXISTS(SELECT 1 FROM public.tbl_gruppe WHERE gruppe_kurzbz = ".$stpl_table.".gruppe_kurzbz AND direktinskription=true)"; + + $sql_query.= " AND (ort_kurzbz=".$this->db_add_param($this->ort_kurzbz)." "; + if (!in_array($this->lektor_uid,unserialize(KOLLISIONSFREIE_USER))) $sql_query.=" OR (uid=".$this->db_add_param($this->lektor_uid)." AND uid not in (".$this->db_implode4SQL(unserialize(KOLLISIONSFREIE_USER))."))"; @@ -776,7 +782,7 @@ class lehrstunde extends basis_db else { $row = $this->db_fetch_object($erg_stpl); - $this->errormsg="Kollision ($stpl_table): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde"; //\n".$sql_query + $this->errormsg="Kollision ($stpl_table): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde\n"; //\n".$sql_query return true; } } diff --git a/include/wochenplan.class.php b/include/wochenplan.class.php index a0fb250f1..410d90f98 100644 --- a/include/wochenplan.class.php +++ b/include/wochenplan.class.php @@ -44,6 +44,7 @@ require_once(dirname(__FILE__).'/sprache.class.php'); require_once(dirname(__FILE__).'/functions.inc.php'); require_once(dirname(__FILE__).'/betriebsmittel.class.php'); require_once(dirname(__FILE__).'/lehrveranstaltung.class.php'); +require_once(dirname(__FILE__).'/gruppe.class.php'); class wochenplan extends basis_db { @@ -1279,6 +1280,13 @@ class wochenplan extends basis_db foreach ($this->std_plan[$i][$j] as $lehrstunde) { $a_unr[]=$lehrstunde->unr; + if($lehrstunde->gruppe_kurzbz!='') + { + $gruppe = new gruppe(); + $gruppe->load($lehrstunde->gruppe_kurzbz); + if($gruppe->direktinskription) + continue; + } $a_lvb[$lehrstunde->unr][]=$lehrstunde->sem.$lehrstunde->ver.$lehrstunde->grp; } @@ -1348,7 +1356,8 @@ class wochenplan extends basis_db foreach ($a_unr as $unr) { $lvb_unr_arr[$a]=$unr; - $lvb[$a++]=$a_lvb[$unr]; + if(isset($a_lvb[$unr])) + $lvb[$a++]=$a_lvb[$unr]; } for ($a=0;$araumtyp; $raumtypalt[$i]=$row->raumtypalternativ; if ($row->gruppe_kurzbz!=null && $row->gruppe_kurzbz!='') + { $gruppe[$i]=$row->gruppe_kurzbz; - @$lehrverband[$i]->stg_kz=$row->studiengang_kz; - $lehrverband[$i]->sem=$row->semester; - $lehrverband[$i]->ver=$row->verband; - $lehrverband[$i]->grp=$row->gruppe; + + // Direktinskriptionsgruppen von der Kollisionspruefung ausnehmen + $grp_obj = new gruppe(); + $grp_obj->load($row->gruppe_kurzbz); + if ($grp_obj->direktinskription) + $direktinskription = true; + else + $direktinskription = false; + } + else + $direktinskription = false; + + if (!$direktinskription) + { + // Wenn direktinskriptionsgruppe dann wird Studiengang und Semester nicht + // gesetzt da dies sonst kollidiert + // Bei normalen Spezialgruppen wir dieser trotzdem gesetzt damit Verbandsgruppen + // mit Spezialgruppen des selben Studiengangs kollidieren + if(!isset($lehrverband[$i])) + $lehrverband[$i] = new stdClass(); + + $lehrverband[$i]->stg_kz=$row->studiengang_kz; + $lehrverband[$i]->sem=$row->semester; + $lehrverband[$i]->ver=$row->verband; + $lehrverband[$i]->grp=$row->gruppe; + } $lektor[$i]=$row->lektor_uid; $verplant[$i]=$row->verplant; $planstunden[$i]=$row->planstunden; @@ -2018,7 +2050,13 @@ class wochenplan extends basis_db { $gruppe=array_unique($gruppe); foreach ($gruppe as $g) - $gruppen.=" OR gruppe_kurzbz=".$this->db_add_param($g); + { + // Gruppen fuer direkte inskription kollidieren nicht + /*$grp_obj = new gruppe(); + $grp_obj->load($g); + if($grp_obj->direktinskription==false)*/ + $gruppen.=" OR gruppe_kurzbz=".$this->db_add_param($g); + } } //Lehrverband @@ -2092,6 +2130,7 @@ class wochenplan extends basis_db ($lkt $gruppen OR ($lvb) )"; if (is_numeric($unr)) $sql_query.=" AND unr!=".$this->db_add_param($unr); + $sql_query.=" AND NOT EXISTS(SELECT 1 FROM public.tbl_gruppe WHERE gruppe_kurzbz=".$stpl_table.".gruppe_kurzbz and direktinskription=true)"; if (!$this->db_query($sql_query)) { diff --git a/skin/tempus.css b/skin/tempus.css index 0618d9af4..444ab4140 100644 --- a/skin/tempus.css +++ b/skin/tempus.css @@ -162,6 +162,7 @@ toolbarbutton.stplweekoverlay-toolbarbutton:hover color: #AAAAAA; visibility:hidden; font-size: small; + margin-top: 10px; } treechildren::-moz-tree-row(makeItred)