diff --git a/sf_message/__manifest__.py b/sf_message/__manifest__.py
index 8178973b..9181b422 100644
--- a/sf_message/__manifest__.py
+++ b/sf_message/__manifest__.py
@@ -11,7 +11,7 @@
""",
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
- 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify', 'stock', 'sf_quality', 'mrp'],
+ 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify', 'stock', 'sf_quality', 'mrp','sf_manufacturing'],
'data': [
'data/bussiness_node.xml',
'data/cron_data.xml',
diff --git a/sf_message/controllers/main.py b/sf_message/controllers/main.py
index 11e776dc..9537417e 100644
--- a/sf_message/controllers/main.py
+++ b/sf_message/controllers/main.py
@@ -4,6 +4,7 @@ import logging
from odoo import http
from odoo.http import request
from odoo.addons.sf_mrs_connect.controllers.controllers import Sf_Mrs_Connect
+from odoo.addons.sf_bf_connect.controllers.controllers import Sf_Bf_Connect
from odoo.addons.sf_base.commons.common import Common
_logger = logging.getLogger(__name__)
@@ -58,3 +59,18 @@ class MessageSfMrsConnect(Sf_Mrs_Connect):
res = {'code': 400, 'message': '设备故障信息推送失败', 'error': str(e)}
return json.JSONEncoder().encode(res)
+
+class MessageSfBfConnect(Sf_Bf_Connect):
+ @http.route('/api/bfm_process_order/list', type='http', auth='sf_token', methods=['GET', 'POST'], csrf=False,
+ cors="*")
+ def get_bfm_process_order_list(self, **kw):
+ res = super(MessageSfBfConnect, self).get_bfm_process_order_list(**kw)
+ response_data = json.loads(res.data.decode('utf-8'))
+ if response_data['status'] == 1:
+ try:
+ _logger.info('已进入待接单消息推送:%s' % response_data)
+ sale_order = request.env['sale.order'].sudo().search([('name', '=', response_data['factory_order_no'])])
+ sale_order.add_queue('待接单')
+ except Exception as e:
+ logging.info('add_queue error:%s' % e)
+ return res
diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml
index a00ed056..925dc505 100644
--- a/sf_message/data/bussiness_node.xml
+++ b/sf_message/data/bussiness_node.xml
@@ -22,6 +22,15 @@
sale.order
+
+ 待确认供货方式
+ sale.order
+
+
+
+ 待确认加工路线
+ mrp.production
+
调拨入库
@@ -106,5 +115,10 @@
设备故障
sf.maintenance.logs
+
+
+ 待排程
+ mrp.production
+
\ No newline at end of file
diff --git a/sf_message/data/template_data.xml b/sf_message/data/template_data.xml
index beb37771..acaf363f 100644
--- a/sf_message/data/template_data.xml
+++ b/sf_message/data/template_data.xml
@@ -10,7 +10,7 @@
markdown
normal
### 待接单提醒:
-单号:销售订单[{{name}}]({{url}})
+单号:询价单[{{name}}]({{url}})
事项:请确认是否接单。
@@ -275,5 +275,44 @@
机台号:[{{maintenance_equipment_id.name}}]({{url}})
事项:{{create_date}}故障报警
+
+
+ 待确认供货方式
+
+ sale.order
+
+ markdown
+ normal
+ ### 待确认供货方式提醒:
+单号:销售订单[{{name}}]({{url}})
+事项:请确认供货方式。
+
+
+
+
+ 待确认加工路线
+
+ mrp.production
+
+ markdown
+ normal
+ ### 待确认加工路线提醒:
+单号:产品[{{name}}]({{url}})
+事项:有{{production_num}}个制造订单需要确认加工路线。
+
+
+
+
+ 待排程
+
+ mrp.production
+
+ markdown
+ normal
+ ### 待排程提醒:
+单号:产品[{{name}}]({{url}})
+事项:有{{production_num}}个制造订单待排程。
+
+
\ No newline at end of file
diff --git a/sf_message/models/__init__.py b/sf_message/models/__init__.py
index 0b9c9ad6..b9cc5079 100644
--- a/sf_message/models/__init__.py
+++ b/sf_message/models/__init__.py
@@ -10,3 +10,4 @@ from . import sf_message_functional_tool_dismantle
from . import sf_message_mrp_production
from . import sf_message_quality_cnc_test
from . import sf_message_maintenance_logs
+from . import sf_message_mrp_production_wizard
diff --git a/sf_message/models/sf_message_mrp_production.py b/sf_message/models/sf_message_mrp_production.py
index a60f2161..fed30ae9 100644
--- a/sf_message/models/sf_message_mrp_production.py
+++ b/sf_message/models/sf_message_mrp_production.py
@@ -27,6 +27,7 @@ class SFMessageMrpProduction(models.Model):
# 获取发送消息内容
def _get_message(self, message_queue_ids):
contents = []
+ unique_products = set()
for message_queue_id in message_queue_ids:
if message_queue_id.message_template_id.name == '生产完工入库提醒':
content = message_queue_id.message_template_id.content
@@ -40,6 +41,37 @@ class SFMessageMrpProduction(models.Model):
content = content.replace('{{name}}', stock_picking_sfp.name).replace(
'{{sale_order_name}}', mrp_production.origin).replace('{{request_url}}', url)
contents.append(content)
+ if message_queue_id.message_template_id.name == '待确认加工路线':
+ content = message_queue_id.message_template_id.content
+ mrp_production = self.env['mrp.production'].sudo().search([('id', '=', int(message_queue_id.res_id))])
+ production_num = self.env['mrp.production'].sudo().search_count(
+ [('product_id', '=', mrp_production.product_id.id), ('state', '=', 'technology_to_confirmed')])
+ if production_num >= 1:
+ url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
+ action_id = self.env.ref('mrp.mrp_production_action').id
+ url_with_id = f"{url}/web#view_type=list&action={action_id}"
+ content = (content.replace('{{name}}', mrp_production.product_id.name)
+ .replace('{{url}}', url_with_id)
+ .replace('{{production_num}}', str(production_num)))
+ contents.append(content)
+ if message_queue_id.message_template_id.name == '待排程':
+ content = message_queue_id.message_template_id.content
+ mrp_production = self.env['mrp.production'].sudo().search([('id', '=', int(message_queue_id.res_id))])
+ unique_products.add(mrp_production.product_id.id)
+ if unique_products:
+ content_info = content
+ for products_id in unique_products:
+ product_name = self.env['product.product'].sudo().search([('id', '=', products_id)]).name
+ production_num = self.env['mrp.production'].sudo().search_count(
+ [('product_id', '=', products_id), ('state', '=', 'confirmed')])
+ if production_num >= 1:
+ url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
+ action_id = self.env.ref('sf_plan.sf_production_plan_action1').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('{{production_num}}', str(production_num)))
+ contents.append(new_content)
logging.info('生产完工入库提醒: %s' % contents)
return contents
diff --git a/sf_message/models/sf_message_mrp_production_wizard.py b/sf_message/models/sf_message_mrp_production_wizard.py
new file mode 100644
index 00000000..c98152d3
--- /dev/null
+++ b/sf_message/models/sf_message_mrp_production_wizard.py
@@ -0,0 +1,17 @@
+import logging
+from odoo import models, fields, api, _
+
+
+class SFMessageMrpProductionWizard(models.TransientModel):
+ _name = 'sf.production.technology.wizard'
+ _description = "制造订单工艺确认向导"
+ _inherit = ['sf.production.technology.wizard', 'jikimo.message.dispatch']
+
+ def confirm(self):
+ super(SFMessageMrpProductionWizard, self).confirm()
+ try:
+ for production_info in self.production_id:
+ if production_info.state == 'confirmed':
+ production_info.add_queue('待排程')
+ except Exception as e:
+ logging.info('add_queue待排程 error:%s' % e)
diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py
index 58d1a021..c96c845b 100644
--- a/sf_message/models/sf_message_sale.py
+++ b/sf_message/models/sf_message_sale.py
@@ -8,17 +8,6 @@ class SFMessageSale(models.Model):
_name = 'sale.order'
_inherit = ['sale.order', 'jikimo.message.dispatch']
- @api.model_create_multi
- def create(self, vals_list):
- res = super(SFMessageSale, self).create(vals_list)
- if res:
- try:
- logging.info('add_queue res:%s' % res)
- res.add_queue('待接单')
- except Exception as e:
- logging.info('add_queue error:%s' % e)
- return res
-
# 确认接单
def action_confirm(self):
res = super(SFMessageSale, self).action_confirm()
@@ -27,21 +16,36 @@ class SFMessageSale(models.Model):
self.add_queue('确认接单')
picking_ids = self.mrp_production_ids
purchase_order_id = []
+ unique_products = set()
if picking_ids:
for picking_id in picking_ids:
+ unique_products.add(picking_id.product_id.id)
purchase_order_ids = (
picking_id.procurement_group_id.stock_move_ids.created_purchase_line_id.order_id |
picking_id.procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id).ids
purchase_order_id.extend(purchase_order_ids)
if purchase_order_id:
- purchase_order_list = self.env['purchase.order'].sudo().search([('id', 'in', purchase_order_id)])
+ purchase_order_list = self.env['purchase.order'].sudo().search(
+ [('id', 'in', purchase_order_id)])
for purchase_order_info in purchase_order_list:
purchase_order_info.add_queue('坯料采购提醒')
+ if unique_products:
+ for product_id in unique_products:
+ production_info = self.env['mrp.production'].sudo().search(
+ [('product_id', '=', product_id)], limit=1, order='id')
+ production_info.add_queue('待确认加工路线')
except Exception as e:
logging.info('add_queue error:%s' % e)
logging.info('action_confirm res:%s' % res)
return res
+ def confirm_to_supply_method(self):
+ super(SFMessageSale, self).confirm_to_supply_method()
+ try:
+ self.add_queue('待确认供货方式')
+ except Exception as e:
+ logging.info('add_queue待确认供货方式 error:%s' % e)
+
# 继承并重写jikimo.message.dispatch的_get_message()
def _get_message(self, message_queue_ids):
contents = []
@@ -53,9 +57,11 @@ class SFMessageSale(models.Model):
time_range = timedelta(minutes=2)
i = 0
for item in message_queue_ids:
- if item.message_template_id.bussiness_node_id.name == '待接单':
+ if item.message_template_id.bussiness_node_id.name in ('待接单', '待确认供货方式'):
content = super(SFMessageSale, self)._get_message(item)
- action_id = self.env.ref('sale.action_quotations_with_onboarding').id
+ action_id = self.env.ref('sale.action_quotations_with_onboarding').id \
+ if item.message_template_id.bussiness_node_id.name == '待接单' \
+ else self.env.ref('sale.action_orders').id
url_with_id = f"{url}/web#id={item.res_id}&view_type=form&action={action_id}"
content = content[0].replace('{{url}}', url_with_id)
contents.append(content)