From 6b9428c8bf13e28d4dc94c46cde109c7174ae496 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Mon, 10 Feb 2025 16:38:34 +0800 Subject: [PATCH 01/27] =?UTF-8?q?=E5=A4=9A=E7=A7=8D=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=B8=8B=E6=98=BE=E7=A4=BA=E6=8B=92=E7=BB=9D=E6=8E=A5=E5=8D=95?= =?UTF-8?q?/=E5=8F=96=E6=B6=88=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/views/sale_order_views.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sf_manufacturing/views/sale_order_views.xml b/sf_manufacturing/views/sale_order_views.xml index 8e1d1061..aa5bfaa0 100644 --- a/sf_manufacturing/views/sale_order_views.xml +++ b/sf_manufacturing/views/sale_order_views.xml @@ -22,11 +22,11 @@ + + + - {'invisible': [('state', '!=', 'draft')]} - - - {'invisible': [('state', '!=', 'draft')]} + {'invisible': [('state', 'not in', ['draft', 'supply method', 'sale', 'processing'])]} {'invisible': ['|','&',('check_status', '!=', 'approved'),('state', 'in', ['draft','cancel','supply method']),'&',('check_status', '=', 'approved'),('state', 'in', ['sale','cancel','supply method'])]} From a05885936db495a7e03a3b9da71f761e3bc6e377 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Thu, 13 Feb 2025 14:26:01 +0800 Subject: [PATCH 02/27] =?UTF-8?q?=E5=88=80=E5=85=B7=E6=A0=87=E5=87=86?= =?UTF-8?q?=E5=BA=93=E5=8F=8A=E5=85=B3=E8=81=94=E6=A8=A1=E5=9E=8B=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=8E=A5=E5=8F=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_mrs_connect/models/sync_common.py | 55 ++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index 835183b3..9115bc65 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -1988,6 +1988,9 @@ class CuttingSpeed(models.Model): }) else: cutting_speed.write({ + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'execution_standard_id': self.env['sf.international.standards'].search( [('code', '=', item['execution_standard_code'])]).id, 'material_name_id': self.env['sf.materials.model'].search( @@ -2040,6 +2043,9 @@ class CuttingSpeed(models.Model): }) else: cutting_speed.write({ + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'execution_standard_id': self.env['sf.international.standards'].search( [('code', '=', item['execution_standard_code'])]).id, 'material_name_id': self.env['sf.materials.model'].search( @@ -2130,6 +2136,9 @@ class CuttingSpeed(models.Model): }) else: feed_per_tooth.write({ + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'materials_type_id': self.env['sf.materials.model'].search( [('materials_no', '=', item['materials_type_code'])]).id, 'cutting_width_depth_id': self.env['sf.cutting.width.depth'].search( @@ -2168,6 +2177,9 @@ class CuttingSpeed(models.Model): }) else: feed_per_tooth.write({ + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'materials_type_id': self.env['sf.materials.model'].search( [('materials_no', '=', item['materials_type_code'])]).id, 'cutting_width_depth_id': self.env['sf.cutting.width.depth'].search( @@ -2454,6 +2466,11 @@ class CuttingToolBasicParameters(models.Model): else: self.search([('code', '=', integral_tool_item['code'])]).write({ 'name': integral_tool_item['name'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [( + 'code', '=', + integral_tool_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'total_length': integral_tool_item['total_length'], 'blade_diameter': integral_tool_item['blade_diameter'], 'blade_length': integral_tool_item['blade_length'], @@ -2516,6 +2533,9 @@ class CuttingToolBasicParameters(models.Model): else: self.search([('code', '=', blade_item['code'])]).write({ 'name': blade_item['name'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', blade_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'length': blade_item['length'], 'thickness': blade_item['thickness'], 'cutting_blade_length': blade_item['cutting_blade_length'], @@ -2573,6 +2593,9 @@ class CuttingToolBasicParameters(models.Model): else: self.search([('code', '=', chuck_item['code'])]).write({ 'name': chuck_item['name'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', chuck_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'er_size_model': chuck_item['size_model'], 'min_clamping_diameter': chuck_item['clamping_diameter_min'], 'max_clamping_diameter': chuck_item['clamping_diameter_max'], @@ -2632,6 +2655,9 @@ class CuttingToolBasicParameters(models.Model): else: self.search([('code', '=', cutter_arbor_item['code'])]).write({ 'name': cutter_arbor_item['name'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_arbor_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'height': cutter_arbor_item['height'], 'width': cutter_arbor_item['width'], 'total_length': cutter_arbor_item['total_length'], @@ -2697,6 +2723,9 @@ class CuttingToolBasicParameters(models.Model): else: self.search([('code', '=', cutter_head_item['code'])]).write({ 'name': cutter_head_item['name'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_head_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'install_blade_tip_num': cutter_head_item['number_blade_installed'], 'blade_diameter': cutter_head_item['blade_diameter'], 'cutter_head_diameter': cutter_head_item['cutter_diameter'], @@ -2727,6 +2756,9 @@ class CuttingToolBasicParameters(models.Model): [('code', '=', knife_handle_item['code']), ('active', 'in', [True, False])]) val = { 'name': knife_handle_item['name'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', knife_handle_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'taper_shank_model': knife_handle_item['taper_shank_model'], 'total_length': knife_handle_item['total_length'], 'flange_shank_length': knife_handle_item['flange_length'], @@ -2751,9 +2783,6 @@ class CuttingToolBasicParameters(models.Model): if not knife_handle: val['code'] = knife_handle_item['code'] val['cutting_tool_type'] = '刀柄' - val['standard_library_id'] = self.env['sf.cutting_tool.standard.library'].search( - [('code', '=', knife_handle_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id self.create(val) else: self.search([('code', '=', knife_handle_item['code'])]).write(val) @@ -2809,6 +2838,11 @@ class CuttingToolBasicParameters(models.Model): else: integral_tool.write({ 'name': integral_tool_item['name'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [( + 'code', '=', + integral_tool_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'total_length': integral_tool_item['total_length'], 'blade_diameter': integral_tool_item['blade_diameter'], 'blade_length': integral_tool_item['blade_length'], @@ -2871,6 +2905,9 @@ class CuttingToolBasicParameters(models.Model): else: blade.write({ 'name': blade_item['name'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', blade_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'length': blade_item['length'], 'thickness': blade_item['thickness'], 'cutting_blade_length': blade_item['cutting_blade_length'], @@ -2928,6 +2965,9 @@ class CuttingToolBasicParameters(models.Model): else: chuck.write({ 'name': chuck_item['name'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', chuck_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'er_size_model': chuck_item['size_model'], 'min_clamping_diameter': chuck_item['clamping_diameter_min'], 'max_clamping_diameter': chuck_item['clamping_diameter_max'], @@ -2987,6 +3027,9 @@ class CuttingToolBasicParameters(models.Model): else: cutter_arbor.write({ 'name': cutter_arbor_item['name'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_arbor_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'height': cutter_arbor_item['height'], 'width': cutter_arbor_item['width'], 'total_length': cutter_arbor_item['total_length'], @@ -3053,6 +3096,9 @@ class CuttingToolBasicParameters(models.Model): else: cutter_head.write({ 'name': cutter_head_item['name'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_head_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'install_blade_tip_num': cutter_head_item['number_blade_installed'], 'blade_diameter': cutter_head_item['blade_diameter'], 'cutter_head_diameter': cutter_head_item['cutter_diameter'], @@ -3114,6 +3160,9 @@ class CuttingToolBasicParameters(models.Model): else: knife_handle.write({ 'name': knife_handle_item['name'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', knife_handle_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'total_length': knife_handle_item['total_length'], 'taper_shank_model': knife_handle_item['taper_shank_model'], 'flange_shank_length': knife_handle_item['flange_length'], From 3ac096e9a797ba5920a45e1a626021d01b894ffb Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Thu, 13 Feb 2025 17:41:18 +0800 Subject: [PATCH 03/27] =?UTF-8?q?=E5=8F=96=E6=B6=88=E6=8E=A5=E5=8D=95?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=BF=9B=E8=A1=8C=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/__manifest__.py | 1 + sf_manufacturing/models/sale_order.py | 17 +++ sf_manufacturing/security/ir.model.access.csv | 2 + sf_manufacturing/views/sale_order_views.xml | 10 ++ sf_manufacturing/wizard/__init__.py | 1 + sf_manufacturing/wizard/sale_order_cancel.py | 103 ++++++++++++++++++ .../wizard/sale_order_cancel_views.xml | 42 +++++++ 7 files changed, 176 insertions(+) create mode 100644 sf_manufacturing/wizard/sale_order_cancel.py create mode 100644 sf_manufacturing/wizard/sale_order_cancel_views.xml diff --git a/sf_manufacturing/__manifest__.py b/sf_manufacturing/__manifest__.py index e2ef6dbe..ba0c6751 100644 --- a/sf_manufacturing/__manifest__.py +++ b/sf_manufacturing/__manifest__.py @@ -27,6 +27,7 @@ 'wizard/production_technology_re_adjust_wizard_views.xml', 'wizard/mrp_workorder_batch_replan_wizard_views.xml', 'wizard/sf_programming_reason_views.xml', + 'wizard/sale_order_cancel_views.xml', 'views/mrp_views_menus.xml', 'views/agv_scheduling_views.xml', 'views/stock_lot_views.xml', diff --git a/sf_manufacturing/models/sale_order.py b/sf_manufacturing/models/sale_order.py index e31faf1c..1b94f07f 100644 --- a/sf_manufacturing/models/sale_order.py +++ b/sf_manufacturing/models/sale_order.py @@ -149,6 +149,23 @@ class SaleOrder(models.Model): product_bom_purchase.with_user(self.env.ref("base.user_admin")).bom_create_line_has( purchase_embryo) return super(SaleOrder, self).action_confirm() + + def action_show_cancel_wizard(self): + wizard = self.env['sf.sale.order.cancel.wizard'].create({ + 'order_id': self.id, + }) + + # 创建关联单据行 + self.env['sf.sale.order.cancel.line'].create_from_order(wizard.id, self) + + return { + 'name': '取消销售订单', + 'type': 'ir.actions.act_window', + 'res_model': 'sf.sale.order.cancel.wizard', + 'view_mode': 'form', + 'target': 'new', + 'res_id': wizard.id, + } class SaleOrderLine(models.Model): _inherit = 'sale.order.line' diff --git a/sf_manufacturing/security/ir.model.access.csv b/sf_manufacturing/security/ir.model.access.csv index e8c1882f..246cce63 100644 --- a/sf_manufacturing/security/ir.model.access.csv +++ b/sf_manufacturing/security/ir.model.access.csv @@ -192,3 +192,5 @@ access_sf_programming_reason,sf_programming_reason,model_sf_programming_reason,b access_sf_programming_record,sf_programming_record,model_sf_programming_record,base.group_user,1,1,1,0 access_sf_work_individuation_page,sf_work_individuation_page,model_sf_work_individuation_page,sf_base.group_sf_mrp_user,1,1,1,0 access_sf_work_individuation_page_group_plan_dispatch,sf_work_individuation_page_group_plan_dispatch,model_sf_work_individuation_page,sf_base.group_plan_dispatch,1,1,0,0 +access_sf_sale_order_cancel_wizard,sf_sale_order_cancel_wizard,model_sf_sale_order_cancel_wizard,sf_base.group_sf_order_user,1,1,1,0 +access_sf_sale_order_cancel_line,sf_sale_order_cancel_line,model_sf_sale_order_cancel_line,sf_base.group_sf_order_user,1,1,1,0 \ No newline at end of file diff --git a/sf_manufacturing/views/sale_order_views.xml b/sf_manufacturing/views/sale_order_views.xml index aa5bfaa0..e17c1546 100644 --- a/sf_manufacturing/views/sale_order_views.xml +++ b/sf_manufacturing/views/sale_order_views.xml @@ -27,10 +27,20 @@ {'invisible': [('state', 'not in', ['draft', 'supply method', 'sale', 'processing'])]} + 警告:取消操作将不可逆,是否确定要取消该单据? {'invisible': ['|','&',('check_status', '!=', 'approved'),('state', 'in', ['draft','cancel','supply method']),'&',('check_status', '=', 'approved'),('state', 'in', ['sale','cancel','supply method'])]} + + + + diff --git a/sf_sale/views/purchase_requisition_view.xml b/sf_sale/views/purchase_requisition_view.xml new file mode 100644 index 00000000..e96e5c31 --- /dev/null +++ b/sf_sale/views/purchase_requisition_view.xml @@ -0,0 +1,75 @@ + + + + + purchase.requisition.form.inherit.sf + purchase.requisition + + + + + - diff --git a/sf_sale/views/purchase_requisition_view.xml b/sf_sale/views/purchase_requisition_view.xml deleted file mode 100644 index e96e5c31..00000000 --- a/sf_sale/views/purchase_requisition_view.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - purchase.requisition.form.inherit.sf - purchase.requisition - - - - -