Files
public/directive_test/models/mrp_workorder.py

77 lines
2.5 KiB
Python

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}]: Операция завершена.<br/>"
f"Температура шпинделя: {temp}°C<br/>"
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,
},
}