Merge branch 'feature/timeline' into develop
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user