Вкладка «Организация»: вместо 5 полей доходов по годам — одна строка «Доход за 5 лет (суммарно)» + «Снижение уровня дохода», жирный заголовок убран; миграция старых файлов (сумма по годам → income_5y), авторасчёт/автозаполнение/DaData/шаблоны обновлены

This commit is contained in:
LocoAgent
2026-08-05 14:54:31 +04:00
parent 829a1a98e3
commit 5bb6a2f5e9
3 changed files with 50 additions and 18 deletions
+23 -12
View File
@@ -345,19 +345,12 @@ class DokoGenApp:
entry.grid(row=i, column=1, padx=10, sticky=tk.EW, pady=1)
self._company_entries[key] = entry
# Показатель 8 (ущерб субъекту КИИ): доходы за 5 лет + суммарный ущерб
ttk.Label(f_fin, text="Доходы за 5 лет (показатель 8):",
font=('', 9, 'bold')).grid(row=len(fin_fields), column=0, columnspan=2,
sticky=tk.W, pady=(8, 2))
# Показатель 8 (ущерб субъекту КИИ): доход за 5 лет (суммарно) + суммарный ущерб
ttk.Button(f_fin, text="🌐 Загрузить доходы из DaData (по ИНН)",
command=self._load_incomes_from_dadata).grid(
row=len(fin_fields), column=2, padx=5, sticky=tk.W)
income_fields = [
("Доход за 5 лет назад (руб.):", "income_year_1"),
("Доход за 4 года назад (руб.):", "income_year_2"),
("Доход за 3 года назад (руб.):", "income_year_3"),
("Доход за 2 года назад (руб.):", "income_year_4"),
("Доход за прошлый год (руб.):", "income_year_5"),
("Доход за 5 лет (суммарно, руб.):", "income_5y"),
("Снижение уровня дохода от нарушения критических процессов (руб.):", "income_loss"),
]
for j, (label, key) in enumerate(income_fields):
@@ -2360,11 +2353,21 @@ class DokoGenApp:
return e
e_profit = e_tax = None
# Доходы за 5 лет — из данных организации (поля «Доходы за 5 лет»)
# Доходы за 5 лет — из данных организации (поле «Доход за 5 лет (суммарно)»,
# иначе — обратная совместимость по годам)
_incs_raw = [getattr(self.model, f'income_year_{i}', '') or '' for i in range(1, 6)]
_incs = [_num(x) for x in _incs_raw]
_incs_filled = [x for x in _incs if x is not None]
_d_avg = (sum(_incs_filled) / len(_incs_filled)) if _incs_filled else None
_inc5 = _num(getattr(self.model, 'income_5y', '') or '')
if _inc5:
_d_avg = _inc5 / 5.0
_n_years = 5
elif _incs_filled:
_d_avg = sum(_incs_filled) / len(_incs_filled)
_n_years = len(_incs_filled)
else:
_d_avg = None
_n_years = 0
_d_loss = _num(getattr(self.model, 'income_loss', '') or '')
_bv8 = getattr(isys, 'balance_value', '') or ''
_bvn8 = _num(_bv8)
@@ -4247,9 +4250,16 @@ class DokoGenApp:
# Последние 5 лет: income_year_5 (самый свежий) ... income_year_1 (самый старый)
last5 = rows[-5:]
mapping = []
total = 0.0
for i, (y, inc) in enumerate(last5):
# y — календарный год; income_year_1 — самый старый из пяти
mapping.append((f'income_year_{i+1}', y, inc))
total += inc
# Основное поле формы — «Доход за 5 лет (суммарно)»
entry = self._company_entries.get('income_5y')
if entry:
entry.delete(0, tk.END)
entry.insert(0, f"{total:,.0f}".replace(',', ' '))
for key, y, inc in mapping:
entry = self._company_entries.get(key)
if entry:
@@ -4258,7 +4268,7 @@ class DokoGenApp:
self._collect_company()
years = ', '.join(f"{y}: {inc:,.0f} руб." for _, y, inc in mapping)
self.log(f"🌐 Доходы из DaData загружены: {years}")
messagebox.showinfo("DaData", f"Доходы загружены из DaData:\n{years}")
messagebox.showinfo("DaData", f"Доходы загружены из DaData (сумма за 5 лет: {total:,.0f} руб.):\n{years}")
def _select_main_okved(self):
"""Выбор основного ОКВЭД из словаря (всегда один)."""
@@ -4623,6 +4633,7 @@ class DokoGenApp:
# Показатель 8: доходы за 5 лет + суммарный ущерб от нарушения критических процессов
income_map = [
('income_5y', ('income5Y', 'income_5y', 'income5y')),
('income_year_1', ('incomeYear1', 'income_year_1')),
('income_year_2', ('incomeYear2', 'income_year_2')),
('income_year_3', ('incomeYear3', 'income_year_3')),