customize html and pdf exports with twig templates (#1582)

This commit is contained in:
Kevin Papst
2020-03-23 01:51:02 +01:00
committed by GitHub
parent 1ca1b00d11
commit 33f76f426c
32 changed files with 895 additions and 307 deletions

View File

@@ -17,6 +17,7 @@ use App\Event\ProjectMetaDisplayEvent;
use App\Event\TimesheetMetaDisplayEvent;
use App\Event\UserPreferenceDisplayEvent;
use App\Export\ExportItemInterface;
use App\Repository\ProjectRepository;
use App\Repository\Query\CustomerQuery;
use App\Repository\Query\TimesheetQuery;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
@@ -35,11 +36,24 @@ class HtmlRenderer
* @var EventDispatcherInterface
*/
protected $dispatcher;
/**
* @var ProjectRepository
*/
private $projectRepository;
/**
* @var string
*/
private $id = 'html';
/**
* @var string
*/
private $template = 'default.html.twig';
public function __construct(Environment $twig, EventDispatcherInterface $dispatcher)
public function __construct(Environment $twig, EventDispatcherInterface $dispatcher, ProjectRepository $projectRepository)
{
$this->twig = $twig;
$this->dispatcher = $dispatcher;
$this->projectRepository = $projectRepository;
}
/**
@@ -87,10 +101,13 @@ class HtmlRenderer
$this->dispatcher->dispatch($event);
$userPreferences = $event->getPreferences();
$content = $this->twig->render('export/renderer/default.html.twig', array_merge([
$summary = $this->calculateSummary($timesheets);
$content = $this->twig->render($this->getTemplate(), array_merge([
'entries' => $timesheets,
'query' => $query,
'summaries' => $this->calculateSummary($timesheets),
'summaries' => $summary,
'budgets' => $this->calculateProjectBudget($timesheets, $query, $this->projectRepository),
'timesheetMetaFields' => $timesheetMetaFields,
'customerMetaFields' => $customerMetaFields,
'projectMetaFields' => $projectMetaFields,
@@ -104,8 +121,27 @@ class HtmlRenderer
return $response;
}
protected function getTemplate(): string
{
return '@export/' . $this->template;
}
public function setTemplate(string $filename): HtmlRenderer
{
$this->template = $filename;
return $this;
}
public function setId(string $id): HtmlRenderer
{
$this->id = $id;
return $this;
}
public function getId(): string
{
return 'html';
return $this->id;
}
}