From fa75380fb482813c057664f5d1b1cf4f590900ad Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 3 Oct 2018 10:04:55 +0200 Subject: [PATCH] - Dienstreisen werden bei Erstellung der zeitaufzeichnung Projektliste ignoriert --- .../tools/zeitaufzeichnung_projektliste.php | 17 +++++++++-------- include/zeitaufzeichnung.class.php | 9 ++++++++- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index 8ba79d9d1..51e961223 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -62,13 +62,14 @@ $daysinmonth = cal_days_in_month(CAL_GREGORIAN, $month, $year); $date = new datum(); $ztauf = new zeitaufzeichnung(); -$ztauf->getListeUserFromTo($uid, $year.'-'.$month.'-01', $year.'-'.$month.'-'.$daysinmonth); +$activitiesToIgnore = array('DienstreiseMT');//aktivitaetstypen which shouldn't be added to worktime +$ztauf->getListeUserFromTo($uid, $year.'-'.$month.'-01', $year.'-'.$month.'-'.$daysinmonth, $activitiesToIgnore); //objects for one projectline of list (corresponds to one day) $projectlines = []; $dayStart = $dayEnd = ''; $projectnames = $tosubtract = $allpauseranges = []; -$toignore = ['Pause', 'LehreExtern']; +$activitiesToSubtract = ['Pause', 'LehreExtern'];//aktivitaetstypen which should be subtracted fromworktime $ztaufdata = $ztauf->result; $monthsums = [0 => 0.00]; @@ -94,7 +95,7 @@ for ($i = 0; $i < count($ztaufdata); $i++) //last entry for a day (next entry is different day) $isLastEntry = !array_key_exists($i + 1, $ztaufdata) || intval($date->formatDatum($ztaufdata[$i + 1]->ende, 'd')) != $day; - if (in_array($ztaufrow->aktivitaet_kurzbz, $toignore)) + if (in_array($ztaufrow->aktivitaet_kurzbz, $activitiesToSubtract)) { $subtraction = new stdClass(); $subtraction->start = $ztaufrow->start; @@ -104,7 +105,7 @@ for ($i = 0; $i < count($ztaufdata); $i++) $tosubtract[] = $subtraction; //save all pause ranges - if ($ztaufrow->aktivitaet_kurzbz == $toignore[0]) + if ($ztaufrow->aktivitaet_kurzbz == $activitiesToSubtract[0]) { $prevpause = null; if (count($allpauseranges) > 0) @@ -129,9 +130,9 @@ for ($i = 0; $i < count($ztaufdata); $i++) } //save new dayStart (if earlier) or dayEnd (if later) - if (($dayStart == '' || $dayStart > $ztaufrow->start) && $ztaufrow->aktivitaet_kurzbz != $toignore[1]) + if (($dayStart == '' || $dayStart > $ztaufrow->start) && $ztaufrow->aktivitaet_kurzbz != $activitiesToSubtract[1]) $dayStart = $ztaufrow->start; - if (($dayEnd == '' || $dayEnd < $ztaufrow->ende) && $ztaufrow->aktivitaet_kurzbz != $toignore[1]) + if (($dayEnd == '' || $dayEnd < $ztaufrow->ende) && $ztaufrow->aktivitaet_kurzbz != $activitiesToSubtract[1]) $dayEnd = $ztaufrow->ende; if ($isFirstEntry) @@ -221,12 +222,12 @@ for ($i = 0; $i < count($ztaufdata); $i++) //subtract pauses and LehreExtern from total worktime foreach ($tosubtract as $subtraction) { - if ($subtraction->typ == $toignore[0]) + if ($subtraction->typ == $activitiesToSubtract[0]) { $projectlines[$day]->arbeitszeit -= $subtraction->diff; $pauseSubtracted += $subtraction->diff; } - elseif ($subtraction->typ == $toignore[1] && $subtraction->start >= $dayStart && $subtraction->ende <= $dayEnd) + elseif ($subtraction->typ == $activitiesToSubtract[1] && $subtraction->start >= $dayStart && $subtraction->ende <= $dayEnd) { $projectlines[$day]->arbeitszeit -= $subtraction->diff; $lehreExternExists = true; diff --git a/include/zeitaufzeichnung.class.php b/include/zeitaufzeichnung.class.php index 6a58a23cf..486f06db8 100755 --- a/include/zeitaufzeichnung.class.php +++ b/include/zeitaufzeichnung.class.php @@ -352,9 +352,10 @@ class zeitaufzeichnung extends basis_db * @param $user * @param $from startdatum als String in Form Y-m-d * @param $to enddatum als String in Form Y-m-d + * @param $excluded_activities zu ignorierende Aktivitätstypen * @return bool */ - public function getListeUserFromTo($user, $from = null, $to = null) + public function getListeUserFromTo($user, $from = null, $to = null, $excluded_activities = null) { $where = "uid=".$this->db_add_param($user); @@ -375,6 +376,12 @@ class zeitaufzeichnung extends basis_db $where.= " AND ((start >= ".$this->db_add_param($from)."::DATE AND start <= ".$this->db_add_param($to)."::DATE) OR (ende >= ".$this->db_add_param($from)."::DATE AND ende <= ".$this->db_add_param($to)."::DATE))"; + if (!empty($excluded_activities)) + { + $exactstring = is_array($excluded_activities) ? $this->db_implode4SQL($excluded_activities) : $this->db_add_param($excluded_activities); + $where .= " AND (aktivitaet_kurzbz NOT IN (" . $exactstring . ") OR aktivitaet_kurzbz IS NULL)"; + } + $qry = "SELECT *, to_char ((ende-start),'HH24:MI') as diff, (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI')