Files
public/directive_test/TECHNICAL.md

7.7 KiB
Raw Blame History

Directive Test

name: directive_test version: 19.0.1.0.0 author: Mk.Lab depends: directive_layer, base_user_role, sale, mail, account, account_payment, mrp, project, stock

Назначение

Демонстрационный модуль интеграции directive_layer с базовыми моделями Odoo. Служит референсом для разработчиков при подключении директив к новым моделям.


Паттерн интеграции

Каждая интегрируемая модель подключается к directive.mixin через _inherit и реализует два элемента:

class SomeModel(models.Model):
    _name = 'some.model'
    _inherit = ['some.model', 'directive.mixin']

    def _directive_generation_spec(self) -> list[dict]:
        return [{ ...spec... }]

    def action_executor_response(self, payload: dict) -> bool:
        # вызывается при завершении директивы
        return True

Структура спецификации _directive_generation_spec()

Ключ Описание
event Тип события: on_write или on_callback
key Уникальный ключ директивы (для режима create_once)
field Имя поля (для on_write)
from Значение поля до изменения
to Значение поля после изменения
callback Имя метода (для on_callback)
when Момент вызова: after
if_result Условие на результат метода
use_record_template_group Брать группу шаблонов из поля записи
mode create_once — создать директиву только один раз
domain Дополнительный фильтр по записям модели

Интегрированные модели

project.task + directive.mixin

Файл: models/project_task.py

Параметр Значение
Событие on_write
Поле stage_id
Переход от ID 9 к ID 10
Тип исполнителя human

Callback directive_on_done_post_message(payload) — публикует в чат задачи сообщение: «Директива выполнена: {directive_name}».


account.move + directive.mixin

Файл: models/account_move.py

Параметр Значение
Событие on_write
Поле state
Переход draftposted
Domain move_type = 'in_invoice' (только входящие счета)
Тип исполнителя software (аудит-бот)

Callback action_audit_response(payload) — публикует в чат счёта результат проверки с оценкой риска.


sale.order + directive.mixin

Файл: models/sale_order.py

Параметр Значение
Событие on_write
Поле state
Переход draftsale
Тип исполнителя software (WMS-агент)

Callback action_wms_response(payload) — публикует в чат заказа информацию о резервировании товара с указанием ячейки.


account.payment + directive.mixin

Файл: models/account_payment.py

Параметр Значение
Событие on_write
Поле state
Переход draftin_process
Domain payment_type = 'outbound' (только исходящие)
Тип исполнителя software (банковский шлюз)

Callback action_bank_gateway_response(payload) — публикует в чат платежа банковский референс в формате REF-{id}-X99.


stock.picking + directive.mixin

Файл: models/stock_picking.py

Параметр Значение
Событие on_callback
Метод button_validate
Когда after
Условие if_result: True
Тип исполнителя software (AGV-робот)

Callback action_agv_callback(payload) — публикует в чат перемещения информацию о доставке в зону производства.


mrp.workorder + directive.mixin

Файл: models/mrp_workorder.py

Параметр Значение
Событие on_write
Поле state
Переход pendingready
Domain name ilike 'резка'
Тип исполнителя machine (IoT/CNC)

Callback action_iot_signal(payload) — публикует в чат рабочей операции телеметрию оборудования (температура шпинделя, вибрация) и обновляет заголовок производственного заказа.


mrp.production (расширение без mixin)

Файл: models/mrp_workorder.py

Добавляет метод action_choose_directive_group() в модель производственного заказа. Метод берёт первый рабочий центр из workorder_ids и открывает визард directive.choose.group.wizard с active_model='mrp.workorder'. При отсутствии рабочих центров выводит предупреждение.


Имитация программных агентов (cron)

Файл: models/directive_directive.py
Метод: _cron_simulate_system_agents()

Запускается планировщиком для автоматического продвижения директив программных и машинных исполнителей по стадиям:

Текущая стадия Действие
planned _set_stage('in_progress')
in_progress action_done()

Фильтр: executor_type in ['software', 'machine'], stage_code in ['draft', 'planned', 'in_progress'].


Представления

Файл: views/project_task_views.xml

Добавляет единообразный набор элементов в формы шести объектов: project.task, sale.order, account.move, account.payment, stock.picking, mrp.production.

Элемент Расположение Описание
Кнопка «Выбрать тип» header Открывает визард выбора группы шаблонов
Кнопка «Директивы» oe_button_box Открывает список директив объекта
Поле directive_execution_status sheet Текущий статус исполнения (readonly)

Для задачи (project.task) дополнительно добавляется кнопка «Demo: Callback» для ручного тестирования механизма callback.


Демо-пользователи

Файл: data/users.xml

XML ID Логин Имя
user_directive_executor directive_executor Directive Executor
user_directive_requester directive_requester Directive Requester
user_directive_dispatcher directive_dispatcher Directive Dispatcher

Все пользователи получают только base.group_user. Роли директив назначаются через base_user_role.