diff --git a/sf_message/__manifest__.py b/sf_message/__manifest__.py
index fcfcba8f..6796a50b 100644
--- a/sf_message/__manifest__.py
+++ b/sf_message/__manifest__.py
@@ -12,7 +12,7 @@
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify', 'stock', 'sf_quality', 'mrp',
- 'sf_manufacturing'],
+ 'sf_manufacturing','product'],
'data': [
'data/bussiness_node.xml',
'data/cron_data.xml',
diff --git a/sf_message/controllers/main.py b/sf_message/controllers/main.py
index 5b94f50a..dc555dc9 100644
--- a/sf_message/controllers/main.py
+++ b/sf_message/controllers/main.py
@@ -39,12 +39,6 @@ class MessageSfMrsConnect(Sf_Mrs_Connect):
_logger.info('无效用刀异常消息推送接口:%s' % ret)
except Exception as e:
_logger.info('无效用刀异常消息推送接口:%s' % e)
-
- try:
- productions = request.env['mrp.production'].sudo().search([('id', '=', res.get('production_ids')[0])])
- productions.add_queue('工单已下发通知')
- except Exception as e:
- _logger.info('工单已下发通知异常:%s' % e)
return json.JSONEncoder().encode(res)
@http.route('/api/maintenance_logs/notify', type='json', auth='public', methods=['GET', 'POST'], csrf=False,
diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml
index 8a95f525..e7c3b0ba 100644
--- a/sf_message/data/bussiness_node.xml
+++ b/sf_message/data/bussiness_node.xml
@@ -56,7 +56,7 @@
工单已下发通知
- mrp.production
+ product.product
diff --git a/sf_message/data/template_data.xml b/sf_message/data/template_data.xml
index e1ba0a93..52b226e3 100644
--- a/sf_message/data/template_data.xml
+++ b/sf_message/data/template_data.xml
@@ -78,8 +78,8 @@
工单已下发通知
-
- mrp.production
+
+ product.product
markdown
normal
diff --git a/sf_message/models/__init__.py b/sf_message/models/__init__.py
index 1e659c52..8c215042 100644
--- a/sf_message/models/__init__.py
+++ b/sf_message/models/__init__.py
@@ -12,3 +12,4 @@ from . import sf_message_quality_cnc_test
from . import sf_message_maintenance_logs
from . import sf_message_mrp_production_wizard
from . import sf_message_mrp_production_adjust_wizard
+from . import sf_message_product
diff --git a/sf_message/models/sf_message_mrp_production.py b/sf_message/models/sf_message_mrp_production.py
index d9dd0f1b..260c591c 100644
--- a/sf_message/models/sf_message_mrp_production.py
+++ b/sf_message/models/sf_message_mrp_production.py
@@ -69,25 +69,16 @@ class SFMessageMrpProduction(models.Model):
url_with_id).replace(
'{{num}}', str(stock_picking_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))])
- production_num = self.env['mrp.production'].sudo().search_count(
- [('product_id', '=', mrp_production.product_id.id)])
- if production_num >= 1:
- url = self.get_request_url()
- content = content.replace('{{product_id}}', mrp_production.product_id.name).replace(
- '{{number}}', str(production_num)).replace(
- '{{request_url}}', url)
- contents.append(content)
if unique_products:
+ action_id = self.env.ref('sf_plan.sf_production_plan_action1').id
unique_products_contents = self.get_production_info(content, unique_products, 'confirmed',
- 'sf_plan.sf_production_plan_action1')
+ action_id)
contents.extend(unique_products_contents)
if technology_to_confirmed:
+ action_id = self.env.ref('mrp.mrp_production_action').id
technology_to_confirmed_contents = self.get_production_info(content, technology_to_confirmed,
'technology_to_confirmed',
- 'mrp.mrp_production_action')
+ action_id)
contents.extend(technology_to_confirmed_contents)
logging.info('生产完工入库提醒: %s' % contents)
return contents
@@ -100,7 +91,6 @@ class SFMessageMrpProduction(models.Model):
[('product_id', '=', products_id), ('state', '=', state)])
if production_num >= 1:
url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
- action_id = self.env.ref(action_id).id
url_with_id = f"{url}/web#view_type=list&action={action_id}"
new_content = (content.replace('{{name}}', product_name)
.replace('{{url}}', url_with_id)
@@ -120,17 +110,3 @@ class SFMessageMrpProduction(models.Model):
# 拼接URL
full_url = url + "/web#" + query_string
return full_url
-
- def get_request_url(self):
- url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
- action_id = self.env.ref('sf_message.mrp_workorder_issued_action').id
- menu_id = self.env.ref('mrp.menu_mrp_root').id
- active_id = self.env['mrp.workcenter'].sudo().search([('name', '=', '工件装夹中心')]).id
- # 查询参数
- params = {'menu_id': menu_id, 'action': action_id, 'model': 'mrp.workorder',
- 'view_type': 'list', 'active_id': active_id}
- # 拼接查询参数
- query_string = urlencode(params)
- # 拼接URL
- full_url = url + "/web#" + query_string
- return full_url
diff --git a/sf_message/models/sf_message_mrp_production_wizard.py b/sf_message/models/sf_message_mrp_production_wizard.py
index 0defae7e..990bdd49 100644
--- a/sf_message/models/sf_message_mrp_production_wizard.py
+++ b/sf_message/models/sf_message_mrp_production_wizard.py
@@ -11,7 +11,7 @@ class SFMessageMrpProductionWizard(models.TransientModel):
productions = super(SFMessageMrpProductionWizard, self).confirm()
try:
for production_info in self.production_id:
- if production_info.state == 'confirmed':
+ if production_info.state == 'confirmed' and production_info.product_id.categ_id.type == '成品':
production_info.add_queue('待排程')
for production_id in productions:
workorder_ids = production_id.workorder_ids.filtered(
diff --git a/sf_message/models/sf_message_product.py b/sf_message/models/sf_message_product.py
new file mode 100644
index 00000000..4f983e49
--- /dev/null
+++ b/sf_message/models/sf_message_product.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+from odoo import models, fields, api, _
+from urllib.parse import urlencode
+
+
+class SFMessagePlan(models.Model):
+ _name = 'product.product'
+ _inherit = ['product.product', 'jikimo.message.dispatch']
+
+ def _get_message(self, message_queue_ids):
+ contents = []
+ for message_queue_id in message_queue_ids:
+ if message_queue_id.message_template_id.name == '工单已下发通知':
+ content = message_queue_id.message_template_id.content
+ product_product = self.env['product.product'].sudo().search([('id', '=', int(message_queue_id.res_id))])
+ production_num = self.env['mrp.production'].sudo().search_count(
+ [('product_id', '=', product_product.id)])
+ if production_num >= 1:
+ url = self.get_request_url()
+ content = content.replace('{{product_id}}', product_product.name).replace(
+ '{{number}}', str(production_num)).replace(
+ '{{request_url}}', url)
+ contents.append(content)
+ return contents
+
+ def get_request_url(self):
+ url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
+ action_id = self.env.ref('sf_message.mrp_workorder_issued_action').id
+ menu_id = self.env.ref('mrp.menu_mrp_root').id
+ active_id = self.env['mrp.workcenter'].sudo().search([('name', '=', '工件装夹中心')]).id
+ # 查询参数
+ params = {'menu_id': menu_id, 'action': action_id, 'model': 'mrp.workorder',
+ 'view_type': 'list', 'active_id': active_id}
+ # 拼接查询参数
+ query_string = urlencode(params)
+ # 拼接URL
+ full_url = url + "/web#" + query_string
+ return full_url
diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py
index 5d15d34a..05bd6f3e 100644
--- a/sf_message/models/sf_message_stock_picking.py
+++ b/sf_message/models/sf_message_stock_picking.py
@@ -25,7 +25,8 @@ class SFMessageStockPicking(models.Model):
super(SFMessageStockPicking, self)._compute_state()
try:
for record in self:
- if record.state == 'assigned' and record.picking_type_id.sequence_code == 'PC':
+ if (record.state == 'assigned' and record.picking_type_id.sequence_code == 'PC'
+ and record.product_id.categ_id.type == '坯料'):
record.add_queue('坯料发料提醒')
if record.picking_type_id.sequence_code == 'SFP' and record.state == 'done':
diff --git a/sf_message/models/sf_message_template.py b/sf_message/models/sf_message_template.py
index 87328849..d97c5467 100644
--- a/sf_message/models/sf_message_template.py
+++ b/sf_message/models/sf_message_template.py
@@ -17,4 +17,5 @@ class SfMessageTemplate(models.Model):
res.append('sf.maintenance.logs')
res.append('quality.cnc.test')
res.append('mrp.production')
+ res.append('product.product')
return res
diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py
index c604534d..ee8f6c00 100644
--- a/sf_message/models/sf_message_workorder.py
+++ b/sf_message/models/sf_message_workorder.py
@@ -12,6 +12,23 @@ class SFMessageWork(models.Model):
_name = 'mrp.workorder'
_inherit = ['mrp.workorder', 'jikimo.message.dispatch']
+ @api.depends('production_availability', 'blocked_by_workorder_ids', 'blocked_by_workorder_ids.state',
+ 'production_id.tool_state', 'production_id.schedule_state', 'sequence',
+ 'production_id.programming_state')
+ def _compute_state(self):
+ super(SFMessageWork, self)._compute_state()
+ for workorder in self:
+ work_ids = workorder.production_id.workorder_ids.filtered(lambda w: w.routing_type == '装夹预调')
+ if work_ids:
+ min_sequence_wk = work_ids.sorted(key=lambda w: w.sequence)[0]
+ if workorder.state == 'ready' and workorder.routing_type == '装夹预调' and workorder.id == min_sequence_wk.id:
+ message_template = self.env["jikimo.message.template"].sudo().search([("name", "=", '工单已下发通知')], limit=1)
+ jikimo_message_queue = self.env['jikimo.message.queue'].sudo().search(
+ [('res_id', '=', workorder.production_id.product_id.id), ("message_status", "in", ("pending", "sent")),
+ ('message_template_id', '=', message_template.id)])
+ if not jikimo_message_queue:
+ workorder.production_id.product_id.add_queue('工单已下发通知')
+
def _get_message(self, message_queue_ids):
contents = []
bussiness_node = None