fix: импорт одного человека в поле ФИО (старые опросники)
- если в ячейке ФИО несколько человек (через запятую/точку с запятой/ перевод строки или просто подряд) — остаётся первое полное ФИО - применяется к должностным лицам (chief/ответственный/админ), комиссии и сотрудникам при импорте из опросника - то же при открытии сохранённого файла (from_dict): «Коростелев Павел Сергеевич Хрящев Сергей Владимирович …» → «Коростелев Павел Сергеевич»
This commit is contained in:
+22
-1
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user