feat: финансовые показатели организации + балансовая стоимость объекта

- модели: Company.profit (сумма прибыли), Company.profit_tax (налог с прибыли),
  InformationSystem.balance_value (балансовая стоимость объекта КИИ)
- импорт из опросника: «Сумма прибыли за предыдущий год» и «Сумма налога с прибыли»
  (Общие сведения) → profit/profitTax; «Балансовая стоимость объекта КИИ в рублях»
  (каждый ОБЪЕКТ-лист) → balanceValue, больше не падает в описание
- UI: блок «Финансовые показатели» во вкладке «Организация»; поле
  «Балансовая стоимость (руб.)» в объекте КИИ; маппинги collect/select/copy/import
- генератор: {{company_profit}}, {{company_profit_tax}}, {{item.balance_value}}
This commit is contained in:
2026-08-04 19:17:37 +04:00
parent 58b4402d31
commit b044b05eaf
4 changed files with 48 additions and 1 deletions
+33
View File
@@ -326,6 +326,20 @@ class DokoGenApp:
ttk.Entry(f4, textvariable=self.doc_date_var, width=25).grid(
row=1, column=1, padx=10, sticky=tk.W)
# --- Финансовые показатели (опросник) ---
f_fin = ttk.LabelFrame(left, text="Финансовые показатели", padding=10)
f_fin.pack(fill=tk.X, pady=5)
fin_fields = [
("Сумма прибыли за предыдущий год (руб.):", "profit"),
("Сумма налога с прибыли (руб.):", "profit_tax"),
]
for i, (label, key) in enumerate(fin_fields):
ttk.Label(f_fin, text=label).grid(row=i, column=0, sticky=tk.W, pady=2)
entry = ttk.Entry(f_fin, width=50)
entry.grid(row=i, column=1, padx=10, sticky=tk.EW, pady=1)
self._company_entries[key] = entry
f_fin.columnconfigure(1, weight=1)
# --- Правая панель: проверка данных ---
right = ttk.LabelFrame(main, text="Проверка данных", padding=10)
right.pack(side=tk.RIGHT, fill=tk.Y, padx=(10, 0))
@@ -776,6 +790,11 @@ class DokoGenApp:
ttk.Radiobutton(cat_frame, text=val, variable=self.is_category_var,
value=val).pack(side=tk.LEFT, padx=3)
ttk.Label(fields_frame, text="Балансовая стоимость (руб.):").grid(
row=3, column=0, sticky=tk.W, pady=2)
self.is_balance_entry = ttk.Entry(fields_frame, width=60)
self.is_balance_entry.grid(row=3, column=1, padx=10, sticky=tk.EW, pady=2)
fields_frame.columnconfigure(1, weight=1)
# ---- Вложенные вкладки ----
@@ -1282,6 +1301,8 @@ class DokoGenApp:
if hasattr(self, 'is_software_entry'):
isys.software = self.is_software_entry.get().strip()
isys.category = self.is_category_var.get()
if hasattr(self, 'is_balance_entry'):
isys.balance_value = self.is_balance_entry.get().strip()
# Поля 236 приказа
for attr, model_field in [
('is_purpose_entry', 'purpose'),
@@ -1515,6 +1536,9 @@ class DokoGenApp:
self.is_software_entry.delete(0, tk.END)
self.is_software_entry.insert(0, isys.software or "")
self.is_category_var.set(isys.category or "без категории")
if hasattr(self, 'is_balance_entry'):
self.is_balance_entry.delete(0, tk.END)
self.is_balance_entry.insert(0, isys.balance_value or "")
# Поля 236 приказа
for attr, model_field in [
@@ -1610,6 +1634,7 @@ class DokoGenApp:
hw_sw=src.hw_sw,
os_sw=src.os_sw,
app_sw=src.app_sw,
balance_value=src.balance_value,
attacker_category=src.attacker_category,
threats=src.threats,
incidents=src.incidents,
@@ -2694,6 +2719,13 @@ class DokoGenApp:
if data.get('contractDate'):
self.doc_date_var.set(data['contractDate'])
# Финансовые показатели (прибыль, налог)
for entry_key, data_keys in [('profit', 'profit'), ('profit_tax', 'profitTax')]:
entry = self._company_entries.get(entry_key)
if entry and data.get(data_keys):
entry.delete(0, tk.END)
entry.insert(0, data[data_keys])
# Наименование структурного подразделения по безопасности
if data.get('ispdnDepartment'):
self.model.security_department = data['ispdnDepartment']
@@ -2767,6 +2799,7 @@ class DokoGenApp:
hw_sw=is_data.get('hw_sw', ''),
os_sw=is_data.get('os_sw', ''),
app_sw=is_data.get('app_sw', ''),
balance_value=is_data.get('balanceValue', is_data.get('balance_value', '')),
attacker_category=is_data.get('attacker_category', ''),
threats=is_data.get('threats', ''),
incidents=is_data.get('incidents', ''),