diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml
index 457ac122..a41cad09 100644
--- a/sf_manufacturing/views/mrp_workorder_view.xml
+++ b/sf_manufacturing/views/mrp_workorder_view.xml
@@ -37,7 +37,7 @@
-
+
diff --git a/sf_mrs_connect/models/res_config_setting.py b/sf_mrs_connect/models/res_config_setting.py
index 159e8d48..e1bd6de1 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__)
@@ -144,3 +147,76 @@ 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': {
+ '%s/%s/%s/%s/±%s/' % (
+ order_line.product_template_id.model_long, order_line.product_template_id.model_width, order_line.product_template_id.model_height,
+ order_line.product_template_id.model_volume,
+ order_line.product_template_id.model_machining_precision,
+ ): order_line.price_unit for order_line in
+ 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 need_change_sale_order_line in need_change_sale_order.order_line:
+ order_line_uniq='%s/%s/%s/%s/±%s/' % (
+ need_change_sale_order_line.product_template_id.model_long, need_change_sale_order_line.product_template_id.model_width,
+ need_change_sale_order_line.product_template_id.model_height,
+ need_change_sale_order_line.product_template_id.model_volume,
+ need_change_sale_order_line.product_template_id.model_machining_precision,
+ )
+ if not res_order_lines_map.get(order_line_uniq):
+ continue
+ need_change_sale_order_line.write({'price_unit': res_order_lines_map.get(order_line_uniq)})
+ 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/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 @@
+