59 Commits

Author SHA1 Message Date
lokses 18cabe0e63 projects: деревовидный выбор отделов вместо плоского списка.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-23 17:18:37 +03:00
lokses 68752231d6 telephony: клик по мобильному и статус трубки через AMI.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 15:29:11 +03:00
lokses 5d06d4d3ce telephony: автоформат +380, тип линии SIP/АТС и звонок через Asterisk AMI.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 14:52:09 +03:00
lokses 87bb98d097 it: не дублировать списки аптек и сотрудников в каждом ряду оборудования.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 13:23:47 +03:00
lokses 4e1d5f221e ui: заменить оставшиеся боковые панели на центрированные popup.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 13:12:21 +03:00
lokses 24f9e54283 hr: различать штат и договор ЦПХ у сотрудника и в заявке на найм.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 11:46:17 +03:00
lokses a3356cdd90 it: каталог моделей в popup и возврат к добавлению экземпляров.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 11:41:22 +03:00
lokses f2e9129a77 it: формы добавления оборудования и выполненной работы в popup.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 11:32:32 +03:00
lokses 07b4c69d14 pharmacies: вкладки в popup редактирования и точка на карте для координат.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 11:16:11 +03:00
lokses 045171275e pharmacies: popup редактирования со списка и выгрузка аптек в Excel.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 11:00:10 +03:00
lokses c0b9cf12f7 tasks: форма создания задачи в popup вместо раскрывающегося блока.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 22:35:52 +03:00
lokses bc3f3e29c8 hr: в мастере найма сначала место, затем кандидат и доступы.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 22:27:07 +03:00
lokses 45d668a675 hr: форма найма в popup-мастере из трёх шагов.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 22:22:13 +03:00
lokses b4876c4efd it_manager: настраиваемое содержимое QR в шаблоне этикетки.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 17:24:05 +03:00
lokses 22085219c3 it_manager: автоинв. № EAN-13 и фиксация мм в печати шаблона.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 17:03:38 +03:00
lokses f381d692dd it_manager: одна кнопка печати этикетки по шаблону.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 16:57:59 +03:00
lokses c87911ee55 it_manager: исправить загрузку layout и drag в редакторе этикеток.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 16:51:16 +03:00
lokses d54f6fbe42 it_manager/locations: редактор шаблона этикеток, раздельная печать QR/EAN и карточка поставщика.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 16:40:48 +03:00
lokses 82ad90c661 it_manager/locations: этикетки QR/EAN-13 и вкладка сервисов в дислокации.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 16:18:41 +03:00
lokses 777de2adea it_manager: сортировка локаций по коду и полный список в селекте.
Аптеки А1…А70/П… вместо сортировки по адресу; убрать лимит 50 в searchable-select.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 15:39:56 +03:00
lokses a85747f13d it_manager: смена типовой работы и удаление в журнале.
Руководитель может менять catalog_work в таблице и удалять записи.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 15:14:40 +03:00
lokses 31bd4c8fa7 it_manager: справочник типовых работ в журнале WorkLog.
Категория/работа/required_details вместо свободного work_type; seed Directory, отчёт и тесты.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 13:38:07 +03:00
lokses 03019898b0 reports: КЕП-подпись PDF отчётов; задачи: загрузка вложений.
Добавлена офлайн/EndUser-подпись «ознакомлен и принял в работу» для документов отчётов и файловые вложения к задачам через Nextcloud.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 21:13:28 +03:00
lokses 0424e0273e documents: вкладка «Мой отдел» и drag-and-drop загрузка в список.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 18:02:04 +03:00
lokses a25e98413c documents: предпросмотр PDF/JPEG во всплывающем окне.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 17:43:10 +03:00
lokses 2a1cb7d5c2 documents: view/edit для аптек в OnlyOffice и просмотр PDF/изображений.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 17:36:42 +03:00
lokses 9c8d0d109a mail: несколько ящиков с переключателем; дислокация без скоупа локаций
Сотрудник может подключить несколько IMAP-ящиков и переключаться между ними.
Дислокация снова показывает всю сеть, а не только назначенные аптеки.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 15:56:13 +03:00
lokses c543ef6567 chat: разрешить отправку поста только с файлами, без текста
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 13:27:18 +03:00
lokses bc04162a31 chat: брать CSRF из hx-headers — HttpOnly cookie ломала POST /chat/api
Иначе Django отдавал 403 на /users/ids, posts, channels/direct и т.п.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 13:00:31 +03:00
lokses 4c2984a81e chat: same-origin /chat/api proxy вместо прямого CORS к Mattermost
Браузер больше не ходит на chat.* с portal.* — REST идёт через Django с PAT;
WS backoff без бесконечных 403; utilities.js ждёт DOMContentLoaded.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 12:53:04 +03:00
lokses fe463c11af chat: вызывать chatInit после HTMX-перехода
Без этого список каналов зависал на «Загрузка…» при открытии чата из меню.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 12:45:34 +03:00
lokses a2fe4a49e3 mail + portal: самоподключение почты, веб-клиент и глобальный поиск
Сотрудник сам подключает ящик (autoconfig, вложения, пагинация списка, надёжный IMAP-поиск); в хедере работает /api/search по разделам и сущностям с ACL. Также устойчивость Mattermost-токена для чата.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 12:22:53 +03:00
lokses f46e0d90ba FIX PAGES AND ADD PASSWORD CHANGE 2026-09-11 14:51:55 +03:00
lokses b19dc8b129 Измение дизайна документов 2026-09-11 13:51:39 +03:00
lokses b730255654 Измение дизайна документов 2026-09-11 13:36:07 +03:00
lokses 999cc0f5c5 nextcloud/onlyoffice: доработка редактора и браузера документов
- правки onlyoffice.py/views.py/webdav_service.py под callback/контент и ключи;
- blank_office перенесён в nextcloud_connector (генерация пустых Word/Excel);
- documents.js + обновление шаблонов браузера/редактора/карточки документов;
- тесты коннектора расширены.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 13:06:34 +03:00
lokses 16bf2cf1c7 эксплуатация: показания счётчиков, энергоактивы и РРО
Конфиг счётчиков и день/ночь-тарифы, учёт энергосистем (генераторы,
инверторы), доступ к разделу РРО/ПРРО.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:44 +03:00
lokses 3e969e29dc visit_manager: события календаря
Модель и сервис событий календаря, вью и страница календаря.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:44 +03:00
lokses 0da9c13192 it_manager+reports: иерархия договоров, биллинг и месячные отчёты
Иерархия рамочных/дочерних договоров и платежей, интернет-биллинг,
месячные IT-отчёты (импорт, DOCX/PDF, шаблоны выводов).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:44 +03:00
lokses 897ffc99c9 locations: право редактирования аптеки, формы и дислокация
Отдельное право на редактирование карточки аптеки, формы, пресеты колонок
дислокации и правки видимости карточки.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:32 +03:00
lokses ac0418083b hiring: вакансии и найм, HR-портал
Модель вакансий, флоу рекрутинга и панели HR-портала (заявки/вакансии).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:32 +03:00
lokses 3359a8db13 employees: HR-заявки, приглашения на пароль, профиль и 2FA
Модель/сервисы HR-заявок с заменами, приглашения на установку пароля
(инвайты), обновлённая страница профиля сотрудника и правки 2FA.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:32 +03:00
lokses ae54d93442 core: секции портала, контроль доступа и вью страниц
Section-based portal access, matrix прав по группам, аккаунтинг-портал,
управление группами пользователей, справочники, дашборд и общий каркас
навигации/стилей.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:20 +03:00
lokses ae5c1f1848 Add RRO, portal section perms, dislocation presets, and hiring intern flow.
Ship cash-register registry, section-based portal access, configurable dislocation columns, and trial-hire intern accounts with credentials PDF.
2026-08-09 14:58:17 +03:00
lokses 8de1ffaa34 i18n: перевод страницы чата (ru база, uk/en)
- Шаблон chat.html → русская база с {% trans %}/{% blocktrans %}
- JS-строки chat.js → gettext() + JavaScriptCatalog (/jsi18n/), подключён
  в index.html; защитный fallback если каталог не загрузился
