Files
public/mklab_base_indicators_extended/TECHNICAL.md

7.2 KiB
Raw Blame History

Техническая документация: mklab_base_indicators_extended

name: mklab_base_indicators_extended
version: 19.0.2025.11.24
author: MK.Lab depends: base, mklab_project_task_indicators


Архитектура

Модуль надстраивается поверх mklab_base_indicators и mklab_project_task_indicators. Вводит две новые модели для хранения шаблонов смет, визард применения шаблона к задаче и расширяет project.task двумя методами-действиями.

mklab_base_indicators_extended
├── hg.templates          — шаблон сметы (заголовок)
├── hg.templates.line     — строка шаблона (показатель + дата + сумма)
├── estimate.wizard       — визард применения шаблона к задаче
└── project.task          — расширение: методы «Смета-анализ» и «Править смету»

Модели

hg.templates — Шаблон сметы

Файл: models/hg_templates.py

Хранит именованный набор строк показателей — шаблон для быстрого создания сметы задачи.

Поле Тип Описание
name Char Название шаблона
line_ids One2many к hg.templates.line Строки шаблона

hg.templates.line — Строка шаблона

Файл: models/hg_templates.py

Одна строка шаблона: конкретный показатель с плановой датой и суммой.

Поле Тип Описание
template_id Many2one к hg.templates (required) Родительский шаблон
index_id Many2one к hg.index (required) Показатель из справочника
date_due Date Плановая дата
value_float_plan Float Плановая сумма

estimate.wizard — Визард создания сметы

Файл: wizard/estimate_wizard.py
Тип: models.TransientModel

Диалог выбора шаблона и кода показателей. Открывается из формы задачи когда у неё ещё нет показателей.

Поле Тип Описание
template_id Many2one к hg.templates (required) Выбранный шаблон сметы
code_id Many2one к hg.index.code (required) Код, присваиваемый всем создаваемым показателям

Метод confirm_action()

Получает ID задачи из контекста (active_id), затем для каждой строки шаблона выполняет три шага:

  1. Вызывает _get_node() — находит или создаёт hg.node для задачи
  2. Создаёт hg.index с node_id, именем из строки шаблона и internal_code_id из code_id
  3. Создаёт hg.value с type='alone', date_due и value_float_plan из строки шаблона

После обхода всех строк закрывает диалог через ir.actions.act_window_close.

Метод _get_node(res_model, res_id, name)

Ищет существующий hg.node по паре (res_model, res_id). Если не найден — создаёт новый. Гарантирует что для одной задачи не создаётся дублирующих вершин.


project.task — Расширение

Файл: models/project_task.py

Добавляет два метода-действия в модель задачи, вызываемых через кнопки на форме.

action_estimate_analysis()

Открывает hg.value в режиме pivot в диалоге. Фильтрует только значения показателей текущей задачи (index_id in self.index_ids). Использует кастомный pivot-вид view_estimate_pivot.

action_edit_estimate()

Условная логика в зависимости от наличия показателей у задачи:

Условие Результат
self.index_ids не пустой Открывает hg.value в list-режиме (view_edit_estimate_list) в диалоге
self.index_ids пустой Открывает визард estimate.wizard с active_id задачи в контексте

Представления

Файл Содержание
views/hg_templates.xml Форма и список шаблонов смет (hg.templates)
views/hg_value.xml Кастомные виды hg.value: pivot (view_estimate_pivot) и list (view_edit_estimate_list)
views/project_task.xml Кнопки «Смета-анализ» и «Править смету» на форме задачи
wizard/estimate_wizard.xml Форма визарда выбора шаблона

Данные при установке

Файл: data/data.xml

Создаёт один классификатор и 6 предустановленных показателей hg.index:

XML ID Название Внешний код
work_design Работы по проектированию EXT-DESIGN
work_excavation Подготовка котлована EXT-EXCAV
work_foundation Фундамент EXT-FOUND
work_monolithic Монолитные работы EXT-MONO
work_finishing Отделочные работы EXT-FINISH
work_engineering Инженерные работы EXT-ENG

Демо-данные

Файл: demo/demo.xml

Создаёт шаблон «Смета проекта (базовая)» с тремя строками:

Показатель Плановая сумма Дата
Выручка (demo_index_revenue) 2 000 000 2026-12-31
Себестоимость (demo_index_cost) 1 200 000 2026-12-31
Прибыль (demo_index_profit) 800 000 2026-12-31

Использует показатели из демо-данных модуля mklab_base_indicators.


Права доступа

Файл: security/ir.model.access.csv

Модель Группа Права
hg.templates group_indicators_admin CRUD
hg.templates.line group_indicators_admin CRUD
estimate.wizard group_indicators_admin CRUD

Тесты

Файл: tests/

Файл Что покрывает
test_hg_templates.py Создание шаблонов, добавление строк, корректность полей
test_estimate_wizard.py Применение шаблона к задаче, создание hg.node / hg.index / hg.value, идемпотентность _get_node