mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-16 22:42:16 +00:00
Merge branch 'feature-15391/Positive_Zeitsperre'
This commit is contained in:
@@ -2,13 +2,14 @@
|
||||
// Hintergrundfarben fuer Tabellen beim Zeitwunsch
|
||||
global $cfgStdBgcolor;
|
||||
$cfgStdBgcolor=array();
|
||||
$cfgStdBgcolor[0]="#CC0000";
|
||||
$cfgStdBgcolor[1]="#FF2200";
|
||||
$cfgStdBgcolor[2]="#FF9922";
|
||||
$cfgStdBgcolor[3]="#FFFF55";
|
||||
$cfgStdBgcolor[4]="#C0ECC3";
|
||||
$cfgStdBgcolor[5]="#48FA66";
|
||||
$cfgStdBgcolor[6]="#CCFFCC";
|
||||
$cfgStdBgcolor[0]="#CC0000"; // rot
|
||||
$cfgStdBgcolor[1]="#FF2200"; // hellrot
|
||||
$cfgStdBgcolor[2]="#FF9922"; // orange
|
||||
$cfgStdBgcolor[3]="#FFFF55"; // gelb
|
||||
$cfgStdBgcolor[4]="#C0ECC3"; // hellgrün mittel
|
||||
$cfgStdBgcolor[5]="#48FA66"; // dunkelgrün mittel
|
||||
$cfgStdBgcolor[6]="#CCFFCC"; // hellgrün heller
|
||||
$cfgStdBgcolor[7]="#59b359 "; // dunkelgrün dunkler
|
||||
|
||||
// Mehrsprachige Wochentage
|
||||
global $tagbez;
|
||||
|
||||
@@ -681,8 +681,11 @@ class lehreinheit extends basis_db
|
||||
else
|
||||
{
|
||||
$row=$this->db_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;
|
||||
if ($row->zeitsperretyp_kurzbz != 'ZVerfueg')
|
||||
{
|
||||
$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;
|
||||
|
||||
@@ -34,6 +34,8 @@ require_once(dirname(__FILE__).'/variable.class.php');
|
||||
|
||||
class lehrstunde extends basis_db
|
||||
{
|
||||
public $result = array();
|
||||
|
||||
public $stundenplan_id; /// @brief ID in der Datenbank
|
||||
public $lehreinheit_id; /// @brief id der Lehreinheit in der DB
|
||||
public $unr; // @brief Unterrichtsnummer
|
||||
@@ -876,8 +878,12 @@ class lehrstunde extends basis_db
|
||||
if ($anz_zs!=0)
|
||||
{
|
||||
$row = $this->db_fetch_object($erg_zs);
|
||||
$this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->lektor|$row->zeitsperretyp_kurzbz - $row->vondatum/$row->vonstunde|$row->bisdatum/$row->bisstunde";
|
||||
return true;
|
||||
|
||||
if ($row->zeitsperretyp_kurzbz != 'ZVerfueg')
|
||||
{
|
||||
$this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->lektor|$row->zeitsperretyp_kurzbz - $row->vondatum/$row->vonstunde|$row->bisdatum/$row->bisstunde";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -1060,7 +1066,19 @@ class lehrstunde extends basis_db
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getStundenplanData($db_stpl_table, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null)
|
||||
/**
|
||||
* Holt Studenplandaten.
|
||||
*
|
||||
* @param $db_stpl_table
|
||||
* @param null $lehrveranstaltung_id
|
||||
* @param null $studiensemester_kurzbz
|
||||
* @param null $lehreinheit_id
|
||||
* @param null $mitarbeiter_uid
|
||||
* @param null $student_uid
|
||||
* @param false $nurBevorstehende Wenn true, dann werden nur bevorstehende LVs abgefragt.
|
||||
* @return bool
|
||||
*/
|
||||
public function getStundenplanData($db_stpl_table, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null, $nurBevorstehende = false)
|
||||
{
|
||||
|
||||
$qry = "SELECT
|
||||
@@ -1112,6 +1130,11 @@ class lehrstunde extends basis_db
|
||||
else
|
||||
return false;
|
||||
|
||||
if($nurBevorstehende)
|
||||
{
|
||||
$qry.= " AND datum >= NOW()::date ";
|
||||
}
|
||||
|
||||
$qry.="GROUP BY stpl.datum, stpl.unr, stpl.lehreinheit_id, lehrfach.bezeichnung
|
||||
ORDER BY stpl.datum, min(stpl.stunde), stpl.unr, stpl.lehreinheit_id";
|
||||
|
||||
@@ -1136,7 +1159,10 @@ class lehrstunde extends basis_db
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Einholen der Stundenplandaten';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1235,7 +1235,9 @@ class wochenplan extends basis_db
|
||||
if (isset($wunsch[$i][$j]))
|
||||
{
|
||||
$index=$wunsch[$i][$j];
|
||||
if ($index==-3)
|
||||
|
||||
// Negative und positive Zeitsperren beruecksichtigen
|
||||
if ($index==-3 || $index == 4)
|
||||
{
|
||||
//Wenn eine Zeitsperre eingetragen ist, dann diese im Tooltiptext anzeigen
|
||||
$zeitsperre = new zeitsperre();
|
||||
|
||||
@@ -537,5 +537,60 @@ class zeitsperre extends basis_db
|
||||
return $this->bisdatum;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Liefert die Zeitsperren eines Users innerhalb einer bestimmten Zeitspanne.
|
||||
* Einschränkung nach Zeitsperrentyp möglich.
|
||||
*
|
||||
* @param $uid
|
||||
* @param $von string Datum im Format YYYY-MM-DD
|
||||
* @param $bis string Datum im Format YYYY-MM-DD
|
||||
* @param null $zeitsperretyp_kurzbz
|
||||
* @return bool
|
||||
*/
|
||||
public function getVonBis($uid, $von, $bis, $zeitsperretyp_kurzbz = null)
|
||||
{
|
||||
$qry = '
|
||||
SELECT
|
||||
zeitsperre_id, zeitsperretyp_kurzbz, vondatum, vonstunde, bisdatum, bisstunde
|
||||
FROM
|
||||
campus.tbl_zeitsperre
|
||||
LEFT JOIN campus.tbl_zeitsperretyp USING (zeitsperretyp_kurzbz)
|
||||
WHERE
|
||||
mitarbeiter_uid = '. $this->db_add_param($uid). '
|
||||
AND (
|
||||
(vondatum BETWEEN '.$this->db_add_param($von).' AND '.$this->db_add_param($bis).')
|
||||
OR
|
||||
(bisdatum BETWEEN '.$this->db_add_param($von).' AND '.$this->db_add_param($bis).')
|
||||
)';
|
||||
|
||||
if (!is_null($zeitsperretyp_kurzbz))
|
||||
{
|
||||
$qry.= '
|
||||
AND zeitsperretyp_kurzbz = '. $this->db_add_param($zeitsperretyp_kurzbz);
|
||||
}
|
||||
|
||||
if (!$this->db_query($qry))
|
||||
{
|
||||
$this->errormsg=$this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
while($row = $this->db_fetch_object())
|
||||
{
|
||||
$obj = new stdClass();
|
||||
$obj->zeitsperre_id = $row->zeitsperre_id;
|
||||
$obj->zeitsperretyp_kurzbz = $row->zeitsperretyp_kurzbz;
|
||||
$obj->vondatum = $row->vondatum;
|
||||
$obj->vonstunde = $row->vonstunde;
|
||||
$obj->bisdatum = $row->bisdatum;
|
||||
$obj->bisstunde = $row->bisstunde;
|
||||
|
||||
$this->result[]= $obj;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
+454
-374
@@ -1,374 +1,454 @@
|
||||
<?php
|
||||
/* Copyright (C) 2006 Technikum-Wien
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
|
||||
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
|
||||
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
|
||||
*/
|
||||
require_once(dirname(__FILE__).'/basis_db.class.php');
|
||||
|
||||
class zeitwunsch extends basis_db
|
||||
{
|
||||
public $new; // boolean
|
||||
public $zeitwunsch;
|
||||
|
||||
//Tabellenspalten
|
||||
public $stunde; // smalint
|
||||
public $mitarbeiter_uid; // varchar(32)
|
||||
public $tag; // smalint
|
||||
public $gewicht; // smalint
|
||||
public $min_stunde;
|
||||
public $max_stunde;
|
||||
public $insertamum;
|
||||
public $insertvon;
|
||||
public $updateamum;
|
||||
public $updatevon;
|
||||
|
||||
/**
|
||||
* Konstruktor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialisierung
|
||||
*
|
||||
*/
|
||||
private function init()
|
||||
{
|
||||
// Stundenraster abfragen
|
||||
$sql='SELECT min(stunde) AS min_stunde,max(stunde) AS max_stunde FROM lehre.tbl_stunde;';
|
||||
if(!$this->db_query($sql))
|
||||
{
|
||||
$this->errormsg=$this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$row=$this->db_fetch_object();
|
||||
$this->min_stunde=$row->min_stunde;
|
||||
$this->max_stunde=$row->max_stunde;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft die Variablen vor dem Speichern
|
||||
* auf Gueltigkeit.
|
||||
* @return true wenn ok, false im Fehlerfall
|
||||
*/
|
||||
protected function validate()
|
||||
{
|
||||
if(mb_strlen($this->mitarbeiter_uid)>32)
|
||||
{
|
||||
$this->errormsg = 'UID darf nicht laenger als 32 Zeichen sein.';
|
||||
return false;
|
||||
}
|
||||
if($this->mitarbeiter_uid == '')
|
||||
{
|
||||
$this->errormsg = 'UID muss angegeben werden';
|
||||
return false;
|
||||
}
|
||||
if(!is_numeric($this->stunde))
|
||||
{
|
||||
$this->errormsg = 'Stunde muss eine gueltige Zahl sein';
|
||||
return false;
|
||||
}
|
||||
if(!is_numeric($this->gewicht))
|
||||
{
|
||||
$this->errormsg = 'Gewicht muss eine gueltige Zahl sein';
|
||||
return false;
|
||||
}
|
||||
if(!is_numeric($this->tag))
|
||||
{
|
||||
$this->errormsg = 'Tag muss eine gueltige Zahl sein';
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Speichert einen Zeitwunsch in die Datenbank
|
||||
* Wenn $new auf true gesetzt ist wird ein neuer Datensatz
|
||||
* angelegt, ansonsten der Datensatz upgedated
|
||||
* @return true wenn erfolgreich, false im Fehlerfall
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
//Variablen auf Gueltigkeit pruefen
|
||||
if(!$this->validate())
|
||||
return false;
|
||||
|
||||
if($this->new)
|
||||
{
|
||||
$qry = 'INSERT INTO campus.tbl_zeitwunsch (mitarbeiter_uid, tag, stunde, gewicht,
|
||||
insertamum, insertvon, updateamum, updatevon) VALUES('.
|
||||
$this->db_add_param($this->mitarbeiter_uid).','.
|
||||
$this->db_add_param($this->tag, FHC_INTEGER).','.
|
||||
$this->db_add_param($this->stunde, FHC_INTEGER).','.
|
||||
$this->db_add_param($this->gewicht, FHC_INTEGER).','.
|
||||
$this->db_add_param($this->insertamum).','.
|
||||
$this->db_add_param($this->insertvon).','.
|
||||
$this->db_add_param($this->updateamum).','.
|
||||
$this->db_add_param($this->updatevon).');';
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry = 'UPDATE campus.tbl_zeitwunsch SET'.
|
||||
' gewicht='.$this->db_add_param($this->gewicht, FHC_INTEGER).', '.
|
||||
' updateamum='.$this->db_add_param($this->updateamum).', '.
|
||||
' updatevon='.$this->db_add_param($this->updatevon).
|
||||
" WHERE
|
||||
mitarbeiter_uid=".$this->db_add_param($this->mitarbeiter_uid, FHC_STRING, false)."
|
||||
AND tag=".$this->db_add_param($this->tag, FHC_INTEGER)."
|
||||
AND stunde=".$this->db_add_param($this->stunde, FHC_INTEGER);
|
||||
}
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Speichern des Zeitwunsches';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Zeitwunsch einer Person laden
|
||||
* @param uid
|
||||
* @param datum
|
||||
* @return boolean Ergebnis steht in Array $zeitwunsch wenn true
|
||||
*/
|
||||
public function loadPerson($uid,$datum=null)
|
||||
{
|
||||
// Zeitwuensche abfragen
|
||||
if(!$this->db_query("SELECT * FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid=".$this->db_add_param($uid)))
|
||||
{
|
||||
$this->errormsg = $this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
while ($row = $this->db_fetch_object())
|
||||
{
|
||||
$this->zeitwunsch[$row->tag][$row->stunde]=$row->gewicht;
|
||||
$this->insertamum = $row->insertamum;
|
||||
$this->insertvon = $row->insertvon;
|
||||
$this->updateamum = $row->updateamum;
|
||||
$this->updatevon = $row->updatevon;
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_null($datum))
|
||||
{
|
||||
$beginn=montag($datum);
|
||||
$start=date('Y-m-d',$beginn);
|
||||
$ende=date('Y-m-d',jump_day($beginn,7));
|
||||
|
||||
// Zeitsperren abfragen
|
||||
$sql="
|
||||
SELECT
|
||||
vondatum,vonstunde,bisdatum,bisstunde
|
||||
FROM
|
||||
campus.tbl_zeitsperre
|
||||
WHERE
|
||||
mitarbeiter_uid=".$this->db_add_param($uid)."
|
||||
AND vondatum<=".$this->db_add_param($ende)."
|
||||
AND bisdatum>=".$this->db_add_param($start);
|
||||
|
||||
if(!$this->db_query($sql))
|
||||
{
|
||||
$this->errormsg=$this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
while($row = $this->db_fetch_object())
|
||||
{
|
||||
$beginn=montag($datum);
|
||||
for ($i=1;$i<=7;$i++)
|
||||
{
|
||||
$date_iso=date('Y-m-d',$beginn);
|
||||
//echo "\n".$date_iso."\n".$row->vondatum."\n";
|
||||
if ($date_iso>$row->vondatum && $date_iso<$row->bisdatum)
|
||||
for ($j=$this->min_stunde;$j<=$this->max_stunde;$j++)
|
||||
$this->zeitwunsch[$i][$j]=-3;
|
||||
if ($date_iso==$row->vondatum && $date_iso<$row->bisdatum)
|
||||
{
|
||||
if (is_null($row->vonstunde))
|
||||
$row->vonstunde=$this->min_stunde;
|
||||
for ($j=$row->vonstunde;$j<=$this->max_stunde;$j++)
|
||||
$this->zeitwunsch[$i][$j]=-3;
|
||||
}
|
||||
if ($date_iso>$row->vondatum && $date_iso==$row->bisdatum)
|
||||
{
|
||||
if (is_null($row->bisstunde))
|
||||
$row->bisstunde=$this->max_stunde;
|
||||
for ($j=$this->min_stunde;$j<=$row->bisstunde;$j++)
|
||||
$this->zeitwunsch[$i][$j]=-3;
|
||||
}
|
||||
if ($date_iso==$row->vondatum && $date_iso==$row->bisdatum)
|
||||
{
|
||||
if (is_null($row->vonstunde))
|
||||
$row->vonstunde=$this->min_stunde;
|
||||
if (is_null($row->bisstunde))
|
||||
$row->bisstunde=$this->max_stunde;
|
||||
for ($j=$row->vonstunde;$j<=$row->bisstunde;$j++)
|
||||
$this->zeitwunsch[$i][$j]=-3;
|
||||
}
|
||||
$beginn=jump_day($beginn,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Zeitwunsch der Personen in Lehreinheiten laden
|
||||
* @param $le_id LehreinheitID Array
|
||||
* @param $datum
|
||||
* @return true oder false
|
||||
*/
|
||||
public function loadZwLE($le_id,$datum=null)
|
||||
{
|
||||
//$this->init();
|
||||
// SUB-Select fuer LVAs
|
||||
$sql_query_leid='';
|
||||
$sql_query_le='SELECT DISTINCT mitarbeiter_uid FROM campus.vw_lehreinheit WHERE ';
|
||||
for ($i=0;$i<count($le_id);$i++)
|
||||
$sql_query_leid.=" OR lehreinheit_id=".$this->db_add_param($le_id[$i], FHC_INTEGER);
|
||||
$sql_query_leid=mb_substr($sql_query_leid,3);
|
||||
$sql_query_le.=$sql_query_leid;
|
||||
|
||||
// Schlechteste Zeitwuensche holen
|
||||
$sql_query='SELECT tag,stunde,min(gewicht) AS gewicht
|
||||
FROM campus.tbl_zeitwunsch WHERE mitarbeiter_uid IN ('.$sql_query_le.') GROUP BY tag,stunde';
|
||||
|
||||
// Zeitwuensche abfragen
|
||||
if(!$this->db_query($sql_query))
|
||||
{
|
||||
$this->errormsg = $this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
while($row = $this->db_fetch_object())
|
||||
$this->zeitwunsch[$row->tag][$row->stunde]=$row->gewicht;
|
||||
|
||||
// ***********************************************************
|
||||
// Zeitsperren fuer die aktuelle Woche holen
|
||||
|
||||
if (!is_null($datum))
|
||||
{
|
||||
$beginn=montag($datum);
|
||||
$start=date('Y-m-d',$beginn);
|
||||
$ende=date('Y-m-d',jump_day($beginn,7));
|
||||
|
||||
// Zeitsperren abfragen
|
||||
$sql="
|
||||
SELECT
|
||||
vondatum,vonstunde,bisdatum,bisstunde
|
||||
FROM
|
||||
campus.tbl_zeitsperre
|
||||
WHERE
|
||||
mitarbeiter_uid IN ($sql_query_le)
|
||||
AND vondatum<=".$this->db_add_param($ende)."
|
||||
AND bisdatum>=".$this->db_add_param($start);
|
||||
|
||||
if(!$this->db_query($sql))
|
||||
{
|
||||
$this->errormsg = $this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
while($row = $this->db_fetch_object())
|
||||
{
|
||||
$beginn=montag($datum);
|
||||
for ($i=1;$i<=7;$i++)
|
||||
{
|
||||
$date_iso=date('Y-m-d',$beginn);
|
||||
//echo "\n".$date_iso."\n".$row->vondatum."\n";
|
||||
if ($date_iso>$row->vondatum && $date_iso<$row->bisdatum)
|
||||
for ($j=$this->min_stunde;$j<=$this->max_stunde;$j++)
|
||||
$this->zeitwunsch[$i][$j]=-3;
|
||||
if ($date_iso==$row->vondatum && $date_iso<$row->bisdatum)
|
||||
{
|
||||
if (is_null($row->vonstunde))
|
||||
$row->vonstunde=$this->min_stunde;
|
||||
for ($j=$row->vonstunde;$j<=$this->max_stunde;$j++)
|
||||
$this->zeitwunsch[$i][$j]=-3;
|
||||
}
|
||||
if ($date_iso>$row->vondatum && $date_iso==$row->bisdatum)
|
||||
{
|
||||
if (is_null($row->bisstunde))
|
||||
$row->bisstunde=$this->max_stunde;
|
||||
for ($j=$this->min_stunde;$j<=$row->bisstunde;$j++)
|
||||
$this->zeitwunsch[$i][$j]=-3;
|
||||
}
|
||||
if ($date_iso==$row->vondatum && $date_iso==$row->bisdatum)
|
||||
{
|
||||
if (is_null($row->vonstunde))
|
||||
$row->vonstunde=$this->min_stunde;
|
||||
if (is_null($row->bisstunde))
|
||||
$row->bisstunde=$this->max_stunde;
|
||||
for ($j=$row->vonstunde;$j<=$row->bisstunde;$j++)
|
||||
$this->zeitwunsch[$i][$j]=-3;
|
||||
}
|
||||
$beginn=jump_day($beginn,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob bereits ein Zeitwunsch eingetragen ist
|
||||
*
|
||||
* @param $uid
|
||||
* @param $stunde
|
||||
* @param $tag
|
||||
* @return true wenn vorhanden sonst false
|
||||
*/
|
||||
function exists($uid, $stunde, $tag)
|
||||
{
|
||||
$qry = "SELECT 1 FROM campus.tbl_zeitwunsch
|
||||
WHERE
|
||||
mitarbeiter_uid=".$this->db_add_param($uid)."
|
||||
AND stunde=".$this->db_add_param($stunde, FHC_INTEGER)."
|
||||
AND tag=".$this->db_add_param($tag, FHC_INTEGER);
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
if($this->db_num_rows()>0)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg='Fehler beim Abfragen des Zeitwunsches';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/* Copyright (C) 2006 Technikum-Wien
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
|
||||
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
|
||||
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
|
||||
*/
|
||||
require_once(dirname(__FILE__).'/basis_db.class.php');
|
||||
|
||||
class zeitwunsch extends basis_db
|
||||
{
|
||||
public $new; // boolean
|
||||
public $zeitwunsch;
|
||||
|
||||
//Tabellenspalten
|
||||
public $stunde; // smalint
|
||||
public $mitarbeiter_uid; // varchar(32)
|
||||
public $tag; // smalint
|
||||
public $gewicht; // smalint
|
||||
public $min_stunde;
|
||||
public $max_stunde;
|
||||
public $insertamum;
|
||||
public $insertvon;
|
||||
public $updateamum;
|
||||
public $updatevon;
|
||||
public $zeitwunsch_id;
|
||||
public $zeitwunsch_gueltigkeit_id;
|
||||
|
||||
/**
|
||||
* Konstruktor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialisierung
|
||||
*
|
||||
*/
|
||||
private function init()
|
||||
{
|
||||
// Stundenraster abfragen
|
||||
$sql='SELECT min(stunde) AS min_stunde,max(stunde) AS max_stunde FROM lehre.tbl_stunde;';
|
||||
if(!$this->db_query($sql))
|
||||
{
|
||||
$this->errormsg=$this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$row=$this->db_fetch_object();
|
||||
$this->min_stunde=$row->min_stunde;
|
||||
$this->max_stunde=$row->max_stunde;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft die Variablen vor dem Speichern
|
||||
* auf Gueltigkeit.
|
||||
* @return true wenn ok, false im Fehlerfall
|
||||
*/
|
||||
protected function validate()
|
||||
{
|
||||
if(mb_strlen($this->mitarbeiter_uid)>32)
|
||||
{
|
||||
$this->errormsg = 'UID darf nicht laenger als 32 Zeichen sein.';
|
||||
return false;
|
||||
}
|
||||
if($this->mitarbeiter_uid == '')
|
||||
{
|
||||
$this->errormsg = 'UID muss angegeben werden';
|
||||
return false;
|
||||
}
|
||||
if(!is_numeric($this->stunde))
|
||||
{
|
||||
$this->errormsg = 'Stunde muss eine gueltige Zahl sein';
|
||||
return false;
|
||||
}
|
||||
if(!is_numeric($this->gewicht))
|
||||
{
|
||||
$this->errormsg = 'Gewicht muss eine gueltige Zahl sein';
|
||||
return false;
|
||||
}
|
||||
if(!is_numeric($this->tag))
|
||||
{
|
||||
$this->errormsg = 'Tag muss eine gueltige Zahl sein';
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Speichert einen Zeitwunsch in die Datenbank
|
||||
* Wenn $new auf true gesetzt ist wird ein neuer Datensatz
|
||||
* angelegt, ansonsten der Datensatz upgedated
|
||||
* @return true wenn erfolgreich, false im Fehlerfall
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
//Variablen auf Gueltigkeit pruefen
|
||||
if(!$this->validate())
|
||||
return false;
|
||||
|
||||
if($this->new)
|
||||
{
|
||||
$qry = 'INSERT INTO campus.tbl_zeitwunsch (mitarbeiter_uid, tag, stunde, gewicht,
|
||||
insertamum, insertvon, updateamum, updatevon, zeitwunsch_gueltigkeit_id) VALUES('.
|
||||
$this->db_add_param($this->mitarbeiter_uid).','.
|
||||
$this->db_add_param($this->tag, FHC_INTEGER).','.
|
||||
$this->db_add_param($this->stunde, FHC_INTEGER).','.
|
||||
$this->db_add_param($this->gewicht, FHC_INTEGER).','.
|
||||
$this->db_add_param($this->insertamum).','.
|
||||
$this->db_add_param($this->insertvon).','.
|
||||
$this->db_add_param($this->updateamum).','.
|
||||
$this->db_add_param($this->updatevon).','.
|
||||
$this->db_add_param($this->zeitwunsch_gueltigkeit_id).');';
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry = 'UPDATE campus.tbl_zeitwunsch SET'.
|
||||
' gewicht='.$this->db_add_param($this->gewicht, FHC_INTEGER).', '.
|
||||
' updateamum='.$this->db_add_param($this->updateamum).', '.
|
||||
' updatevon='.$this->db_add_param($this->updatevon).
|
||||
" WHERE
|
||||
mitarbeiter_uid=".$this->db_add_param($this->mitarbeiter_uid, FHC_STRING, false)."
|
||||
AND tag=".$this->db_add_param($this->tag, FHC_INTEGER)."
|
||||
AND stunde=".$this->db_add_param($this->stunde, FHC_INTEGER). "
|
||||
AND zeitwunsch_gueltigkeit_id=".$this->db_add_param($this->zeitwunsch_gueltigkeit_id, FHC_INTEGER);
|
||||
}
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Speichern des Zeitwunsches';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Zeitwunsch einer Person zu bestimmter Zeitwunschgueltigkeit laden
|
||||
* @param $uid
|
||||
* @param $zeitwunsch_gueltigkeit_id
|
||||
* @return boolean
|
||||
*/
|
||||
public function loadByZWG($uid, $zeitwunsch_gueltigkeit_id)
|
||||
{
|
||||
$qry = '
|
||||
SELECT *
|
||||
FROM campus.tbl_zeitwunsch
|
||||
JOIN campus.tbl_zeitwunsch_gueltigkeit zwg USING (zeitwunsch_gueltigkeit_id)
|
||||
WHERE zwg.mitarbeiter_uid = ' . $this->db_add_param($uid) . '
|
||||
AND zeitwunsch_gueltigkeit_id = ' . $this->db_add_param($zeitwunsch_gueltigkeit_id) . '
|
||||
ORDER BY tag, stunde
|
||||
';
|
||||
|
||||
if ($this->db_query($qry))
|
||||
{
|
||||
while ($row = $this->db_fetch_object())
|
||||
{
|
||||
$this->zeitwunsch[$row->tag][$row->stunde] = $row->gewicht;
|
||||
$this->insertamum = $row->insertamum;
|
||||
$this->insertvon = $row->insertvon;
|
||||
$this->updateamum = $row->updateamum;
|
||||
$this->updatevon = $row->updatevon;
|
||||
$this->zeitwunsch_id = $row->zeitwunsch_id;
|
||||
$this->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = $this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Alle Zeitwuensche einer Person laden.
|
||||
* Um auf einen Zeitwunsch einer bestimmten Zeit, also innerhalb einer bestimmten Zeitwunschgueltigkeit
|
||||
* zu beschraenken, kann ein Datum mitgegeben werden.
|
||||
* @param uid
|
||||
* @param datum UNIX timestamp, um Zeitwunsch mit richtiger Zeitwunschgueltigkeit zu ermitteln
|
||||
* @return boolean Ergebnis steht in Array $zeitwunsch wenn true
|
||||
*/
|
||||
public function loadPerson($uid,$datum=null)
|
||||
{
|
||||
// Default datum: jetzt
|
||||
if (is_null($datum))
|
||||
{
|
||||
$datum = time();
|
||||
}
|
||||
|
||||
$qry = "
|
||||
SELECT *
|
||||
FROM campus.tbl_zeitwunsch
|
||||
JOIN campus.tbl_zeitwunsch_gueltigkeit zwg USING (zeitwunsch_gueltigkeit_id)
|
||||
WHERE zwg.mitarbeiter_uid=". $this->db_add_param($uid). "
|
||||
AND ". $this->db_add_param(date('Y-m-d', $datum)). " BETWEEN von AND COALESCE(bis,'2999-01-01');
|
||||
";
|
||||
|
||||
|
||||
// Zeitwuensche abfragen
|
||||
if(!$this->db_query($qry))
|
||||
{
|
||||
$this->errormsg = $this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
while ($row = $this->db_fetch_object())
|
||||
{
|
||||
$this->zeitwunsch[$row->tag][$row->stunde]=$row->gewicht;
|
||||
$this->insertamum = $row->insertamum;
|
||||
$this->insertvon = $row->insertvon;
|
||||
$this->updateamum = $row->updateamum;
|
||||
$this->updatevon = $row->updatevon;
|
||||
$this->zeitwunsch_id = $row->zeitwunsch_id;
|
||||
$this->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id;
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_null($datum))
|
||||
{
|
||||
$beginn=montag($datum);
|
||||
$start=date('Y-m-d',$beginn);
|
||||
$ende=date('Y-m-d',jump_day($beginn,7));
|
||||
|
||||
// Zeitsperren abfragen
|
||||
$sql="
|
||||
SELECT
|
||||
zeitsperretyp_kurzbz, vondatum,vonstunde,bisdatum,bisstunde
|
||||
FROM
|
||||
campus.tbl_zeitsperre
|
||||
WHERE
|
||||
mitarbeiter_uid=".$this->db_add_param($uid)."
|
||||
AND vondatum<=".$this->db_add_param($ende)."
|
||||
AND bisdatum>=".$this->db_add_param($start). "
|
||||
-- Negative Zeitsperren sollen im Plan eine positive Zeitsperre 'ZVerfueg' overrulen
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN zeitsperretyp_kurzbz = 'ZVerfueg' THEN 1
|
||||
ELSE 2
|
||||
END;";
|
||||
|
||||
if(!$this->db_query($sql))
|
||||
{
|
||||
$this->errormsg=$this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Zeitsperren negativ (-3) gewichten.
|
||||
// Ausnahme: positive Zeitsperren: diese positiv (4) gewichten.
|
||||
while($row = $this->db_fetch_object())
|
||||
{
|
||||
$beginn=montag($datum);
|
||||
for ($i=1;$i<=7;$i++)
|
||||
{
|
||||
$date_iso=date('Y-m-d',$beginn);
|
||||
//echo "\n".$date_iso."\n".$row->vondatum."\n";
|
||||
if ($date_iso>$row->vondatum && $date_iso<$row->bisdatum)
|
||||
for ($j=$this->min_stunde;$j<=$this->max_stunde;$j++)
|
||||
$this->zeitwunsch[$i][$j] = $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
|
||||
|
||||
if ($date_iso==$row->vondatum && $date_iso<$row->bisdatum)
|
||||
{
|
||||
if (is_null($row->vonstunde))
|
||||
$row->vonstunde=$this->min_stunde;
|
||||
for ($j=$row->vonstunde;$j<=$this->max_stunde;$j++)
|
||||
$this->zeitwunsch[$i][$j] = $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
|
||||
}
|
||||
if ($date_iso>$row->vondatum && $date_iso==$row->bisdatum)
|
||||
{
|
||||
if (is_null($row->bisstunde))
|
||||
$row->bisstunde=$this->max_stunde;
|
||||
for ($j=$this->min_stunde;$j<=$row->bisstunde;$j++)
|
||||
$this->zeitwunsch[$i][$j] = $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
|
||||
}
|
||||
if ($date_iso==$row->vondatum && $date_iso==$row->bisdatum)
|
||||
{
|
||||
if (is_null($row->vonstunde))
|
||||
$row->vonstunde=$this->min_stunde;
|
||||
if (is_null($row->bisstunde))
|
||||
$row->bisstunde=$this->max_stunde;
|
||||
for ($j=$row->vonstunde;$j<=$row->bisstunde;$j++)
|
||||
$this->zeitwunsch[$i][$j] = $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
|
||||
}
|
||||
$beginn=jump_day($beginn,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Zeitwunsch der Personen in Lehreinheiten laden
|
||||
* @param $le_id LehreinheitID Array
|
||||
* @param $datum UNIX timestamp Datum, um Zeitwunsch mit richtiger Zeitwunschgueltigkeit zu ermitteln
|
||||
* @return true oder false
|
||||
*/
|
||||
public function loadZwLE($le_id, $datum = null)
|
||||
{
|
||||
// Default datum: jetzt
|
||||
if (is_null($datum))
|
||||
{
|
||||
$datum = time();
|
||||
}
|
||||
// SUB-Select fuer LVAs
|
||||
$sql_query_leid='';
|
||||
$sql_query_le='SELECT DISTINCT mitarbeiter_uid FROM campus.vw_lehreinheit WHERE ';
|
||||
for ($i=0;$i<count($le_id);$i++)
|
||||
$sql_query_leid.=" OR lehreinheit_id=".$this->db_add_param($le_id[$i], FHC_INTEGER);
|
||||
$sql_query_leid=mb_substr($sql_query_leid,3);
|
||||
$sql_query_le.=$sql_query_leid;
|
||||
|
||||
// Schlechteste Zeitwuensche holen
|
||||
$sql_query='SELECT tag,stunde,min(gewicht) AS gewicht
|
||||
FROM campus.tbl_zeitwunsch
|
||||
JOIN campus.tbl_zeitwunsch_gueltigkeit zwg USING (zeitwunsch_gueltigkeit_id)
|
||||
WHERE zwg.mitarbeiter_uid IN ('.$sql_query_le.')
|
||||
AND '. $this->db_add_param(date('Y-m-d', $datum)). ' BETWEEN von AND COALESCE(bis,\'2999-01-01\')
|
||||
GROUP BY tag,stunde;';
|
||||
|
||||
// Zeitwuensche abfragen
|
||||
if(!$this->db_query($sql_query))
|
||||
{
|
||||
$this->errormsg = $this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
while($row = $this->db_fetch_object())
|
||||
$this->zeitwunsch[$row->tag][$row->stunde]=$row->gewicht;
|
||||
|
||||
// ***********************************************************
|
||||
// Zeitsperren fuer die aktuelle Woche holen
|
||||
|
||||
if (!is_null($datum))
|
||||
{
|
||||
$beginn=montag($datum);
|
||||
$start=date('Y-m-d',$beginn);
|
||||
$ende=date('Y-m-d',jump_day($beginn,7));
|
||||
|
||||
// Zeitsperren abfragen
|
||||
$sql="
|
||||
SELECT
|
||||
zeitsperretyp_kurzbz, vondatum,vonstunde,bisdatum,bisstunde
|
||||
FROM
|
||||
campus.tbl_zeitsperre
|
||||
WHERE
|
||||
mitarbeiter_uid IN ($sql_query_le)
|
||||
AND vondatum<=".$this->db_add_param($ende)."
|
||||
AND bisdatum>=".$this->db_add_param($start);
|
||||
|
||||
if(!$this->db_query($sql))
|
||||
{
|
||||
$this->errormsg = $this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
while($row = $this->db_fetch_object())
|
||||
{
|
||||
$beginn=montag($datum);
|
||||
for ($i=1;$i<=7;$i++)
|
||||
{
|
||||
$date_iso=date('Y-m-d',$beginn);
|
||||
//echo "\n".$date_iso."\n".$row->vondatum."\n";
|
||||
if ($date_iso>$row->vondatum && $date_iso<$row->bisdatum)
|
||||
for ($j=$this->min_stunde;$j<=$this->max_stunde;$j++)
|
||||
$this->zeitwunsch[$i][$j]= $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
|
||||
if ($date_iso==$row->vondatum && $date_iso<$row->bisdatum)
|
||||
{
|
||||
if (is_null($row->vonstunde))
|
||||
$row->vonstunde=$this->min_stunde;
|
||||
for ($j=$row->vonstunde;$j<=$this->max_stunde;$j++)
|
||||
$this->zeitwunsch[$i][$j]= $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
|
||||
}
|
||||
if ($date_iso>$row->vondatum && $date_iso==$row->bisdatum)
|
||||
{
|
||||
if (is_null($row->bisstunde))
|
||||
$row->bisstunde=$this->max_stunde;
|
||||
for ($j=$this->min_stunde;$j<=$row->bisstunde;$j++)
|
||||
$this->zeitwunsch[$i][$j]= $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
|
||||
}
|
||||
if ($date_iso==$row->vondatum && $date_iso==$row->bisdatum)
|
||||
{
|
||||
if (is_null($row->vonstunde))
|
||||
$row->vonstunde=$this->min_stunde;
|
||||
if (is_null($row->bisstunde))
|
||||
$row->bisstunde=$this->max_stunde;
|
||||
for ($j=$row->vonstunde;$j<=$row->bisstunde;$j++)
|
||||
$this->zeitwunsch[$i][$j]= $row->zeitsperretyp_kurzbz == 'ZVerfueg' ? 4 : -3;
|
||||
}
|
||||
$beginn=jump_day($beginn,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob bereits ein Zeitwunsch eingetragen ist
|
||||
*
|
||||
* @param $uid
|
||||
* @param $zwg_id
|
||||
* @param $stunde
|
||||
* @param $tag
|
||||
* @return true wenn vorhanden sonst false
|
||||
*/
|
||||
function exists($uid, $zwg_id, $stunde, $tag)
|
||||
{
|
||||
$qry = "SELECT 1 FROM campus.tbl_zeitwunsch
|
||||
WHERE
|
||||
mitarbeiter_uid=".$this->db_add_param($uid)."
|
||||
AND stunde=".$this->db_add_param($stunde, FHC_INTEGER)."
|
||||
AND tag=".$this->db_add_param($tag, FHC_INTEGER). "
|
||||
AND zeitwunsch_gueltigkeit_id = ".$this->db_add_param($zwg_id, FHC_INTEGER);
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
if($this->db_num_rows()>0)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg='Fehler beim Abfragen des Zeitwunsches';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -0,0 +1,271 @@
|
||||
<?php
|
||||
|
||||
require_once(dirname(__FILE__). '/basis_db.class.php');
|
||||
|
||||
class zeitwunsch_gueltigkeit extends basis_db
|
||||
{
|
||||
public $new; // boolean
|
||||
public $result = array();
|
||||
|
||||
public $zeitwunsch_gueltigkeit_id; // integer
|
||||
public $mitarbeiter_uid; // varchar 32
|
||||
public $von; // date
|
||||
public $bis; // date
|
||||
public $insertamum; // timestamp
|
||||
public $insertvon; // varchar 32
|
||||
public $updateamum; // timestamp
|
||||
public $updatevon; // varchar 32
|
||||
|
||||
public $studiensemester_kurzbz;
|
||||
public $start;
|
||||
public $ende;
|
||||
|
||||
public function __construct($zeitwunsch_gueltigkeit_id = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
if (!is_null($zeitwunsch_gueltigkeit_id))
|
||||
{
|
||||
$this->load($zeitwunsch_gueltigkeit_id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ladet eine Zeitwunschgueltigkeit.
|
||||
* @param $zeitwunsch_gueltigkeit_id
|
||||
* @return bool
|
||||
*/
|
||||
public function load($zeitwunsch_gueltigkeit_id)
|
||||
{
|
||||
if (!is_numeric($zeitwunsch_gueltigkeit_id))
|
||||
{
|
||||
$this->errormsg = 'Wrong parameter zeitwunsch_gueltigkeit_id.';
|
||||
return false;
|
||||
}
|
||||
|
||||
$qry = '
|
||||
SELECT *, studiensemester_kurzbz, start, ende
|
||||
FROM campus.tbl_zeitwunsch_gueltigkeit, public.tbl_studiensemester
|
||||
WHERE zeitwunsch_gueltigkeit_id = '.$this->db_add_param($zeitwunsch_gueltigkeit_id). '
|
||||
AND (von < ende AND COALESCE(bis, \'2999-12-31\'::date ) > start)
|
||||
ORDER BY start ASC
|
||||
LIMIT 1
|
||||
';
|
||||
|
||||
if ($result = $this->db_query($qry))
|
||||
{
|
||||
while ($row = $this->db_fetch_object($result))
|
||||
{
|
||||
$this->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id;
|
||||
$this->von = $row->von;
|
||||
$this->bis = $row->bis;
|
||||
$this->insertamum = $row->insertamum;
|
||||
$this->insertvon = $row->insertvon;
|
||||
$this->updateamum = $row->updateamum;
|
||||
$this->updatevon = $row->updatevon;
|
||||
$this->studiensemester_kurzbz = $row->studiensemester_kurzbz;
|
||||
$this->start = $row->start;
|
||||
$this->ende = $row->ende;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler bei der Datenbankabfrage';
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Speichert eine Zeitwunschgueltigkeit
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
if($this->new)
|
||||
{
|
||||
$qry = '
|
||||
INSERT INTO campus.tbl_zeitwunsch_gueltigkeit (mitarbeiter_uid, von, bis, insertvon)
|
||||
VALUES ('.
|
||||
$this->db_add_param($this->mitarbeiter_uid).', '.
|
||||
$this->db_add_param($this->von).', '.
|
||||
$this->db_add_param($this->bis).', '.
|
||||
$this->db_add_param($this->insertvon). ')
|
||||
RETURNING zeitwunsch_gueltigkeit_id;
|
||||
';
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry = '
|
||||
UPDATE campus.tbl_zeitwunsch_gueltigkeit SET'.
|
||||
' bis = '. $this->db_add_param($this->bis). ', '.
|
||||
' updateamum = NOW(), '.
|
||||
' updatevon = '.$this->db_add_param($this->updatevon).
|
||||
' WHERE zeitwunsch_gueltigkeit_id = ' .$this->db_add_param($this->zeitwunsch_gueltigkeit_id, FHC_INTEGER);
|
||||
|
||||
}
|
||||
|
||||
if($result = $this->db_query($qry))
|
||||
{
|
||||
// Wenn neuer Eintrag
|
||||
if ($this->new)
|
||||
{
|
||||
if($row = $this->db_fetch_object($result))
|
||||
{
|
||||
// ZWG ID des neuen ZWG Eintrags zurueckgeben
|
||||
$this->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Speichern der Zeitwunschgueltigkeit';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ladet Zeitwunschgueltigkeiten einer UID mitsamt den zugehoerigen Studiensemestern.
|
||||
* @param $uid
|
||||
* @param numeric $limit limit = null liefert alle ZWG; limit = 1 liefert die letztgueltige Zeitwunsch-Gueltigkeit.
|
||||
* @param bool $activeOnly Wenn während des laufenden Semesters der Zeitwunsch geaendert werden, werden mehrere ZWG im Semester hinterlegt.
|
||||
* true liefert pro Studiensemester nur die letztgueltigen ZWG;
|
||||
* false liefert alle ZWG pro Studiensemester
|
||||
* @param string $bis string date, z.B. 2022-01-31
|
||||
* @return bool
|
||||
*/
|
||||
public function getByUID($uid, $limit = null, $activeOnly = true, $bis = null)
|
||||
{
|
||||
$qry = '
|
||||
WITH basic_select AS (
|
||||
SELECT *,
|
||||
row_number() over (PARTITION BY studiensemester_kurzbz ORDER BY von DESC) r
|
||||
FROM campus.tbl_zeitwunsch_gueltigkeit, public.tbl_studiensemester
|
||||
WHERE mitarbeiter_uid = ' . $this->db_add_param($uid);
|
||||
|
||||
// Wenn Bis-Datum angegeben
|
||||
if (!is_null($bis))
|
||||
{
|
||||
// Zeitwuensche nur bis zum angegebenen Bis-Datum
|
||||
$qry.= '
|
||||
AND (von < ende AND '. $this->db_add_param($bis). '::date > start))
|
||||
';
|
||||
}
|
||||
// Wenn kein Bis-Datum angegeben ist
|
||||
else
|
||||
{
|
||||
// Zeitwuensche bis zum Semesterende des chronologisch letzten Zeitwunsches (also der ZWG, wo bis NULL ist)
|
||||
$qry.= '
|
||||
AND (von < ende AND COALESCE(bis, (SELECT ende FROM public.tbl_studiensemester WHERE von BETWEEN start AND ende)) > start))';
|
||||
}
|
||||
|
||||
$qry.= '
|
||||
SELECT *
|
||||
FROM basic_select
|
||||
';
|
||||
|
||||
// Wenn nur aktive Zeitwunschgueltigkeiten angezeigt werden sollen
|
||||
if ($activeOnly)
|
||||
{
|
||||
$qry.= ' WHERE r = 1';
|
||||
}
|
||||
|
||||
$qry.= ' ORDER BY von DESC, start DESC';
|
||||
|
||||
// Wenn Limit angegeben
|
||||
if (!is_null($limit))
|
||||
{
|
||||
$qry.= ' LIMIT '.$this->db_add_param($limit);
|
||||
}
|
||||
|
||||
if ($result = $this->db_query($qry))
|
||||
{
|
||||
$this->result = array();
|
||||
|
||||
while ($row = $this->db_fetch_object($result))
|
||||
{
|
||||
$obj = new StdClass();
|
||||
$obj->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id;
|
||||
$obj->von = $row->von;
|
||||
$obj->bis = $row->bis;
|
||||
$obj->studiensemester_kurzbz = $row->studiensemester_kurzbz;
|
||||
$obj->start = $row->start;
|
||||
$obj->ende = $row->ende;
|
||||
$obj->insertamum = $row->insertamum;
|
||||
$obj->insertvon = $row->insertvon;
|
||||
$obj->updateamum = $row->updateamum;
|
||||
$obj->updatevon = $row->updatevon;
|
||||
|
||||
$this->result[]= $obj;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler bei der Datenbankabfrage';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ladet Zeitwunschgueltigkeiten einer UID und eines bestimmten Semesters (defaultmaeßig nur die letztgueltige)
|
||||
* @param $uid
|
||||
* @param $studiensemester_kurzbz
|
||||
* @param null $limit limit = null liefert alle ZWG des Studiensemesters; limit = 1 liefert die letztgueltige ZWG.
|
||||
* @return bool
|
||||
*/
|
||||
public function getByStudiensemester($uid, $studiensemester_kurzbz, $limit = 1)
|
||||
{
|
||||
$qry = '
|
||||
WITH studiensemester AS
|
||||
(
|
||||
SELECT studiensemester_kurzbz, start, ende
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studiensemester_kurzbz = '.$this->db_add_param($studiensemester_kurzbz). '
|
||||
)
|
||||
|
||||
SELECT zwg.*, studiensemester_kurzbz, start, ende
|
||||
FROM campus.tbl_zeitwunsch_gueltigkeit zwg, studiensemester ss
|
||||
WHERE zwg.mitarbeiter_uid = '.$this->db_add_param($uid). '
|
||||
AND (zwg.von < ss.ende AND COALESCE(zwg.bis, ss.ende) >= ss.start)
|
||||
ORDER BY von DESC, bis DESC
|
||||
';
|
||||
|
||||
// Wenn Limit angegeben
|
||||
if (!is_null($limit))
|
||||
{
|
||||
// Ausgabe limitieren
|
||||
$qry.= 'LIMIT '.$this->db_add_param($limit);
|
||||
}
|
||||
|
||||
if ($result = $this->db_query($qry))
|
||||
{
|
||||
$this->result = array();
|
||||
|
||||
while ($row = $this->db_fetch_object($result))
|
||||
{
|
||||
$obj = new StdClass();
|
||||
$obj->zeitwunsch_gueltigkeit_id = $row->zeitwunsch_gueltigkeit_id;
|
||||
$obj->von = $row->von;
|
||||
$obj->bis = $row->bis;
|
||||
$obj->studiensemester_kurzbz = $row->studiensemester_kurzbz;
|
||||
$obj->start = $row->start;
|
||||
$obj->ende = $row->ende;
|
||||
$obj->insertamum = $row->insertamum;
|
||||
$obj->insertvon = $row->insertvon;
|
||||
$obj->updateamum = $row->updateamum;
|
||||
$obj->updatevon = $row->updatevon;
|
||||
|
||||
$this->result[]= $obj;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler bei der Datenbankabfrage';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user