From a071d60ab7f4574eaaa00b92b5e7b832e1c12fed Mon Sep 17 00:00:00 2001 From: Christian Paminger Date: Sun, 21 Jan 2007 13:15:12 +0000 Subject: [PATCH] --- include/lehreinheit.class.php | 95 +++++++++++++++++++++++++++------- include/lehrstunde.class.php | 2 +- include/wochenplan.class.php | 42 ++++++++++----- include/zeitwunsch.class.php | 97 +++++++++++++++++++++++++++++------ 4 files changed, 188 insertions(+), 48 deletions(-) diff --git a/include/lehreinheit.class.php b/include/lehreinheit.class.php index 6704a1346..8e460ef2a 100644 --- a/include/lehreinheit.class.php +++ b/include/lehreinheit.class.php @@ -48,6 +48,14 @@ class lehreinheit var $updatevon; // varchar(16) var $sprache; // varchar(16) var $ext_id; // bigint + var $mitarbeiter_uid; + var $studiengang_kz; + var $semester; + var $verband; + var $gruppe; + var $gruppe_kurzbz; + var $titel; + var $lehrform; // ************************************************************************* // * Konstruktor - Uebergibt die Connection und laedt optional eine LE @@ -120,6 +128,60 @@ class lehreinheit return false; } } + // ********************************************************* + // * Laedt die LE von der View mit erweiterten Attributen + // * @param lehreinheit_id + // ********************************************************* + function loadLE($lehreinheit_id) + { + if(!is_numeric($lehreinheit_id)) + { + $this->errormsg = 'Lehreinheit_id muss eine gueltige Zahl sein'; + } + + $qry = "SELECT * FROM campus.vw_lehreinheit WHERE lehreinheit_id='$lehreinheit_id'"; + + if($result = pg_query($this->conn, $qry)) + { + if($row = pg_fetch_object($result)) + { + $this->lehreinheit_id = $row->lehreinheit_id; + $this->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $this->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $this->lehrfach_id = $row->lehrfach_id; + $this->lehrform_kurzbz = $row->lehrform_kurzbz; + $this->stundenblockung = $row->stundenblockung; + $this->wochenrythmus = $row->wochenrythmus; + $this->start_kw = $row->start_kw; + $this->raumtyp = $row->raumtyp; + $this->raumtypalternativ = $row->raumtypalternativ; + $this->lehre = ($row->lehre=='t'?true:false); + $this->anmerkung = $row->anmerkung; + $this->unr = $row->unr; + $this->lvnr = $row->lvnr; + $this->sprache = $row->sprache; + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + $this->updateamum = $row->updateamum; + $this->updatevon = $row->updatevon; + $this->ext_id = $row->ext_id; + $this->mitarbeiter_uid = $row->mitarbeiter_uid; + $this->studiengang_kz = $row->studiengang_kz; + $this->semester = $row->semester; + $this->verband = $row->verband; + $this->gruppe = $row->gruppe; + $this->gruppe_kurzbz = $row->gruppe_kurzbz; + $this->titel = $row->titel; + $this->lehrform = $row->lehrform; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Lehreinheit'; + return false; + } + } + function load_lehreinheiten($lehrveranstaltung_id, $studiensemester_kurzbz) { @@ -366,7 +428,7 @@ class lehreinheit // Parameter Checken // Bezeichnung der Stundenplan-Tabelle und des Keys $stpl_id=$stpl_table.TABLE_ID; - $stpl_table=TABLE_BEGIN.$stpl_table; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; /*// Connection holen if (is_null($conn=$this->getConnection())) @@ -377,13 +439,12 @@ class lehreinheit // Datenbank abfragen $sql_query="SELECT $stpl_id FROM $stpl_table WHERE datum='$datum' AND stunde=$stunde - AND ((ort_kurzbz='$ort' OR (uid='$this->lektor' AND uid!='_DummyLektor')) + AND ((ort_kurzbz='$ort' OR (mitarbeiter_uid='$this->lektor' AND mitarbeiter_uid!='_DummyLektor')) AND unr!=$this->unr)"; //AND lehrveranstaltung_id!=$this->lehrveranstaltung_id - //$this->errormsg=$sql_query; if (! $erg_stpl=pg_query($this->conn, $sql_query)) { + //die(pg_last_error($this->conn)); $this->errormsg=pg_last_error($this->conn); - //echo $this->errormsg; return false; } $anzahl=pg_numrows($erg_stpl); @@ -408,31 +469,29 @@ class lehreinheit * @param string user UID des aktuellen Bentzers * @return boolean true=ok, false=fehler *************************************************************************/ - function save_stpl($datum,$stunde,$ort,$stpl_table, $user) + function save_stpl($datum,$stunde,$ort,$stpl_table,$user) { // Parameter Checken // Bezeichnung der Stundenplan-Tabelle und des Keys $stpl_id=$stpl_table.TABLE_ID; - $stpl_table=TABLE_BEGIN.$stpl_table; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; // Datenbank abfragen $sql_query="INSERT INTO $stpl_table - (unr,uid,datum, stunde, ort_kurzbz,lehrfach_nr,lehrform_kurzbz,studiengang_kz,semester,verband, - gruppe, einheit_kurzbz, titel, anmerkung, updatevon, lehrveranstaltung_id) - VALUES ($this->unr,'$this->lektor','$datum',$stunde, - '$ort',$this->lehrfach_nr, '$this->lehrform', $this->studiengang_kz,$this->semester, + (unr,mitarbeiter_uid,datum, stunde, ort_kurzbz,lehreinheit_id,studiengang_kz,semester,verband, + gruppe, gruppe_kurzbz, titel, anmerkung, updatevon) + VALUES ($this->unr,'$this->mitarbeiter_uid','$datum',$stunde, + '$ort',$this->lehreinheit_id, $this->studiengang_kz,$this->semester, '$this->verband','$this->gruppe'"; - if ($this->einheit_kurzbz==null) + if ($this->gruppe_kurzbz==null) $sql_query.=',NULL'; else - $sql_query.=",'$this->einheit_kurzbz'"; - $sql_query.=",'$this->titel','$this->anmerkung','$user',$this->lehrveranstaltung_id)"; - //$this->errormsg=$sql_query.'
'; - //return false; + $sql_query.=",'$this->gruppe_kurzbz'"; + $sql_query.=",'$this->titel','$this->anmerkung','$user')"; if (! $erg_stpl=pg_query($this->conn, $sql_query)) { + //die(pg_last_error($this->conn).$sql_query); $this->errormsg=pg_last_error($this->conn); - //echo $this->errormsg; return false; } return true; @@ -441,8 +500,8 @@ class lehreinheit /** * Rueckgabewert ist ein Array mit den Ergebnissen. Bei Fehler false und die * Fehlermeldung liegt in errormsg. - * Wenn der Parameter stg_kz NULL ist tritt einheit_kurzbzb in Kraft. - * @param string $einheit_kurzbz Einheit + * Wenn der Parameter stg_kz NULL ist tritt gruppe_kurzbzb in Kraft. + * @param string $gruppe_kurzbz Einheit * @param string grp Gruppe * @param string ver Verband * @param integer sem Semester diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php index 9ad1eef75..05d171b41 100644 --- a/include/lehrstunde.class.php +++ b/include/lehrstunde.class.php @@ -144,7 +144,7 @@ class lehrstunde // update $sql_query='UPDATE '.$stpl_table; $sql_query.=" SET datum='$this->datum', stunde=$this->stunde"; - $sql_query.=", ort_kurzbz='$this->ort_kurzbz', uid='$this->lektor_uid'"; + $sql_query.=", ort_kurzbz='$this->ort_kurzbz', mitarbeiter_uid='$this->lektor_uid'"; $sql_query.=", updateamum=now(), updatevon='$uid'"; $sql_query.=" WHERE $stpl_id=$this->stundenplan_id"; //echo $sql_query."
"; diff --git a/include/wochenplan.class.php b/include/wochenplan.class.php index 5e3d96b1f..e6e9b8d8d 100644 --- a/include/wochenplan.class.php +++ b/include/wochenplan.class.php @@ -1171,11 +1171,11 @@ class wochenplan $min_stunde=pg_result($result_stunde,0,'min'); $max_stunde=pg_result($result_stunde,0,'max'); - // LVAs holen + // LEs holen $sql_query='SELECT *, (semesterstunden-verplant::smallint) AS offenestunden FROM '.$lva_stpl_view.' WHERE'; $lvas=''; foreach ($lva_id as $id) - $lvas.=' OR lehrveranstaltung_id='.$id; + $lvas.=' OR lehreinheit_id='.$id; $lvas=substr($lvas,3); $sql_query.=$lvas; //$this->errormsg.=$sql_query; @@ -1279,16 +1279,19 @@ class wochenplan $lektor=array_unique($lektor); $lkt=''; foreach ($lektor as $l) - $lkt.=" OR uid='$l'"; + $lkt.=" OR mitarbeiter_uid='$l'"; $lkt=substr($lkt,3); //Dummy Lektor kollidiert nicht - $lkt='(('.$lkt.") AND uid!='_DummyLektor')"; + $lkt='(('.$lkt.") AND mitarbeiter_uid!='_DummyLektor')"; // Einheiten - $einheit=array_unique($einheit); $einheiten=''; - foreach ($einheit as $e) - $einheiten.=" OR gruppe_kurzbz='$e'"; - //$einheiten=substr($einheiten,3); + if (isset($einheit)) + { + $einheit=array_unique($einheit); + foreach ($einheit as $e) + $einheiten.=" OR gruppe_kurzbz='$e'"; + //$einheiten=substr($einheiten,3); + } //Lehrverband //$lehrverband=array_unique($lehrverband); $lvb=''; @@ -1308,11 +1311,14 @@ class wochenplan $lvb=substr($lvb,3); // Raeume die in Frage kommen aufgrund der Raumtypen - $sql_query="SELECT DISTINCT ort_kurzbz, hierarchie FROM tbl_ort - NATURAL JOIN tbl_ortraumtyp WHERE ($rtype) AND aktiv AND ort_kurzbz NOT LIKE '\\\\_%' ORDER BY hierarchie,ort_kurzbz"; // + $sql_query="SELECT DISTINCT ort_kurzbz, hierarchie FROM public.tbl_ort + JOIN public.tbl_ortraumtyp USING (ort_kurzbz) WHERE ($rtype) AND aktiv AND ort_kurzbz NOT LIKE '\\\\_%' ORDER BY hierarchie,ort_kurzbz"; // //echo $sql_query; - if(!$result=pg_exec($this->conn, $sql_query)) - die(pg_last_error($this->conn)); + if(!$result=pg_query($this->conn, $sql_query)) + { + $this->errormsg=pg_last_error($this->conn); + return false; + } $num_orte=pg_numrows($result); for ($i=0;$i<$num_orte;$i++) $orte[]=pg_fetch_result($result,$i,"ort_kurzbz"); @@ -1328,6 +1334,13 @@ class wochenplan $datum=$this->datum; $datum_begin=$this->datum_begin; $datum_end=$this->datum_end; + // Raster vorbereiten + for ($t=1;$t<7;$t++) + for ($s=$min_stunde;$s<=$max_stunde;$s++) + { + $raster[$t][$s]->ort=array(); + $raster[$t][$s]->kollision=false; + } do { // Raster vorbereiten @@ -1345,8 +1358,9 @@ class wochenplan ($lkt $einheiten OR ($lvb) ) AND unr!=$unr"; //$this->errormsg.=htmlspecialchars($sql_query); //return false; - if(!$result_kollision=pg_exec($this->conn, $sql_query)) + if(!$result_kollision=pg_query($this->conn, $sql_query)) { + //die(pg_last_error($this->conn)); $this->errormsg=pg_last_error($this->conn); return false; } @@ -1364,7 +1378,7 @@ class wochenplan // Stundenplanabfrage bauen (Wo ist besetzt?) $sql_query="SELECT DISTINCT datum, stunde, ort_kurzbz FROM $stpl_view - NATURAL JOIN tbl_ortraumtyp + JOIN public.tbl_ortraumtyp USING (ort_kurzbz) WHERE datum>='$datum_begin' AND datum<'$datum_end' AND ($rtype) AND unr!=$unr"; // //echo $sql_query; diff --git a/include/zeitwunsch.class.php b/include/zeitwunsch.class.php index 965fa8dcd..a75c7a4e7 100644 --- a/include/zeitwunsch.class.php +++ b/include/zeitwunsch.class.php @@ -32,6 +32,8 @@ class zeitwunsch var $mitarbeiter_uid; // varchar(16) var $tag; // smalint var $gewicht; // smalint + var $min_stunde; + var $max_stunde; // ************************************************************************* // * Konstruktor - Uebergibt die Connection und laedt optional eine Lehrform @@ -61,6 +63,15 @@ class zeitwunsch $this->load($mitarbeiter_uid, $tag, $stunde); } + function init() + { + $sql_query='SELECT min(stunde),max(stunde) FROM lehre.tbl_stunde'; + if(!$result_stunde=pg_query($this->conn, $sql_query)) + die(pg_last_error($this->conn)); + $this->min_stunde=pg_result($result_stunde,0,'min'); + $this->max_stunde=pg_result($result_stunde,0,'max'); + } + // ********************************************************* // * Laedt einen Zeitwunsch // * @param @@ -159,17 +170,17 @@ class zeitwunsch * Zeitwunsch einer Person laden * @return boolean Ergebnis steht in Array $zeitwunsch wenn true */ - function loadPerson($uid) + function loadPerson($uid,$datum=null) { // Zeitwuensche abfragen - if(!$result=@pg_query($this->conn, "SELECT * FROM lehre.tbl_zeitwunsch WHERE uid='$uid'")) + if(!$result=pg_query($this->conn, "SELECT * FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid='$uid'")) { $this->errormsg=pg_last_error($this->conn); return false; } else { - while ($row=@pg_fetch_object($result)) + while ($row=pg_fetch_object($result)) $this->zeitwunsch[$row->tag][$row->stunde]=$row->gewicht; return true; } @@ -177,34 +188,90 @@ class zeitwunsch /** - * Zeitwunsch der Personen in Lehrveranstaltungen laden + * Zeitwunsch der Personen in Lehreinheiten laden * @return array mit Fachbereichen oder false=fehler */ - function loadLVA($lva_id) + function loadZwLE($le_id,$datum=null) { + $this->init(); // SUB-Select fuer LVAs - $sql_query_lva='SELECT DISTINCT lektor FROM tbl_lehrveranstaltung WHERE '; - for ($i=0;$iconn, $sql_query)) + if(!$result=pg_query($this->conn, $sql_query)) { $this->errormsg=pg_last_error($this->conn); return false; } else - { - while ($row=@pg_fetch_object($result)) + while ($row=pg_fetch_object($result)) $this->zeitwunsch[$row->tag][$row->stunde]=$row->gewicht; - return true; + + // Zeitsperren fuer die aktuelle Woche holen + if ($datum!=null) + { + $beginn=montag($datum); + $ende=jump_day($beginn,6); + $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 + FROM campus.tbl_zeitsperre + WHERE mitarbeiter_uid IN ($sql_query_le) + AND vondatum<'$endeiso' AND bisdatum>'$beginniso'"; + // Zeitwuensche 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)); + { + 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)); + if ($beginn<$beginnDB) + $beginn=$beginnDB; + else + $stundebeginn=$this->min_stunde; + if ($ende>$endeDB) + $ende=$endeDB; + else + $stundeende=$this->max_stunde; + $tagbeginn=date("w",$beginn); + $tagende=date("w",$ende); + if ($tagende==0) + { + $tagende=6; + $stundeende=$this->max_stunde; + } + $first=true; + for ($t=$tagbeginn;$t<=$tagende;$t++) + for ($h=$this->min_stunde;$h<=$this->max_stunde;$h++) + { + if ($first) + { + $h=$stundebeginn; + $first=false; + } + if (!($t==$tagende && $h>$stundeende)) + $this->zeitwunsch[$t][$h]=-3; + } + } } + return true; } }