Feature: Add validation warnings for missing fields in sync actions
Both LDAP→Django and Django→LDAP sync actions now check for missing required fields (name, email, employeeNumber) and display warnings before syncing. Shows up to 10 warnings per action.
This commit is contained in:
parent
7a770165f9
commit
55d0bcf906
@ -345,13 +345,31 @@ class LdapUserAdmin(admin.ModelAdmin):
|
||||
"""
|
||||
success_count = 0
|
||||
error_count = 0
|
||||
warnings = []
|
||||
|
||||
ldap_users = self._resolve_ldap_users(request)
|
||||
for ldap_user in ldap_users:
|
||||
if not ldap_user.employee_number:
|
||||
error_count += 1
|
||||
warnings.append(
|
||||
f'⚠️ {ldap_user.cn}: отсутствует employeeNumber (связь с Django)'
|
||||
)
|
||||
continue
|
||||
|
||||
# Проверка обязательных полей в LDAP
|
||||
missing_fields = []
|
||||
if not get_ldap_str(ldap_user.given_name):
|
||||
missing_fields.append('givenName (имя)')
|
||||
if not get_ldap_str(ldap_user.sn):
|
||||
missing_fields.append('sn (фамилия)')
|
||||
if not get_ldap_str(ldap_user.mail):
|
||||
missing_fields.append('mail (email)')
|
||||
|
||||
if missing_fields:
|
||||
warnings.append(
|
||||
f'⚠️ {ldap_user.cn}: отсутствуют поля в LDAP: {", ".join(missing_fields)}'
|
||||
)
|
||||
|
||||
try:
|
||||
emp = Employee.objects.get(pk=int(ldap_user.employee_number))
|
||||
|
||||
@ -382,6 +400,16 @@ class LdapUserAdmin(admin.ModelAdmin):
|
||||
level=messages.ERROR
|
||||
)
|
||||
|
||||
if warnings:
|
||||
for warning in warnings[:10]: # Первые 10 предупреждений
|
||||
self.message_user(request, warning, level=messages.WARNING)
|
||||
if len(warnings) > 10:
|
||||
self.message_user(
|
||||
request,
|
||||
f'...и ещё {len(warnings) - 10} предупреждений',
|
||||
level=messages.WARNING
|
||||
)
|
||||
|
||||
if success_count:
|
||||
self.message_user(
|
||||
request,
|
||||
@ -406,6 +434,7 @@ class LdapUserAdmin(admin.ModelAdmin):
|
||||
|
||||
success_count = 0
|
||||
error_count = 0
|
||||
warnings = []
|
||||
|
||||
service = UserService()
|
||||
|
||||
@ -413,11 +442,28 @@ class LdapUserAdmin(admin.ModelAdmin):
|
||||
for ldap_user in ldap_users:
|
||||
if not ldap_user.employee_number:
|
||||
error_count += 1
|
||||
warnings.append(
|
||||
f'⚠️ {ldap_user.cn}: отсутствует employeeNumber (связь с Django)'
|
||||
)
|
||||
continue
|
||||
|
||||
try:
|
||||
emp = Employee.objects.get(pk=int(ldap_user.employee_number))
|
||||
|
||||
# Проверка обязательных полей в Django
|
||||
missing_fields = []
|
||||
if not emp.first_name or not emp.first_name.strip():
|
||||
missing_fields.append('first_name (имя)')
|
||||
if not emp.last_name or not emp.last_name.strip():
|
||||
missing_fields.append('last_name (фамилия)')
|
||||
if not emp.email or not emp.email.strip():
|
||||
missing_fields.append('email')
|
||||
|
||||
if missing_fields:
|
||||
warnings.append(
|
||||
f'⚠️ Employee #{emp.pk}: отсутствуют поля: {", ".join(missing_fields)}'
|
||||
)
|
||||
|
||||
# Обновляем LDAP из Django через сервис
|
||||
changes = {
|
||||
'first_name': emp.first_name,
|
||||
@ -437,6 +483,16 @@ class LdapUserAdmin(admin.ModelAdmin):
|
||||
level=messages.ERROR
|
||||
)
|
||||
|
||||
if warnings:
|
||||
for warning in warnings[:10]: # Первые 10 предупреждений
|
||||
self.message_user(request, warning, level=messages.WARNING)
|
||||
if len(warnings) > 10:
|
||||
self.message_user(
|
||||
request,
|
||||
f'...и ещё {len(warnings) - 10} предупреждений',
|
||||
level=messages.WARNING
|
||||
)
|
||||
|
||||
if success_count:
|
||||
self.message_user(
|
||||
request,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user