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',
'required' => false,
])
->add('dateFrom', DatepickerType::class, [
'label' => 'verfügbar ab',
])
->add('dateTo', DatepickerType::class, [
'label' => 'verfügbar bis',
->add('availableAt', DatepickerType::class, [
'label' => 'verfügbar am',
])
->add('pickupId', BpnPickupType::class, [
'label' => 'Buszustieg',
+5 -20
View File
@@ -2,13 +2,10 @@
namespace App\Model;
use App\Entity\JobProfile;
class TeamerFilterDto extends AbstractFilterDto
{
protected ?string $name = null;
protected ?\DateTimeImmutable $dateFrom = null;
protected ?\DateTimeImmutable $dateTo = null;
protected ?\DateTimeImmutable $availableAt = null;
protected array $jobProfiles = [];
protected string $pickupId = '';
protected bool $skiLicense = false;
@@ -27,26 +24,14 @@ class TeamerFilterDto extends AbstractFilterDto
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;
return $this;
}
public function getDateTo(): ?\DateTimeImmutable
{
return $this->dateTo;
}
public function setDateTo(?\DateTimeImmutable $dateTo): static
{
$this->dateTo = $dateTo;
$this->availableAt = $availableAt;
return $this;
}
+6 -10
View File
@@ -52,17 +52,13 @@ class TeamerRepository extends ServiceEntityRepository
;
}
if (null !== $filterDto->getDateFrom()) {
if (null !== $filterDto->getAvailableAt()) {
$qb
->andWhere($qb->expr()->gte('availability.dateFrom', ':dateFrom'))
->setParameter('dateFrom', $filterDto->getDateFrom())
;
}
if (null !== $filterDto->getDateTo()) {
$qb
->andWhere($qb->expr()->lte('availability.dateTo', ':dateTo'))
->setParameter('dateTo', $filterDto->getDateTo())
->andWhere($qb->expr()->andX(
$qb->expr()->lte('availability.dateFrom', ':availableAt'),
$qb->expr()->gte('availability.dateTo', ':availableAt')
))
->setParameter('availableAt', $filterDto->getAvailableAt())
;
}
+2 -4
View File
@@ -55,8 +55,7 @@ class TeamerFilterHandler
$filterDto
->setName($data['name'])
->setDateFrom($data['date_from'])
->setDateTo($data['date_to'])
->setAvailableAt($data['available_at'])
->setPickupId($data['pickup_id'])
->setSkiLicense($data['ski_license'])
->setSnowboardLicense($data['snowboard_license'])
@@ -79,8 +78,7 @@ class TeamerFilterHandler
{
$this->getSession()->set($this->namespace, [
'name' => $filterDto->getName(),
'date_from' => $filterDto->getDateFrom(),
'date_to' => $filterDto->getDateTo(),
'available_at' => $filterDto->getAvailableAt(),
'pickup_id' => $filterDto->getPickupId(),
'ski_license' => $filterDto->hasSkiLicense(),
'snowboard_license' => $filterDto->hasSnowboardLicense(),
@@ -6,8 +6,7 @@
{{ 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">
{{ form_row(filterForm.name) }}
{{ form_row(filterForm.dateFrom) }}
{{ form_row(filterForm.dateTo) }}
{{ form_row(filterForm.availableAt) }}
{{ form_row(filterForm.jobProfiles) }}
{{ form_row(filterForm.pickupId) }}
{{ form_row(filterForm.skiLicense) }}