Public release from ruodoo-project: 19.0 - 2026-07-26 21:17:35 UTC
This commit is contained in:
168
mklab_base_indicators_extended/TECHNICAL.md
Normal file
168
mklab_base_indicators_extended/TECHNICAL.md
Normal 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` |
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user