diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 071f1167..37fa02bd 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -9,8 +9,8 @@ from odoo.exceptions import ValidationError, UserError from odoo.modules import get_resource_path -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file class ResProductMo(models.Model): diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index daf049eb..6c4ba7ff 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -292,78 +292,78 @@ class StockRule(models.Model): for product_id, all_production in grouped_product_ids.items(): # 为同一个product_id创建一个生产订单名称列表 product_id_to_production_names[product_id] = [production.name for production in all_production] - for production_item in productions: - - production_programming = self.env['mrp.production'].search( - [('product_id.id', '=', production_item.product_id.id), - ('origin', '=', production_item.origin)], - limit=1, order='id asc') - if production_item.product_id.id in product_id_to_production_names: - if not production_programming.programming_no: - if production_item.product_id.model_process_parameters_ids: - is_purchase = False - sorted_process_parameters = sorted(production_item.product_id.model_process_parameters_ids, - key=lambda w: w.id) - - consecutive_process_parameters = [] - m = 0 - for i in range(len(sorted_process_parameters) - 1): - if m == 0: - is_purchase = False - if self.env['product.template']._get_process_parameters_product( - sorted_process_parameters[i]).partner_id == self.env[ - 'product.template']._get_process_parameters_product(sorted_process_parameters[ - i + 1]).partner_id and \ - sorted_process_parameters[i].gain_way == '外协': - if sorted_process_parameters[i] not in consecutive_process_parameters: - consecutive_process_parameters.append(sorted_process_parameters[i]) - consecutive_process_parameters.append(sorted_process_parameters[i + 1]) - m += 1 - continue - else: - if m == len(consecutive_process_parameters) - 1 and m != 0: - self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, - production_item, - product_id_to_production_names) - if sorted_process_parameters[i] in consecutive_process_parameters: - is_purchase = True - consecutive_process_parameters = [] - m = 0 - # 当前面的连续外协采购单生成再生成当前外协采购单 - if is_purchase is False: - self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, - production_item, - product_id_to_production_names) - if m == len(consecutive_process_parameters) - 1 and m != 0: - self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, - production_item, - product_id_to_production_names) - if sorted_process_parameters[i] in consecutive_process_parameters: - is_purchase = True - consecutive_process_parameters = [] - m = 0 - if m == len(consecutive_process_parameters) - 1 and m != 0: - self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, - production_item, - product_id_to_production_names) - if is_purchase is False and m == 0: - if len(sorted_process_parameters) == 1: - self.env['purchase.order'].get_purchase_order(sorted_process_parameters, - production_item, - product_id_to_production_names) - else: - self.env['purchase.order'].get_purchase_order(sorted_process_parameters[i], - production_item, - product_id_to_production_names) - # # 同一个产品多个制造订单对应一个编程单和模型库 - # # 只调用一次fetchCNC,并将所有生产订单的名称作为字符串传递 - if not production_item.programming_no: - if not production_programming.programming_no: - production_item.fetchCNC( - ', '.join(product_id_to_production_names[production_item.product_id.id])) - else: - production_item.write({'programming_no': production_programming.programming_no, - 'programming_state': '编程中'}) + # for production_item in productions: + # + # production_programming = self.env['mrp.production'].search( + # [('product_id.id', '=', production_item.product_id.id), + # ('origin', '=', production_item.origin)], + # limit=1, order='id asc') + # if production_item.product_id.id in product_id_to_production_names: + # if not production_programming.programming_no: + # if production_item.product_id.model_process_parameters_ids: + # is_purchase = False + # sorted_process_parameters = sorted(production_item.product_id.model_process_parameters_ids, + # key=lambda w: w.id) + # + # consecutive_process_parameters = [] + # m = 0 + # for i in range(len(sorted_process_parameters) - 1): + # if m == 0: + # is_purchase = False + # if self.env['product.template']._get_process_parameters_product( + # sorted_process_parameters[i]).partner_id == self.env[ + # 'product.template']._get_process_parameters_product(sorted_process_parameters[ + # i + 1]).partner_id and \ + # sorted_process_parameters[i].gain_way == '外协': + # if sorted_process_parameters[i] not in consecutive_process_parameters: + # consecutive_process_parameters.append(sorted_process_parameters[i]) + # consecutive_process_parameters.append(sorted_process_parameters[i + 1]) + # m += 1 + # continue + # else: + # if m == len(consecutive_process_parameters) - 1 and m != 0: + # self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, + # production_item, + # product_id_to_production_names) + # if sorted_process_parameters[i] in consecutive_process_parameters: + # is_purchase = True + # consecutive_process_parameters = [] + # m = 0 + # # 当前面的连续外协采购单生成再生成当前外协采购单 + # if is_purchase is False: + # self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, + # production_item, + # product_id_to_production_names) + # if m == len(consecutive_process_parameters) - 1 and m != 0: + # self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, + # production_item, + # product_id_to_production_names) + # if sorted_process_parameters[i] in consecutive_process_parameters: + # is_purchase = True + # consecutive_process_parameters = [] + # m = 0 + # if m == len(consecutive_process_parameters) - 1 and m != 0: + # self.env['purchase.order'].get_purchase_order(consecutive_process_parameters, + # production_item, + # product_id_to_production_names) + # if is_purchase is False and m == 0: + # if len(sorted_process_parameters) == 1: + # self.env['purchase.order'].get_purchase_order(sorted_process_parameters, + # production_item, + # product_id_to_production_names) + # else: + # self.env['purchase.order'].get_purchase_order(sorted_process_parameters[i], + # production_item, + # product_id_to_production_names) + # # # 同一个产品多个制造订单对应一个编程单和模型库 + # # # 只调用一次fetchCNC,并将所有生产订单的名称作为字符串传递 + # if not production_item.programming_no: + # if not production_programming.programming_no: + # production_item.fetchCNC( + # ', '.join(product_id_to_production_names[production_item.product_id.id])) + # else: + # production_item.write({'programming_no': production_programming.programming_no, + # 'programming_state': '编程中'}) return True diff --git a/sf_message/__manifest__.py b/sf_message/__manifest__.py index 713a4a5e..671abb85 100644 --- a/sf_message/__manifest__.py +++ b/sf_message/__manifest__.py @@ -11,10 +11,9 @@ """, 'category': 'sf', 'website': 'https://www.sf.jikimo.com', - 'depends': ['base', 'sf_plan', 'sf_sale'], + 'depends': ['base', 'jikimo_message_notify'], 'data': [ - 'security/ir.model.access.csv', - 'views/sf_message_template_view.xml', + 'data/bussiness_node.xml' ], 'test': [ ], diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml new file mode 100644 index 00000000..eeb7cbe7 --- /dev/null +++ b/sf_message/data/bussiness_node.xml @@ -0,0 +1,14 @@ + + + + + 待接单 + sale.order + + + + 确认接单 + sale.order + + + \ No newline at end of file diff --git a/sf_message/models/sf_message_cam_program.py b/sf_message/models/sf_message_cam_program.py index 5a6154e5..38fb6ae2 100644 --- a/sf_message/models/sf_message_cam_program.py +++ b/sf_message/models/sf_message_cam_program.py @@ -3,4 +3,4 @@ from odoo import models, fields, api, _ class SFMessageCamProgram(models.Model): _name = 'sf.cam.work.order.program.knife.plan' - _inherit = ['sf.cam.work.order.program.knife.plan', 'sf.message.template'] + _inherit = ['sf.cam.work.order.program.knife.plan', 'jikimo.message.dispatch'] diff --git a/sf_message/models/sf_message_functional_tool_assembly.py b/sf_message/models/sf_message_functional_tool_assembly.py index 6b5e4ebf..251af2cc 100644 --- a/sf_message/models/sf_message_functional_tool_assembly.py +++ b/sf_message/models/sf_message_functional_tool_assembly.py @@ -3,4 +3,4 @@ from odoo import models, fields, api, _ class SFMessagefunctionalToolAssembly(models.Model): _name = 'sf.functional.tool.assembly' - _inherit = ['sf.functional.tool.assembly', 'sf.message.template'] + _inherit = ['sf.functional.tool.assembly', 'jikimo.message.dispatch'] diff --git a/sf_message/models/sf_message_plan.py b/sf_message/models/sf_message_plan.py index 913b61de..03e9528e 100644 --- a/sf_message/models/sf_message_plan.py +++ b/sf_message/models/sf_message_plan.py @@ -1,6 +1,25 @@ +# -*- coding: utf-8 -*- from odoo import models, fields, api, _ class SFMessagePlan(models.Model): _name = 'sf.production.plan' - _inherit = ['sf.production.plan', 'sf.message.template'] + _inherit = ['sf.production.plan', 'jikimo.message.dispatch'] + + # def create(self, vals_list): + # res = super(SFMessagePlan, self).create(vals_list) + # if res: + # try: + # res.add_queue('待排程') + # except Exception as e: + # logging.info('add_queue error:%s' % e) + # return res + # + # def _get_message(self): + # res = super(SFMessagePlan, self)._get_message() + # if res: + # try: + # res.add_queue('待排程') + # except Exception as e: + # logging.info('_get_message error:%s' % e) + # return res diff --git a/sf_message/models/sf_message_purchase.py b/sf_message/models/sf_message_purchase.py index 89836486..073a7814 100644 --- a/sf_message/models/sf_message_purchase.py +++ b/sf_message/models/sf_message_purchase.py @@ -3,4 +3,4 @@ from odoo import models, fields, api, _ class SFMessagePurchase(models.Model): _name = 'purchase.order' - _inherit = ['purchase.order', 'sf.message.template'] + _inherit = ['purchase.order', 'jikimo.message.dispatch'] diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py index d8d3bd21..1a9fe70b 100644 --- a/sf_message/models/sf_message_sale.py +++ b/sf_message/models/sf_message_sale.py @@ -1,11 +1,43 @@ +# -*- coding: utf-8 -*- from odoo import models, fields, api, _ class SFMessageSale(models.Model): _name = 'sale.order' - _inherit = ['sale.order', 'sf.message.template'] + _inherit = ['sale.order', 'jikimo.message.dispatch'] - # def create(self): - # res = super(SFMessageSale, self).create() - # if res is True: + def create(self, vals_list): + res = super(SFMessageSale, self).create(vals_list) + if res: + try: + 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() + if res is True: + try: + self.add_queue('确认接单') + except Exception as e: + logging.info('add_queue error:%s' % e) + return res + + # 继承并重写jikimo.message.dispatch的_get_message() + def _get_message(self, message_queue_ids): + if message_queue_ids.message_template_id.bussiness_node_id.name == '确认接单': + # sale_order = self.env['sale.order'].search([('id', '=', message_queue_ids.model.res_id)]) + sale_order_line = self.env['sale.order.line'].search([('order_id', '=', int(message_queue_ids.res_id))]) + if len(sale_order_line) == 1: + product = sale_order_line[0].product_id.name + elif len(sale_order_line) > 1: + product = '%s...' % sale_order_line[0].product_id.name + res = super(SFMessageSale, self)._get_message(message_queue_ids) + if res: + try: + res.add_queue('待排程') + except Exception as e: + logging.info('_get_message error:%s' % e) + return res diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py index 894dce9d..b090549e 100644 --- a/sf_message/models/sf_message_stock_picking.py +++ b/sf_message/models/sf_message_stock_picking.py @@ -3,4 +3,4 @@ from odoo import models, fields, api, _ class SFMessageStockPicking(models.Model): _name = 'stock.picking' - _inherit = ['stock.picking', 'sf.message.template'] + _inherit = ['stock.picking', 'jikimo.message.dispatch'] diff --git a/sf_message/models/sf_message_template.py b/sf_message/models/sf_message_template.py index ea6e4222..7380fbe6 100644 --- a/sf_message/models/sf_message_template.py +++ b/sf_message/models/sf_message_template.py @@ -4,31 +4,9 @@ from abc import ABC, abstractmethod class SfMessageTemplate(models.Model): - _name = "sf.message.template" - _description = u'消息模板' + _inherit = "jikimo.message.template" - name = fields.Char(string=u"名称", required=True) - description = fields.Char(string=u"描述") - content = fields.Html(string=u"内容", render_engine='qweb', translate=True, prefetch=True, sanitize=False) - msgtype = fields.Selection( - [('text', u'文字'), ('markdown', u'Markdown')], u'消息类型', - required=True, default='markdown') - notification_department_id = fields.Many2one('hr.department', u'通知部门', required=True) - notification_employee_ids = fields.Many2many('hr.employee', string=u'员工', - domain="[('department_id', '=',notification_department_id)]", - required=True) - is_send_time = fields.Boolean(string=u"定时发送", default=False) - send_time_1 = fields.Integer('发送时间点1') - send_time_2 = fields.Integer('发送时间点2') - active = fields.Boolean(string=u"是否有效", default=True) - - @api.onchange('notification_department_id') - def _clear_employee_ids(self): - if self.notification_department_id: - self.notification_employee_ids = False - - @abstractmethod - def dispatch(self, args): - """ - 强迫继承该类必走该抽象方法' - """ + def _get_message_model(self): + res = super(SfMessageTemplate, self)._get_message_model() + res.append("sale.order") + return res diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py index cab2408d..626c092d 100644 --- a/sf_message/models/sf_message_workorder.py +++ b/sf_message/models/sf_message_workorder.py @@ -3,4 +3,4 @@ from odoo import models, fields, api, _ class SFMessageWork(models.Model): _name = 'mrp.workorder' - _inherit = ['mrp.workorder', 'sf.message.template'] + _inherit = ['mrp.workorder', 'jikimo.message.dispatch'] diff --git a/sf_message/security/ir.model.access.csv b/sf_message/security/ir.model.access.csv index dbb2d6af..fd6de5be 100644 --- a/sf_message/security/ir.model.access.csv +++ b/sf_message/security/ir.model.access.csv @@ -1,9 +1,5 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_sf_message_template_group_sale_salemanager,sf_message_template,model_sf_message_template,sf_base.group_sale_salemanager,1,1,1,0 -access_sf_message_template_group_purchase,sf_message_template,model_sf_message_template,sf_base.group_purchase,1,1,1,0 -access_sf_message_template_group_sf_stock_user,sf_message_template,model_sf_message_template,sf_base.group_sf_stock_user,1,1,1,0 -access_sf_message_template_group_sf_order_user,sf_message_template,model_sf_message_template,sf_base.group_sf_order_user,1,1,1,0 -access_sf_message_template_group_sf_tool_user,sf_message_template,model_sf_message_template,sf_base.group_sf_tool_user,1,1,1,0 + diff --git a/sf_message/views/sf_message_template_view.xml b/sf_message/views/sf_message_template_view.xml index ff1bb74e..21920b64 100644 --- a/sf_message/views/sf_message_template_view.xml +++ b/sf_message/views/sf_message_template_view.xml @@ -7,7 +7,7 @@ sf.message.template.view.form - sf.message.template + message.template
@@ -18,14 +18,12 @@ - + + - - - @@ -36,16 +34,13 @@ sf.message.template.view.tree - sf.message.template + message.template - + - - - @@ -55,7 +50,7 @@ sf.message.template.search.view - sf.message.template + message.template 消息模板 - sf.message.template + message.template tree,form diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py index 081807a4..cb1886a1 100644 --- a/sf_sale/models/quick_easy_order.py +++ b/sf_sale/models/quick_easy_order.py @@ -8,8 +8,8 @@ from datetime import datetime import requests from odoo import http from odoo.http import request -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo import models, fields, api from odoo.modules import get_resource_path from odoo.exceptions import ValidationError, UserError diff --git a/sf_sale/models/quick_easy_order_old.py b/sf_sale/models/quick_easy_order_old.py index 4756a2c5..9bd61132 100644 --- a/sf_sale/models/quick_easy_order_old.py +++ b/sf_sale/models/quick_easy_order_old.py @@ -6,8 +6,8 @@ import os from datetime import datetime from stl import mesh # from OCC.Core.GProp import GProp_GProps -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo.addons.sf_base.commons.common import Common from odoo import models, fields, api from odoo.modules import get_resource_path