Files

134 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Техническая документация: mklab_project_task_indicators
**name:** `mklab_project_task_indicators`
**version:** 19.0.2025.11.14
**author:** MK.Lab
**depends:** `base`, `project`, `mklab_base_indicators`
---
## Архитектура
Модуль подключает стандартную модель `project.task` к инфраструктуре гиперграфных показателей через `hg.hg_mixin`. Новых моделей данных не вводит — только регистрирует наследование и добавляет представления.
```
project.task
hg.hg_mixin (из mklab_base_indicators)
├── hg.node — вершина графа (привязка к res_model / res_id)
├── hg.index — показатель (именованная метрика)
└── hg.value — значение показателя (план / факт / дата)
```
---
## Модели
### `project.task` (расширение)
**Файл:** `models/project_task.py`
Регистрирует множественное наследование от `hg.hg_mixin`. После этого каждая задача при создании автоматически получает вершину графа (`hg.node`), к которой можно привязывать показатели и связи.
```python
class ProjectTask(models.Model):
_name = 'project.task'
_inherit = ['project.task', 'hg.hg_mixin']
```
Через `hg.hg_mixin` задача получает следующие поля:
| Поле | Тип | Описание |
|---|---|---|
| `node_id` | Many2one к `hg.node` | Вершина графа данной задачи |
| `index_ids` | Many2many к `hg.index` | Показатели, привязанные к вершине задачи |
| `related_ids` | Many2many к `hg.node` | Связанные вершины из матрицы связности |
Полное описание полей и методов миксина — в документации модуля `mklab_base_indicators`.
---
## Представления
### Вкладка «Связи и показатели» на форме задачи
**Файл:** `views/project_task_views.xml`
Расширяет стандартную форму задачи (`project.view_task_form2`). Вкладка добавляется после вкладки «Описание» и содержит три блока:
**Блок «Показатели»** — список `index_ids` с колонками:
| Колонка | Поле | Описание |
|---|---|---|
| Название | `name` | Название показателя |
| Внутренний код | `internal_code_id` | Классификатор |
| Внешний код | `external_code` | Код для интеграций |
| Текущее значение | `current_value` | Вычисленное актуальное значение |
| Кнопка «Вычислить» | `calc` (object) | Запускает пересчёт значения по формуле |
**Блок «Связи»** — список `related_ids` с колонками:
| Колонка | Поле | Описание |
|---|---|---|
| Название | `name` | Название связанной вершины |
| Модель | `res_model` | Техническое имя модели Odoo |
| Кнопка «Открыть» | `goto_related` (object) | Открывает связанную запись в диалоге |
**Поле «Вершина графа»**`node_id`, readonly, показывает привязанную вершину.
---
## Отчёт «Сводная ведомость по проекту»
**Файлы:** `reports/template.xml`, `reports/action.xml`
**Модель:** `project.project`
**ID шаблона:** `mklab_project_task_indicators.general_report`
Отчёт формируется из формы проекта и итерирует по `task_ids`. Структура вывода для каждой задачи:
- Строка-заголовок с названием задачи (серый фон) — выводится если у задачи больше одного показателя
- Для каждого показателя задачи (`index_ids`) выводятся строки значений (`value_ids`):
| Колонка | Поле | Формат |
|---|---|---|
| Наименование показателя | `index.name` | текст |
| На дату | `hg_value.date_due` | дд.мм.гггг |
| Плановый показатель | `hg_value.value_float_plan` | число |
**Колонтитул отчёта:**
| Позиция | Содержимое |
|---|---|
| Левый | Дата печати в формате дд.мм.гггг |
| Центр | Текст «Согласовано» |
| Правый | Ответственный по проекту (`user_id`) |
---
## Демо-данные
**Файл:** `demo/demo.xml`
Создаёт демо-задачи с привязанными вершинами и показателями. Использует показатели из демо-данных `mklab_base_indicators`: `demo_index_revenue`, `demo_index_cost`, `demo_index_profit`.
---
## Тесты
**Файл:** `tests/`
| Файл | Что покрывает |
|---|---|
| `test_project_task.py` | Создание задачи, автосоздание вершины графа, привязка показателей |
| `test_hg_mixin.py` | Работа полей и методов миксина на модели `project.task` |
---
## Связанные модули
| Модуль | Роль |
|---|---|
| `mklab_base_indicators` | Обязательная зависимость: содержит `hg.hg_mixin` и все `hg.*` модели |
| `mklab_base_indicators_extended` | Надстройка: шаблоны смет, визард создания показателей, кнопки «Смета-анализ» и «Править смету» |
| `mklab_base_indicators_report` | Граф-отчёт «Показатели по узлам» |