diff --git a/sf_manufacturing/wizard/production_technology_wizard.py b/sf_manufacturing/wizard/production_technology_wizard.py
index e5976aaa..6e91e053 100644
--- a/sf_manufacturing/wizard/production_technology_wizard.py
+++ b/sf_manufacturing/wizard/production_technology_wizard.py
@@ -116,3 +116,4 @@ class ProductionTechnologyWizard(models.TransientModel):
if workorder[0].state in ['pending']:
if workorder[0].production_id.product_id.categ_id.type == '成品' and item.programming_state != '已编程':
workorder[0].state = 'waiting'
+ return productions
diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml
index 925dc505..8864beda 100644
--- a/sf_message/data/bussiness_node.xml
+++ b/sf_message/data/bussiness_node.xml
@@ -120,5 +120,20 @@
待排程
mrp.production
+
+
+ 委外加工采购单提醒
+ purchase.order
+
+
+
+ 外购订单采购单提醒
+ purchase.order
+
+
+
+ 工序外协采购单通知
+ purchase.order
+
\ No newline at end of file
diff --git a/sf_message/data/template_data.xml b/sf_message/data/template_data.xml
index bcc12441..b7e19a7b 100644
--- a/sf_message/data/template_data.xml
+++ b/sf_message/data/template_data.xml
@@ -314,5 +314,41 @@
事项:有{{production_num}}个制造订单待排程。
+
+
+ 委外加工采购单提醒
+
+ purchase.order
+
+ markdown
+ normal
+ ### 委外加工采购通知:
+单号:委外加工采购单[{{name}}]({{request_url}})
+事项:请确认委外采购单并处理。
+
+
+
+ 外购订单采购单提醒
+
+ purchase.order
+
+ markdown
+ normal
+ ### 外购订单采购通知:
+单号:外购采购单[{{name}}]({{request_url}})
+事项:请确认外购采购单并处理。
+
+
+
+ 工序外协采购单通知
+
+ purchase.order
+
+ markdown
+ normal
+ ### 工序外协采购单通知:
+单号:工序外协采购单产品[{{name}}]({{url}})
+事项:有{{num}}个工序外协采购单需要确认。
+
\ No newline at end of file
diff --git a/sf_message/models/sf_message_mrp_production_wizard.py b/sf_message/models/sf_message_mrp_production_wizard.py
index c98152d3..0defae7e 100644
--- a/sf_message/models/sf_message_mrp_production_wizard.py
+++ b/sf_message/models/sf_message_mrp_production_wizard.py
@@ -8,10 +8,16 @@ class SFMessageMrpProductionWizard(models.TransientModel):
_inherit = ['sf.production.technology.wizard', 'jikimo.message.dispatch']
def confirm(self):
- super(SFMessageMrpProductionWizard, self).confirm()
+ productions = super(SFMessageMrpProductionWizard, self).confirm()
try:
for production_info in self.production_id:
if production_info.state == 'confirmed':
production_info.add_queue('待排程')
+ for production_id in productions:
+ workorder_ids = production_id.workorder_ids.filtered(
+ lambda p: p.routing_type == '表面工艺' and p.state != 'cancel')
+ for workorder_id in workorder_ids:
+ purchase_orders_id = workorder_id._get_surface_technics_purchase_ids()
+ purchase_orders_id.add_queue('工序外协采购单通知')
except Exception as e:
logging.info('add_queue待排程 error:%s' % e)
diff --git a/sf_message/models/sf_message_purchase.py b/sf_message/models/sf_message_purchase.py
index e3fe269f..3f1c4709 100644
--- a/sf_message/models/sf_message_purchase.py
+++ b/sf_message/models/sf_message_purchase.py
@@ -8,14 +8,41 @@ class SFMessagePurchase(models.Model):
def _get_message(self, message_queue_ids):
contents = []
+ process_outsourcing = set()
for message_queue_id in message_queue_ids:
- if message_queue_id.message_template_id.name == '坯料采购提醒':
+ if message_queue_id.message_template_id.name in (
+ '坯料采购提醒', '委外加工采购单提醒', '外购订单采购单提醒'):
content = message_queue_id.message_template_id.content
url = self.request_url(int(message_queue_id.res_id))
purchase_order_line = self.env['purchase.order'].search([('id', '=', int(message_queue_id.res_id))])
content = content.replace('{{name}}', purchase_order_line.name).replace(
'{{request_url}}', url)
contents.append(content)
+ if message_queue_id.message_template_id.name == '工序外协采购单通知':
+ content = message_queue_id.message_template_id.content
+ purchase_order_line = self.env['purchase.order'].sudo().search(
+ [('id', '=', int(message_queue_id.res_id))])
+ mrp_production = self.env['mrp.production'].sudo().search([('name', '=', purchase_order_line.origin)])
+ process_outsourcing.add(mrp_production.product_id.id)
+ if process_outsourcing:
+ content_info = content
+ for products_id in process_outsourcing:
+ production_num = 0
+ product_name = self.env['product.product'].sudo().search([('id', '=', products_id)]).name
+ production_list = self.env['mrp.production'].sudo().search(
+ [('product_id', '=', products_id), ('state', '=', 'confirmed')])
+ for production_info in production_list:
+ workorder_ids = len(production_info.workorder_ids.filtered(
+ lambda p: p.routing_type == '表面工艺' and p.state != 'cancel'))
+ production_num += workorder_ids
+ if production_num >= 1:
+ url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
+ action_id = self.env.ref('purchase.purchase_form_action').id
+ url_with_id = f"{url}/web#view_type=list&action={action_id}"
+ new_content = (content_info.replace('{{name}}', product_name)
+ .replace('{{url}}', url_with_id)
+ .replace('{{num}}', str(production_num)))
+ contents.append(new_content)
return contents
def request_url(self, id):
diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py
index a76468dd..4200ea72 100644
--- a/sf_message/models/sf_message_sale.py
+++ b/sf_message/models/sf_message_sale.py
@@ -28,6 +28,12 @@ class SFMessageSale(models.Model):
[('id', 'in', purchase_order_id)])
for purchase_order_info in purchase_order_list:
purchase_order_info.add_queue('坯料采购提醒')
+ purchase_order_ids = self.order_line.purchase_line_ids.order_id | self.procurement_group_id.stock_move_ids.created_purchase_line_id.order_id | self.procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id
+ for purchase_order_id in purchase_order_ids:
+ if purchase_order_id.purchase_type == 'consignment':
+ purchase_order_id.add_queue('委外加工采购单提醒')
+ if purchase_order_id.purchase_type == 'standard':
+ purchase_order_id.add_queue('外购订单采购单提醒')
except Exception as e:
logging.info('add_queue error:%s' % e)
logging.info('action_confirm res:%s' % res)