From 5a0c998d2bc1b40beab5da69558e392f04c479d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Mon, 15 Jul 2024 14:37:15 +0200 Subject: [PATCH] feat: hide past assignments by default, include via filtersetting --- src/Form/AssignmentFilterType.php | 5 +++++ src/Model/AssignmentFilterDto.php | 13 +++++++++++++ src/Repository/AssignmentRepository.php | 7 +++++++ src/Service/Common/AssignmentFilterHandler.php | 4 ++++ templates/common/modal_assignment_filter.html.twig | 1 + 5 files changed, 30 insertions(+) diff --git a/src/Form/AssignmentFilterType.php b/src/Form/AssignmentFilterType.php index 4fee226..b37c9ae 100644 --- a/src/Form/AssignmentFilterType.php +++ b/src/Form/AssignmentFilterType.php @@ -10,6 +10,7 @@ use App\Model\AssignmentFilterDto; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bundle\SecurityBundle\Security; use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\FormBuilderInterface; @@ -51,6 +52,10 @@ class AssignmentFilterType extends AbstractType 'Mehr als einen Woche' => AssignmentFilterDto::DURATION_MORE, ], ]) + ->add('includePast', CheckboxType::class, [ + 'label' => 'vergangene Einsätze anzeigen', + 'required' => false, + ]) ->add('apply', SubmitType::class, [ 'label' => 'filtern', ]) diff --git a/src/Model/AssignmentFilterDto.php b/src/Model/AssignmentFilterDto.php index 8f2f1bd..8627a58 100644 --- a/src/Model/AssignmentFilterDto.php +++ b/src/Model/AssignmentFilterDto.php @@ -18,6 +18,7 @@ class AssignmentFilterDto extends AbstractFilterDto protected ?string $hotel = null; protected ?int $duration = null; protected ?string $status = null; + protected bool $includePast = false; public function getDateFrom(): ?\DateTimeImmutable { @@ -90,4 +91,16 @@ class AssignmentFilterDto extends AbstractFilterDto return $this; } + + public function isIncludePast(): bool + { + return $this->includePast; + } + + public function setIncludePast(bool $includePast): static + { + $this->includePast = $includePast; + + return $this; + } } \ No newline at end of file diff --git a/src/Repository/AssignmentRepository.php b/src/Repository/AssignmentRepository.php index e4a6623..9b79818 100644 --- a/src/Repository/AssignmentRepository.php +++ b/src/Repository/AssignmentRepository.php @@ -110,6 +110,13 @@ class AssignmentRepository extends ServiceEntityRepository private function applyFilterSettings(AssignmentFilterDto $filterDto, QueryBuilder $qb): void { + if (false === $filterDto->isIncludePast()) { + $qb + ->andWhere($qb->expr()->gte('destination.dateFrom', ':now')) + ->setParameter('now', new \DateTimeImmutable()) + ; + } + if (null !== $status = $filterDto->getStatus()) { switch ($status) { case Assignment::STATUS_STAFFED: diff --git a/src/Service/Common/AssignmentFilterHandler.php b/src/Service/Common/AssignmentFilterHandler.php index 8e3940b..d42d62c 100644 --- a/src/Service/Common/AssignmentFilterHandler.php +++ b/src/Service/Common/AssignmentFilterHandler.php @@ -76,6 +76,9 @@ class AssignmentFilterHandler if (isset($data['status'])) { $filterDto->setStatus($data['status']); } + if (isset($data['include_past'])) { + $filterDto->setIncludePast((bool) $data['include_past']); + } return $filterDto; } @@ -89,6 +92,7 @@ class AssignmentFilterHandler 'hotel' => $filterDto->getHotel(), 'duration' => $filterDto->getDuration(), 'status' => $filterDto->getStatus(), + 'include_past' => $filterDto->isIncludePast(), ]); } diff --git a/templates/common/modal_assignment_filter.html.twig b/templates/common/modal_assignment_filter.html.twig index b3344c6..db686c0 100644 --- a/templates/common/modal_assignment_filter.html.twig +++ b/templates/common/modal_assignment_filter.html.twig @@ -13,6 +13,7 @@ {{ form_row(filterForm.jobProfile) }} {{ form_row(filterForm.hotel) }} {{ form_row(filterForm.duration) }} + {{ form_row(filterForm.includePast) }}
{{ form_widget(filterForm.apply, { 'attr': { 'class': 'btn' } }) }}