﻿---
title: Бронирование аудиторий и оборудования
description: "Сервис на Laravel + Filament: календарь занятости помещений и оборудования, защита от двойной брони, согласование востребованных залов и выдача техники."
---

## Что это за сервис

Сервис бронирования помещений и общего оборудования для сотрудников школы, колледжа или вуза. Он закрывает всё, что не входит в учебное расписание: собрания, кружки, мероприятия, пересдачи, а также выдачу проекторов, ноутбуков и лабораторных наборов.

Без него брони ведут в общей таблице, которая всегда немного устарела, и двойные бронирования случаются регулярно, потому что двое правят её одновременно. Оборудование выдают по договорённости и не записывают. Еженедельные собрания и занятия кружков каждый раз вносят заново. Закрытое на ремонт помещение продолжают бронировать, потому что в таблице это никак не отмечено.

Для первого релиза хватает справочника ресурсов, календаря, проверки пересечений и самостоятельной отмены. Согласование востребованных залов, повторяющиеся серии и выдачу оборудования добавляют следующими шагами, по мере того как в сервис переходят кружки, мероприятия и хозяйственная служба. Главный критерий готовности — общая таблица броней больше не нужна никому.

## Что он делает

- **Показывает занятость в календаре.** Для любого помещения или единицы оборудования видны занятые и свободные интервалы до подачи заявки.
- **Не допускает двойной брони.** Пересечение проверяется в момент бронирования, а не после.
- **Применяет правила по типу ресурса.** Обычные аудитории подтверждаются сразу, актовый зал, спортзал и лаборатории — после согласования ответственным.
- **Создаёт повторяющиеся брони.** Недельный или двухнедельный шаблон на период создаёт все занятия сразу, а отдельное занятие серии можно отменить, не трогая остальные.
- **Учитывает выдачу и возврат.** У оборудования фиксируются время выдачи и возврата, просроченный возврат подсвечивается.
- **Блокирует недоступные ресурсы.** Статус «ремонт» на период запрещает новые брони и отмечает уже существующие.

## Нюансы и особенности

- **Граница с учебным расписанием.** Регулярные занятия семестра ведут в [расписании занятий](https://wpcraft.ru/kb/stacks/filament/use-cases/education/class-scheduling-board.md), а сюда они попадают как занятые интервалы только для чтения. Два независимых источника занятости аудитории гарантируют накладки.
- **Пересечения проверяют на сервере.** Два пользователя не должны одновременно забронировать один слот. Проверку выполняют в транзакции при сохранении, а не только подсветкой в календаре.
- **Согласование только там, где нужно.** Если согласовывать каждую аудиторию, сотрудники вернутся к таблице. Правило подтверждения задают для типа ресурса.
- **Отмена освобождает слот сразу.** Самостоятельная отмена с мгновенным обновлением календаря важнее сложного процесса возврата брони.
- **Ремонт затрагивает существующие брони.** При блокировке ресурса владельцы затронутых броней получают уведомление и предложение перенести.
- **Календарь — отдельная страница.** Для недельного вида нужна собственная страница панели или сторонний плагин календаря, а брони остаются обычными записями с таблицей и фильтрами.
- **Когда хватит готового.** Если в организации есть корпоративный календарь с ресурсами помещений и его правил достаточно, отдельный сервис оправдан только при согласованиях, выдаче оборудования или связи с учебным расписанием.

## Как сгенерировать через ИИ-агентов

Промпты рассчитаны на AI-агента (Claude Code, Cursor и аналоги) в Laravel-проекте с установленным **Filament 4.x**. Отправляйте их по одному и проверяйте результат каждого шага.

### 1. Данные и модели

```text
Создай модели и миграции для бронирования: ResourceType (название, нужно ли
согласование, выдаётся ли на руки), Resource (тип, название, корпус,
вместимость, ответственный), ResourceBlock (ресурс, период, причина),
BookingSeries (ресурс, автор, шаблон повторения, период), Booking (ресурс,
серия, автор, начало, конец, статус: ожидает согласования, подтверждено,
отменено; время выдачи и возврата). Добавь фабрики с демо-данными.
```

### 2. Проверка пересечений и правила

```text
Реализуй серверную проверку при создании и изменении Booking: нет пересечения
с подтверждёнными и ожидающими бронями, с блокировками ресурса и с занятиями
учебного расписания. Проверку выполняй в транзакции. Статус новой брони
определяй по типу ресурса: сразу подтверждено или ожидает согласования.
```

Попробуйте создать две брони одного зала на пересекающееся время из двух окон браузера.

### 3. Календарь и серии

```text
Сделай собственную страницу Filament с недельным календарём по выбранному
ресурсу и кнопкой «Забронировать» на свободном интервале. Добавь создание
серии по шаблону повторения с отчётом о датах, где слот занят, и действие
отмены одного занятия серии.
```

### 4. Согласование, выдача и блокировки

```text
Добавь очередь согласования для ответственных с действиями «Подтвердить»
и «Отклонить с причиной». Для выдаваемого оборудования — действия «Выдать»
и «Принять возврат» и ежедневную проверку просроченных возвратов
с уведомлением. При создании блокировки уведомляй владельцев затронутых броней.
```

### 5. Доступ и отчёт

```text
Настрой доступ: сотрудник видит календарь всех ресурсов и управляет своими
бронями, ответственный согласует брони своих ресурсов, администратор
управляет справочниками. Добавь виджет загрузки ресурсов за месяц
и экспорт броней за период.
```

## Похожие сценарии

- [Составление расписания занятий](https://wpcraft.ru/kb/stacks/filament/use-cases/education/class-scheduling-board.md) — регулярные занятия, которые здесь видны как занятость.
- [Складские остатки](https://wpcraft.ru/kb/stacks/filament/use-cases/operations/inventory-dashboard.md) — учёт самого оборудования, его количества и состояния.
- Чем отличается от [расписания занятий](https://wpcraft.ru/kb/stacks/filament/use-cases/education/class-scheduling-board.md): там план на семестр с преподавателями и группами, здесь разовые и повторяющиеся брони помещений и техники.

## Материалы и источники

- [Refine: Room & Resource Scheduler](https://refine.dev/use-cases/education/room-resource-scheduler/)
- [Filament 4.x: собственные страницы](https://filamentphp.com/docs/4.x/navigation/custom-pages)
- [Filament 4.x: ресурсы](https://filamentphp.com/docs/4.x/resources/overview)
- [Filament 4.x: вкладки и фильтры списка](https://filamentphp.com/docs/4.x/resources/listing-records)
- [Filament 4.x: уведомления в базе данных](https://filamentphp.com/docs/4.x/notifications/database-notifications)