3be444b05e
Серверная часть интеграции по эталону 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>
22 lines
630 B
Python
22 lines
630 B
Python
from django.contrib import admin
|
|
from unfold.admin import ModelAdmin
|
|
|
|
from .models import CarbonioSyncLog
|
|
|
|
|
|
@admin.register(CarbonioSyncLog)
|
|
class CarbonioSyncLogAdmin(ModelAdmin):
|
|
list_display = ('pharmacy', 'action', 'status', 'created_at')
|
|
list_filter = ('action', 'status')
|
|
search_fields = ('pharmacy__pharmacy_number', 'pharmacy__carbonio_email', 'message')
|
|
date_hierarchy = 'created_at'
|
|
|
|
def has_add_permission(self, request):
|
|
return False
|
|
|
|
def has_change_permission(self, request, obj=None):
|
|
return False
|
|
|
|
def has_delete_permission(self, request, obj=None):
|
|
return False
|