diff --git a/src/Controller/Common/TimelineFilterController.php b/src/Controller/Common/TimelineFilterController.php index e55210d..65093b3 100644 --- a/src/Controller/Common/TimelineFilterController.php +++ b/src/Controller/Common/TimelineFilterController.php @@ -36,7 +36,7 @@ class TimelineFilterController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $this->filterHandler->handleRequest($form); - $returnUrl = $this->getReturnUrl($request, 'app_administrative_assignment_timeline'); + $returnUrl = $this->getReturnUrl($request, 'app_administrative_timeline'); return new HxRedirectResponse($returnUrl); } @@ -51,7 +51,7 @@ class TimelineFilterController extends AbstractController public function reset(Request $request): Response { $this->filterHandler->resetFilterSettings(); - $returnUrl = $this->getReturnUrl($request, 'app_administrative_assignment_timeline'); + $returnUrl = $this->getReturnUrl($request, 'app_administrative_timeline'); return $this->redirect($returnUrl); } diff --git a/src/Model/TimelineItem.php b/src/Model/TimelineItem.php index 18350a2..fe9d8ff 100644 --- a/src/Model/TimelineItem.php +++ b/src/Model/TimelineItem.php @@ -10,6 +10,7 @@ class TimelineItem public const TYPE_ASSIGNMENT = 'assignment'; public const TYPE_DISPOSITION = 'disposition'; + private ?int $dispositionId = null; private ?\DateTimeImmutable $dateFrom = null; private ?\DateTimeImmutable $dateTo = null; private ?string $status = null; @@ -44,6 +45,7 @@ class TimelineItem $dateTo = $assignment->getDestination()->getDateTo(); return (new static($assignment->getId(), static::TYPE_DISPOSITION)) + ->setDispositionId($disposition->getId()) ->setDateFrom($dateFrom) ->setDateTo($dateTo) ->setJobProfile($assignment->getJobProfile()->getName()) @@ -64,6 +66,18 @@ class TimelineItem return $this->type; } + public function getDispositionId(): ?int + { + return $this->dispositionId; + } + + public function setDispositionId(?int $dispositionId): static + { + $this->dispositionId = $dispositionId; + + return $this; + } + public function getDateFrom(): ?\DateTimeImmutable { return $this->dateFrom; diff --git a/src/Service/Assignment/TimelineService.php b/src/Service/Assignment/TimelineService.php index d43ddd5..23affac 100644 --- a/src/Service/Assignment/TimelineService.php +++ b/src/Service/Assignment/TimelineService.php @@ -41,33 +41,24 @@ class TimelineService private function addItem(array &$rows, TimelineItem $item): void { - $itemAdded = false; + $rowIndex = 0; foreach ($rows as $index => $row) { - $addToRow = true; - + $fitsRow = true; foreach ($row as $entry) { /** @var TimelineItem $entry */ - if ( - $item->getDateFrom() >= $entry->getDateFrom() && $item->getDateFrom() <= $entry->getDateTo() - || $item->getDateTo() >= $entry->getDateFrom() && $item->getDateTo() <= $entry->getDateTo() - ) { - $addToRow = false; + if ($entry->getDateTo() >= $item->getDateFrom() && $entry->getDateFrom() <= $item->getDateTo()) { + $fitsRow = false; } } - - if (true === $addToRow) { - $rows[$index][$item->getKey()] = $item; - $itemAdded = true; - break; - } + $rowIndex = $index; } - if (false === $itemAdded) { - $rows[] = [ - $item->getKey() => $item, - ]; + if (false === $fitsRow) { + ++$rowIndex; } + + $rows[$rowIndex][$item->getKey()] = $item; } public function getActiveWindow(): CarbonPeriod diff --git a/templates/administrative/assignment/timeline.html.twig b/templates/administrative/assignment/timeline.html.twig index 9f997d1..dbe4914 100644 --- a/templates/administrative/assignment/timeline.html.twig +++ b/templates/administrative/assignment/timeline.html.twig @@ -2,35 +2,27 @@ {% block title %}Zeitleiste{% endblock %} -{% macro cell(row, day) %} - {% if colspan is defined and colspan > 1 %} - {% set colspan = colspan - 1 %} - {% elseif row[day|date('Ymd')] is defined %} - {% set item = row[day|date('Ymd')] %} - {% set colspan = item.numberOfDays %} - - {% if item.type == 'disposition' %} - - {% else %} +{% macro cell(item, colspan) %} + + {% if item.type == 'disposition' %} + + {% else %} + {{ item.jobProfile }} + {% endif %} + {% endmacro %} {% block content %} @@ -75,13 +67,29 @@ {{ hotelCode }} {% for day in filterDto.period %} - {{ _self.cell(rows[0], day) }} + {% if colspan is defined and colspan > 1 %} + {% set colspan = colspan - 1 %} + {% elseif rows[0][day|date('Ymd')] is defined %} + {% set item = rows[0][day|date('Ymd')] %} + {% set colspan = item.numberOfDays %} + {{ _self.cell(item, colspan) }} + {% else %} + + {% endif %} {% endfor %} {% for row in rows[1:] %} {% for day in filterDto.period %} - {{ _self.cell(row, day) }} + {% if colspan is defined and colspan > 1 %} + {% set colspan = colspan - 1 %} + {% elseif row[day|date('Ymd')] is defined %} + {% set item = row[day|date('Ymd')] %} + {% set colspan = item.numberOfDays %} + {{ _self.cell(item, colspan) }} + {% else %} + + {% endif %} {% endfor %} {% endfor %}