7.2 KiB
Техническая документация: 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), затем для каждой строки шаблона выполняет три шага:
- Вызывает
_get_node()— находит или создаётhg.nodeдля задачи - Создаёт
hg.indexсnode_id, именем из строки шаблона иinternal_code_idизcode_id - Создаёт
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 |