from odoo import models, fields class MrpWorkorder(models.Model): _name = "mrp.workorder" _inherit = ["mrp.workorder", "directive.mixin"] def _directive_generation_spec(self): return [ { "event": "on_write", "key": "mrp_iot_trigger", "field": "state", "from": "pending", "to": "ready", "use_record_template_group": True, "mode": "create_once", "domain": [("name", "ilike", "резка")], } ] def action_iot_signal(self, payload: dict): """ Метод-обработчик завершения директивы оборудованием. Записывает телеметрию в саму операцию и в головной заказ (MO). """ for wo in self: telemetry = payload.get('telemetry', {}) temp = telemetry.get('temperature', 59) vibro = telemetry.get('vibration', 'Норма') message = ( f"IoT CNC [{wo.name}]: Операция завершена.
" f"Температура шпинделя: {temp}°C
" f"Вибрация: {vibro}." ) if wo.production_id: wo.production_id.message_post( body=f"Отчет по операции {wo.name}: {message}" ) return True class MrpProduction(models.Model): _inherit = 'mrp.production' def action_choose_directive_group(self): self.ensure_one() workorder = self.workorder_ids[:1] if not workorder: return { 'type': 'ir.actions.client', 'tag': 'display_notification', 'params': { 'title': 'Внимание', 'message': 'Сначала подтвердите заказ, чтобы появились операции (Work Orders)', 'type': 'warning', 'sticky': False, } } return { "type": "ir.actions.act_window", "name": f"Назначить директивы для: {workorder.name}", "res_model": "directive.choose.group.wizard", "view_mode": "form", "target": "new", "context": { # КОСТЫЛЬ "active_model": "mrp.workorder", "active_id": workorder.id, }, }