Configurable PDF exports (#5641)

This commit is contained in:
Kevin Papst
2025-09-23 18:32:31 +02:00
committed by GitHub
parent 5d3e46cce2
commit 6d78c6ba36
107 changed files with 2428 additions and 1575 deletions

View File

@@ -31,7 +31,7 @@ final class ServiceExport
*/
private array $renderer = [];
/**
* @var TimesheetExportInterface[]
* @var ExportRendererInterface[]
*/
private array $timesheetExporter = [];
/**
@@ -79,7 +79,12 @@ final class ServiceExport
*/
public function getRenderer(): array
{
$renderer = [];
$renderer = [
$this->csvRendererFactory->createDefault(),
$this->xlsxRendererFactory->createDefault(),
$this->pdfRendererFactory->create('pdf', 'export/pdf-layout.html.twig', 'default'),
$this->htmlRendererFactory->create('html', 'export/print.html.twig'),
];
foreach ($this->exportTemplateRepository->findAll() as $template) {
$tpl = new Template((string) $template->getId(), $template->getTitle()); // @phpstan-ignore argument.type
@@ -96,6 +101,10 @@ final class ServiceExport
$renderer[] = $this->xlsxRendererFactory->create($tpl);
break;
case 'pdf':
$renderer[] = $this->pdfRendererFactory->createFromTemplate($tpl);
break;
default:
$this->logger->error('Unknown export template type: ' . $template->getRenderer());
break;
@@ -115,7 +124,7 @@ final class ServiceExport
continue;
}
$renderer[] = $this->htmlRendererFactory->create($tplName, $tplName);
$renderer[] = $this->htmlRendererFactory->create($tplName, '@export/' . $tplName);
}
}
@@ -127,7 +136,7 @@ final class ServiceExport
continue;
}
$renderer[] = $this->pdfRendererFactory->create($tplName, $tplName);
$renderer[] = $this->pdfRendererFactory->create($tplName, '@export/' . $tplName);
}
}
}
@@ -146,20 +155,27 @@ final class ServiceExport
return null;
}
public function addTimesheetExporter(TimesheetExportInterface $exporter): void
public function addTimesheetExporter(ExportRendererInterface $exporter): void
{
$this->timesheetExporter[] = $exporter;
}
/**
* @return TimesheetExportInterface[]
* @return ExportRendererInterface[]
*/
public function getTimesheetExporter(): array
{
return $this->timesheetExporter;
$exporter = [
$this->pdfRendererFactory->create('pdf', '@export/timesheet.pdf.twig'),
$this->xlsxRendererFactory->createDefault(),
$this->csvRendererFactory->createDefault(),
$this->htmlRendererFactory->create('print', 'timesheet/export.html.twig'),
];
return array_merge($this->timesheetExporter, $exporter);
}
public function getTimesheetExporterById(string $id): ?TimesheetExportInterface
public function getTimesheetExporterById(string $id): ?ExportRendererInterface
{
foreach ($this->getTimesheetExporter() as $exporter) {
if ($exporter->getId() === $id) {