fix: импорт старых данных (обратная совместимость)

- объекты КИИ: добавлены варианты во мн.ч. в словари типов объекта
  (Автоматизированные системы управления, Информационно-телекоммуникационные сети)
  и способов взаимодействия (Проводной, Без проводной) — как в старом опроснике
- employees_access: фильтр плейсхолдеров («Формат: Фамилия Имя Отчество»,
  «Пример: …») и пустых строк при загрузке файла (from_dict) и при импорте опросника
This commit is contained in:
2026-08-04 17:28:20 +04:00
parent e4d4324005
commit 3ef1ff41e0
4 changed files with 31 additions and 10 deletions
+3 -1
View File
@@ -1,4 +1,6 @@
[ [
"проводной", "проводной",
"беспроводной" "беспроводной",
"Проводной",
"Без проводной"
] ]
+3 -1
View File
@@ -1,5 +1,7 @@
[ [
"Информационная система", "Информационная система",
"Автоматизированная система управления", "Автоматизированная система управления",
"Информационно-телекоммуникационная сеть" "Информационно-телекоммуникационная сеть",
"Автоматизированные системы управления",
"Информационно-телекоммуникационные сети"
] ]
+14
View File
@@ -154,6 +154,20 @@ class Company:
] ]
if "employees_access" in d and not isinstance(d["employees_access"], list): if "employees_access" in d and not isinstance(d["employees_access"], list):
d["employees_access"] = [] d["employees_access"] = []
# Отбрасываем плейсхолдеры из старых опросников («Формат: Фамилия Имя Отчество») и пустые строки
if "employees_access" in d and isinstance(d["employees_access"], list):
clean = []
for e in d["employees_access"]:
if not isinstance(e, dict):
continue
fio = str(e.get("fio", "")).strip()
pos = str(e.get("position", "")).strip()
if fio.lower().startswith("формат:") or fio.lower().startswith("пример:"):
continue
if not fio and not pos:
continue
clean.append(e)
d["employees_access"] = clean
if "okved_extra" in d and not isinstance(d.get("okved_extra"), list): if "okved_extra" in d and not isinstance(d.get("okved_extra"), list):
d["okved_extra"] = [] d["okved_extra"] = []
valid = {f.name for f in cls.__dataclass_fields__.values()} valid = {f.name for f in cls.__dataclass_fields__.values()}
+9 -6
View File
@@ -2479,14 +2479,17 @@ class DokoGenApp:
row_frame.destroy() row_frame.destroy()
self._employee_entries.clear() self._employee_entries.clear()
for emp in data['employeesAccess']: for emp in data['employeesAccess']:
fio = str(emp.get('fio', '')).strip()
pos = str(emp.get('position', '')).strip()
if fio.lower().startswith('формат:') or fio.lower().startswith('пример:'):
continue
if not fio and not pos:
continue
self.model.employees_access.append({ self.model.employees_access.append({
'position': emp.get('position', ''), 'position': pos,
'fio': emp.get('fio', ''), 'fio': fio,
}) })
self._add_employee_row( self._add_employee_row(pos, fio)
emp.get('position', ''),
emp.get('fio', ''),
)
self._update_emp_count() self._update_emp_count()
self.log("✅ Импорт применён") self.log("✅ Импорт применён")