1、新增功能刀具清单模型,及其tree视图、权限;2、功能刀具安全库存模型和功能刀具组装单模型新增功能刀具名称关联功能刀具清单,优化功能刀具组装流程生成功能刀具安全库存信息的流程

This commit is contained in:
yuxianghui
2024-04-09 10:46:08 +08:00
parent 6bddc4c262
commit 34ea140941
8 changed files with 117 additions and 24 deletions

View File

@@ -308,3 +308,23 @@ class ToolGroups(models.Model):
# records = super(ToolGroups, self).create(vals_list)
# self._register_tool_groups(records)
# return records
class ToolInventory(models.Model):
_name = 'sf.tool.inventory'
_description = '功能刀具清单'
name = fields.Char('功能刀具名称', required=True)
type = fields.Char('类型')
prefix = fields.Char('前缀')
postfix = fields.Char('后缀')
diameter = fields.Float('直径(mm)')
angle = fields.Float('R角(mm)')
tool_length = fields.Float('刀具总长(mm)')
blade_length = fields.Float('避空长/刃长(mm)')
knife_head_name = fields.Char('刀头名称')
cutter_number = fields.Char('刀号')
blade_number = fields.Integer('刃数(个)')
extension = fields.Float('伸出长度(mm)')
active = fields.Boolean('已归档', default=True)

View File

@@ -192,4 +192,11 @@ access_sf_machine_brand_tags_group_purchase_director,sf_machine_brand_tags_group
access_printer,printer,model_printer,base.group_user,1,1,1,1
access_printer_configuration,printer.configuration,model_printer_configuration,base.group_user,1,1,1,1
access_printer_configuration,printer.configuration,model_printer_configuration,base.group_user,1,1,1,1
access_group_sf_mrp_user,sf_tool_inventory,model_sf_tool_inventory,base.group_user,1,1,1,0
access_group_sf_mrp_user_admin,sf_tool_inventory_admin,model_sf_tool_inventory,base.group_system,1,1,1,0
access_group_sf_mrp_user_group_purchase_director,sf_tool_inventory_group_purchase_director,model_sf_tool_inventory,sf_base.group_purchase_director,1,0,1,0
access_group_sf_mrp_user_group_sale_director,sf_tool_inventory_group_sale_director,model_sf_tool_inventory,sf_base.group_sale_director,1,0,1,0
access_sf_cutting_tool_material_group_plan_director,sf_tool_inventory_group_plan_director,model_sf_tool_inventory,sf_base.group_plan_director,1,0,1,0
access_group_sf_mrp_user_group_sf_mrp_user,sf_tool_inventory_group_sf_mrp_user,model_sf_tool_inventory,sf_base.group_sf_mrp_user,1,1,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
192 access_group_sf_mrp_user_group_purchase_director sf_tool_inventory_group_purchase_director model_sf_tool_inventory sf_base.group_purchase_director 1 0 1 0
193 access_group_sf_mrp_user_group_sale_director sf_tool_inventory_group_sale_director model_sf_tool_inventory sf_base.group_sale_director 1 0 1 0
194 access_sf_cutting_tool_material_group_plan_director sf_tool_inventory_group_plan_director model_sf_tool_inventory sf_base.group_plan_director 1 0 1 0
195 access_group_sf_mrp_user_group_sf_mrp_user sf_tool_inventory_group_sf_mrp_user model_sf_tool_inventory sf_base.group_sf_mrp_user 1 1 0 0
196
197
198
199
200
201
202

View File

@@ -59,14 +59,14 @@
id="menu_sf_cutting_tool_type"
parent="menu_sf_cutting_tool"
name="刀具类型"
sequence="2"
sequence="10"
action="action_sf_cutting_tool_type"
/>
<menuitem
id="menu_sf_cutting_tool_standard_library"
parent="menu_sf_cutting_tool"
name="刀具标准库"
sequence="3"
sequence="20"
action="action_sf_cutting_tool_standard_library"
/>
<!-- 功能刀具 -->
@@ -82,7 +82,7 @@
id="menu_sf_functional_cutting_tool_model_type"
parent="menu_sf_cutting_tool"
name="功能刀具类型"
sequence="4"
sequence="30"
action="action_sf_functional_cutting_tool_model_type"
/>
@@ -91,14 +91,14 @@
name="能力特征库"
parent="menu_sf_cutting_tool"
action="action_maintenance_equipment_image"
sequence="5"/>
sequence="40"/>
<menuitem
id="menu_sf_tool_groups"
name="刀具组"
parent="menu_sf_cutting_tool"
action="sf_tool_groups_view_act"
sequence="10"/>
sequence="50"/>
</data>
</odoo>

