From eac0786bce9d0995ff874e1d25b39b2c9ac8abc2 Mon Sep 17 00:00:00 2001 From: DokoGen Date: Thu, 30 Jul 2026 14:52:01 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B3=D0=BE=D1=80=D0=BE=D0=B4,=20combob?= =?UTF-8?q?ox=20pd=5Fcount,=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B0=20=D1=80=D0=B0=D1=81=D1=87?= =?UTF-8?q?=D1=91=D1=82=D0=B0,=20=D0=B8=D0=BC=D0=BF=D0=BE=D1=80=D1=82=20?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dokogen/importer.py | 9 ++++----- dokogen/ui.py | 33 +++++++++++++-------------------- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/dokogen/importer.py b/dokogen/importer.py index d306538..39fb109 100644 --- a/dokogen/importer.py +++ b/dokogen/importer.py @@ -245,11 +245,10 @@ def _import_152_is_list(wb, data, log_fn): if 'цель обработки' in field_lower: current_section = 'purpose' elif current_section == 'purpose': - if field and 'выбрать' not in field_lower and field_lower not in ('значение', 'примечание'): - is_obj['description'] = field - log_fn(f" Цель: {field[:80]}") - elif val_b and 'выбрать' not in field_lower: - is_obj['description'] = val_b + purpose_val = field or val_b or '' + if purpose_val and 'выбрать' not in purpose_val.lower(): + is_obj['purpose'] = purpose_val + log_fn(f" Цель: {purpose_val[:80]}") current_section = 'header' elif current_section == 'subjects': if is_checked and 'выбрать' not in field_lower: diff --git a/dokogen/ui.py b/dokogen/ui.py index b61666f..eacd1a5 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -201,7 +201,7 @@ class DokoGenApp: addr_fields = [ ("Юридический адрес:", "address"), - ("Город (заполняется автоматически):", "city_name"), + ("Город:", "city_name"), ("ИНН:", "inn"), ("КПП:", "kpp"), ("ОГРН:", "ogrn"), @@ -309,8 +309,7 @@ class DokoGenApp: for lvl in ["1", "2", "3", "4"]: ttk.Radiobutton(def_frame, text=f"{lvl} ур.", variable=self.is_defence_var, value=lvl).pack(side=tk.LEFT, padx=3) - ttk.Button(def_frame, text="Рассчитать автоматически", - command=self._auto_calc_defence_level).pack(side=tk.LEFT, padx=10) + # Категории ПДн ttk.Label(fields_frame, text="Категории ПДн:").grid(row=5, column=0, sticky=tk.NW, pady=2) @@ -324,11 +323,14 @@ class DokoGenApp: cb.pack(anchor=tk.W) self.category_vars.append((cat, var)) - # Количество записей ПДн + # Количество записей ПДн (выпадающий список) ttk.Label(fields_frame, text="Кол-во записей:").grid(row=6, column=0, sticky=tk.W, pady=2) - self.is_pd_count_entry = ttk.Entry(fields_frame, width=30) - self.is_pd_count_entry.grid(row=6, column=1, padx=10, sticky=tk.W) - self.is_pd_count_entry.bind('', lambda e: self._on_categories_or_count_changed()) + self.is_pd_count_var = tk.StringVar(value="менее 100 000") + self.is_pd_count_combo = ttk.Combobox(fields_frame, textvariable=self.is_pd_count_var, + values=["менее 100 000", "более 100 000"], + state='readonly', width=28) + self.is_pd_count_combo.grid(row=6, column=1, padx=10, sticky=tk.W) + self.is_pd_count_combo.bind('<>', lambda e: self._on_categories_or_count_changed()) fields_frame.columnconfigure(1, weight=1) @@ -734,7 +736,7 @@ class DokoGenApp: # Считываем категории categories = [cat for cat, var in self.category_vars if var.get()] - pd_count_text = self.is_pd_count_entry.get().strip() if hasattr(self, 'is_pd_count_entry') else '' + pd_count = self.is_pd_count_var.get() if hasattr(self, 'is_pd_count_var') else 'менее 100 000' # Определяем базовый уровень (4 — самый низкий, по умолчанию) level = 4 @@ -744,18 +746,9 @@ class DokoGenApp: if has_special: level = 3 - # Больше 100 000 записей → повышаем уровень на 1 (уровень становится строже) - if pd_count_text: - # Парсим число - import re - nums = re.findall(r'\d+', pd_count_text.replace(' ', '')) - if nums: - count = int(nums[0]) - if count > 100000: - level = max(1, level - 1) # Уровень повышается (число уменьшается) - # Также проверяем текстовые варианты - if 'более' in pd_count_text.lower() or 'свыше' in pd_count_text.lower(): - level = max(1, level - 1) + # Больше 100 000 записей → повышаем уровень на 1 + if 'более' in pd_count.lower(): + level = max(1, level - 1) self.is_defence_var.set(str(level)) self.log(f"🛡 Уровень защищённости автоматически рассчитан: {level}")