From d11ef46a8a28494fb7c3adc2f4603248e273a480 Mon Sep 17 00:00:00 2001 From: Christian Paminger Date: Sun, 7 Oct 2007 19:56:03 +0000 Subject: [PATCH] --- include/lehreinheit.class.php | 82 ++++++++++++++++++++++++++++++++++- include/wochenplan.class.php | 2 +- include/zeitwunsch.class.php | 52 ++++++++++++++++------ 3 files changed, 120 insertions(+), 16 deletions(-) diff --git a/include/lehreinheit.class.php b/include/lehreinheit.class.php index 6a272e196..4c03dd2c6 100644 --- a/include/lehreinheit.class.php +++ b/include/lehreinheit.class.php @@ -479,6 +479,8 @@ class lehreinheit *************************************************************************/ function check_lva($datum,$stunde,$ort,$stpl_table) { + $ignore_reservation=false; + $ignore_zeitsperre=false; // Parameter Checken // Bezeichnung der Stundenplan-Tabelle und des Keys $stpl_id=$stpl_table.TABLE_ID; @@ -511,7 +513,83 @@ class lehreinheit $anzahl=pg_numrows($erg_stpl); //Check if ($anzahl==0) + { + // Reservierungen pruefen? + if (!$ignore_reservation) + { + // Datenbank abfragen ( studiengang_kz, titel, beschreibung ) + //Lektoren SQL + $sql_lkt=''; + foreach ($this->mitarbeiter_uid as $lkt) + $sql_lkt.="OR uid='$lkt' "; + $sql_lkt=substr($sql_lkt,3); + $sql_lkt="(($sql_lkt) AND uid!='_DummyLektor')"; + $sql_query="SELECT reservierung_id AS id, uid AS lektor, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde + FROM lehre.vw_reservierung + WHERE datum='$datum' AND stunde=$stunde AND (ort_kurzbz='$ort' OR $sql_lkt)"; + // Verband SQL + //$sql_query.="(studiengang_kz=$this->studiengang_kz AND semester=$this->sem"; + //if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') + // $sql_query.=" AND (verband='$this->ver' OR verband IS NULL OR verband='' OR verband=' ')"; + //if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') + // $sql_query.=" AND (gruppe='$this->grp' OR gruppe IS NULL OR gruppe='' OR gruppe=' ')"; + //if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') + // $sql_query.=" AND (gruppe_kurzbz='$this->gruppe_kurzbz')"; + //$sql_query.="))"; + + //echo $sql_query.'
'; + if (! $erg_res=pg_query($this->conn, $sql_query)) + { + $this->errormsg=$sql_query.pg_last_error($this->conn); + return false; + } + $anz_res=pg_numrows($erg_res); + //Check + if ($anz_res==0) + { + // Zeitsperren pruefen? + if (!$ignore_zeitsperre) + { + // Datenbank abfragen ( studiengang_kz, titel, beschreibung ) + //Lektoren SQL + $sql_lkt=''; + foreach ($this->mitarbeiter_uid as $lkt) + $sql_lkt.="OR mitarbeiter_uid='$lkt' "; + $sql_lkt=substr($sql_lkt,3); + $sql_query="SELECT * FROM campus.tbl_zeitsperre + WHERE ($sql_lkt) AND + ( (vondatum<'$datum' AND bisdatum>'$datum') + OR (vondatum='$datum' AND bisdatum='$datum' AND vonstunde<=$stunde AND bisstunde>=$stunde) + OR (vondatum='$datum' AND bisdatum>'$datum' AND vonstunde<=$stunde) + OR (vondatum<'$datum' AND bisdatum='$datum' AND bisstunde>=$stunde) )"; + //echo $sql_query.'
'; + if (! $erg_zs=pg_query($this->conn, $sql_query)) + { + $this->errormsg=$sql_query.pg_last_error($this->conn); + return false; + } + $anz_zs=pg_numrows($erg_zs); + //Check + if ($anz_zs==0) + return true; + else + { + $row=pg_fetch_object($erg_zs); + $this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->mitarbeiter_uid|$row->zeitsperretyp_kurzbz|$row->bezeichnung|$row->vondatum/$row->vonstunde-$row->bisdatum/$row->bisstunde - $row->vertretung_uid"; + return false; + } + } + return true; + } + else + { + $row=pg_fetch_object($erg_res); + $this->errormsg="Kollision (Reservierung): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde"; + return false; + } + } return true; + } else { $row=pg_fetch_row($erg_stpl); @@ -612,7 +690,7 @@ class lehreinheit //return false; if(!($erg=pg_query($this->conn, $sql_query))) { - $this->errormsg=pg_errormessage($this->conn); + $this->errormsg=pg_errormessage($this->conn).$sql_query; return false; } $num_rows=pg_numrows($erg); @@ -784,4 +862,4 @@ class lehreinheit } } -?> \ No newline at end of file +?> diff --git a/include/wochenplan.class.php b/include/wochenplan.class.php index 295e1d556..f8a5bf53e 100644 --- a/include/wochenplan.class.php +++ b/include/wochenplan.class.php @@ -657,7 +657,7 @@ class wochenplan */ function draw_week_xul($semesterplan,$uid, $wunsch=null) { - echo $wunsch; + //echo $wunsch; global $cfgStdBgcolor; $count=0; $berechtigung=new benutzerberechtigung($this->conn); diff --git a/include/zeitwunsch.class.php b/include/zeitwunsch.class.php index a75c7a4e7..e338bd09d 100644 --- a/include/zeitwunsch.class.php +++ b/include/zeitwunsch.class.php @@ -220,28 +220,36 @@ class zeitwunsch if ($datum!=null) { $beginn=montag($datum); - $ende=jump_day($beginn,6); + $ende=jump_day($beginn,7); $beginniso=date("Y-m-d",$beginn); $endeiso=date("Y-m-d",$ende); - $sql_query="SELECT min(vondatum) AS vondatum,min(vonstunde) AS vonstunde, - min(bisdatum) AS bisdatum,min(bisstunde) AS bisstunde + $sql_query="SELECT vondatum,vonstunde,bisdatum,bisstunde FROM campus.tbl_zeitsperre WHERE mitarbeiter_uid IN ($sql_query_le) - AND vondatum<'$endeiso' AND bisdatum>'$beginniso'"; - // Zeitwuensche abfragen + AND vondatum<='$endeiso' AND bisdatum>'$beginniso'"; + //echo $sql_query; + // Zeitsperren abfragen if(!$result=pg_query($this->conn, $sql_query)) { $this->errormsg=pg_last_error($this->conn); return false; } - else if (!$row=pg_fetch_object($result)); + while ($row=pg_fetch_object($result)) { + echo "\nTagBeginn: ".$row->vondatum; + echo "\nTagEnde: ".$row->bisdatum; + echo "\nStundeBeginn: ".$row->vonstunde; + echo "\nStundeEnde: ".$row->bisstunde; if ($row->vonstunde==null || $row->vondatum==null) return true; $stundebeginn=$row->vonstunde; $stundeende=$row->bisstunde; - $beginnDB=mktime(0,0,0,substr($row->vondatum,6,2),substr($row->vondatum,9,2),substr($row->vondatum,0,4)); - $endeDB=mktime(0,0,0,substr($row->bisdatum,6,2),substr($row->bisdatum,9,2),substr($row->bisdatum,0,4)); + $beginnDB=mktime(0,0,0,substr($row->vondatum,5,2),substr($row->vondatum,8,2),substr($row->vondatum,0,4)); + $endeDB=mktime(0,0,0,substr($row->bisdatum,5,2),substr($row->bisdatum,8,2),substr($row->bisdatum,0,4)); + echo "\nTagBeginnDB: ".$beginnDB; + echo "\nTagEndeDB: ".$endeDB; + echo "\nTagBeginn: ".$beginn; + echo "\nTagEnde: ".$ende; if ($beginn<$beginnDB) $beginn=$beginnDB; else @@ -257,8 +265,12 @@ class zeitwunsch $tagende=6; $stundeende=$this->max_stunde; } - $first=true; - for ($t=$tagbeginn;$t<=$tagende;$t++) + echo "\nTagBeginn: ".$tagbeginn; + echo "\nTagEnde: ".$tagende; + echo "\nStundeBeginn: ".$stundebeginn; + echo "\nStundeEnde: ".$stundeende; + $first=false; + for ($t=1;$t<=6;$t++) for ($h=$this->min_stunde;$h<=$this->max_stunde;$h++) { if ($first) @@ -266,8 +278,22 @@ class zeitwunsch $h=$stundebeginn; $first=false; } - if (!($t==$tagende && $h>$stundeende)) - $this->zeitwunsch[$t][$h]=-3; + if ($t>=$tagbeginn && $t<=$tagende) + if ($t==$tagbeginn && $h>=$stundebeginn && ($t<$tagende || $h<=$stundeende)) + { + $this->zeitwunsch[$t][$h]=-3; + echo 'Zeitsperre eingetragen:'.$t.$h; + } + elseif($t==$tagende && $h<=$stundeende && ($t>$tagbeginn || $h>=$stundebeginn)) + { + $this->zeitwunsch[$t][$h]=-3; + echo 'Zeitsperre eingetragen:'.$t.$h; + } + elseif ($t>$tagbeginn && $t<$tagende) + { + $this->zeitwunsch[$t][$h]=-3; + echo 'Zeitsperre eingetragen:'.$t.$h; + } } } } @@ -275,4 +301,4 @@ class zeitwunsch } } -?> \ No newline at end of file +?>