Merge branch 'feature/timeline' into develop

This commit is contained in:
Björn Fromme
2025-03-19 12:47:58 +01:00
8 changed files with 402 additions and 2 deletions
@@ -0,0 +1,80 @@
<?php
namespace App\Service\Assignment;
use App\Entity\Assignment;
use App\Model\TimelineItem;
use Carbon\CarbonPeriod;
class TimelineService
{
/**
* @param Assignment[] $assignments
* @return array
*/
public function preprocess(array $assignments): array
{
$rows = [];
foreach ($assignments as $assignment) {
$destination = $assignment->getDestination();
$hotelCode = $destination->getHotelCodeNormalized();
// add first row for current hotel unless existing
if (false === isset($rows[$hotelCode])) {
$rows[$hotelCode] = [[]];
}
if (0 === $assignment->getDispositions()->count()) {
$item = TimelineItem::fromAssignment($assignment);
$this->addItem($rows[$hotelCode], $item);
} else {
foreach ($assignment->getDispositions() as $disposition) {
$item = TimelineItem::fromDisposition($disposition);
$this->addItem($rows[$hotelCode], $item);
}
}
}
return $rows;
}
private function addItem(array &$rows, TimelineItem $item): void
{
$itemAdded = false;
foreach ($rows as $index => $row) {
$addToRow = 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 (true === $addToRow) {
$rows[$index][$item->getKey()] = $item;
$itemAdded = true;
break;
}
}
if (false === $itemAdded) {
$rows[] = [
$item->getKey() => $item,
];
}
}
public function getActiveWindow(): CarbonPeriod
{
$dateFrom = (new \DateTimeImmutable())->modify('-6 weeks');
$dateTo = (new \DateTimeImmutable())->modify('+6 months');
return CarbonPeriod::create($dateFrom, $dateTo);
}
}