Stafftrack 26.400.0–26.500.0: офисы с геозонами и новые правила приёма чекинов
Ломающее обновление
Удалены или изменены публичные API — прикладной код может перестать работать.
В Stafftrack 26.400.0 и 26.500.0 появился справочник офисов с геозонами, фотографиями и сигналами присутствия сотрудников. Одновременно изменились правила приёма точек маршрута и исчезли два публичных сервисных класса. Интеграциям, которые отправляют накопленные чекины или вызывают эти сервисы, потребуется проверка до обновления.
Новое
Заведите офисы и назначьте сотрудников
В 26.500.0 офис получил адрес, координаты, рабочее время, фотографии и геозону. Радиус выбирается из четырёх значений: 30, 50, 100 или 300 метров. Управлять офисами могут администратор, пользователь с правом редактировать всю структуру, руководитель или заместитель подразделения.
Функция по умолчанию выключена. Для неё нужны включённый чекин, разрешённые в регионе геофункции и флаг Bitrix\StaffTrack\Public\Feature\OfficesFlag. Пример включения флага в своём административном коде:
use Bitrix\Main\Config\Feature;
use Bitrix\Main\Loader;
use Bitrix\StaffTrack\Public\Feature\OfficesFlag;
if (Loader::includeModule('stafftrack')) {
Feature::enable(OfficesFlag::class);
}
Поставляются компоненты bitrix:stafftrack.offices и bitrix:stafftrack.employee.office.card. В intranet 26.1900.0 к ним добавлены страница /stafftrack/offices/, карточка в профиле и плитка в виджете приглашений.
Для своего кода есть команды Public\Command\Office\Add, Update, Delete, AddEmployees, RemoveEmployees, провайдеры офисов и AJAX stafftrack.office.*. Контроллер обслуживает список, карточку, сотрудников и фотографии; изменяющие действия принимают только POST. Это AJAX API портала: REST-интеграция контроллеров выключена.
Команда Public\Command\Office\ConfirmPresence принимает сигнал «сотрудник в офисе». Она обновляет присутствие, саму геоточку не сохраняет. Отдельная опция feature_office_presence_signal_enabled по умолчанию равна Y.
Выбирайте сотрудников на карте с учётом прав
С 26.400.0 Public\Provider\CheckInProvider::getLatestUsersCheckInByDepartment() принимает дополнительный массив entities из селектора: пользователей, отделы и отделы без вложенных подразделений. Лимиты составляют 50 сущностей и 300 сотрудников. Ответ содержит только тех, кого зритель вправе видеть, и новый ключ subscribedUserIds.
Проверки можно использовать отдельно через DepartmentProvider::canReadCheckInsOf($reader, $author) и isAccessibleEmployee($viewer, $employee). Доступ заместителей включается опцией feature_check_in_deputy_access_enabled, по умолчанию N. Получатели пушей тоже проходят проверку доступа.
На маршруте с 26.400.0 пунктир обозначает разрыв по времени больше 120 секунд; внутри стоянки разрыв не рисуется. Поле маркера observedDuration показывает, какая часть стоянки подтверждена записями. В 26.500.0 начало и конец рабочего дня скрываются от пользователя без права видеть рабочее время сотрудника, признак завершённого дня остаётся.
Что сломается
Обработайте отклонённые точки и дубли
В 26.400.0 окно приёма в прошлое сократилось с 48 до 36 часов. Исключение — автоматическая точка с описанием LEAVE, которая закрывает открытый сегмент. В пакетном запросе точка более чем на час в будущем отклоняется; раньше её время заменялось текущим. В одиночном запросе при опережении сервера более чем на 300 секунд время по-прежнему исправляется.
Автоматические точки ограничены квотой 4000 в день на сотрудника. Клиент получает STAFFTRACK_CHECK_IN_DAILY_QUOTA_EXCEEDED. К новым кодам относятся также STAFFTRACK_CHECK_IN_TIME_OUT_OF_WINDOW и STAFFTRACK_CHECK_IN_INVALID_POINT. Ошибка записи батча возвращается общим кодом STAFFTRACK_CHECK_IN_SAVE_FAILED.
Пакетный приём отсеивает дубли по времени, типу, описанию и координатам. Проверяйте checkIns[].isDuplicate и список rejected, чтобы отличать уже принятую точку от отклонённой. Public\Services\PointAcceptanceService::accept() и acceptBatch() выполняют предварительный отбор без записи в БД.
Замените удалённые сервисы
В 26.400.0 удалены Public\Services\CheckInAggregator и CheckInBacklogService. Агрегатор перенесён во внутреннюю часть модуля. Для обработки накопленных точек вместо старого backlog-сервиса используйте публичный CheckInService::getInstance()->aggregateStaleCheckIns().
Наследникам Public\Command\CheckIn\AbstractCommand тоже нужна правка: защищённый fitDateCreateToWindow() удалён. Второй аргумент sendBatchPushToDepartment() теперь содержит дельты с ключом localDate; старый произвольный extraPayload без этого ключа в пуш не попадёт.
Адресный кеш в 26.400.0 сменил ключи. Старые адреса будут запрашиваться в геосервисе заново: пересчёта ключей в диффе нет. На портале без crypto.crypto_key очередь не сможет определять адреса и запишет no geohash pepper в журнал.
Deprecated
В 26.400.0 DepartmentProvider::isMySubordinate($targetUserId) помечен устаревшим. Рекомендованная замена — isAccessibleEmployee($viewer, $employee) с явно переданным зрителем.
БД
В 26.500.0 добавлены четыре таблицы: b_stafftrack_office для справочника офисов, b_stafftrack_office_photo для фотографий, b_stafftrack_office_employee для назначений и b_stafftrack_office_presence для присутствия. Индекс UNIQUE по USER_ID в назначениях ограничивает сотрудника одним офисом. В таблице присутствия первичный ключ тоже USER_ID, рядом лежат OFFICE_ID, IN_ZONE_DATE и LAST_POINT_DATE.
Если ваш отчёт читает очередь адресов напрямую, учтите изменение 26.400.0: у b_stafftrack_address_queue удалён GEOHASH_KEY, а DATE_CREATE заменён на POINT_DATE.
Устаревшие и удалённые API в этой версии
| Символ | Статус | Чем заменять |
|---|---|---|
Bitrix\StaffTrack\Public\Provider\DepartmentProvider::isMySubordinate()
|
Deprecated |
Bitrix\StaffTrack\Public\Provider\DepartmentProvider::isAccessibleEmployee()
|
Bitrix\StaffTrack\Public\Services\CheckInAggregator
|
Удалено | — |
Bitrix\StaffTrack\Public\Services\CheckInBacklogService
|
Удалено |
Bitrix\StaffTrack\Public\Services\CheckInService::aggregateStaleCheckIns()
|
Bitrix\StaffTrack\Public\Command\CheckIn\AbstractCommand::fitDateCreateToWindow()
|
Удалено | — |