View File

@@ -123,7 +123,7 @@
<form string="刀具标准库" delete="0" create="0" edit="0">
<sheet>
<field name="image" widget='image' class="oe_avatar"
required="1"/>
required="1"/>
<div class="oe_title">
<h1>
<field name="code" readonly="1" force_save="1"/>
@@ -547,7 +547,68 @@
<!-- <field name="cutting_depth"/>-->
<!-- </tree>-->
<!-- </field>-->
<!-- </record>-->
<!-- </record>-->'
<!-- ================================================功能刀具清单================================================ -->
<record id="view_tool_inventory_tree" model="ir.ui.view">
<field name="name">sf.tool.inventory.tree</field>
<field name="model">sf.tool.inventory</field>
<field name="arch" type="xml">
<tree string="功能刀具清单" create="1" edit="1" delete="0" editable="bottom">
<field name="name"/>
<field name="type"/>
<field name="prefix"/>
<field name="postfix"/>
<field name="diameter"/>
<field name="angle"/>
<field name="tool_length"/>
<field name="blade_length"/>
<field name="knife_head_name"/>
<field name="cutter_number"/>
<field name="blade_number"/>
<field name="extension"/>
<field name="create_uid" string="创建人" optional="hide"/>
<field name="create_date" string="创建时间" optional="hide"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_cutting_tool_material_search">
<field name="name">sf.tool.inventory.search</field>
<field name="model">sf.tool.inventory</field>
<field name="arch" type="xml">
<search string="功能刀具清单">
<field name="name" string="名称搜索" filter_domain="[('name','ilike',self)]"/>
<field name="type"/>
<field name="prefix"/>
<field name="postfix"/>
<field name="diameter"/>
<field name="angle"/>
<field name="tool_length"/>
<field name="blade_length"/>
<field name="knife_head_name"/>
<field name="cutter_number"/>
<field name="blade_number"/>
<field name="extension"/>
<filter name="filter_active" string="已归档" domain="[('active','=',False)]"/>
</search>
</field>
</record>
<record id="action_sf_tool_inventory" model="ir.actions.act_window">
<field name="name">功能刀具清单</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sf.tool.inventory</field>
<field name="view_mode">tree</field>
</record>
<menuitem
id="menu_sf_tool_inventory"
parent="menu_sf_cutting_tool"
name="功能刀具清单"
sequence="25"
action="action_sf_tool_inventory"
/>
</odoo>

View File

