Расписание на месяц собирали руками до 15-го числа.
Курсы, группы и подгруппы уже жили в CRM как смарт-процессы, но расписание на следующий месяц методист складывал в голове и на листе: правил слишком много, и держать их нужно одновременно. Накладки становились видимыми уже на занятиях — и исправляли их не в системе, а людьми.
Мы написали поверх коробочной CRM собственный модуль «Расписание групп»: три отдельные таблицы и ноль изменений в ядре, так что обновления CRM его не трогают. Кнопка «Сгенерировать» раскладывает группы следующего месяца по настройкам каждого курса в редактируемый черновик; методист перетаскивает плитку группы на другой день, расписание тут же пересчитывается, а накладки подсвечиваются красным ещё до утверждения.
Правила, которые раньше жили в голове методиста — восьмичасовые дни, чередование длинных и коротких групп, две группы одного курса никогда в одни часы, — теперь задаются в модуле для каждого курса. Доступ разделён по ролям инспектора, методиста и администратора, расписание печатается за любой период с фильтрами, а клик по группе открывает её карточку в CRM. Рабочая версия попала на сервер клиента за две недели: около 6 500 строк кода и 73 unit-теста.
Что мешало
- ✗Расписание на следующий месяц собирали вручную до 15-го числа
- ✗Правила — восьмичасовой день, чередование длинных и коротких групп — держались в голове методиста
- ✗Две группы одного курса нельзя ставить на одни и те же часы
- ✗Сквозная нумерация групп каждый год начинается заново
- ✗Накладки обнаруживались, когда слушатели уже пришли на занятия
Что умеет система
Календарь групп
Сетка рабочих дней с плашками групп: курс, тип, номер, число слушателей. Группы, продолжающиеся с прошлого месяца, отмечены отдельно, накладки подсвечены красным.
Черновик в одно нажатие
Кнопка «Сформировать» раскладывает группы на следующий месяц по настройкам курсов — это ещё не реальные группы, а черновик, который можно править.
Правки перетаскиванием
Плашка группы перетаскивается на другой день — расписание сразу пересчитывается.
Печать и навигация
Печать расписания за период с учётом фильтров; клик по группе открывает её карточку в боковой панели CRM.
Настройки и роли
Для каждого курса заданы число длинных и коротких групп и участие в автоформировании; доступ разведён на три роли — инспектор, методист, администратор.
Как это устроено
Инженерные решения.
Ни одного изменения в ядре
Модуль живёт в изолированном каталоге и пользуется штатными механизмами платформы: собственные таблицы, контроллеры, API смарт-процессов.
Планировщик «волн»
Группы курса идут волнами: параллельные — в одном временном слоте, последовательные — одна за другой; волна заполняет восьмичасовой день и переносит остаток на следующий.
Двухфазная финализация
Сначала создаются карточки в CRM, затем транзакция обновляет собственные таблицы модуля — сбой посередине не оставит расписание созданным наполовину.