Files
jikimo_sf/sf_manufacturing/models/agv_dispatch.py

51 lines
2.2 KiB
Python

from odoo import models, fields, api
from odoo.exceptions import ValidationError
class AgvDispatch(models.Model):
_name = 'sf.agv.dispatch'
_description = 'agv调度'
name = fields.Char('任务单号')
def _get_agv_route_type_selection(self):
return self.env['sf.agv.task.route'].fields_get(['route_type'])['route_type']['selection']
agv_route_type = fields.Selection(selection=_get_agv_route_type_selection, string='任务类型')
agv_route_name = fields.Char('任务路线名称')
start_site_id = fields.Many2one('sf.agv.site', '起点接驳站')
end_site_id = fields.Many2one('sf.agv.site', '终点接驳站')
site_state = fields.Selection([
('占用', '占用'),
('空闲', '空闲')], string='终点接驳站状态')
state = fields.Selection([
('待下发', '待下发'),
('配送中', '配送中'),
('已配送', '已配送'),
('已取消', '已取消')], string='状态', default='待下发')
workpiece_delivery_ids = fields.One2many('sf.workpiece.delivery', 'agv_dispatch_id', string='工件配送单')
delivery_workpieces = fields.Char('配送工件', compute='_compute_delivery_workpieces')
@api.depends('workpiece_delivery_ids')
def _compute_delivery_workpieces(self):
for rec in self:
rec.delivery_workpieces = '\\'.join(rec.workpiece_delivery_ids.mapped('name'))
task_create_time = fields.Datetime('任务创建时间')
task_delivery_time = fields.Datetime('任务下发时间')
task_completion_time = fields.Datetime('任务完成时间')
task_duration = fields.Char('任务时长', compute='_compute_task_duration')
@api.depends('task_completion_time', 'task_delivery_time')
def _compute_task_duration(self):
for rec in self:
if rec.task_completion_time and rec.task_delivery_time:
rec.task_duration = str(rec.task_completion_time - rec.task_delivery_time)
else:
rec.task_duration = ''
def add_queue(self, vals):
if not vals.get('agv_route_type') or vals.get('agv_route_type') not in self._get_agv_route_type_selection():
raise ValidationError('无效的路线类型!')
self.env['sf.agv.dispatch'].sudo().create(vals)