Реалізація управління розкладом спеціалістів на сайті

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

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

Інформаційні сайти або веб-програми
Сайти візитки, 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

Реалізація управління розкладом спеціалістів на веб-сайту

Управління розкладом — це інструмент для самих спеціалістів та адміністраторів: задати рабочі години, додати вихідний, поставити блокировку на час зустрічи, переглянути хто записався на наступний тиждень. Розклад повинен бути гнучким і не потребувати участі розробника при кожній зміні.

Рівні розкладу

Розклад будується з трьох шарів, кожен наступний перекриває попередній:

1. Базовий шаблон — стандартні рабочі години за днями тижня:

Пн–Пт: 09:00–18:00, слот 60 хв, перерва 0 хв
Сб: 10:00–14:00, слот 30 хв
Нд: вихідний

2. Переопределення дат — конкретна дата працює інакше:

2025-05-09: вихідний (святкування)
2025-06-01: 10:00–16:00 (скорочений день)
2025-07-01–2025-07-14: відпустка

3. Блокировки — закриті інтервали всередині рабочого дня:

2025-04-15 12:00–13:00: обід
2025-04-16 14:00–15:00: засідання

Інтерфейс управління для спеціаліста

Спеціаліст управляє розкладом через особистий кабінет. Ключові операції:

Дія Як реалізується
Задати базові години Форма за днями тижня з полями start/end/slot
Закрити дату Клік на дату в календарі → модальне вікно → тип: вихідний/відпустка
Відкрити нерабочу дату Той же модал, тип: custom hours
Додати блокировку Drag на часовій шкалі або форма з датою та часом
Переглянути записи Недельний calendar view з бронями

API endpoints

GET  /api/specialists/{id}/schedule?date=2025-04-15
     → { slots: [...], overrides: [...], blocks: [...] }

GET  /api/specialists/{id}/available-slots?from=2025-04-15&to=2025-04-21
     → { "2025-04-15": [{ start, end }], ... }

POST /api/specialists/{id}/overrides
     { override_date: "2025-05-01", type: "day_off" }

POST /api/specialists/{id}/blocks
     { starts_at: "2025-04-16T14:00", ends_at: "2025-04-16T15:00", reason: "Засідання" }

DELETE /api/specialists/{id}/overrides/{override_id}
DELETE /api/specialists/{id}/blocks/{block_id}

PATCH /api/specialists/{id}/schedule/{weekday}
      { start_time: "10:00", end_time: "18:00", slot_duration: 45 }

Масові зміни (відпустка, святковання)

Відпустка на 2 тижні — не 14 окремих записів, а одна запис із діапазоном:

CREATE TABLE specialist_overrides (
    id              SERIAL PRIMARY KEY,
    specialist_id   INTEGER NOT NULL,
    date_from       DATE NOT NULL,
    date_until      DATE NOT NULL,   -- включно
    override_type   VARCHAR(20) NOT NULL,  -- 'day_off' | 'vacation' | 'custom_hours'
    start_time      TIME,            -- лише для custom_hours
    end_time        TIME,
    created_by      INTEGER,         -- хто створив: спеціаліст або адміністратор
    reason          VARCHAR(255)
);

При генерації слотів діапазони розгортаються в окремі дні в коді, не в БД.

Автоматичні святкування

Налаштування: при створенні розкладу можна включити опцію «закривати державні святкування автоматично». Список святкувань завантажується через API (наприклад, calendarific.com) або зберігається в таблиці налаштувань із щорічним обновленням:

def populate_holidays(country: str, year: int):
    resp = requests.get(
        'https://calendarific.com/api/v2/holidays',
        params={'api_key': API_KEY, 'country': country, 'year': year, 'type': 'national'}
    )
    holidays = resp.json()['response']['holidays']
    for h in holidays:
        db.execute("""
            INSERT INTO public_holidays (country, date, name)
            VALUES (%s, %s, %s)
            ON CONFLICT DO NOTHING
        """, [country, h['date']['iso'], h['name']])

Сповіщення про зміни

Коли спеціаліст закриває дату, на яку вже есть бронювання — система автоматично:

  1. Знаходить всі активні брони на закривану період
  2. Відправляє клієнтам лист із вибаченням і пропозицією вибрати інший час
  3. Переводит брони в статус needs_reschedule
  4. Повідомляє адміністратора
def close_date(specialist_id: int, date: date, reason: str):
    affected_bookings = get_bookings_for_date(specialist_id, date)

    with db.transaction():
        create_override(specialist_id, date, 'day_off', reason=reason)
        for booking in affected_bookings:
            update_booking_status(booking.id, 'needs_reschedule')
            send_reschedule_request_email(booking, specialist_id, reason)
            notify_admin(specialist_id, booking, 'date_closed')

Експорт у зовнішні календарі

Спеціаліст може синхронізувати розклад з Google Calendar або Outlook через iCal feed:

GET /api/specialists/{id}/calendar.ics?token={private_token}

Цей URL додається в Google Calendar як підписка — обновляется щих 15 хвилин автоматично.

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

Базове управління шаблоном розкладу та блокировками, без зовнішніх інтеграцій — 5–7 робочих днів. Діапазонні переопределення, автосвяткування, сповіщення клієнтів при закритті, iCal-експорт, ролевий доступ (спеціаліст vs адміністратор) — 9–12 робочих днів.