fix: импорт одного человека в поле ФИО (старые опросники)

- если в ячейке ФИО несколько человек (через запятую/точку с запятой/
  перевод строки или просто подряд) — остаётся первое полное ФИО
- применяется к должностным лицам (chief/ответственный/админ),
  комиссии и сотрудникам при импорте из опросника
- то же при открытии сохранённого файла (from_dict):
  «Коростелев Павел Сергеевич Хрящев Сергей Владимирович …» → «Коростелев Павел Сергеевич»
This commit is contained in:
2026-08-04 17:34:17 +04:00
parent 42a243f7b6
commit b6f595fd32
2 changed files with 49 additions and 3 deletions
+22 -1
View File
@@ -5,6 +5,21 @@ from dataclasses import dataclass, field, asdict
from typing import List, Dict, Any
def _clean_single_fio(value):
"""Оставить одно первое ФИО, если в строке их несколько."""
if not value:
return value
value = str(value).strip()
for sep in (',', ';', '\n', '\r'):
if sep in value:
value = value.split(sep)[0].strip()
break
words = [w for w in value.split() if w]
if len(words) > 3:
value = ' '.join(words[:3])
return value.strip()
@dataclass
class CommissionMember:
"""Член комиссии по категорированию объектов КИИ"""
@@ -171,7 +186,13 @@ class Company:
if "okved_extra" in d and not isinstance(d.get("okved_extra"), list):
d["okved_extra"] = []
valid = {f.name for f in cls.__dataclass_fields__.values()}
return cls(**{k: v for k, v in d.items() if k in valid})
obj = cls(**{k: v for k, v in d.items() if k in valid})
# Если в поле ФИО несколько человек — оставить одного (старые опросники)
for fio_field in ('chief_fio', 'responsible_fio', 'admin_fio'):
val = getattr(obj, fio_field, '')
if val:
setattr(obj, fio_field, _clean_single_fio(val))
return obj
def get_folder_name(self) -> str:
if self.short_name: