# Круизные каюты
*На данный момент (10.01.2022) в master-ветке видимость не используется.*
При создании круиза или при синхронизации из 1С, создаются круизные каюты для каждого рынка круиза.
Если каюты созданы при синхронизации с 1С, то статус у кают будет "забронировано". Если создаются через CRS, то статус "свободна".
При включении системы видимостей, для каждой каюты круиза (при создании круиза) будет создана видимость для всех рынков из базы.
При обновлении рынков у круиза, каюты этого круиза не изменяются.
Бронировать каюты можно только те, у которых статус "свободно".
Изменение видимости влияет на доступность каюты - кто может её забронировать.
Обычный пользователь может забронировать каюту с видимостью "свободно".
Пользователь с правами 1, 2 (менеджер или оператор Водоход) может забронировать каюту с видимостями "свободно", "служебная" или "резерв".
*После перехода на систему видимостей будет только 2 статуса вместо 11: `свободна`, `забронирована` и 4 видимости: `доступная`, `служебная`, `резерв`, `недоступная`.*
В основном API выводятся каюты, которые можно забронировать - статус "свободная", для определённого рынка (берётся из параметров запроса Yii::$app->params['market']).
При бронировании каюты меняется только статус каюты на "забронирована" (на данный момент всё ещё почему-то обновляется statused_by и указывается круиз каюты).
При этом сразу обновляются каюты на пересекающихся круизах - меняется только статус и поле statused_by (ID круиза изменившего статус).
Если заказ отменили, то каюта освобождается, то есть меняется статус на "свободна".
Обновление кают на пересекающихся круизах происходит следующим образом:
* если у текущей каюты (у которой вызвана функция обновления) статус "резерв" или "бронь", то проверяется поле statused_by и если оно пустое или указан круиз соседней каюты (каюты на пересекающемся круизе), то устанавливаем соседней каюте статус и statused_by от текущей каюты;
* если у соседней каюты статус "резерв", "бронь" или "служебная" и ID круиза в statused_by не такой как у круиза текущей каюты, то проверяем если statused_by пустой или равен круизу текущей каюты или соседней, то обновляем у текущей каюты статус и statused_by на значения от соседней каюты;
* если у текущей каюты и у соседней статусы не "недоступная" и у текущей каюты statused_by пустое или равен круизу соседней каюты, то у соседней каюты устанавливаем статус и statused_by от текущей каюты.