From 947b183c503b2e7b06909d21bce16862582bc82e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Tue, 8 Apr 2025 17:48:44 +0200 Subject: [PATCH] feat: filter assignments and applications by country closes #8698fpqq5 --- src/Form/ApplicationFilterType.php | 13 ++++++++++++- src/Form/AssignmentFilterType.php | 13 ++++++++++++- src/Model/ApplicationFilterDto.php | 15 ++++++++++++++- src/Model/AssignmentFilterDto.php | 13 +++++++++++++ src/Repository/ApplicationRepository.php | 7 +++++++ src/Repository/AssignmentRepository.php | 7 +++++++ src/Service/Common/ApplicationFilterHandler.php | 4 ++++ src/Service/Common/AssignmentFilterHandler.php | 4 ++++ .../common/modal_application_filter.html.twig | 3 ++- .../common/modal_assignment_filter.html.twig | 3 ++- 10 files changed, 77 insertions(+), 5 deletions(-) diff --git a/src/Form/ApplicationFilterType.php b/src/Form/ApplicationFilterType.php index 3308229..915752b 100644 --- a/src/Form/ApplicationFilterType.php +++ b/src/Form/ApplicationFilterType.php @@ -63,6 +63,17 @@ class ApplicationFilterType extends AbstractType 'label' => 'vergangene Einsätze anzeigen', 'required' => false, ]) + ->add('country', ChoiceType::class, [ + 'label' => 'Land', + 'required' => false, + 'placeholder' => 'nicht filtern', + 'choices' => [ + 'Österreich' => 'a', + 'Schweiz' => 'ch', + 'Frankreich' => 'f', + 'Italien' => 'i', + ], + ]) ->add('apply', SubmitType::class, [ 'label' => 'filtern', ]) @@ -127,4 +138,4 @@ class ApplicationFilterType extends AbstractType ->setAllowedTypes('max_date', [\DateTimeImmutable::class, 'null']) ; } -} \ No newline at end of file +} diff --git a/src/Form/AssignmentFilterType.php b/src/Form/AssignmentFilterType.php index b3e63b0..fe1079b 100644 --- a/src/Form/AssignmentFilterType.php +++ b/src/Form/AssignmentFilterType.php @@ -66,6 +66,17 @@ class AssignmentFilterType extends AbstractType 'label' => 'vergangene Einsätze anzeigen', 'required' => false, ]) + ->add('country', ChoiceType::class, [ + 'label' => 'Land', + 'required' => false, + 'placeholder' => 'nicht filtern', + 'choices' => [ + 'Österreich' => 'a', + 'Schweiz' => 'ch', + 'Frankreich' => 'f', + 'Italien' => 'i', + ], + ]) ->add('apply', SubmitType::class, [ 'label' => 'filtern', ]) @@ -130,4 +141,4 @@ class AssignmentFilterType extends AbstractType ->setAllowedTypes('max_date', [\DateTimeImmutable::class, 'null']) ; } -} \ No newline at end of file +} diff --git a/src/Model/ApplicationFilterDto.php b/src/Model/ApplicationFilterDto.php index 07fb30e..bc681bd 100644 --- a/src/Model/ApplicationFilterDto.php +++ b/src/Model/ApplicationFilterDto.php @@ -17,6 +17,7 @@ class ApplicationFilterDto extends AbstractFilterDto protected ?int $duration = null; protected array $status = []; protected bool $includePast = false; + protected ?string $country = null; public function getId(): ?int { @@ -113,4 +114,16 @@ class ApplicationFilterDto extends AbstractFilterDto return $this; } -} \ No newline at end of file + + public function getCountry(): ?string + { + return $this->country; + } + + public function setCountry(?string $country): static + { + $this->country = $country; + + return $this; + } +} diff --git a/src/Model/AssignmentFilterDto.php b/src/Model/AssignmentFilterDto.php index 84ea219..6bcc451 100644 --- a/src/Model/AssignmentFilterDto.php +++ b/src/Model/AssignmentFilterDto.php @@ -17,6 +17,7 @@ class AssignmentFilterDto extends AbstractFilterDto protected ?int $duration = null; protected array $status = []; protected bool $includePast = false; + protected ?string $country = null; public function getId(): ?int { @@ -113,4 +114,16 @@ class AssignmentFilterDto extends AbstractFilterDto return $this; } + + public function getCountry(): ?string + { + return $this->country; + } + + public function setCountry(?string $country): static + { + $this->country = $country; + + return $this; + } } diff --git a/src/Repository/ApplicationRepository.php b/src/Repository/ApplicationRepository.php index a981e8a..83e7878 100644 --- a/src/Repository/ApplicationRepository.php +++ b/src/Repository/ApplicationRepository.php @@ -102,6 +102,13 @@ class ApplicationRepository extends ServiceEntityRepository } } + if (null !== $country = $filterDto->getCountry()) { + $qb + ->andWhere($qb->expr()->eq('destination.country', ':country')) + ->setParameter('country', $country) + ; + } + return $qb->getQuery(); } diff --git a/src/Repository/AssignmentRepository.php b/src/Repository/AssignmentRepository.php index 324265a..ed896ff 100644 --- a/src/Repository/AssignmentRepository.php +++ b/src/Repository/AssignmentRepository.php @@ -169,6 +169,13 @@ class AssignmentRepository extends ServiceEntityRepository ; } } + + if (null !== $country = $filterDto->getCountry()) { + $qb + ->andWhere($qb->expr()->eq('destination.country', ':country')) + ->setParameter('country', $country) + ; + } } public function getBookmarkQueryForTeamer(Teamer $teamer): Query diff --git a/src/Service/Common/ApplicationFilterHandler.php b/src/Service/Common/ApplicationFilterHandler.php index f4ee179..5075f2e 100644 --- a/src/Service/Common/ApplicationFilterHandler.php +++ b/src/Service/Common/ApplicationFilterHandler.php @@ -48,6 +48,9 @@ class ApplicationFilterHandler extends AbstractFilterHandler if (isset($data['include_past'])) { $filterDto->setIncludePast((bool) $data['include_past']); } + if (isset($data['country'])) { + $filterDto->setCountry($data['country']); + } return $filterDto; } @@ -66,6 +69,7 @@ class ApplicationFilterHandler extends AbstractFilterHandler 'duration' => $filterDto->getDuration(), 'status' => $filterDto->getStatus(), 'include_past' => $filterDto->isIncludePast(), + 'country' => $filterDto->getCountry(), ]); } } diff --git a/src/Service/Common/AssignmentFilterHandler.php b/src/Service/Common/AssignmentFilterHandler.php index a6f961c..b654540 100644 --- a/src/Service/Common/AssignmentFilterHandler.php +++ b/src/Service/Common/AssignmentFilterHandler.php @@ -48,6 +48,9 @@ class AssignmentFilterHandler extends AbstractFilterHandler if (isset($data['include_past'])) { $filterDto->setIncludePast((bool) $data['include_past']); } + if (isset($data['country'])) { + $filterDto->setCountry($data['country']); + } return $filterDto; } @@ -66,6 +69,7 @@ class AssignmentFilterHandler extends AbstractFilterHandler 'duration' => $filterDto->getDuration(), 'status' => $filterDto->getStatus(), 'include_past' => $filterDto->isIncludePast(), + 'country' => $filterDto->getCountry(), ]); } } diff --git a/templates/common/modal_application_filter.html.twig b/templates/common/modal_application_filter.html.twig index f173a45..9cb2d4b 100644 --- a/templates/common/modal_application_filter.html.twig +++ b/templates/common/modal_application_filter.html.twig @@ -18,6 +18,7 @@ {{ form_row(filterForm.jobProfiles) }} {{ form_row(filterForm.hotels) }} {{ form_row(filterForm.duration) }} + {{ form_row(filterForm.country) }} {{ form_row(filterForm.includePast) }}
@@ -26,4 +27,4 @@
{{ form_rest(filterForm) }} {{ form_end(filterForm) }} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/common/modal_assignment_filter.html.twig b/templates/common/modal_assignment_filter.html.twig index a155a01..631908a 100644 --- a/templates/common/modal_assignment_filter.html.twig +++ b/templates/common/modal_assignment_filter.html.twig @@ -18,6 +18,7 @@ {{ form_row(filterForm.jobProfiles) }} {{ form_row(filterForm.hotels) }} {{ form_row(filterForm.duration) }} + {{ form_row(filterForm.country) }} {{ form_row(filterForm.includePast) }}
@@ -26,4 +27,4 @@
{{ form_rest(filterForm) }} {{ form_end(filterForm) }} -{% endblock %} \ No newline at end of file +{% endblock %}