diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml index 924b669e..7d66e8d2 100644 --- a/sf_message/data/bussiness_node.xml +++ b/sf_message/data/bussiness_node.xml @@ -30,5 +30,9 @@ 坯料发料提醒 stock.picking + + 工单已下发通知 + mrp.workorder + \ No newline at end of file diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py index ca8d6bf4..8bbe9db5 100644 --- a/sf_message/models/sf_message_stock_picking.py +++ b/sf_message/models/sf_message_stock_picking.py @@ -23,16 +23,23 @@ class SFMessageStockPicking(models.Model): contents = [] product_id = [] for message_queue_id in message_queue_ids: + i = 0 if message_queue_id.message_template_id.name == '坯料发料提醒': content = message_queue_id.message_template_id.content stock_picking_line = self.env['stock.picking'].search([('id', '=', int(message_queue_id.res_id))]) - stock_picking_info = self.env['stock.picking'].search( - [('product_id', '=', stock_picking_line.product_id.id), ('state', '=', 'assigned'), - ('check_in', '=', 'PC')]) - if stock_picking_info and stock_picking_info.product_id.id not in product_id: - content = content.replace('{{product_id}}', stock_picking_info.product_id.name) - content = content.replace('{{number}}', str(len(stock_picking_info))) - product_id.append(stock_picking_info.product_id.id) + mrp_production_info = self.env['mrp.production'].search( + [('name', '=', stock_picking_line.origin)]) + mrp_production_list = self.env['mrp.production'].search( + [('product_id', '=', mrp_production_info.product_id.id)]) + for mrp_production_line in mrp_production_list: + picking_ids = mrp_production_line.picking_ids + for picking_id in picking_ids: + if picking_id.state == 'assigned' and picking_id.check_in == 'PC': + i += 1 + if i > 0 and mrp_production_info.product_id.id not in product_id: + content = content.replace('{{product_id}}', mrp_production_info.product_id.name).replace( + '{{number}}', str(i)) + product_id.append(mrp_production_info.product_id.id) contents.append(content) else: res = super(SFMessageStockPicking, self)._get_message(message_queue_id) diff --git a/sf_message/models/sf_message_template.py b/sf_message/models/sf_message_template.py index 957b0f58..56346c27 100644 --- a/sf_message/models/sf_message_template.py +++ b/sf_message/models/sf_message_template.py @@ -13,4 +13,5 @@ class SfMessageTemplate(models.Model): res.append('sf.functional.tool.assembly') res.append('sf.functional.tool.dismantle') res.append('purchase.order') + res.append('mrp.workorder') return res diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py index 626c092d..d74a663d 100644 --- a/sf_message/models/sf_message_workorder.py +++ b/sf_message/models/sf_message_workorder.py @@ -3,4 +3,28 @@ from odoo import models, fields, api, _ class SFMessageWork(models.Model): _name = 'mrp.workorder' - _inherit = ['mrp.workorder', 'jikimo.message.dispatch'] + _inherit = ['mrp.workorder', 'jikimo.message.dispatch'] + + @api.depends('production_availability', 'blocked_by_workorder_ids.state') + def _compute_state(self): + super(SFMessageWork, self)._compute_state() + if self.state == 'ready' and self.routing_type == '装夹预调': + self.add_queue('工单已下发通知') + + def _get_message(self, message_queue_ids): + contents = [] + product_id = [] + for message_queue_id in message_queue_ids: + if message_queue_id.message_template_id.name == '工单已下发通知': + content = message_queue_id.message_template_id.content + mrp_workorder_line = self.env['mrp.workorder'].search([('id', '=', int(message_queue_id.res_id))]) + mrp_workorder_list = self.env['mrp.workorder'].search( + [('product_id', '=', mrp_workorder_line.product_id.id), ('state', '=', 'ready'), + ('routing_type', '=', '装夹预调')]) + if len(mrp_workorder_list) > 0 and mrp_workorder_line.product_id.id not in product_id: + content = content.replace('{{product_id}}', mrp_workorder_line.product_id.name).replace( + '{{number}}', str(len(mrp_workorder_list))).replace( + '{{part_number}}', mrp_workorder_line.part_number if mrp_workorder_line.part_number else "") + product_id.append(mrp_workorder_line.product_id.id) + contents.append(content) + return contents