feat: filter teamer by availability at selected date

This commit is contained in:
Björn Fromme
2024-07-18 17:34:42 +02:00
parent 3e908f03cb
commit 68f806a6c5
5 changed files with 16 additions and 41 deletions
+2 -5
View File
@@ -22,11 +22,8 @@ class TeamerFilterType extends AbstractType
'label' => 'Name', 'label' => 'Name',
'required' => false, 'required' => false,
]) ])
->add('dateFrom', DatepickerType::class, [ ->add('availableAt', DatepickerType::class, [
'label' => 'verfügbar ab', 'label' => 'verfügbar am',
])
->add('dateTo', DatepickerType::class, [
'label' => 'verfügbar bis',
]) ])
->add('pickupId', BpnPickupType::class, [ ->add('pickupId', BpnPickupType::class, [
'label' => 'Buszustieg', 'label' => 'Buszustieg',
+5 -20
View File
@@ -2,13 +2,10 @@
namespace App\Model; namespace App\Model;
use App\Entity\JobProfile;
class TeamerFilterDto extends AbstractFilterDto class TeamerFilterDto extends AbstractFilterDto
{ {
protected ?string $name = null; protected ?string $name = null;
protected ?\DateTimeImmutable $dateFrom = null; protected ?\DateTimeImmutable $availableAt = null;
protected ?\DateTimeImmutable $dateTo = null;
protected array $jobProfiles = []; protected array $jobProfiles = [];
protected string $pickupId = ''; protected string $pickupId = '';
protected bool $skiLicense = false; protected bool $skiLicense = false;
@@ -27,26 +24,14 @@ class TeamerFilterDto extends AbstractFilterDto
return $this; return $this;
} }
public function getDateFrom(): ?\DateTimeImmutable public function getAvailableAt(): ?\DateTimeImmutable
{ {
return $this->dateFrom; return $this->availableAt;
} }
public function setDateFrom(?\DateTimeImmutable $dateFrom): static public function setAvailableAt(?\DateTimeImmutable $availableAt): static
{ {
$this->dateFrom = $dateFrom; $this->availableAt = $availableAt;
return $this;
}
public function getDateTo(): ?\DateTimeImmutable
{
return $this->dateTo;
}
public function setDateTo(?\DateTimeImmutable $dateTo): static
{
$this->dateTo = $dateTo;
return $this; return $this;
} }
+6 -10
View File
@@ -52,17 +52,13 @@ class TeamerRepository extends ServiceEntityRepository
; ;
} }
if (null !== $filterDto->getDateFrom()) { if (null !== $filterDto->getAvailableAt()) {
$qb $qb
->andWhere($qb->expr()->gte('availability.dateFrom', ':dateFrom')) ->andWhere($qb->expr()->andX(
->setParameter('dateFrom', $filterDto->getDateFrom()) $qb->expr()->lte('availability.dateFrom', ':availableAt'),
; $qb->expr()->gte('availability.dateTo', ':availableAt')
} ))
->setParameter('availableAt', $filterDto->getAvailableAt())
if (null !== $filterDto->getDateTo()) {
$qb
->andWhere($qb->expr()->lte('availability.dateTo', ':dateTo'))
->setParameter('dateTo', $filterDto->getDateTo())
; ;
} }
+2 -4
View File
@@ -55,8 +55,7 @@ class TeamerFilterHandler
$filterDto $filterDto
->setName($data['name']) ->setName($data['name'])
->setDateFrom($data['date_from']) ->setAvailableAt($data['available_at'])
->setDateTo($data['date_to'])
->setPickupId($data['pickup_id']) ->setPickupId($data['pickup_id'])
->setSkiLicense($data['ski_license']) ->setSkiLicense($data['ski_license'])
->setSnowboardLicense($data['snowboard_license']) ->setSnowboardLicense($data['snowboard_license'])
@@ -79,8 +78,7 @@ class TeamerFilterHandler
{ {
$this->getSession()->set($this->namespace, [ $this->getSession()->set($this->namespace, [
'name' => $filterDto->getName(), 'name' => $filterDto->getName(),
'date_from' => $filterDto->getDateFrom(), 'available_at' => $filterDto->getAvailableAt(),
'date_to' => $filterDto->getDateTo(),
'pickup_id' => $filterDto->getPickupId(), 'pickup_id' => $filterDto->getPickupId(),
'ski_license' => $filterDto->hasSkiLicense(), 'ski_license' => $filterDto->hasSkiLicense(),
'snowboard_license' => $filterDto->hasSnowboardLicense(), 'snowboard_license' => $filterDto->hasSnowboardLicense(),
@@ -6,8 +6,7 @@
{{ form_start(filterForm, { 'attr': { 'hx-post': app.request.uri, 'hx-target': '#htmx-modal', 'hx-swap': 'outerHTML'} }) }} {{ form_start(filterForm, { 'attr': { 'hx-post': app.request.uri, 'hx-target': '#htmx-modal', 'hx-swap': 'outerHTML'} }) }}
<div class="flex flex-col space-y-2 pb-2"> <div class="flex flex-col space-y-2 pb-2">
{{ form_row(filterForm.name) }} {{ form_row(filterForm.name) }}
{{ form_row(filterForm.dateFrom) }} {{ form_row(filterForm.availableAt) }}
{{ form_row(filterForm.dateTo) }}
{{ form_row(filterForm.jobProfiles) }} {{ form_row(filterForm.jobProfiles) }}
{{ form_row(filterForm.pickupId) }} {{ form_row(filterForm.pickupId) }}
{{ form_row(filterForm.skiLicense) }} {{ form_row(filterForm.skiLicense) }}