# -*- coding: utf-8 -*- import logging from odoo import models, fields, api, _ from urllib.parse import urlencode class SFMessageQualityCheck(models.Model): _name = 'quality.check' _inherit = ['quality.check', 'jikimo.message.dispatch'] @api.model_create_multi def create(self, vals_list): result = super().create(vals_list) # try: # # 判断是否为web页面创建请求 # is_web_request = self.env.context.get('is_web_request', False) # if not is_web_request: # for obj in result: # jikimo_message_queue = self.get_message_queue(obj.product_id.id) # if not jikimo_message_queue: # obj.product_id.add_queue('待质检提醒') # except Exception as e: # logging.info('add_queue待质检提醒 error:%s' % e) qc_ids = result.filtered(lambda qc: qc.quality_state == 'none') if qc_ids: message_template_id = self.env['jikimo.message.template'].sudo().search([('name', '=', '待质检提醒')]) for qc in qc_ids: queue_id = self.env['jikimo.message.queue'].sudo().search( [('message_template_id', '=', message_template_id[-1].id), ('res_id', '=', qc.id)]) if not queue_id and '制造' not in [pt.name for pt in qc.point_id.picking_type_ids]: qc.add_queue('待质检') return result # # def get_message_queue(self, res_id): # business_node_id = self.env.ref('sf_message.bussiness_quality_check').id # message_template = self.env["jikimo.message.template"].sudo().search([ # ("name", "=", '待质检提醒'), # ("bussiness_node_id", "=", business_node_id) # ], limit=1) # jikimo_message_queue = self.env['jikimo.message.queue'].sudo().search( # [('res_id', '=', res_id), ("message_status", "in", ("pending", "sent")), # ('message_template_id', '=', message_template.id)]) # return jikimo_message_queue def write(self, vals): original_state = {} for item in self: original_state.update({f'{item.id}': item.quality_state}) res = super(SFMessageQualityCheck, self).write(vals) for item in self: if vals.get('quality_state') == 'none' and original_state.get(f'{item.id}') != 'none': message_template_id = self.env['jikimo.message.template'].sudo().search([('name', '=', '待质检提醒')]) queue_id = self.env['jikimo.message.queue'].sudo().search( [('message_template_id', '=', message_template_id[-1].id), ('res_id', '=', item.id)]) if not queue_id and '制造' not in [pt.name for pt in item.point_id.picking_type_ids]: item.add_queue('待质检') return res 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 qc_line = self.search([('id', '=', int(message_queue_id.res_id))]) url = self.request_url(int(message_queue_id.res_id)) content = content.replace('{{name}}', qc_line.name).replace( '{{url}}', url).replace('{{type_name}}', qc_line.point_id.title) contents.append(content) return contents, message_queue_ids def request_url(self, id): url = self.env['ir.config_parameter'].get_param('web.base.url') action_id = self.env.ref('quality_control.quality_check_action_main').id menu_id = self.env.ref('quality_control.menu_quality_checks').id # 查询参数 params = {'id': id, 'menu_id': menu_id, 'action': action_id, 'model': 'quality.check', 'view_type': 'form'} # 拼接查询参数 query_string = urlencode(params) # 拼接URL full_url = url + "/web#" + query_string return full_url