Accept Merge Request #780: (feature/制造代码优化 -> develop)

Merge Request: 增加刀具管理权限控制,刀具组权限控制,隐藏工单上原生按钮,修复只读权限后修改记录无权限问题等

Created By: @马广威
Accepted By: @马广威
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/780?initial=true
This commit is contained in:
马广威
2024-01-22 15:40:23 +08:00
committed by Coding
10 changed files with 125 additions and 93 deletions

View File

@@ -47,13 +47,13 @@ class FunctionalCuttingToolEntity(models.Model):
if record.barcode_id.quant_ids:
for quant_id in record.barcode_id.quant_ids:
if quant_id.inventory_quantity_auto_apply > 0:
record.current_location_id = quant_id.location_id
record.current_location = quant_id.location_id.name
record.sudo().current_location_id = quant_id.location_id
record.sudo().current_location = quant_id.location_id.name
if record.current_location_id:
record.get_location_num()
record.sudo().get_location_num()
else:
record.current_location_id = False
record.current_location = False
record.sudo().current_location_id = False
record.sudo().current_location = False
def get_location_num(self):
"""
@@ -131,24 +131,24 @@ class FunctionalCuttingToolEntity(models.Model):
print('111')
if record.cutting_tool_integral_model_id:
print(record.cutting_tool_integral_model_id)
record.suitable_machining_method_ids = record.cutting_tool_integral_model_id.suitable_machining_method_ids.ids
record.blade_tip_characteristics_id = record.cutting_tool_integral_model_id.blade_tip_characteristics_id.id
record.handle_type_id = record.cutting_tool_integral_model_id.handle_type_id.id
record.cutting_direction_ids = record.cutting_tool_integral_model_id.cutting_direction_ids.ids
record.suitable_coolant_ids = record.cutting_tool_integral_model_id.suitable_coolant_ids.ids
record.sudo().suitable_machining_method_ids = record.cutting_tool_integral_model_id.suitable_machining_method_ids.ids
record.sudo().blade_tip_characteristics_id = record.cutting_tool_integral_model_id.blade_tip_characteristics_id.id
record.sudo().handle_type_id = record.cutting_tool_integral_model_id.handle_type_id.id
record.sudo().cutting_direction_ids = record.cutting_tool_integral_model_id.cutting_direction_ids.ids
record.sudo().suitable_coolant_ids = record.cutting_tool_integral_model_id.suitable_coolant_ids.ids
print(record.cutting_tool_integral_model_id.blade_tip_characteristics_id.ids)
elif record.cutting_tool_blade_model_id:
record.suitable_machining_method_ids = record.cutting_tool_blade_model_id.suitable_machining_method_ids.ids
record.blade_tip_characteristics_id = record.cutting_tool_blade_model_id.blade_tip_characteristics_id.id
record.handle_type_id = record.cutting_tool_blade_model_id.handle_type_id.id
record.cutting_direction_ids = record.cutting_tool_blade_model_id.cutting_direction_ids.ids
record.suitable_coolant_ids = record.cutting_tool_blade_model_id.suitable_coolant_ids.ids
record.sudo().suitable_machining_method_ids = record.cutting_tool_blade_model_id.suitable_machining_method_ids.ids
record.sudo().blade_tip_characteristics_id = record.cutting_tool_blade_model_id.blade_tip_characteristics_id.id
record.sudo().handle_type_id = record.cutting_tool_blade_model_id.handle_type_id.id
record.sudo().cutting_direction_ids = record.cutting_tool_blade_model_id.cutting_direction_ids.ids
record.sudo().suitable_coolant_ids = record.cutting_tool_blade_model_id.suitable_coolant_ids.ids
else:
record.suitable_machining_method_ids = []
record.blade_tip_characteristics_id = None
record.handle_type_id = None
record.cutting_direction_ids = []
record.suitable_coolant_ids = []
record.sudo().suitable_machining_method_ids = []
record.sudo().blade_tip_characteristics_id = None
record.sudo().handle_type_id = None
record.sudo().cutting_direction_ids = []
record.sudo().suitable_coolant_ids = []
def _get_functional_tool_model_ids(self, functional_tool_model_code):
functional_tool_model_ids = []
@@ -341,9 +341,9 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
def _compute_name(self):
for obj in self:
if obj.tool_groups_id:
obj.name = '%s-D%sR%s' % (obj.tool_groups_id.name, obj.diameter, obj.knife_tip_r_angle)
obj.sudo().name = '%s-D%sR%s' % (obj.tool_groups_id.name, obj.diameter, obj.knife_tip_r_angle)
else:
obj.name = None
obj.sudo().name = None
@api.constrains('min_stock_num', 'max_stock_num')
def _check_stock_num(self):
@@ -361,26 +361,26 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
for tool in self:
if tool:
# 判断功能刀具组装单是否已经完成
tool.estimate_functional_tool_assembly_ids(tool)
tool.get_stock_num(tool)
tool.sudo().estimate_functional_tool_assembly_ids(tool)
tool.sudo().get_stock_num(tool)
# 计算当前库存量
tool.tool_stock_total = tool.tool_stock_num + tool.side_shelf_num + tool.on_tool_stock_num
tool.sudo().tool_stock_total = tool.tool_stock_num + tool.side_shelf_num + tool.on_tool_stock_num
# 如果当前库存量小于最低库存量,计算批次补货量
tool.open_batch_replenishment_num(tool)
tool.sudo().open_batch_replenishment_num(tool)
def open_batch_replenishment_num(self, tool):
"""
计算批次补货量
"""
if tool.tool_stock_total < tool.min_stock_num:
tool.batch_replenishment_num = tool.max_stock_num - tool.tool_stock_total
tool.sudo().batch_replenishment_num = tool.max_stock_num - tool.tool_stock_total
# 根据判断创建功能刀具组装单
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)
tool.sudo().create_functional_tool_assembly(tool)
print(i, ": ", tool.sf_functional_tool_assembly_ids)
else:
tool.batch_replenishment_num = 0
tool.sudo().batch_replenishment_num = 0
def create_functional_tool_assembly(self, tool):
"""
@@ -400,7 +400,7 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
'whether_standard_knife': tool.whether_standard_knife,
'reason_for_applying': '安全库存',
})
tool.sf_functional_tool_assembly_ids = [(4, functional_tool_assembly.id)]
tool.sudo().sf_functional_tool_assembly_ids = [(4, functional_tool_assembly.id)]
def estimate_functional_tool_assembly_ids(self, tool):
"""
@@ -409,24 +409,24 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
for sf_functional_tool_assembly_id in tool.sf_functional_tool_assembly_ids:
if sf_functional_tool_assembly_id.assemble_status == '0':
return False
tool.sf_functional_tool_assembly_ids = []
tool.sudo().sf_functional_tool_assembly_ids = []
def get_stock_num(self, tool):
"""
计算刀具房数量、线边刀库数量、机内刀库数量
"""
if tool:
tool.tool_stock_num = 0
tool.side_shelf_num = 0
tool.on_tool_stock_num = 0
tool.sudo().tool_stock_num = 0
tool.sudo().side_shelf_num = 0
tool.sudo().on_tool_stock_num = 0
if tool.sf_functional_cutting_tool_entity_ids:
for cutting_tool in tool.sf_functional_cutting_tool_entity_ids:
if cutting_tool.tool_room_num > 0:
tool.tool_stock_num += 1
tool.sudo().tool_stock_num += 1
elif cutting_tool.line_edge_knife_library_num > 0:
tool.side_shelf_num += 1
tool.sudo().side_shelf_num += 1
elif cutting_tool.machine_knife_library_num > 0:
tool.on_tool_stock_num += 1
tool.sudo().on_tool_stock_num += 1
def create_or_edit_safety_stock(self, vals, sf_functional_cutting_tool_entity_ids):
"""
@@ -511,21 +511,21 @@ class MachineTableToolChangingApply(models.Model):
def _compute_functional_tool_status(self):
for record in self:
if record.alarm_value < record.used_value:
record.functional_tool_status = '报警'
record.sudo().functional_tool_status = '报警'
else:
record.functional_tool_status = '正常'
record.sudo().functional_tool_status = '正常'
@api.depends('maintenance_equipment_id')
def _compute_machine_table_type_id(self):
for record in self:
if record:
record.production_line_id = record.maintenance_equipment_id.production_line_id.id
record.machine_table_type_id = record.maintenance_equipment_id.category_id.id
record.machine_tool_code = record.maintenance_equipment_id.code
record.sudo().production_line_id = record.maintenance_equipment_id.production_line_id.id
record.sudo().machine_table_type_id = record.maintenance_equipment_id.category_id.id
record.sudo().machine_tool_code = record.maintenance_equipment_id.code
else:
record.production_line_id = None
record.machine_table_type_id = None
record.machine_tool_code = None
record.sudo().production_line_id = None
record.sudo().machine_table_type_id = None
record.sudo().machine_tool_code = None
@api.constrains("cutter_spacing_code_id")
def _check_cutter_spacing_code_id(self):

