From 611f2b8eb8fc46dfa8fabadc630b1c86a5e3db32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Mon, 15 Jul 2024 14:44:05 +0200 Subject: [PATCH] feat: filter teamers by training attendances --- src/Form/TeamerFilterType.php | 4 ++++ src/Model/TeamerFilterDto.php | 11 +++++++++++ src/Repository/TeamerRepository.php | 7 +++++++ src/Service/Common/TeamerFilterHandler.php | 2 ++ templates/common/modal_teamer_filter.html.twig | 1 + 5 files changed, 25 insertions(+) diff --git a/src/Form/TeamerFilterType.php b/src/Form/TeamerFilterType.php index 4f573ab..0e3069b 100644 --- a/src/Form/TeamerFilterType.php +++ b/src/Form/TeamerFilterType.php @@ -50,6 +50,10 @@ class TeamerFilterType extends AbstractType ->orderBy('job_profile.name', 'ASC'); }, ]) + ->add('noTrainings', CheckboxType::class, [ + 'label' => 'an keinen Fortbildungen teilgenommen', + 'required' => false, + ]) ->add('apply', SubmitType::class, [ 'label' => 'filtern', ]) diff --git a/src/Model/TeamerFilterDto.php b/src/Model/TeamerFilterDto.php index 14b74a7..c108ad6 100644 --- a/src/Model/TeamerFilterDto.php +++ b/src/Model/TeamerFilterDto.php @@ -13,6 +13,7 @@ class TeamerFilterDto extends AbstractFilterDto protected string $pickupId = ''; protected bool $skiLicense = false; protected bool $snowboardLicense = false; + protected bool $noTrainings = false; public function getName(): ?string { @@ -97,4 +98,14 @@ class TeamerFilterDto extends AbstractFilterDto return $this; } + + public function hasNoTrainings(): bool + { + return $this->noTrainings; + } + + public function setNoTrainings(bool $noTrainings): void + { + $this->noTrainings = $noTrainings; + } } \ No newline at end of file diff --git a/src/Repository/TeamerRepository.php b/src/Repository/TeamerRepository.php index 73b6bf2..4a2e2c1 100644 --- a/src/Repository/TeamerRepository.php +++ b/src/Repository/TeamerRepository.php @@ -94,6 +94,13 @@ class TeamerRepository extends ServiceEntityRepository ; } + if (true === $filterDto->hasNoTrainings()) { + $qb + ->leftJoin('teamer.trainingAttendances', 'training_attendance') + ->andWhere($qb->expr()->isNull('training_attendance')) + ; + } + return $qb->getQuery(); } } diff --git a/src/Service/Common/TeamerFilterHandler.php b/src/Service/Common/TeamerFilterHandler.php index 311004f..556c82d 100644 --- a/src/Service/Common/TeamerFilterHandler.php +++ b/src/Service/Common/TeamerFilterHandler.php @@ -60,6 +60,7 @@ class TeamerFilterHandler ->setPickupId($data['pickup_id']) ->setSkiLicense($data['ski_license']) ->setSnowboardLicense($data['snowboard_license']) + ->setNoTrainings($data['no_trainings']) ; if (0 < (int) $data['job_profile']) { @@ -84,6 +85,7 @@ class TeamerFilterHandler 'ski_license' => $filterDto->hasSkiLicense(), 'snowboard_license' => $filterDto->hasSnowboardLicense(), 'job_profile' => $filterDto->getJobProfile()?->getId(), + 'no_trainings' => $filterDto->hasNoTrainings(), ]); } diff --git a/templates/common/modal_teamer_filter.html.twig b/templates/common/modal_teamer_filter.html.twig index bbf939c..3d4f967 100644 --- a/templates/common/modal_teamer_filter.html.twig +++ b/templates/common/modal_teamer_filter.html.twig @@ -12,6 +12,7 @@ {{ form_row(filterForm.pickupId) }} {{ form_row(filterForm.skiLicense) }} {{ form_row(filterForm.snowboardLicense) }} + {{ form_row(filterForm.noTrainings) }}
{{ form_widget(filterForm.apply, { 'attr': { 'class': 'btn' } }) }}