diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 36fab67c..d707bbdf 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1233,6 +1233,66 @@ class ResMrpWorkOrder(models.Model): else: raise UserError("无关联制造订单或关联序列号,无法打印。请检查!") + @api.model + def get_views(self, views, options=None): + res = super().get_views(views, options) + if res['views'].get('list', {}) and self.env.context.get('search_default_workcenter_id'): + workcenter = self.env['mrp.workcenter'].browse(self.env.context.get('search_default_workcenter_id')) + tree_view = res['views']['list'] + if workcenter.name == '工件拆卸中心': + arch = etree.fromstring(tree_view['arch']) + # 查找 tree 标签 + tree_element = arch.xpath("//tree")[0] + + # 查找或创建 header 标签 + header_element = tree_element.find('header') + if header_element is None: + header_element = etree.Element('header') + tree_element.insert(0, header_element) + + # 创建并添加按钮元素 + button_element = etree.Element('button', { + 'name': 'button_delivery', + 'type': 'object', + 'string': '拆卸', + 'class': 'btn-primary', + # 'className': 'btn-primary', + 'modifiers': '{"force_show": 1}' + }) + header_element.append(button_element) + + # 更新 tree_view 的 arch + tree_view['arch'] = etree.tostring(arch, encoding='unicode') + return res + + def button_delivery(self): + production_ids = [] + workorder_ids = [] + production_type = '运送空料架' + max_num = 4 # 最大配送数量 + if len(self) > max_num: + raise UserError('仅限于拆卸1-4个制造订单,请重新选择') + for item in self: + if item.state != 'ready': + raise UserError('请选择状态为【就绪】的工单进行解除装夹') + + production_ids.append(item.production_id.id) + workorder_ids.append(item.id) + return { + 'name': _('确认'), + 'type': 'ir.actions.act_window', + 'view_mode': 'form', + 'res_model': 'sf.workpiece.delivery.wizard', + 'target': 'new', + 'context': { + # 'default_delivery_ids': [(6, 0, delivery_ids)], + 'default_production_ids': [(6, 0, production_ids)], + 'default_type': production_type, + 'default_workorder_ids': [(6, 0, workorder_ids)], + 'default_workcenter_id': self.env.context.get('default_workcenter_id'), + 'default_confirm_button': '确认拆卸' + }} + class CNCprocessing(models.Model): _name = 'sf.cnc.processing' @@ -1612,6 +1672,7 @@ class WorkPieceDelivery(models.Model): 'default_production_ids': [(6, 0, production_ids)], 'default_type': production_type, 'default_workorder_ids': [(6, 0, workorder_ids)], + 'default_confirm_button': '确认配送' }} diff --git a/sf_manufacturing/static/src/xml/button_show_on_tree.xml b/sf_manufacturing/static/src/xml/button_show_on_tree.xml index 041b16a4..a980cf91 100644 --- a/sf_manufacturing/static/src/xml/button_show_on_tree.xml +++ b/sf_manufacturing/static/src/xml/button_show_on_tree.xml @@ -19,6 +19,39 @@ - + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sf_manufacturing/wizard/workpiece_delivery_views.xml b/sf_manufacturing/wizard/workpiece_delivery_views.xml index 5ca86ebb..a6dfe8e9 100644 --- a/sf_manufacturing/wizard/workpiece_delivery_views.xml +++ b/sf_manufacturing/wizard/workpiece_delivery_views.xml @@ -9,6 +9,7 @@ + @@ -17,7 +18,8 @@ diff --git a/sf_manufacturing/wizard/workpiece_delivery_wizard.py b/sf_manufacturing/wizard/workpiece_delivery_wizard.py index 9f36622c..c8728f01 100644 --- a/sf_manufacturing/wizard/workpiece_delivery_wizard.py +++ b/sf_manufacturing/wizard/workpiece_delivery_wizard.py @@ -20,11 +20,14 @@ class WorkpieceDeliveryWizard(models.TransientModel): feeder_station_start_id = fields.Many2one('sf.agv.site', '起点接驳站') feeder_station_destination_id = fields.Many2one('sf.agv.site', '目的接驳站') workcenter_id = fields.Many2one(string='所属区域', comodel_name='mrp.workcenter', tracking=True) + confirm_button = fields.Char('按钮名称') @api.onchange('type') def _onchange_type(self): - routes = self.env['sf.agv.task.route'].search([('route_type', '=', self.type)]) if self.type: + routes = self.env['sf.agv.task.route'].search([('route_type', '=', self.type)]) + if self.workcenter_id: + routes = routes.filtered(lambda a: a.start_site_id.workcenter_id.id == self.workcenter_id.id) start_site_ids = routes.mapped('start_site_id.id') workcenter_ids = routes.mapped('end_site_id.workcenter_id.id') if workcenter_ids: