Skip to content

07Tanvi/bitrix-doctor-schedule

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Модуль «Расписание врача» (vit.doctor.scheduale)

Модуль для решения Персональный сайт врача (vit.doctor). Добавляет в админку Bitrix настройку рабочей недели врача: рабочие дни и время начала/окончания работы.

Краткое описание архитектуры решения

  • Хранение: таблица БД b_vit_doctor_schedule — одна строка на день недели на врача (DOCTOR_ID, WEEKDAY, IS_WORKING, TIME_FROM, TIME_TO). Уникальный ключ (DOCTOR_ID, WEEKDAY).
  • Доступ к данным: D7 Entity ScheduleTable и сервис Schedule с методами getWeekSchedule($doctorId) и saveWeekSchedule($data, $doctorId). Для одного врача используется DOCTOR_ID = 0.
  • Админка: страница в bitrix/admin/ (форма по 7 дням), при сохранении вызывает Schedule::saveWeekSchedule(); при открытии — Schedule::getWeekSchedule(0).
  • Установка/снятие: при установке создаётся таблица (install/db/mysql/install.sql) и заполняется шаблон Пн–Пт 09:00–18:00; при удалении модуля таблица удаляется (uninstall.sql).

Подробнее — в разделе «Архитектура хранения и управления расписанием» ниже.

Требования

  • 1С-Битрикс: Управление сайтом
  • PHP 7.4+

Установка

  1. Скопируйте папку vit.doctor.schedule в каталог модулей:

    • local/modules/vit.doctor.schedule (предпочтительно)
    • либо bitrix/modules/vit.doctor.schedule
  2. В админке Bitrix: Настройки → Настройки продукта → Модули — найдите «Расписание врача (vit.doctor)» и нажмите Установить.

  3. После установки откройте страницу настройки расписания:

Использование

На странице настройки задаётся для каждого дня недели:

  • Рабочий день — включён/выключен (например, среда — выходной).
  • Время начала и время окончания работы (например, 09:00–18:00).

Пример: понедельник и вторник 09:00–18:00, среда выходной, четверг и пятница 09:00–18:00, суббота и воскресенье выходные.

Данные сохраняются по кнопке Сохранить.

Использование в коде (форма записи)

Расписание доступно через класс \Vit\DoctorSchedule\Schedule:

use Vit\DoctorSchedule\Schedule;

// Получить расписание на неделю (doctorId = 0 — по умолчанию)
$schedule = Schedule::getWeekSchedule(0);
// $schedule['MON'] = ['is_working' => 'Y', 'from' => '09:00', 'to' => '18:00']
// $schedule['WED'] = ['is_working' => 'N', 'from' => '09:00', 'to' => '18:00']
// ...

По этому массиву можно строить доступные слоты для записи (например, разбивать интервал fromto на 30-минутные окна и отдавать на фронт).


Архитектура хранения и управления расписанием

Выбранный подход

Расписание хранится в отдельной таблице БД b_vit_doctor_schedule, а не в опциях модуля или JSON-файле.

Почему таблица:

  1. Нормализованное хранение — одна строка = один день недели для одного врача. Поля: DOCTOR_ID, WEEKDAY (MON–SUN), IS_WORKING, TIME_FROM, TIME_TO. Уникальный ключ (DOCTOR_ID, WEEKDAY) исключает дубли и упрощает обновление.
  2. Масштабирование по врачам — один и тот же формат для любого числа врачей: getWeekSchedule($doctorId) и saveWeekSchedule($data, $doctorId). Для «одного врача» используется DOCTOR_ID = 0.
  3. Привычная модель для Bitrix — таблица создаётся при установке модуля (install/db/mysql/install.sql), удаляется при снятии (uninstall.sql). Доступ через D7 Entity (ScheduleTable) и сервисный класс Schedule.
  4. Расширяемость — позже можно добавить, например, таблицу исключений (отпуск, праздники) с привязкой по DOCTOR_ID и дате, не меняя структуру недельного шаблона.

Схема данных

Поле Тип Описание
ID INT, PK Автоинкремент
DOCTOR_ID INT, default 0 Идентификатор врача (0 — расписание по умолчанию)
WEEKDAY CHAR(3) День недели: MON, TUE, …, SUN
IS_WORKING CHAR(1) Y / N
TIME_FROM VARCHAR(5) Начало, например 09:00
TIME_TO VARCHAR(5) Конец, например 18:00

Уникальный ключ: (DOCTOR_ID, WEEKDAY).

Управление

  • Чтение: Schedule::getWeekSchedule($doctorId) возвращает массив по дням с ключами is_working, from, to.
  • Запись: Schedule::saveWeekSchedule($data, $doctorId) принимает массив по дням (как из формы админки) и для каждого дня делает upsert в таблицу.
  • Админка вызывает эти методы с $doctorId = 0; при необходимости выбора врача в интерфейс можно добавить селектор и передавать выбранный ID.

Связь с формой записи на приём

Модуль не подменяет форму записи в vit.doctor. В компоненте или обработчике записи достаточно вызвать Schedule::getWeekSchedule(0), по этому массиву сформировать доступные слоты (например, разбить интервалы по 30 минут) и подставить в существующую вёрстку.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • PHP 100.0%