From 65d23941278ac413bcde37d76962bf0e7f6c6366 Mon Sep 17 00:00:00 2001 From: Sebastian Mendel Date: Fri, 19 Oct 2018 16:22:29 +0200 Subject: [PATCH] TTT-560: include holidays, sick days and IST into export --- .../Controller/ControllingController.php | 43 +++++++++++++++++++ .../TimeTrackerBundle/Entity/Activity.php | 30 +++++++++++++ 2 files changed, 73 insertions(+) diff --git a/src/Netresearch/TimeTrackerBundle/Controller/ControllingController.php b/src/Netresearch/TimeTrackerBundle/Controller/ControllingController.php index ad33fe3ba..fe0d4a312 100644 --- a/src/Netresearch/TimeTrackerBundle/Controller/ControllingController.php +++ b/src/Netresearch/TimeTrackerBundle/Controller/ControllingController.php @@ -75,7 +75,23 @@ public function exportAction() // https://jira.netresearch.de/browse/TTT-561 $lineNumber = 3; + $stats = []; foreach ($entries as $entry) { + + if (! isset($stats[$entry->getUser()->getAbbr()])) { + $stats[$entry->getUser()->getAbbr()] = [ + 'holidays' => 0, + 'sickdays' => 0, + ]; + } + + if ($entry->getActivity()->isHoliday()) { + $stats[$entry->getUser()->getAbbr()]['holidays']++; + } + if ($entry->getActivity()->isSick()) { + $stats[$entry->getUser()->getAbbr()]['sickdays']++; + } + self::setCellDate($sheet, 'A', $lineNumber, $entry->getDay()); self::setCellHours($sheet, 'B', $lineNumber, $entry->getStart()); @@ -102,9 +118,36 @@ public function exportAction() // TODO: https://jira.netresearch.de/browse/TTT-559 // sheet 2: list user working days without working time + $sheet = $spreadsheet->getSheet(1); + $lineNumber = 2; // TODO: https://jira.netresearch.de/browse/TTT-560 // sheet 3: list users monthly SOLL/IST, holidays, sickdays + $sheet = $spreadsheet->getSheet(2); + $lineNumber = 2; + ksort($stats); + foreach ($stats as $user => $userStats) { + $sheet->setCellValue('A' . $lineNumber, $user); + $sheet->setCellValue('B' . $lineNumber, $month); + //$sheet->setCellValue('C' . $lineNumber, 0); + + // =SUMIF(ZE!$J$1:$J$5000,A3,ZE!$I$1:$I$5000) + // [HH]:MM + $sheet->setCellValue('D' . $lineNumber, '=SUMIF(ZE!$J$1:$J$5000,A' . $lineNumber . ',ZE!$I$1:$I$5000)'); + $sheet->getStyle('D' . $lineNumber) + ->getNumberFormat() + ->setFormatCode('[HH]:MM'); + + if ($userStats['holidays'] > 0) { + $sheet->setCellValue('E' . $lineNumber, $userStats['holidays']); + } + + if ($userStats['holidays'] > 0) { + $sheet->setCellValue('F' . $lineNumber, $userStats['sickdays']); + } + + $lineNumber++; + } $file = tempnam(sys_get_temp_dir(), 'ttt-export-'); diff --git a/src/Netresearch/TimeTrackerBundle/Entity/Activity.php b/src/Netresearch/TimeTrackerBundle/Entity/Activity.php index 5edf2a225..6a3f9046f 100644 --- a/src/Netresearch/TimeTrackerBundle/Entity/Activity.php +++ b/src/Netresearch/TimeTrackerBundle/Entity/Activity.php @@ -13,6 +13,8 @@ */ class Activity { + const SICK = 'Krank'; + const HOLIDAY = 'Urlaub'; /** * @ORM\Id @@ -190,4 +192,32 @@ public function removeEntrie(\Netresearch\TimeTrackerBundle\Entity\Entry $entrie { $this->entries->removeElement($entries); } + + /** + * Returns true if activity is a sick day. + * + * @return bool + */ + public function isSick() + { + if ($this->getName() === self::SICK) { + return true; + } + + return false; + } + + /** + * Returns true if activity is holiday. + * + * @return bool + */ + public function isHoliday() + { + if ($this->getName() === self::HOLIDAY) { + return true; + } + + return false; + } } \ No newline at end of file