From b2bb2e33deffb82fcffc1de880f3e8e1460ac496 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Thu, 28 Dec 2023 17:06:34 +0800 Subject: [PATCH 1/6] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E5=A4=B9?= =?UTF-8?q?=E5=85=B7=E7=89=A9=E6=96=99=E5=9F=BA=E6=9C=AC=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=EF=BC=8C=E9=87=8D=E6=9E=84=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E7=9A=84=E5=A4=B9=E5=85=B7=E5=9E=8B=E5=8F=B7=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=EF=BC=8C=E9=87=8D=E6=96=B0=E4=BC=98=E5=8C=96=E5=A4=B9=E5=85=B7?= =?UTF-8?q?=E7=89=A9=E6=96=99form=E8=A7=86=E5=9B=BE=EF=BC=9B2=E3=80=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=88=80=E5=85=B7=E6=A0=87=E5=87=86=E5=BA=93?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=EF=BC=8C=E4=BC=98=E5=8C=96=E5=88=87=E5=89=8A?= =?UTF-8?q?=E9=80=9F=E5=BA=A6=E6=A8=A1=E5=9E=8B=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=AF=8F=E9=BD=BF=E8=B5=B0=E5=88=80=E9=87=8F=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=88=87=E5=89=8A=E5=AE=BD=E5=BA=A6?= =?UTF-8?q?=E5=92=8C=E6=B7=B1=E5=BA=A6=E6=A8=A1=E5=9E=8B=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=9D=A1=E9=93=A3=E8=A7=92=E5=BA=A6=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=EF=BC=9B3=E3=80=81=E4=BC=98=E5=8C=96=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=88=80=E5=85=B7=E5=AE=89=E5=85=A8=E5=BA=93=E5=AD=98=E6=9C=80?= =?UTF-8?q?=E4=BD=8E=E5=AE=89=E5=85=A8=E5=BA=93=E5=AD=98=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E9=AB=98=E4=BA=8E=E6=9C=80=E9=AB=98=E5=BA=93=E5=AD=98=E7=9A=84?= =?UTF-8?q?bug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/__init__.py | 1 + sf_base/models/basic_parameters_fixture.py | 68 ++++++ sf_base/models/fixture.py | 59 +++-- sf_base/models/tool_base_new.py | 13 +- sf_base/models/tool_other_features.py | 52 +++- sf_base/security/ir.model.access.csv | 5 + sf_base/views/fixture_view.xml | 272 +++++++++++++++------ sf_base/views/tool_views.xml | 112 ++++----- sf_tool_management/models/base.py | 7 +- 9 files changed, 412 insertions(+), 177 deletions(-) create mode 100644 sf_base/models/basic_parameters_fixture.py diff --git a/sf_base/models/__init__.py b/sf_base/models/__init__.py index 31dfcf95..f7d50427 100644 --- a/sf_base/models/__init__.py +++ b/sf_base/models/__init__.py @@ -4,3 +4,4 @@ from . import tool_base_new from . import fixture from . import functional_fixture from . import tool_other_features +from . import basic_parameters_fixture diff --git a/sf_base/models/basic_parameters_fixture.py b/sf_base/models/basic_parameters_fixture.py new file mode 100644 index 00000000..0dfb4b6d --- /dev/null +++ b/sf_base/models/basic_parameters_fixture.py @@ -0,0 +1,68 @@ +from odoo import models, fields + + +class BasicParametersFixture(models.Model): + _name = 'sf.fixture.materials.basic.parameters' + _description = '夹具物料基本参数' + + fixture_model_id = fields.Many2one('sf.fixture.model', '夹具型号') + name = fields.Char('物料号', size=20) + length = fields.Float('长度(mm)', digits=(16, 2)) + width = fields.Float('宽度(mm)', digits=(16, 2)) + height = fields.Float('高度(mm)', digits=(16, 2)) + diameter = fields.Float('直径(mm)', digits=(16, 2)) + + # '零点卡盘' 字段 + weight = fields.Float('重量(mm)', digits=(16, 2)) + orientation_dish_diameter = fields.Float('定位盘直径(mm)', digits=(16, 2)) + clamping_diameter = fields.Float('装夹直径(mm)', digits=(16, 2)) + clamping_num = fields.Selection([('1', '1'), ('2', '2'), ('4', '4'), ('6', '6'), ('8', '8')], string='夹装单元数') + chucking_power_max = fields.Float('最大夹持力(KN)', digits=(16, 2)) + repeated_positioning_accuracy = fields.Char('重复定位精度(mm)', size=20) + boolean_transposing_hole = fields.Boolean('是否有转位孔') + unlocking_method = fields.Selection( + [('手动', '手动'), ('气动', '气动'), ('液压', '液压'), ('电动', '电动'), ('其他', '其他')], string='解锁方式') + boolean_chip_blowing_function = fields.Boolean('是否有吹屑功能') + carrying_capacity_max = fields.Float('最大承载重量(kg)', digits=(16, 2)) + rigidity = fields.Integer('硬度HRC') + materials_model_id = fields.Many2one('sf.materials.model', '夹具材质') + machine_tool_type_id = fields.Many2one('sf.machine_tool.type', '适用机床型号') + + # ’零点托盘‘ 字段 + connector_diameter = fields.Selection([('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'), ('8', '8')], + string='连接头直径(mm)') + way_to_install = fields.Selection( + [('接口式', '接口式'), ('螺栓固定', '螺栓固定'), ('磁吸式', '磁吸式'), ('其他', '其他')], string='安装方式') + type_of_drive = fields.Selection( + [('气动式', '气动式'), ('液压式', '液压式'), ('机械式', '机械式'), ('电动式', '电动式'), ('其他', '其他')], + string='驱动方式') + + # ’气动夹具‘ 字段 + gripper_length_min = fields.Float('夹持工件最小长度(mm)', digits=(16, 2)) + gripper_width_min = fields.Float('夹持工件最小宽度(mm)', digits=(16, 2)) + gripper_height_min = fields.Float('夹持工件最小高度(mm)', digits=(16, 2)) + gripper_diameter_min = fields.Float('夹持工件最小直径(mm)', digits=(16, 2)) + gripper_length_max = fields.Float('夹持工件最大长度(mm)', digits=(16, 2)) + gripper_width_max = fields.Float('夹持工件最大宽度(mm)', digits=(16, 2)) + gripper_height_max = fields.Float('夹持工件最大高度(mm)', digits=(16, 2)) + gripper_diameter_max = fields.Float('夹持工件最大直径(mm)', digits=(16, 2)) + rated_air_pressure = fields.Float('额定气压(Mpa)', digits=(16, 2)) + interface_materials_model_id = fields.Many2one('sf.materials.model', '接口类型') + + # ‘虎钳夹具' 字段 + transverse_groove = fields.Float('横向配合槽n(mm)', digits=(16, 2)) + longitudinal_fitting_groove = fields.Float('纵向配合槽l(mm)', digits=(16, 2)) + + # '磁吸夹具' 字段 + height_tolerance_value = fields.Char('高度公差(mm)') + rated_adsorption_force = fields.Float('额定吸附力(N/cm²)', digits=(16, 2)) + magnetic_field_height = fields.Float('磁场高度(mm)', digits=(16, 2)) + magnetic_pole_plate_grinding_allowance = fields.Float('磁极板磨削余量(mm)', digits=(16, 2)) + + # '转接板夹具' 字段 + screw_size = fields.Float('螺牙大小(mm)', digits=(16, 2)) + via_hole_diameter = fields.Float('过孔直径(mm)', digits=(16, 2)) + + # '三爪卡盘' 字段 + mounting_hole_depth = fields.Float('安装孔深度(mm)', digits=(16, 2)) + centering_diameter = fields.Float('定心直径(mm)', digits=(16, 2)) \ No newline at end of file diff --git a/sf_base/models/fixture.py b/sf_base/models/fixture.py index f7cb5fa8..91aec75e 100644 --- a/sf_base/models/fixture.py +++ b/sf_base/models/fixture.py @@ -26,33 +26,28 @@ class FixtureModel(models.Model): _name = 'sf.fixture.model' _description = "夹具型号" - name = fields.Char(string="名称", size=15) - fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料", ) - fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name', store=True) - multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型") - brand_id = fields.Many2one('sf.machine.brand', string="品牌", domain="[('tag_ids.name', 'ilike', '夹具')]") - clamping_way = fields.Char(string="装夹方式") - port_type = fields.Char(string="接口类型") + name = fields.Char(string="名称", size=50, required=True) + fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料", required=True) + fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name') + multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型", required=True) + brand_id = fields.Many2one('sf.machine.brand', string="品牌") model_file = fields.Binary(string="3D模型图") + active = fields.Boolean('有效', default=False) - length = fields.Char(string="长度(mm)") - width = fields.Char(string="宽度(mm)") - height = fields.Char(string="高度(mm)") - weight = fields.Char(string="重量(kg)") - clamp_workpiece_length_max = fields.Integer(string="夹持工件长度max(mm)") - clamp_workpiece_width_max = fields.Integer(string="夹持工件宽度max(mm)") - clamp_workpiece_height_max = fields.Integer(string="夹持工件高度max(mm)") - clamp_workpiece_diameter_max = fields.Float(string="夹持工件直径max(mm)") - maximum_carrying_weight = fields.Float(string="最大承载重量(kg)") - maximum_clamping_force = fields.Integer(string="最大夹持力(n)") - - materials_model_id = fields.Many2one('sf.materials.model', string="材料型号") - driving_way = fields.Selection([('气动', '气动'), ('液压', '液压'), ('机械', '机械')], string="驱动方式") - apply_machine_tool_type_ids = fields.Many2many('sf.machine_tool.type', 'rel_fixture_model_machine_tool_type', - string="适用机床型号") - through_hole_size = fields.Integer(string="过孔大小[mm]") - screw_size = fields.Integer(string="螺牙大小[mm]") - active = fields.Boolean('有效', default=True) + zero_chuck_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', + string='零点卡盘基本参数') + zero_tray_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', + string='零点托盘基本参数') + pneumatic_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', + string='气动夹具基本参数') + jaw_vice_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', + string='虎钳夹具基本参数') + magnet_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', + string='磁吸夹具基本参数') + adapter_board_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', + string='转接板夹具基本参数') + scroll_chuck_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', + string='三爪卡盘基本参数') def _get_code(self, fixture_model_type_code): fixture_model = self.env['sf.fixture.model'].sudo().search( @@ -70,14 +65,18 @@ class FixtureModel(models.Model): def _onchange_fixture_material_id(self, fixture_material_id): if fixture_material_id: - if fixture_material_id.name == "气动夹具": + if self.fixture_material_id.name == "气动夹具": code = self._get_code("JKM-C-JJWL-QDJJ-") - elif fixture_material_id.name == "转接板(锁板)夹具": - code = self._get_code("JKM-C-JJWL-ZJBJJ-") - elif fixture_material_id.name == "磁吸夹具": + elif self.fixture_material_id.name == "转接板夹具": + code = self._get_code("JKM-C-JJWL-ZJJJ-") + elif self.fixture_material_id.name == "磁吸夹具": code = self._get_code("JKM-C-JJWL-CXJJ-") - elif fixture_material_id.name == "虎钳夹具": + elif self.fixture_material_id.name == "虎钳夹具": code = self._get_code("JKM-C-JJWL-HQJJ-") + elif self.fixture_material_id.name == "零点托盘": + code = self._get_code("JKM-C-JJWL-LDTP-") + elif self.fixture_material_id.name == "三爪卡盘": + code = self._get_code("JKM-C-JJWL-SZKP-") else: code = self._get_code("JKM-C-JJWL-LDKP-") return code diff --git a/sf_base/models/tool_base_new.py b/sf_base/models/tool_base_new.py index e8769b80..4dc6b619 100644 --- a/sf_base/models/tool_base_new.py +++ b/sf_base/models/tool_base_new.py @@ -75,6 +75,8 @@ class CuttingToolModel(models.Model): integral_coarse_medium_fine = fields.Selection([('粗', '粗'), ('中', '中'), ('精', '精')], '粗/中/精') integral_run_out_accuracy_max = fields.Char('整体式刀具端跳精度max') integral_run_out_accuracy_min = fields.Char('整体式刀具端跳精度min') + ramping_angle_ids = fields.One2many('sf.ramping.angle', 'standard_library_id', '坡铣角度', + domain=lambda self: [('standard_library_id', '=', self.id)]) fit_blade_shape_id = fields.Many2one('maintenance.equipment.image', '适配刀片形状', domain=[('type', '=', '刀片形状')]) @@ -106,12 +108,9 @@ class CuttingToolModel(models.Model): cutting_speed_ids = fields.One2many('sf.cutting.speed', 'standard_library_id', string='切削速度Vc') feed_per_tooth_ids = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz', domain=[('cutting_speed', '!=', False)]) - feed_per_tooth_ids_2 = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz', - domain=[('machining_method', '!=', False)]) feed_per_tooth_ids_3 = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz', domain=[('cutting_speed', '!=', False)]) - feed_per_tooth_ids_4 = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz', - domain=[('machining_method', '!=', False)]) + material_model_id = fields.Many2one('sf.materials.model', '材料型号') # 适用夹头型号可以多选 chuck_ids = fields.Many2many( @@ -157,6 +156,12 @@ class CuttingToolModel(models.Model): active = fields.Boolean('有效', default=True) is_cloud = fields.Boolean('云端数据', default=False) + # 无用字段 + feed_per_tooth_ids_2 = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz', + domain=[('machining_method', '!=', False)]) + feed_per_tooth_ids_4 = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz', + domain=[('machining_method', '!=', False)]) + def _get_ids(self, cutting_tool_type_code, factory_short_name): cutting_tool_type_ids = [] for item in cutting_tool_type_code: diff --git a/sf_base/models/tool_other_features.py b/sf_base/models/tool_other_features.py index acbb569d..63ea66e7 100644 --- a/sf_base/models/tool_other_features.py +++ b/sf_base/models/tool_other_features.py @@ -293,14 +293,28 @@ class CuttingSpeed(models.Model): product_template_id = fields.Many2one('product.template') standard_library_id = fields.Many2one('sf.cutting_tool.standard.library', string='标准库') + execution_standard_id = fields.Many2one('sf.international.standards', string='执行标准', store=True) material_code = fields.Char('材料代号') + material_name_id = fields.Many2one('sf.materials.model', '材料名称', + domain="[('standards_id', '=', execution_standard_id)]") + material_grade = fields.Char('材料牌号') + tensile_strength = fields.Char('拉伸强度 (N/mm²)') + hardness = fields.Integer('硬度(hrc)') + ability_feature_library = fields.Many2one('maintenance.equipment.image', '加工方式', + domain="[('type', '=', '加工能力')]") + cutting_width_depth_id = fields.Many2one('sf.cutting.width.depth', '切削宽度和深度') + process_capability = fields.Selection([('粗加工', '粗加工'), ('精加工', '精加工')], string='粗/精加工') + cutting_speed = fields.Char('切削速度', required=True) + cutting_speed_max = fields.Float('最大值') + cutting_speed_min = fields.Float('最小值') + + application = fields.Selection([('主应用', '主应用'), ('次应用', '次应用')], '主/次应用') + + # ===============待删除字段============== material_id = fields.Many2one('sf.materials.model', '材料名称', domain="[('standards_id', '=', execution_standard_id)]") slope_milling_angle = fields.Integer('坡铣角度(°)') - material_grade = fields.Char('材料牌号') - tensile_strength = fields.Char('拉伸强度 (N/mm²)') - hardness = fields.Integer('硬度(HRC)') cutting_speed_n1 = fields.Char('径向切宽 ae=100%D1 ap=1*D1 切削速度Vc') cutting_speed_n2 = fields.Char('径向切宽 ae=50%D1 ap=1.5*D1 切削速度Vc') cutting_speed_n3 = fields.Char('径向切宽 ae=25%D1 ap=L1max 切削速度Vc') @@ -308,7 +322,8 @@ class CuttingSpeed(models.Model): cutting_speed_n5 = fields.Char('径向切宽 ae=5%D1 ap=L1max 切削速度Vc') rough_machining = fields.Char('粗加工 Vc(m/min)') precision_machining = fields.Char('精加工 Vc(m/min)') - application = fields.Selection([('主应用', '主应用'), ('次应用', '次应用')], '主/次应用') + + # ====================================== def _json_cutting_speed(self, obj): cutting_speed_str = (0, '', { @@ -334,15 +349,20 @@ class CuttingSpeed(models.Model): class FeedPerTooth(models.Model): _name = 'sf.feed.per.tooth' _description = '每齿走刀量fz' - _order = 'machining_method desc, blade_diameter, materials_type_id' + _order = 'blade_diameter,cutting_width_depth_id,materials_type_id' product_template_id = fields.Many2one('product.template') standard_library_id = fields.Many2one('sf.cutting_tool.standard.library', string='标准库') + blade_diameter = fields.Integer('刃部直径(mm)', readonly=True) + materials_type_id = fields.Many2one('sf.materials.model', string='材料名称', readonly=True) + cutting_width_depth_id = fields.Many2one('sf.cutting.width.depth', '切削宽度和深度', readonly=True) + feed_per_tooth = fields.Char('每齿走刀量 (mm/z)', size=20) + + # =============待删除字段=========== cutting_speed = fields.Char('径向切宽 ae(mm)') machining_method = fields.Selection([('直铣', '直铣'), ('坡铣', '坡铣')], string='加工方式') - materials_type_id = fields.Many2one('sf.materials.model', string='材料型号') - blade_diameter = fields.Integer('刃部直径(mm)', readonly=True) - feed_per_tooth = fields.Char('每齿走刀量 (mm/z)') + + # ================================ def _json_feed_per_tooth(self, obj): feed_per_tooth_str = (0, '', { @@ -382,3 +402,19 @@ class FeedPerTooth(models.Model): # def _compute_product_template_id(self): # if self.product_template_id is not None: # self.blade_diameter = self.product_template_id.cutting_tool_blade_diameter + + +class CuttingWidthDepth(models.Model): + _name = 'sf.cutting.width.depth' + _description = '切削宽度和深度' + + name = fields.Char('名称') + + +class RampingAngle(models.Model): + _name = 'sf.ramping.angle' + _description = '坡铣角度' + + standard_library_id = fields.Many2one('sf.cutting_tool.standard.library', '刀具标准库') + + name = fields.Char('坡铣角度') diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv index 1767871b..77c3e810 100644 --- a/sf_base/security/ir.model.access.csv +++ b/sf_base/security/ir.model.access.csv @@ -18,6 +18,8 @@ access_sf_cutting_tool_type,sf_cutting_tool_type,model_sf_cutting_tool_type,base access_sf_functional_cutting_tool,sf_functional_cutting_tool,model_sf_functional_cutting_tool,base.group_user,1,1,1,1 access_sf_functional_cutting_tool_model,sf_functional_cutting_tool_model,model_sf_functional_cutting_tool_model,base.group_user,1,1,1,1 access_sf_fixture_material,sf_fixture_material,model_sf_fixture_material,base.group_user,1,1,1,1 +access_sf_fixture_materials_basic_parameters,sf_fixture_materials_basic_parameters,model_sf_fixture_materials_basic_parameters,base.group_user,1,1,1,1 + access_sf_multi_mounting_type,sf_multi_mounting_type,model_sf_multi_mounting_type,base.group_user,1,1,1,1 access_sf_fixture_model,sf_fixture_model,model_sf_fixture_model,base.group_user,1,1,1,1 access_sf_functional_fixture_type,sf_functional_fixture_type,model_sf_functional_fixture_type,base.group_user,1,1,1,1 @@ -29,6 +31,9 @@ access_sf_cutting_tool_standard_library,sf_cutting_tool_standard_library,model_s access_sf_tool_materials_basic_parameters,sf_tool_materials_basic_parameters,model_sf_tool_materials_basic_parameters,base.group_user,1,1,1,1 access_sf_cutting_speed,sf_cutting_speed,model_sf_cutting_speed,base.group_user,1,1,1,1 access_sf_feed_per_tooth,sf_feed_per_tooth,model_sf_feed_per_tooth,base.group_user,1,1,1,1 +access_sf_ramping_angle,sf_ramping_angle,model_sf_ramping_angle,base.group_user,1,1,1,1 +access_sf_cutting_width_depth,sf_cutting_width_depth,model_sf_cutting_width_depth,base.group_user,1,1,1,1 + access_maintenance_equipment_image,maintenance_equipment_image,model_maintenance_equipment_image,base.group_user,1,1,1,1 access_purchase_order_group_purchase,access_purchase_order_group_purchase,purchase.model_purchase_order,sf_base.group_purchase,1,1,1,0 access_purchase_order_group_purchase_director,access_purchase_order_group_purchase_director,purchase.model_purchase_order,sf_base.group_purchase_director,1,1,1,0 diff --git a/sf_base/views/fixture_view.xml b/sf_base/views/fixture_view.xml index 487899eb..15f43fb1 100644 --- a/sf_base/views/fixture_view.xml +++ b/sf_base/views/fixture_view.xml @@ -151,9 +151,9 @@ context="{'group_by' : 'multi_mounting_type_id'}"/> - - + + @@ -163,12 +163,17 @@ 夹具型号 sf.fixture.model - + - + + + + + + @@ -181,15 +186,19 @@

