Commit Graph

12 Commits

Author SHA1 Message Date
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 c6684721e7 mail: batched preview FETCH + одна IMAP-сессия на чтение письма
Убраны ~40 round-trip на список; unread через STATUS; открытие письма
без второго LOGIN.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 15:12:48 +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 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 ea96c7a2ab mail: корректный парсинг UID из ответа FETCH
Извлекаем UID регуляркой `UID (\d+)` вместо хрупкого split — прежний код
давал нечисловой/пустой uid (`456 FLAGS (\Seen`), из-за чего открытие письма
падало (UID FETCH с битым аргументом). Записи без UID пропускаем.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 14:10:25 +03:00
lokses 6935ee2d59 mail: не падать 500 при битом uid / IMAP BAD
- fetch_message валидирует uid (только цифры) → иначе «Лист не знайдено»
  вместо malformed UID FETCH (сервер отвечал BAD zero-length content).
- _with_imap ловит imaplib.IMAP4.error/OSError → страница /email/ отдаёт
  connection_error, а не 500.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 14:06:17 +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 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 3be444b05e Carbonio CE: API-слой синхронизации ящиков аптек
Серверная часть интеграции по эталону AD-коннектора (драйвер — Pharmacy):

- carbonio_service.py: клиент admin API Carbonio/Zimbra (JSON-SOAP на 6071):
  auth + get/create/modify(status)/delete account, ping для read-only проверки
- services/sync_service.py: sync_pharmacy_to_carbonio (идемпотентно),
  deactivate_pharmacy_carbonio; логирование в CarbonioSyncLog
- signals.py: post_save/pre_save на Pharmacy — создание ящика при включённой
  синхронизации, закрытие/открытие при смене статуса аптеки; защита от рекурсии
  (account_id гасит повторный вызов), sync_enabled=False по умолчанию не трогает прод
- tasks.py: Celery-обёртки; CarbonioSyncLog + read-only админка
- команда sync_pharmacies_to_carbonio (dry-run по умолчанию, --apply)
- Carbonio-поля в админке Pharmacy; убран конфликт models.py vs models/

Без живого сервера деградирует мягко: CarbonioConfigError не роняет сохранение.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 10:02:35 +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