# Техническая документация: 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` | Граф-отчёт «Показатели по узлам» |
