From f0c5c3acb46195de0b39bdb9b79f73a9a08fc456 Mon Sep 17 00:00:00 2001
From: ma0068
Date: Thu, 2 Sep 2021 11:24:38 +0200
Subject: [PATCH] 14774 Zeiterfassung: Homeoffice im CSV Import
---
include/bisverwendung.class.php | 109 +++++++++++++++++++++++++++---
locale/de-AT/zeitaufzeichnung.php | 2 +
locale/en-US/zeitaufzeichnung.php | 2 +
3 files changed, 103 insertions(+), 10 deletions(-)
diff --git a/include/bisverwendung.class.php b/include/bisverwendung.class.php
index 861684c98..ca15d03de 100644
--- a/include/bisverwendung.class.php
+++ b/include/bisverwendung.class.php
@@ -47,6 +47,7 @@ class bisverwendung extends basis_db
public $dv_art;
public $inkludierte_lehre;
public $zeitaufzeichnungspflichtig;
+ public $azgrelevant;
public $homeoffice;
public $ba1bez;
@@ -123,6 +124,7 @@ class bisverwendung extends basis_db
$this->dv_art = $row->dv_art;
$this->inkludierte_lehre = $row->inkludierte_lehre;
$this->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig);
+ $this->azgrelevant = $this->db_parse_bool($row->azgrelevant);
$this->homeoffice = $this->db_parse_bool($row->homeoffice);
return true;
}
@@ -179,6 +181,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 +211,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;
}
@@ -220,13 +251,29 @@ class bisverwendung extends basis_db
{
$zeitaufzeichnungspflichtig = 'null';
}
+ if(is_bool($this->azgrelevant))
+ {
+ $azgrelevant = $this->db_add_param($this->azgrelevant, FHC_BOOLEAN);
+ }
+ else
+ {
+ $azgrelevant = 'null';
+ }
+ if(is_bool($this->homeoffice))
+ {
+ $homeoffice = $this->db_add_param($this->homeoffice, FHC_BOOLEAN);
+ }
+ else
+ {
+ $homeoffice = 'null';
+ }
if($new)
{
//Neuen Datensatz anlegen
$qry = "BEGIN;INSERT INTO bis.tbl_bisverwendung (ba1code, ba2code, beschausmasscode,
verwendung_code, mitarbeiter_uid, hauptberufcode, hauptberuflich, habilitation, beginn, ende, vertragsstunden,
- updateamum, updatevon, insertamum, insertvon, dv_art, inkludierte_lehre, zeitaufzeichnungspflichtig) VALUES (".
+ updateamum, updatevon, insertamum, insertvon, dv_art, inkludierte_lehre, zeitaufzeichnungspflichtig, azgrelevant) VALUES (".
$this->db_add_param($this->ba1code, FHC_INTEGER).', '.
$this->db_add_param($this->ba2code, FHC_INTEGER).', '.
$this->db_add_param($this->beschausmasscode, FHC_INTEGER).', '.
@@ -244,7 +291,9 @@ class bisverwendung extends basis_db
$this->db_add_param($this->insertvon).', '.
$this->db_add_param($this->dv_art).','.
$this->db_add_param($this->inkludierte_lehre).','.
- $zeitaufzeichnungspflichtig. ');';
+ $zeitaufzeichnungspflichtig.','.
+ $azgrelevant.','.
+ $homeoffice. ');';
}
else
@@ -268,7 +317,9 @@ class bisverwendung extends basis_db
" insertvon=".$this->db_add_param($this->insertvon).",".
" dv_art=".$this->db_add_param($this->dv_art).",".
" inkludierte_lehre=".$this->db_add_param($this->inkludierte_lehre).",".
- " zeitaufzeichnungspflichtig=". $zeitaufzeichnungspflichtig.
+ " zeitaufzeichnungspflichtig=". $zeitaufzeichnungspflichtig.",".
+ " azgrelevant =". $azgrelevant.",".
+ " homeoffice =". $homeoffice.
" WHERE bisverwendung_id=".$this->db_add_param($this->bisverwendung_id, FHC_INTEGER);
}
@@ -361,8 +412,8 @@ class bisverwendung extends basis_db
$obj->dv_art = $row->dv_art;
$obj->inkludierte_lehre = $row->inkludierte_lehre;
$obj->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig);
+ $obj->azgrelevant = $this->db_parse_bool($row->azgrelevant);
$obj->homeoffice = $this->db_parse_bool($row->homeoffice);
-
$this->result[] = $obj;
}
return true;
@@ -419,6 +470,7 @@ class bisverwendung extends basis_db
$obj->dv_art = $row->dv_art;
$obj->inkludierte_lehre = $row->inkludierte_lehre;
$obj->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig);
+ $obj->azgrelevant = $this->db_parse_bool($row->azgrelevant);
$obj->homeoffice = $this->db_parse_bool($row->homeoffice);
$this->result[] = $obj;
@@ -478,9 +530,9 @@ class bisverwendung extends basis_db
$obj->dv_art = $row->dv_art;
$obj->inkludierte_lehre = $row->inkludierte_lehre;
$obj->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig);
+ $obj->azgrelevant = $this->db_parse_bool($row->azgrelevant);
$obj->homeoffice = $this->db_parse_bool($row->homeoffice);
-
$this->result[] = $obj;
}
return true;
@@ -499,14 +551,15 @@ class bisverwendung extends basis_db
*/
public function getLastVerwendung($uid)
{
- //laden des Datensatzes18.08.2021
+ //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))
{
@@ -520,6 +573,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;
@@ -531,6 +585,8 @@ class bisverwendung extends basis_db
$this->dv_art = $row->dv_art;
$this->inkludierte_lehre = $row->inkludierte_lehre;
$this->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig);
+ $this->azgrelevant = $this->db_parse_bool($row->azgrelevant);
+ $this->homeoffice = $this->db_parse_bool($row->homeoffice);
}
return true;
}
@@ -559,7 +615,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))
{
@@ -583,8 +639,9 @@ class bisverwendung extends basis_db
$this->vertragsstunden = $row->vertragsstunden;
$this->dv_art = $row->dv_art;
$this->inkludierte_lehre = $row->inkludierte_lehre;
- $this->homeoffice = $this->db_parse_bool($row->homeoffice);
$this->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig);
+ $this->azgrelevant = $this->db_parse_bool($row->azgrelevant);
+ $this->homeoffice = $this->db_parse_bool($row->homeoffice);
}
return true;
}
@@ -647,6 +704,8 @@ class bisverwendung extends basis_db
$obj->dv_art = $row->dv_art;
$obj->inkludierte_lehre = $row->inkludierte_lehre;
$obj->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig);
+ $obj->azgrelevant = $this->db_parse_bool($row->azgrelevant);
+ $obj->homeoffice = $this->db_parse_bool($row->homeoffice);
$this->result[] = $obj;
}
@@ -775,5 +834,35 @@ class bisverwendung extends basis_db
return false;
}
}
+
+ public function inZeitaufzeichnungspflichtigPeriod($PeriodStartDate, $PeriodEndDate)
+ {
+ $PeriodStartDateISO = date('Y-m-d', strtotime($PeriodStartDate));
+ $PeriodEndDateISO = date('Y-m-d', strtotime($PeriodEndDate));
+
+ $beginn = date('Y-m-d', strtotime($this->beginn));
+ $end = date('Y-m-d', strtotime($this->ende));
+ $zp = $this->zeitaufzeichnungspflichtig;
+
+ if ($zp)
+ {
+ if (
+ (($PeriodStartDateISO >= $beginn) && (($PeriodStartDateISO <= $end) || is_null($this->ende)))
+ ||
+ (($PeriodEndDateISO >= $beginn) && (($PeriodEndDateISO <= $end) || is_null($this->ende)))
+ )
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else
+ {
+ return false;
+ }
+ }
}
?>
diff --git a/locale/de-AT/zeitaufzeichnung.php b/locale/de-AT/zeitaufzeichnung.php
index e0b7047da..ad9a4de0c 100644
--- a/locale/de-AT/zeitaufzeichnung.php
+++ b/locale/de-AT/zeitaufzeichnung.php
@@ -7,6 +7,7 @@ $this->phrasen['zeitaufzeichnung/projekt']='Projekt';
$this->phrasen['zeitaufzeichnung/projektphase']='Projektphase';
$this->phrasen['zeitaufzeichnung/keineAuswahl']='keine Auswahl';
$this->phrasen['zeitaufzeichnung/aktivitaet']='Aktivität';
+$this->phrasen['zeitaufzeichnung/homeoffice']='Homeoffice';
$this->phrasen['zeitaufzeichnung/id']='ID';
$this->phrasen['zeitaufzeichnung/user']='User';
$this->phrasen['zeitaufzeichnung/start']='Start';
@@ -63,3 +64,4 @@ $this->phrasen['zeitaufzeichnung/projektphase']='AP';
$this->phrasen['zeitaufzeichnung/pauseEinfuegen']='Pause automatisch einfügen';
$this->phrasen['zeitaufzeichnung/zeitraumZuKurz']='Zeitraum zu kurz für automatische Pause';
$this->phrasen['zeitaufzeichnung/supportAnfragen']='
Supportanfragen unter
zeiterfassung@technikum-wien.at
';
+$this->phrasen['zeitaufzeichnung/homeofficeNichtErlaubt']='Homeoffice für den Tag %s nicht erlaubt';
diff --git a/locale/en-US/zeitaufzeichnung.php b/locale/en-US/zeitaufzeichnung.php
index a67a35e4b..9e0b84ec1 100644
--- a/locale/en-US/zeitaufzeichnung.php
+++ b/locale/en-US/zeitaufzeichnung.php
@@ -7,6 +7,7 @@ $this->phrasen['zeitaufzeichnung/projekt']='Project';
$this->phrasen['zeitaufzeichnung/projektphase']='Projectphase';
$this->phrasen['zeitaufzeichnung/keineAuswahl']='no selection';
$this->phrasen['zeitaufzeichnung/aktivitaet']='Activity';
+$this->phrasen['zeitaufzeichnung/homeoffice']='Homeoffice';
$this->phrasen['zeitaufzeichnung/id']='ID';
$this->phrasen['zeitaufzeichnung/user']='User';
$this->phrasen['zeitaufzeichnung/start']='Start';
@@ -63,3 +64,4 @@ $this->phrasen['zeitaufzeichnung/projektphase']='WP';
$this->phrasen['zeitaufzeichnung/pauseEinfuegen']='insert break automatically';
$this->phrasen['zeitaufzeichnung/zeitraumZuKurz']='Timeslot too short for automatic break.';
$this->phrasen['zeitaufzeichnung/supportAnfragen']='
Contact for support
zeiterfassung@technikum-wien.at';
+$this->phrasen['zeitaufzeichnung/homeofficeNichtErlaubt']='Homeoffice for day %s not allowed';