# Слой директив (Directive Layer)
**name:** `directive_layer`  
**version:** 19.0.1.0.0  
**author:** Mk.Lab

---

## 1. Общее описание

**Директива** — это структурированное задание, которое система Odoo автоматически создаёт и назначает исполнителю при наступлении бизнес-события. Директива несёт в себе информацию о типе работ, ответственных ролях, дедлайне, трудоёмкости и ожидаемом результате.

---

## 2. Установка

1. Убедитесь, что установлен модуль `base_user_role`
2. Скопируйте папку `directive_layer` в директорию `addons`
3. Перезапустите сервер Odoo
4. Перейдите в **Настройки → Приложения → Обновить список**
5. Найдите **«Directive Layer»** и нажмите **Установить**

После установки автоматически создаются 7 стадий заданий.

## 3. Функциональность

- Автоматическое создание заданий при наступлении событий в системе
- Три типа исполнителей: человек, программный агент, оборудование
- Статусная машина с контролируемыми переходами между стадиями
- Визуальные светофоры для контроля состояния исполнителя и ресурсов
- Шаблоны и группы шаблонов для быстрого создания пакетов заданий
- Настройка правил автоматической генерации без программирования
- Рабочий стол исполнителя — полноэкранный дашборд для работы с заданиями

---

---

## 4. Роли пользователей

| Роль | Что может делать |
|---|---|
| Исполнитель | Видит свои задания, берёт в работу, завершает |
| Заявитель | Создаёт и отслеживает задания |
| Диспетчер | Назначает исполнителей, управляет очередью |

При назначении роли **Исполнителя** система автоматически устанавливает «Рабочий стол исполнителя» домашней страницей пользователя.

---

## 5. Жизненный цикл директивы

```
Черновик
    ↓ подтверждение
Подтверждена
    ↓ планирование
Запланирована
    ↓ старт
В работе  ←→  На паузе
    ↓ завершение
Выполнена
```

При завершении задания система автоматически уведомляет объект-источник (задачу, заказ и т.д.) о результате.

---

## Как это выглядит в интерфейсе

### На форме объекта (задача, заказ, счёт...)

После подключения к объекту на его форме появляются три элемента:

**Кнопка «Выбрать тип»** в шапке формы — позволяет выбрать группу шаблонов заданий для данного объекта.

**Кнопка «Директивы»** — показывает количество заданий, связанных с записью. Нажмите, чтобы открыть список.

**Поле «Текущий статус исполнения»** — автоматически вычисляемый текст с наиболее приоритетным активным заданием, ближайшим дедлайном и ожидаемой датой завершения.

![img_1.png](img_1.png)
---

### Рабочий стол исполнителя по задачам

Полноэкранный канбан-дашборд для пользователей с ролью «Исполнитель». Показывает только задания, назначенные текущему пользователю, сгруппированные по стадиям. 

![img_2.png](img_2.png)

---

### Меню «Директивы»

В главном меню появляется раздел **Директивы** с двумя пунктами:

- **Все директивы** — список всех заданий в системе (канбан и список)
- **Политики** — правила автоматического создания заданий без программирования

В подразделе **Директивы → Настройки** доступны справочники:

- **Шаблоны директив** — словарь шаблонов с типом работ, трудоёмкостью и ролями
- **Группы шаблонов директив** — наборы шаблонов для пакетного создания заданий
- **Виды работ** — справочник видов работ
- **Статусы директив** — справочник стадий заданий
- **Источники директив** — список объектов, к которым подключены задания

![img_3.png](img_3.png)

---

## Как создавать задания: три способа

### 1. Вручную

Откройте нужный объект → кнопка **«Выбрать тип»** → выберите группу шаблонов → задания создаются немедленно.

![img_4.png](img_4.png)

### 2. Автоматически через политику (без кода)

Перейдите в **Директивы → Политики** и создайте правило:
- Выберите объект (задача, заказ и т.д.)
- Укажите событие: при изменении поля, при создании записи или при вызове действия
- Задайте условие срабатывания
- Выберите группу шаблонов

![img_5.png](img_5.png)

После сохранения задания будут создаваться автоматически при наступлении события.

### 3. Через код (для разработчиков)

Разработчик подключает модуль к нужной модели через `directive.mixin`. Подробнее — в технической документации и модулю.

---

## Зависимости

| Модуль | Назначение |
|---|---|
| `base` | Базовый Odoo |
| `web` | Фронтенд |
| `base_user_role` | Управление ролями пользователей |
| `project` | Модуль проектов |


