From ae6beff5d8b18b41ba9704475908a719e4f705d4 Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Fri, 5 Jun 2020 12:25:56 +0200 Subject: [PATCH] Allow to recalculate rates via bulk edit (#1768) --- .../TimesheetAbstractController.php | 13 +++++++--- src/Form/MultiUpdate/TimesheetMultiUpdate.php | 6 ++++- .../MultiUpdate/TimesheetMultiUpdateDTO.php | 24 +++++++++++++++---- templates/export/pdf-layout.html.twig | 4 ++-- translations/messages.de.xlf | 4 ++++ translations/messages.en.xlf | 4 ++++ 6 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/Controller/TimesheetAbstractController.php b/src/Controller/TimesheetAbstractController.php index 8fc12e0c..1a226467 100644 --- a/src/Controller/TimesheetAbstractController.php +++ b/src/Controller/TimesheetAbstractController.php @@ -330,14 +330,21 @@ abstract class TimesheetAbstractController extends AbstractController $timesheet->setExported($dto->isExported()); $execute = true; } - // setting both values allows to erase wrong - if (null !== $dto->getHourlyRate()) { + + if ($dto->isRecalculateRates()) { $timesheet->setFixedRate(null); - $timesheet->setHourlyRate($dto->getHourlyRate()); + $timesheet->setHourlyRate(null); + $timesheet->setInternalRate(null); $execute = true; } elseif (null !== $dto->getFixedRate()) { $timesheet->setFixedRate($dto->getFixedRate()); $timesheet->setHourlyRate(null); + $timesheet->setInternalRate(null); + $execute = true; + } elseif (null !== $dto->getHourlyRate()) { + $timesheet->setFixedRate(null); + $timesheet->setInternalRate(null); + $timesheet->setHourlyRate($dto->getHourlyRate()); $execute = true; } } diff --git a/src/Form/MultiUpdate/TimesheetMultiUpdate.php b/src/Form/MultiUpdate/TimesheetMultiUpdate.php index d4ae4669..c2085305 100644 --- a/src/Form/MultiUpdate/TimesheetMultiUpdate.php +++ b/src/Form/MultiUpdate/TimesheetMultiUpdate.php @@ -198,12 +198,16 @@ class TimesheetMultiUpdate extends AbstractType if ($options['include_rate']) { $builder + ->add('recalculateRates', YesNoType::class, [ + 'label' => 'label.recalculate_rates', + ]) ->add('fixedRate', FixedRateType::class, [ 'currency' => $currency, ]) ->add('hourlyRate', HourlyRateType::class, [ 'currency' => $currency, - ]); + ]) + ; } $builder->add('entities', HiddenType::class, [ diff --git a/src/Form/MultiUpdate/TimesheetMultiUpdateDTO.php b/src/Form/MultiUpdate/TimesheetMultiUpdateDTO.php index 33c6a7f0..12a65de3 100644 --- a/src/Form/MultiUpdate/TimesheetMultiUpdateDTO.php +++ b/src/Form/MultiUpdate/TimesheetMultiUpdateDTO.php @@ -29,6 +29,10 @@ class TimesheetMultiUpdateDTO extends MultiUpdateTableDTO * @var bool */ private $replaceTags = false; + /** + * @var bool + */ + private $recalculateRates = false; /** * @var Customer|null */ @@ -50,13 +54,13 @@ class TimesheetMultiUpdateDTO extends MultiUpdateTableDTO */ private $exported = null; /** - * @var float + * @var float|null */ - private $fixedRate; + private $fixedRate = null; /** - * @var float + * @var float|null */ - private $hourlyRate; + private $hourlyRate = null; public function getCustomer(): ?Customer { @@ -133,6 +137,18 @@ class TimesheetMultiUpdateDTO extends MultiUpdateTableDTO return $this; } + public function isRecalculateRates(): bool + { + return $this->recalculateRates; + } + + public function setRecalculateRates(bool $recalculateRates): TimesheetMultiUpdateDTO + { + $this->recalculateRates = $recalculateRates; + + return $this; + } + public function isReplaceTags(): bool { return $this->replaceTags; diff --git a/templates/export/pdf-layout.html.twig b/templates/export/pdf-layout.html.twig index 1531095c..02c31734 100644 --- a/templates/export/pdf-layout.html.twig +++ b/templates/export/pdf-layout.html.twig @@ -278,9 +278,9 @@ mpdf--> {% set entryRateInternal = '–' %} {% endif %} {% if showInternalRate %} - {{ entryRate }} + {{ entryRateInternal }} {% endif %} - {{ entryRateInternal }} + {{ entryRate }} {% endif %} {% endfor %} diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index 3715772d..ef2c3933 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -304,6 +304,10 @@ help.rate_internal Interner Verrechnungswert (wenn dieser nicht angegeben ist, wird der normale Satz verwendet) + + label.recalculate_rates + Preise neu berechnen + label.language Sprache diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index dbe2643f..49f99585 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -304,6 +304,10 @@ help.rate_internal Internal costs (if this is not specified, the normal rate is used) + + label.recalculate_rates + Recalculate rates + label.language Language