- +

- - + + - + + + @@ -198,67 +207,192 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/sf_base/views/tool_views.xml b/sf_base/views/tool_views.xml index b2994cca..f189017d 100644 --- a/sf_base/views/tool_views.xml +++ b/sf_base/views/tool_views.xml @@ -149,6 +149,8 @@ options="{'format': false}"/> (mm)&nbsp; + @@ -274,7 +276,7 @@ - + @@ -304,7 +306,7 @@ - + @@ -328,11 +330,11 @@ - - - - - + + + + + @@ -364,23 +366,21 @@ - + - + - - - - - - - - + + + + + @@ -389,33 +389,18 @@ - - - - - - - - + - + - - - - - - - + - + @@ -508,34 +493,31 @@ [] - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 37c534da..bc487f46 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -296,6 +296,12 @@ class RealTimeDistributionOfFunctionalTools(models.Model): sf_functional_tool_assembly_ids = fields.Many2many('sf.functional.tool.assembly', 'sf_functional_tool_assembly_ref', '功能刀具组装单', readonly=True) + @api.constrains('min_stock_num', 'max_stock_num') + def _check_stock_num(self): + for obj in self: + if obj.min_stock_num > obj.min_stock_num: + raise ValidationError('【最低安全库存】不能高于【最高安全库存】!!!') + @api.model def _read_mrs_cutting_tool_type_ids(self, categories, domain, order): mrs_cutting_tool_type_ids = categories._search([], order=order, access_rights_uid=SUPERUSER_ID) @@ -327,7 +333,6 @@ class RealTimeDistributionOfFunctionalTools(models.Model): else: tool.batch_replenishment_num = 0 - def create_functional_tool_assembly(self): """ 创建功能刀具组装单 From e9987fdcfa85fccc2d308d32567ba9f224e0d13f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E7=84=B1?= Date: Thu, 28 Dec 2023 17:44:51 +0800 Subject: [PATCH 2/6] =?UTF-8?q?//=20=E5=8A=A0=E5=B7=A5=E8=83=BD=E5=8A=9B\?= =?UTF-8?q?=E5=86=B7=E5=8D=B4=E6=96=B9=E5=BC=8F=20=E7=AB=96=E5=88=97?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E6=94=B9=E4=B8=BA=E6=A8=AA=E5=88=97=E5=B1=95?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jikimo_frontend/static/src/scss/custom_style.scss | 11 +++++++++++ sf_maintenance/views/maintenance_views.xml | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/jikimo_frontend/static/src/scss/custom_style.scss b/jikimo_frontend/static/src/scss/custom_style.scss index 766cca31..5d660025 100644 --- a/jikimo_frontend/static/src/scss/custom_style.scss +++ b/jikimo_frontend/static/src/scss/custom_style.scss @@ -400,4 +400,15 @@ div:has(.o_required_modifier) > label::before { // 机床换刀申请表格宽度设置 .o_list_table_ungrouped { min-width: 1089px; +} +// 加工能力\冷却方式 竖列展示改为横列展示 +.processingMethod { + .o_cell.flex-grow-1.flex-sm-grow-0 { + width: 100%!important; + } +} +@media (min-width: 576px) { + .o_inner_group.processingMethod { + grid-template-columns: auto; + } } \ No newline at end of file diff --git a/sf_maintenance/views/maintenance_views.xml b/sf_maintenance/views/maintenance_views.xml index ccf333ba..5faa4a9c 100644 --- a/sf_maintenance/views/maintenance_views.xml +++ b/sf_maintenance/views/maintenance_views.xml @@ -912,7 +912,7 @@ - +
@@ -924,7 +924,7 @@
- +
From 4ab7e4db0fcdfccfbd4ab3f0400bb076f9690048 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Fri, 29 Dec 2023 14:17:32 +0800 Subject: [PATCH 3/6] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/models/base.py | 2 +- sf_tool_management/views/tool_base_views.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index bc487f46..e1d1010b 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -678,7 +678,7 @@ class FunctionalToolAssembly(models.Model): knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', readonly=True) coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=True) new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True) - tool_loading_length = fields.Float(strin='总长度(mm)', readonly=True) + tool_loading_length = fields.Float(string='总长度(mm)', readonly=True) functional_tool_length = fields.Float(string='伸出长(mm)', readonly=True) effective_length = fields.Float(string='有效长(mm)', readonly=True) loading_task_source = fields.Selection([('0', 'CAM装刀'), ('1', '机台换刀'), ('2', '按库存组装')], diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 01779a2d..86c42c92 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -1099,7 +1099,7 @@ - + From 73c3e06900129236d88d6919d3598379fd11838a Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Tue, 2 Jan 2024 17:25:49 +0800 Subject: [PATCH 4/6] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E6=89=80?= =?UTF-8?q?=E4=BB=A5=E5=A4=B9=E5=85=B7=E7=89=A9=E6=96=99=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=BD=AC=E6=8E=A5=E6=9D=BF=E5=A4=B9=E5=85=B7=E4=B8=BA=E8=BD=AC?= =?UTF-8?q?=E6=8E=A5=E6=9D=BF(=E9=94=81=E6=9D=BF)=E5=A4=B9=E5=85=B7?= =?UTF-8?q?=EF=BC=9B2=E3=80=81=E4=BC=98=E5=8C=96=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=88=80=E5=85=B7=E5=AE=89=E5=85=A8=E5=BA=93=E5=AD=98=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=E7=94=9F=E6=88=90=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7?= =?UTF-8?q?=E7=BB=84=E8=A3=85=E5=8D=95=E6=97=B6=E9=87=8D=E5=A4=8D=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B3=E3=80=81?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E5=BA=93=E5=AD=98=E6=A8=A1=E5=9E=8B=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=8F=AA=E6=9C=89=E5=9C=A8=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=E5=8F=AF=E4=BB=A5=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=8C=E5=85=B6=E4=BB=96=E6=97=B6=E5=80=99=E6=98=AF=E5=8F=AA?= =?UTF-8?q?=E8=AF=BB=EF=BC=9B4=E3=80=81=E4=BC=98=E5=8C=96=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85=E5=8D=95=E7=BB=84?= =?UTF-8?q?=E8=A3=85=E5=AE=8C=E6=88=90=E5=90=8E=E5=8A=9F=E8=83=BD=E5=88=80?= =?UTF-8?q?=E5=85=B7=E5=85=A5=E5=BA=93=E4=BD=8D=E7=BD=AE=E4=B8=8D=E6=98=AF?= =?UTF-8?q?=E5=88=80=E5=85=B7=E6=88=BF=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/basic_parameters_fixture.py | 2 +- sf_base/models/fixture.py | 4 +- sf_base/views/fixture_view.xml | 2 +- sf_tool_management/models/base.py | 50 ++++++++++++-------- sf_tool_management/views/tool_base_views.xml | 27 +++++++---- sf_tool_management/wizard/wizard.py | 2 + 6 files changed, 53 insertions(+), 34 deletions(-) diff --git a/sf_base/models/basic_parameters_fixture.py b/sf_base/models/basic_parameters_fixture.py index 0dfb4b6d..57d55bde 100644 --- a/sf_base/models/basic_parameters_fixture.py +++ b/sf_base/models/basic_parameters_fixture.py @@ -59,7 +59,7 @@ class BasicParametersFixture(models.Model): magnetic_field_height = fields.Float('磁场高度(mm)', digits=(16, 2)) magnetic_pole_plate_grinding_allowance = fields.Float('磁极板磨削余量(mm)', digits=(16, 2)) - # '转接板夹具' 字段 + # '转接板(锁板)夹具' 字段 screw_size = fields.Float('螺牙大小(mm)', digits=(16, 2)) via_hole_diameter = fields.Float('过孔直径(mm)', digits=(16, 2)) diff --git a/sf_base/models/fixture.py b/sf_base/models/fixture.py index 91aec75e..d6455550 100644 --- a/sf_base/models/fixture.py +++ b/sf_base/models/fixture.py @@ -45,7 +45,7 @@ class FixtureModel(models.Model): magnet_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='磁吸夹具基本参数') adapter_board_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', - string='转接板夹具基本参数') + string='转接板(锁板)夹具基本参数') scroll_chuck_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='三爪卡盘基本参数') @@ -67,7 +67,7 @@ class FixtureModel(models.Model): if fixture_material_id: if self.fixture_material_id.name == "气动夹具": code = self._get_code("JKM-C-JJWL-QDJJ-") - elif self.fixture_material_id.name == "转接板夹具": + elif self.fixture_material_id.name == "转接板(锁板)夹具": code = self._get_code("JKM-C-JJWL-ZJJJ-") elif self.fixture_material_id.name == "磁吸夹具": code = self._get_code("JKM-C-JJWL-CXJJ-") diff --git a/sf_base/views/fixture_view.xml b/sf_base/views/fixture_view.xml index 15f43fb1..0a7d1e8e 100644 --- a/sf_base/views/fixture_view.xml +++ b/sf_base/views/fixture_view.xml @@ -341,7 +341,7 @@ + attrs="{'invisible': [('fixture_material_type', '!=', '转接板(锁板)夹具')]}"> diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index e1d1010b..9f5721a5 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- +import re from datetime import timedelta - from odoo import fields, models, api from odoo import SUPERUSER_ID from odoo.exceptions import ValidationError @@ -234,6 +234,7 @@ class FunctionalToolWarning(models.Model): class StockMoveLine(models.Model): _inherit = 'stock.move.line' _description = '功能刀具出入库记录' + _order = 'install_tool_time desc' functional_tool_name_id = fields.Many2one('sf.functional.tool.assembly', string='功能刀具名称') functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', store=True, @@ -253,11 +254,11 @@ class RealTimeDistributionOfFunctionalTools(models.Model): _name = 'sf.real.time.distribution.of.functional.tools' _description = '功能刀具安全库存' - name = fields.Char('功能刀具名称') - sf_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', + name = fields.Char('功能刀具名称', readonly=False) + sf_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=False, group_expand='_read_mrs_cutting_tool_type_ids', store=True) - diameter = fields.Integer(string='刀具直径(mm)') - knife_tip_r_angle = fields.Float(string='刀尖R角(mm)') + diameter = fields.Integer(string='刀具直径(mm)', readonly=False) + knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', readonly=False) tool_stock_num = fields.Integer(string='刀具房数量') side_shelf_num = fields.Integer(string='线边刀库数量') on_tool_stock_num = fields.Integer(string='机内刀库数量') @@ -266,10 +267,10 @@ class RealTimeDistributionOfFunctionalTools(models.Model): max_stock_num = fields.Integer('最高库存量') batch_replenishment_num = fields.Integer('批次补货量', readonly=True, compute='_compute_batch_replenishment_num') unit = fields.Char('单位') - image = fields.Binary('图片') + image = fields.Binary('图片', readonly=False) - coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精') - whether_standard_knife = fields.Boolean(string='是否标准刀', default=True) + coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=False) + whether_standard_knife = fields.Boolean(string='是否标准刀', default=True, readonly=False) # 能力特征信息 suitable_machining_method_ids = fields.Many2many( 'maintenance.equipment.image', 'rel_machining_product_template_distribution', '适合加工方式', @@ -299,7 +300,7 @@ class RealTimeDistributionOfFunctionalTools(models.Model): @api.constrains('min_stock_num', 'max_stock_num') def _check_stock_num(self): for obj in self: - if obj.min_stock_num > obj.min_stock_num: + if obj.min_stock_num > obj.max_stock_num: raise ValidationError('【最低安全库存】不能高于【最高安全库存】!!!') @api.model @@ -326,31 +327,31 @@ class RealTimeDistributionOfFunctionalTools(models.Model): if tool.tool_stock_total < tool.min_stock_num: tool.batch_replenishment_num = tool.max_stock_num - tool.tool_stock_total # 根据判断创建功能刀具组装单 - if not tool.sf_functional_tool_assembly_ids: + if not tool.sf_functional_tool_assembly_ids and re.match(r'^\d+$', str(tool.id)): for i in range(tool.batch_replenishment_num): - tool.create_functional_tool_assembly() + tool.create_functional_tool_assembly(tool) print(i, ": ", tool.sf_functional_tool_assembly_ids) else: tool.batch_replenishment_num = 0 - def create_functional_tool_assembly(self): + def create_functional_tool_assembly(self, tool): """ 创建功能刀具组装单 """ - functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().create({ - 'functional_tool_name': self.name, - 'functional_tool_type_id': self.sf_cutting_tool_type_id.id, - 'functional_tool_diameter': self.diameter, - 'knife_tip_r_angle': self.knife_tip_r_angle, - 'coarse_middle_thin': self.coarse_middle_thin, + functional_tool_assembly = tool.env['sf.functional.tool.assembly'].sudo().create({ + 'functional_tool_name': tool.name, + 'functional_tool_type_id': tool.sf_cutting_tool_type_id.id, + 'functional_tool_diameter': tool.diameter, + 'knife_tip_r_angle': tool.knife_tip_r_angle, + 'coarse_middle_thin': tool.coarse_middle_thin, 'loading_task_source': '2', 'use_tool_time': fields.Datetime.now() + timedelta(hours=4), 'applicant': '系统自动', 'apply_time': fields.Datetime.now(), - 'whether_standard_knife': self.whether_standard_knife, + 'whether_standard_knife': tool.whether_standard_knife, 'reason_for_applying': '安全库存', }) - self.sf_functional_tool_assembly_ids = [(4, functional_tool_assembly.id)] + tool.sf_functional_tool_assembly_ids = [(4, functional_tool_assembly.id)] def estimate_functional_tool_assembly_ids(self, tool): """ @@ -394,6 +395,15 @@ class RealTimeDistributionOfFunctionalTools(models.Model): vals['sf_functional_cutting_tool_entity_ids'] = sf_functional_cutting_tool_entity_ids.ids self.env['sf.real.time.distribution.of.functional.tools'].create(vals) + status_create = fields.Boolean('是否是新增状态', default=True) + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + vals['status_create'] = False + records = super(RealTimeDistributionOfFunctionalTools, self).create(vals_list) + return records + class MachineTableToolChangingApply(models.Model): _name = 'sf.machine.table.tool.changing.apply' diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 86c42c92..42bb103b 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -310,22 +310,29 @@