View File

@@ -1,20 +1,34 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_sf_functional_cutting_tool_entity,sf.functional.cutting.tool.entity,model_sf_functional_cutting_tool_entity,base.group_user,1,1,1,1
access_sf_functional_tool_warning,sf.functional.tool.warning,model_sf_functional_tool_warning,base.group_user,1,1,1,1
access_sf_real_time_distribution_of_functional_tools,sf.real.time.distribution.of.functional.tools,model_sf_real_time_distribution_of_functional_tools,base.group_user,1,1,1,1
access_sf_functional_cutting_tool_entity,sf.functional.cutting.tool.entity,model_sf_functional_cutting_tool_entity,sf_base.group_sf_tool_user,1,1,1,1
access_sf_functional_tool_warning,sf.functional.tool.warning,model_sf_functional_tool_warning,sf_base.group_sf_tool_user,1,1,1,1
access_sf_real_time_distribution_of_functional_tools,sf.real.time.distribution.of.functional.tools,model_sf_real_time_distribution_of_functional_tools,sf_base.group_sf_tool_user,1,1,1,1
access_sf_cam_work_order_program_knife_plan,sf.cam.work.order.program.knife.plan,model_sf_cam_work_order_program_knife_plan,base.group_user,1,1,1,1
access_sf_machine_table_tool_changing_apply,sf.machine.table.tool.changing.apply,model_sf_machine_table_tool_changing_apply,base.group_user,1,1,1,1
access_sf_cam_work_order_program_knife_plan,sf.cam.work.order.program.knife.plan,model_sf_cam_work_order_program_knife_plan,sf_base.group_sf_tool_user,1,1,1,1
access_sf_machine_table_tool_changing_apply,sf.machine.table.tool.changing.apply,model_sf_machine_table_tool_changing_apply,sf_base.group_sf_tool_user,1,1,1,1
access_sf_tool_change_requirement_information,sf.tool.change.requirement.information,model_sf_tool_change_requirement_information,base.group_user,1,1,1,1
access_sf_tool_transfer_request_information,sf.tool.transfer.request.information,model_sf_tool_transfer_request_information,base.group_user,1,1,1,1
access_sf_functional_tool_assembly,sf.functional.tool.assembly,model_sf_functional_tool_assembly,base.group_user,1,1,1,1
access_sf_functional_tool_assembly_order,sf.functional.tool.assembly.order,model_sf_functional_tool_assembly_order,base.group_user,1,1,1,1
access_sf_tool_material_search,sf.tool.material.search,model_sf_tool_material_search,base.group_user,1,1,1,1
access_sf_tool_change_requirement_information,sf.tool.change.requirement.information,model_sf_tool_change_requirement_information,sf_base.group_sf_tool_user,1,1,1,1
access_sf_tool_transfer_request_information,sf.tool.transfer.request.information,model_sf_tool_transfer_request_information,sf_base.group_sf_tool_user,1,1,1,1
access_sf_functional_tool_assembly,sf.functional.tool.assembly,model_sf_functional_tool_assembly,sf_base.group_sf_tool_user,1,1,1,1
access_sf_functional_tool_assembly_order,sf.functional.tool.assembly.order,model_sf_functional_tool_assembly_order,sf_base.group_sf_tool_user,1,1,1,1
access_sf_tool_material_search,sf.tool.material.search,model_sf_tool_material_search,sf_base.group_sf_tool_user,1,1,1,1
access_sf_functional_cutting_tool_entity_group_plan_dispatch,sf.functional.cutting.tool.entity,model_sf_functional_cutting_tool_entity,sf_base.group_plan_dispatch,1,0,0,0
access_sf_functional_tool_warning_group_plan_dispatch,sf.functional.tool.warning,model_sf_functional_tool_warning,sf_base.group_plan_dispatch,1,0,0,0
access_sf_real_time_distribution_of_functional_tools_group_plan_dispatch,sf.real.time.distribution.of.functional.tools,model_sf_real_time_distribution_of_functional_tools,sf_base.group_plan_dispatch,1,0,0,0
access_sf_cam_work_order_program_knife_plan_group_plan_dispatch,sf.cam.work.order.program.knife.plan,model_sf_cam_work_order_program_knife_plan,sf_base.group_plan_dispatch,1,0,0,0
access_sf_machine_table_tool_changing_apply_group_plan_dispatch,sf.machine.table.tool.changing.apply,model_sf_machine_table_tool_changing_apply,sf_base.group_plan_dispatch,1,0,0,0
access_sf_tool_change_requirement_information_group_plan_dispatch,sf.tool.change.requirement.information,model_sf_tool_change_requirement_information,sf_base.group_plan_dispatch,1,0,0,0
access_sf_tool_transfer_request_information_group_plan_dispatch,sf.tool.transfer.request.information,model_sf_tool_transfer_request_information,sf_base.group_plan_dispatch,1,0,0,0
access_sf_functional_tool_assembly_group_plan_dispatch,sf.functional.tool.assembly,model_sf_functional_tool_assembly,sf_base.group_plan_dispatch,1,0,0,0
access_sf_functional_tool_assembly_order_group_plan_dispatch,sf.functional.tool.assembly.order,model_sf_functional_tool_assembly_order,sf_base.group_plan_dispatch,1,0,0,0
access_sf_tool_material_search_group_plan_dispatch,sf.tool.material.search,model_sf_tool_material_search,sf_base.group_plan_dispatch,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_sf_functional_cutting_tool_entity sf.functional.cutting.tool.entity model_sf_functional_cutting_tool_entity base.group_user sf_base.group_sf_tool_user 1 1 1 1
3 access_sf_functional_tool_warning sf.functional.tool.warning model_sf_functional_tool_warning base.group_user sf_base.group_sf_tool_user 1 1 1 1
4 access_sf_real_time_distribution_of_functional_tools sf.real.time.distribution.of.functional.tools model_sf_real_time_distribution_of_functional_tools base.group_user sf_base.group_sf_tool_user 1 1 1 1
5 access_sf_cam_work_order_program_knife_plan sf.cam.work.order.program.knife.plan model_sf_cam_work_order_program_knife_plan base.group_user sf_base.group_sf_tool_user 1 1 1 1
6 access_sf_machine_table_tool_changing_apply sf.machine.table.tool.changing.apply model_sf_machine_table_tool_changing_apply base.group_user sf_base.group_sf_tool_user 1 1 1 1
7 access_sf_tool_change_requirement_information sf.tool.change.requirement.information model_sf_tool_change_requirement_information base.group_user sf_base.group_sf_tool_user 1 1 1 1
8 access_sf_tool_transfer_request_information sf.tool.transfer.request.information model_sf_tool_transfer_request_information base.group_user sf_base.group_sf_tool_user 1 1 1 1
9 access_sf_functional_tool_assembly sf.functional.tool.assembly model_sf_functional_tool_assembly base.group_user sf_base.group_sf_tool_user 1 1 1 1
10 access_sf_functional_tool_assembly_order sf.functional.tool.assembly.order model_sf_functional_tool_assembly_order base.group_user sf_base.group_sf_tool_user 1 1 1 1
11 access_sf_tool_material_search sf.tool.material.search model_sf_tool_material_search base.group_user sf_base.group_sf_tool_user 1 1 1 1
12 access_sf_functional_cutting_tool_entity_group_plan_dispatch sf.functional.cutting.tool.entity model_sf_functional_cutting_tool_entity sf_base.group_plan_dispatch 1 0 0 0
13 access_sf_functional_tool_warning_group_plan_dispatch sf.functional.tool.warning model_sf_functional_tool_warning sf_base.group_plan_dispatch 1 0 0 0
14 access_sf_real_time_distribution_of_functional_tools_group_plan_dispatch sf.real.time.distribution.of.functional.tools model_sf_real_time_distribution_of_functional_tools sf_base.group_plan_dispatch 1 0 0 0
15 access_sf_cam_work_order_program_knife_plan_group_plan_dispatch sf.cam.work.order.program.knife.plan model_sf_cam_work_order_program_knife_plan sf_base.group_plan_dispatch 1 0 0 0
16 access_sf_machine_table_tool_changing_apply_group_plan_dispatch sf.machine.table.tool.changing.apply model_sf_machine_table_tool_changing_apply sf_base.group_plan_dispatch 1 0 0 0
17 access_sf_tool_change_requirement_information_group_plan_dispatch sf.tool.change.requirement.information model_sf_tool_change_requirement_information sf_base.group_plan_dispatch 1 0 0 0
18 access_sf_tool_transfer_request_information_group_plan_dispatch sf.tool.transfer.request.information model_sf_tool_transfer_request_information sf_base.group_plan_dispatch 1 0 0 0
19 access_sf_functional_tool_assembly_group_plan_dispatch sf.functional.tool.assembly model_sf_functional_tool_assembly sf_base.group_plan_dispatch 1 0 0 0
20 access_sf_functional_tool_assembly_order_group_plan_dispatch sf.functional.tool.assembly.order model_sf_functional_tool_assembly_order sf_base.group_plan_dispatch 1 0 0 0
21 access_sf_tool_material_search_group_plan_dispatch sf.tool.material.search model_sf_tool_material_search sf_base.group_plan_dispatch 1 0 0 0
22
23
24
25
26
27
28
29
30
31
32
33
34

