Commit Graph

77 Commits

Author SHA1 Message Date
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 a85747f13d it_manager: смена типовой работы и удаление в журнале.
Руководитель может менять catalog_work в таблице и удалять записи.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 15:14:40 +03:00
lokses 1e9d036a10 it_manager: не слушать чужие select в фильтрах оборудования.
change from:select перехватывал фильтр сотрудника и форму работ — сброс на вкладку оборудования.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 15:03:38 +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 be7e5853cb it_manager: поиск, фильтры и инвентаризация оборудования.
Добавлены фильтры списка, редактирование инв. номеров/заметок/дат, история выдачи в карточке и тесты.

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

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 21:13:28 +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 5800f79eec documents: иерархия отделов и ACL на папки/файлы с people-picker.
В /documents/ добавлено дерево департаментов, права view/edit через DocumentAccessGrant и выдача доступа сотрудникам/отделам/группам.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 17:21:01 +03:00
lokses ad8730c752 i18n: локализация multi-mailbox UI и полей UserMailbox (uk/en)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 18:09:56 +03:00
lokses 9c8d0d109a mail: несколько ящиков с переключателем; дислокация без скоупа локаций
Сотрудник может подключить несколько IMAP-ящиков и переключаться между ними.
Дислокация снова показывает всю сеть, а не только назначенные аптеки.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 15:56:13 +03:00
lokses b0fb8c5218 rename: «Учётные данные» → «Операционный учёт» в меню и портале
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 14:14:31 +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 3387418332 dashboard: группировка виджетов по ширине (½ / полная)
Каждому виджету можно задать ширину: «Полная» (на всю строку) или «½».
Виджеты выстраиваются в flex-сетку: два «½» встают в один ряд, «Полная»
занимает строку целиком. На узких экранах половинные переносятся в столбик.

- DashboardLayout.widget_widths (JSON {ключ: half|full}) + миграция 0022;
  поле widgets не тронуто — обратная совместимость сохранена
- core/dashboard: layout_widths, ширина в build_dashboard_context/
  customize_rows, save_layout(widths=...), normalize_width
- dashboard.html: flex-wrap сетка по ширине; customize: переключатель ½/полная
- tests: 6 (сохранение/чтение ширин, нормализация, дефолт, контекст, POST)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-22 10:47:14 +03:00
lokses 536679925a Правки логики 2026-09-21 20:37:18 +03:00
lokses 24331df462 dashboard: проверка доступности виджетов и плиток быстрого доступа
Виджеты теперь могут требовать доступ к разделу портала (required_section).
Недоступный виджет не отдаётся и не предлагается в настройке — даже если
остался в сохранённой раскладке или в наборе по умолчанию; save_layout
отбрасывает недоступные ключи (защита от подмены). Виджет «Метрики»
(общекорпоративная сводка) требует доступа к разделу «Отчёты».

Плитки в «Быстром доступе» скрываются по can_section (Документы, Задачи,
Календарь, Сотрудники) — как email и справочники ранее; остаются только
разделы, доступные пользователю.

- core/dashboard.py: required_section, widget_allowed, accessible_keys;
  фильтрация в resolve/customize/save
- quick_access.html: плитки под can_section
- tests: 6 тестов доступности (скрытие/показ, отбрасывание, ре-фильтр)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-21 19:02:48 +03:00
lokses df137e1074 dashboard: виджеты «Ближайшие события», «Мои HR-заявки», «Мои IT-заявки»
Три новых виджета к кастомизируемому дашборду:
- upcoming — праздники, отпуска, ДР, смены и встречи на 2 недели вперёд;
  переиспользует сборщики календаря (с их логикой видимости) через новый
  calendar_service.upcoming_events()
- my_hr_requests — статусы моих кадровых заявок (отпуск/больничный/отгул)
- my_tickets — мои открытые обращения в IT-поддержку

Все три — в реестре DASHBOARD_WIDGETS, доступны в настройке дашборда и
наборах по умолчанию. Тесты: реестр, контекст HR-заявок, рендер виджетов.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-21 18:53:06 +03:00
lokses d07b9c6e97 dashboard: кастомизируемый дашборд из виджетов + шаблоны по умолчанию
Дашборд теперь собирается из виджетов (приветствие, метрики, мои задачи,
новости, быстрый доступ). Сотрудник настраивает состав и порядок под себя
(вкл/выкл + перемещение ↑↓), а для тех, кто не настраивал, действует набор
по умолчанию по типу локации (Офис/Аптека/Склад), задаётся в админке.

- core/dashboard.py: реестр виджетов + сборка раскладки
- core/models/dashboard.py: DashboardLayout (персональная), DashboardDefaults
  (синглтон по типу локации)
