43 lines
1.1 KiB
PHP
43 lines
1.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Service;
|
|
|
|
use App\BusProNet\Model\Room;
|
|
use App\Form\Model\RoomGroupsDto;
|
|
|
|
/**
|
|
* Groups room data for booking steps.
|
|
*/
|
|
class BookingRoomSelectionService
|
|
{
|
|
/**
|
|
* @param array<int, Room> $rooms
|
|
*/
|
|
public function groupRoomsBySelectionType(array $rooms): RoomGroupsDto
|
|
{
|
|
$groups = [
|
|
Room::SELECTION_TYPE_BY_PAX => [],
|
|
Room::SELECTION_TYPE_BY_ROOM => [],
|
|
];
|
|
|
|
foreach ($rooms as $room) {
|
|
if (false !== stripos($room->label, 'bett')) {
|
|
$groups[Room::SELECTION_TYPE_BY_PAX][$room->id] = $room;
|
|
continue;
|
|
}
|
|
|
|
$groups[Room::SELECTION_TYPE_BY_ROOM][$room->id] = $room;
|
|
}
|
|
|
|
uasort($groups[Room::SELECTION_TYPE_BY_PAX], static fn (Room $a, Room $b): int => $a->maxPax <=> $b->maxPax);
|
|
uasort($groups[Room::SELECTION_TYPE_BY_ROOM], static fn (Room $a, Room $b): int => $a->maxPax <=> $b->maxPax);
|
|
|
|
return new RoomGroupsDto(
|
|
byPax: $groups[Room::SELECTION_TYPE_BY_PAX],
|
|
byRoom: $groups[Room::SELECTION_TYPE_BY_ROOM],
|
|
);
|
|
}
|
|
}
|