isGranted('view_other_timesheet') || !$this->isGranted('view_other_reporting')) { return false; } return true; } protected function getStatisticDataRaw(DateTime $begin, DateTime $end, User $user): array { return $this->statisticService->getDailyStatisticsGrouped($begin, $end, [$user]); } protected function createStatisticModel(DateTime $begin, DateTime $end, User $user): DateStatisticInterface { return new DailyStatistic($begin, $end, $user); } protected function prepareReport(DateTime $begin, DateTime $end, User $user): array { $data = $this->getStatisticDataRaw($begin, $end, $user); $data = array_pop($data); $projectIds = []; $activityIds = []; foreach ($data as $projectId => $projectValues) { $projectIds[$projectId] = $projectId; $dailyProjectStatistic = $this->createStatisticModel($begin, $end, $user); foreach ($projectValues['activities'] as $activityId => $activityValues) { $activityIds[$activityId] = $activityId; if (!isset($data[$projectId]['duration'])) { $data[$projectId]['duration'] = 0; } if (!isset($data[$projectId]['rate'])) { $data[$projectId]['rate'] = 0.0; } if (!isset($data[$projectId]['internalRate'])) { $data[$projectId]['internalRate'] = 0.0; } if (!isset($data[$projectId]['activities'][$activityId]['duration'])) { $data[$projectId]['activities'][$activityId]['duration'] = 0; } if (!isset($data[$projectId]['activities'][$activityId]['rate'])) { $data[$projectId]['activities'][$activityId]['rate'] = 0.0; } if (!isset($data[$projectId]['activities'][$activityId]['internalRate'])) { $data[$projectId]['activities'][$activityId]['internalRate'] = 0.0; } /** @var StatisticDate $date */ foreach ($activityValues['data']->getData() as $date) { $statisticDate = $dailyProjectStatistic->getByDateTime($date->getDate()); if ($statisticDate === null) { // this should not happen, but sometimes it does ... continue; } $statisticDate->setTotalDuration($statisticDate->getTotalDuration() + $date->getTotalDuration()); $statisticDate->setTotalRate($statisticDate->getTotalRate() + $date->getTotalRate()); $statisticDate->setTotalInternalRate($statisticDate->getTotalInternalRate() + $date->getTotalInternalRate()); $data[$projectId]['duration'] = $data[$projectId]['duration'] + $date->getTotalDuration(); $data[$projectId]['rate'] = $data[$projectId]['rate'] + $date->getTotalRate(); $data[$projectId]['internalRate'] = $data[$projectId]['internalRate'] + $date->getTotalInternalRate(); $data[$projectId]['activities'][$activityId]['duration'] = $data[$projectId]['activities'][$activityId]['duration'] + $date->getTotalDuration(); $data[$projectId]['activities'][$activityId]['rate'] = $data[$projectId]['activities'][$activityId]['rate'] + $date->getTotalRate(); $data[$projectId]['activities'][$activityId]['internalRate'] = $data[$projectId]['activities'][$activityId]['internalRate'] + $date->getTotalInternalRate(); } } $data[$projectId]['data'] = $dailyProjectStatistic; } $activities = $this->activityRepository->findByIds($activityIds); foreach ($activities as $activity) { $activityIds[$activity->getId()] = $activity; } foreach ($data as $projectId => $projectValues) { foreach ($projectValues['activities'] as $activityId => $activityValues) { $data[$projectId]['activities'][$activityId]['activity'] = $activityIds[$activityId]; } } $projects = $this->projectRepository->findByIds($projectIds); foreach ($projects as $project) { $data[$project->getId()]['project'] = $project; } return $data; } }