- Переводы uk/en для обоих доменов (django + djangojs), скомпилированы
- makemessages заодно извлёк непереведённые строки прошлых фич (2FA,
  nextcloud, документы) — оставлены пустыми (рендерятся на базовом ru)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 22:00:35 +03:00
lokses 6a833413d2 Чат: закрытые ЛС прячем по настройкам Mattermost, а не по delete_at
ЛС/групповые в 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>
2026-07-28 21:41:26 +03:00
lokses 5181c2f2ab Чат: поиск сверху, метка бота в списке ЛС, галочка закрытых разговоров
- Строка поиска перенесена наверх страницы (над всем чатом), результаты
  по-прежнему открываются в области сообщений
- В списке ЛС у собеседников-ботов рядом выводится метка «бот»
- Закрытые/архивные разговоры (delete_at>0) скрыты по умолчанию, показываются
  только по галочке «Показувати закриті розмови» (тянем include_deleted=true)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 21:36:18 +03:00
lokses 97bf274c6b Чат: поиск сообщений по всем командам, а не только по текущей
Mattermost search per-team — опрашиваем все команды пользователя параллельно
и сливаем результаты с дедупликацией по id. ЛС/групповые попадают в выдачу
любой команды. Сбой одной команды не валит весь поиск.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 21:24:35 +03:00
lokses 7606592ed8 Чат: метка «бот» у сообщений от ботов
Захватываем is_bot при резолве пользователей (/users/ids), рядом с именем
отправителя показываем компактную подпись «бот». Также распознаём вебхуки
(props.from_bot / from_webhook). Свои сообщения и обычных юзеров не помечаем.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 21:15:29 +03:00
lokses 85bd89f762 Чат: сортировка по активности, непрочитанные, кнопка «Написати»
- Порядок каналов/ЛС — по реальному времени последнего поста (тянем 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>
2026-07-28 16:08:53 +03:00