feat: вложенный цикл users_loop — все пользователи ИС включая администратора
- <!-- loop:users_loop --> внутри цикла ИС: {{user_fio}}, {{user_position}}
- администратор НЕ исключается (как просил Костя), убираются только
дубли по ФИО (нормализованное сравнение)
This commit is contained in:
@@ -9,6 +9,12 @@ from . import declension as dc
|
||||
from .models import Company, CommissionMember
|
||||
|
||||
|
||||
def _norm_name(s):
|
||||
"""Нормализация ФИО для сравнения: регистр, пробелы, точки, тире игнорируются."""
|
||||
s = (s or '').lower().replace('ё', 'е')
|
||||
return re.sub(r'[\s.,;:()«»"\'\-]+', '', s)
|
||||
|
||||
|
||||
# ============================================================
|
||||
# ОПИСАНИЕ ПЕРЕМЕННЫХ
|
||||
# ============================================================
|
||||
@@ -268,6 +274,16 @@ def _build_loop_data(company: Company, is_list: List) -> Dict[str, List[Dict]]:
|
||||
if is_list:
|
||||
items = []
|
||||
for isys in is_list:
|
||||
# Пользователи ИС для вложенного цикла <!-- loop:users_loop -->
|
||||
# ВСЕ пользователи, включая администратора (без дублей по ФИО)
|
||||
seen = set()
|
||||
users_loop = []
|
||||
for u in (isys.users_list or []):
|
||||
key = _norm_name(u)
|
||||
if key and key in seen:
|
||||
continue
|
||||
seen.add(key)
|
||||
users_loop.append({'fio': u, 'position': ''})
|
||||
items.append({
|
||||
'name': isys.name or '—',
|
||||
'description': isys.description or '—',
|
||||
@@ -280,6 +296,7 @@ def _build_loop_data(company: Company, is_list: List) -> Dict[str, List[Dict]]:
|
||||
'pd_list': ', '.join(isys.personal_data_list or []) or '—',
|
||||
'pd_count': str(isys.pd_count or '—'),
|
||||
'users': ', '.join(isys.users_list or []) or '—',
|
||||
'users_loop': users_loop,
|
||||
'defense_tools_list': ', '.join(isys.defense_tools_list or []) or '—',
|
||||
'processing_modes': isys.processing_modes or '—',
|
||||
'pd_subjects': '; '.join(isys.pd_subjects_list or []) or '—',
|
||||
|
||||
Reference in New Issue
Block a user