84 lines
4.1 KiB
Python
84 lines
4.1 KiB
Python
# -*- 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
|