From 3624ef47553183cbae6a58866e76874e4c1be67e Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Fri, 30 Aug 2024 16:30:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=80=E5=94=AE=E8=AE=A2=E5=8D=95=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/views/mrp_workorder_view.xml | 2 +- sf_mrs_connect/models/res_config_setting.py | 78 ++++++++++++++++++- .../views/res_config_settings_views.xml | 15 ++++ 3 files changed, 93 insertions(+), 2 deletions(-) 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 @@ +
+

销售订单价格同步

+
+
+
+
+
+
+
+
+
+