fix: город, кнопки удаления в ИС, убрана колонка Доступ к ИС

This commit is contained in:
2026-07-30 15:44:58 +04:00
parent 59b9a3d577
commit f23b9de5cf
+21 -10
View File
@@ -338,12 +338,18 @@ class DokoGenApp:
nb2 = ttk.Notebook(self._is_edit_panel)
nb2.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
# Список ПДн
pd_tab = ttk.Frame(nb2)
nb2.add(pd_tab, text="Перечень ПДн")
pd_btn_frame = ttk.Frame(pd_tab)
pd_btn_frame.pack(fill=tk.X)
# Список ПДн
pd_tab = ttk.Frame(nb2)
nb2.add(pd_tab, text="Перечень ПДн")
pd_btn_frame = ttk.Frame(pd_tab)
pd_btn_frame.pack(fill=tk.X)
ttk.Button(pd_btn_frame, text="+ Добавить", command=self._add_pd_item).pack(side=tk.LEFT, padx=2)
ttk.Button(pd_btn_frame, text="- Удалить", command=lambda: self._del_from_listbox(self.pd_listbox)).pack(side=tk.LEFT, padx=2)
ttk.Button(pd_btn_frame, text="Выбрать из списка", command=self._select_from_pd_list).pack(side=tk.LEFT, padx=2)
self.pd_listbox = tk.Listbox(pd_tab, height=6)
self.pd_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
@@ -354,6 +360,7 @@ class DokoGenApp:
subj_btn_frame = ttk.Frame(subj_tab)
subj_btn_frame.pack(fill=tk.X)
ttk.Button(subj_btn_frame, text="+ Добавить", command=self._add_pd_subjects_item).pack(side=tk.LEFT, padx=2)
ttk.Button(subj_btn_frame, text="- Удалить", command=lambda: self._del_from_listbox(self.pd_subjects_listbox)).pack(side=tk.LEFT, padx=2)
ttk.Button(subj_btn_frame, text="Выбрать из списка", command=self._select_from_subjects_list).pack(side=tk.LEFT, padx=2)
self.pd_subjects_listbox = tk.Listbox(subj_tab, height=6)
self.pd_subjects_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
@@ -364,6 +371,7 @@ class DokoGenApp:
act_btn_frame = ttk.Frame(act_tab)
act_btn_frame.pack(fill=tk.X)
ttk.Button(act_btn_frame, text="+ Добавить", command=self._add_pd_action_item).pack(side=tk.LEFT, padx=2)
ttk.Button(act_btn_frame, text="- Удалить", command=lambda: self._del_from_listbox(self.pd_actions_listbox)).pack(side=tk.LEFT, padx=2)
ttk.Button(act_btn_frame, text="Выбрать из списка", command=self._select_from_actions_list).pack(side=tk.LEFT, padx=2)
self.pd_actions_listbox = tk.Listbox(act_tab, height=6)
self.pd_actions_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
@@ -374,6 +382,7 @@ class DokoGenApp:
def_btn_frame = ttk.Frame(def_tab)
def_btn_frame.pack(fill=tk.X)
ttk.Button(def_btn_frame, text="+ Добавить", command=self._add_defense_item).pack(side=tk.LEFT, padx=2)
ttk.Button(def_btn_frame, text="- Удалить", command=lambda: self._del_from_listbox(self.defense_tools_listbox)).pack(side=tk.LEFT, padx=2)
ttk.Button(def_btn_frame, text="Выбрать из списка", command=self._select_from_defense_list).pack(side=tk.LEFT, padx=2)
self.defense_tools_listbox = tk.Listbox(def_tab, height=6)
self.defense_tools_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
@@ -447,7 +456,7 @@ class DokoGenApp:
# Заголовки
header = ttk.Frame(frame)
header.pack(fill=tk.X)
for w, col in [(25, "Должность"), (30, "ФИО"), (30, "Доступ к ИС")]:
for w, col in [(25, "Должность"), (30, "ФИО")]:
ttk.Label(header, text=col, font=('', 9, 'bold'),
width=w, anchor=tk.W).pack(side=tk.LEFT, padx=2)
@@ -471,11 +480,11 @@ class DokoGenApp:
self._add_employee_row(
emp.get('position', ''),
emp.get('fio', ''),
emp.get('is_list', ''),
,
)
self._update_emp_count()
def _add_employee_row(self, position="", fio="", is_list=""):
def _add_employee_row(self, position="", fio=""):
"""Добавляет одну строку сотрудника."""
row = ttk.Frame(self._employees_frame)
row.pack(fill=tk.X, pady=2)
@@ -488,9 +497,6 @@ class DokoGenApp:
fio_entry.insert(0, fio)
fio_entry.pack(side=tk.LEFT, padx=2)
is_entry = ttk.Entry(row, width=30)
is_entry.insert(0, is_list if isinstance(is_list, str) else ', '.join(is_list))
is_entry.pack(side=tk.LEFT, padx=2)
del_btn = ttk.Button(row, text="", width=3,
command=lambda: self._delete_employee_row(row))
@@ -525,7 +531,6 @@ class DokoGenApp:
emp = {
'position': pos_e.get().strip(),
'fio': fio_e.get().strip(),
'is_list': [s.strip() for s in is_e.get().split(',') if s.strip()],
}
if emp['position'] or emp['fio']:
self.model.employees_access.append(emp)
@@ -700,13 +705,13 @@ class DokoGenApp:
"""Извлекает название города из адреса (простая эвристика)."""
if not address:
return ''
# Пробуем найти "г. Город"
# Пробуем найти "г. Город" или "Г Город" (без точки, заглавная)
import re
m = re.search(r'\bг\.\s*([А-ЯЁ][а-яёA-Za-z-]+(?:\s+[А-ЯЁ][а-яёA-Za-z-]+)*)', address)
m = re.search(r'\b[гГ]\.?\s*([А-ЯЁ][а-яёA-Za-z-]+(?:\s+[А-ЯЁ][а-яёA-Za-z-]+)*)', address)
if m:
return m.group(1).strip()
# Пробуем найти "город Город"
m = re.search(r'\bгород\s+([А-ЯЁ][а-яёA-Za-z-]+(?:\s+[А-ЯЁ][а-яёA-Za-z-]+)*)', address)
m = re.search(r'\bгород\s+([А-ЯЁ][а-яёA-Za-z-]+(?:\s+[А-ЯЁ][а-яёA-Za-z-]+)*)', address, re.IGNORECASE)
if m:
return m.group(1).strip()
# Пробуем первую часть до запятой, если там известный город
@@ -930,6 +935,12 @@ class DokoGenApp:
if sel:
self.users_listbox.delete(sel[0])
def _del_from_listbox(self, listbox):
"""Удаление выбранного элемента из любого listbox."""
sel = listbox.curselection()
if sel:
listbox.delete(sel[0])
# ==================== ВЫБОР ИЗ СПИСКА (словари) ====================
def _select_from_dialog(self, title: str, items: list, listbox):
"""Открывает окно с чекбоксами для выбора элементов из списка."""