Commit Graph

13 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 f4737155c5 locations: тип «Сервис / поставщик» для Вайтер Юг и аналогов.
Выбор в журнале работ и код объекта в it_monthly; сид Вайтер Юг.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 15:56:19 +03:00
lokses c78c1de2a1 it_manager: показывать закрытые аптеки в селектах локаций.
В журнале работ нужны закрытые объекты; в подписи — пометка [Закрыта].

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-07 15:43:31 +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 536679925a Правки логики 2026-09-21 20:37:18 +03:00
lokses b2f0c2a1e2 core/portal: сотрудник без группы видит только базовые разделы
Ранее разделы с perm=None (Новости, Задачи, Дислокация, Документы, Чат,
Календарь, HR-портал, Справка) были доступны любому вошедшему — сотрудник
без назначенной группы видел почти весь портал. Теперь такие разделы
требуют хотя бы одной группы; без групп доступны только базовые:
Главная, Профиль, Поддержка IT.

- user_can_access: BASELINE_OPEN_KEYS + gate «есть ли группа» для perm=None
- PortalSectionAccessMiddleware: барьер по префиксу URL (в т.ч. вложенные
  страницы вроде /tasks/5/), /settings/ не гейтим (редирект на свой профиль)
- index.html: пункты меню под can_section (сайдбар, дропдаун, bottom-nav),
  секция «Управление» скрывается целиком, если пусто
- тесты: политика без-группы + прямой заход по URL; тест-фабрики выдают
  группу (реальный сотрудник её имеет)

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

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:32 +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 01f0c6f002 Carbonio CE: хранение пароля ящика аптеки (шифрованно)
Вариант А — пароль ящика хранится обратимо-зашифрованным, чтобы показать
заведующему для входа:

- Pharmacy.carbonio_password (EncryptedCharField) — шифруется в БД
- sync_service при создании ящика генерирует пароль, отдаёт его в Carbonio
  и сохраняет свою зашифрованную копию; на update-пути пароль не трогается
- Пароль виден в админке аптеки (readonly, расшифрованный) — вкладка Carbonio
- 2 теста (мок CarbonioService): пароль сохранён, совпадает с отданным в
  Carbonio, в БД лежит шифртекстом; update не перетирает пароль

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 10:29:40 +03:00
lokses 3cbc019268 Carbonio CE: почтовый ящик аптеки — поля, генерация адреса, уникальность
Фундамент интеграции Carbonio на уровне модели Pharmacy (без обращений к серверу):

- Поля Pharmacy: carbonio_email, carbonio_account_id, carbonio_sync_enabled
  (default False), carbonio_sync_status, carbonio_last_sync, carbonio_sync_error
- Генерация адреса <mail_prefix организации><номер>@домен (a1@, t1@, p1@...);
  префикс из Directory.extra_data['mail_prefix'], домен из ConnectorConfig(carbonio)
  с дефолтом aks-apteka.com.ua
- Ручной override адреса не перетирается автогенерацией
- Уникальность carbonio_email: clean() + частичный unique-констрейнт в БД
  (пустые не конфликтуют); автоген при коллизии оставляет поле пустым
- 10 тестов (apps.locations.tests) — у приложения было 0

API-слой (клиент/sync/сигналы/задачи) — следующим шагом.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 19:55:15 +03:00
lokses 131cb27d16 Initial commit — ACORE pharmacy network management system
Django project: employees, locations, visit_manager, it_manager,
mattermost_connector and stub connectors (ad, mail, portal).
2026-05-31 14:21:47 +03:00