- core/views.py: dashboard_view через реестр + dashboard_customize_view
- templates/pages/dashboard_widgets/*: виджеты-партиалы; dashboard.html —
  цикл по виджетам; dashboard_customize.html — настройка (HTMX + ↑↓)
- admin: DashboardDefaults (чекбоксами по локации) + read-only раскладки;
  пункт меню «Дашборд по умолчанию»
- core/tests_dashboard.py: 11 тестов (логика раскладки + view)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-21 18:42:21 +03:00
lokses 32ad359879 Publish IT monthly as editable Word; fix staff order and zones.
Form Word draft for OnlyOffice, publish the file to unlock the month; roster is head-first then by name with Employee responsibility zones.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 15:54:38 +03:00
lokses 555dbfb157 Add Word/Excel upload and draft/publish for department report docs.
Managers can upload files as drafts; members only see published documents.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 15:00:27 +03:00
lokses f46e0d90ba FIX PAGES AND ADD PASSWORD CHANGE 2026-09-11 14:51:55 +03:00
lokses f061c8f95b Email client fix 2026-09-11 14:27:39 +03:00
lokses 166a0bea71 Email client fix 2026-09-11 14:23:07 +03:00
lokses b19dc8b129 Измение дизайна документов 2026-09-11 13:51:39 +03:00
lokses b730255654 Измение дизайна документов 2026-09-11 13:36:07 +03:00
lokses 2092f096a0 Измение дизайна документов 2026-09-11 13:29:18 +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 2781a6e2b8 reports: документы отдела с правкой через OnlyOffice
- ReportDocument (+ миграция 0005): файлы отдела в Nextcloud (06_Отчёты).
- blank_office.py: генерация пустых Word/Excel для новых документов.
- documents.py: доступ/путь/создание, права view/edit по отделу.
- редактор OnlyOffice учится открывать report_doc (view/edit).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-10 16:48:08 +03:00
lokses f7f78f20fd reports: список отчётов со статусом публикации
report_list_rows() строит строки хаба /reports/ (отчёт, отдел, период,
статус: опубликован/черновик/нет публикаций) — обновлён шаблон и тесты.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-10 13:26:58 +03:00
lokses 8db8f59d2f core: индивидуальные гранты отчётов в группах пользователей
Выдача/отзыв права на отчёты по всем отделам конкретному сотруднику
из портала управления группами.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-10 13:17:41 +03:00
lokses 4d4537deff reports: публикация отчётов и право управления
- Публикация отчёта (модель ReportPublication + миграция, сервис publication).
- Разделение прав: user_can_manage_it_monthly_report (правка) vs view;
  reports.view_all_departments в списке портальных прав.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-10 13:17:41 +03:00
lokses f41fefbaa7 nextcloud/onlyoffice: тип коннектора и UI редактора
- ConnectorConfig(onlyoffice) + миграция, подсказка по extra_config в админке.
- /documents/onlyoffice/ в whitelist 2FA — Document Server забирает файл
  без сессии портала (доступ по подписанному file-token + JWT DS).
- Страница редактора и кнопки «открыть в OnlyOffice» в браузере документов.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-10 13:17:41 +03:00
lokses 5c3c27e0af help + ad_connector + feed: база знаний и правки тестов
Раздел «Справка» (категории/статьи/предложка), правки ad_connector
и обновление тестов feed под обязательную 2FA.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:55 +03:00
lokses 0a9fcce0cd mail_connector: IMAP/SMTP-клиент и почтовая аутентификация
Клиенты IMAP/SMTP, авторизация по почте, настройки и login-хуки,
страница почты.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:55 +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 70e5a77b04 Harden portal access and hiring, add RRO portal CRUD.
Remove the is_staff permission bridge, tighten intern credential handling with one-time PDFs and random seed passwords, and let staff manage cash registers from the portal.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 08:54:41 +03:00
lokses 56e2b1c8fe Add configurable pharmacy card tab visibility matrix.
Let admins set per-section access levels so operational data on pharmacy detail is no longer all-or-nothing for every logged-in user.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-09 20:43:33 +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 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 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
lokses ea2cc9daca Чат: аккуратный сайдбар списков ЛС и каналов
- Единый скролл вместо жёсткого max-height:35% на ЛС и flex:1 на каналах
  (убран пустой провал под каналами)
- Секции-заголовки — компактные uppercase-подписи в стиле портала
- Строки ЛС и каналов выровнены по единому левому краю (0.75rem)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 15:55:26 +03:00
lokses caa728158b Чат: автооткрытие свежего диалога и поиск сообщений
- Списки каналов и ЛС сортируются по last_post_at (свежие сверху)
- При открытии чата автоматически выбирается самая свежая розмова — сразу
  видны последние сообщения, а не пустой экран
- Поиск сообщений через Mattermost /teams/{id}/posts/search: строка поиска
  над лентой, результаты списком (кто/канал/время/текст), клик открывает канал
- Выход из поиска при открытии канала и смене команды

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 15:48:28 +03:00
lokses ed7dcaae3b Nextcloud connector: страница «Документы» подключена к хранилищу
Заменяет статичный макет documents.html реальным браузером Group Folders:
- access.py: accessible_sections (разделы по правам: Компания/Обучение/Обмен,
  отдел сотрудника, Кадровые дела для суперюзера) + safe_relpath (посегментная
  валидация подпути от path traversal); раздел резолвится только из whitelist
- views: documents_browse/download/upload с проверкой раздела и пути на каждом
  эндпоинте, запись — только в writable-разделы
- documents.html: вкладки разделов + ленивый HTMX-браузер с хлебными крошками,
  навигацией по папкам, скачиванием и загрузкой
- documents_view отдаёт доступные разделы; тесты разделов, путей и авторизации

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 15:02:30 +03:00