$date, 'start' => '', 'end' => '', 'sdec' => 0, 'edec' => 0, 'worktime' => 8, 'break' => 0, 'worktime_total' => 8, 'info' => 'Holiday', 'desc' => $description]; } // convert all entries to date/start/end-arrays foreach($respData as $rpentry) { $edate = ''; $etime = ''; $etype = 0; $homeoffice = false; // extract date, time and type foreach($rpentry['data'] as $i=>$rpdata) { if($rpdata['columnId'] == 9) $edate = $rpdata['value']; else if ($rpdata['columnId'] == 10) $etime = $rpdata['value']; else if ($rpdata['columnId'] == 12) $etype = $rpdata['value']; else if ($rpdata['columnId'] == 13) $homeoffice = $rpdata['value']; } //print_r($edate); //print_r($etime); //print_r($etype); //print_r($homeoffice); $found = false; foreach($dates as $index=>$date) { //var_dump($date['date']); //var_dump($edate); //var_dump($date['date'] == $edate); if($date['date'] == $edate) { //var_dump($date); if($etype == 0) $dates[$index]['start'] = $etime; else if($etype == 1) { // add end time to entry $dates[$index]['end'] = $etime; // calc shift in decimal $dates[$index]['sdec'] = transferHoursToDecimal($dates[$index]['start']); $dates[$index]['edec'] = transferHoursToDecimal($dates[$index]['end']); $dates[$index]['worktime'] = $dates[$index]['edec'] - $dates[$index]['sdec']; $dates[$index]['break'] = ($dates[$index]['worktime'] > $breakLimit ? $breakLarge : $breakSmall); $dates[$index]['worktime_total'] = $dates[$index]['worktime'] - $dates[$index]['break']; } $found = true; break; } } if(!$found) { if($etype == 0) $dates[] = ['date' => $edate, 'start' => $etime, 'end' => '', 'sdec' => 0, 'edec' => 0, 'worktime' => 0, 'break' => 0.5, 'worktime_total' => 0, 'info' => ($homeoffice ? 'Homeoffice' : 'Office'), 'desc' => '']; if($etype == 2) $dates[] = ['date' => $edate, 'start' => '', 'end' => '', 'sdec' => 0, 'edec' => 0, 'worktime' => 8, 'break' => 0, 'worktime_total' => 8, 'info' => 'Vacation', 'desc' => '']; if($etype == 3) $dates[] = ['date' => $edate, 'start' => '', 'end' => '', 'sdec' => 0, 'edec' => 0, 'worktime' => 8, 'break' => 0, 'worktime_total' => 8, 'info' => 'Sickday', 'desc' => '']; if($etype == 4) $dates[] = ['date' => $edate, 'start' => '', 'end' => '', 'sdec' => 0, 'edec' => 0, 'worktime' => 8, 'break' => 0, 'worktime_total' => 8, 'info' => 'Businesstrip', 'desc' => '']; } } // sort all dates usort($dates, function($a, $b) { return strcmp($a['date'], $b['date']); }); //var_dump($dates); $groupedDates = []; // group dates by week foreach($dates as $entry) { $date = new DateTime($entry['date']); $year = $date->format('o'); $week = $date->format('W'); $key = "$year-CW$week"; if(!isset($groupedDates[$key])) { $groupedDates[$key] = []; } $groupedDates[$key][] = $entry; } //print_r($groupedDates); $homeofficedays = 0; $sickdays = 0; $vacations = 0; $workdays = 0; $currentWeek = date("W"); $currentWeekIndex = "$currentYear-CW$currentWeek"; // build the current week echo "

Current Week

"; echo ""; echo ""; echo ""; $currentWeekTotal = 0; foreach($groupedDates[$currentWeekIndex] as $id=>$data) { $date = $data['date']; $info = $data['info']; $start = $data['start']; $end = $data['end']; $worktime = $data['worktime']; $break = $data['break']; $worktimeTotal = $data['worktime_total']; $description = ($data['desc'] ? ' - '.$data['desc'] : ''); $class = strtolower($info); echo ""; $currentWeekTotal += $worktimeTotal; } echo ""; echo '
$currentWeekIndex
DateInfoStartEndWorktimeBreakWorktime Total
$date$info$description$start$end$worktime$break$worktimeTotal
Total: $currentWeekTotal
'; echo "

 

"; echo "
"; echo "

Full year table

"; // build the full year table echo ""; foreach($groupedDates as $index=>$group) { $isCurrentWeek = (strcmp($index, $currentWeekIndex) === 0 ? true : false); if($isCurrentWeek) echo ""; echo ""; echo ""; $weekTotal = 0; foreach($group as $id=>$data) { $date = $data['date']; $info = $data['info']; $start = $data['start']; $end = $data['end']; $worktime = $data['worktime']; $break = $data['break']; $worktimeTotal = $data['worktime_total']; $description = ($data['desc'] ? ' - '.$data['desc'] : ''); $class = strtolower($info); echo ""; $weekTotal += $worktimeTotal; if(strcmp($info, 'Sickday') === 0) $sickdays++; if(strcmp($info, 'Homeoffice') === 0) $homeofficedays++; if(strcmp($info, 'Vacation') === 0) $vacations++; if(strcmp($info, 'Vacation') !== 0 && strcmp($info, 'Holiday') !== 0) $workdays++; } echo ""; if($isCurrentWeek) echo ""; } echo ""; //$workdaystotal = count($dates); echo ""; echo '
 
$index
DateInfoStartEndWorktimeBreakWorktime Total
$date$info$description$start$end$worktime$break$worktimeTotal
Total: $weekTotal
 
 
Sickdays: $sickdaysVacationdays: $vacations/30Homeoffice: $homeofficedays$workdays
'; ?>