Добавлена офлайн/EndUser-подпись «ознакомлен и принял в работу» для документов отчётов и файловые вложения к задачам через Nextcloud.
Co-authored-by: Cursor <cursoragent@cursor.com>
Сотрудник может подключить несколько IMAP-ящиков и переключаться между ними.
Дислокация снова показывает всю сеть, а не только назначенные аптеки.
Co-authored-by: Cursor <cursoragent@cursor.com>
Браузер больше не ходит на chat.* с portal.* — REST идёт через Django с PAT;
WS backoff без бесконечных 403; utilities.js ждёт DOMContentLoaded.
Co-authored-by: Cursor <cursoragent@cursor.com>
Сотрудник сам подключает ящик (autoconfig, вложения, пагинация списка, надёжный IMAP-поиск); в хедере работает /api/search по разделам и сущностям с ACL. Также устойчивость Mattermost-токена для чата.
Co-authored-by: Cursor <cursoragent@cursor.com>
Конфиг счётчиков и день/ночь-тарифы, учёт энергосистем (генераторы,
инверторы), доступ к разделу РРО/ПРРО.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Отдельное право на редактирование карточки аптеки, формы, пресеты колонок
дислокации и правки видимости карточки.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Модель/сервисы HR-заявок с заменами, приглашения на установку пароля
(инвайты), обновлённая страница профиля сотрудника и правки 2FA.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Section-based portal access, matrix прав по группам, аккаунтинг-портал,
управление группами пользователей, справочники, дашборд и общий каркас
навигации/стилей.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ЛС/групповые в Mattermost не архивируются (delete_at=0) — «закрытие» это
пользовательская preference (direct_channel_show/group_channel_show = "false").
Тянем /users/me/preferences и скрываем именно закрытые пользователем разговоры
по умолчанию; галочка «Показувати закриті розмови» их показывает. Архивные
каналы (delete_at>0) по-прежнему учитываются.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Строка поиска перенесена наверх страницы (над всем чатом), результаты
по-прежнему открываются в области сообщений
- В списке ЛС у собеседников-ботов рядом выводится метка «бот»
- Закрытые/архивные разговоры (delete_at>0) скрыты по умолчанию, показываются
только по галочке «Показувати закриті розмови» (тянем include_deleted=true)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Mattermost search per-team — опрашиваем все команды пользователя параллельно
и сливаем результаты с дедупликацией по id. ЛС/групповые попадают в выдачу
любой команды. Сбой одной команды не валит весь поиск.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Захватываем is_bot при резолве пользователей (/users/ids), рядом с именем
отправителя показываем компактную подпись «бот». Также распознаём вебхуки
(props.from_bot / from_webhook). Свои сообщения и обычных юзеров не помечаем.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Порядок каналов/ЛС — по реальному времени последнего поста (тянем per-channel,
т.к. last_post_at из списка каналов ненадёжен), архивные (delete_at>0) — вниз
- Непрочитанные: счётчик по websocket, бейдж на строке + жирное имя, префикс
«(N)» в тайтле, браузерное уведомление; сброс при открытии канала
- Кнопка «Написати в чат» на карточке сотрудника → /chat/?dm=<mm_id>,
чат открывает/создаёт ЛС с этим человеком (идемпотентный /channels/direct)
- Тесты кнопки чата в EmployeeDetailTests
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>