Files
test/sf_bf_connect/models/process_status.py
2024-09-23 17:50:25 +08:00

258 lines
12 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import traceback
from datetime import datetime
import logging
import requests
from odoo.exceptions import UserError
from odoo import fields, models, _
_logger = logging.getLogger(__name__)
class StatusChange(models.Model):
_inherit = 'sale.order'
default_code = fields.Char(string='内部编码')
def action_confirm(self):
# 在原有方法执行前记录日志和执行其他操作
logging.info('函数已经执行=============')
server_product_none = []
for order in self.order_line:
gain_way_no = order.product_template_id.model_process_parameters_ids.filtered(lambda a: not a.gain_way)
if gain_way_no:
process_parameters = [item.name for item in gain_way_no]
raise UserError(
_("请先至【制造】-【配置】中【表面工艺可选参数】为【%s】填写获取方式", ", ".join(process_parameters)))
for item in order.product_template_id.model_process_parameters_ids:
if item.gain_way == '外协':
server_product = self.env['product.template'].search(
[('server_product_process_parameters_id', '=', item.id),
('detailed_type', '=', 'service')])
if not server_product:
server_product_none.append(item.name)
if server_product_none:
raise UserError(_("请先至【产品】中创建【表面工艺参数】为【%s】的服务产品", ", ".join(server_product_none)))
# 使用super()来调用原始方法(在本例中为'sale.order'模型的'action_confirm'方法)
try:
res = super(StatusChange, self).action_confirm()
# 原有方法执行后进行额外的操作如调用外部API
process_start_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
config = self.env['res.config.settings'].get_values()
json1 = {
'params': {
'model_name': 'jikimo.process.order',
'field_name': 'name',
'default_code': self.default_code,
'state': '加工中',
'process_start_time': process_start_time,
},
}
url1 = config['bfm_url_new'] + '/api/get/state/get_order'
ret = requests.post(url1, json=json1, data=None)
ret = ret.json()
if not ret.get('error'):
logging.info('接口已经执行=============')
else:
traceback_error = traceback.format_exc()
logging.error("bfm订单状态同步失败:%s" % traceback_error)
raise UserError('工厂加工同步订单状态到bfm失败')
except UserError as e:
traceback_error = traceback.format_exc()
logging.error("工厂加工同步订单状态失败:%s " % traceback_error)
raise UserError(e)
return res
def action_cancel(self):
# 在原有方法执行前记录日志和执行其他操作
logging.info('函数已经执行=============')
# 使用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,
'state': '待派单',
},
}
url1 = config['bfm_url_new'] + '/api/get/state/cancel_order'
requests.post(url1, json=json1, data=None)
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):
_inherit = 'stock.picking'
# default_code = fields.Char(string='内部编码')
def button_validate1(self):
# Clean-up the context key at validation to avoid forcing the creation of immediate
# transfers.
ctx = dict(self.env.context)
ctx.pop('default_immediate_transfer', None)
self = self.with_context(ctx)
# Sanity checks.
if not self.env.context.get('skip_sanity_check', False):
self._sanity_check()
self.message_subscribe([self.env.user.partner_id.id])
# Run the pre-validation wizards. Processing a pre-validation wizard should work on the
# moves and/or the context and never call `_action_done`.
if not self.env.context.get('button_validate_picking_ids'):
self = self.with_context(button_validate_picking_ids=self.ids)
res = self._pre_action_done_hook()
if res is not True:
return res
# Call `_action_done`.
pickings_not_to_backorder = self.filtered(lambda p: p.picking_type_id.create_backorder == 'never')
if self.env.context.get('picking_ids_not_to_backorder'):
pickings_not_to_backorder |= self.browse(self.env.context['picking_ids_not_to_backorder']).filtered(
lambda p: p.picking_type_id.create_backorder != 'always'
)
pickings_to_backorder = self - pickings_not_to_backorder
pickings_not_to_backorder.with_context(cancel_backorder=True)._action_done()
pickings_to_backorder.with_context(cancel_backorder=False)._action_done()
if self.user_has_groups('stock.group_reception_report') \
and self.picking_type_id.auto_show_reception_report:
lines = self.move_ids.filtered(lambda
m: m.product_id.type == 'product' and m.state != 'cancel'
and m.quantity_done and not m.move_dest_ids)
if lines:
# don't show reception report if all already assigned/nothing to assign
wh_location_ids = self.env['stock.location']._search(
[('id', 'child_of', self.picking_type_id.warehouse_id.view_location_id.id),
('usage', '!=', 'supplier')])
if self.env['stock.move'].search([
('state', 'in', ['confirmed', 'partially_available', 'waiting', 'assigned']),
('product_qty', '>', 0),
('location_id', 'in', wh_location_ids),
('move_orig_ids', '=', False),
('picking_id', 'not in', self.ids),
('product_id', 'in', lines.product_id.ids)], limit=1):
action = self.action_view_reception_report()
action['context'] = {'default_picking_ids': self.ids}
return action
# out_start_time = str(datetime.now())
json2 = {
'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': out_start_time,
},
}
url1 = 'https://bfm.cs.jikimo.com/api/get/state/get_order'
requests.post(url1, json=json2, data=None)
logging.info('接口已经执行=============')
return True