diff --git a/sf_bf_connect/models/process_status.py b/sf_bf_connect/models/process_status.py index 2a4aa0e3..0a18096b 100644 --- a/sf_bf_connect/models/process_status.py +++ b/sf_bf_connect/models/process_status.py @@ -15,99 +15,148 @@ class StatusChange(models.Model): default_code = fields.Char(string='内部编码') def action_confirm(self): + # 在原有方法执行前记录日志和执行其他操作 logging.info('函数已经执行=============') - if self._get_forbidden_state_confirm() & set(self.mapped('state')): - raise UserError(_( - "It is not allowed to confirm an order in the following states: %s", - ", ".join(self._get_forbidden_state_confirm()), - )) - logging.info('函数已经执行=============1') - for order in self: - if order.partner_id in order.message_partner_ids: - logging.info('函数已经执行=============2') - continue - order.message_subscribe([order.partner_id.id]) - logging.info('函数已经执行=============3') - self.write(self._prepare_confirmation_values()) - # Context key 'default_name' is sometimes propagated up to here. - # We don't need it and it creates issues in the creation of linked records. - context = self._context.copy() - context.pop('default_name', None) - logging.info('函数已经执行=============4') - self.with_context(context)._action_confirm() - if self.env.user.has_group('sale.group_auto_done_setting'): - logging.info('函数已经执行=============5') - self.action_done() + # 使用super()来调用原始方法(在本例中为'sale.order'模型的'action_confirm'方法) + res = super(StatusChange, self).action_confirm() + + # 原有方法执行后,进行额外的操作(如调用外部API) process_start_time = str(datetime.now()) + config = self.env['res.config.settings'].get_values() json1 = { 'params': { 'model_name': 'jikimo.process.order', 'field_name': 'name', - # 'default_code': 'PO-2022-1214-0022', 'default_code': self.default_code, - # 'default_code': self.name, 'state': '加工中', 'process_start_time': process_start_time, }, } - url1 = 'https://bfm.cs.jikimo.com/api/get/state/get_order' + url1 = config['bfm_url'] + '/api/get/state/get_order' requests.post(url1, json=json1, data=None) logging.info('接口已经执行=============') - return True + return res def action_cancel(self): - """ Cancel SO after showing the cancel wizard when needed. (cfr `_show_cancel_wizard`) - - For post-cancel operations, please only override `_action_cancel`. - - note: self.ensure_one() if the wizard is shown. - """ + # 在原有方法执行前记录日志和执行其他操作 logging.info('函数已经执行=============') - cancel_warning = self._show_cancel_wizard() + + # 使用super()来调用原始方法(在本例中为'sale.order'模型的'action_cancel'方法) + res = super(StatusChange, self).action_cancel() + + # 原有方法执行后,进行额外的操作(如调用外部API) logging.info('函数已经执行=============2') + config = self.env['res.config.settings'].get_values() json1 = { 'params': { 'model_name': 'jikimo.process.order', 'field_name': 'name', 'default_code': self.default_code, - # 'default_code': self.name, 'state': '待派单', }, } - url1 = 'https://bfm.cs.jikimo.com/api/get/state/cancel_order' + url1 = config['bfm_url'] + '/api/get/state/cancel_order' requests.post(url1, json=json1, data=None) - if cancel_warning: - logging.info('函数已经执行=============3') - self.ensure_one() - logging.info('函数已经执行=============4') - template_id = self.env['ir.model.data']._xmlid_to_res_id( - 'sale.mail_template_sale_cancellation', raise_if_not_found=False - ) - lang = self.env.context.get('lang') - template = self.env['mail.template'].browse(template_id) - if template.lang: - lang = template._render_lang(self.ids)[self.id] - ctx = { - 'default_use_template': bool(template_id), - 'default_template_id': template_id, - 'default_order_id': self.id, - 'mark_so_as_canceled': True, - 'default_email_layout_xmlid': "mail.mail_notification_layout_with_responsible_signature", - 'model_description': self.with_context(lang=lang).type_name, - } - return { - 'name': _('Cancel %s', self.type_name), - 'view_mode': 'form', - 'res_model': 'sale.order.cancel', - 'view_id': self.env.ref('sale.sale_order_cancel_view_form').id, - 'type': 'ir.actions.act_window', - 'context': ctx, - 'target': 'new' - } - else: - return self._action_cancel() + + return res + + # def action_confirm(self): + # logging.info('函数已经执行=============') + # if self._get_forbidden_state_confirm() & set(self.mapped('state')): + # raise UserError(_( + # "It is not allowed to confirm an order in the following states: %s", + # ", ".join(self._get_forbidden_state_confirm()), + # )) + # logging.info('函数已经执行=============1') + # for order in self: + # if order.partner_id in order.message_partner_ids: + # logging.info('函数已经执行=============2') + # continue + # order.message_subscribe([order.partner_id.id]) + # logging.info('函数已经执行=============3') + # self.write(self._prepare_confirmation_values()) + # + # # Context key 'default_name' is sometimes propagated up to here. + # # We don't need it and it creates issues in the creation of linked records. + # context = self._context.copy() + # context.pop('default_name', None) + # logging.info('函数已经执行=============4') + # self.with_context(context)._action_confirm() + # if self.env.user.has_group('sale.group_auto_done_setting'): + # logging.info('函数已经执行=============5') + # self.action_done() + # process_start_time = str(datetime.now()) + # json1 = { + # 'params': { + # 'model_name': 'jikimo.process.order', + # 'field_name': 'name', + # # 'default_code': 'PO-2022-1214-0022', + # 'default_code': self.default_code, + # # 'default_code': self.name, + # 'state': '加工中', + # 'process_start_time': process_start_time, + # }, + # } + # url1 = 'https://bfm.cs.jikimo.com/api/get/state/get_order' + # requests.post(url1, json=json1, data=None) + # logging.info('接口已经执行=============') + # + # return True + + + # def action_cancel(self): + # """ Cancel SO after showing the cancel wizard when needed. (cfr `_show_cancel_wizard`) + # + # For post-cancel operations, please only override `_action_cancel`. + # + # note: self.ensure_one() if the wizard is shown. + # """ + # logging.info('函数已经执行=============') + # cancel_warning = self._show_cancel_wizard() + # logging.info('函数已经执行=============2') + # json1 = { + # 'params': { + # 'model_name': 'jikimo.process.order', + # 'field_name': 'name', + # 'default_code': self.default_code, + # # 'default_code': self.name, + # 'state': '待派单', + # }, + # } + # url1 = 'https://bfm.cs.jikimo.com/api/get/state/cancel_order' + # requests.post(url1, json=json1, data=None) + # if cancel_warning: + # logging.info('函数已经执行=============3') + # self.ensure_one() + # logging.info('函数已经执行=============4') + # template_id = self.env['ir.model.data']._xmlid_to_res_id( + # 'sale.mail_template_sale_cancellation', raise_if_not_found=False + # ) + # lang = self.env.context.get('lang') + # template = self.env['mail.template'].browse(template_id) + # if template.lang: + # lang = template._render_lang(self.ids)[self.id] + # ctx = { + # 'default_use_template': bool(template_id), + # 'default_template_id': template_id, + # 'default_order_id': self.id, + # 'mark_so_as_canceled': True, + # 'default_email_layout_xmlid': "mail.mail_notification_layout_with_responsible_signature", + # 'model_description': self.with_context(lang=lang).type_name, + # } + # return { + # 'name': _('Cancel %s', self.type_name), + # 'view_mode': 'form', + # 'res_model': 'sale.order.cancel', + # 'view_id': self.env.ref('sale.sale_order_cancel_view_form').id, + # 'type': 'ir.actions.act_window', + # 'context': ctx, + # 'target': 'new' + # } + # else: + # return self._action_cancel() class FinishStatusChange(models.Model): diff --git a/sf_machine_connect/__manifest__.py b/sf_machine_connect/__manifest__.py index 98fdb394..9642c087 100644 --- a/sf_machine_connect/__manifest__.py +++ b/sf_machine_connect/__manifest__.py @@ -29,6 +29,7 @@ 'views/machine_monitor.xml', 'views/machine_info_present.xml', 'views/delivery_record.xml', + 'views/res_config_settings_views.xml', ], 'assets': { diff --git a/sf_machine_connect/models/__init__.py b/sf_machine_connect/models/__init__.py index 30087503..ef61fd83 100644 --- a/sf_machine_connect/models/__init__.py +++ b/sf_machine_connect/models/__init__.py @@ -1,3 +1,4 @@ from . import ftp_client from . import ftp_operate from . import py2opcua +from . import res_config_setting diff --git a/sf_machine_connect/models/ftp_client.py b/sf_machine_connect/models/ftp_client.py index ca1fc42e..f782d6d4 100644 --- a/sf_machine_connect/models/ftp_client.py +++ b/sf_machine_connect/models/ftp_client.py @@ -6,7 +6,7 @@ import json import hashlib import time import requests -from datetime import datetime +from datetime import datetime, timedelta from odoo.http import request from odoo import fields, models, api, _ from odoo.exceptions import ValidationError @@ -79,7 +79,7 @@ class FtpButton(models.Model): _logger.info("======%s下发成功======" % a.display_name) ftp.close_ftp() - up_time = str(datetime.now()) + up_time = str(datetime.now() + timedelta(hours=8)) self.env['delivery.record'].create({ 'workorder_id': self.workorder_id.id, 'delivery_type': '单个下发', @@ -364,7 +364,7 @@ class WorkCenterBarcode(models.Model): item.button_state = True ftp.close_ftp() # 增加一键下发记录 - up_time = str(datetime.now()) + up_time = str(datetime.now() + timedelta(hours=8)) sequence_str = ','.join(sequence_collect) self.delivery_records.create({ 'delivery_type': '一键下发', @@ -451,7 +451,7 @@ class WorkCenterBarcode(models.Model): _logger.info("======%s一键合并下发成功======" % a.display_name) ftp.close_ftp() # 增加一键合并下发记录 - up_time = str(datetime.now()) + up_time = str(datetime.now() + timedelta(hours=8)) sequence_str = ','.join(sequence_collect) self.delivery_records.create({ 'delivery_type': '一键合并下发', diff --git a/sf_machine_connect/models/py2opcua.py b/sf_machine_connect/models/py2opcua.py index 479fa91c..2b00f394 100644 --- a/sf_machine_connect/models/py2opcua.py +++ b/sf_machine_connect/models/py2opcua.py @@ -7,7 +7,7 @@ class Py2opcua: """ def __init__(self, url='opc.tcp://192.168.2.99:4840'): - self.client = Client(url) + self.client = Client(url, timeout=3600000) # 连接客户端 # def connect(self): diff --git a/sf_machine_connect/models/res_config_setting.py b/sf_machine_connect/models/res_config_setting.py new file mode 100644 index 00000000..bab85379 --- /dev/null +++ b/sf_machine_connect/models/res_config_setting.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +import logging +from odoo import api, fields, models, _ + +_logger = logging.getLogger(__name__) + + +class ResBFMConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + bfm_url = fields.Selection( + [("https://bfm.cs.jikimo.com", "开发环境(https://bfm.cs.jikimo.com)"), + ("https://bfm.r.jikimo.com", "测试环境(https://bfm.r.jikimo.com)"), + # ("正式环境", "https://bfm.jikimo.com")], string='bfm环境', store=True) + ("https://bfm.jikimo.com", "正式环境(https://bfm.jikimo.com)")], string='bfm环境', store=True) + + @api.model + def get_values(self): + """ + 重载获取参数的方法,参数都存在系统参数中 + :return: + """ + values = super(ResBFMConfigSettings, self).get_values() + config = self.env['ir.config_parameter'].sudo() + bfm_url = config.get_param('bfm_url', default='') + + values.update( + bfm_url=bfm_url, + ) + return values + + def set_values(self): + super(ResBFMConfigSettings, self).set_values() + ir_config = self.env['ir.config_parameter'].sudo() + ir_config.set_param("bfm_url", self.bfm_url or "") + diff --git a/sf_machine_connect/views/SfWorkOrderBarcodes.xml b/sf_machine_connect/views/SfWorkOrderBarcodes.xml index 7c40593b..d1ba5126 100644 --- a/sf_machine_connect/views/SfWorkOrderBarcodes.xml +++ b/sf_machine_connect/views/SfWorkOrderBarcodes.xml @@ -13,7 +13,7 @@ - + diff --git a/sf_machine_connect/views/delivery_record.xml b/sf_machine_connect/views/delivery_record.xml index 29bf5daa..b614a7bb 100644 --- a/sf_machine_connect/views/delivery_record.xml +++ b/sf_machine_connect/views/delivery_record.xml @@ -7,7 +7,7 @@ - + @@ -17,7 +17,6 @@ - diff --git a/sf_machine_connect/views/res_config_settings_views.xml b/sf_machine_connect/views/res_config_settings_views.xml new file mode 100644 index 00000000..bdd481ac --- /dev/null +++ b/sf_machine_connect/views/res_config_settings_views.xml @@ -0,0 +1,29 @@ + + + + + res.config.settings.jd.view.form.inherit.bpm + res.config.settings + + + +
+

bfm环境配置

+
+
+
+
+
+
+
+ +
+
+
+ + + + +