diff --git a/sf_manufacturing/wizard/rework_wizard.py b/sf_manufacturing/wizard/rework_wizard.py
index 53fd2965..4698a994 100644
--- a/sf_manufacturing/wizard/rework_wizard.py
+++ b/sf_manufacturing/wizard/rework_wizard.py
@@ -25,6 +25,7 @@ class ReworkWizard(models.TransientModel):
processing_panel_id = fields.Many2many('sf.processing.panel', string="加工面")
is_reprogramming = fields.Boolean(string='申请重新编程', default=False)
is_reprogramming_readonly = fields.Boolean(string='申请重新编程(只读)', default=False)
+ is_clamp_measure = fields.Boolean(string='保留装夹测量数据', default=True)
reprogramming_num = fields.Integer('重新编程次数', default=0)
programming_state = fields.Selection(
[('待编程', '待编程'), ('编程中', '编程中'), ('已编程', '已编程'), ('已编程未下发', '已编程未下发'),
@@ -35,6 +36,7 @@ class ReworkWizard(models.TransientModel):
def confirm(self):
if self.routing_type in ['装夹预调', 'CNC加工']:
+ self.is_clamp_measure = False
self.workorder_id.is_rework = True
self.production_id.write({'detection_result_ids': [(0, 0, {
'rework_reason': self.rework_reason,
@@ -58,19 +60,15 @@ class ReworkWizard(models.TransientModel):
if processing_panels_missing:
processing_panels_str = ','.join(processing_panels_missing)
raise UserError('您还有待处理的检测结果中为%s的加工面未选择' % processing_panels_str)
- # processing_panels = set()
- # for handle_item in handle_result:
- # for dr_panel in self.processing_panel_id:
- # if dr_panel.name == handle_item.processing_panel:
- # processing_panels.add(dr_panel.name)
- # if len(processing_panels) != len(handle_result):
- # processing_panels_str = ','.join(processing_panels)
- # return UserError(f'您还有待处理的检测结果中为{processing_panels_str}的加工面未选择')
for panel in self.processing_panel_id:
panel_workorder = self.production_id.workorder_ids.filtered(
lambda ap: ap.processing_panel == panel.name and ap.state != 'rework')
if panel_workorder:
panel_workorder.write({'state': 'rework'})
+ rework_clamp_workorder = max(panel_workorder.filtered(
+ lambda
+ rp: rp.processing_panel == panel.name and rp.routing_type == '装夹预调' and rp.state in [
+ 'done', 'rework']))
# panel_workorder.filtered(
# lambda wo: wo.routing_type == '装夹预调').workpiece_delivery_ids.filtered(
# lambda wd: wd.status == '待下发').write({'status': '已取消'})
@@ -93,6 +91,43 @@ class ReworkWizard(models.TransientModel):
self.production_id.detection_result_ids.filtered(
lambda ap1: ap1.processing_panel == panel.name and ap1.handle_result == '待处理').write(
{'handle_result': '已处理'})
+ new_pre_workorder = self.production_id.workorder_ids.filtered(lambda
+ p: p.routing_type == '装夹预调' and p.processing_panel == panel.name and p.state not in (
+ 'rework', 'done'))
+ if new_pre_workorder and rework_clamp_workorder and self.is_clamp_measure is True:
+ new_pre_workorder.write(
+ {'X1_axis': rework_clamp_workorder.X1_axis, 'Y1_axis': rework_clamp_workorder.Y1_axis
+ , 'Z1_axis': rework_clamp_workorder.Z1_axis,
+ 'X2_axis': rework_clamp_workorder.X2_axis
+ , 'Y2_axis': rework_clamp_workorder.Y2_axis,
+ 'Z2_axis': rework_clamp_workorder.Z2_axis
+ , 'X3_axis': rework_clamp_workorder.X3_axis,
+ 'Y3_axis': rework_clamp_workorder.Y3_axis
+ , 'Z3_axis': rework_clamp_workorder.Z3_axis,
+ 'X4_axis': rework_clamp_workorder.X4_axis
+ , 'Y4_axis': rework_clamp_workorder.Y4_axis,
+ 'Z4_axis': rework_clamp_workorder.Z4_axis
+ , 'X5_axis': rework_clamp_workorder.X5_axis,
+ 'Y5_axis': rework_clamp_workorder.Y5_axis
+ , 'Z5_axis': rework_clamp_workorder.Z5_axis,
+ 'X6_axis': rework_clamp_workorder.X6_axis
+ , 'Y6_axis': rework_clamp_workorder.Y6_axis,
+ 'Z6_axis': rework_clamp_workorder.Z6_axis
+ , 'X7_axis': rework_clamp_workorder.X7_axis,
+ 'Y7_axis': rework_clamp_workorder.Y7_axis
+ , 'Z7_axis': rework_clamp_workorder.Z7_axis,
+ 'X8_axis': rework_clamp_workorder.X8_axis
+ , 'Y8_axis': rework_clamp_workorder.Y8_axis,
+ 'Z8_axis': rework_clamp_workorder.Z8_axis
+ , 'X9_axis': rework_clamp_workorder.X9_axis,
+ 'Y9_axis': rework_clamp_workorder.Y9_axis
+ , 'Z9_axis': rework_clamp_workorder.Z9_axis,
+ 'X10_axis': rework_clamp_workorder.X10_axis
+ , 'Y10_axis': rework_clamp_workorder.Y10_axis,
+ 'Z10_axis': rework_clamp_workorder.Z10_axis
+ , 'X_deviation_angle': rework_clamp_workorder.X_deviation_angle,
+ 'material_center_point': rework_clamp_workorder.material_center_point
+ })
if self.is_reprogramming is False:
if self.programming_state in ['已编程', '已下发']:
if self.reprogramming_num >= 1 and self.programming_state == '已编程':
@@ -149,9 +184,7 @@ class ReworkWizard(models.TransientModel):
'cmm_ids': new_cnc_workorder.cmm_ids.sudo()._json_cmm_program(panel.name,
ret),
'cnc_worksheet': cnc_rework.cnc_worksheet})
- new_pre_workorder = self.production_id.workorder_ids.filtered(lambda
- p: p.routing_type == '装夹预调' and p.processing_panel == panel.name and p.state not in (
- 'rework', 'done'))
+
if new_pre_workorder:
pre_rework = max(self.production_id.workorder_ids.filtered(
lambda pr: pr.processing_panel == panel.name and pr.state in (
diff --git a/sf_manufacturing/wizard/rework_wizard_views.xml b/sf_manufacturing/wizard/rework_wizard_views.xml
index 8ba3f4dd..d8cf0fb9 100644
--- a/sf_manufacturing/wizard/rework_wizard_views.xml
+++ b/sf_manufacturing/wizard/rework_wizard_views.xml
@@ -14,17 +14,25 @@
+
+
+ 保留装夹测量数据
+
+
+
- 注意: 该制造订单产品已申请重新编程次数为,且当前编程状态为
-
+
+ 注意: 该制造订单产品已申请重新编程次数为,且当前编程状态为
+
+
申请重新编程
diff --git a/sf_mrs_connect/models/res_config_setting.py b/sf_mrs_connect/models/res_config_setting.py
index 159e8d48..04693fa7 100644
--- a/sf_mrs_connect/models/res_config_setting.py
+++ b/sf_mrs_connect/models/res_config_setting.py
@@ -1,8 +1,11 @@
# -*- coding: utf-8 -*-
# Part of SmartGo. See LICENSE file for full copyright and licensing details.
import logging
+
+import requests
+
from odoo import api, fields, models
-from odoo.exceptions import ValidationError
+from odoo.exceptions import ValidationError, UserError
_logger = logging.getLogger(__name__)
@@ -86,7 +89,7 @@ class ResConfigSettings(models.TransientModel):
_logger.info("同步刀具物料每齿走刀量完成")
except Exception as e:
- _logger.info("捕获错误信息:%s" % e)
+ _logger.info("sf_all_sync error: %s" % e)
raise ValidationError("数据错误导致同步失败,请联系管理员")
@api.model
@@ -144,3 +147,68 @@ class ResConfigSettings(models.TransientModel):
ir_config.set_param("ftp_user", self.ftp_user or "")
ir_config.set_param("ftp_password", self.ftp_password or "")
ir_config.set_param("enable_tool_presetter", self.enable_tool_presetter or False)
+
+ def sync_sale_price(self):
+ self.get_page_all_records(self.sale_order_price_process)
+
+ def sale_order_price_process(self, datas):
+ if not datas:
+ return
+ try:
+ convert_sale_data = map(lambda data:
+ {'name': data.name, 'order_lines': {
+ str(i): str(value.price_unit) for i, value in enumerate(data.order_line)
+ }
+ },
+ datas)
+ config = self.env['res.config.settings'].get_values()
+ url = config['bfm_url_new'] + '/api/sync/order/price'
+ json_data = {
+ 'params': {
+ 'data': list(convert_sale_data),
+ },
+ }
+ response = requests.post(url, json=json_data, data=None)
+ response = response.json()
+ if not response.get('error'):
+ result = response.get('result')
+ for need_change_sale_data in result:
+ res_order_lines_map = need_change_sale_data.get('order_lines')
+ if not res_order_lines_map:
+ continue
+ need_change_sale_order = self.env['sale.order'].sudo().search([('name', '=', need_change_sale_data.get('name'))])
+ for index,need_change_sale_order_line in enumerate(need_change_sale_order.order_line):
+ if not res_order_lines_map.get(str(index)):
+ continue
+ order_line = self.env['sale.order.line'].browse(need_change_sale_order_line.id)
+ new_price = res_order_lines_map.get(str(index))
+ if order_line:
+ # 修改单价
+ order_line.write({'remark': new_price})
+ else:
+ logging.error('同步销售订单价格失败 {}'.format(response.text))
+ raise UserError('同步销售订单价格失败')
+ except Exception as e:
+ raise UserError(e)
+
+ def get_page_all_records(self, func, page_size=100):
+ # 获取模型对象
+ model = self.env['sale.order'].sudo()
+
+ # 初始化分页参数
+ page_number = 1
+ while True:
+ # 计算偏移量
+ offset = (page_number - 1) * page_size
+
+ # 获取当前页的数据
+ records = model.search([], limit=page_size, offset=offset)
+
+ # 如果没有更多记录,退出循环
+ if not records:
+ break
+
+ # 将当前页的数据添加到结果列表
+ func(records)
+ # 增加页码
+ page_number += 1
\ No newline at end of file
diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py
index e812bd03..e106bbf2 100644
--- a/sf_mrs_connect/models/sync_common.py
+++ b/sf_mrs_connect/models/sync_common.py
@@ -2,6 +2,8 @@
import logging
import json
import base64
+import traceback
+
import requests
from odoo import models
from odoo.exceptions import ValidationError
@@ -73,7 +75,8 @@ class MrStaticResourceDataSync(models.Model):
self.env['sf.feed.per.tooth'].sync_feed_per_tooth_yesterday()
_logger.info("同步刀具物料每齿走刀量完成")
except Exception as e:
- logging.info("捕获错误信息:%s" % e)
+ traceback_error = traceback.format_exc()
+ logging.error("同步静态资源库失败:%s" % traceback_error)
raise ValidationError("数据错误导致同步失败,请联系管理员")
@@ -2759,8 +2762,9 @@ class CuttingToolBasicParameters(models.Model):
if result['status'] == 1:
if 'basic_parameters_integral_tool' in result['cutting_tool_basic_parameters_yesterday_list']:
if result['cutting_tool_basic_parameters_yesterday_list']['basic_parameters_integral_tool']:
- basic_parameters_integral_tool_list = json.loads(
- result['cutting_tool_basic_parameters_yesterday_list']['basic_parameters_integral_tool'])
+ cutting_tool_basic_parameters_yesterday_list= result['cutting_tool_basic_parameters_yesterday_list']
+ basic_parameters_integral_tool_list = cutting_tool_basic_parameters_yesterday_list['basic_parameters_integral_tool']
+
if basic_parameters_integral_tool_list:
for integral_tool_item in basic_parameters_integral_tool_list:
integral_tool = self.search(
diff --git a/sf_mrs_connect/views/res_config_settings_views.xml b/sf_mrs_connect/views/res_config_settings_views.xml
index 05e5be41..651e6f15 100644
--- a/sf_mrs_connect/views/res_config_settings_views.xml
+++ b/sf_mrs_connect/views/res_config_settings_views.xml
@@ -129,6 +129,21 @@