Public release from ruodoo-project: 19.0 - 2026-07-26 21:17:35 UTC
This commit is contained in:
77
directive_test/models/mrp_workorder.py
Normal file
77
directive_test/models/mrp_workorder.py
Normal file
@ -0,0 +1,77 @@
|
||||
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,
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user