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

This commit is contained in:
mgw
2024-01-19 11:49:57 +08:00
parent cffda26ed0
commit 2dfd3c9128
10 changed files with 125 additions and 93 deletions

View File

@@ -28,7 +28,7 @@ access_sf_sync_common,sf_sync_common,model_sf_sync_common,base.group_user,1,1,1,
access_sf_international_standards,sf_international_standards,model_sf_international_standards,base.group_user,1,1,1,1
access_material_apply,material_apply,model_material_apply,base.group_user,1,1,1,1
access_sf_cutting_tool_standard_library,sf_cutting_tool_standard_library,model_sf_cutting_tool_standard_library,base.group_user,1,1,1,1
access_sf_tool_groups,sf_tool_groups,model_sf_tool_groups,base.group_user,1,1,1,1
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
@@ -42,6 +42,9 @@ access_purchase_order_line_group_purchase,access_purchase_order_line_group_purch
access_purchase_order_line_group_purchase_director,access_purchase_order_line_group_purchase_director,purchase.model_purchase_order_line,sf_base.group_purchase_director,1,1,1,0
access_spindle_taper_type,spindle_taper_type,model_spindle_taper_type,base.group_user,1,1,1,1
access_sf_tool_groups_group_plan_dispatch,sf_tool_groups,model_sf_tool_groups,sf_base.group_plan_dispatch,1,0,0,0
access_sf_tool_groups_group_sf_tool_user,sf_tool_groups,model_sf_tool_groups,sf_base.group_sf_tool_user,1,1,1,1
access_purchase_order,purchase.order,purchase.model_purchase_order,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
28 access_material_apply material_apply model_material_apply base.group_user 1 1 1 1
29 access_sf_cutting_tool_standard_library sf_cutting_tool_standard_library model_sf_cutting_tool_standard_library base.group_user 1 1 1 1
30 access_sf_tool_groups access_sf_tool_materials_basic_parameters sf_tool_groups sf_tool_materials_basic_parameters model_sf_tool_groups model_sf_tool_materials_basic_parameters base.group_user 1 1 1 1
31 access_sf_tool_materials_basic_parameters access_sf_cutting_speed sf_tool_materials_basic_parameters sf_cutting_speed model_sf_tool_materials_basic_parameters model_sf_cutting_speed base.group_user 1 1 1 1
32 access_sf_cutting_speed access_sf_feed_per_tooth sf_cutting_speed sf_feed_per_tooth model_sf_cutting_speed model_sf_feed_per_tooth base.group_user 1 1 1 1
33 access_sf_feed_per_tooth access_sf_ramping_angle sf_feed_per_tooth sf_ramping_angle model_sf_feed_per_tooth model_sf_ramping_angle base.group_user 1 1 1 1
34 access_sf_ramping_angle access_sf_cutting_width_depth sf_ramping_angle sf_cutting_width_depth model_sf_ramping_angle model_sf_cutting_width_depth base.group_user 1 1 1 1
42 access_purchase_order access_sf_tool_groups_group_sf_tool_user purchase.order sf_tool_groups purchase.model_purchase_order model_sf_tool_groups sf_base.group_plan_dispatch sf_base.group_sf_tool_user 1 0 1 0 1 0 1
43 access_res_partner access_purchase_order res.partner purchase.order base.model_res_partner purchase.model_purchase_order sf_base.group_plan_dispatch 1 0 0 0
44 access_purchase_order_line access_res_partner purchase.order.line res.partner purchase.model_purchase_order_line base.model_res_partner sf_base.group_plan_dispatch 1 0 0 0
45 access_purchase_order_line purchase.order.line purchase.model_purchase_order_line sf_base.group_plan_dispatch 1 0 0 0
46 access_account_move_line account.move.line account.model_account_move_line sf_base.group_plan_dispatch 1 0 0 0
47
48
49
50

View File

@@ -495,7 +495,7 @@
<field name="name">刀具组</field>
<field name="model">sf.tool.groups</field>
<field name="arch" type="xml">
<tree create="1" edit="1" delete="1" editable="bottom">
<tree editable="bottom">
<field name="name"/>
<field name="equipment_ids" widget="many2many_tags"/>
<field name="remark"/>

View File

@@ -107,16 +107,16 @@
<button name="button_start" type="object" string="开始" class="btn-success"
attrs="{'invisible': ['|', '|', '|','|','|', ('production_state','in', ('draft', 'done',
'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done', 'cancel')),
('is_user_working', '!=', False),('user_permissions','=',False),('name','=','获取CNC加工程序')]}"/>
<button name="button_pending" type="object" string="暂停" class="btn-warning"
('is_user_working', '!=', False),('user_permissions','=',False),('name','=','获取CNC加工程序')]}" groups="sf_base.group_sf_mrp_user"/>
<button name="button_pending" type="object" string="暂停" class="btn-warning" groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': ['|', '|','|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False),('name','=','获取CNC加工程序')]}"/>
<button name="button_finish" type="object" string="完成" class="btn-success"
<button name="button_finish" type="object" string="完成" class="btn-success" groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False)]}"/>
<button name="%(mrp.act_mrp_block_workcenter_wo)d" type="action" string="停工"
context="{'default_workcenter_id': workcenter_id}" class="btn-danger"
context="{'default_workcenter_id': workcenter_id}" class="btn-danger" groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': ['|', '|','|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'),('user_permissions','=',False),('name','=','获取CNC加工程序')]}"/>
<button name="button_unblock" type="object" string="Unblock"
context="{'default_workcenter_id': workcenter_id}" class="btn-danger"
context="{'default_workcenter_id': workcenter_id}" class="btn-danger" groups="sf_base.group_sf_mrp_user"
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '!=', 'blocked'),('name','=','获取CNC加工程序')]}"/>
</xpath>
<xpath expr="//page[1]" position="before">

