fix: город, кнопки удаления в ИС, убрана колонка Доступ к ИС
This commit is contained in:
+21
-10
@@ -338,12 +338,18 @@ class DokoGenApp:
|
|||||||
nb2 = ttk.Notebook(self._is_edit_panel)
|
nb2 = ttk.Notebook(self._is_edit_panel)
|
||||||
nb2.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
|
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)
|
pd_tab = ttk.Frame(nb2)
|
||||||
nb2.add(pd_tab, text="Перечень ПДн")
|
nb2.add(pd_tab, text="Перечень ПДн")
|
||||||
pd_btn_frame = ttk.Frame(pd_tab)
|
pd_btn_frame = ttk.Frame(pd_tab)
|
||||||
pd_btn_frame.pack(fill=tk.X)
|
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=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)
|
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 = tk.Listbox(pd_tab, height=6)
|
||||||
self.pd_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
|
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 = ttk.Frame(subj_tab)
|
||||||
subj_btn_frame.pack(fill=tk.X)
|
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=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)
|
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 = tk.Listbox(subj_tab, height=6)
|
||||||
self.pd_subjects_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
|
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 = ttk.Frame(act_tab)
|
||||||
act_btn_frame.pack(fill=tk.X)
|
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=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)
|
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 = tk.Listbox(act_tab, height=6)
|
||||||
self.pd_actions_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
|
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 = ttk.Frame(def_tab)
|
||||||
def_btn_frame.pack(fill=tk.X)
|
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=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)
|
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 = tk.Listbox(def_tab, height=6)
|
||||||
self.defense_tools_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
|
self.defense_tools_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
|
||||||
@@ -447,7 +456,7 @@ class DokoGenApp:
|
|||||||
# Заголовки
|
# Заголовки
|
||||||
header = ttk.Frame(frame)
|
header = ttk.Frame(frame)
|
||||||
header.pack(fill=tk.X)
|
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'),
|
ttk.Label(header, text=col, font=('', 9, 'bold'),
|
||||||
width=w, anchor=tk.W).pack(side=tk.LEFT, padx=2)
|
width=w, anchor=tk.W).pack(side=tk.LEFT, padx=2)
|
||||||
|
|
||||||
@@ -471,11 +480,11 @@ class DokoGenApp:
|
|||||||
self._add_employee_row(
|
self._add_employee_row(
|
||||||
emp.get('position', ''),
|
emp.get('position', ''),
|
||||||
emp.get('fio', ''),
|
emp.get('fio', ''),
|
||||||
emp.get('is_list', ''),
|
,
|
||||||
)
|
)
|
||||||
self._update_emp_count()
|
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 = ttk.Frame(self._employees_frame)
|
||||||
row.pack(fill=tk.X, pady=2)
|
row.pack(fill=tk.X, pady=2)
|
||||||
@@ -488,9 +497,6 @@ class DokoGenApp:
|
|||||||
fio_entry.insert(0, fio)
|
fio_entry.insert(0, fio)
|
||||||
fio_entry.pack(side=tk.LEFT, padx=2)
|
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,
|
del_btn = ttk.Button(row, text="✖", width=3,
|
||||||
command=lambda: self._delete_employee_row(row))
|
command=lambda: self._delete_employee_row(row))
|
||||||
@@ -525,7 +531,6 @@ class DokoGenApp:
|
|||||||
emp = {
|
emp = {
|
||||||
'position': pos_e.get().strip(),
|
'position': pos_e.get().strip(),
|
||||||
'fio': fio_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']:
|
if emp['position'] or emp['fio']:
|
||||||
self.model.employees_access.append(emp)
|
self.model.employees_access.append(emp)
|
||||||
@@ -700,13 +705,13 @@ class DokoGenApp:
|
|||||||
"""Извлекает название города из адреса (простая эвристика)."""
|
"""Извлекает название города из адреса (простая эвристика)."""
|
||||||
if not address:
|
if not address:
|
||||||
return ''
|
return ''
|
||||||
# Пробуем найти "г. Город"
|
# Пробуем найти "г. Город" или "Г Город" (без точки, заглавная)
|
||||||
import re
|
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:
|
if m:
|
||||||
return m.group(1).strip()
|
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:
|
if m:
|
||||||
return m.group(1).strip()
|
return m.group(1).strip()
|
||||||
# Пробуем первую часть до запятой, если там известный город
|
# Пробуем первую часть до запятой, если там известный город
|
||||||
@@ -930,6 +935,12 @@ class DokoGenApp:
|
|||||||
if sel:
|
if sel:
|
||||||
self.users_listbox.delete(sel[0])
|
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):
|
def _select_from_dialog(self, title: str, items: list, listbox):
|
||||||
"""Открывает окно с чекбоксами для выбора элементов из списка."""
|
"""Открывает окно с чекбоксами для выбора элементов из списка."""
|
||||||
|
|||||||
Reference in New Issue
Block a user