1、新增功能刀具清单模型,及其tree视图、权限;2、功能刀具安全库存模型和功能刀具组装单模型新增功能刀具名称关联功能刀具清单,优化功能刀具组装流程生成功能刀具安全库存信息的流程
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
Reference in New Issue
Block a user