Accept Merge Request #180: (feature/优化代码结构 -> develop)

Merge Request: 修复进度反馈问题与时区问题,优化界面问题(下发记录等只显示在cnc加工工单处)与opcua超时时长

Created By: @马广威
Accepted By: @马广威
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/180?initial=true
This commit is contained in:
马广威
2023-05-23 10:46:37 +08:00
9 changed files with 188 additions and 73 deletions

View File

@@ -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):

View File

@@ -29,6 +29,7 @@
'views/machine_monitor.xml',
'views/machine_info_present.xml',
'views/delivery_record.xml',
'views/res_config_settings_views.xml',
],
'assets': {

View File

@@ -1,3 +1,4 @@
from . import ftp_client
from . import ftp_operate
from . import py2opcua
from . import res_config_setting

View File

@@ -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': '一键合并下发',

View File

@@ -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):

View File

@@ -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 "")

View File

@@ -13,7 +13,7 @@
<field name="arch" type="xml">
<xpath expr="//group//field[@name='processing_panel']" position="after">
<!-- invisible="1" -->
<field name="_barcode_scanned" widget="barcode_handler" string="扫码"/>
<field name="_barcode_scanned" widget="barcode_handler" string="扫码" attrs='{"invisible": [("routing_type","!=","装夹")]}'/>
</xpath>
<xpath expr="//page//field[@name='tray_code']" position="replace">
<field name="tray_code" widget="code"/>

View File

@@ -7,7 +7,7 @@
<field name="arch" type="xml">
<xpath expr="//page[last()-3]" position="before">
<!-- <page string="下发记录" attrs='{"invisible": [("routing_type","!=","CNC加工")]}'>-->
<page string="下发记录">
<page string="下发记录" attrs='{"invisible": [("routing_type","!=","CNC加工")]}'>
<field name="delivery_records">
<tree create="false">
<field name="delivery_type"/>
@@ -17,7 +17,6 @@
</field>
</page>
</xpath>
</field>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="res_config_settings_jd_view_form_inherit" model="ir.ui.view">
<field name="name">res.config.settings.jd.view.form.inherit.bpm</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('app_settings_block')]/div" position="before">
<div>
<h2>bfm环境配置</h2>
<div class="row mt16 o_settings_container" id="jd_api">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<div class="text-muted">
<label for="bfm_url"/>
<field name="bfm_url"/>
</div>
</div>
<!-- </div> -->
</div>
</div>
</div>
</xpath>
</field>
</record>
</data>
</odoo>