getProject()) { $customerId = $exportItem->getProject()->getCustomer()->getId(); $customerName = $exportItem->getProject()->getCustomer()->getName(); $projectId = $exportItem->getProject()->getId(); $projectName = $exportItem->getProject()->getName(); $currency = $exportItem->getProject()->getCustomer()->getCurrency(); } if (null !== $exportItem->getActivity()) { $activityId = $exportItem->getActivity()->getId(); $activityName = $exportItem->getActivity()->getName(); } $id = $customerId . '_' . $projectId; $type = $exportItem->getType(); $category = $exportItem->getCategory(); if (!isset($summary[$id])) { $summary[$id] = [ 'customer' => $customerName, 'project' => $projectName, 'activities' => [], 'currency' => $currency, 'rate' => 0, 'rate_internal' => 0, 'duration' => 0, 'type' => [], 'types' => [], ]; } if (!isset($summary[$id]['type'][$type])) { $summary[$id]['type'][$type] = [ 'rate' => 0, 'rate_internal' => 0, 'duration' => 0, ]; } if (!isset($summary[$id]['types'][$type][$category])) { $summary[$id]['types'][$type][$category] = [ 'rate' => 0, 'rate_internal' => 0, 'duration' => 0, ]; } if (!isset($summary[$id]['activities'][$activityId])) { $summary[$id]['activities'][$activityId] = [ 'activity' => $activityName, 'currency' => $currency, 'rate' => 0, 'rate_internal' => 0, 'duration' => 0, ]; } $duration = $exportItem->getDuration(); if (null === $duration) { $duration = 0; } $summary[$id]['rate'] += $exportItem->getRate(); $summary[$id]['type'][$type]['rate'] += $exportItem->getRate(); $summary[$id]['types'][$type][$category]['rate'] += $exportItem->getRate(); if (method_exists($exportItem, 'getInternalRate')) { $summary[$id]['rate_internal'] += $exportItem->getInternalRate(); $summary[$id]['type'][$type]['rate_internal'] += $exportItem->getInternalRate(); $summary[$id]['types'][$type][$category]['rate_internal'] += $exportItem->getInternalRate(); } else { $summary[$id]['rate_internal'] += $exportItem->getRate(); $summary[$id]['type'][$type]['rate_internal'] += $exportItem->getRate(); $summary[$id]['types'][$type][$category]['rate_internal'] += $exportItem->getRate(); } $summary[$id]['duration'] += $duration; $summary[$id]['type'][$type]['duration'] += $duration; $summary[$id]['types'][$type][$category]['duration'] += $duration; $summary[$id]['activities'][$activityId]['rate'] += $exportItem->getRate(); $summary[$id]['activities'][$activityId]['duration'] += $duration; } asort($summary); return $summary; } /** * @param ExportItemInterface[] $exportItems * @param TimesheetQuery $query * @param ProjectRepository $projectRepository * @return array */ protected function calculateProjectBudget(array $exportItems, TimesheetQuery $query, ProjectRepository $projectRepository) { $summary = []; foreach ($exportItems as $exportItem) { $customer = null; $customerId = 'none'; $project = null; $projectId = 'none'; if (null !== ($project = $exportItem->getProject())) { $customer = $project->getCustomer(); $customerId = $customer->getId(); $projectId = $project->getId(); } $id = $customerId . '_' . $projectId; if (!isset($summary[$id])) { $summary[$id] = [ 'time' => $project->getTimeBudget(), 'money' => $project->getBudget(), 'time_left' => null, 'money_left' => null, ]; if (null !== $project && ($project->getTimeBudget() > 0 || $project->getBudget() > 0)) { $projectStats = $projectRepository->getProjectStatistics($project, null, $query->getEnd()); if ($project->getTimeBudget() > 0) { $summary[$id]['time_left'] = $project->getTimeBudget() - $projectStats->getRecordDuration(); } if ($project->getBudget() > 0) { $summary[$id]['money_left'] = $project->getBudget() - $projectStats->getRecordRate(); } } } } return $summary; } }