getData($request, $service); return $this->render('reporting/project_view.html.twig', array_merge($data, [ 'report_title' => 'report_project_view', 'tableName' => 'project_view_reporting', 'export_route' => 'report_project_view_export', ])); } /** * @param Request $request * @param ProjectStatisticService $service * @return array{'entries': array, 'form': FormView, 'now': \DateTimeInterface} */ private function getData(Request $request, ProjectStatisticService $service): array { $dateFactory = $this->getDateTimeFactory(); $user = $this->getUser(); $query = new ProjectViewQuery($dateFactory->createDateTime(), $user); $form = $this->createFormForGetRequest(ProjectViewForm::class, $query); $form->submit($request->query->all(), false); $projects = $service->findProjectsForView($query); $entries = $service->getProjectView($user, $projects, $query->getToday()); $byCustomer = []; foreach ($entries as $entry) { $customer = $entry->getProject()->getCustomer(); if (!isset($byCustomer[$customer->getId()])) { $byCustomer[$customer->getId()] = ['customer' => $customer, 'projects' => []]; } $byCustomer[$customer->getId()]['projects'][] = $entry; } return [ 'entries' => $byCustomer, 'form' => $form->createView(), 'now' => $dateFactory->createDateTime(), ]; } #[Route(path: '/export', name: 'report_project_view_export', methods: ['GET', 'POST'])] public function export(Request $request, ProjectStatisticService $service): Response { $data = $this->getData($request, $service); $content = $this->renderView('reporting/project_list_export.html.twig', $data); $reader = new Html(); $spreadsheet = $reader->loadFromString($content); $writer = new BinaryFileResponseWriter(new XlsxWriter(), 'kimai-export-project-overview'); return $writer->getFileResponse($spreadsheet); } }