- +

+ - - - - - + + + + + - + @@ -366,7 +373,7 @@ - + @@ -1162,7 +1169,7 @@ - + @@ -1173,7 +1180,7 @@ ir.actions.act_window sf.functional.tool.assembly tree,form,search - + {'search_default_no_assemble_status':1} diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index 89b9f854..f98da62e 100644 --- a/sf_tool_management/wizard/wizard.py +++ b/sf_tool_management/wizard/wizard.py @@ -537,6 +537,8 @@ class StockPicking(models.Model): self.env['stock.move.line'].create({ 'picking_id': picking_id.id, 'product_id': stock_lot.product_id.id, + 'location_id': picking_id.location_id.id, + 'location_dest_id': picking_id.location_dest_id.id, 'lot_id': stock_lot.id, 'qty_done': 1, 'functional_tool_name_id': functional_tool_assembly.id From ec9435bb82673f52be7ad5467a40ff357c5f3b43 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Tue, 2 Jan 2024 17:42:06 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=94=80=E5=94=AE?= =?UTF-8?q?=E5=92=8C=E9=87=87=E8=B4=AD=E7=9A=84=E9=83=A8=E5=88=86bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_quality/security/ir.model.access.csv | 10 +++++----- sf_sale/models/sale_order.py | 24 +++++++++++++++++++++--- sf_sale/security/group_security.xml | 2 +- sf_sale/security/ir.model.access.csv | 4 ++++ sf_sale/views/purchase_order_view.xml | 3 +++ sf_sale/views/res_partner_view.xml | 3 ++- sf_sale/views/sale_order_view.xml | 5 ++--- 7 files changed, 38 insertions(+), 13 deletions(-) diff --git a/sf_quality/security/ir.model.access.csv b/sf_quality/security/ir.model.access.csv index a26c135b..dbcd31ee 100644 --- a/sf_quality/security/ir.model.access.csv +++ b/sf_quality/security/ir.model.access.csv @@ -1,6 +1,6 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_quality_point_group_quality,quality_point_group_quality,quality.model_quality_point,sf_base.group_quality,1,1,1,0 -access_quality_point_group_quality_director,quality_point_group_quality_director,quality.model_quality_point,sf_base.group_quality_director,1,1,0,0 +access_quality_point_group_quality_director,quality_point_group_quality_director,quality.model_quality_point,sf_base.group_quality_director,1,1,1,0 access_quality_point_group_plan_dispatch,quality_point_group_plan_dispatch,quality.model_quality_point,sf_base.group_plan_dispatch,1,0,0,0 access_quality_point_group_plan_director,quality_point_group_plan_director,quality.model_quality_point,sf_base.group_plan_director,1,0,0,0 access_quality_point_group_sf_equipment_user,quality_point_group_sf_equipment_user,quality.model_quality_point,sf_base.group_sf_equipment_user,1,0,0,0 @@ -30,8 +30,8 @@ access_quality_alert_group_sf_mrp_manager,quality_alert_group_sf_mrp_manager,qua access_quality_alert_group_equipment_user,quality_alert_group_equipment_user,quality.model_quality_alert,sf_maintenance.sf_group_equipment_user,1,0,0,0 access_quality_alert_group_equipment_manager,quality_alert_group_equipment_manager,quality.model_quality_alert,sf_maintenance.sf_group_equipment_manager,1,0,0,0 -access_quality_alert_team_group_quality,quality_alert_team_group_quality,quality.model_quality_alert_team,sf_base.group_quality,1,1,1,0 -access_quality_alert_team_group_quality_director,quality_alert_team_group_quality_director,quality.model_quality_alert_team,sf_base.group_quality_director,1,1,0,0 +access_quality_alert_team_group_quality,quality_alert_team_group_quality,quality.model_quality_alert_team,sf_base.group_quality,1,0,0,0 +access_quality_alert_team_group_quality_director,quality_alert_team_group_quality_director,quality.model_quality_alert_team,sf_base.group_quality_director,1,1,1,0 access_quality_alert_team_group_plan_dispatch,quality_alert_team_group_plan_dispatch,quality.model_quality_alert_team,sf_base.group_plan_dispatch,1,0,0,0 access_quality_alert_team_group_plan_director,quality_alert_team_group_plan_director,quality.model_quality_alert_team,sf_base.group_plan_director,1,0,0,0 access_quality_alert_team_group_sf_equipment_user,quality_alert_team_group_sf_equipment_user,quality.model_quality_alert_team,sf_base.group_sf_equipment_user,1,0,0,0 @@ -51,13 +51,13 @@ access_product_template_group_equipment_user,product_template_group_equipment_us access_product_template_group_equipment_manager,product_template_group_equipment_manager,product.model_product_template,sf_maintenance.sf_group_equipment_manager,1,0,0,0 access_quality_alert_stage_group_quality,quality_alert_stage_group_quality,quality.model_quality_alert_stage,sf_base.group_quality,1,0,0,0 -access_quality_alert_stage_group_quality_director,quality_alert_stage_group_quality_director,quality.model_quality_alert_stage,sf_base.group_quality_director,1,0,0,0 +access_quality_alert_stage_group_quality_director,quality_alert_stage_group_quality_director,quality.model_quality_alert_stage,sf_base.group_quality_director,1,1,1,0 access_quality_point_test_type_group_quality,quality_point_test_type_group_quality,quality.model_quality_point_test_type,sf_base.group_quality,1,0,0,0 access_quality_point_test_type_group_quality_director,quality_point_test_type_group_quality_director,quality.model_quality_point_test_type,sf_base.group_quality_director,1,0,0,0 access_quality_tag_group_quality,quality_tag_group_quality,quality.model_quality_tag,sf_base.group_quality,1,0,0,0 -access_quality_tag_group_quality_director,quality_tag_group_quality_director,quality.model_quality_tag,sf_base.group_quality_director,1,0,0,0 +access_quality_tag_group_quality_director,quality_tag_group_quality_director,quality.model_quality_tag,sf_base.group_quality_director,1,1,1,0 access_quality_reason_type_group_quality,quality_reason_group_quality,quality.model_quality_reason,sf_base.group_quality,1,0,0,0 access_quality_reason_type_group_quality_director,quality_reason_group_quality_director,quality.model_quality_reason,sf_base.group_quality_director,1,0,0,0 diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index 8cbcbb31..e1d0bad0 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -86,6 +86,7 @@ class ResaleOrderLine(models.Model): _inherit = 'sale.order.line' model_glb_file = fields.Binary('模型的glb文件') + check_status = fields.Selection(related='order_id.check_status') class RePurchaseOrder(models.Model): @@ -144,17 +145,31 @@ class ResPartnerToSale(models.Model): else: domain = [('id', '=', False)] return self._search(domain, limit=limit, access_rights_uid=name_get_uid) + elif self._context.get('is_supplier'): + if self.env.user.has_group('sf_base.group_purchase_director'): + domain = [('supplier_rank', '>', 0)] + elif self.env.user.has_group('sf_base.group_purchase'): + customer = self.env['res.partner'].search( + [('supplier_rank', '>', 0), ('user_id', '=', self.env.user.id)]) + if customer: + ids = [t.id for t in customer] + domain = [('id', 'in', ids)] + else: + domain = [('id', '=', False)] + return self._search(domain, limit=limit, access_rights_uid=name_get_uid) return super()._name_search(name, args, operator, limit, name_get_uid) @api.onchange('user_id') def _get_salesman(self): if self.customer_rank > 0: - self.user_id = self.env.user.id + if self.env.user.has_group('sf_base.group_sale_salemanager'): + self.user_id = self.env.user.id @api.onchange('purchase_user_id') def _get_purchaseman(self): if self.supplier_rank > 0: - self.purchase_user_id = self.env.user.id + if self.env.user.has_group('sf_base.group_purchase'): + self.purchase_user_id = self.env.user.id class ResUserToSale(models.Model): @@ -166,7 +181,10 @@ class ResUserToSale(models.Model): if self.env.user.has_group('sf_base.group_sale_director'): domain = [] elif self.env.user.has_group('sf_base.group_sale_salemanager'): - domain = [('id', '=', self.env.user.id)] + if self.id != self.env.user.id: + domain = [('id', '=', self.id)] + else: + domain = [('id', '=', self.env.user.id)] return self._search(domain, limit=limit, access_rights_uid=name_get_uid) elif self._context.get('supplier_rank'): if self.env.user.has_group('sf_base.group_purchase_director'): diff --git a/sf_sale/security/group_security.xml b/sf_sale/security/group_security.xml index 431b872b..f5d080ef 100644 --- a/sf_sale/security/group_security.xml +++ b/sf_sale/security/group_security.xml @@ -32,7 +32,7 @@ 销售经理查看自己的客户 - [('user_id','=',user.id),('customer_rank','>',0)] + [('user_id', '=', user.id),('customer_rank', '>', 0)] diff --git a/sf_sale/security/ir.model.access.csv b/sf_sale/security/ir.model.access.csv index 9489a6cc..8c6e1dc3 100644 --- a/sf_sale/security/ir.model.access.csv +++ b/sf_sale/security/ir.model.access.csv @@ -29,6 +29,8 @@ access_mrp_bom_group_sale_salemanager,mrp_bom_group_sale_salemanager,mrp.model_m access_mrp_bom_group_sale_director,mrp_bom_group_sale_director,mrp.model_mrp_bom,sf_base.group_sale_director,1,0,0,0 access_mrp_bom_group_purchase,mrp_bom_group_purchase,mrp.model_mrp_bom,sf_base.group_purchase,1,0,0,0 access_mrp_bom_group_purchase_director,mrp_bom_group_purchase_director,mrp.model_mrp_bom,sf_base.group_purchase_director,1,0,0,0 +access_mrp_bom_group_quality,mrp_bom_group_quality,mrp.model_mrp_bom,sf_base.group_quality,1,0,0,0 +access_mrp_bom_group_quality_director,mrp_bom_group_quality_director,mrp.model_mrp_bom,sf_base.group_quality_director,1,0,0,0 access_stock_move_group_sale_salemanager,stock_move_group_sale_salemanager,stock.model_stock_move,sf_base.group_sale_salemanager,1,0,0,0 access_stock_move_group_sale_director,stock_move_group_sale_director,stock.model_stock_move,sf_base.group_sale_director,1,0,0,0 access_stock_move_group_purchase,stock_move_group_purchase,stock.model_stock_move,sf_base.group_purchase,1,0,0,0 @@ -67,3 +69,5 @@ access_purchase_order_wizard_group_purchase,purchase_order_wizard_group_purchase access_purchase_order_wizard_group_purchase_director,purchase_order_wizard_group_purchase_director,model_purchase_order_wizard,sf_base.group_purchase_director,1,1,1,0 access_crm_tag_group_sale_salemanager,crm_tag_group_sale_salemanager,sales_team.model_crm_tag,sf_base.group_sale_salemanager,1,0,0,0 access_crm_tag_group_sale_director,crm_tag_group_sale_director,sales_team.model_crm_tag,sf_base.group_sale_director,1,1,1,0 +access_res_partner_group_purchase,res_partner_group_purchase,base.model_res_partner,sf_base.group_purchase,1,1,1,0 +access_res_partner_group_purchase_director,res_partner_group_purchase_director,base.model_res_partner,sf_base.group_purchase_director,1,1,1,0 diff --git a/sf_sale/views/purchase_order_view.xml b/sf_sale/views/purchase_order_view.xml index 93b59032..51dfaf63 100644 --- a/sf_sale/views/purchase_order_view.xml +++ b/sf_sale/views/purchase_order_view.xml @@ -6,6 +6,9 @@ purchase.order + + + diff --git a/sf_sale/views/res_partner_view.xml b/sf_sale/views/res_partner_view.xml index 2ab384eb..284bf29d 100644 --- a/sf_sale/views/res_partner_view.xml +++ b/sf_sale/views/res_partner_view.xml @@ -6,6 +6,7 @@ res.partner + @@ -42,7 +43,7 @@ + attrs="{'required' : [('customer_rank','>', 0)]}"/> 1 diff --git a/sf_sale/views/sale_order_view.xml b/sf_sale/views/sale_order_view.xml index d1f0dfb8..db94b2c9 100644 --- a/sf_sale/views/sale_order_view.xml +++ b/sf_sale/views/sale_order_view.xml @@ -36,8 +36,7 @@ attrs="{'invisible': ['|','&',('check_status', '!=', 'approved'),('state', 'in', ['draft','cancel']),'&',('check_status', '=', 'approved'),('state', 'in', ['sale','cancel'])]}"/> - {'invisible': ['|',('check_status', '!=', 'approved'),('schedule_status', - 'not in', ['to schedule',False])]} + {'invisible': [('check_status', '=', False)]} @@ -63,7 +62,7 @@ + string="模型文件" attrs="{'readonly': [('state', 'in', ['draft'])]}"/> {'readonly': [('state', 'in', ['cancel','sale'])]} From 45e8e380db9d691fbc7d202afddf9387a854f3cc Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 3 Jan 2024 11:42:23 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=94=80=E5=94=AE?= =?UTF-8?q?=E8=B4=A8=E9=87=8F=E9=87=87=E8=B4=ADbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_sale/security/group_security.xml | 3 ++- sf_sale/security/ir.model.access.csv | 3 +++ sf_sale/views/res_partner_view.xml | 7 ++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/sf_sale/security/group_security.xml b/sf_sale/security/group_security.xml index f5d080ef..c6af4225 100644 --- a/sf_sale/security/group_security.xml +++ b/sf_sale/security/group_security.xml @@ -64,8 +64,9 @@ 采购总监查看所有的订单 - [(1,'=',1),('check_status','!=', False] + [(1,'=',1)] + diff --git a/sf_sale/security/ir.model.access.csv b/sf_sale/security/ir.model.access.csv index 8c6e1dc3..682d6531 100644 --- a/sf_sale/security/ir.model.access.csv +++ b/sf_sale/security/ir.model.access.csv @@ -71,3 +71,6 @@ access_crm_tag_group_sale_salemanager,crm_tag_group_sale_salemanager,sales_team. access_crm_tag_group_sale_director,crm_tag_group_sale_director,sales_team.model_crm_tag,sf_base.group_sale_director,1,1,1,0 access_res_partner_group_purchase,res_partner_group_purchase,base.model_res_partner,sf_base.group_purchase,1,1,1,0 access_res_partner_group_purchase_director,res_partner_group_purchase_director,base.model_res_partner,sf_base.group_purchase_director,1,1,1,0 +access_sale_advance_payment_inv_group_sale_salemanager,sale_advance_payment_inv_group_sale_salemanager,sale.model_sale_advance_payment_inv,sf_base.group_sale_salemanager,1,1,1,0 +access_sale_advance_payment_inv_group_sale_director,sale_advance_payment_inv_group_sale_director,sale.model_sale_advance_payment_inv,sf_base.group_sale_director,1,1,1,0 + diff --git a/sf_sale/views/res_partner_view.xml b/sf_sale/views/res_partner_view.xml index 284bf29d..c7bb79af 100644 --- a/sf_sale/views/res_partner_view.xml +++ b/sf_sale/views/res_partner_view.xml @@ -6,7 +6,9 @@ res.partner - +
+ false +
@@ -70,6 +72,9 @@ res.partner + + false +