feat: вложенный цикл users_loop (пользователи ИС в таблице доступа)

- в цикле information_systems появился вложенный цикл
  <!-- loop:users_loop --> ... <!-- loop_end -->
  с переменными {{user_fio}}, {{user_position}}
- администратор (admin_fio/ispdn_fio) автоматически исключается
  из списка пользователей — не дублируется в таблице
- сравнение ФИО нормализованное (регистр/пробелы/точки не важны)
This commit is contained in:
2026-08-03 15:07:08 +04:00
parent 208e449953
commit 98e84fb155
2 changed files with 79 additions and 0 deletions
+18
View File
@@ -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)
# ============================================================
# ОПИСАНИЕ ПЕРЕМЕННЫХ
# ============================================================
@@ -267,7 +273,18 @@ def _build_loop_data(company: Company, is_list: List) -> Dict[str, List[Dict]]:
# ИС
if is_list:
items = []
admin_fio = (getattr(company, 'admin_fio', '') or '').strip()
if not admin_fio:
admin_fio = (getattr(company, 'ispdn_fio', '') or '').strip()
admin_norm = _norm_name(admin_fio)
for isys in is_list:
# Пользователи ИС для вложенного цикла <!-- loop:item_users -->
# (без администратора, чтобы он не дублировался)
users_loop = []
for u in (isys.users_list or []):
if admin_norm and _norm_name(u) == admin_norm:
continue
users_loop.append({'fio': u, 'position': ''})
items.append({
'name': isys.name or '',
'description': isys.description or '',
@@ -280,6 +297,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 '',