feat: filter availabilities

addresses #869at5k4f
This commit is contained in:
Björn Fromme
2026-08-24 12:22:34 +02:00
parent 6795a668da
commit 4ae23bf8a1
8 changed files with 344 additions and 6 deletions
@@ -0,0 +1,61 @@
<?php
namespace App\Service\Common;
use App\Entity\JobProfile;
use App\Entity\Teamer;
use App\Model\AbstractFilterDto;
use App\Model\AvailabilityFilterDto;
class AvailabilityFilterHandler extends AbstractFilterHandler
{
protected string $namespace = 'filter:availability';
protected string $modelClass = AvailabilityFilterDto::class;
public function getFilterSettings(): AvailabilityFilterDto
{
$filterDto = new $this->modelClass();
if (null === $data = $this->getSession()->get($this->namespace)) {
return $filterDto;
}
$filterDto
->setDateFrom($data['date_from'])
->setDateTo($data['date_to'])
;
if (isset($data['teamer_id'])) {
$teamer = $this
->entityManager
->getRepository(Teamer::class)
->find($data['teamer_id'])
;
$filterDto->setTeamer($teamer);
}
if (isset($data['job_profiles']) && 0 < count($data['job_profiles'])) {
$jobProfiles = $this
->entityManager
->getRepository(JobProfile::class)
->findBy(['id' => $data['job_profiles']])
;
$filterDto->setJobProfiles($jobProfiles);
}
return $filterDto;
}
protected function saveFilterSettings(AbstractFilterDto $filterDto): void
{
/* @var AvailabilityFilterDto $filterDto */
$this->getSession()->set($this->namespace, [
'date_from' => $filterDto->getDateFrom(),
'date_to' => $filterDto->getDateTo(),
'teamer_id' => $filterDto->getTeamer()?->getId(),
'job_profiles' => array_map(function (JobProfile $jobProfile) {
return $jobProfile->getId();
}, $filterDto->getJobProfiles()),
]);
}
}