diff --git a/backend/employees/admin.py b/backend/employees/admin.py
index d8c515b3..c0c8ffe1 100644
--- a/backend/employees/admin.py
+++ b/backend/employees/admin.py
@@ -231,20 +231,44 @@ class EmployeeAdmin(DjangoUserAdmin):
return "-"
from django.utils.html import format_html
+ import logging
+ logger = logging.getLogger(__name__)
# Если не управляется LDAP
if not obj.is_ldap_managed:
return format_html('Локальный')
try:
+ # Логируем попытку поиска
+ logger.debug(
+ f"[ldap_sync_status] Searching for employee {obj.pk} "
+ f"(email: {obj.email})"
+ )
+
sync_state = LdapSyncState.objects.filter(
model="employee",
object_pk=str(obj.pk)
).first()
+ logger.debug(
+ f"[ldap_sync_status] Employee {obj.pk}: "
+ f"sync_state={'found' if sync_state else 'not found'}"
+ )
+
if not sync_state:
+ # Попробуем найти любые записи для этого employee
+ all_syncs = LdapSyncState.objects.filter(
+ model="employee"
+ ).values_list("object_pk", flat=True)
+ logger.warning(
+ f"[ldap_sync_status] No sync record for employee {obj.pk}. "
+ f"All employee object_pks in sync table: {list(all_syncs)}"
+ )
+
return format_html(
- '❌ Нет записи'
+ '❌ Нет записи (ID: {})',
+ obj.pk,
+ obj.pk
)
# Проверяем полноту данных
@@ -255,7 +279,8 @@ class EmployeeAdmin(DjangoUserAdmin):
# Полные данные
if has_guid and has_dn and has_updated:
return format_html(
- '✅ {}',
+ '✅ {}',
+ obj.pk,
sync_state.ldap_guid,
sync_state.ldap_dn[:80] + '...' if len(sync_state.ldap_dn) > 80 else sync_state.ldap_dn,
sync_state.updated_at.strftime("%d.%m.%Y %H:%M")
@@ -269,17 +294,23 @@ class EmployeeAdmin(DjangoUserAdmin):
missing.append("DN")
return format_html(
- '⚠️ {}',
+ '⚠️ {}',
+ obj.pk,
", ".join(missing),
sync_state.updated_at.strftime("%d.%m.%Y %H:%M")
)
else:
return format_html(
- '⚠️ Неполные данные'
+ '⚠️ Неполные данные',
+ obj.pk
)
except Exception as e:
+ logger.exception(
+ f"[ldap_sync_status] Error for employee {obj.pk}: {e}"
+ )
return format_html(
- '❌ Ошибка',
+ '❌ Ошибка',
+ obj.pk,
str(e)
)