View File

@@ -194,7 +194,8 @@ class sf_production_plan(models.Model):
record.date_planned_start, record.date_planned_finished = \
item.date_planned_start, item.date_planned_finished
record.state = 'done'
record.production_id.schedule_state = '已排'
# record.production_id.schedule_state = '已排'
record.sudo().production_id.schedule_state = '已排'
# self.env['sale.order'].browse(record.production_id.origin).schedule_status = 'to process'
sale_obj = self.env['sale.order'].search([('name', '=', record.origin)])
if 'S' in sale_obj.name:
@@ -202,7 +203,7 @@ class sf_production_plan(models.Model):
mrp_production_ids = record.production_id._get_children().ids
print('mrp_production_ids', mrp_production_ids)
for i in mrp_production_ids:
record.env['mrp.production'].browse(i).schedule_state = '已排'
record.env['mrp.production'].sudo().browse(i).schedule_state = '已排'
# record.production_id.date_planned_start = record.date_planned_start
# record.production_id.date_planned_finished = record.date_planned_finished
else:

View File

@@ -44,13 +44,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):
"""
@@ -128,24 +128,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 = []
@@ -310,9 +310,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):
@@ -330,26 +330,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):
"""
@@ -369,7 +369,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):
"""
@@ -378,24 +378,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):
"""
@@ -480,21 +480,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"/>
@@ -920,9 +920,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>
@@ -937,7 +937,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,
@@ -960,10 +960,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"/>

View File

@@ -287,11 +287,11 @@ class ShelfLocation(models.Model):
"""
for record in self:
if record.product_sn_id:
record.product_id = record.product_sn_id.product_id
record.location_status = '占用'
record.sudo().product_id = record.product_sn_id.product_id
record.sudo().location_status = '占用'
else:
record.product_id = False
record.location_status = '空闲'
record.sudo().product_id = False
record.sudo().location_status = '空闲'
@api.depends('location_type')
def _compute_hide_what(self):
@@ -300,12 +300,12 @@ class ShelfLocation(models.Model):
:return:
"""
for record in self:
record.hide_shelf = False
record.hide_location = False
record.sudo().hide_shelf = False
record.sudo().hide_location = False
if record.location_type and record.location_type == '货架':
record.hide_shelf = True
record.sudo().hide_shelf = True
elif record.location_type and record.location_type == '货位':
record.hide_location = True
record.sudo().hide_location = True
else:
pass

View File

@@ -96,7 +96,7 @@ access_stock_lot_label_layout_user,lot.label.layout.user,stock.model_lot_label_l
access_stock_replenish_option,stock.replenishment.option,stock.model_stock_replenishment_option,sf_warehouse.group_sf_stock_user,1,1,1,0
access_mrp_production,mrp.production,mrp.model_mrp_production,sf_warehouse.group_sf_stock_user,1,1,1,0
access_sf_shelf_location_group_plan_dispatch,sf.shelf.location,model_sf_shelf_location,sf_base.group_plan_dispatch,1,1,0,0
access_sf_shelf_location_group_plan_dispatch,sf.shelf.location,model_sf_shelf_location,sf_base.group_plan_dispatch,1,0,0,0
access_stock_move,stock.move,stock.model_stock_move,sf_base.group_plan_dispatch,1,1,1,0
access_stock_picking,stock.picking,stock.model_stock_picking,sf_base.group_plan_dispatch,1,0,0,0
access_stock_lot_group_plan_dispatch,stock.lot,stock.model_stock_lot,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
96 access_sf_shelf_location_group_plan_dispatch sf.shelf.location model_sf_shelf_location sf_base.group_plan_dispatch 1 1 0 0 0
97 access_stock_move stock.move stock.model_stock_move sf_base.group_plan_dispatch 1 1 1 0
98 access_stock_picking stock.picking stock.model_stock_picking sf_base.group_plan_dispatch 1 0 0 0
99 access_stock_lot_group_plan_dispatch stock.lot stock.model_stock_lot sf_base.group_plan_dispatch 1 0 0 0
100 access_stock_lot_group_plan_director stock.lot stock.model_stock_lot sf_base.group_plan_director 1 1 1 0
101 access_stock_warehouse_orderpoint stock.warehouse.orderpoint stock.model_stock_warehouse_orderpoint sf_base.group_plan_dispatch 1 1 0 0
102 access_product_product product.product product.model_product_product sf_base.group_plan_dispatch 1 0 0 0

View File

@@ -73,5 +73,19 @@
</field>
</record>
<record id="sf_vpicktree" model="ir.ui.view">
<field name="name">sf.vpicktree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.vpicktree"/>
<field name="arch" type="xml">
<xpath expr="//header//button[@name='do_unreserve']" position="replace">
<button name="do_unreserve" type="object" string="取消保留" groups="sf_warehouse.group_sf_stock_user"/>
</xpath>
<xpath expr="//header//button[@name='action_assign']" position="replace">
<button name="action_assign" type="object" string="检查可用量" groups="sf_warehouse.group_sf_stock_user"/>
</xpath>
</field>
</record>
</data>
</odoo>