feat: filter timeline by date range and hotels
This commit is contained in:
@@ -49,8 +49,8 @@ class TimelineService
|
||||
foreach ($row as $entry) {
|
||||
/** @var TimelineItem $entry */
|
||||
if (
|
||||
$item->getDateFrom() >= $entry->getDateFrom() && $item->getDateFrom() < $entry->getDateTo()
|
||||
|| $item->getDateTo() >= $entry->getDateFrom() && $item->getDateTo() < $entry->getDateTo()
|
||||
$item->getDateFrom() >= $entry->getDateFrom() && $item->getDateFrom() <= $entry->getDateTo()
|
||||
|| $item->getDateTo() >= $entry->getDateFrom() && $item->getDateTo() <= $entry->getDateTo()
|
||||
) {
|
||||
$addToRow = false;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Service\Common;
|
||||
|
||||
use App\Model\AbstractFilterDto;
|
||||
use App\Model\TimelineFilterDto;
|
||||
use Carbon\CarbonPeriod;
|
||||
|
||||
class TimelineFilterHandler extends AbstractFilterHandler
|
||||
{
|
||||
protected string $namespace = 'filter:timeline';
|
||||
protected ?CarbonPeriod $period = null;
|
||||
|
||||
public function setPeriod(CarbonPeriod $period): void
|
||||
{
|
||||
$this->period = $period;
|
||||
}
|
||||
|
||||
public function getFilterSettings(): TimelineFilterDto
|
||||
{
|
||||
if (null === $data = $this->getSession()->get($this->namespace)) {
|
||||
$filterDto = new TimelineFilterDto();
|
||||
$filterDto->setPeriod($this->period);
|
||||
|
||||
return $filterDto;
|
||||
}
|
||||
|
||||
$filterDto = new TimelineFilterDto();
|
||||
|
||||
// override dates from form in case outside of selectable period
|
||||
$periodFrom = $this->period->first()->toDateTimeImmutable();
|
||||
$periodTo = $this->period->last()->toDateTimeImmutable();
|
||||
|
||||
if (isset($data['date_from'])) {
|
||||
$dateFrom = max($periodFrom, $data['date_from']);
|
||||
$periodFrom = $dateFrom;
|
||||
}
|
||||
if (isset($data['date_to'])) {
|
||||
$dateTo = max($periodTo, $data['date_to']);
|
||||
$periodTo = $dateTo;
|
||||
}
|
||||
if (isset($data['hotels']) && 0 < count($data['hotels'])) {
|
||||
$filterDto->setHotels($data['hotels']);
|
||||
}
|
||||
|
||||
$filterDto->setPeriod(new CarbonPeriod($periodFrom, $periodTo));
|
||||
|
||||
return $filterDto;
|
||||
}
|
||||
|
||||
protected function saveFilterSettings(AbstractFilterDto $filterDto): void
|
||||
{
|
||||
/** @var TimelineFilterDto $filterDto */
|
||||
$this->getSession()->set($this->namespace, [
|
||||
'date_from' => $filterDto->getDateFrom(),
|
||||
'date_to' => $filterDto->getDateTo(),
|
||||
'hotels' => $filterDto->getHotels(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user