From 3ef1ff41e0c6feda361bd7c07e99ee8884132c28 Mon Sep 17 00:00:00 2001 From: prog1764 Date: Tue, 4 Aug 2026 17:27:44 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B8=D0=BC=D0=BF=D0=BE=D1=80=D1=82=20?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=80=D1=8B=D1=85=20=D0=B4=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20(=D0=BE=D0=B1=D1=80=D0=B0=D1=82=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=81=D0=BE=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=B8=D0=BC?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - объекты КИИ: добавлены варианты во мн.ч. в словари типов объекта (Автоматизированные системы управления, Информационно-телекоммуникационные сети) и способов взаимодействия (Проводной, Без проводной) — как в старом опроснике - employees_access: фильтр плейсхолдеров («Формат: Фамилия Имя Отчество», «Пример: …») и пустых строк при загрузке файла (from_dict) и при импорте опросника --- dokogen/dictionaries/net_methods.json | 6 ++++-- dokogen/dictionaries/object_types.json | 6 ++++-- dokogen/models.py | 14 ++++++++++++++ dokogen/ui.py | 15 +++++++++------ 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/dokogen/dictionaries/net_methods.json b/dokogen/dictionaries/net_methods.json index f706102..6650e45 100644 --- a/dokogen/dictionaries/net_methods.json +++ b/dokogen/dictionaries/net_methods.json @@ -1,4 +1,6 @@ [ "проводной", - "беспроводной" -] + "беспроводной", + "Проводной", + "Без проводной" +] \ No newline at end of file diff --git a/dokogen/dictionaries/object_types.json b/dokogen/dictionaries/object_types.json index 6102711..7fea437 100644 --- a/dokogen/dictionaries/object_types.json +++ b/dokogen/dictionaries/object_types.json @@ -1,5 +1,7 @@ [ "Информационная система", "Автоматизированная система управления", - "Информационно-телекоммуникационная сеть" -] + "Информационно-телекоммуникационная сеть", + "Автоматизированные системы управления", + "Информационно-телекоммуникационные сети" +] \ No newline at end of file diff --git a/dokogen/models.py b/dokogen/models.py index b53c10f..2e4a1af 100644 --- a/dokogen/models.py +++ b/dokogen/models.py @@ -154,6 +154,20 @@ class Company: ] if "employees_access" in d and not isinstance(d["employees_access"], list): 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): d["okved_extra"] = [] valid = {f.name for f in cls.__dataclass_fields__.values()} diff --git a/dokogen/ui.py b/dokogen/ui.py index 6c1efa2..eedad0e 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -2479,14 +2479,17 @@ class DokoGenApp: row_frame.destroy() self._employee_entries.clear() 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({ - 'position': emp.get('position', ''), - 'fio': emp.get('fio', ''), + 'position': pos, + 'fio': fio, }) - self._add_employee_row( - emp.get('position', ''), - emp.get('fio', ''), - ) + self._add_employee_row(pos, fio) self._update_emp_count() self.log("✅ Импорт применён")