export filtered timesheets without additional search form (#5234)
This commit is contained in:
@@ -160,17 +160,13 @@ abstract class AbstractController extends BaseAbstractController implements Serv
|
||||
*
|
||||
* @param array<string, string> $parameter
|
||||
*/
|
||||
private function addFlashTranslated(string $type, string $message, array $parameter = []): void
|
||||
private function addFlashTranslated(string $type, string $message, array $parameter = [], string $domain = 'flashmessages'): void
|
||||
{
|
||||
if (!empty($parameter)) {
|
||||
foreach ($parameter as $key => $value) {
|
||||
$parameter[$key] = $this->getTranslator()->trans($value, [], 'flashmessages');
|
||||
$parameter[$key] = $this->getTranslator()->trans($value, [], $domain);
|
||||
}
|
||||
$message = $this->getTranslator()->trans(
|
||||
$message,
|
||||
$parameter,
|
||||
'flashmessages'
|
||||
);
|
||||
$message = $this->getTranslator()->trans($message, $parameter, $domain);
|
||||
}
|
||||
|
||||
$this->addFlash($type, $message);
|
||||
|
||||
@@ -23,7 +23,6 @@ use App\Form\MultiUpdate\TimesheetMultiUpdate;
|
||||
use App\Form\MultiUpdate\TimesheetMultiUpdateDTO;
|
||||
use App\Form\TimesheetEditForm;
|
||||
use App\Form\TimesheetPreCreateForm;
|
||||
use App\Form\Toolbar\TimesheetExportToolbarForm;
|
||||
use App\Form\Toolbar\TimesheetToolbarForm;
|
||||
use App\Repository\Query\BaseQuery;
|
||||
use App\Repository\Query\TimesheetQuery;
|
||||
@@ -34,7 +33,6 @@ use App\Timesheet\TrackingMode\TrackingModeInterface;
|
||||
use App\Utils\DataTable;
|
||||
use App\Utils\PageSetup;
|
||||
use Psr\EventDispatcher\EventDispatcherInterface;
|
||||
use Symfony\Component\Form\FormError;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\FormTypeInterface;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
@@ -237,19 +235,22 @@ abstract class TimesheetAbstractController extends AbstractController
|
||||
]);
|
||||
}
|
||||
|
||||
protected function export(Request $request, ServiceExport $serviceExport): Response
|
||||
protected function export(string $type, Request $request, ServiceExport $serviceExport): Response
|
||||
{
|
||||
$exporter = $serviceExport->getTimesheetExporterById($type);
|
||||
|
||||
if (null === $exporter) {
|
||||
throw $this->createNotFoundException();
|
||||
}
|
||||
|
||||
$query = $this->createDefaultQuery();
|
||||
$query->setOrder(BaseQuery::ORDER_ASC);
|
||||
|
||||
$form = $this->getExportForm($query);
|
||||
|
||||
if ($request->isMethod(Request::METHOD_POST)) {
|
||||
$request->query->set('performSearch', true);
|
||||
}
|
||||
$form = $this->getToolbarForm($query);
|
||||
$request->query->set('performSearch', true);
|
||||
|
||||
if ($this->handleSearch($form, $request)) {
|
||||
return $this->redirectToRoute($this->getExportRoute());
|
||||
return $this->redirectToRoute($this->getTimesheetRoute());
|
||||
}
|
||||
|
||||
$this->prepareQuery($query);
|
||||
@@ -263,29 +264,8 @@ abstract class TimesheetAbstractController extends AbstractController
|
||||
}
|
||||
|
||||
$entries = $this->repository->getTimesheetResult($query);
|
||||
$stats = $entries->getStatistic();
|
||||
|
||||
// perform the real export
|
||||
if ($request->isMethod(Request::METHOD_POST)) {
|
||||
$type = $request->request->get('exporter');
|
||||
if (null !== $type) {
|
||||
$exporter = $serviceExport->getTimesheetExporterById($type);
|
||||
|
||||
if (null === $exporter) {
|
||||
$form->addError(new FormError('Invalid timesheet exporter given'));
|
||||
} else {
|
||||
return $exporter->render($entries->getResults(), $query);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $this->render('timesheet/layout-export.html.twig', [
|
||||
'page_setup' => new PageSetup('export'),
|
||||
'form' => $form->createView(),
|
||||
'route_back' => $this->getTimesheetRoute(),
|
||||
'exporter' => $serviceExport->getTimesheetExporter(),
|
||||
'stats' => $stats,
|
||||
]);
|
||||
return $exporter->render($entries->getResults(), $query);
|
||||
}
|
||||
|
||||
protected function multiUpdate(Request $request): Response
|
||||
@@ -548,16 +528,6 @@ abstract class TimesheetAbstractController extends AbstractController
|
||||
]);
|
||||
}
|
||||
|
||||
private function getExportForm(TimesheetQuery $query): FormInterface
|
||||
{
|
||||
return $this->createSearchForm(TimesheetExportToolbarForm::class, $query, [
|
||||
'action' => $this->generateUrl($this->getExportRoute()),
|
||||
'timezone' => $this->getDateTimeFactory()->getTimezone()->getName(),
|
||||
'method' => Request::METHOD_POST,
|
||||
'include_user' => $this->includeUserInForms('toolbar'),
|
||||
]);
|
||||
}
|
||||
|
||||
protected function getPermissionEditExport(): string
|
||||
{
|
||||
return 'edit_export_own_timesheet';
|
||||
@@ -611,11 +581,6 @@ abstract class TimesheetAbstractController extends AbstractController
|
||||
return 'timesheet_multi_delete';
|
||||
}
|
||||
|
||||
protected function getExportRoute(): string
|
||||
{
|
||||
return 'timesheet_export';
|
||||
}
|
||||
|
||||
protected function canSeeStartEndTime(): bool
|
||||
{
|
||||
return $this->getTrackingMode()->canSeeBeginAndEndTimes();
|
||||
|
||||
@@ -41,11 +41,11 @@ final class TimesheetController extends TimesheetAbstractController
|
||||
return $this->index($query, $request, 'timesheet', 'timesheet_paginated', TimesheetMetaDisplayEvent::TIMESHEET);
|
||||
}
|
||||
|
||||
#[Route(path: '/export/', name: 'timesheet_export', methods: ['GET', 'POST'])]
|
||||
#[Route(path: '/export/{exporter}', name: 'timesheet_export', methods: ['GET', 'POST'])]
|
||||
#[IsGranted('export_own_timesheet')]
|
||||
public function exportAction(Request $request, ServiceExport $serviceExport): Response
|
||||
public function exportAction(string $exporter, Request $request, ServiceExport $serviceExport): Response
|
||||
{
|
||||
return $this->export($request, $serviceExport);
|
||||
return $this->export($exporter, $request, $serviceExport);
|
||||
}
|
||||
|
||||
#[Route(path: '/{id}/edit', name: 'timesheet_edit', methods: ['GET', 'POST'])]
|
||||
|
||||
@@ -50,11 +50,11 @@ final class TimesheetTeamController extends TimesheetAbstractController
|
||||
return $this->index($query, $request, 'admin_timesheet', 'admin_timesheet_paginated', TimesheetMetaDisplayEvent::TEAM_TIMESHEET);
|
||||
}
|
||||
|
||||
#[Route(path: '/export/', name: 'admin_timesheet_export', methods: ['GET', 'POST'])]
|
||||
#[Route(path: '/export/{exporter}', name: 'admin_timesheet_export', methods: ['GET', 'POST'])]
|
||||
#[IsGranted('export_other_timesheet')]
|
||||
public function exportAction(Request $request, ServiceExport $serviceExport): Response
|
||||
public function exportAction(string $exporter, Request $request, ServiceExport $serviceExport): Response
|
||||
{
|
||||
return $this->export($request, $serviceExport);
|
||||
return $this->export($exporter, $request, $serviceExport);
|
||||
}
|
||||
|
||||
#[Route(path: '/{id}/edit', name: 'admin_timesheet_edit', methods: ['GET', 'POST'])]
|
||||
@@ -233,11 +233,6 @@ final class TimesheetTeamController extends TimesheetAbstractController
|
||||
return 'admin_timesheet_edit';
|
||||
}
|
||||
|
||||
protected function getExportRoute(): string
|
||||
{
|
||||
return 'admin_timesheet_export';
|
||||
}
|
||||
|
||||
protected function getMultiUpdateRoute(): string
|
||||
{
|
||||
return 'admin_timesheet_multi_update';
|
||||
|
||||
Reference in New Issue
Block a user