diff --git a/src/DependencyInjection/Compiler/ExportServiceCompilerPass.php b/src/DependencyInjection/Compiler/ExportServiceCompilerPass.php index 55e25aa3..2b2d98e3 100644 --- a/src/DependencyInjection/Compiler/ExportServiceCompilerPass.php +++ b/src/DependencyInjection/Compiler/ExportServiceCompilerPass.php @@ -11,6 +11,7 @@ namespace App\DependencyInjection\Compiler; use App\Export\Renderer\HtmlRenderer; use App\Export\Renderer\HtmlRendererFactory; +use App\Export\Renderer\PDFRenderer; use App\Export\Renderer\PdfRendererFactory; use App\Export\ServiceExport; use App\Kernel; @@ -72,7 +73,7 @@ class ExportServiceCompilerPass implements CompilerPassInterface $serviceId = 'exporter_renderer.' . str_replace('.', '_', $tplName); - $factoryDefinition = new Definition(HtmlRenderer::class); + $factoryDefinition = new Definition(PDFRenderer::class); $factoryDefinition->addArgument($tplName); $factoryDefinition->addArgument($tplName); $factoryDefinition->setFactory([new Reference(PdfRendererFactory::class), 'create']); diff --git a/src/Export/Base/HtmlRenderer.php b/src/Export/Base/HtmlRenderer.php index 884e18c5..f147e960 100644 --- a/src/Export/Base/HtmlRenderer.php +++ b/src/Export/Base/HtmlRenderer.php @@ -108,6 +108,8 @@ class HtmlRenderer 'query' => $query, 'summaries' => $summary, 'budgets' => $this->calculateProjectBudget($timesheets, $query, $this->projectRepository), + // @deprecated since 1.3, will be removed with 2.0 + 'metaColumns' => $timesheetMetaFields, 'timesheetMetaFields' => $timesheetMetaFields, 'customerMetaFields' => $customerMetaFields, 'projectMetaFields' => $projectMetaFields, diff --git a/src/Export/Timesheet/HtmlRenderer.php b/src/Export/Timesheet/HtmlRenderer.php index c5bf9579..e0206af3 100644 --- a/src/Export/Timesheet/HtmlRenderer.php +++ b/src/Export/Timesheet/HtmlRenderer.php @@ -9,73 +9,14 @@ namespace App\Export\Timesheet; -use App\Entity\Timesheet; -use App\Event\TimesheetMetaDisplayEvent; +use App\Export\Base\HtmlRenderer as BaseHtmlRenderer; use App\Export\TimesheetExportInterface; -use App\Repository\Query\TimesheetQuery; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\HttpFoundation\Response; -use Twig\Environment; -final class HtmlRenderer implements TimesheetExportInterface +final class HtmlRenderer extends BaseHtmlRenderer implements TimesheetExportInterface { - /** - * @var Environment - */ - private $twig; - /** - * @var EventDispatcherInterface - */ - private $dispatcher; - - public function __construct(Environment $twig, EventDispatcherInterface $dispatcher) + protected function getTemplate(): string { - $this->twig = $twig; - $this->dispatcher = $dispatcher; - } - - private function getOptions(TimesheetQuery $query): array - { - $decimal = false; - if (null !== $query->getCurrentUser()) { - $decimal = (bool) $query->getCurrentUser()->getPreferenceValue('timesheet.export_decimal', $decimal); - } elseif (null !== $query->getUser()) { - $decimal = (bool) $query->getUser()->getPreferenceValue('timesheet.export_decimal', $decimal); - } - - return ['decimal' => $decimal]; - } - - /** - * @param Timesheet[] $timesheets - * @param TimesheetQuery $query - * @return Response - * @throws \Twig\Error\LoaderError - * @throws \Twig\Error\RuntimeError - * @throws \Twig\Error\SyntaxError - */ - public function render(array $timesheets, TimesheetQuery $query): Response - { - $metaLocation = TimesheetMetaDisplayEvent::TEAM_TIMESHEET_EXPORT; - if (null !== $query->getUser()) { - $metaLocation = TimesheetMetaDisplayEvent::EXPORT; - } - - $event = new TimesheetMetaDisplayEvent($query, $metaLocation); - $this->dispatcher->dispatch($event); - $timesheetMetaFields = $event->getFields(); - - $content = $this->twig->render('timesheet/export.html.twig', array_merge([ - 'entries' => $timesheets, - 'query' => $query, - 'metaColumns' => $timesheetMetaFields, - 'decimal' => false, - ], $this->getOptions($query))); - - $response = new Response(); - $response->setContent($content); - - return $response; + return 'timesheet/export.html.twig'; } /** diff --git a/templates/timesheet/export.html.twig b/templates/timesheet/export.html.twig index c0d88476..1f2a1b80 100644 --- a/templates/timesheet/export.html.twig +++ b/templates/timesheet/export.html.twig @@ -43,7 +43,7 @@ {{ 'label.username'|trans }} {% endif %} {{ 'label.description'|trans }} - {% for field in metaColumns %} + {% for field in timesheetMetaFields %} {{ field.label|trans }} {% endfor %} {{ 'label.hours'|trans }} @@ -70,7 +70,7 @@ {{ 'label.customer'|trans }}: {{ entry.project.customer.name }} - {% for field in metaColumns %} + {% for field in timesheetMetaFields %} {{ tables.datatable_meta_column(entry, field) }} {% endfor %} {{ entry.duration|duration(decimal) }} @@ -83,7 +83,7 @@ {% if showUserColumn %} {% endif %} - {% for field in metaColumns %} + {% for field in timesheetMetaFields %} {% endfor %} {{ 'invoice.total_working_time'|trans }} diff --git a/tests/Export/ServiceExportTest.php b/tests/Export/ServiceExportTest.php index 238791c4..cd0dcb57 100644 --- a/tests/Export/ServiceExportTest.php +++ b/tests/Export/ServiceExportTest.php @@ -48,7 +48,7 @@ class ServiceExportTest extends TestCase { $sut = new ServiceExport(); - $exporter = new HtmlExporter($this->createMock(Environment::class), new EventDispatcher()); + $exporter = new HtmlExporter($this->createMock(Environment::class), new EventDispatcher(), $this->createMock(ProjectRepository::class)); $sut->addTimesheetExporter($exporter); self::assertEquals(1, \count($sut->getTimesheetExporter())); diff --git a/tests/Export/Timesheet/HtmlRendererTest.php b/tests/Export/Timesheet/HtmlRendererTest.php index 11d51f4e..b72ca2d5 100644 --- a/tests/Export/Timesheet/HtmlRendererTest.php +++ b/tests/Export/Timesheet/HtmlRendererTest.php @@ -10,6 +10,7 @@ namespace App\Tests\Export\Timesheet; use App\Export\Timesheet\HtmlRenderer; +use App\Repository\ProjectRepository; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\HttpFoundation\Request; use Twig\Environment; @@ -23,8 +24,9 @@ class HtmlRendererTest extends AbstractRendererTest public function testConfiguration() { $sut = new HtmlRenderer( - $this->getMockBuilder(Environment::class)->disableOriginalConstructor()->getMock(), - new EventDispatcher() + $this->createMock(Environment::class), + new EventDispatcher(), + $this->createMock(ProjectRepository::class) ); $this->assertEquals('print', $sut->getId()); @@ -40,7 +42,7 @@ class HtmlRendererTest extends AbstractRendererTest $request->setLocale('en'); $stack->push($request); - $sut = new HtmlRenderer($twig, new EventDispatcher()); + $sut = new HtmlRenderer($twig, new EventDispatcher(), $this->createMock(ProjectRepository::class)); $response = $this->render($sut);