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>
This commit is contained in:
@@ -266,6 +266,8 @@ class PharmacyAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
readonly_fields = [
|
||||
'address', 'employees_count_display', 'license_status_display',
|
||||
'is_active', 'created_at', 'updated_at',
|
||||
'carbonio_account_id', 'carbonio_sync_status', 'carbonio_last_sync',
|
||||
'carbonio_sync_error',
|
||||
]
|
||||
|
||||
fieldsets = (
|
||||
@@ -304,6 +306,15 @@ class PharmacyAdmin(ModelAdmin, ImportExportModelAdmin):
|
||||
'pharmacists_count', 'employees_count_display',
|
||||
),
|
||||
}),
|
||||
(_('Почта Carbonio'), {
|
||||
'classes': ('tab',),
|
||||
'fields': (
|
||||
'carbonio_sync_enabled', 'carbonio_email', 'carbonio_account_id',
|
||||
'carbonio_sync_status', 'carbonio_last_sync', 'carbonio_sync_error',
|
||||
),
|
||||
'description': _('Пусто в «Почта Carbonio» — адрес сгенерируется как '
|
||||
'<префикс организации><номер>@домен. Можно задать вручную.'),
|
||||
}),
|
||||
(_('Примечания'), {
|
||||
'classes': ('tab',),
|
||||
'fields': ('comments', 'created_at', 'updated_at'),
|
||||
|
||||
Reference in New Issue
Block a user