feat: filter availabilities
addresses #869at5k4f
This commit is contained in:
@@ -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()),
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user