@@ -309,7 +309,8 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
_name = 'sf.real.time.distribution.of.functional.tools'
_description = '功能刀具安全库存'
name = fields.Char('功能刀具名称', readonly=True, compute='_compute_name')
name = fields.Char('名称', readonly=True, compute='_compute_name', store=True)
functional_name_id = fields.Many2one('sf.tool.inventory', string='功能刀具名称', required=True)
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', readonly=False, required=True)
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)
@@ -355,13 +356,13 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
active = fields.Boolean(string='已归档', default=True)
@api.depends('tool_groups_id', 'diameter', 'knife_tip_r_angle')
@api.depends('functional_name_id')
def _compute_name(self):
for obj in self:
if obj.tool_groups_id:
obj.sudo().name = '%s-D%sR%s' % (obj.tool_groups_id.name, obj.diameter, obj.knife_tip_r_angle)
obj.name = obj.functional_name_id.name
else:
obj.sudo().name = None
obj.sudo().name = ''
@api.constrains('min_stock_num', 'max_stock_num')
def _check_stock_num(self):
@@ -452,7 +453,8 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
"""
# 根据功能刀具名称、刀具组、直径或尖刀R角、粗/中/精查询该功能刀具是否已经存在
record = self.env['sf.real.time.distribution.of.functional.tools'].search(
[('name', '=', vals['name']), ('sf_cutting_tool_type_id', '=', vals['sf_cutting_tool_type_id']),
[('functional_name_id', '=', vals['functional_name_id']),
('sf_cutting_tool_type_id', '=', vals['sf_cutting_tool_type_id']),
('diameter', '=', vals['diameter']), ('knife_tip_r_angle', '=', vals['knife_tip_r_angle']),
('coarse_middle_thin', '=', vals['coarse_middle_thin']), ('tool_groups_id', '=', vals['tool_groups_id'])])
if len(record) > 0:

View File

@@ -299,7 +299,8 @@
<field name="model">sf.real.time.distribution.of.functional.tools</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="name" invisible="1"/>
<field name="functional_name_id"/>
<field name="sf_cutting_tool_type_id" invisible="True"/>
<field name="tool_groups_id"/>
<field name="diameter"/>
@@ -329,9 +330,11 @@
<sheet>
<div class="oe_title">
<h1>
<field name="name"/>
<field name="functional_name_id" placeholder="请选择"
attrs="{'readonly': [('status_create', '=', False)]}"/>
</h1>
</div>
<field name="name" invisible="1"/>
<field name="status_create" invisible="1"/>
<group>
<group>

View File

@@ -358,10 +358,11 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
item.rfid = None
# 组装功能刀具参数信息
after_name_id = fields.Many2one('sf.tool.inventory', string='功能刀具名称', required=True)
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号')
rfid = fields.Char('Rfid', readonly=True, store=True, compute='_compute_rfid')
tool_code = fields.Char(string='功能刀具编码', readonly=True, compute='_compute_tool_code')
after_assembly_functional_tool_name = fields.Char(string='组装后功能刀具名称', compute='_compute_name')
after_assembly_functional_tool_name = fields.Char(string='组装后功能刀具名称', compute='_compute_name', store=True)
after_assembly_functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model',
string='组装后功能刀具类型',
compute='_compute_after_assembly_functional_tool_type_id')
@@ -428,15 +429,13 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
num = "%03d" % m
return num
@api.depends('after_assembly_functional_tool_diameter', 'after_assembly_knife_tip_r_angle', 'tool_groups_id')
@api.depends('after_name_id')
def _compute_name(self):
for obj in self:
if obj.tool_groups_id:
obj.after_assembly_functional_tool_name = '%s-D%sR%s' % (
obj.tool_groups_id.name, obj.after_assembly_functional_tool_diameter,
obj.after_assembly_knife_tip_r_angle)
if obj.after_name_id:
obj.after_assembly_functional_tool_name = obj.after_name_id.name
else:
obj.after_assembly_functional_tool_name = None
obj.after_assembly_functional_tool_name = ''
@api.onchange('integral_code_id')
def _onchange_after_assembly_functional_tool_diameter(self):
@@ -530,7 +529,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
record_1 = self.env['sf.functional.cutting.tool.entity'].create(desc_2)
# 创建安全库存信息
self.env['sf.real.time.distribution.of.functional.tools'].create_or_edit_safety_stock({
'name': self.after_assembly_functional_tool_name,
'functional_name_id': self.after_name_id.id,
'sf_cutting_tool_type_id': self.after_assembly_functional_tool_type_id.id,
'tool_groups_id': self.tool_groups_id.id,
'diameter': self.after_assembly_functional_tool_diameter,

View File

@@ -342,7 +342,8 @@
<field name="barcode_id" invisible="True"/>
<field name="tool_code" readonly="True"/>
<field name="rfid" placeholder="请输入rfid码" class="custom_required"/>
<field name="after_assembly_functional_tool_name" string="功能刀具名称"/>
<field name="after_name_id" string="功能刀具名称"/>
<field name="after_assembly_functional_tool_name" string="功能刀具名称" invisible="1"/>
<field name="after_assembly_functional_tool_type_id" string="功能刀具类型"
options="{'no_create': True, 'no_quick_create': True}"/>
<field name="tool_groups_id"/>