diff --git a/sf_message/models/sf_message_purchase.py b/sf_message/models/sf_message_purchase.py index 8d95ffaf..96d0f8dc 100644 --- a/sf_message/models/sf_message_purchase.py +++ b/sf_message/models/sf_message_purchase.py @@ -1,6 +1,35 @@ from odoo import models, fields, api, _ +from urllib.parse import urlencode class SFMessagePurchase(models.Model): _name = 'purchase.order' _inherit = ['purchase.order', '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 + 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) + return contents + + def request_url(self, id): + we_config_info = self.env['we.config'].sudo().search([], limit=1) + redirect_domain = self.env['we.app'].sudo().search([('id', '=', we_config_info.odoo_app_id.id)]).redirect_domain + full_url = 'https://%s/' % redirect_domain + action_id = self.env.ref('purchase.purchase_form_action').id + menu_id = self.env['ir.model.data'].search([('name', '=', 'module_website_payment')]).id + # 查询参数 + params = {'id': id, 'menu_id': menu_id, 'action': action_id, + 'model': 'purchase.order', + 'view_type': 'form'} + # 拼接查询参数 + query_string = urlencode(params) + # 拼接URL + full_url = full_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 95225948..fdb9d4cf 100644 --- a/sf_message/models/sf_message_stock_picking.py +++ b/sf_message/models/sf_message_stock_picking.py @@ -1,5 +1,6 @@ import re from odoo import models, fields, api, _ +from urllib.parse import urlencode class SFMessageStockPicking(models.Model): @@ -15,7 +16,6 @@ class SFMessageStockPicking(models.Model): obj.add_queue('调拨入库') return result - @api.depends('move_type', 'immediate_transfer', 'move_ids.state', 'move_ids.picking_id') def _compute_state(self): super(SFMessageStockPicking, self)._compute_state() @@ -41,7 +41,7 @@ class SFMessageStockPicking(models.Model): 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: - url = message_queue_id.message_template_id.get_url(int(message_queue_id.res_id)) + url = self.request_url() content = content.replace('{{product_id}}', mrp_production_info.product_id.name).replace( '{{number}}', str(i)).replace('{{request_url}}', url) product_id.append(mrp_production_info.product_id.id) @@ -50,3 +50,18 @@ class SFMessageStockPicking(models.Model): else: res = super(SFMessageStockPicking, self)._get_message(message_queue_id) return res + + def request_url(self): + we_config_info = self.env['we.config'].sudo().search([], limit=1) + redirect_domain = self.env['we.app'].sudo().search([('id', '=', we_config_info.odoo_app_id.id)]).redirect_domain + full_url = 'https://%s/' % redirect_domain + action_id = self.env.ref('stock.stock_picking_type_action').id + menu_id = self.env['ir.model.data'].search([('name', '=', 'module_theme_treehouse')]).id + # 查询参数 + params = {'menu_id': menu_id, 'action': action_id, 'model': 'stock.picking', + 'view_type': 'kanban'} + # 拼接查询参数 + query_string = urlencode(params) + # 拼接URL + full_url = full_url + "web#" + query_string + return full_url diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py index 1d0634ff..9d18e656 100644 --- a/sf_message/models/sf_message_workorder.py +++ b/sf_message/models/sf_message_workorder.py @@ -2,6 +2,7 @@ from odoo import models, fields, api, _ import logging, json import requests from odoo.addons.sf_base.commons.common import Common +from urllib.parse import urlencode _logger = logging.getLogger(__name__) @@ -14,7 +15,10 @@ class SFMessageWork(models.Model): super(SFMessageWork, self)._compute_state() for workorder in self: if workorder.state == 'ready' and workorder.routing_type == '装夹预调': - workorder.add_queue('工单已下发通知') + jikimo_message_queue = self.env['jikimo.message.queue'].sudo().search( + [('res_id', '=', workorder.id), ("message_status", "=", "pending")]) + if not jikimo_message_queue: + workorder.add_queue('工单已下发通知') def _get_message(self, message_queue_ids): contents = [] @@ -27,16 +31,14 @@ class SFMessageWork(models.Model): [('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: - url = message_queue_id.message_template_id.get_url(int(message_queue_id.res_id)) + "&active_id=1" + url = self.request_url() 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 "").replace( '{{request_url}}', url) product_id.append(mrp_workorder_line.product_id.id) contents.append(content) return contents - + @api.depends('cnc_ids.tool_state') def _compute_tool_state(self): # 将self的id与tool_state进行保存 @@ -47,7 +49,7 @@ class SFMessageWork(models.Model): if tool_state_dict[record.id] != '2' and record.tool_state == '2': data['name'].append(record.production_id.programming_no) - if data['name']: + if data['name']: # 请求cloud接口,发送微信消息推送 configsettings = self.env['res.config.settings'].get_values() config_header = Common.get_headers(self, configsettings['token'], configsettings['sf_secret_key']) @@ -58,3 +60,18 @@ class SFMessageWork(models.Model): ret = ret.json() _logger.info('无效用刀异常消息推送接口:%s' % ret) return res + + def request_url(self): + we_config_info = self.env['we.config'].sudo().search([], limit=1) + redirect_domain = self.env['we.app'].sudo().search([('id', '=', we_config_info.odoo_app_id.id)]).redirect_domain + full_url = 'https://%s/' % redirect_domain + action_id = self.env.ref('sf_manufacturing.mrp_workorder_action_tablet').id + menu_id = self.env['ir.model.data'].search([('name', '=', 'module_stock_dropshipping')]).id + # 查询参数 + params = {'menu_id': menu_id, 'action': action_id, 'model': 'mrp.workorder', + 'view_type': 'list', 'active_id': 1} + # 拼接查询参数 + query_string = urlencode(params) + # 拼接URL + full_url = full_url + "web#" + query_string + return full_url