Реалізація бронювання ресурсів (зали, кімнати, обладнання) на сайті

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація бронювання ресурсів (зали, кімнати, обладнання) на сайті
Середня
~5 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Реалізація бронювання ресурсів (зали, кімнати, обладнання) на веб-сайту

Зали, переговорні кімнати, проектор, мікрофонна стійка — це неживі ресурси з фіксованим розкладом. Ключова різниця від бронювання спеціаліста: один ресурс можуть бронювати кілька людей одночасно (якщо це дозволено), а деякі ресурси можна бронювати лише в комплекті.

Типи ресурсів та їхні особливості

Тип Особливості
Зал / кімната Один клієнт за раз, мінімальна тривалість, кратність слота
Обладнання Може бути кілька одиниць однієї позиції (3 проектори)
Парковочне місце Фіксований слот, немає варіантів
Переговорна Вміст обмежена, не можна бронювати на 2 години в середині робочого дня, якщо до/після залишається <30 хв

Схема з урахуванням кількості одиниць

CREATE TABLE bookable_resources (
    id              SERIAL PRIMARY KEY,
    name            VARCHAR(255) NOT NULL,
    resource_type   VARCHAR(50),
    capacity        INTEGER DEFAULT 1,    -- кількість одиниць (3 проектори → 3)
    min_duration    INTERVAL DEFAULT '1 hour',
    max_duration    INTERVAL,
    slot_step       INTERVAL DEFAULT '30 minutes',  -- кратність
    advance_booking INTERVAL DEFAULT '1 day',       -- за скільки мінімум бронювати
    max_lookahead   INTERVAL DEFAULT '90 days',
    location        VARCHAR(255),
    amenities       TEXT[],
    images          JSONB DEFAULT '[]',
    is_active       BOOLEAN DEFAULT TRUE
);

CREATE TABLE bookings (
    id              BIGSERIAL PRIMARY KEY,
    resource_id     INTEGER REFERENCES bookable_resources(id),
    quantity        SMALLINT DEFAULT 1,   -- скільки одиниць броніюється
    starts_at       TIMESTAMP NOT NULL,
    ends_at         TIMESTAMP NOT NULL,
    status          VARCHAR(20) DEFAULT 'pending',
    booker_name     VARCHAR(255),
    booker_email    VARCHAR(255),
    purpose         TEXT,
    attendees_count INTEGER,
    metadata        JSONB
);

Перевірка доступності з урахуванням вміститність

-- Скільки одиниць ресурсу займається в запитаному інтервалі
SELECT COALESCE(SUM(quantity), 0) AS booked_qty
FROM bookings
WHERE resource_id = $1
  AND status NOT IN ('cancelled')
  AND tsrange(starts_at, ends_at, '[)') && tsrange($2::timestamp, $3::timestamp, '[)');

Якщо booked_qty + requested_quantity <= capacity — слот доступний.

Правило «буфера між бронями»

Залам часто потрібен час на прибирання або підготовку між орендарями. Реалізується як налаштування ресурсу:

CLEANUP_BUFFER = timedelta(minutes=30)

def get_effective_booked_intervals(resource_id: int, date: date) -> list[Interval]:
    raw = get_bookings(resource_id, date, status_not_in=['cancelled'])
    return [
        Interval(
            start=b.starts_at - CLEANUP_BUFFER,
            end=b.ends_at + CLEANUP_BUFFER,
        )
        for b in raw
    ]

Календарний вид на фронтенді

Для залів найзручніший UI — Week view з колонками за ресурсами:

Час      | Зал А      | Зал Б      | Переговорна
9:00     | [ВІЛЬНО]   | [ЗАЙМАТО]  | [ВІЛЬНО]
9:30     | [ЗАЙМАТО]  | [ЗАЙМАТО]  | [ВІЛЬНО]
10:00    | [ЗАЙМАТО]  | [ВІЛЬНО]   | [ЗАЙМАТО]

Для реалізації підходить FullCalendar (resourceTimeGrid view) з користувацьким backend-ом:

calendar = new FullCalendar.Calendar(el, {
  plugins: ['resourceTimeGrid'],
  initialView: 'resourceTimeGridDay',
  resources: '/api/rooms',
  events: '/api/bookings',
  selectable: true,
  select: (info) => openBookingModal(info),
});

Конфігурація в CMS

Адміністратор налаштовує через інтерфейс:

  • Час роботи за днями тижня
  • Святкові та вихідні дні (blackout dates)
  • Мінімальний та максимальний термін бронювання
  • Чи потрібне підтвердження чи броня автоматична
  • Правила скасування (за скільки годин можна скасувати безкоштовно)

Строки реалізації

Бронювання одного типу ресурсу з базовим управлінням — 5–7 робочих днів. Декілька типів, перевірка з урахуванням вмістимості, буфер між бронями, календарний UI, управління винятками в CMS — 8–12 робочих днів.