From 0dbd941ed058e1177722ba0b1f18ef491bb2de63 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Fri, 6 Jan 2023 16:47:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=B7=A5=E4=B8=AD=E8=BD=A8=E8=BF=B9?= =?UTF-8?q?=E8=B7=9F=E8=B8=AA=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_bf_connect/models/__init__.py | 1 - sf_bf_connect/models/process_status.py | 158 +++++++++++++++++++++++++ 2 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 sf_bf_connect/models/process_status.py diff --git a/sf_bf_connect/models/__init__.py b/sf_bf_connect/models/__init__.py index 1b8cfb6d..36ad6139 100644 --- a/sf_bf_connect/models/__init__.py +++ b/sf_bf_connect/models/__init__.py @@ -1,4 +1,3 @@ from . import http from . import models - diff --git a/sf_bf_connect/models/process_status.py b/sf_bf_connect/models/process_status.py new file mode 100644 index 00000000..6ea3da99 --- /dev/null +++ b/sf_bf_connect/models/process_status.py @@ -0,0 +1,158 @@ +from odoo import api, fields, models, SUPERUSER_ID, _ +from odoo.exceptions import ValidationError +from datetime import datetime +import logging +from odoo.exceptions import UserError +import requests + +_logger = logging.getLogger(__name__) + +class StatusChange(models.Model): + _inherit = 'sale.order' + + 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() + process_start_time = str(datetime.now()) + + + default_code = self.env['product.template'].search([('default_code', '=', self)]) + logging.info('函数已经执行=============default_code', default_code) + json1 = { + 'params': { + 'model_name': 'jikimo.process.order', + 'field_name': 'name', + # 'default_code': 'PO-2022-1214-0022', + 'default_code': 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': 'PO-2022-1214-0022', + # '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() + + # def action_cancel(self): + # """ Cancel SO after showing the cancel wizard when needed. (cfr :meth:`_show_cancel_wizard`) + # + # For post-cancel operations, please only override :meth:`_action_cancel`. + # + # note: self.ensure_one() if the wizard is shown. + # """ + # cancel_warning = self._show_cancel_wizard() + # if cancel_warning: + # self.ensure_one() + # 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() + # + # def _action_cancel(self): + # inv = self.invoice_ids.filtered(lambda inv: inv.state == 'draft') + # inv.button_cancel() + # return self.write({'state': 'cancel'}) +