Merge branch 'master' into feature-10267/Zeiterfassung_Zeitaufzeichnungspflichtig

This commit is contained in:
Andreas Österreicher
2021-07-28 12:10:28 +02:00
108 changed files with 5271 additions and 1719 deletions
+34 -3
View File
@@ -179,6 +179,24 @@ class bisverwendung extends basis_db
}
}
/**
* Prueft das Datum
* @param $date = string
* @return true wenn ok, sonst false
*/
static public function verifyDate($date, $strict = true)
{
$dateTime = DateTime::createFromFormat('Y-m-d', $date);
if ($strict) {
$errors = DateTime::getLastErrors();
if (!empty($errors['warning_count'])) {
return false;
}
}
return $dateTime !== false;
}
/**
* Prueft die Daten vor dem Speichern
*
@@ -191,6 +209,17 @@ class bisverwendung extends basis_db
$this->errormsg = 'Vertragsstunden sind ungueltig';
return false;
}
elseif(!$this->verifyDate($this->beginn) && !empty($this->beginn))
{
$this->errormsg = 'Start Datum ist kein Valides Datum: '.$this->beginn;
return false;
}
elseif(!$this->verifyDate($this->ende) && !empty($this->ende))
{
$this->errormsg = 'End Datum ist kein Valides Datum: '.$this->ende;
return false;
}
return true;
}
@@ -509,12 +538,13 @@ class bisverwendung extends basis_db
{
//laden des Datensatzes
$qry = "SELECT
*
*, tbl_hauptberuf.bezeichnung as hauptberuf
FROM
bis.tbl_bisverwendung
LEFT JOIN bis.tbl_hauptberuf USING(hauptberufcode)
WHERE
mitarbeiter_uid=".$this->db_add_param($uid)."
ORDER BY ende DESC NULLS LAST,beginn DESC NULLS LAST LIMIT 1;";
ORDER BY ende DESC NULLS FIRST,beginn DESC NULLS LAST LIMIT 1;";
if($this->db_query($qry))
{
@@ -528,6 +558,7 @@ class bisverwendung extends basis_db
$this->mitarbeiter_uid = $row->mitarbeiter_uid;
$this->hauptberufcode = $row->hauptberufcode;
$this->hauptberuflich = $this->db_parse_bool($row->hauptberuflich);
$this->hauptberuf = $row->hauptberuf;
$this->habilitation = $this->db_parse_bool($row->habilitation);
$this->beginn = $row->beginn;
$this->ende = $row->ende;
@@ -568,7 +599,7 @@ class bisverwendung extends basis_db
(beginn<=now() OR beginn IS NULL)
AND
(ende>=now() OR ende IS NULL)
ORDER BY ende DESC NULLS LAST,beginn DESC NULLS LAST LIMIT 1;";
ORDER BY ende DESC NULLS FIRST,beginn DESC NULLS LAST LIMIT 1;";
if($this->db_query($qry))
{
+24 -5
View File
@@ -148,17 +148,37 @@ class datum
}
/**
* Prueft ob das Datum im Format dd.mm.YYYY oder YYYY-mm-dd ist
* @return true wenn ok, false wenn falsches Format
* Prueft ob das Datum im Format dd.mm.YYYY oder YYYY-mm-dd ist UND ob es sich um ein gültiges Datum handelt
* @return true wenn ok, false wenn falsches Format und/oder nicht gültig
*/
public function checkDatum($datum)
{
if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})$",$datum) || mb_ereg("([0-9]{2}).([0-9]{2}).([0-9]{4})$",$datum))
return true;
//Format dd.mm.yyyy
if(mb_ereg("([0-9]{2}).([0-9]{2}).([0-9]{4})$", $datum))
{
$year = substr($datum, 6, 4);
$month = substr($datum, 3, 2);
$day = substr($datum, 0, 2);
}
//Format yyyy-mm-dd
elseif(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})$", $datum))
{
$year = substr($datum, 0, 4);
$month = substr($datum, 5, 2);
$day = substr($datum, 8, 2);
}
else
{
return false;
}
return checkdate($month, $day, $year);
}
/**
* Zieht ein Datum von einem anderen ab, und gibt die differenz in Tagen zurueck (mit Vorzeichen)
* @param $datum1
@@ -395,6 +415,5 @@ class datum
{
return intval(substr($timestring, 0, 2)) + intval(substr($timestring, 3, 2)) / 60;
}
}
?>
+53
View File
@@ -1121,4 +1121,57 @@ function setLeadingZero($number, $length = 2)
return str_pad($number, $length, "0", STR_PAD_LEFT);
}
}
/**
* Generates a new token for diffent use cases. Default token length is 64
* - Reading messages
* - Forgotten password
* - etc
* Returns null on failure
*/
function generateUniqueToken($length = 64)
{
$token = null;
$firstGeneratedToken = null;
// For PHP 7 you can use random_bytes()
if (function_exists('random_bytes'))
{
try
{
$firstGeneratedToken = random_bytes($length); // try to generates cryptographically secure pseudo-random bytes...
}
catch (Exception $e) { $firstGeneratedToken = null; } // if fails $firstGeneratedToken is set to null
}
// For PHP >= 5.3 and < 7 and openssl is available
elseif (function_exists('openssl_random_pseudo_bytes'))
{
$firstGeneratedToken = openssl_random_pseudo_bytes($length, $strong);
// If the token generation ended with errors OR the generated token is NOT strong enough
if ($firstGeneratedToken == false || $strong == false) $firstGeneratedToken = null; // $firstGeneratedToken is set to null
}
if ($firstGeneratedToken != null) // If everything was fine
{
// base64 is about 33% longer, so we need to truncate the result
$token = strtr(substr(base64_encode($firstGeneratedToken), 0, $length), '+/=', '-_,');
}
// Fallback to mt_rand if:
// php < 5.3
// OR no openssl is available
// OR openssl_random_pseudo_bytes used an algorithm that is cryptographically NOT strong
// OR one of the previous methods failed
if ($token == null)
{
$token = ''; // set $token as an empty string
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/+';
$charactersLength = strlen($characters) - 1;
// Select some random characters
for ($i = 0; $i < $length; $i++) $token .= $characters[mt_rand(0, $charactersLength)];
}
return $token;
}
?>
+2 -2
View File
@@ -139,7 +139,7 @@ class gemeinde extends basis_db
if($this->db_query($qry))
{
//naechste ID aus der Sequence holen
$qry="SELECT currval('tbl_gemeinde_gemeinde_id_seq') as id;";
$qry="SELECT currval('bis.tbl_gemeinde_gemeinde_id_seq') as id;";
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
@@ -219,4 +219,4 @@ class gemeinde extends basis_db
return true;
}
}
?>
?>
+619 -618
View File
File diff suppressed because it is too large Load Diff
+44 -28
View File
@@ -691,10 +691,11 @@ class organisationseinheit extends basis_db
*
* @param string $user uid
* @param integer $zeitraum Anzahl Tage in die Vergangenheit, die fuer das Auftreten der OE beruecksichtigt werden sollen
* @param integer $anzahl_ereignisse default: 3 Wie oft soll diese OE mindestens in $zeitraum vorkommen, um beruecksichtigt zu werden
* @param string $anzahl_ereignisse default: 3 Wie oft soll diese OE mindestens in $zeitraum vorkommen, um beruecksichtigt zu werden
* @param boolean $aktiv
* @param array $funktion_zuordnungen Einschränkung nach zugeordneten Funktionen (Gültigkeitszeitraum heute - 1 Monat 1 Tag nach Gültigkeitsende)
*/
public function getFrequent($user, $zeitraum=null, $anzahl_ereignisse='3', $aktiv=null)
public function getFrequent($user, $zeitraum=null, $anzahl_ereignisse='3', $aktiv=null, $funktion_zuordnungen=array())
{
if(!is_numeric($anzahl_ereignisse))
{
@@ -707,36 +708,51 @@ class organisationseinheit extends basis_db
else
$zeit = "";
$qry = "SELECT
oe_kurzbz,
oe_parent_kurzbz,
bezeichnung,
organisationseinheittyp_kurzbz,
aktiv,
lehre,
count(tbl_zeitaufzeichnung.zeitaufzeichnung_id)
FROM campus.tbl_zeitaufzeichnung
JOIN public.tbl_organisationseinheit ON(oe_kurzbz IN (oe_kurzbz_1,oe_kurzbz_2))
WHERE tbl_zeitaufzeichnung.uid=".$this->db_add_param($user)."
$zeit
GROUP BY tbl_organisationseinheit.oe_kurzbz HAVING COUNT(*) > $anzahl_ereignisse
UNION
SELECT
oe_kurzbz,
oe_parent_kurzbz,
bezeichnung,
organisationseinheittyp_kurzbz,
aktiv,
lehre,
'0'
FROM public.tbl_organisationseinheit";
$qry = "SELECT * FROM (
SELECT
oe_kurzbz,
oe_parent_kurzbz,
bezeichnung,
organisationseinheittyp_kurzbz,
aktiv,
lehre,
count(tbl_zeitaufzeichnung.zeitaufzeichnung_id)
FROM campus.tbl_zeitaufzeichnung
JOIN public.tbl_organisationseinheit ON(oe_kurzbz IN (oe_kurzbz_1,oe_kurzbz_2))
WHERE tbl_zeitaufzeichnung.uid=".$this->db_add_param($user)."
$zeit
GROUP BY tbl_organisationseinheit.oe_kurzbz HAVING COUNT(*) > $anzahl_ereignisse
UNION
SELECT
oe_kurzbz,
oe_parent_kurzbz,
bezeichnung,
organisationseinheittyp_kurzbz,
aktiv,
lehre,
'0'
FROM public.tbl_organisationseinheit";
if(!is_null($aktiv))
$qry.=" WHERE aktiv=".$this->db_add_param($aktiv, FHC_BOOLEAN);
$qry .=" ORDER BY count DESC,bezeichnung,oe_kurzbz";
$qry .=") oes";
if (isset($funktion_zuordnungen) && is_array($funktion_zuordnungen) && count($funktion_zuordnungen) > 0)
{
$qry .= " WHERE EXISTS (
SELECT 1 FROM public.tbl_benutzerfunktion
WHERE uid = ".$this->db_add_param($user)."
AND funktion_kurzbz IN (".$this->db_implode4SQL($funktion_zuordnungen).")
AND oe_kurzbz = oes.oe_kurzbz
AND (datum_von <= now() OR datum_von IS NULL)
AND (datum_bis + interval '1 month 1 day' >= now() OR datum_bis IS NULL)
)";
}
$qry .= " ORDER BY count DESC,bezeichnung,oe_kurzbz";
if($this->db_query($qry))
{
+3 -1
View File
@@ -81,7 +81,9 @@ class organisationsform extends basis_db
$this->errormsg ="Fehler bei der Abfrage aufgetreten";
return false;
}
}
return true;
}
/**
*
+239 -124
View File
@@ -28,26 +28,25 @@ require_once(dirname(__FILE__).'/basis_db.class.php');
class projekt extends basis_db
{
public $new; // boolean
public $result = array(); // projekt Objekt
public $new; // boolean
public $result = array(); // projekt Objekt
//Tabellenspalten
public $projekt_kurzbz; // string
public $nummer; // string
public $titel; // string
public $beschreibung; // string
public $beginn; // date
public $ende; // date
public $oe_kurzbz; // string
public $insertamum; // timestamp
public $insertvon; // string
public $updateamum; // timestamp
public $updatevon; // string
public $projekt_kurzbz; // string
public $nummer; // string
public $titel; // string
public $beschreibung; // string
public $beginn; // date
public $ende; // date
public $oe_kurzbz; // string
public $insertamum; // timestamp
public $insertvon; // string
public $updateamum; // timestamp
public $updatevon; // string
public $budget;
public $farbe;
public $anzahl_ma; // integer
public $aufwand_pt; // integer
public $anzahl_ma; // integer
public $aufwand_pt; // integer
/**
@@ -58,23 +57,21 @@ class projekt extends basis_db
{
parent::__construct();
if($projekt_kurzbz != null)
if ($projekt_kurzbz != null)
$this->load($projekt_kurzbz);
}
/**
* Laedt die Projek mit der Kurzbezeichnung $projekt_kurzbz
* @param string $projekt_kurzbz Kurzbz des Projekts.
* @param string $projekt_kurzbz Kurzbz des Projekts.
* @return true wenn ok, false im Fehlerfall
*/
public function load($projekt_kurzbz)
{
$qry = "SELECT * FROM fue.tbl_projekt WHERE projekt_kurzbz=".$this->db_add_param($projekt_kurzbz);
$qry = "SELECT * FROM fue.tbl_projekt WHERE projekt_kurzbz=" . $this->db_add_param($projekt_kurzbz);
if ($this->db_query($qry))
{
if ($row = $this->db_fetch_object())
{
if ($this->db_query($qry)) {
if ($row = $this->db_fetch_object()) {
$this->projekt_kurzbz = $row->projekt_kurzbz;
$this->nummer = $row->nummer;
$this->titel = $row->titel;
@@ -102,30 +99,28 @@ class projekt extends basis_db
}
}
/**
* Laedt alle aktuellen Projekte
* @param bool $filter_kommende Lädt auch alle zukünftigen.
/**
* Laedt alle aktuellen Projekte
* @param bool $filter_kommende Lädt auch alle zukünftigen.
* @param string $oe Organisationseinheit.
* @return bool
*/
public function getProjekteAktuell($filter_kommende = false, $oe = null)
{
$qry = 'SELECT * FROM fue.tbl_projekt WHERE ';
* @return bool
*/
public function getProjekteAktuell($filter_kommende = false, $oe = null)
{
$qry = 'SELECT * FROM fue.tbl_projekt WHERE ';
if($filter_kommende)
$qry .= " ((beginn < CURRENT_TIMESTAMP AND ende > CURRENT_TIMESTAMP) OR beginn > CURRENT_TIMESTAMP)";
else
$qry .= " (beginn < CURRENT_TIMESTAMP AND ende > CURRENT_TIMESTAMP)";
if ($filter_kommende)
$qry .= " ((beginn < CURRENT_TIMESTAMP AND ende > CURRENT_TIMESTAMP) OR beginn > CURRENT_TIMESTAMP)";
else
$qry .= " (beginn < CURRENT_TIMESTAMP AND ende > CURRENT_TIMESTAMP)";
if (!is_null($oe))
$qry .= ' AND oe_kurzbz='.$this->db_add_param($oe);
if (!is_null($oe))
$qry .= ' AND oe_kurzbz=' . $this->db_add_param($oe);
$qry .= ' ORDER BY oe_kurzbz;';
if ($this->db_query($qry))
{
while ($row = $this->db_fetch_object())
{
$qry .= ' ORDER BY oe_kurzbz;';
if ($this->db_query($qry)) {
while ($row = $this->db_fetch_object()) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
@@ -150,26 +145,24 @@ class projekt extends basis_db
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
/**
* Laedt alle Projekte die zwischen beginn und ende liegen
* @param date $beginn Anfang.
* @param date $ende Ende.
* @param string $oe Organisationseinheit.
* @return bool
*/
public function getProjekteInZeitraum($beginn, $ende, $oe = null)
{
$qry = 'select * from fue.tbl_projekt where beginn <= '.$this->db_add_param($ende).' and ende >= '.$this->db_add_param($beginn);
/**
* Laedt alle Projekte die zwischen beginn und ende liegen
* @param date $beginn Anfang.
* @param date $ende Ende.
* @param string $oe Organisationseinheit.
* @return bool
*/
public function getProjekteInZeitraum($beginn, $ende, $oe = null)
{
$qry = 'select * from fue.tbl_projekt where beginn <= ' . $this->db_add_param($ende) . ' and ende >= ' . $this->db_add_param($beginn);
if (!is_null($oe))
$qry .= " AND oe_kurzbz=".$this->db_add_param($oe);
$qry .= " AND oe_kurzbz=" . $this->db_add_param($oe);
$qry .= ' ORDER BY oe_kurzbz;';
//echo $qry;
if ($this->db_query($qry))
{
while ($row = $this->db_fetch_object())
{
if ($this->db_query($qry)) {
while ($row = $this->db_fetch_object()) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
@@ -193,7 +186,7 @@ class projekt extends basis_db
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
/**
@@ -205,13 +198,11 @@ class projekt extends basis_db
{
$qry = 'SELECT * FROM fue.tbl_projekt';
if (!is_null($oe))
$qry .= " WHERE oe_kurzbz=".$this->db_add_param($oe);
$qry .= " WHERE oe_kurzbz=" . $this->db_add_param($oe);
$qry .= ' ORDER BY oe_kurzbz;';
//echo $qry;
if ($this->db_query($qry))
{
while ($row = $this->db_fetch_object())
{
if ($this->db_query($qry)) {
while ($row = $this->db_fetch_object()) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
@@ -245,26 +236,21 @@ class projekt extends basis_db
protected function validate()
{
//Gesamtlaenge pruefen
if ($this->projekt_kurzbz == null)
{
if ($this->projekt_kurzbz == null) {
$this->errormsg = 'Projekt kurzbz darf nicht NULL sein!';
}
if ($this->oe_kurzbz == null)
{
if ($this->oe_kurzbz == null) {
$this->errormsg = 'OE kurbz darf nicht NULL sein!';
}
if (mb_strlen($this->projekt_kurzbz) > 16)
{
if (mb_strlen($this->projekt_kurzbz) > 16) {
$this->errormsg = 'Projektyp_kurzbz darf nicht länger als 16 Zeichen sein';
return false;
}
if (mb_strlen($this->nummer) > 8)
{
if (mb_strlen($this->nummer) > 8) {
$this->errormsg = 'Nummer darf nicht länger als 8 Zeichen sein';
return false;
}
if (mb_strlen($this->titel) > 256)
{
if (mb_strlen($this->titel) > 256) {
$this->errormsg = 'Titel darf nicht länger als 256 Zeichen sein';
return false;
}
@@ -283,52 +269,50 @@ class projekt extends basis_db
public function save($new = null)
{
//Variablen pruefen
if(!$this->validate())
if (!$this->validate())
return false;
if ($new == null)
$new = $this->new;
if ($new)
{
if ($new) {
//Neuen Datensatz einfuegen
$qry = 'INSERT INTO fue.tbl_projekt (projekt_kurzbz, nummer, titel,beschreibung, beginn, ende, budget, farbe, oe_kurzbz, aufwand_pt, anzahl_ma, aufwandstyp_kurzbz) VALUES('.
$this->db_add_param($this->projekt_kurzbz).', '.
$this->db_add_param($this->nummer).', '.
$this->db_add_param($this->titel).', '.
$this->db_add_param($this->beschreibung).', '.
$this->db_add_param($this->beginn).', '.
$this->db_add_param($this->ende).', '.
$this->db_add_param($this->budget).', '.
$this->db_add_param($this->farbe).', '.
$this->db_add_param($this->oe_kurzbz).','.
$this->db_add_param($this->aufwand_pt).','.
$this->db_add_param($this->anzahl_ma).','.
$this->db_add_param($this->aufwandstyp_kurzbz).');';
$qry = 'INSERT INTO fue.tbl_projekt (projekt_kurzbz, nummer, titel,beschreibung, beginn, ende, budget, farbe, oe_kurzbz, aufwand_pt, anzahl_ma, aufwandstyp_kurzbz) VALUES(' .
$this->db_add_param($this->projekt_kurzbz) . ', ' .
$this->db_add_param($this->nummer) . ', ' .
$this->db_add_param($this->titel) . ', ' .
$this->db_add_param($this->beschreibung) . ', ' .
$this->db_add_param($this->beginn) . ', ' .
$this->db_add_param($this->ende) . ', ' .
$this->db_add_param($this->budget) . ', ' .
$this->db_add_param($this->farbe) . ', ' .
$this->db_add_param($this->oe_kurzbz) . ',' .
$this->db_add_param($this->aufwand_pt) . ',' .
$this->db_add_param($this->anzahl_ma) . ',' .
$this->db_add_param($this->aufwandstyp_kurzbz) . ');';
}
else
{
//Updaten des bestehenden Datensatzes
$qry = 'UPDATE fue.tbl_projekt SET '.
'projekt_kurzbz='.$this->db_add_param($this->projekt_kurzbz).', '.
'nummer='.$this->db_add_param($this->nummer).', '.
'titel='.$this->db_add_param($this->titel).', '.
'beschreibung='.$this->db_add_param($this->beschreibung).', '.
'beginn='.$this->db_add_param($this->beginn).', '.
'ende='.$this->db_add_param($this->ende).', '.
'budget='.$this->db_add_param($this->budget).', '.
'farbe='.$this->db_add_param($this->farbe).', '.
'oe_kurzbz='.$this->db_add_param($this->oe_kurzbz).', '.
'anzahl_ma='.$this->db_add_param($this->anzahl_ma).', '.
'aufwand_pt='.$this->db_add_param($this->aufwand_pt).', '.
'aufwandstyp_kurzbz='.$this->db_add_param($this->aufwandstyp_kurzbz).' '.
'WHERE projekt_kurzbz='.$this->db_add_param($this->projekt_kurzbz).';';
$qry = 'UPDATE fue.tbl_projekt SET ' .
'projekt_kurzbz=' . $this->db_add_param($this->projekt_kurzbz) . ', ' .
'nummer=' . $this->db_add_param($this->nummer) . ', ' .
'titel=' . $this->db_add_param($this->titel) . ', ' .
'beschreibung=' . $this->db_add_param($this->beschreibung) . ', ' .
'beginn=' . $this->db_add_param($this->beginn) . ', ' .
'ende=' . $this->db_add_param($this->ende) . ', ' .
'budget=' . $this->db_add_param($this->budget) . ', ' .
'farbe=' . $this->db_add_param($this->farbe) . ', ' .
'oe_kurzbz=' . $this->db_add_param($this->oe_kurzbz) . ', ' .
'anzahl_ma=' . $this->db_add_param($this->anzahl_ma) . ', ' .
'aufwand_pt=' . $this->db_add_param($this->aufwand_pt) . ', ' .
'aufwandstyp_kurzbz=' . $this->db_add_param($this->aufwandstyp_kurzbz) . ' ' .
'WHERE projekt_kurzbz=' . $this->db_add_param($this->projekt_kurzbz) . ';';
}
if ($this->db_query($qry))
{
if ($this->db_query($qry)) {
return true;
}
else
@@ -345,10 +329,9 @@ class projekt extends basis_db
*/
public function delete($projekt_kurzbz)
{
$qry = "DELETE FROM lehre.tbl_projek WHERE projekt_kurzbz=".$this->db_add_param($projekt_kurzbz);
$qry = "DELETE FROM lehre.tbl_projek WHERE projekt_kurzbz=" . $this->db_add_param($projekt_kurzbz);
if ($this->db_query($qry))
{
if ($this->db_query($qry)) {
return true;
}
else
@@ -367,7 +350,7 @@ class projekt extends basis_db
*/
function getProjekteMitarbeiter($mitarbeiter_uid, $projektphasen = false)
{
$qry = "SELECT DISTINCT
$qry = "SELECT DISTINCT
tbl_projekt.*
FROM
fue.tbl_ressource
@@ -377,12 +360,12 @@ class projekt extends basis_db
AND (ende + interval '1 month 1 day' >=now() OR ende is null)
AND
(
mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." OR
student_uid=".$this->db_add_param($mitarbeiter_uid)."
mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid) . " OR
student_uid=" . $this->db_add_param($mitarbeiter_uid) . "
)";
if ($projektphasen == true)
$qry .= "UNION
if ($projektphasen == true)
$qry .= "UNION
SELECT DISTINCT
tbl_projekt.*
@@ -401,12 +384,10 @@ class projekt extends basis_db
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null)
)
)
AND mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid);
AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid);
if ($result = $this->db_query($qry))
{
while ($row = $this->db_fetch_object($result))
{
if ($result = $this->db_query($qry)) {
while ($row = $this->db_fetch_object($result)) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
@@ -427,16 +408,86 @@ class projekt extends basis_db
return false;
}
}
/**
* Liefert Ein Array mit Porjekten von allen Projekten des Mitarbeiters mit UID.
* Optional auch mit den Zuteilungen zu Projektphasen.
* @param string $mitarbeiter_uid MitarbeiterUID.
* @param bool $projektphasen Default false. Wenn true, werden auch Zuteilungen zu Projektphasen geliefert.
* @return array wenn ok, false im Fehlerfall
*/
function getProjekteListForMitarbeiter($mitarbeiter_uid, $projektphasen = false)
{
$projectList = array();
$qry = "SELECT DISTINCT
tbl_projekt.*
FROM
fue.tbl_ressource
JOIN fue.tbl_projekt_ressource USING(ressource_id)
JOIN fue.tbl_projekt USING(projekt_kurzbz)
WHERE (beginn<=now() or beginn is null)
AND (ende + interval '1 month 1 day' >=now() OR ende is null)
AND
(
mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid) . " OR
student_uid=" . $this->db_add_param($mitarbeiter_uid) . "
)";
if ($projektphasen == true)
$qry .= "UNION
SELECT DISTINCT
tbl_projekt.*
FROM
fue.tbl_projektphase
JOIN fue.tbl_projekt USING (projekt_kurzbz)
JOIN fue.tbl_projekt_ressource USING (projektphase_id)
JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id)
WHERE
(
(
(tbl_projekt.beginn<=now() or tbl_projekt.beginn is null)
AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null)
) OR (
(tbl_projektphase.start<=now() or tbl_projektphase.start is null)
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null)
)
)
AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid);
if ($result = $this->db_query($qry)) {
while ($row = $this->db_fetch_object($result)) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->nummer = $row->nummer;
$obj->titel = $row->titel;
$obj->beschreibung = $row->beschreibung;
$obj->beginn = $row->beginn;
$obj->ende = $row->ende;
$obj->oe_kurzbz = $row->oe_kurzbz;
$this->result[] = $obj;
array_push($projectList, $obj);
}
return $projectList;
}
else
{
$this->erromsg = 'Fehler beim Laden der Daten';
return false;
}
}
public function getProjektFromBestellung($bestellung_id)
{
$qry = "select * from fue.tbl_projekt
join wawi.tbl_projekt_bestellung USING (projekt_kurzbz)
where bestellung_id= ".$this->db_add_param($bestellung_id);
where bestellung_id= " . $this->db_add_param($bestellung_id);
if ($this->db_query($qry))
{
if ($row = $this->db_fetch_object())
{
if ($this->db_query($qry)) {
if ($row = $this->db_fetch_object()) {
$this->projekt_kurzbz = $row->projekt_kurzbz;
$this->nummer = $row->nummer;
$this->titel = $row->titel;
@@ -463,5 +514,69 @@ class projekt extends basis_db
return false;
}
}
/**
* Liefert True zurück wenn die angegebenen Start und Endzeitpunkt der Arbeitsdauer in die Projektdauer fallen
* @param string $mitarbeiter_uid MitarbeiterUID.
* @param bool $projektphasen Default false. Wenn true, werden auch Zuteilungen zu Projektphasen geliefert.
* @return array wenn ok, false im Fehlerfall
*/
public function checkProjectInCorrectTime($projekt_kurzbz, $give_project_start, $give_projekt_ende)
{
if(empty($projekt_kurzbz))
return true;
try
{
$projekt = $this->getProjectByKurzbz($projekt_kurzbz);
if(strtotime($projekt->beginn))
$projekt_start = date('Y-m-d', strtotime($projekt->beginn));
else
$projekt_start = NULL;
if(strtotime($projekt->ende))
$projekt_ende = date('Y-m-d', strtotime($projekt->ende));
else
$projekt_ende = NULL;
$given_start = date('Y-m-d', strtotime($give_project_start));
$given_ende = date('Y-m-d', strtotime($give_projekt_ende));
if ((empty($projekt_start) || $given_start >= $projekt_start) && (empty($projekt_ende) || $given_ende <= $projekt_ende))
return true;
else
return false;
}
catch (Exception $e)
{
error_log('Exception abgefangen: ', $e->getMessage(), "\n");
}
}
public function getProjectByKurzbz($projekt_kurzbz)
{
$qry = "SELECT * FROM fue.tbl_projekt
WHERE projekt_kurzbz=".$this->db_add_param($projekt_kurzbz);
if ($result = $this->db_query($qry))
{
$row = $this->db_fetch_object($result);
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->nummer = $row->nummer;
$obj->titel = $row->titel;
$obj->beschreibung = $row->beschreibung;
$obj->beginn = $row->beginn;
$obj->ende = $row->ende;
$obj->oe_kurzbz = $row->oe_kurzbz;
return $obj;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
?>
+126 -3
View File
@@ -335,7 +335,7 @@ class projektbetreuer extends basis_db
}
/**
* Retrieves all projektarbeiten by person (only with stundensatz > 0)
* Retrieves all projektarbeiten by person
* @param $person_id
* @return boolean If succeeded true and result-array with objects of each projektarbeit of the person.
*/
@@ -349,8 +349,6 @@ class projektbetreuer extends basis_db
FROM
lehre.tbl_projektbetreuer
WHERE
(stundensatz IS NOT NULL) AND (stundensatz > 0)
AND
person_id =' . $this->db_add_param($person_id, FHC_INTEGER);
if ($this->db_query($qry))
@@ -391,5 +389,130 @@ class projektbetreuer extends basis_db
return false;
}
}
/**
* Holt Zweitbegutachter einer Projektarbeit mit Mail.
* @param $erstbegutachter_person_id int person_id des Erstbegutachters
* @param $projektarbeit_id int
* @param $student_uid string uid des Studenten der Arbeit abgibt
* @return object | bool
*/
public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid)
{
$qry_betr="SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, kontakt,
trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name,
CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum
FROM lehre.tbl_projektbetreuer betr
JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id
JOIN public.tbl_person pers ON betr.person_id = pers.person_id
LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true
LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id
LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end'
WHERE betr.betreuerart_kurzbz = 'Zweitbegutachter'
AND betr.projektarbeit_id = ".$this->db_add_param($projektarbeit_id, FHC_INTEGER)."
AND parb.student_uid = ".$this->db_add_param($student_uid)."
AND EXISTS (
SELECT 1 FROM lehre.tbl_projektbetreuer
WHERE person_id = ".$this->db_add_param($erstbegutachter_person_id, FHC_INTEGER)."
AND betreuerart_kurzbz = 'Erstbegutachter'
AND projektarbeit_id = betr.projektarbeit_id
)
AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL)
ORDER BY betr.insertamum DESC
LIMIT 1";
if ($betr=$this->db_query($qry_betr))
{
$row_betr = $this->db_fetch_object($betr);
if ($row_betr)
return $row_betr;
else
return false;
}
else
{
return false;
}
}
/**
* Generiert Token für externen Zweitbetreuer wenn noch kein Token vorhanden ist.
* @param int $zweitbegutachter_person_id
* @param int $projektarbeit_id
* @return bool true wenn erfolgreich (generiert oder bereits vorhanden), false wenn fehlgeschlagen
*/
public function generateZweitbegutachterToken($zweitbegutachter_person_id, $projektarbeit_id)
{
// if externer Betreuer and no valid token, generate
$betreuerUidQry = "SELECT uid, zugangstoken, zugangstoken_gueltigbis, tbl_projektbetreuer.person_id
FROM lehre.tbl_projektbetreuer
JOIN public.tbl_person USING(person_id)
LEFT JOIN public.tbl_benutzer USING(person_id)
WHERE projektarbeit_id = ".$this->db_add_param($projektarbeit_id, FHC_INTEGER)."
AND tbl_projektbetreuer.person_id = ".$this->db_add_param($zweitbegutachter_person_id, FHC_INTEGER)."
AND betreuerart_kurzbz = 'Zweitbegutachter'
LIMIT 1";
if ($betreueruidres = $this->db_query($betreuerUidQry))
{
$row_betr = $this->db_fetch_object($betreueruidres);
if ($row_betr)
{
if (!isset($row_betr->uid)
&& (!isset($row_betr->zugangstoken) || $row_betr->zugangstoken_gueltigbis < date('Y-m-d')))
{
$tokenanzahl = 1;
while ($tokenanzahl > 0)
{
//generate random string
$token = generateUniqueToken(16);
if (!$token)
return false;
$qry_tokencheck = "SELECT count(*) AS anzahl
FROM lehre.tbl_projektbetreuer
WHERE zugangstoken = " . $this->db_add_param($token);
if ($tokencount = $this->db_query($qry_tokencheck))
{
$row_tokencount = $this->db_fetch_object($tokencount);
$tokenanzahl = (int)$row_tokencount->anzahl;
}
else
{
return false;
}
}
$qry_upd = "UPDATE lehre.tbl_projektbetreuer SET
zugangstoken = " . $this->db_add_param($token) . ",
zugangstoken_gueltigbis = CURRENT_DATE + interval '1 year'
WHERE projektarbeit_id = " . $this->db_add_param($projektarbeit_id, FHC_INTEGER) . "
AND person_id = " . $this->db_add_param($row_betr->person_id, FHC_INTEGER) . "
AND betreuerart_kurzbz = 'Zweitbegutachter'";
if ($this->db_query($qry_upd))
{
return true;
}
else
{
return false;
}
}
else
return true; // not generated because intern or already exists
}
else
return false;// not found
}
else
return false; // query error
}
}
?>
+334 -101
View File
@@ -37,10 +37,10 @@ class projektphase extends basis_db
public $bezeichnung; //string
public $typ='Projektphase'; //string
public $beschreibung; //string
public $start; //date
public $ende; //date
public $start; //date
public $ende; //date
public $personentage; //integer
public $farbe;
public $farbe;
public $budget; // numeric
public $ressource_id; // bigint
public $ressource_bezeichnung; // string
@@ -58,7 +58,7 @@ class projektphase extends basis_db
{
parent::__construct();
if($projektphase_id != null)
if($projektphase_id != null)
$this->load($projektphase_id);
}
@@ -74,11 +74,11 @@ class projektphase extends basis_db
$this->errormsg = 'Projektarbeit_id muss eine gueltige Zahl sein';
return false;
}
$qry = "SELECT tbl_projektphase.*, tbl_ressource.bezeichnung AS ressource_bezeichnung
$qry = "SELECT tbl_projektphase.*, tbl_ressource.bezeichnung AS ressource_bezeichnung
FROM fue.tbl_projektphase LEFT OUTER JOIN fue.tbl_ressource USING (ressource_id)
WHERE projektphase_id=".$this->db_add_param($projektphase_id, FHC_INTEGER);
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
@@ -102,20 +102,20 @@ class projektphase extends basis_db
$this->updatevon = $row->updatevon;
return true;
}
else
else
{
$this->errormsg = 'Datensatz wurde nicht gefunden';
return false;
}
}
else
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Laedt die Projektphasen mit zu einem Projekt
* @param $projekt_kurzbz Projekt der zu ladenden Projektphasen
@@ -125,23 +125,23 @@ class projektphase extends basis_db
{
$this->result=array();
$qry = "Select * from fue.tbl_projektphase where projekt_kurzbz = ".$this->db_add_param($projekt_kurzbz)." and projektphase_id not in (
WITH RECURSIVE tasks(projektphase_fk) as
WITH RECURSIVE tasks(projektphase_fk) as
(
SELECT projektphase_id FROM fue.tbl_projektphase
WHERE projektphase_fk=".$this->db_add_param($projektphase_id, FHC_INTEGER)."
UNION ALL
SELECT p.projektphase_id FROM fue.tbl_projektphase p, tasks
SELECT p.projektphase_id FROM fue.tbl_projektphase p, tasks
WHERE p.projektphase_fk=tasks.projektphase_fk
) SELECT *
FROM tasks) and projektphase_id not in (".$this->db_add_param($projektphase_id, FHC_INTEGER).")";
//echo "\n".$qry."\n";
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
@@ -158,25 +158,25 @@ class projektphase extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
//var_dump($this->result);
return true;
}
else
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Laedt die Projektphasen zu einem Projekt
* @param $projekt_kurzbz Projekt der zu ladenden Projektphasen
* @param $foreignkey wenn ! gib nur die Erste Ebene der Projektphasen zurück
* @return true wenn ok, false im Fehlerfall
*/
*/
public function getProjektphasen($projekt_kurzbz, $foreignkey = null)
{
$this->result=array();
@@ -184,18 +184,18 @@ class projektphase extends basis_db
FROM fue.tbl_projektphase LEFT OUTER JOIN fue.tbl_ressource USING (ressource_id)
WHERE projekt_kurzbz=".$this->db_add_param($projekt_kurzbz);
//echo "\n".$qry."\n";
if(!is_null($foreignkey))
$qry .= " and projektphase_fk is NULL";
$qry .= " ORDER BY start, projektphase_fk DESC;";
$qry .= " ORDER BY start, projektphase_fk DESC;";
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
@@ -213,36 +213,36 @@ class projektphase extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
//var_dump($this->result);
return true;
}
else
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Lädt alle Unterphasen zu einem Projekt
* @param type $phase_id
* @return boolean
* @return boolean
*/
public function getAllUnterphasen($phase_id)
{
$qry = "SELECT tbl_projektphase.*, tbl_ressource.bezeichnung AS ressource_bezeichung
FROM fue.tbl_projektphase LEFT OUTER JOIN fue.tbl_ressource USING (ressource_id)
WHERE projektphase_fk =".$this->db_add_param($phase_id, FHC_INTEGER);
WHERE projektphase_fk =".$this->db_add_param($phase_id, FHC_INTEGER);
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new projektphase();
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
@@ -260,15 +260,15 @@ class projektphase extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
return true;
return true;
}
else
{
$this->errormsg = "Fehler beim laden der Daten";
return false;
$this->errormsg = "Fehler beim laden der Daten";
return false;
}
}
@@ -296,11 +296,11 @@ class projektphase extends basis_db
$this->errormsg.='Projekt Kurzbz darf nicht länger als 16 Zeichen sein';
return false;
}
$this->errormsg = '';
return true;
}
/**
* Speichert den aktuellen Datensatz in die Datenbank
* Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt
@@ -315,12 +315,12 @@ class projektphase extends basis_db
if($new==null)
$new = $this->new;
if($new)
{
//Neuen Datensatz einfuegen
$qry='BEGIN; INSERT INTO fue.tbl_projektphase (projekt_kurzbz, projektphase_fk, bezeichnung, typ,
$qry='BEGIN; INSERT INTO fue.tbl_projektphase (projekt_kurzbz, projektphase_fk, bezeichnung, typ,
beschreibung, start, ende, budget, ressource_id, insertvon, insertamum, updatevon, updateamum, farbe, personentage) VALUES ('.
$this->db_add_param($this->projekt_kurzbz).', '.
$this->db_add_param($this->projektphase_fk).', '.
@@ -356,7 +356,7 @@ class projektphase extends basis_db
'updatevon='.$this->db_add_param($this->updatevon).' '.
'WHERE projektphase_id='.$this->db_add_param($this->projektphase_id, FHC_INTEGER).';';
}
if($this->db_query($qry))
{
if($new)
@@ -371,21 +371,21 @@ class projektphase extends basis_db
$this->db_query('COMMIT');
return true;
}
else
else
{
$this->errormsg = 'Fehler beim Auslesen der Sequence';
$this->db_query('ROLLBACK;');
return false;
}
}
else
else
{
$this->errormsg = 'Fehler beim Auslesen der Sequence';
$this->db_query('ROLLBACK;');
return false;
}
}
return true;
}
else
@@ -394,7 +394,7 @@ class projektphase extends basis_db
return false;
}
}
/**
* Loescht den Datenensatz mit der ID die uebergeben wird
* @param $projekt_kurzbz ID die geloescht werden soll
@@ -407,77 +407,81 @@ class projektphase extends basis_db
$this->errormsg = 'Projektphase_ID ist ungueltig';
return true;
}
// an projektphase hängt noch eine phase
if($this->existPhaseFk($projektphase_id))
{
$this->errormsg ="Phase kann nicht gelöscht werden, da noch eine andere Phase daran hängt. Bitte zuerst Phase abhängen. ";
return false;
return false;
}
// Beginne Transaktion und lösche alle Tasks der Phase
$qry1 ="Begin; DELETE FROM fue.tbl_projekttask
$qry1 ="Begin; DELETE FROM fue.tbl_projekttask
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
if($this->db_query($qry1))
{
// Lösche alle zugewiesenen Ressourcen
$qry2 = "DELETE FROM fue.tbl_projekt_ressource
$qry2 = "DELETE FROM fue.tbl_projekt_ressource
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
if($this->db_query($qry2))
{
// Lösche den Phaseneintrag
$qry3 = "DELETE FROM fue.tbl_projektphase
$qry3 = "DELETE FROM fue.tbl_projektphase
WHERE projektphase_id = ".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
if($this->db_query($qry3))
{
$this->db_query('COMMIT');
return true;
}else
return true;
}
else
{
$this->errormsg ="Fehler beim löschen der Projektphase aufgetreten";
$this->db_query('ROLLBACK');
return false;
return false;
}
}else
}
else
{
$this->errormsg ="Fehler beim löschen der Ressourcen aufgetreten";
$this->db_query('ROLLBACK');
return false;
return false;
}
}else
}
else
{
$this->errormsg ="Fehler beim löschen der Tasks aufgetreten";
$this->db_query('ROLLBACK');
return false;
$this->db_query('ROLLBACK');
return false;
}
}
/**
*
*
* Überprüft ob an übergebenr Phase noch eine andere Phase hängt. true wenn noch eine daran hängt
* @param $projektphase_id
*/
public function existPhaseFk($projektphase_id)
{
$qry = "SELECT * FROM fue.tbl_projektphase WHERE projektphase_fk =".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
return true;
}else
return true;
}
else
{
$this->errormsg ="Fehler bei der Abfrage aufgetreten";
return false;
return false;
}
}
/**
*
*
* Löscht Ressourcen einer Phase
* @param $projektphase_id
* @param $ressource_id -> wenn != null wird nur die eine ressource gelöscht
@@ -492,58 +496,60 @@ class projektphase extends basis_db
$this->errormsg = "Keine gültige ID übergeben";
return false;
}
$qry ="DELETE from fue.tbl_projekt_ressource
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER)." and
$qry ="DELETE from fue.tbl_projekt_ressource
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER)." and
ressource_id=".$this->db_add_param($ressource_id, FHC_INTEGER).";";
}else
}
else
{
// gesamte Ressourcen von Phase werden gelöscht
if(!is_numeric($projektphase_id))
{
$this->errormsg ="Keine gültige ID übergeben";
}
$qry ="DELETE from fue.tbl_projekt_ressource
$qry ="DELETE from fue.tbl_projekt_ressource
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
}
if($this->db_query($qry))
{
return true;
}else
return true;
}
else
{
$this->errormsg = "Fehler bei der Abfrage aufgetreten";
return false;
return false;
}
}
/**
*
*
* gibt den Fortschritt der Phase in Prozent zurück --> Phasen die auf die übergebene Phase zeigen werden berücksichtigt
* @param $projektphase_id
*/
public function getFortschritt($projektphase_id)
public function getFortschritt($projektphase_id)
{
$qry = "Select * from fue.tbl_projektphase phase
join fue.tbl_projekttask task using(projektphase_id)
$qry = "Select * from fue.tbl_projektphase phase
join fue.tbl_projekttask task using(projektphase_id)
where task.projektphase_id = ".$this->db_add_param($projektphase_id, FHC_INTEGER)."
OR task.projektphase_id IN (
WITH RECURSIVE tasks(projektphase_fk) as
WITH RECURSIVE tasks(projektphase_fk) as
(
SELECT projektphase_id FROM fue.tbl_projektphase
WHERE projektphase_fk=".$this->db_add_param($projektphase_id, FHC_INTEGER)."
UNION ALL
SELECT p.projektphase_id FROM fue.tbl_projektphase p, tasks
SELECT p.projektphase_id FROM fue.tbl_projektphase p, tasks
WHERE p.projektphase_fk=tasks.projektphase_fk
)SELECT *
FROM tasks)";
$taskAnzahl = 0;
$taskAnzahl = 0;
// erledige tasks
$i = 0;
$ergebnis = 0;
$i = 0;
$ergebnis = 0;
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
@@ -553,25 +559,252 @@ class projektphase extends basis_db
$i++;
}
}
$taskAnzahl = ($taskAnzahl == 0)? 1 : $taskAnzahl;
$ergebnis = ($i*100)/$taskAnzahl;
return sprintf("%01.2f", $ergebnis);
$taskAnzahl = ($taskAnzahl == 0)? 1 : $taskAnzahl;
$ergebnis = ($i*100)/$taskAnzahl;
return sprintf("%01.2f", $ergebnis);
}
/**
* Überprüft ob alle Tasks einer Phase erledigt sind
*/
public function isPhaseErledigt($phase_id)
{
$task = new projekttask();
$task->getProjekttasks($phase_id,null,'offen');
$task = new projekttask();
$task->getProjekttasks($phase_id,null,'offen');
if(count($task->result)==0)
return true;
return true;
else
return false;
return false;
}
public function checkProjectphaseInCorrectTime($projektphase_id, $given_projectphase_start, $given_projektphase_ende)
{
if(empty($projektphase_id))
return true;
try
{
$projektphase = $this->getProjectphaseById($projektphase_id);
if(strtotime($projektphase->start))
{
$projektphase_start = date('Y-m-d', strtotime($projektphase->start));
}
else
{
$projektphase_start = NULL;
}
if(strtotime($projektphase->ende))
{
$projektphase_ende = date('Y-m-d', strtotime($projektphase->ende));
}
else
{
$projektphase_ende = NULL;
}
$given_start = date('Y-m-d', strtotime($given_projectphase_start));
$given_ende = date('Y-m-d', strtotime($given_projektphase_ende));
if ((empty($projektphase_start) || $given_start >= $projektphase_start)
&& (empty($projektphase_ende) || $given_ende <= $projektphase_ende))
{
return true;
}
else
{
return false;
}
}
catch (Exception $e)
{
error_log('Exception abgefangen: ', $e->getMessage(), "\n");
}
}
/**
* Laedt die Projektphase mit der ID $projektphase_id
* @param $projektphase_id ID der zu ladenden Projektphase
* @return true wenn ok, false im Fehlerfall
*/
public function getProjectphaseById($projektphase_id)
{
if(!is_numeric($projektphase_id))
{
$this->errormsg = 'Projektarbeit_id muss eine gueltige Zahl sein';
return false;
}
$qry = "SELECT tbl_projektphase.*, tbl_ressource.bezeichnung AS ressource_bezeichnung
FROM fue.tbl_projektphase LEFT OUTER JOIN fue.tbl_ressource USING (ressource_id)
WHERE projektphase_id=".$this->db_add_param($projektphase_id, FHC_INTEGER);
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
$obj->bezeichnung = $row->bezeichnung;
$obj->typ = $row->typ;
$obj->beschreibung = $row->beschreibung;
$obj->start = $row->start;
$obj->ende = $row->ende;
$obj->personentage = $row->personentage;
$obj->farbe = $row->farbe;
$obj->budget = $row->budget;
$obj->ressource_id = $row->ressource_id;
$obj->ressource_bezeichnung = $row->ressource_bezeichnung;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
return $obj;
}
else
{
$this->errormsg = 'Datensatz wurde nicht gefunden';
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Laedt die Projektphase mit der ID des mitarbeiters
* @param $mitarbeiter_uid der zu ladenden Projektphase des users
* @return array wenn ok, false im Fehlerfall
*/
public function getProjectphaseForMitarbeiter($mitarbeiter_uid)
{
$projecphasetList = array();
$qry = "
SELECT
DISTINCT tbl_projektphase.*
FROM
fue.tbl_projektphase
JOIN fue.tbl_projekt USING (projekt_kurzbz)
JOIN fue.tbl_projekt_ressource USING (projektphase_id)
JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id)
WHERE
(
(
(tbl_projekt.beginn<=now() or tbl_projekt.beginn is null)
AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null)
) AND (
(tbl_projektphase.start<=now() or tbl_projektphase.start is null)
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null)
)
)
AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid);
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object($result))
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
$obj->bezeichnung = $row->bezeichnung;
$obj->typ = $row->typ;
$obj->beschreibung = $row->beschreibung;
$obj->start = $row->start;
$obj->ende = $row->ende;
$obj->personentage = $row->personentage;
$obj->farbe = $row->farbe;
$obj->budget = $row->budget;
$obj->ressource_id = $row->ressource_id;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
array_push($projecphasetList, $obj);
}
return $projecphasetList;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Laedt die Projektphase mit der ID des mitarbeiters für das jeweilige Projekt
* @param $mitarbeiter_uid der zu ladenden Projektphase des users
* @param $projekt_kurzbz des zu landenen Projekts
* @return array wenn ok, false im Fehlerfall
*/
public function getProjectphaseForMitarbeiterByKurzBz($mitarbeiter_uid, $projekt_kurzbz)
{
$projecphasetList = array();
$qry = "
SELECT
DISTINCT tbl_projektphase.*
FROM
fue.tbl_projektphase
JOIN fue.tbl_projekt USING (projekt_kurzbz)
JOIN fue.tbl_projekt_ressource USING (projektphase_id)
JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id)
WHERE
(
(
(tbl_projekt.beginn<=now() or tbl_projekt.beginn is null)
AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null)
) AND (
(tbl_projektphase.start<=now() or tbl_projektphase.start is null)
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null)
)
)
AND mitarbeiter_uid = ".$this->db_add_param($mitarbeiter_uid)."
AND tbl_projekt.projekt_kurzbz = ".$this->db_add_param($projekt_kurzbz);
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object($result))
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
$obj->bezeichnung = $row->bezeichnung;
$obj->typ = $row->typ;
$obj->beschreibung = $row->beschreibung;
$obj->start = $row->start;
$obj->ende = $row->ende;
$obj->personentage = $row->personentage;
$obj->farbe = $row->farbe;
$obj->budget = $row->budget;
$obj->ressource_id = $row->ressource_id;
$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 beim Laden der Daten';
return false;
}
}
}
?>
+83 -11
View File
@@ -86,7 +86,7 @@ class ressource extends basis_db
$this->insertamum = $row->insertamum;
$this->insertvon = $row->insertvon;
$this->updateamum = $row->updateamum;
$this->updatevon = $row->updatevon;
$this->updatevon = $row->updatevon;
$this->funktion_kurzbz = $row->funktion_kurzbz;
return true;
}
@@ -130,7 +130,7 @@ class ressource extends basis_db
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
//var_dump($this->result);
@@ -174,7 +174,7 @@ class ressource extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$obj->aufwand = $row->aufwand;
$obj->aufwand = $row->aufwand;
$obj->funktion_kurzbz = $row->funktion_kurzbz;
$obj->projekt_ressource_id= $row->projekt_ressource_id;
@@ -189,8 +189,8 @@ class ressource extends basis_db
return false;
}
}
/**
*
* Lädt die Projektressource
@@ -203,15 +203,15 @@ class ressource extends basis_db
$this->result=array();
if($this->db_query($qry))
{
{
if($row = $this->db_fetch_object())
{
$this->ressource_id = $row->ressource_id;
$this->beschreibung = $row->beschreibung;
$this->aufwand = $row->aufwand;
$this->aufwand = $row->aufwand;
$this->funktion_kurzbz = $row->funktion_kurzbz;
$this->projekt_ressource_id= $row->projekt_ressource_id;
$this->projekt_kurzbz = $row->projekt_kurzbz;
$this->projekt_ressource_id= $row->projekt_ressource_id;
$this->projekt_kurzbz = $row->projekt_kurzbz;
$this->projektphase_id = $row->projektphase_id;
return true;
}
@@ -223,7 +223,7 @@ class ressource extends basis_db
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
/**
*
@@ -256,7 +256,7 @@ class ressource extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$obj->aufwand = $row->aufwand;
$obj->aufwand = $row->aufwand;
$obj->funktion_kurzbz = $row->funktion_kurzbz;
$obj->projekt_ressource_id = $row->projekt_ressource_id;
$this->result[] = $obj;
@@ -688,5 +688,77 @@ class ressource extends basis_db
return false;
}
}
/**
* Löscht eine Ressource zu Projekt Zuordnung
* @param type $ressource_id
* @param type $projekt_kurzbz
* @return boolean
*/
public function deleteFromProjektWithProjektRessourceId($ressource_id, $projekt_kurzbz, $project_ressource_id)
{
if($ressource_id == '' || !is_numeric($ressource_id))
{
$this->errormsg = 'Ressource Id ist keine gültige Zahl';
return false;
}
/*$qry="DELETE FROM fue.tbl_projekt_ressource WHERE ressource_id =".$this->db_add_param($ressource_id, FHC_INTEGER, false)."
AND projekt_kurzbz=".$this->db_add_param($projekt_kurzbz, FHC_STRING, false).';';
*/
$qry="
DELETE FROM fue.tbl_projekt_ressource pr
USING fue.tbl_ressource r
WHERE r.ressource_id =".$this->db_add_param($ressource_id, FHC_INTEGER, false). "
AND pr.projekt_ressource_id=".$this->db_add_param($project_ressource_id, FHC_INTEGER, false). "
AND pr.projekt_kurzbz=".$this->db_add_param($projekt_kurzbz, FHC_STRING, false).';';
if($this->db_query($qry))
{
return true;
}
else
{
$this->errormsg = 'Fehler beim Löschen der Daten';
return false;
}
}
/**
* Löscht eine Ressource zu Phase Zuordnung
* @param type $ressource_id
* @param type $projekt_kurzbz
* @return boolean
*/
public function deleteFromPhaseWithProjektRessourceId($ressource_id, $projektphase_id, $project_ressource_id)
{
if($ressource_id == '' || !is_numeric($ressource_id))
{
$this->errormsg = 'Ressource Id ist keine gültige Zahl';
return false;
}
if($projektphase_id == '' || !is_numeric($projektphase_id))
{
$this->errormsg = 'Ressource Id ist keine gültige Zahl';
return false;
}
/*$qry="DELETE FROM fue.tbl_projekt_ressource WHERE ressource_id =".$this->db_add_param($ressource_id, FHC_INTEGER, false)."
AND projektphase_id=".$this->db_add_param($projektphase_id, FHC_INTEGER, false).';';
*/
$qry="
DELETE FROM fue.tbl_projekt_ressource pr
USING fue.tbl_ressource r
WHERE r.ressource_id =".$this->db_add_param($ressource_id, FHC_INTEGER, false). "
AND pr.projekt_ressource_id=".$this->db_add_param($project_ressource_id, FHC_INTEGER, false). "
AND pr.projektphase_id=".$this->db_add_param($projektphase_id, FHC_INTEGER, false).';';
if($this->db_query($qry))
return true;
else
{
$this->errormsg = 'Fehler beim Löschen der Daten';
return false;
}
}
}
?>
+16 -4
View File
@@ -23,6 +23,7 @@ require_once(dirname(__FILE__).'/mail.class.php');
require_once(dirname(__FILE__).'/vorlage.class.php');
const DEFAULT_SANCHO_HEADER_IMG = 'sancho_header_DEFAULT.jpg';
const DEFAULT_SANCHO_FOOTER_IMG = 'sancho_footer_DEFAULT.jpg';
/**
* Send single Mail with Sancho Design and Layout.
@@ -31,14 +32,17 @@ const DEFAULT_SANCHO_HEADER_IMG = 'sancho_header_DEFAULT.jpg';
* to be replaced in the content template.
* @param string $to Email-adress.
* @param string $subject Subject of mail.
* @param string $headerImg Filename of the specific Sancho header image.
* @return boolean True, if succeeded.
* @param string $headerImg Filename of the specific Sancho header image.
* @param string $footerImg
* @param string $replyTo default Email-adress for reply.
* @param string | array $cc
* @return boolean True, if succeeded.
*/
function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerImg = DEFAULT_SANCHO_HEADER_IMG)
function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerImg = DEFAULT_SANCHO_HEADER_IMG, $footerImg = DEFAULT_SANCHO_FOOTER_IMG, $replyTo = '', $cc = '')
{
$from = 'sancho@'. DOMAIN;
$sanchoHeader_img = dirname(__FILE__). '/../skin/images/sancho/'. $headerImg;
$sanchoFooter_img = dirname(__FILE__). '/../skin/images/sancho/sancho_footer.jpg';
$sanchoFooter_img = dirname(__FILE__). '/../skin/images/sancho/'. $footerImg;
// Set unique content id for embedding header and footer image
$cid_header = uniqid();
@@ -63,7 +67,15 @@ function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerIm
// * embed the images
$mail->addEmbeddedImage($sanchoHeader_img, 'image/jpg', '', $cid_header);
$mail->addEmbeddedImage($sanchoFooter_img, 'image/jpg', '', $cid_footer);
// * Set reply-to
if (isset($replyTo) && $replyTo != '')
$mail->setReplyTo($replyTo);
// * Set cc
if (isset($cc) && $cc != '')
$mail->setCCRecievers($cc);
// * embed the html content
$mail->setHTMLContent($body);
+77
View File
@@ -1245,5 +1245,82 @@ class vertrag extends basis_db
return false;
}
}
/**
* Prueft ob ein Mitarbeiter einen erteilten Vertrag zu einer Lehreinheit besitzt.
* @param $lehreinheit ID der Lehreinheit
* @param $studiensemester_kurzbz Studiensemester das geprueft wird
* @param $mitarbeiter_uid UID des Mitarbeiters
*/
public function isVertragErteiltLE($lehreinheit_id, $studiensemester_kurzbz, $mitarbeiter_uid)
{
if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON')
&& CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '')
{
// Liegt das Studiensemester vor dem Pruefdatum, wird die LV immer als Erteilt angezeigt
$qry = "
SELECT
tbl_studiensemester.start
FROM
public.tbl_studiensemester
WHERE
studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
AND tbl_studiensemester.start < (SELECT start
FROM public.tbl_studiensemester stsem WHERE
stsem.studiensemester_kurzbz=".$this->db_add_param(CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON)."
)";
if ($result = $this->db_query($qry))
{
if ($this->db_num_rows($result)>0)
{
// Wenn das Studiensemester vor dem Pruefdatum liegt, gilt der Vertrag immer als erteilt.
return true;
}
}
else
{
$this->errormsg = 'Fehler beim Laden des Studiensemesters';
return false;
}
}
$qry = "
SELECT
1
FROM
lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN lehre.tbl_vertrag USING(vertrag_id)
JOIN lehre.tbl_vertrag_vertragsstatus USING(vertrag_id)
WHERE
tbl_lehreinheitmitarbeiter.mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)."
AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
AND tbl_lehreinheit.lehreinheit_id=".$this->db_add_param($lehreinheit_id)."
AND tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz='erteilt'
AND NOT EXISTS(
SELECT 1 FROM lehre.tbl_vertrag_vertragsstatus vstatus
WHERE vstatus.vertrag_id = tbl_vertrag.vertrag_id
AND vstatus.vertragsstatus_kurzbz='storno'
)
";
if ($result = $this->db_query($qry))
{
if ($this->db_num_rows($result) > 0)
{
return true;
}
else
{
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
?>
+1 -1
View File
@@ -174,7 +174,7 @@ class zeitaufzeichnung extends basis_db
}
if ($this->aktivitaet_kurzbz != 'Ersatzruhe' && $this->aktivitaet_kurzbz != 'DienstreiseMT')
{
$check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and aktivitaet_kurzbz != 'DienstreiseMT' and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")";
$check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and (aktivitaet_kurzbz != 'DienstreiseMT' or aktivitaet_kurzbz IS NULL ) and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")";
if($this->db_query($check_qry))
{
if($row = $this->db_fetch_object())