diff --git a/src/Export/Base/RendererTrait.php b/src/Export/Base/RendererTrait.php index bf091e2e..32b6354c 100644 --- a/src/Export/Base/RendererTrait.php +++ b/src/Export/Base/RendererTrait.php @@ -10,14 +10,14 @@ namespace App\Export\Base; use App\Activity\ActivityStatisticService; -use App\Export\ExportItemInterface; +use App\Invoice\InvoiceItemInterface; use App\Project\ProjectStatisticService; use App\Repository\Query\TimesheetQuery; trait RendererTrait { /** - * @param ExportItemInterface[] $exportItems + * @param InvoiceItemInterface[] $exportItems * @return array */ protected function calculateSummary(array $exportItems) @@ -130,7 +130,7 @@ trait RendererTrait } /** - * @param ExportItemInterface[] $exportItems + * @param InvoiceItemInterface[] $exportItems * @param TimesheetQuery $query * @param ProjectStatisticService $projectStatisticService * @return array @@ -209,7 +209,7 @@ trait RendererTrait } /** - * @param ExportItemInterface[] $exportItems + * @param InvoiceItemInterface[] $exportItems * @param TimesheetQuery $query * @param ActivityStatisticService $activityStatisticService * @return array diff --git a/src/Invoice/Renderer/AbstractTwigRenderer.php b/src/Invoice/Renderer/AbstractTwigRenderer.php index 4ceaf909..7606b966 100644 --- a/src/Invoice/Renderer/AbstractTwigRenderer.php +++ b/src/Invoice/Renderer/AbstractTwigRenderer.php @@ -12,9 +12,7 @@ namespace App\Invoice\Renderer; use App\Entity\InvoiceDocument; use App\Invoice\InvoiceModel; use App\Invoice\RendererInterface; -use App\Twig\LocaleFormatExtensions; -use Symfony\Bridge\Twig\Extension\TranslationExtension; -use Symfony\Contracts\Translation\LocaleAwareInterface; +use App\Twig\TwigRendererTrait; use Twig\Environment; /** @@ -22,6 +20,8 @@ use Twig\Environment; */ abstract class AbstractTwigRenderer implements RendererInterface { + use TwigRendererTrait; + /** * @var Environment */ @@ -34,39 +34,16 @@ abstract class AbstractTwigRenderer implements RendererInterface protected function renderTwigTemplate(InvoiceDocument $document, InvoiceModel $model): string { - $previousLocale = $this->changeTwigLocale($this->twig, $model->getTemplate()->getLanguage()); - - $content = $this->twig->render('@invoice/' . basename($document->getFilename()), [ + $language = $model->getTemplate()->getLanguage(); + $formatLocale = $model->getFormatter()->getLocale(); + $template = '@invoice/' . basename($document->getFilename()); + $options = [ // model should not be used in the future, but we can likely not remove it 'model' => $model, // new since 1.16.7 - templates should only use the pre-generated values 'invoice' => $model->toArray(), - ]); + ]; - $this->changeTwigLocale($this->twig, $previousLocale); - - return $content; - } - - private function changeTwigLocale(Environment $twig, ?string $locale = null): ?string - { - // for invoices that don't have a language configured (using request locale) - if (null === $locale) { - return null; - } - - /** @var TranslationExtension $extension */ - $extension = $twig->getExtension(TranslationExtension::class); - /** @var LocaleAwareInterface $translator */ - $translator = $extension->getTranslator(); - $previousLocale = $translator->getLocale(); - - $translator->setLocale($locale); - - /** @var LocaleFormatExtensions $extension */ - $extension = $twig->getExtension(LocaleFormatExtensions::class); - $extension->setLocale($locale); - - return $previousLocale; + return $this->renderTwigTemplateWithLanguage($this->twig, $template, $options, $language, $formatLocale); } } diff --git a/src/Twig/LocaleFormatExtensions.php b/src/Twig/LocaleFormatExtensions.php index c0c8d6dc..ed709b5b 100644 --- a/src/Twig/LocaleFormatExtensions.php +++ b/src/Twig/LocaleFormatExtensions.php @@ -137,7 +137,7 @@ final class LocaleFormatExtensions extends AbstractExtension return $this->formatter; } - private function getLocale() + public function getLocale(): string { if (null === $this->locale) { $this->locale = \Locale::getDefault(); diff --git a/src/Twig/TwigRendererTrait.php b/src/Twig/TwigRendererTrait.php new file mode 100644 index 00000000..22e84f23 --- /dev/null +++ b/src/Twig/TwigRendererTrait.php @@ -0,0 +1,66 @@ +switchTranslationLocale($twig, $language); + } + if ($formatLocale !== null) { + $previousFormatLocale = $this->switchFormatLocale($twig, $formatLocale); + } + + $content = $twig->render($template, $options); + + if ($previousTranslation !== null) { + $this->switchTranslationLocale($twig, $previousTranslation); + } + if ($previousFormatLocale !== null) { + $this->switchFormatLocale($twig, $previousFormatLocale); + } + + return $content; + } + + protected function switchTranslationLocale(Environment $twig, string $language): string + { + /** @var TranslationExtension $extension */ + $extension = $twig->getExtension(TranslationExtension::class); + /** @var LocaleAwareInterface $translator */ + $translator = $extension->getTranslator(); + $previous = $translator->getLocale(); + $translator->setLocale($language); + + return $previous; + } + + protected function switchFormatLocale(Environment $twig, string $language): string + { + /** @var LocaleFormatExtensions $extension */ + $extension = $twig->getExtension(LocaleFormatExtensions::class); + $previous = $extension->getLocale(); + $extension->setLocale($language); + + return $previous; + } +} diff --git a/templates/export/pdf-layout.html.twig b/templates/export/pdf-layout.html.twig index dabe4010..1aa1cb5d 100644 --- a/templates/export/pdf-layout.html.twig +++ b/templates/export/pdf-layout.html.twig @@ -3,16 +3,18 @@ {% set showRateColumn = showRateColumn ?? is_granted('view_rate_other_timesheet') %} {% set showRateBudget = showRateBudget ?? false %} {% set showTimeBudget = showTimeBudget ?? false %} +{% set showCustomerSummary = showCustomerSummary ?? true %} {% set showTotalSummary = showTotalSummary ?? true %} +{% set showDateTimeShort = showDateTimeShort ?? false %} {% set now = create_date('now', app.user) %} {% set decimal = decimal ?? false %} {# this is only triggered, if a user exports from his personal timesheet screen #} -{% if query.user is not null %} +{% if query is defined and query.user is not null %} {% set showUserColumn = false %} {# if exporting via the admin screen, users without view_rate_own_timesheet might still see their own rates #} {% set showRateColumn = is_granted('view_rate_own_timesheet') %} {% endif %} - +
{% block styles %}