View File

@@ -43,7 +43,7 @@
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button class="oe_stat_button"
<button class="oe_stat_button" groups="sf_base.group_sf_mrp_user"
name="open_functional_tool_warning"
icon="fa-list-ul"
type="object">
@@ -53,7 +53,7 @@
</span>
</div>
</button>
<button class="oe_stat_button"
<button class="oe_stat_button" groups="sf_base.group_sf_mrp_user"
name="open_stock_move_line"
icon="fa-list-ul"
type="object">
@@ -63,7 +63,7 @@
</span>
</div>
</button>
<button class="oe_stat_button"
<button class="oe_stat_button" groups="sf_base.group_sf_mrp_user"
name="open_safety_stock"
icon="fa-list-ul"
type="object">
@@ -287,7 +287,7 @@
<field name="name">功能刀具安全库存</field>
<field name="model">sf.real.time.distribution.of.functional.tools</field>
<field name="arch" type="xml">
<tree create="1" edit="1" delete="0">
<tree>
<field name="name"/>
<field name="sf_cutting_tool_type_id" invisible="True"/>
<field name="tool_groups_id"/>
@@ -310,7 +310,7 @@
<field name="name">功能刀具安全库存</field>
<field name="model">sf.real.time.distribution.of.functional.tools</field>
<field name="arch" type="xml">
<form create="0" edit="1" delete="0">
<form>
<sheet>
<div class="oe_title">
<h1>
@@ -552,7 +552,7 @@
'default_replacement_effective_length': effective_length,
}"
attrs="{'invisible': [('status', '!=', '0')]}"
class="btn-primary"
class="btn-primary" groups="sf_base.group_sf_mrp_user"
/>
<button string="转移"
name="%(sf_tool_management.sf_tool_transfer_request_information_act)d"
@@ -578,13 +578,13 @@
'default_extension_length': extension_length,
'default_effective_length': effective_length,
}"
class="btn-primary"
class="btn-primary" groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': ['|',('status', '!=', '0'), ('functional_tool_name_id', '=', False)]}"
/>
<button string="撤回换刀申请" name="revocation_1" type="object" class="btn-primary"
attrs="{'invisible': [('status', '!=', '1')]}" confirm="是否确认撤回换刀申请"/>
attrs="{'invisible': [('status', '!=', '1')]}" groups="sf_base.group_sf_mrp_user" confirm="是否确认撤回换刀申请"/>
<button string="撤回转移" name="revocation_2" type="object" class="btn-primary"
attrs="{'invisible': [('status', '!=', '2')]}" confirm="是否确认撤回转移"/>
attrs="{'invisible': [('status', '!=', '2')]}" groups="sf_base.group_sf_mrp_user" confirm="是否确认撤回转移"/>
</tree>
</field>
</record>
@@ -630,7 +630,7 @@
'default_replacement_effective_length': effective_length,
}"
attrs="{'invisible': [('status', '!=', '0')]}"
class="btn-primary"
class="btn-primary" groups="sf_base.group_sf_mrp_user"
/>
<button string="转移"
name="%(sf_tool_management.sf_tool_transfer_request_information_act)d"
@@ -654,11 +654,11 @@
'default_extension_length': extension_length,
'default_effective_length': effective_length,
}"
class="btn-primary"
class="btn-primary" groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': ['|',('status', '!=', '0'),('functional_tool_name_id', '=', False)]}"/>
<button string="撤回换刀申请" name="revocation_1" type="object" class="btn-primary"
attrs="{'invisible': [('status', '!=', '1')]}" confirm="是否确认撤回换刀申请"/>
<button string="撤回转移" name="revocation_2" type="object" class="btn-primary"
attrs="{'invisible': [('status', '!=', '1')]}" groups="sf_base.group_sf_mrp_user" confirm="是否确认撤回换刀申请"/>
<button string="撤回转移" name="revocation_2" type="object" groups="sf_base.group_sf_mrp_user" class="btn-primary"
attrs="{'invisible': [('status', '!=', '2')]}" confirm="是否确认撤回转移"/>
</header>
<field name="functional_tool_status" string="状态" invisible="True"/>
@@ -946,9 +946,9 @@
'default_use_tool_time':use_tool_time,
'default_reason_for_applying':reason_for_applying,
}"
attrs="{'invisible': [('assemble_status', '!=', '0')]}"
attrs="{'invisible': [('assemble_status', '!=', '0')]}" groups="sf_base.group_sf_mrp_user"
class="btn-primary"/>
<button string="组装单打印" name="assemble_single_print" type="object"
<button string="组装单打印" name="assemble_single_print" type="object" groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': [('assemble_status', '=', '0')]}" class="btn-primary"
confirm="是否确认打印组装单"/>
</tree>
@@ -963,7 +963,7 @@
<header>
<button string="组装"
name="%(sf_tool_management.sf_functional_tool_assembly_order_act)d"
type="action"
type="action" groups="sf_base.group_sf_mrp_user"
context="{'default_name':name,
'default_assembly_order_code':assembly_order_code,
'default_production_line_name_id':production_line_name_id,
@@ -986,10 +986,10 @@
attrs="{'invisible': [('assemble_status', '!=', '0')]}"
class="btn-primary"/>
<button string="打印二维码" name="automatic_printing_of_QR_code" type="object"
<button string="打印二维码" name="automatic_printing_of_QR_code" type="object" groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': [('assemble_status', '=', '0')]}" class="btn-primary"
confirm="是否确认打印二维码"/>
<button string="组装单打印" name="assemble_single_print" type="object"
<button string="组装单打印" name="assemble_single_print" type="object" groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': [('assemble_status', '=', '0')]}" class="btn-primary"
confirm="是否确认打印组装单"/>
<field name="assemble_status" widget="statusbar" statusbar_visible="0,1"/>