Public release from ruodoo-project: 19.0 - 2026-07-26 21:17:35 UTC

This commit is contained in:
CI Publish Bot
2026-07-26 21:17:45 +00:00
commit 4f7b594ec8
1335 changed files with 191620 additions and 0 deletions

View File

@ -0,0 +1,168 @@
# Техническая документация: 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` |
---