Merge branch 'develop' into feature/tree视图表格样式修改

# Conflicts:
#	sf_manufacturing/static/src/xml/kanban_change.xml
This commit is contained in:
WEB许何哲\xuhez
2023-08-03 17:34:54 +08:00
39 changed files with 37817 additions and 1735 deletions

View File

@@ -18,7 +18,7 @@
<field name="title"/>
<field name="product_ids" widget="many2many_tags"/>
<field name="product_category_ids" widget="many2many_tags"/>
<field name="picking_type_ids" string="Operations" widget="many2many_tags"/>
<field name="picking_type_ids" string="作业类型" widget="many2many_tags"/>
<field name="company_id" groups="base.group_multi_company"/>
</group>
<group>
@@ -112,7 +112,7 @@
<field name="title" optional="show"/>
<field name="product_ids" widget="many2many_tags" optional="show"/>
<field name="product_category_ids" widget="many2many_tags" optional="hide"/>
<field name="picking_type_ids" widget="many2many_tags" optional="show" string="Operations"/>
<field name="picking_type_ids" widget="many2many_tags" optional="show" string="作业类型"/>
<field name="test_type_id" optional="show" string="Type"/>
<field name="team_id" optional="show"/>
<field name="user_id" optional="hide" widget='many2one_avatar_user'/>

View File

@@ -10,7 +10,7 @@
""",
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
'depends': ['account', 'base', 'mrp'],
'depends': ['account', 'base', 'mrp_workorder'],
'data': [
'security/group_security.xml',
'security/ir.model.access.csv',

View File

@@ -31,13 +31,13 @@ class MachineBrand(models.Model):
_name = 'sf.machine.brand'
_description = '品牌'
code = fields.Char('编码')
name = fields.Char('名称')
tag_ids = fields.Many2many('sf.machine.brand.tags', 'rel_machine_brand_tags', string='类别')
image_brand = fields.Image("品牌图片")
manufacturer_model_number = fields.Char('厂家型号', size=10)
remark = fields.Text('备注')
active = fields.Boolean('有效', default=True)
code = fields.Char('编码')
# 机床
class MachineTool(models.Model):

View File

@@ -1,4 +1,8 @@
from odoo import models, fields, api
from odoo.addons.sf_base.commons.common import Common
from odoo.exceptions import ValidationError
import requests
import json
class FixtureMaterial(models.Model):
@@ -29,7 +33,7 @@ class FixtureModel(models.Model):
code = fields.Char(string='编码')
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')
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="品牌")
manufacturer_model_number = fields.Char(string="厂家型号")
@@ -40,14 +44,17 @@ class FixtureModel(models.Model):
width = fields.Char(string="宽度[mm]", size=6)
height = fields.Char(string="高度[mm]", size=6)
weight = fields.Char(string="重量[kg]", size=4)
clamp_workpiece_length_max = fields.Char(string="夹持工件长度MAX[mm]", size=6)
clamp_workpiece_width_max = fields.Char(string="夹持工件宽度MAX[mm]", size=6)
clamp_workpiece_height_max = fields.Char(string="夹持工件高度MAX[mm]", size=6)
clamp_workpiece_diameter_max = fields.Char(string="夹持工件直径MAX[mm]", size=6)
maximum_carrying_weight = fields.Char(string="最大承载重量[kg]", size=4)
maximum_clamping_force = fields.Char(string="最大夹持力[n]", size=8)
clamp_workpiece_length_max = fields.Integer(string="夹持工件长度MAX[mm]", size=6)
clamp_workpiece_width_max = fields.Integer(string="夹持工件宽度MAX[mm]", size=6)
clamp_workpiece_height_max = fields.Integer(string="夹持工件高度MAX[mm]", size=6)
clamp_workpiece_diameter_max = fields.Float(string="夹持工件直径MAX[mm]", size=6)
maximum_carrying_weight = fields.Float(string="最大承载重量[kg]", size=4)
maximum_clamping_force = fields.Integer(string="最大夹持力[n]", size=8)
materials_model_id = fields.Many2one('sf.materials.model', string="材料型号")
driving_way = fields.Char(string="驱动方式")
apply_machine_tool_type_id = fields.Many2one('sf.machine_tool.type', 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]", size=6)
screw_size = fields.Integer(string="螺牙大小[mm]", size=6)

View File

@@ -1,4 +1,8 @@
from odoo import models, fields, api
from odoo.addons.sf_base.commons.common import Common
from odoo.exceptions import ValidationError
import requests
import json
class FunctionalFixtureType(models.Model):
@@ -16,7 +20,6 @@ class FunctionalFixture(models.Model):
_description = "功能夹具"
code = fields.Char(string='编码', readonly=True)
name = fields.Char(string="名称", size=15, required=True)
type_id = fields.Many2one('sf.functional.fixture.type', string="功能夹具类型", required=True)
type = fields.Char(related='type_id.name', string="功能夹具类别", store=True)
zero_chuck_model_ids = fields.Many2many('sf.fixture.model', 'rel_fixture_model_zero_chuck', string="零点卡盘型号",
@@ -33,11 +36,124 @@ class FunctionalFixture(models.Model):
domain=[('fixture_material_type', '=', '磁吸托盘')])
vice_tray_model_ids = fields.Many2many('sf.fixture.model', 'rel_fixture_model_vice_tray', string="虎钳托盘型号",
domain=[('fixture_material_type', '=', '虎钳托盘')])
registration_status = fields.Selection([("已注册", "已注册"), ("未注册", "未注册")], string="注册状态", default='未注册', tracking=True)
def _get_fixture_model_ids(self, fixture_model_code):
fixture_model_ids = []
for item in fixture_model_code:
fixture_model = self.env['sf.fixture.model'].search([('code', '=', item)])
if fixture_model:
fixture_model_ids.append(fixture_model.id)
return [(6, 0, fixture_model_ids)]
@api.onchange('type_id')
def _onchange_type_id(self):
if self.type_id:
functional_fixture_type = self.search(
[('type', '=', self.type)], limit=1, order='id desc')
if not functional_fixture_type:
num = "%04d" % 1
else:
m = int(functional_fixture_type.code[-3:]) + 1
num = "%04d" % m
self.code = "%s%s-%s" % ('JKM-C-GNJJ-', self.type_id.code, num)
_sql_constraints = [
('code_uniq', 'unique (code)',
'编码不能重复')
]
@api.depends('transfer_tray_model_ids', 'pneumatic_tray_model_ids', 'magnetic_tray_model_ids',
'vice_tray_model_ids', 'type')
def _get_name(self):
for record in self:
if record.type:
if not record.transfer_tray_model_ids and not record.pneumatic_tray_model_ids and not record.magnetic_tray_model_ids and not record.vice_tray_model_ids:
record.name = ''
if record.transfer_tray_model_ids:
for i in record.transfer_tray_model_ids:
record.name = '%s%s%s' % (
i.display_name.split('-')[0], record.type, '功能夹具')
if record.pneumatic_tray_model_ids:
for i in record.pneumatic_tray_model_ids:
record.name = '%s%s%s' % (
i.display_name.split('-')[0], record.type, '功能夹具')
if record.magnetic_tray_model_ids:
for i in record.magnetic_tray_model_ids:
record.name = '%s%s%s' % (
i.display_name.split('-')[0], record.type, '功能夹具')
if record.vice_tray_model_ids:
for i in record.vice_tray_model_ids:
record.name = '%s%s%s' % (
i.display_name.split('-')[0], record.type, '功能夹具')
else:
record.name = ''
name = fields.Char(string="名称", compute=_get_name, readonly=True)
def _json_zero_chuck_model_item_code(self, item):
code_arr = []
for i in item.zero_chuck_model_ids:
code_arr.append(i.code)
return code_arr
def _json_transfer_tray_model_item_code(self, item):
code_arr = []
for i in item.transfer_tray_model_ids:
code_arr.append(i.code)
return code_arr
def _json_vice_tray_item_code(self, item):
code_arr = []
for i in item.vice_tray_model_ids:
code_arr.append(i.code)
return code_arr
def _json_magnetic_tray_model_item_code(self, item):
code_arr = []
for i in item.magnetic_tray_model_ids:
code_arr.append(i.code)
return code_arr
def _json_pneumatic_tray_model_item_code(self, item):
code_arr = []
for i in item.pneumatic_tray_model_ids:
code_arr.append(i.code)
return code_arr
# 注册到cloud的功能夹具中
def register_functional_fixture(self):
registration_url = 'api/functional_fixture/create'
sf_sync_config = self.env['res.config.settings'].get_values()
token = sf_sync_config['token']
sf_secret_key = sf_sync_config['sf_secret_key']
headers = Common.get_headers(self, token, sf_secret_key)
strurl = sf_sync_config['sf_url'] + self.registration_url
objs_self = self.search([('code', '=', self.code)])
functional_fixture_list = []
if objs_self:
for item in objs_self:
val = {
'factory_token': token,
'name': item.name,
'code': item.code,
'type_code': self.env['sf.functional.fixture.type'].search(
[('id', '=', item.type_id.id)]).code,
'zero_chuck_model_codes': self.env['sf.functional.fixture']._json_zero_chuck_model_item_code(
item),
'transfer_tray_model_codes': self.env['sf.functional.fixture']._json_transfer_tray_model_item_code(
item),
'pneumatic_tray_model_codes': self.env[
'sf.functional.fixture']._json_pneumatic_tray_model_item_code(
item),
'magnetic_tray_model_codes': self.env['sf.functional.fixture']._json_magnetic_tray_model_item_code(
item),
'vice_tray_model_codes': self.env['sf.functional.fixture']._json_vice_tray_item_code(
item),
}
functional_fixture_list.append(val)
# kw = machine_tool_list
kw = json.dumps(functional_fixture_list, ensure_ascii=False)
r = requests.post(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers)
ret = r.json()
self.code = ret['message']
if r == 200:
self.registration_status = "已注册"
return "功能夹具注册成功"
else:
raise ValidationError("没有功能夹具注册信息")

View File

@@ -31,37 +31,43 @@
</field>
</record>
<!-- <record model="ir.ui.view" id="form_sf_machine_brand">-->
<!-- <field name="name">form.sf.machine.brand</field>-->
<!-- <field name="model">sf.machine.brand</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <form string="品牌">-->
<!-- &lt;!&ndash; <widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>&ndash;&gt;-->
<!-- <field name="image_brand" widget='image' class="oe_avatar" options="{'preview_image': 'image_128'}"/>-->
<record model="ir.ui.view" id="form_sf_machine_brand">
<field name="name">form.sf.machine.brand</field>
<field name="model">sf.machine.brand</field>
<field name="arch" type="xml">
<form string="品牌" create="0" edit="0" delete="0">
<sheet>
<!-- <widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>-->
<field name="image_brand" widget='image' class="oe_avatar"
options="{'preview_image': 'image_128'}" string="log"/>
<!-- <div class="oe_title">-->
<!-- <label for="code" string="编码"/>-->
<!-- <h2 class="d-flex">-->
<!-- <field name="code" readonly="True"/>-->
<!-- </h2>-->
<!-- </div>-->
<!-- <group>-->
<!-- <group>-->
<!-- <field name="name" required="True"/>-->
<!-- <field name="tag_ids"-->
<!-- widget="many2many_tags"-->
<!-- options="{'color_field': 'color', 'no_create_edit': True}"-->
<!-- required="True"/>-->
<!-- </group>-->
<!-- </group>-->
<!-- </form>-->
<!-- </field>-->
<!-- </record>-->
<group>
<group>
<field name="code"/>
<field name="name"/>
<field name="tag_ids"
widget="many2many_tags"
options="{'color_field': 'color', 'no_create_edit': True}"
/>
<field name="manufacturer_model_number"/>
<field name="remark"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_sf_machine_brand" model="ir.actions.act_window">
<field name="name">品牌</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sf.machine.brand</field>
<field name="view_mode">tree</field>
<field name="view_mode">tree,form</field>
</record>
#------------------机床型号------------------
@@ -81,7 +87,7 @@
<field name="name">tree.sf.machine_tool.type</field>
<field name="model">sf.machine_tool.type</field>
<field name="arch" type="xml">
<tree string="机床型号" create="0" edit="0" delete="0">
<tree string="机床型号">
<field name="code"/>
<field name="name"/>
<field name="brand_id"/>
@@ -96,49 +102,70 @@
<field name="model">sf.machine_tool.type</field>
<field name="arch" type="xml">
<form string="机床型号" create="0" edit="0" delete="0">
<group string="基本信息">
<sheet>
<group>
<group>
<field name="code" force_save="1" readonly="1"/>
<field name="name" required="1"/>
<field name="machine_tool_category" required="1"/>
<field name="brand_id" required="1"
domain="[('tag_ids', '=', '机床')]"
options="{'no_create': True}"/>
<field name="machine_tool_category" required="1"/>
</group>
<group>
<field name="machine_tool_picture" widget="image" nolabel="1"/>
</group>
</group>
<group string="参数">
<notebook>
<page string="基本信息">
<group>
<group string="基础参数">
<field name="control_system_id" required="1" options="{'no_create': True}"/>
<field name="workbench_L" required="1"/>
<field name="workbench_W" required="1"/>
<field name="machine_tool_L" required="1"/>
<field name="machine_tool_W" required="1"/>
<field name="machine_tool_H" required="1"/>
<field name="knife_type" required="1"/>
<label for="workbench_L" string="工作台尺寸(mm)"/>
<div class="test_model">
<label for="workbench_L" string=""/>
<field name="workbench_L" class="o_address_zip" required="1"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="workbench_W" string="宽"/>
<field name="workbench_W" class="o_address_zip" required="1"
options="{'format': false}"/>
</div>
<label for="machine_tool_L" string="机床尺寸(mm)"/>
<div class="test_model">
<label for="machine_tool_L" string="长"/>
<field name="machine_tool_L" class="o_address_zip" required="1"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="machine_tool_W" string="宽"/>
<field name="machine_tool_W" class="o_address_zip" required="1"
options="{'format': false}"/>
<label for="machine_tool_H" string="高"/>
<field name="machine_tool_H" class="o_address_zip" required="1"
options="{'format': false}"/>
</div>
<field name="feed_speed" required="1"/>
<field name="precision" required="1" string="X轴定位精度(mm)"/>
<field name="workpiece_load" required="1"/>
<field name="lead_screw" required="1"/>
<field name="taper" required="1"/>
<field name="torque" required="1"/>
<field name="motor_power" required="1"/>
<field name="number_of_knife_library" required="1" options="{'format': false}"/>
<field name="number_of_axles" required="1" widget="radio" options="{'horizontal': true}"/>
<field name="lead_screw" required="1"/>
<field name="number_of_axles" required="1" widget="radio"
options="{'horizontal': true}"/>
<label for="x_axis" string="加工行程(mm)"
attrs="{'invisible': [('number_of_axles', '=', False)]}"/>
<div class="test_model"
attrs="{'invisible': [('number_of_axles', '=', False)]}">
<label for="x_axis" string="x"/>
<field name="x_axis" class="o_address_zip" required="1" options="{'format': false}"/>
<field name="x_axis" class="o_address_zip" required="1"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="y_axis" string="y"/>
<field name="y_axis" class="o_address_zip" required="1" options="{'format': false}"/>
<field name="y_axis" class="o_address_zip" required="1"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="z_axis" string="z"/>
<field name="z_axis" class="o_address_zip" required="1" options="{'format': false}"/>
<field name="z_axis" class="o_address_zip" required="1"
options="{'format': false}"/>
<br></br>
<label for="b_axis" string="b"
attrs="{'invisible': [('number_of_axles', '=', '三轴')]}"/>
@@ -153,24 +180,32 @@
options="{'format': false}"/>
</div>
</group>
<group>
<group string="主轴">
<field name="taper" required="1"/>
<field name="rotate_speed" string="主轴转速(min)" required="1"
options="{'format': false}"/>
<field name="heightened_way" required="1"/>
<field name="tool_quality_max" required="1"/>
<field name="torque" required="1"/>
<field name="motor_power" required="1"/>
<field name="distance" required="1"/>
</group>
<group>
<field name="guide_rail" required="1"/>
</group>
<group string="刀具">
<field name="knife_type" required="1"/>
<field name="tool_speed" required="1"/>
<field name="tool_long_max" required="1"/>
<field name="tool_diameter_max" required="1"/>
<field name="guide_rail" required="1"/>
<field name="feed_speed" required="1"/>
<field name="tool_speed" required="1"/>
<field name="distance" required="1"/>
<field name="rotate_speed" string="主轴转速(min)" required="1" options="{'format': false}"/>
<field name="precision" required="1" string="X轴定位精度(mm)(mm)"/>
<field name="tool_quality_max" required="1"/>
</group>
</group>
<group string="其它">
<field name="remark"/>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
@@ -207,7 +242,7 @@
<field name="name">tree.sf.machine_tool.category</field>
<field name="model">sf.machine_tool.category</field>
<field name="arch" type="xml">
<tree string="机床类型">
<tree string="机床类型" create="0" edit="0" delete="0">
<field name="code"/>
<field name="name"/>
<field name="category"/>
@@ -216,42 +251,35 @@
</field>
</record>
<record model="ir.ui.view" id="form_sf_machine_tool_category">
<field name="name">form.sf.machine_tool.category</field>
<field name="model">sf.machine_tool.category</field>
<field name="arch" type="xml">
<form string="机床类型">
<group string="基本信息" name="base_info">
<group>
<field name="code" force_save="1" readonly="1"/>
<field name="name" required="1"/>
</group>
<group>
<field name="category" readonly="1"/>
</group>
</group>
<!-- <record model="ir.ui.view" id="form_sf_machine_tool_category">-->
<!-- <field name="name">form.sf.machine_tool.category</field>-->
<!-- <field name="model">sf.machine_tool.category</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <form string="机床类型">-->
<!-- <group string="基本信息" name="base_info">-->
<!-- <group>-->
<!-- <field name="code" force_save="1" readonly="1"/>-->
<!-- <field name="name" required="1"/>-->
<!-- </group>-->
<!-- <group>-->
<!-- <field name="category" readonly="1"/>-->
<!-- </group>-->
<!-- </group>-->
<group string="其它">
<field name="remark"/>
</group>
<!-- <group string="其它">-->
<!-- <field name="remark"/>-->
<!-- </group>-->
</form>
</field>
</record>
<!-- </form>-->
<!-- </field>-->
<!-- </record>-->
<record id="action_sf_machine_tool_category" model="ir.actions.act_window">
<field name="name">机床类型</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sf.machine_tool.category</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
[机床类型] 还没有哦!点左上角的[创建]按钮,沙发归你了!
</p>
<p>
</p>
</field>
<field name="view_mode">tree</field>
</record>
#------------------机床注册------------------
@@ -378,13 +406,13 @@
</field>
</record>
#------------------控系统------------------
#------------------控系统------------------
<record model="ir.ui.view" id="search_sf_machine_control_system_view">
<field name="name">search.sf.machine.control_system</field>
<field name="model">sf.machine.control_system</field>
<field name="arch" type="xml">
<search string="控系统">
<search string="控系统">
<field name="name" string="模糊搜索"
filter_domain="['|',('name', 'ilike', self),('code', 'ilike', self)]"/>
</search>
@@ -395,7 +423,7 @@
<field name="name">tree.sf.machine.control_system</field>
<field name="model">sf.machine.control_system</field>
<field name="arch" type="xml">
<tree string="控系统" create="0" edit="0" delete="0">
<tree string="控系统" create="0" edit="0" delete="0">
<field name="code"/>
<field name="name"/>
<field name="brand_id"/>
@@ -424,7 +452,7 @@
<!-- </record>-->
<record id="action_sf_machine_control_system" model="ir.actions.act_window">
<field name="name">系统</field>
<field name="name">控系统</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sf.machine.control_system</field>
<field name="view_mode">tree</field>

View File

@@ -2,24 +2,24 @@
<odoo>
<data>
<!--加工工艺-->
<record model="ir.ui.view" id="sf_processing_technology_form">
<field name="model">sf.processing.technology</field>
<field name="arch" type="xml">
<form string="加工工艺" create="0" edit="0" delete="0">
<group>
<group>
<field name="process_encode" readonly="1"/>
</group>
<group>
<field name="name" required="1"/>
</group>
</group>
<group>
<field name="remark"/>
</group>
</form>
</field>
</record>
<!-- <record model="ir.ui.view" id="sf_processing_technology_form">-->
<!-- <field name="model">sf.processing.technology</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <form string="加工工艺" create="0" edit="0" delete="0">-->
<!-- <group>-->
<!-- <group>-->
<!-- <field name="process_encode" readonly="1"/>-->
<!-- </group>-->
<!-- <group>-->
<!-- <field name="name" required="1"/>-->
<!-- </group>-->
<!-- </group>-->
<!-- <group>-->
<!-- <field name="remark"/>-->
<!-- </group>-->
<!-- </form>-->
<!-- </field>-->
<!-- </record>-->
<record model="ir.ui.view" id="sf_processing_technology_tree">
<field name="model">sf.processing.technology</field>
<field name="arch" type="xml">
@@ -131,7 +131,7 @@
<sheet>
<group>
<group>
<field name="code" />
<field name="code"/>
<field name="name" string="参数名"/>
</group>
<group>
@@ -186,44 +186,50 @@
<record model="ir.ui.view" id="sf_materials_model_form">
<field name="model">sf.materials.model</field>
<field name="arch" type="xml">
<form string="材料型号" create="0" edit="0" delete="0">
<form string="材料型号" create="0" edit="1" delete="0">
<sheet>
<group>
<group>
<field name="materials_no" readonly="1"/>
<field name="name" required="1"/>
<field name="gain_way" required="1"/>
<field name="density" readonly="1"/>
</group>
<group>
<field name="density" required="1"/>
<field name="need_h" default="false"/>
<field name="mf_materia_post" attrs="{'invisible':[('need_h','=',False)]} "/>
<field name="name" readonly="1"/>
<field name="need_h" default="false" readonly="1"/>
<field name="mf_materia_post" attrs="{'invisible':[('need_h','=',False)]} "
readonly="1"/>
</group>
<group>
<field name='materials_id' default="default" invisible="1"/>
</group>
</group>
<group>
<notebook>
<page string="供应商">
<field name='supplier_ids'>
<tree editable='bottom'>
<field name="sequence" widget="handle" string="序号"/>
<field name="partner_id" string="名称"/>
</tree>
</field>
</group>
</page>
</notebook>
<group>
<field name="remark"/>
<field name="remark" readonly="1"/>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="sf_materials_model_tree">
<field name="model">sf.materials.model</field>
<field name="arch" type="xml">
<tree string="材料型号" create="0" edit="0" delete="0">
<field name="materials_no"/>
<field name="name"/>
<field name="need_h"/>
<field name="density"/>
<tree string="材料型号" create="0" delete="0">
<field name="materials_no" readonly="1"/>
<field name="name" readonly="1"/>
<field name="gain_way"/>
<field name="need_h" readonly="1"/>
<field name="density" readonly="1"/>
<field name='materials_id' invisible="1"/>
</tree>
</field>
@@ -247,13 +253,16 @@
<field name="model">sf.production.materials</field>
<field name="arch" type="xml">
<form string="材料" create="0" edit="0" delete="0">
<group string="详情">
<sheet>
<group>
<group>
<field name="materials_no" readonly="1" default="编码"/>
</group>
<group>
<field name="name" required="1"/>
</group>
<notebook>
<page string="型号">
<field name="materials_model_ids" widget="ony2many">
<tree string="材料型号">
<field name="materials_no"/>
@@ -264,11 +273,13 @@
<field name='materials_id' default="default" invisible="1"/>
</tree>
</field>
</page>
</notebook>
</group>
<group>
<field name="remark"/>
</group>
</sheet>
</form>
</field>
</record>
@@ -372,7 +383,8 @@
<header>
<field name='state' widget="radio" options="{'horizontal': True}"/>
</header>
<group string="基本信息" name="group1">
<sheet>
<group name="group1">
<group>
<field name="code" required="1"/>
</group>
@@ -380,6 +392,7 @@
<field name="name" required="1"/>
</group>
</group>
</sheet>
</form>
</field>
</record>

View File

@@ -177,15 +177,15 @@
<field name="arch" type="xml">
<form string="夹具型号" create="0" edit="0" delete="0">
<sheet>
<group string="基本信息">
<group>
<group>
<field name="code" force_save="1"/>
<field name="name"/>
<field name="brand_id"/>
<field name="brand_id" options="{'no_create': True}"/>
<field name="manufacturer_model_number"/>
<field name="fixture_material_id"/>
<field name="fixture_material_id" options="{'no_create': True}"/>
<field name="fixture_material_type" invisible="1"/>
<field name="multi_mounting_type_id"/>
<field name="multi_mounting_type_id" options="{'no_create': True}"/>
</group>
<group>
<!-- <field name="upload_model_file" widget="many2many_binary"/>-->
@@ -193,11 +193,13 @@
attrs="{'invisible': [('model_file', '=', False)]}"/>
</group>
</group>
<group string="参数"
<notebook>
<page string="参数"
attrs='{"invisible": [("fixture_material_type","not in",("气动托盘","转接板(锁板)托盘","磁吸托盘","虎钳托盘","零点卡盘"))]}'>
<group>
<label for="length" string="尺寸[mm]"/>
<div class="o_address_format">
<group>
<label for="length" string="尺寸(mm)"/>
<div class="test_model">
<label for="length" string="长"/>
<field name="length" class="o_address_zip"
options="{'format': false}"/>
@@ -211,9 +213,24 @@
options="{'format': false}"/>
</div>
<field name="weight"></field>
<label for="length" string="夹持工件最大尺寸[mm]"
<field name="materials_model_id" options="{'no_create': True}"/>
<field name="clamping_way"
attrs='{"invisible": [("fixture_material_type","not in",("气动托盘","磁吸托盘","虎钳托盘"))]}'/>
<field name="port_type"
attrs='{"invisible": [("fixture_material_type","not in",("气动托盘","磁吸托盘","虎钳托盘"))]}'/>
<field name="through_hole_size"
attrs='{"invisible": [("fixture_material_type","!=",("转接板(锁板)托盘"))]}'/>
<field name="screw_size"
attrs='{"invisible": [("fixture_material_type","!=",("转接板(锁板)托盘"))]}'/>
<field name="driving_way"
attrs='{"invisible": [("fixture_material_type","not in",("虎钳托盘","零点卡盘"))]}'/>
<field name="apply_machine_tool_type_ids" widget="many2many_tags"
attrs='{"invisible": [("fixture_material_type","!=",("零点卡盘"))]}'/>
</group>
<group>
<label for="length" string="夹持工件最大尺寸(mm)"
attrs='{"invisible": [("fixture_material_type","=",("零点卡盘"))]}'/>
<div class="o_address_format"
<div class="test_model"
attrs='{"invisible": [("fixture_material_type","=",("零点卡盘"))]}'>
<label for="clamp_workpiece_length_max" string="长"/>
<field name="clamp_workpiece_length_max" class="o_address_zip"
@@ -230,27 +247,14 @@
options="{'format': false}"
attrs="{'required': [('fixture_material_type', 'in',('气动托盘','转接板(锁板)托盘','磁吸托盘','虎钳托盘'))]}"/>
</div>
<field name="clamp_workpiece_diameter_max"
<field name="clamp_workpiece_diameter_max" string="夹持工件最大直径(mm)"
attrs="{'invisible': [('fixture_material_type','=','零点卡盘')],'required': [('fixture_material_type', 'in',('气动托盘','转接板(锁板)托盘','磁吸托盘','虎钳托盘'))]}"/>
<field name="maximum_carrying_weight"></field>
<field name="maximum_clamping_force"></field>
</group>
<group>
<field name="materials_model_id"/>
<field name="clamping_way"
attrs='{"invisible": [("fixture_material_type","not in",("气动托盘","磁吸托盘","虎钳托盘"))]}'/>
<field name="port_type"
attrs='{"invisible": [("fixture_material_type","not in",("气动托盘","磁吸托盘","虎钳托盘"))]}'/>
<field name="through_hole_size"
attrs='{"invisible": [("fixture_material_type","!=",("转接板(锁板)托盘"))]}'/>
<field name="screw_size"
attrs='{"invisible": [("fixture_material_type","!=",("转接板(锁板)托盘"))]}'/>
<field name="driving_way"
attrs='{"invisible": [("fixture_material_type","not in",("虎钳托盘","零点卡盘"))]}'/>
<field name="apply_machine_tool_type_id"
attrs='{"invisible": [("fixture_material_type","!=",("零点卡盘"))]}'/>
</group>
</group>
</page>
</notebook>
</sheet>
</form>
</field>

View File

@@ -81,7 +81,7 @@
<field name="name">功能夹具</field>
<field name="model">sf.functional.fixture</field>
<field name="arch" type="xml">
<tree string="功能夹具" create="0" edit="0" delete="0">
<tree string="功能夹具">
<field name="code"/>
<field name="name"/>
<field name="type_id"/>
@@ -93,7 +93,12 @@
<field name="name">功能夹具</field>
<field name="model">sf.functional.fixture</field>
<field name="arch" type="xml">
<form string="功能夹具" create="0" edit="0" delete="0">
<form string="功能夹具">
<!-- <header>-->
<!-- <field name="registration_status" invisible="1"/>-->
<!-- <button type="object" class="oe_highlight" name='register_functional_fixture' string="注册"-->
<!-- attrs="{'invisible': [('registration_status','=','已注册')]}"/>-->
<!-- </header>-->
<sheet>
<group string="基本信息">
<group>
@@ -101,15 +106,19 @@
<field name="name"/>
<field name="type_id"/>
<field name="type" invisible="1"/>
<field name="zero_chuck_model_ids" widget="many2many_tags"/>
<field name="zero_chuck_model_ids" widget="many2many_tags" options="{'no_create': True}"/>
<field name="transfer_tray_model_ids" widget="many2many_tags"
attrs="{'invisible': [('type', '!=', '转接板(锁板)式')]}"/>
options="{'no_create': True}"
attrs='{"invisible": [("type","!=","转接板(锁板)式")],"required": [("type", "=", "转接板(锁板)式")]}'/>
<field name="pneumatic_tray_model_ids" widget="many2many_tags"
attrs="{'invisible': [('type', '!=', '气动式')]}"/>
options="{'no_create': True}"
attrs='{"invisible": [("type","!=","气动式")],"required": [("type", "=", "气动式")]}'/>
<field name="magnetic_tray_model_ids" widget="many2many_tags"
attrs="{'invisible': [('type', '!=', '磁吸式')]}"/>
options="{'no_create': True}"
attrs='{"invisible": [("type","!=","磁吸式")],"required": [("type", "=", "磁吸式")]}'/>
<field name="vice_tray_model_ids" widget="many2many_tags"
attrs="{'invisible': [('type', '!=', '虎钳式')]}"/>
options="{'no_create': True}"
attrs='{"invisible": [("type","!=","虎钳式")],"required": [("type", "=", "虎钳式")]}'/>
</group>
</group>
</sheet>

View File

@@ -22,13 +22,13 @@
sequence="3"
/>
<menuitem
id="menu_sf_machine_tool"
parent="menu_sf_machine_tool_first"
name="机床"
sequence="0"
action="action_sf_machine_tool"
/>
<!-- <menuitem -->
<!-- id="menu_sf_machine_tool" -->
<!-- parent="menu_sf_machine_tool_first" -->
<!-- name="机床" -->
<!-- sequence="0" -->
<!-- action="action_sf_machine_tool" -->
<!-- /> -->
<menuitem
id="menu_sf_machine_tool_category"
@@ -139,7 +139,7 @@
<menuitem
id="menu_sf_machine_control_system"
parent="menu_sf_base"
name="控系统"
name="控系统"
sequence="1"
action="action_sf_machine_control_system"/>

View File

@@ -7,14 +7,14 @@
<field name="name">刀具物料</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sf.cutting.tool.material</field>
<field name="view_mode">tree,form</field>
<field name="view_mode">tree</field>
</record>
<!-- 刀具类型action -->
<record id="action_sf_cutting_tool_type" model="ir.actions.act_window">
<field name="name">刀具类型</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sf.cutting.tool.type</field>
<field name="view_mode">tree,form</field>
<field name="view_mode">tree</field>
</record>
<!-- 刀具型号action -->
<record id="action_sf_cutting_tool" model="ir.actions.act_window">
@@ -35,7 +35,7 @@
<field name="name">功能刀具类型</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sf.functional.cutting.tool.model</field>
<field name="view_mode">tree,form</field>
<field name="view_mode">tree</field>
</record>
<!-- 刀具 -->

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<!-- ================================================刀具物料================================================ -->
<!-- ================================================刀具物料================================================ -->
<record id="view_cutting_tool_material_tree" model="ir.ui.view">
<field name="name">sf.cutting.tool.material.tree</field>
<field name="model">sf.cutting.tool.material</field>
<field name="arch" type="xml">
<tree string="刀具物料">
<tree string="刀具物料" create="0" edit="0" delete="0">
<field name="code"/>
<field name="name"/>
<field name="remark"/>
@@ -14,28 +14,28 @@
</field>
</record>
<record id="view_cutting_tool_material_form" model="ir.ui.view">
<field name="name">sf.cutting.tool.material.form</field>
<field name="model">sf.cutting.tool.material</field>
<field name="arch" type="xml">
<form string="刀具物料">
<sheet>
<group col='1'>
<group string='基本信息'>
<group>
<field name="code"/>
<field name="name"/>
</group>
<group>
<field name="remark"/>
</group>
<!-- <record id="view_cutting_tool_material_form" model="ir.ui.view">-->
<!-- <field name="name">sf.cutting.tool.material.form</field>-->
<!-- <field name="model">sf.cutting.tool.material</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <form string="刀具物料">-->
<!-- <sheet>-->
<!-- <group col='1'>-->
<!-- <group string='基本信息'>-->
<!-- <group>-->
<!-- <field name="code"/>-->
<!-- <field name="name"/>-->
<!-- </group>-->
<!-- <group>-->
<!-- <field name="remark"/>-->
<!-- </group>-->
</group>
</group>
</sheet>
</form>
</field>
</record>
<!-- </group>-->
<!-- </group>-->
<!-- </sheet>-->
<!-- </form>-->
<!-- </field>-->
<!-- </record>-->
<record model="ir.ui.view" id="view_cutting_tool_material_search">
<field name="name">sf.cutting.tool.material.search</field>
@@ -49,7 +49,7 @@
</field>
</record>
<!-- ================================================功能刀具================================================ -->
<!-- ================================================功能刀具================================================ -->
<record id="view_functional_cutting_tool_tree" model="ir.ui.view">
<field name="name">sf.functional.cutting.tool.tree</field>
<field name="model">sf.functional.cutting.tool</field>
@@ -80,14 +80,29 @@
<group>
<field name="code"/>
<field name="name"/>
<field name="mrs_cutting_tool_type_id" options="{'no_create': True, 'no_quick_create': True}"/>
<field name="mrs_cutting_tool_model_id" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': True}"/>
<field name="mrs_cutting_tool_integral_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="mrs_cutting_tool_blade_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="mrs_cutting_tool_cutterbar_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="mrs_cutting_tool_cutterpad_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="mrs_cutting_tool_cutterhandle_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="mrs_cutting_tool_cutterhead_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="mrs_cutting_tool_type_id"
options="{'no_create': True, 'no_quick_create': True}"/>
<field name="mrs_cutting_tool_model_id"
options="{'no_create': True, 'no_quick_create': True}"
attrs="{'invisible': True}"/>
<field name="mrs_cutting_tool_integral_model_ids"
options="{'no_create': True, 'no_quick_create': True}"
widget="many2many_tags"/>
<field name="mrs_cutting_tool_blade_model_ids"
options="{'no_create': True, 'no_quick_create': True}"
widget="many2many_tags"/>
<field name="mrs_cutting_tool_cutterbar_model_ids"
options="{'no_create': True, 'no_quick_create': True}"
widget="many2many_tags"/>
<field name="mrs_cutting_tool_cutterpad_model_ids"
options="{'no_create': True, 'no_quick_create': True}"
widget="many2many_tags"/>
<field name="mrs_cutting_tool_cutterhandle_model_ids"
options="{'no_create': True, 'no_quick_create': True}"
widget="many2many_tags"/>
<field name="mrs_cutting_tool_cutterhead_model_ids"
options="{'no_create': True, 'no_quick_create': True}"
widget="many2many_tags"/>
</group>
<group>
<field name="image" nolabel="1" widget="image"/>
@@ -132,39 +147,39 @@
</record>
<!-- ================================================功能刀具类型================================================ -->
<!-- ================================================功能刀具类型================================================ -->
<record id="view_cutter_function_tree" model="ir.ui.view">
<field name="name">sf.cutter.function.tree</field>
<field name="model">sf.functional.cutting.tool.model</field>
<field name="arch" type="xml">
<tree string="功能刀具类型">
<tree string="功能刀具类型" create="0" delete="0" edit="0">
<field name="name"/>
<field name="code"/>
<field name="remark"/>
</tree>
</field>
</record>
<record id="view_cutter_function_form" model="ir.ui.view">
<field name="name">sf.cutter.function.form</field>
<field name="model">sf.functional.cutting.tool.model</field>
<field name="arch" type="xml">
<form string="功能刀具类型">
<sheet>
<group string="功能刀具类型">
<group>
<field name="code"/>
<field name="name"/>
</group>
<group>
<field name="remark"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<!-- <record id="view_cutter_function_form" model="ir.ui.view">-->
<!-- <field name="name">sf.cutter.function.form</field>-->
<!-- <field name="model">sf.functional.cutting.tool.model</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <form string="功能刀具类型">-->
<!-- <sheet>-->
<!-- <group string="功能刀具类型">-->
<!-- <group>-->
<!-- <field name="code"/>-->
<!-- <field name="name"/>-->
<!-- </group>-->
<!-- <group>-->
<!-- <field name="remark"/>-->
<!-- </group>-->
<!-- </group>-->
<!-- </sheet>-->
<!-- </form>-->
<!-- </field>-->
<!-- </record>-->
<!-- 功能刀具类型搜索 -->
<!-- 功能刀具类型搜索 -->
<record model="ir.ui.view" id="view_cutter_function_search">
<field name="name">sf.cutter.function.search</field>
<field name="model">sf.functional.cutting.tool.model</field>
@@ -176,7 +191,7 @@
</field>
</record>
<!-- ================================================刀具型号================================================ -->
<!-- ================================================刀具型号================================================ -->
<record id="view_cutting_tool_model_tree" model="ir.ui.view">
<field name="name">sf.cutting.tool.model.tree</field>
<field name="model">sf.cutting.tool.model</field>
@@ -201,10 +216,14 @@
<group>
<field name="code"/>
<field name="name"/>
<field name="mrs_cutting_tool_material_id" options="{'no_create': True, 'no_quick_create': True}"/>
<field name="mrs_machine_brand_id" options="{'no_create': True, 'no_quick_create': True}"/>
<field name="mrs_materials_model_id" options="{'no_create': True, 'no_quick_create': True}"/>
<field name="mrs_cutting_tool_type_id" options="{'no_create': True, 'no_quick_create': True}"/>
<field name="mrs_cutting_tool_material_id"
options="{'no_create': True, 'no_quick_create': True}"/>
<field name="mrs_machine_brand_id"
options="{'no_create': True, 'no_quick_create': True}"/>
<field name="mrs_materials_model_id"
options="{'no_create': True, 'no_quick_create': True}"/>
<field name="mrs_cutting_tool_type_id"
options="{'no_create': True, 'no_quick_create': True}"/>
</group>
<group>
<field name="image" nolabel="1" widget="image"/>
@@ -220,105 +239,182 @@
<field name="hide_chuck" invisible="1"/>
<field name="mrs_cutting_tool_material_name" invisible="1"/>
<field name="integral_total_length" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_shank_length" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_blade_length" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_diameter" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_blade_number" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_accuracy" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_hardness" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_total_length"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_shank_length"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_blade_length"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_diameter"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_blade_number"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_accuracy"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_hardness"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="blade_length" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_width" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_height" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_top_angle" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_front_angle" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_rear_angle" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_length"
attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_width"
attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_height"
attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_top_angle"
attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_front_angle"
attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_rear_angle"
attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="bar_c_diameter" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_total_length" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_blade_number" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_d_diameter" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_wrench" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_c_diameter"
attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_total_length"
attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_blade_number"
attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_d_diameter"
attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_wrench"
attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="pad_c_diameter" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_total_length" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_blade_number" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_d_diameter" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_wrench" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_c_diameter"
attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_total_length"
attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_blade_number"
attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_d_diameter"
attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_wrench"
attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="handle_length" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_flange_length" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_flange_diameter" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_weight" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_body_accuracy" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_clamping_diameter_min" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_clamping_diameter_max" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_length"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_flange_length"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_flange_diameter"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_weight"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_body_accuracy"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_clamping_diameter_min"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_clamping_diameter_max"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="chuck_accuracy" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_diameter" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_inner_diameter" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_height" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_accuracy"
attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_diameter"
attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_inner_diameter"
attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_height"
attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
</group>
<group>
<field name="integral_front_angle" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_rear_angle" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_main_included_angle" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_coating_material" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_nut" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_scope" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_front_angle"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_rear_angle"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_main_included_angle"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_coating_material"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_nut"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="integral_scope"
attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
<field name="blade_main_included_angle" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_r_angle" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_coating_material" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_hardness" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_radius" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_nut" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_main_included_angle"
attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_r_angle"
attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_coating_material"
attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_hardness"
attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_radius"
attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="blade_nut"
attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
<field name="bar_screw" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_radius" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_hardness" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_scope" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_screw"
attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_radius"
attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_hardness"
attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="bar_scope"
attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
<field name="pad_screw" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_radius" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_accuracy" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_hardness" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_scope" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_screw"
attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_radius"
attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_accuracy"
attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_hardness"
attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="pad_scope"
attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
<field name="handle_nut" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_clamping_range" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_detection_accuracy" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_detection_hardness" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_standard_speed" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_jump_accuracy" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_max_speed" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_nut"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_clamping_range"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_detection_accuracy"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_detection_hardness"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_standard_speed"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_jump_accuracy"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="handle_max_speed"
attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
<field name="chuck_nut" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_clamping_range" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_feature" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_nut"
attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_clamping_range"
attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
<field name="chuck_feature"
attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
</group>
</group>
<group string='其他信息'>
<group>
<field name="mrs_cutting_tool_model_blade_cutter_bar_ids" widget="many2many_tags" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': [('hide_blade', '=', False)]}"/>
<field name="mrs_cutting_tool_model_bar_blade_ids" widget="many2many_tags" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': [('hide_cutter_bar', '=', False)]}"/>
<field name="mrs_cutting_tool_model_pad_blade_ids" widget="many2many_tags" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': [('hide_cutter_pad', '=', False)]}"/>
<field name="mrs_cutting_tool_model_handle_chuck_model_ids" widget="many2many_tags" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': [('hide_handler', '=', False)]}"/>
<field name="mrs_cutting_tool_model_chuck_handle_model_ids" widget="many2many_tags" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': [('hide_chuck', '=', False)]}"/>
<field name="mrs_cutting_tool_model_blade_cutter_bar_ids" widget="many2many_tags"
options="{'no_create': True, 'no_quick_create': True}"
attrs="{'invisible': [('hide_blade', '=', False)]}"/>
<field name="mrs_cutting_tool_model_bar_blade_ids" widget="many2many_tags"
options="{'no_create': True, 'no_quick_create': True}"
attrs="{'invisible': [('hide_cutter_bar', '=', False)]}"/>
<field name="mrs_cutting_tool_model_pad_blade_ids" widget="many2many_tags"
options="{'no_create': True, 'no_quick_create': True}"
attrs="{'invisible': [('hide_cutter_pad', '=', False)]}"/>
<field name="mrs_cutting_tool_model_handle_chuck_model_ids" widget="many2many_tags"
options="{'no_create': True, 'no_quick_create': True}"
attrs="{'invisible': [('hide_handler', '=', False)]}"/>
<field name="mrs_cutting_tool_model_chuck_handle_model_ids" widget="many2many_tags"
options="{'no_create': True, 'no_quick_create': True}"
attrs="{'invisible': [('hide_chuck', '=', False)]}"/>
</group>
<group>
<field name="mrs_cutting_tool_model_blade_cutter_pad_ids" widget="many2many_tags" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': [('hide_blade', '=', False)]}"/>
<field name="mrs_cutting_tool_model_blade_cutter_pad_ids" widget="many2many_tags"
options="{'no_create': True, 'no_quick_create': True}"
attrs="{'invisible': [('hide_blade', '=', False)]}"/>
</group>
</group>
</group>
@@ -327,7 +423,7 @@
</field>
</record>
<!-- 刀具型号搜索 -->
<!-- 刀具型号搜索 -->
<record id="view_cutting_tool_model_search" model="ir.ui.view">
<field name="name">sf.cutting.tool.model.search</field>
<field name="model">sf.cutting.tool.model</field>
@@ -343,12 +439,12 @@
</record>
<!-- ================================================刀具类型================================================ -->
<!-- ================================================刀具类型================================================ -->
<record id="view_cutting_tool_type_tree" model="ir.ui.view">
<field name="name">sf.cutting.tool.type.tree</field>
<field name="model">sf.cutting.tool.type</field>
<field name="arch" type="xml">
<tree string="刀具类型">
<tree string="刀具类型" create="0" edit="0" delete="0">
<field name="code"/>
<field name="name"/>
<field name="mrs_cutting_tool_material_id"/>
@@ -357,28 +453,28 @@
</field>
</record>
<record id="view_cutting_tool_type_form" model="ir.ui.view">
<field name="name">sf.cutting.tool.type.form</field>
<field name="model">sf.cutting.tool.type</field>
<field name="arch" type="xml">
<form string="刀具类型">
<sheet>
<group string="刀具类型">
<group>
<field name="code"/>
<field name="name"/>
<field name="mrs_cutting_tool_material_id" options="{'no_create': True, 'no_quick_create': True}"/>
</group>
<group>
<field name="remark"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<!-- <record id="view_cutting_tool_type_form" model="ir.ui.view">-->
<!-- <field name="name">sf.cutting.tool.type.form</field>-->
<!-- <field name="model">sf.cutting.tool.type</field>-->
<!-- <field name="arch" type="xml">-->
<!-- <form string="刀具类型">-->
<!-- <sheet>-->
<!-- <group string="刀具类型">-->
<!-- <group>-->
<!-- <field name="code"/>-->
<!-- <field name="name"/>-->
<!-- <field name="mrs_cutting_tool_material_id" options="{'no_create': True, 'no_quick_create': True}"/>-->
<!-- </group>-->
<!-- <group>-->
<!-- <field name="remark"/>-->
<!-- </group>-->
<!-- </group>-->
<!-- </sheet>-->
<!-- </form>-->
<!-- </field>-->
<!-- </record>-->
<!-- 刀具类型搜索 -->
<!-- 刀具类型搜索 -->
<record id="view_cutting_tool_type_search" model="ir.ui.view">
<field name="name">sf.cutting.tool.type.search</field>
<field name="model">sf.cutting.tool.type</field>

View File

@@ -278,7 +278,7 @@
attrs='{"invisible": [("fixture_material_type","!=",("转接板(锁板)托盘"))]}'/>
<field name="fixture_driving_way"
attrs='{"invisible": [("fixture_material_type","not in",("虎钳托盘","零点卡盘"))]}'/>
<field name="fixture_apply_machine_tool_type_id"
<field name="fixture_apply_machine_tool_type_ids"
attrs='{"invisible": [("fixture_material_type","!=",("零点卡盘"))]}'/>
</group>
</group>
@@ -355,6 +355,14 @@
<filter name="finish_product" string="成品" domain="[('categ_id.type','=','成品')]"/>
<filter name="embryo" string="坯料" domain="[('categ_id.type','=','坯料')]"/>
<filter name="raw_bom" string="原材料" domain="[('categ_id.type','=','原材料')]"/>
<!-- <searchpanel>-->
<!-- <field name="categ_id" icon="fa-building" enable_counters="1"/>-->
<!-- </searchpanel>-->
</xpath>
<xpath expr="//search" position="inside">
<searchpanel>
<field name="categ_id" icon="fa-building" enable_counters="1"/>
</searchpanel>
</xpath>
</field>
</record>

View File

@@ -53,15 +53,11 @@ class SfEquipmentSaintenanceStandards(models.Model):
class SfSaintenanceStandards(models.Model):
_name = 'maintenance.standards'
_description = '维保项目'
_order = 'sequence, id'
name = fields.Char('维保项目')
maintenance_standards = fields.Char('维保标准')
equipment_maintenance_standards_id = fields.Many2one('equipment.maintenance.standards', string='设备维保标准')
maintenance_request_id = fields.Many2one('maintenance.request', string='设备维保计划')
cycle = fields.Integer('频次/周期')
device_unit = fields.Char('设备单元')
sequence = fields.Integer('序列号')

View File

@@ -47,6 +47,7 @@ class SfMaintenanceEquipment(models.Model):
overhaul_id = fields.Many2one('equipment.maintenance.standards', string='设备检修标准',
domain="[('maintenance_type','=','检修')]")
@api.onchange('eq_maintenance_id', 'overhaul_id')
def _compute_equipment_maintenance_standards_ids(self):
for record in self:
@@ -88,8 +89,9 @@ class SfMaintenanceEquipment(models.Model):
control_system_id = fields.Many2one('sf.machine.control_system',
string="控制系统")
# 多个机床型号对应一个机床
type_id = fields.Many2one('sf.machine_tool.type', '型号')
brand_id = fields.Many2one('sf.machine.brand', string='品牌')
type_id = fields.Many2one('sf.machine_tool.type', '型号')
state = fields.Selection(
[("正常", "正常"), ("故障", "故障"), ("不可用", "不可用")],
default='正常', string="机床状态")
@@ -414,7 +416,6 @@ class SfMaintenanceEquipment(models.Model):
'company_id': self.company_id.id or self.env.company.id,
'equipment_maintenance_id': self.eq_maintenance_id.id,
'sf_maintenance_type': '保养'
}
# 拼接维保请求字符串

View File

@@ -25,9 +25,7 @@ class SfMaintenanceEquipmentCategory(models.Model):
if not record.equipment_maintenance_id:
record.equipment_maintenance_id = False
maintenance_standards = fields.One2many('maintenance.standards','maintenance_request_id', string='维保标准', related='equipment_maintenance_id.maintenance_standards_ids')
maintenance_standards = fields.One2many('maintenance.standards','maintenance_request_id', string='维保标准')
@api.constrains('equipment_maintenance_id')
def _check_equipment_maintenance_id(self):

View File

@@ -29,19 +29,6 @@
<group>
<field name="maintenance_equipment_ids" widget="many2many_tags" attrs="{'invisible': [('maintenance_equipment_category_id', '=', False)]}"/>
</group>
<notebook>
<page string="维保项目">
<field name="maintenance_standards_ids" widget="ony2many">
<tree editable="top" create="true" string="维保项目">
<field name="sequence"/>
<field name="name"/>
<field name="maintenance_standards"/>
<field name="cycle"/>
<field name="device_unit"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>

View File

@@ -20,14 +20,12 @@
<notebook>
<page string="维保标准" attrs="{'invisible': [('equipment_maintenance_id', '=', False)]}">
<group>
<field name="maintenance_standards" widget="ony2many">
<tree create="False" string="维保项目">
<tree create="False">
<field name="name"/>
<field name="maintenance_standards"/>
</tree>
</field>
</group>
</page>
</notebook>

View File

@@ -17,17 +17,22 @@
<field name="model">maintenance.equipment</field>
<field name="inherit_id" ref="maintenance.hr_equipment_view_form"/>
<field name="arch" type="xml">
<data>
<xpath expr="//sheet" position="before">
<!-- <button type="object" class="oe_highlight" name='enroll_machine_tool' string="机床注册"/>-->
<field name="state_zc" widget="radio" options="{'horizontal': true}"/>
</xpath>
<xpath expr="//field[@name='maintenance_team_id']" position="before">
<field name="machine_tool_picture" widget="image"/>
</xpath>
<xpath expr="//field[@name='category_id']" position="after">
<field name="code" readonly="1"/>
<field name="equipment_type"/>
<field name="type_id" attrs="{'invisible': [('equipment_type', '!=', '机床')]}" required="1"/>
<field name="brand_id" attrs="{'invisible': [('type_id', '=', False)]}"
<field name="state" widget="radio" options="{'horizontal': true}"/>
<field name="equipment_type" invisible="1"/>
<field name="brand_id" attrs="{'invisible': [('equipment_type', '!=', '机床')]}"
force_save="1"/>
<field name="type_id" attrs="{'invisible': [('equipment_type', '!=', '机床')]}" required="1" domain="[('brand_id', '=', brand_id)]"/>
<field name="machine_tool_category" readonly="1" attrs="{'invisible': [('type_id', '=', False)]}"
force_save="1"/>
</xpath>
@@ -36,21 +41,55 @@
<group string="参数">
<group>
<field name="control_system_id" options="{'no_create': True}"/>
<field name="workbench_L"/>
<field name="workbench_W"/>
<field name="machine_tool_L"/>
<field name="machine_tool_W"/>
<field name="machine_tool_H"/>
<field name="knife_type"/>
<field name="workpiece_load"/>
<field name="lead_screw"/>
<field name="taper"/>
<field name="torque"/>
<field name="motor_power"/>
<field name="number_of_knife_library" options="{'format': false}"/>
<label for="workbench_L" string="工作台[mm]"/>
<div class="o_address_format">
<label for="workbench_L" string="长"/>
<field name="workbench_L" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="workbench_W" string="宽"/>
<field name="workbench_W" class="o_address_zip"
options="{'format': false}"/>
</div>
<!-- <field name="workbench_L"/>-->
<!-- <field name="workbench_W"/>-->
<label for="machine_tool_L" string="机床[mm]"/>
<div class="o_address_format">
<label for="machine_tool_L" string="长"/>
<field name="machine_tool_L" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="machine_tool_W" string="宽"/>
<field name="machine_tool_W" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="machine_tool_H" string="高"/>
<field name="machine_tool_H" class="o_address_zip"
options="{'format': false}"/>
</div>
<!-- <field name="machine_tool_L"/>-->
<!-- <field name="machine_tool_W"/>-->
<!-- <field name="machine_tool_H"/>-->
<label for="taper" string="主轴"/>
<div class="o_address_format">
<label for="taper" string="锥度(°)"/>
<field name="taper" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="torque" string="点击扭矩(n/m)"/>
<field name="torque" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="motor_power" string="电机功率(kw)"/>
<field name="motor_power" class="o_address_zip"
options="{'format': false}"/>
<label for="motor_power" string="转速(min)"/>
<field name="rotate_speed" class="o_address_zip"
options="{'format': false}"/>
</div>
<field name="number_of_axles" widget="radio"
options="{'horizontal': true}"/>
<field name="heightened_way"/>
<label for="x_axis" string="加工行程(mm)"
attrs="{'invisible': [('number_of_axles', '=', False)]}"/>
<div class="test_model"
@@ -79,23 +118,28 @@
attrs="{'invisible': [('number_of_axles', 'in', ['三轴','四轴'])]}"
options="{'format': false}"/>
</div>
<field name="distance"/>
<field name="precision" string="X轴定位精度(mm)"/>
<!-- <field name="taper"/>-->
<!-- <field name="torque"/>-->
<!-- <field name="motor_power"/>-->
</group>
<group>
<field name="heightened_way"/>
<field name="knife_type"/>
<field name="number_of_knife_library" options="{'format': false}"/>
<field name="tool_quality_max"/>
<field name="tool_long_max"/>
<field name="tool_diameter_max"/>
<field name="tool_speed"/>
<field name="guide_rail"/>
<field name="feed_speed"/>
<field name="tool_speed"/>
<field name="distance"/>
<field name="rotate_speed" string="主轴转速(min)"
options="{'format': false}"/>
<field name="precision" string="X轴定位精度(mm)(mm)"/>
<field name="workpiece_load"/>
<field name="lead_screw"/>
</group>
</group>
</group>
</group>
</page>
<page string="其他" attrs="{'invisible': [('type_id', '=', False)]}">
<group string="其他">
@@ -115,8 +159,8 @@
<xpath expr="//div[@class='o_row'][field[@name='maintenance_duration']]" position="after">
<field name='overhaul_id'/>
<field name='overhaul_id'/>
<field name="overhaul_date" string="下次预防检修"/>
<label for="overhaul_period" string="预防检修频次"/>
<div class="o_row">
@@ -200,15 +244,15 @@
<menuitem
id="menu_equipment_form1"
name="设备"
name="设备清单"
parent="maintenance.menu_m_request"
action="hr_equipment_action1"
groups="maintenance.group_equipment_manager,base.group_user"
sequence="2"/>
<!-- <record id="maintenance.hr_equipment_action" model="ir.actions.act_window">-->
<!-- <field name="active">False</field>-->
<!-- </record>-->
<!-- <record id="maintenance.hr_equipment_action" model="ir.actions.act_window">-->
<!-- <field name="active">False</field>-->
<!-- </record>-->
<!-- <menuitem-->

View File

@@ -15,6 +15,7 @@
'data/stock_data.xml',
'security/group_security.xml',
'security/ir.model.access.csv',
'views/mrp_production_addional_change.xml',
'report/tray_report.xml',
# 'views/mrp_maintenance_views.xml',
'views/mrp_routing_workcenter_view.xml',
@@ -42,6 +43,14 @@
],
'qweb': [
],
'assets': {
'web.assets_backend': [
'sf_manufacturing/static/src/js/kanban_change.js',
'sf_manufacturing/static/src/scss/kanban_change.scss',
'sf_manufacturing/static/src/xml/kanban_change.xml',
],
},
'license': 'LGPL-3',
'installable': True,
'application': False,

View File

@@ -147,7 +147,8 @@ class ResProductMo(models.Model):
fixture_maximum_carrying_weight = fields.Float(string="最大承载重量[kg]", digits=(16, 4))
fixture_maximum_clamping_force = fields.Integer(string="最大夹持力[n]", size=8)
fixture_driving_way = fields.Char(string="驱动方式")
fixture_apply_machine_tool_type_id = fields.Many2one('sf.machine_tool.type', string="适用机床型号")
fixture_apply_machine_tool_type_ids = fields.Many2many('sf.machine_tool.type', 'rel_product_machine_tool_type',
string="适用机床型号")
fixture_through_hole_size = fields.Integer(string="过孔大小[mm]", size=6)
fixture_screw_size = fields.Integer(string="螺牙大小[mm]", size=6)
@@ -205,7 +206,7 @@ class ResProductMo(models.Model):
item.fixture_clamp_workpiece_width_max = item.fixture_model_id.clamp_workpiece_width_max
item.fixture_clamp_workpiece_height_max = item.fixture_model_id.clamp_workpiece_height_max
item.fixture_clamp_workpiece_diameter_max = item.fixture_model_id.clamp_workpiece_diameter_max
item.fixture_apply_machine_tool_type_id = item.fixture_model_id.apply_machine_tool_type_id.id
item.fixture_apply_machine_tool_type_id = self._get_ids(item.fixture_model_id.apply_machine_tool_type_ids)
@api.onchange('cutting_tool_model_id')
def _onchange_cutting_tool_model_id(self):

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="custom_mrp_production_tree_view" model="ir.ui.view">
<field name="name">custom.mrp.production.tree</field>
<field name="model">mrp.production</field>
<field name="inherit_id" ref="mrp.mrp_production_tree_view"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='product_id']" position="replace"/>
<xpath expr="//field[@name='product_qty']" position="replace"/>
<xpath expr="//field[@name='product_uom_id']" position="replace"/>
<xpath expr="//field[@name='reservation_state']" position="replace"/>
<xpath expr="//field[@name='date_deadline']" position="replace"/>
<xpath expr="//field[@name='name']" position="after">
<field name="product_id" readonly="1" optional="show"/>
</xpath>
<xpath expr="//field[@name='product_id']" position="after">
<field name="product_qty" sum="Total Qty" string="数量" readonly="1" optional="show"/>
</xpath>
<xpath expr="//field[@name='product_qty']" position="after">
<field name="product_uom_id" string="计量单位" options="{'no_open':True,'no_create':True}" groups="uom.group_uom" optional="show"/>
</xpath>
<xpath expr="//field[@name='date_planned_start']" position="after">
<field name="date_deadline" widget="remaining_days" attrs="{'invisible': [('state', 'in', ['done', 'cancel'])]}" optional="show"/>
</xpath>
<xpath expr="//field[@name='production_real_duration']" position="after">
<field name="reservation_state" optional="hide" decoration-danger="reservation_state == 'confirmed'" decoration-success="reservation_state == 'assigned'"/>
</xpath>
<xpath expr="//field[@name='activity_ids']" position="replace">
<field name="activity_ids" string="下一个活动" widget="list_activity" optional="hide"/>
</xpath>
<xpath expr="//field[@name='origin']" position="replace">
<field name="origin" optional="hide"/>
</xpath>
<xpath expr="//field[@name='components_availability']" position="replace">
<field name="components_availability" options='{"lazy": true}'
attrs="{'invisible': [('state', 'not in', ['confirmed', 'progress'])]}"
optional="hide"
decoration-success="reservation_state == 'assigned' or components_availability_state == 'available'"
decoration-warning="reservation_state != 'assigned' and components_availability_state in ('expected', 'available')"
decoration-danger="reservation_state != 'assigned' and components_availability_state == 'late'"/>
</xpath>
</field>
</record>
</data>
</odoo>

View File

@@ -56,7 +56,7 @@
</field>
</record>
<record id="mrp_workcenter_kanban_action1" model="ir.actions.act_window">
<field name="name">工作中心看板</field>
<field name="name">生产线驾驶舱</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.workcenter</field>
<field name="view_mode">kanban,form</field>
@@ -76,7 +76,7 @@
</record>
<menuitem id="menu_mrp_dashboard"
name="工作中心看板"
name="生产线驾驶舱"
action="mrp_workcenter_kanban_action1"
groups="mrp.group_mrp_routings"
parent="mrp.menu_mrp_root"

File diff suppressed because it is too large Load Diff

View File

@@ -2,8 +2,12 @@
<odoo>
<data>
<record id="mrp.menu_mrp_manufacturing" model="ir.ui.menu">
<field name="name">计划管理</field>
<field name="name">Operations1</field>
</record>
<record id="mrp.menu_mrp_routing_action" model="ir.ui.menu">
<field name="name">Process</field>
</record>
<record id="mrp_workorder.mrp_workorder_menu_planning" model="ir.ui.menu">
<field name="name">工单计划</field>

4
sf_quality/__init__.py Normal file
View File

@@ -0,0 +1,4 @@
# -*- encoding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models

View File

@@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name': '机企猫智能工厂 质量管理',
'version': '1.0',
'summary': 'sf_quality',
'sequence': 16,
'description': """
这是一个用于机企猫质量管理的模块
====================
""",
'category': 'sf',
'author': 'jikimo',
'website': 'https://sf.cs.jikimo.com',
# 此处依赖sf_manufacturing是因为我要重写其中的一个字段operation_id的string故需要sf_manufacturing先安装
'depends': ['quality_control', 'sf_manufacturing'],
'data': [
'views/view.xml'
],
'assets': {
'web.assets_qweb': [
],
'web.assets_backend': [
],
},
'installable': True,
'application': True,
# 'auto_install': False,
'license': 'LGPL-3',
}

View File

@@ -0,0 +1,4 @@
# -*- encoding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import custom_quality

View File

@@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
class SfQualityPoint(models.Model):
_inherit = 'quality.point'
product_ids = fields.Many2many(
'product.product', string='适用产品',
domain="[('type', 'in', ('product', 'consu')), '|', ('company_id', '=', False), ('company_id', '=', company_id)]",
help="Quality Point will apply to every selected Products.")
# picking_type_ids = fields.Many2many(
# 'stock.picking.type', string='执行节点', required=True, check_company=True)

View File

34
sf_quality/views/view.xml Normal file
View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="quality.quality_alert_view_tree" model="ir.ui.view">
<field name="name">quality.alert.view.tree</field>
<field name="model">quality.alert</field>
<field name="arch" type="xml">
<tree sample="1">
<field name="name" decoration-bf="1"/>
<field name="product_tmpl_id" optional="show"/>
<field name="product_id" optional="hide"/>
<field name="lot_id" optional="hide"/>
<field name="team_id" optional="hide"/> <!-- Change show to hide -->
<field name="user_id" optional="hide" widget='many2one_avatar_user'/> <!-- Change show to hide -->
<field name="tag_ids" optional="hide" widget="many2many_tags"/>
<field name="reason_id" optional="hide"/>
<field name="priority" optional="hide"/>
<field name="date_assign" optional="show"/>
<field name="partner_id" optional="hide"/>
</tree>
</field>
</record>
<record id="quality_control.quality_alert_action_check" model="ir.actions.act_window">
<field name="name">质量缺陷单</field>
<field name="res_model">quality.alert</field>
<field name="view_mode">kanban,tree,form,pivot,graph,calendar</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new quality alert
</p>
</field>
</record>
</odoo>

View File

@@ -10,7 +10,7 @@
""",
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
'depends': ['account', 'sf_base', 'mrp'],
'depends': ['account', 'sf_base', 'mrp', 'sf_manufacturing'],
'data': [
#'security/group_security.xml',
'security/ir.model.access.csv',

View File

@@ -123,20 +123,20 @@ class FunctionalToolWarning(models.Model):
image = fields.Binary('图片', readonly=True)
# 功能刀具预警 特有字段
install_tool_time = fields.Char("装刀时间", readonly=True)
outbound_time = fields.Char('出库时间', readonly=True)
on_board_time = fields.Char('上机时间', readonly=True)
machine_tool_code = fields.Char('机台号', readonly=True)
cutting_tool_code = fields.Char('刀位号', readonly=True)
idle_time = fields.Char('闲置时长', readonly=True)
alarm_value = fields.Char('报警值', readonly=True)
used_value = fields.Char('已使用值', readonly=True)
alarm_type = fields.Char('报警类型', readonly=True)
alarm_time = fields.Char('报警时间', readonly=True)
dispose_user = fields.Char('处理人', readonly=True)
dispose_time = fields.Char('处理时间', readonly=True)
dispose_func = fields.Char('处理方法/措施', readonly=True)
remark = fields.Char('备注', readonly=True)
install_tool_time = fields.Char("装刀时间", readonly=False)
outbound_time = fields.Char('出库时间', readonly=False)
on_board_time = fields.Char('上机时间', readonly=False)
machine_tool_code = fields.Char('机台号', readonly=False)
cutting_tool_code = fields.Char('刀位号', readonly=False)
idle_time = fields.Char('闲置时长', readonly=False)
alarm_value = fields.Char('报警值', readonly=False)
used_value = fields.Char('已使用值', readonly=False)
alarm_type = fields.Char('报警类型', readonly=False)
alarm_time = fields.Char('报警时间', readonly=False)
dispose_user = fields.Char('处理人', readonly=False)
dispose_time = fields.Char('处理时间', readonly=False)
dispose_func = fields.Char('处理方法/措施', readonly=False)
remark = fields.Char('备注', readonly=False)
@api.onchange('functional_cutting_tool_id')
def onchange_functional_cutting_tool_id(self):
@@ -197,16 +197,16 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
image = fields.Binary('图片', readonly=True)
# 功能刀具实时分布
tool_stock_num = fields.Char(string='刀具房库存数量', readonly=True)
side_shelf_num = fields.Char(string='线边货架货架数量', readonly=True)
on_tool_stock_num = fields.Char(string='机内刀库库存数量', readonly=True)
tool_stock_total = fields.Char(string='合计', readonly=True)
return_reuse_num_re = fields.Char(string='归还再用数量(精)', readonly=True)
return_reuse_num_co = fields.Char(string='归还再用数量(粗)', readonly=True)
return_processing_num = fields.Char(string='归还需磨削数量', readonly=True)
return_total = fields.Char(string='合计', readonly=True)
total = fields.Char(string='总计', readonly=True)
remark = fields.Char(string='备注/说明', readonly=True)
tool_stock_num = fields.Char(string='刀具房库存数量', readonly=False)
side_shelf_num = fields.Char(string='线边货架货架数量', readonly=False)
on_tool_stock_num = fields.Char(string='机内刀库库存数量', readonly=False)
tool_stock_total = fields.Char(string='合计', readonly=False)
return_reuse_num_re = fields.Char(string='归还再用数量(精)', readonly=False)
return_reuse_num_co = fields.Char(string='归还再用数量(粗)', readonly=False)
return_processing_num = fields.Char(string='归还需磨削数量', readonly=False)
return_total = fields.Char(string='合计', readonly=False)
total = fields.Char(string='总计', readonly=False)
remark = fields.Char(string='备注/说明', readonly=False)
class InboundAndOutboundRecordsOfFunctionalTools(models.Model):
@@ -263,25 +263,25 @@ class InboundAndOutboundRecordsOfFunctionalTools(models.Model):
image = fields.Binary('图片', readonly=True)
# 功能刀具出入库记录 特有字段
thickness = fields.Selection([('1', ''), ('2', ''), ('3', '')], string='粗/中/精', readonly=True)
max_life_span = fields.Char(string='最大寿命值', readonly=True)
alarm_value = fields.Char(string='报警值', readonly=True)
used_value = fields.Char(string='已使用值', readonly=True)
current_state = fields.Char(string='当前状态', readonly=True)
current_store_area = fields.Char(string='当前库区', readonly=True)
current_store_place = fields.Char(string='当前库位', readonly=True)
number = fields.Integer(string='数量', readonly=True)
reason_application = fields.Char(string='申请原因', readonly=True)
applicant = fields.Char(string='申请人', readonly=True)
return_staff = fields.Char(string='归还人', readonly=True)
return_time = fields.Date(string='归还入库时间', readonly=True)
tool_state = fields.Char(string="刀具状态", readonly=True)
tool_install_staff = fields.Char(string='装刀人', readonly=True)
tool_install_time = fields.Datetime(string='装刀时间', readonly=True)
receive_equipment = fields.Char(string='领用机台', readonly=True)
receive_staff = fields.Char(string='领用人', readonly=True)
receive_time = fields.Char(string='领用出库时间', readonly=True)
remark = fields.Text(string='备注/说明', readonly=True)
thickness = fields.Selection([('1', ''), ('2', ''), ('3', '')], string='粗/中/精', readonly=False)
max_life_span = fields.Char(string='最大寿命值', readonly=False)
alarm_value = fields.Char(string='报警值', readonly=False)
used_value = fields.Char(string='已使用值', readonly=False)
current_state = fields.Char(string='当前状态', readonly=False)
current_store_area = fields.Char(string='当前库区', readonly=False)
current_store_place = fields.Char(string='当前库位', readonly=False)
number = fields.Integer(string='数量', readonly=False)
reason_application = fields.Char(string='申请原因', readonly=False)
applicant = fields.Char(string='申请人', readonly=False)
return_staff = fields.Char(string='归还人', readonly=False)
return_time = fields.Date(string='归还入库时间', readonly=False)
tool_state = fields.Char(string="刀具状态", readonly=False)
tool_install_staff = fields.Char(string='装刀人', readonly=False)
tool_install_time = fields.Datetime(string='装刀时间', readonly=False)
receive_equipment = fields.Char(string='领用机台', readonly=False)
receive_staff = fields.Char(string='领用人', readonly=False)
receive_time = fields.Char(string='领用出库时间', readonly=False)
remark = fields.Text(string='备注/说明', readonly=False)
class MachineTableToolChangingApply(models.Model):
@@ -294,37 +294,43 @@ class MachineTableToolChangingApply(models.Model):
# string='换刀需求信息',
# attrs="{'invisible': 1}")
name = fields.Char(string='CNC机床', readonly="True")
# todo 机床类型和刀位号 为 Many2one
machine_table_type = fields.Char(string='机床类型', readonly="True")
name = fields.Many2one('sf.machine_tool', string='CNC机床', readonly=False)
machine_table_type_id = fields.Many2one('sf.machine_tool.category', string='机床类型', readonly=False)
machine_tool_code = fields.Char(string='机台号', attrs="{'invisible': 1}")
cutter_spacing_code = fields.Char(string='刀位号', readonly="True")
functional_tool_code = fields.Char(string='功能刀具编码', readonly="True")
functional_tool_name = fields.Char(string='功能刀具名称', readonly="True")
# todo 功能刀具类型为 Many2one
functional_tool_type = fields.Char(string='功能刀具类型', readonly="True")
diameter = fields.Char(string='直径', readonly="True")
coarse_middle_thin = fields.Selection([("1", ""), ('2', ''), ('3', '')], string='粗/中/精', readonly="True")
hilt_name = fields.Char(string='刀柄名称', readonly="True")
hilt_code = fields.Char(string='刀柄编号', readonly="True")
max_lifetime_value = fields.Char(string='最大寿命', readonly="True")
alarm_value = fields.Char(string='报警', readonly="True")
used_value = fields.Char(string='已使用值', readonly="True")
functional_tool_status = fields.Selection([('正常', '正常'), ('异常', '异常')], string='功能刀具状态', default='正常', readonly="True")
cutter_spacing_code = fields.Char(string='刀位号', readonly=False)
functional_tool_code = fields.Char(string='功能刀具编码', readonly=True, compute='_compute_functional_tool_name_id')
functional_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=False)
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model',string='功能刀具类型', readonly=True, compute='_compute_functional_tool_name_id')
diameter = fields.Char(string='直径', readonly=False)
coarse_middle_thin = fields.Selection([("1", ""), ('2', ''), ('3', '')], string='粗/中/精', readonly=False)
hilt_name = fields.Char(string='刀柄名称', readonly=False)
hilt_code = fields.Char(string='刀柄编号', readonly=False)
max_lifetime_value = fields.Char(string='最大寿命值', readonly=False)
alarm_value = fields.Char(string='报警', readonly=False)
used_value = fields.Char(string='已使用', readonly=False)
functional_tool_status = fields.Selection([('正常', '正常'), ('异常', '异常')], string='功能刀具状态', default='正常', readonly=False)
replacement_tool_code = fields.Char(string='待换刀具编码', readonly="True")
replacement_tool_name = fields.Char(string='待换刀具名称', readonly="True")
replacement_tool_type = fields.Char(string='待换刀具类型', readonly="True")
replacement_tool_code = fields.Char(string='待换刀具编码', readonly=True)
replacement_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='待换刀具名称', readonly=True)
replacement_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='待换刀具类型', readonly=True)
replacement_tool_coarse_middle_thin = fields.Selection([("1", ""), ('2', ''), ('3', '')],
string='粗/中/精', readonly="True")
new_former = fields.Selection([('0', ''), ('1', '')], string='新/旧', readonly="True")
applicant = fields.Char(string='申请人', readonly="True")
used_tool_time = fields.Datetime(string='用刀时间', readonly="True")
reason_for_applying = fields.Char(string='申请原因', readonly="True")
remark = fields.Char(string='备注说明', readonly="True")
string='粗/中/精', readonly=True)
new_former = fields.Selection([('0', ''), ('1', '')], string='新/旧', readonly=True)
applicant = fields.Char(string='申请人', readonly=True)
used_tool_time = fields.Datetime(string='用刀时间', readonly=True)
reason_for_applying = fields.Char(string='申请原因', readonly=True)
remark = fields.Char(string='备注说明', readonly=False)
status = fields.Selection([('0', '未操作'), ('1', '已换刀申请'), ('2', '已转移')], string='操作状态', default='0')
@api.depends('functional_tool_name_id')
def _compute_functional_tool_name_id(self):
for record in self:
if record:
record.functional_tool_code = record.functional_tool_name_id.code
record.functional_tool_type_id = record.functional_tool_name_id.mrs_cutting_tool_type_id.id
@api.onchange('functional_tool_status')
def automation_apply_for_tool_change(self):
"""
@@ -335,10 +341,10 @@ class MachineTableToolChangingApply(models.Model):
# todo 自动换刀申请条件需补充完善
if(self.functional_tool_status == '异常'):
self.env['sf.machine.table.tool.changing.apply'].search([
('name', '=', self.name)]).write({
('name', '=', self.name.id)]).write({
'replacement_tool_code': self.functional_tool_code,
'replacement_tool_name': self.functional_tool_name,
'replacement_tool_type': self.functional_tool_type,
'replacement_tool_name_id': self.functional_tool_name_id.id,
'replacement_tool_type_id': self.functional_tool_type_id.id,
'replacement_tool_coarse_middle_thin': self.coarse_middle_thin,
'new_former': '0',
'applicant': '自动申请',
@@ -351,8 +357,8 @@ class MachineTableToolChangingApply(models.Model):
# 新建组装任务
self.env['sf.functional.tool.assembly'].create({
'functional_tool_code': self.functional_tool_code,
'name': self.functional_tool_name,
'functional_tool_type': self.functional_tool_type,
'name': self.functional_tool_name_id,
'functional_tool_type_id': self.functional_tool_type_id.id,
'functional_tool_diameter': self.diameter,
'loading_task_source': '1',
'applicant': '自动申请',
@@ -384,11 +390,16 @@ class MachineTableToolChangingApply(models.Model):
换刀申请撤回按键
:return:
"""
# 撤回功能刀具组装创建的任务
self.env['sf.functional.tool.assembly'].search(
[('functional_tool_code', '=', self.replacement_tool_code),
('loading_task_source', '=', '1')]).unlink()
# 撤回数据更新
self.env['sf.machine.table.tool.changing.apply'].search([('name', '=', self.name)]).write({
self.env['sf.machine.table.tool.changing.apply'].search([('name', '=', self.name.id)]).write({
'replacement_tool_code': None,
'replacement_tool_name': None,
'replacement_tool_type': None,
'replacement_tool_name_id': None,
'replacement_tool_type_id': None,
'replacement_tool_coarse_middle_thin': None,
'new_former': None,
'applicant': None,
@@ -398,10 +409,6 @@ class MachineTableToolChangingApply(models.Model):
'status': '0'
})
# 撤回功能刀具组装创建新任务
self.env['sf.functional.tool.assembly'].search(
[('functional_tool_code', '=', self.functional_tool_code)]).unlink()
def revocation_2(self):
"""
@@ -409,7 +416,7 @@ class MachineTableToolChangingApply(models.Model):
:return:
"""
self.env['sf.machine.table.tool.changing.apply'].search(
[('name', '=', self.name)]).write({
[('name', '=', self.name.id)]).write({
'status': '0'
})
@@ -418,66 +425,72 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
_name = 'sf.cam.work.order.program.knife.plan'
_description = 'CAM工单程序用刀计划'
name = fields.Char(string='工单任务编号', readonly=True)
cam_procedure_code = fields.Char(string='CAM程序编号', readonly=True)
cam_cutter_spacing_code = fields.Char(string='CAM刀位号', readonly=True)
functional_tool_code = fields.Char(string='功能刀具编码', readonly=True)
functional_tool_name = fields.Char(string='功能刀具名称', readonly=True)
functional_tool_type = fields.Char(string='功能刀具类型', readonly=True)
machine_table_name = fields.Char(string='机床名称', readonly=True)
machine_tool_cutter_spacing_code = fields.Char(string='机床刀位号', readonly=True)
diameter = fields.Char(string='直径(程式)', readonly=True)
tool_loading_length = fields.Char(string='装刀长', readonly=True)
clearance_length = fields.Char(string='避空长', readonly=True)
tool_included_angle = fields.Char(string='刀尖角R角', readonly=True)
L_D = fields.Char(string='L/D', readonly=True)
coarse_middle_thin = fields.Selection([("1", ""), ('2', ''), ('3', '')], string='粗/中/精', readonly=True)
required_cutting_time = fields.Char(string='需要切割时间', readonly=True)
whether_standard_tool = fields.Boolean(string='是否标准刀', readonly=True)
need_knife_time = fields.Datetime(string='需要用刀时间', readonly=True)
name = fields.Char(string='工单任务编号', readonly=False)
cam_procedure_code = fields.Char(string='CAM程序编号', readonly=False)
cam_cutter_spacing_code = fields.Char(string='CAM刀位号', readonly=False)
functional_tool_code = fields.Char(string='功能刀具编码', readonly=False)
functional_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=False)
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=False)
machine_table_name_id = fields.Many2one('sf.machine_tool', string='机床名称', readonly=False)
machine_tool_cutter_spacing_code = fields.Char(string='机床刀位号', readonly=False)
diameter = fields.Char(string='直径(程式)', readonly=False)
tool_loading_length = fields.Char(string='装刀长', readonly=False)
clearance_length = fields.Char(string='避空长', readonly=False)
tool_included_angle = fields.Char(string='刀尖角R角', readonly=False)
L_D = fields.Char(string='L/D', readonly=False)
coarse_middle_thin = fields.Selection([("1", ""), ('2', ''), ('3', '')], string='粗/中/精', readonly=False)
required_cutting_time = fields.Char(string='需要切割时间', readonly=False)
whether_standard_tool = fields.Boolean(string='是否标准刀', readonly=False)
need_knife_time = fields.Datetime(string='需要用刀时间', readonly=False)
plan_execute_status = fields.Selection([('0', '待下发'), ('1', '执行中'), ('2', '已完成')],
string='计划执行状态', default='0', readonly=True)
string='计划执行状态', default='0', readonly=False)
applicant = fields.Char(string='申请人', readonly=True)
reason_for_applying = fields.Char(string='申请原因', readonly=True)
remark = fields.Char(string='备注说明', readonly=True)
reason_for_applying = fields.Char(string='申请原因', readonly=False)
remark = fields.Char(string='备注说明', readonly=False)
def automation_apply_for_tooling(self):
def apply_for_tooling(self):
"""
自动申请装刀
申请装刀
:return:
"""
self.env['sf.functional.tool.assembly'].create({
'functional_tool_code': self.functional_tool_code,
'name': self.functional_tool_name,
'functional_tool_type': self.functional_tool_type,
'name': self.functional_tool_name_id.id,
'functional_tool_type_id': self.functional_tool_type_id.id,
'functional_tool_diameter': self.diameter,
'functional_tool_length': self.tool_loading_length,
'loading_task_source': '0',
'coarse_middle_thin': None,
'tool_loading_length': None,
'applicant': self.applicant,
'applicant': self.env.user.name,
'reason_for_applying': self.reason_for_applying,
'use_tool_time': self.need_knife_time,
'machine_tool_name': self.machine_table_name,
'machine_tool_name_id': self.machine_table_name_id.id,
'machine_tool_code': self.cam_procedure_code,
'cutter_spacing_code': self.cam_cutter_spacing_code
})
# 将计划执行状态改为执行中
self.env['sf.cam.work.order.program.knife.plan'].search(
[('functional_tool_code', '=', self.functional_tool_code)]).write({'plan_execute_status': '1'})
[('functional_tool_code', '=', self.functional_tool_code)]).write({'plan_execute_status': '1',
'applicant': self.env.user.name})
def revocation(self):
"""
撤回装刀申请
:return:
"""
self.env['sf.functional.tool.assembly'].search(
[('functional_tool_code', '=', self.functional_tool_code)]).unlink()
[('functional_tool_code', '=', self.functional_tool_code),
('loading_task_source', '=', '0')]).unlink()
# 将计划执行状态改为待执行
self.env['sf.cam.work.order.program.knife.plan'].search(
[('functional_tool_code', '=', self.functional_tool_code)]).write({'plan_execute_status': '0'})
[('functional_tool_code', '=', self.functional_tool_code)]).write({'plan_execute_status': '0',
'applicant': None})
@@ -489,18 +502,57 @@ class FunctionalToolAssembly(models.Model):
_order = 'use_tool_time asc'
functional_tool_code = fields.Char(string='功能刀具编码', readonly=True)
name = fields.Char(string='功能刀具名称', readonly=True)
functional_tool_type = fields.Char(string='功能刀具类型', readonly=True)
name = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=True)
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True)
functional_tool_diameter = fields.Char(string='功能刀具直径', readonly=True)
functional_tool_length = fields.Char(string='功能刀具伸出长', readonly=True)
functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=True)
functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False)
# 整体式刀具型号
mrs_cutting_tool_integral_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_tool_assembly_id',
string='整体式刀具型号', readonly=True, domain=
[('mrs_cutting_tool_material_name', '=', '整体式刀具')])
integral_code = fields.Char('整体式刀具序列号', readonly=True)
integral_name = fields.Char('整体式刀具名称', readonly=True)
sf_tool_brand_id_1 = fields.Many2one('sf.machine.brand', '整体式刀具品牌', readonly=True)
# 刀片型号
mrs_cutting_tool_blade_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_tool_assembly_id',
string='刀片型号', readonly=True, domain=
[('mrs_cutting_tool_material_name', '=', '刀片')])
blade_code = fields.Char('刀片序列号', readonly=True)
blade_name = fields.Char('刀片名称', readonly=True)
sf_tool_brand_id_2 = fields.Many2one('sf.machine.brand', '刀片品牌', readonly=True)
# 刀杆型号
mrs_cutting_tool_cutterbar_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_tool_assembly_id',
string='刀杆型号', readonly=True, domain=
[('mrs_cutting_tool_material_name', '=', '刀杆')])
bar_code = fields.Char('刀杆序列号', readonly=True)
bar_name = fields.Char('刀杆名称', readonly=True)
sf_tool_brand_id_3 = fields.Many2one('sf.machine.brand', '刀杆品牌', readonly=True)
# 刀盘型号
mrs_cutting_tool_cutterpad_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_tool_assembly_id',
string='刀盘型号', readonly=True, domain=
[('mrs_cutting_tool_material_name', '=', '刀盘')])
pad_code = fields.Char('刀盘序列号', readonly=True)
pad_name = fields.Char('刀盘名称', readonly=True)
sf_tool_brand_id_4 = fields.Many2one('sf.machine.brand', '刀盘品牌', readonly=True)
# 刀柄型号
mrs_cutting_tool_cutterhandle_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_tool_assembly_id',
string='刀柄型号', readonly=True, domain=
[('mrs_cutting_tool_material_name', '=', '刀柄')])
handle_code = fields.Char('刀柄序列号', readonly=True)
handle_name = fields.Char('刀柄名称', readonly=True)
sf_tool_brand_id_5 = fields.Many2one('sf.machine.brand', '刀柄品牌', readonly=True)
# 夹头型号
mrs_cutting_tool_cutterhead_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_tool_assembly_id',
string='夹头型号', readonly=True, domain=
[('mrs_cutting_tool_material_name', '=', '夹头')])
chuck_code = fields.Char('夹头序列号', readonly=True)
chuck_name = fields.Char('夹头名称', readonly=True)
sf_tool_brand_id_6 = fields.Many2one('sf.machine.brand', '夹头品牌', readonly=True)
tool_name = fields.Char(string='刀具名称', readonly=True)
tool_brand = fields.Char(string='品牌', readonly=True)
tool_type = fields.Char(string='型号', readonly=True)
knife_handle_name = fields.Char(string='刀柄名称', readonly=True)
knife_handle_brand = fields.Char(string='品牌', readonly=True)
knife_handle_type = fields.Char(string='型号', readonly=True)
coarse_middle_thin = fields.Selection([("1", ""), ('2', ''), ('3', '')], string='粗/中/精', readonly=True)
tool_loading_length = fields.Char(string='装刀长', readonly=True)
new_former = fields.Selection([('0', ''), ('1', '')], string='新/旧', readonly=True)
@@ -515,8 +567,8 @@ class FunctionalToolAssembly(models.Model):
apply_time = fields.Datetime(string='申请时间', default=fields.Datetime.now(), readonly=True)
assemble_status = fields.Selection([('0', '待组装'), ('1', '已组装'), ('2', '已出库')],string='组装状态', default='0', readonly=True)
use_tool_time = fields.Datetime(string='用刀时间', readonly=True)
production_line_name = fields.Char(string='产线名称', readonly=True)
machine_tool_name = fields.Char(string='机床名称', readonly=True)
production_line_name_id = fields.Many2one('sf.production.line', string='产线名称', readonly=False)
machine_tool_name_id = fields.Many2one('sf.machine_tool', string='机床名称', readonly=True)
machine_tool_code = fields.Char(string='机台号', readonly=True)
cutter_spacing_code = fields.Char(string='刀位号', readonly=True)
@@ -526,7 +578,7 @@ class FunctionalToolAssembly(models.Model):
receive_time = fields.Datetime(string='领用出库时间', readonly=True)
remark = fields.Char(string='备注说明', readonly=True)
check_box_1 = fields.Boolean(string='复选框', default=False, readonly=True)
check_box_1 = fields.Boolean(string='复选框', default=False, readonly=False)
@api.onchange('assemble_status')
def check_box(self):
@@ -540,15 +592,33 @@ class FunctionalToolAssembly(models.Model):
:return:
"""
self.env['sf.functional.tool.assembly'].search([
('machine_tool_name', '=', self.machine_tool_name),
('machine_tool_name_id', '=', self.machine_tool_name_id.id),
('cutter_spacing_code', '=', self.cutter_spacing_code)
]).write({
'tool_name': None,
'tool_brand': None,
'tool_type': None,
'knife_handle_name': None,
'knife_handle_brand': None,
'knife_handle_type': None,
'mrs_cutting_tool_integral_model_ids': None,
'integral_code': None,
'integral_name': None,
'sf_tool_brand_id_1': None,
'mrs_cutting_tool_blade_model_ids': None,
'blade_code': None,
'blade_name': None,
'sf_tool_brand_id_2': None,
'mrs_cutting_tool_cutterbar_model_ids': None,
'bar_code': None,
'bar_name': None,
'sf_tool_brand_id_3': None,
'mrs_cutting_tool_cutterpad_model_ids': None,
'pad_code': None,
'pad_name': None,
'sf_tool_brand_id_4': None,
'mrs_cutting_tool_cutterhandle_model_ids': None,
'handle_code': None,
'handle_name': None,
'sf_tool_brand_id_5': None,
'mrs_cutting_tool_cutterhead_model_ids': None,
'chuck_code': None,
'chuck_name': None,
'sf_tool_brand_id_6': None,
'coarse_middle_thin': None,
'tool_loading_length': None,
'new_former': None,
@@ -570,14 +640,13 @@ class FunctionalToolAssembly(models.Model):
self.env['sf.delivery.of.cargo.from.storage'].search([]).unlink()
vals = self.env['sf.functional.tool.assembly'].search([('check_box_1', '=', True),('assemble_status', '=', '1')])
if vals:
for val in vals:
self.env['sf.delivery.of.cargo.from.storage'].create({
'functional_tool_code': val.functional_tool_code,
'name': val.name,
'functional_tool_type': val.functional_tool_type,
'production_line_name': val.production_line_name,
'name': val.name.id,
'functional_tool_type_id': val.functional_tool_type_id.id,
'production_line_name_id': val.production_line_name_id.id,
'machine_tool_code': val.machine_tool_code,
'receive_person': val.receive_person,
'receive_time': val.receive_time
@@ -585,9 +654,9 @@ class FunctionalToolAssembly(models.Model):
else:
self.env['sf.delivery.of.cargo.from.storage'].create({
'functional_tool_code': self.functional_tool_code,
'name': self.name,
'functional_tool_type': self.functional_tool_type,
'production_line_name': self.production_line_name,
'name': self.name.id,
'functional_tool_type_id': self.functional_tool_type_id.id,
'production_line_name_id': self.production_line_name_id.id,
'machine_tool_code': self.machine_tool_code,
'receive_person': self.receive_person,
'receive_time': self.receive_time

View File

@@ -14,6 +14,9 @@ class SfToolMaterialSearch(models.Model):
mrs_cutting_tool_type_id = fields.Many2one(
'sf.cutting.tool.type', '刀具类型',
domain="[('mrs_cutting_tool_material_id.name', '=', mrs_cutting_tool_material_name)]")
# 关联刀具物料名称
mrs_cutting_tool_material_name = fields.Char(related='mrs_cutting_tool_material_id.name', string='刀具物料名称',
store=True)
mrs_machine_brand_id = fields.Many2one('sf.machine.brand', '品牌')
# 关联刀具型号
# mrs_cutting_tool_model_id = fields.Many2one('sf.cutting.tool.model', '刀具型号')

View File

@@ -10,7 +10,6 @@ access_sf_machine_table_tool_changing_apply,sf.machine.table.tool.changing.apply
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_apply_for_tooling,sf.apply.for.tooling,model_sf_apply_for_tooling,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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
10 access_sf_apply_for_tooling access_sf_functional_tool_assembly sf.apply.for.tooling sf.functional.tool.assembly model_sf_apply_for_tooling model_sf_functional_tool_assembly base.group_user 1 1 1 1
11 access_sf_functional_tool_assembly access_sf_functional_tool_assembly_order sf.functional.tool.assembly sf.functional.tool.assembly.order model_sf_functional_tool_assembly model_sf_functional_tool_assembly_order base.group_user 1 1 1 1
12 access_sf_functional_tool_assembly_order access_sf_delivery_of_cargo_from_storage sf.functional.tool.assembly.order sf.delivery.of.cargo.from.storage model_sf_functional_tool_assembly_order model_sf_delivery_of_cargo_from_storage base.group_user 1 1 1 1
access_sf_delivery_of_cargo_from_storage sf.delivery.of.cargo.from.storage model_sf_delivery_of_cargo_from_storage base.group_user 1 1 1 1
13 access_sf_tool_material_search sf.tool.material.search model_sf_tool_material_search base.group_user 1 1 1 1
14
15

View File

@@ -9,14 +9,13 @@
<tree string="功能刀具列表">
<field name="code" />
<field name="name" />
<field name="mrs_cutting_tool_type_id"/>
<field name="mrs_cutting_tool_type_id" />
<field name="mrs_cutting_tool_integral_model_ids" optional="hide"/>
<field name="mrs_cutting_tool_blade_model_ids" optional="hide"/>
<field name="mrs_cutting_tool_cutterbar_model_ids" optional="hide"/>
<field name="mrs_cutting_tool_cutterpad_model_ids" optional="hide"/>
<field name="mrs_cutting_tool_cutterhandle_model_ids" optional="hide"/>
<field name="mrs_cutting_tool_cutterhead_model_ids" optional="hide"/>
<field name="mrs_cutting_tool_type_id" />
<field name="image" widget='image'/>
</tree>
</field>
@@ -536,16 +535,44 @@
<tree>
<field name="name"/>
<field name="machine_tool_code" invisible="1"/>
<field name="machine_table_type"/>
<field name="machine_table_type_id"/>
<field name="cutter_spacing_code"/>
<field name="functional_tool_name"/>
<field name="functional_tool_type"/>
<field name="functional_tool_code"/>
<field name="functional_tool_name_id"/>
<field name="replacement_tool_code"/>
<field name="replacement_tool_name"/>
<field name="replacement_tool_type"/>
<field name="replacement_tool_name_id"/>
<field name="applicant"/>
<field name="used_tool_time"/>
<field name="remark"/>
<field name="functional_tool_type_id" invisible="True"/>
<field name="coarse_middle_thin" invisible="True"/>
<field name="status" invisible="True"/>
<button string="换刀申请"
name="%(sf_tool_management.sf_tool_change_requirement_information_act)d"
type="action"
context="{ 'default_name':name,
'default_machine_tool_code': machine_tool_code,
'default_cutter_spacing_code': cutter_spacing_code,
'default_replacement_tool_code': functional_tool_code,
'default_replacement_tool_name_id': functional_tool_name_id,
'default_replacement_tool_type_id': functional_tool_type_id,
'default_replacement_tool_coarse_middle_thin': coarse_middle_thin}"
attrs="{'invisible': [('status', '!=', '0')]}"
class="btn-primary"
/>
<button string="转移"
name="%(sf_tool_management.sf_tool_transfer_request_information_act)d"
type="action"
context="{ 'default_CNC_machine_table_id':name,
'default_machine_tool_code': machine_tool_code,
'default_cutter_spacing_code': cutter_spacing_code,
'default_functional_tool_code': functional_tool_code,
'default_functional_tool_name_id': functional_tool_name_id,
'default_functional_tool_type_id': functional_tool_type_id}"
class="btn-primary"
attrs="{'invisible': [('status', '!=', '0')]}"
/>
<button string="撤回换刀申请" name="revocation_1" type="object" class="btn-primary" attrs="{'invisible': [('status', '!=', '1')]}"/>
<button string="撤回转移" name="revocation_2" type="object" class="btn-primary" attrs="{'invisible': [('status', '!=', '2')]}"/>
</tree>
</field>
</record>
@@ -563,8 +590,8 @@
'default_machine_tool_code': machine_tool_code,
'default_cutter_spacing_code': cutter_spacing_code,
'default_replacement_tool_code': functional_tool_code,
'default_replacement_tool_name': functional_tool_name,
'default_replacement_tool_type': functional_tool_type,
'default_replacement_tool_name_id': functional_tool_name_id,
'default_replacement_tool_type_id': functional_tool_type_id,
'default_replacement_tool_coarse_middle_thin': coarse_middle_thin}"
attrs="{'invisible': [('status', '!=', '0')]}"
class="btn-primary"
@@ -572,12 +599,12 @@
<button string="转移"
name="%(sf_tool_management.sf_tool_transfer_request_information_act)d"
type="action"
context="{ 'default_CNC_machine_table':name,
context="{ 'default_CNC_machine_table_id':name,
'default_machine_tool_code': machine_tool_code,
'default_cutter_spacing_code': cutter_spacing_code,
'default_functional_tool_code': functional_tool_code,
'default_functional_tool_name': functional_tool_name,
'default_functional_tool_type': functional_tool_type}"
'default_functional_tool_name_id': functional_tool_name_id,
'default_functional_tool_type_id': functional_tool_type_id}"
class="btn-primary"
attrs="{'invisible': [('status', '!=', '0')]}"
/>
@@ -588,14 +615,14 @@
<group string="基础信息">
<group>
<field name="name"/>
<field name="machine_table_type"/>
<field name="machine_table_type_id"/>
<field name="machine_tool_code" invisible="True"/>
<field name="cutter_spacing_code"/>
</group>
<group>
<field name="functional_tool_name"/>
<field name="functional_tool_type"/>
<field name="functional_tool_code"/>
<field name="functional_tool_name_id"/>
<field name="functional_tool_type_id"/>
</group>
</group>
<group string="数据信息">
@@ -614,8 +641,8 @@
</group>
<group string="待换刀具信息">
<group>
<field name="replacement_tool_name"/>
<field name="replacement_tool_type"/>
<field name="replacement_tool_name_id"/>
<field name="replacement_tool_type_id"/>
<field name="replacement_tool_coarse_middle_thin"/>
<field name="applicant"/>
<field name="status" invisible="True"/>
@@ -643,18 +670,16 @@
<search>
<field name="name"/>
<field name="machine_tool_code" invisible="1"/>
<field name="machine_table_type"/>
<field name="machine_table_type_id"/>
<field name="cutter_spacing_code"/>
<field name="functional_tool_name"/>
<field name="functional_tool_type"/>
<field name="functional_tool_code"/>
<field name="functional_tool_name_id"/>
<field name="replacement_tool_code"/>
<field name="replacement_tool_name"/>
<field name="replacement_tool_type"/>
<field name="replacement_tool_name_id"/>
<field name="applicant"/>
<field name="used_tool_time"/>
<!-- <searchpanel>-->
<!-- <field name="machine_table_type" string="机床类型" enable_counters="1"/>-->
<!-- </searchpanel>-->
<searchpanel>
<field name="name" string="CNC机床" enable_counters="1" icon="fa-filter"/>
</searchpanel>
</search>
</field>
</record>
@@ -677,12 +702,15 @@
<field name="name"/>
<field name="cam_procedure_code"/>
<field name="cam_cutter_spacing_code"/>
<field name="functional_tool_name"/>
<field name="functional_tool_type"/>
<field name="machine_table_name"/>
<field name="machine_table_name_id"/>
<field name="functional_tool_name_id"/>
<field name="functional_tool_type_id"/>
<field name="machine_tool_cutter_spacing_code"/>
<field name="applicant"/>
<field name="remark"/>
<field name="remark" optional="hide"/>
<field name="plan_execute_status" invisible="True"/>
<button string="申请装刀" name="apply_for_tooling" type="object" class="btn-primary" attrs="{'invisible': [('plan_execute_status', '!=', '0')]}" confirm="是否确认申请装刀"/>
<button string="撤回" name="revocation" type="object" class="btn-primary" attrs="{'invisible': [('plan_execute_status', '!=', '1')]}"/>
</tree>
</field>
</record>
@@ -693,30 +721,7 @@
<field name="arch" type="xml">
<form>
<header>
<button string="申请装刀"
name="%(sf_tool_management.sf_apply_for_tooling_act)d"
type="action"
context="{ 'default_name':name,
'default_cam_procedure_code': cam_procedure_code,
'default_machine_table_name': machine_table_name,
'default_cam_cutter_spacing_code': cam_cutter_spacing_code,
'default_functional_tool_code': functional_tool_code,
'default_functional_tool_name': functional_tool_name,
'default_functional_tool_type': functional_tool_type,
'default_diameter': diameter,
'default_tool_loading_length': tool_loading_length,
'default_clearance_length': clearance_length,
'default_tool_included_angle': tool_included_angle,
'default_L_D': L_D,
'default_coarse_middle_thin': coarse_middle_thin,
'default_whether_standard_tool': whether_standard_tool,
'default_need_knife_time': need_knife_time,
'default_applicant': applicant,
'default_required_cutting_time': required_cutting_time,
'default_reason_for_applying': reason_for_applying}"
class="btn-primary"
attrs="{'invisible': [('plan_execute_status', '!=', '0')]}"
/>
<button string="申请装刀" name="apply_for_tooling" type="object" class="btn-primary" attrs="{'invisible': [('plan_execute_status', '!=', '0')]}" confirm="是否确认申请装刀"/>
<button string="撤回" name="revocation" type="object" class="btn-primary" attrs="{'invisible': [('plan_execute_status', '!=', '1')]}"/>
</header>
@@ -726,12 +731,12 @@
<field name="name"/>
<field name="cam_procedure_code"/>
<field name="cam_cutter_spacing_code"/>
<field name="machine_table_name"/>
<field name="machine_table_name_id"/>
</group>
<group>
<field name="functional_tool_code"/>
<field name="functional_tool_name"/>
<field name="functional_tool_type"/>
<field name="functional_tool_name_id"/>
<field name="functional_tool_type_id"/>
<field name="machine_tool_cutter_spacing_code"/>
</group>
</group>
@@ -770,11 +775,14 @@
<field name="name"/>
<field name="cam_procedure_code"/>
<field name="cam_cutter_spacing_code"/>
<field name="functional_tool_name"/>
<field name="functional_tool_type"/>
<field name="machine_table_name"/>
<field name="machine_table_name_id"/>
<field name="functional_tool_name_id"/>
<field name="functional_tool_type_id"/>
<field name="machine_tool_cutter_spacing_code"/>
<field name="applicant"/>
<searchpanel>
<field name="machine_table_name_id" string="CNC机床" enable_counters="1" icon="fa-filter"/>
</searchpanel>
</search>
</field>
</record>
@@ -795,14 +803,41 @@
<tree>
<field name="functional_tool_code"/>
<field name="name"/>
<field name="functional_tool_type"/>
<field name="loading_task_source"/>
<field name="functional_tool_type_id"/>
<field name="loading_task_source" optional="hide"/>
<field name="applicant"/>
<field name="assemble_status"/>
<field name="assemble_status" optional="hide"/>
<field name="use_tool_time" />
<field name="receive_person"/>
<field name="receive_time"/>
<field name="remark"/>
<field name="remark" optional="hide"/>
<field name="machine_tool_name_id" invisible="True"/>
<field name="cutter_spacing_code" invisible="True"/>
<field name="functional_tool_length" invisible="True"/>
<field name="functional_tool_diameter" invisible="True"/>
<field name="functional_tool_cutting_type" invisible="True"/>
<button string="组装"
name="%(sf_tool_management.sf_functional_tool_assembly_order_act)d"
type="action"
context="{
'default_machine_tool_name_id': machine_tool_name_id,
'default_code': functional_tool_code,
'default_cutter_spacing_code': cutter_spacing_code,
'default_functional_tool_name_id': name,
'default_functional_tool_type_id': functional_tool_type_id,
'default_functional_tool_length': functional_tool_length,
'default_effective_length': None,
'default_functional_tool_diameter': functional_tool_diameter,
'default_tool_included_angle': None,
'default_functional_tool_cutting_type': functional_tool_cutting_type,
'default_required_cutting_time': None,
'default_whether_standard_tool': None}"
attrs="{'invisible': [('assemble_status', '!=', '0')]}"
class="btn-primary"/>
<button string="取消组装" name="cancel_functional_tool_assembly" type="object" attrs="{'invisible': [('assemble_status', '!=', '1')]}" class="btn-primary"/>
<button string="出库" name="show_popup" type="object" attrs="{'invisible': [('assemble_status', '!=', '1')]}" class="btn-primary"/>
</tree>
</field>
</record>
@@ -817,10 +852,11 @@
name="%(sf_tool_management.sf_functional_tool_assembly_order_act)d"
type="action"
context="{
'default_machine_tool_name': machine_tool_name,
'default_machine_tool_name_id': machine_tool_name_id,
'default_code': functional_tool_code,
'default_cutter_spacing_code': cutter_spacing_code,
'default_functional_tool_name': name,
'default_functional_tool_type': functional_tool_type,
'default_functional_tool_name_id': name,
'default_functional_tool_type_id': functional_tool_type_id,
'default_functional_tool_length': functional_tool_length,
'default_effective_length': None,
'default_functional_tool_diameter': functional_tool_diameter,
@@ -844,7 +880,7 @@
<group>
<field name="functional_tool_code"/>
<field name="name"/>
<field name="functional_tool_type"/>
<field name="functional_tool_type_id"/>
</group>
<group>
<field name="functional_tool_diameter"/>
@@ -852,20 +888,44 @@
<field name="functional_tool_cutting_type"/>
</group>
</group>
<group string="组装信息">
<group string="组装物料信息">
<group>
<field name="integral_code"/>
<field name="mrs_cutting_tool_integral_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="blade_code"/>
<field name="mrs_cutting_tool_blade_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="bar_code"/>
<field name="mrs_cutting_tool_cutterbar_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="pad_code"/>
<field name="mrs_cutting_tool_cutterpad_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="handle_code"/>
<field name="mrs_cutting_tool_cutterhandle_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="chuck_code"/>
<field name="mrs_cutting_tool_cutterhead_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
</group>
<group>
<field name="integral_name"/>
<field name="sf_tool_brand_id_1"/>
<field name="blade_name"/>
<field name="sf_tool_brand_id_2"/>
<field name="bar_name"/>
<field name="sf_tool_brand_id_3"/>
<field name="pad_name"/>
<field name="sf_tool_brand_id_4"/>
<field name="handle_name"/>
<field name="sf_tool_brand_id_5"/>
<field name="chuck_name"/>
<field name="sf_tool_brand_id_6"/>
</group>
</group>
<group string="组装参数信息">
<group>
<field name="tool_name"/>
<field name="tool_brand" string="刀具品牌"/>
<field name="tool_type" string="刀具型号"/>
<field name="coarse_middle_thin"/>
<field name="new_former"/>
<field name="tool_loading_length"/>
<field name="reference_length"/>
</group>
<group>
<field name="knife_handle_name"/>
<field name="knife_handle_brand" string="刀柄品牌"/>
<field name="knife_handle_type" string="刀柄型号"/>
<field name="cut_time"/>
<field name="cut_length"/>
<field name="cut_number"/>
@@ -873,8 +933,8 @@
</group>
<group string="申请信息">
<group>
<field name="production_line_name"/>
<field name="machine_tool_name"/>
<field name="production_line_name_id"/>
<field name="machine_tool_name_id"/>
<field name="machine_tool_code"/>
<field name="cutter_spacing_code"/>
<field name="applicant"/>
@@ -914,14 +974,17 @@
<search>
<field name="functional_tool_code"/>
<field name="name"/>
<field name="functional_tool_type"/>
<field name="functional_tool_type_id"/>
<field name="loading_task_source"/>
<field name="applicant"/>
<field name="assemble_status"/>
<field name="use_tool_time" />
<field name="use_tool_time"/>
<field name="receive_person"/>
<field name="receive_time"/>
<field name="remark"/>
<searchpanel>
<field name="functional_tool_type_id" enable_counters="1" icon="fa-filter"/>
</searchpanel>
</search>
</field>
</record>
@@ -932,8 +995,5 @@
<field name="res_model">sf.functional.tool.assembly</field>
<field name="view_mode">tree,form,search</field>
</record>
</data>
</odoo>

View File

@@ -104,19 +104,151 @@
<field name="chuck_feature" optional="hide"/>
<field name="image" widget="image" optional="hide"/>
<field name="number"/>
<field name="mrs_materials_model_id"/>
<field name="purchase_date"/>
<field name="purchase_batch"/>
<field name="supplier"/>
<field name="warehouse_name"/>
<field name="warehouse_area"/>
<field name="warehouse_location"/>
<field name="three_d_model" widget="many2one"/>
<field name="number" optional="hide"/>
<field name="mrs_materials_model_id" optional="hide"/>
<field name="purchase_date" optional="hide"/>
<field name="purchase_batch" optional="hide"/>
<field name="supplier" optional="hide"/>
<field name="warehouse_name" optional="show"/>
<field name="warehouse_area" optional="show"/>
<field name="warehouse_location" optional="show"/>
<field name="three_d_model" widget="many2one" optional="show"/>
</tree>
</field>
</record>
<record id="view_sf_tool_material_search_form" model="ir.ui.view">
<field name="name">sf.tool.material.search.form</field>
<field name="model">sf.tool.material.search</field>
<field name="arch" type="xml">
<form string="刀具物料查询">
<sheet>
<group string='基本信息'>
<group>
<field name="mrs_cutting_tool_material_name" invisible="1"/>
<field name="sequence"/>
<field name="code"/>
<field name="name"/>
<field name="mrs_cutting_tool_type_id"/>
<field name="mrs_machine_brand_id"/>
<!-- <field name="mrs_cutting_tool_model_id"/> -->
<field name="mrs_materials_model_id"/>
<field name="mrs_cutting_tool_material_id"/>
</group>
<group>
<field name="image" widget="image"/>
<field name="three_d_model" widget="many2one"/>
</group>
</group>
<group string='刀具库存信息'>
<group>
<field name="number"/>
<field name="mrs_materials_model_id"/>
<field name="purchase_date"/>
<field name="purchase_batch"/>
</group>
<group>
<field name="supplier"/>
<field name="warehouse_name"/>
<field name="warehouse_area"/>
<field name="warehouse_location"/>
</group>
</group>
<group string='刀具信息'>
<group>
<field name="blade_length"/>
<field name="blade_width"/>
<field name="blade_height"/>
<field name="blade_top_angle"/>
<field name="blade_front_angle"/>
<field name="blade_rear_angle"/>
<field name="blade_main_included_angle"/>
<field name="blade_r_angle"/>
<field name="blade_hardness"/>
<field name="blade_accuracy"/>
<field name="blade_coating_material_id"/>
<field name="blade_radius"/>
<field name="blade_nut"/>
<field name="mrs_cutting_tool_model_blade_cutter_pad_ids" widget="many2many_tags"/>
<field name="mrs_cutting_tool_model_blade_cutter_bar_ids" widget="many2many_tags"/>
<field name="integral_total_length"/>
<field name="integral_shank_length"/>
<field name="integral_blade_length"/>
<field name="integral_diameter"/>
<field name="integral_blade_number"/>
<field name="integral_front_angle"/>
<field name="integral_rear_angle"/>
<field name="integral_main_included_angle"/>
<field name="integral_accuracy"/>
<field name="integral_hardness"/>
<field name="integral_coating_material"/>
<field name="integral_nut"/>
<field name="integral_scope"/>
<field name="bar_c_diameter"/>
<field name="bar_total_length"/>
<field name="bar_blade_number"/>
<field name="bar_d_diameter"/>
<field name="mrs_cutting_tool_model_bar_blade_ids" widget="many2many_tags"/>
<field name="bar_wrench"/>
<field name="bar_screw"/>
<field name="bar_radius"/>
<field name="bar_accuracy"/>
<field name="bar_hardness"/>
<field name="bar_scope"/>
</group>
<group>
<field name="pad_c_diameter"/>
<field name="pad_total_length"/>
<field name="pad_blade_number"/>
<field name="pad_d_diameter"/>
<field name="mrs_cutting_tool_model_pad_blade_ids" widget="many2many_tags"/>
<field name="pad_wrench"/>
<field name="pad_screw"/>
<field name="pad_radius"/>
<field name="pad_accuracy"/>
<field name="pad_hardness"/>
<field name="pad_scope"/>
<field name="handle_length"/>
<field name="handle_diameter"/>
<field name="handle_flange_length"/>
<field name="handle_flange_diameter"/>
<field name="handle_clamping_diameter_min"/>
<field name="handle_clamping_diameter_max"/>
<field name="handle_jump_accuracy"/>
<field name="handle_max_speed"/>
<field name="handle_weight"/>
<field name="handle_body_accuracy"/>
<field name="handle_nut"/>
<field name="mrs_cutting_tool_model_handle_chuck_model_ids" widget="many2many_tags"/>
<field name="handle_clamping_range"/>
<field name="handle_detection_accuracy"/>
<field name="handle_detection_hardness"/>
<field name="handle_standard_speed"/>
<field name="chuck_accuracy"/>
<field name="chuck_clamping_diameter_min"/>
<field name="chuck_clamping_diameter_max"/>
<field name="chuck_diameter"/>
<field name="chuck_inner_diameter"/>
<field name="chuck_height"/>
<field name="chuck_nut"/>
<field name="mrs_cutting_tool_model_chuck_handle_model_ids" widget="many2many_tags"/>
<field name="chuck_clamping_range"/>
<field name="chuck_feature"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<!-- 刀具物料搜索 -->
<record id="search_sf_tool_material_search" model="ir.ui.view">
<field name="name">sf.tool.material.search.search</field>

View File

@@ -7,17 +7,17 @@ class ToolChangeRequirementInformation(models.TransientModel):
# tool_change_to_apply_id = fields.Many2one('sf.machine.table.tool.changing.apply', string='机床换刀申请')
name = fields.Char(string='CNC机床', readonly=True)
name = fields.Many2one('sf.machine_tool', string='CNC机床', readonly=True)
machine_tool_code = fields.Char(string='机台号', readonly=True)
cutter_spacing_code = fields.Char(string='刀位号', readonly=True)
replacement_tool_code = fields.Char(string='待换刀具编码')
replacement_tool_name = fields.Char(string='待换刀具名称')
replacement_tool_type = fields.Char(string='待换刀具类型')
replacement_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='待换刀具名称')
replacement_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='待换刀具类型')
replacement_tool_coarse_middle_thin = fields.Selection([("1", ""), ('2', ''), ('3', '')],
string='粗/中/精')
new_former = fields.Selection([('0', ''), ('1', '')], string='新/旧')
applicant = fields.Char(string='申请人')
applicant = fields.Char(string='申请人', default=lambda self: self.env.user.name, readonly=True)
used_tool_time = fields.Datetime(string='用刀时间')
reason_for_applying = fields.Char(string='申请原因')
remark = fields.Char(string='备注说明')
@@ -29,12 +29,12 @@ class ToolChangeRequirementInformation(models.TransientModel):
"""
# 封装数据
desc = {
'name': self.name,
'name': self.name.id,
'machine_tool_code': self.machine_tool_code,
'cutter_spacing_code': self.cutter_spacing_code,
'replacement_tool_code': self.replacement_tool_code,
'replacement_tool_name': self.replacement_tool_name,
'replacement_tool_type': self.replacement_tool_type,
'replacement_tool_name_id': self.replacement_tool_name_id.id,
'replacement_tool_type_id': self.replacement_tool_type_id.id,
'replacement_tool_coarse_middle_thin': self.replacement_tool_coarse_middle_thin,
'new_former': self.new_former,
'applicant': self.applicant,
@@ -51,13 +51,13 @@ class ToolChangeRequirementInformation(models.TransientModel):
# 功能刀具组装创建新任务
self.env['sf.machine.table.tool.changing.apply'].new_assembly_task({
'functional_tool_code': self.replacement_tool_code,
'name': self.replacement_tool_name,
'functional_tool_type': self.replacement_tool_type,
'name': self.replacement_tool_name_id.id,
'functional_tool_type_id': self.replacement_tool_type_id.id,
'loading_task_source': '1',
'applicant': self.applicant,
'reason_for_applying': self.reason_for_applying,
'use_tool_time': self.used_tool_time,
'machine_tool_name': self.name,
'machine_tool_name_id': self.name.id,
'machine_tool_code': self.machine_tool_code,
'cutter_spacing_code': self.cutter_spacing_code
})
@@ -70,18 +70,18 @@ class ToolTransferRequestInformation(models.TransientModel):
_name = 'sf.tool.transfer.request.information'
_description = '刀具转移申请信息'
CNC_machine_table = fields.Char(string='CNC机床', readonly=True)
CNC_machine_table_id = fields.Many2one('sf.machine_tool', string='CNC机床', readonly=True)
machine_tool_code = fields.Char(string='机台号', readonly=True)
cutter_spacing_code = fields.Char(string='刀位号', readonly=True)
functional_tool_code = fields.Char(string='功能刀具编码', readonly=True)
functional_tool_name = fields.Char(string='功能刀具名称', readonly=True)
functional_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=True)
# todo 功能刀具类型为 Many2one
functional_tool_type = fields.Char(string='功能刀具类型', readonly=True)
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True)
transfer_target = fields.Selection([('机台', '机台'),
('线边刀库', '线边刀库'),
('刀具房', '刀具房')], string='转移到:', default='线边刀库')
new_cnc_machine_table = fields.Char(string='机床名称')
new_cnc_machine_table_id = fields.Many2one('sf.machine_tool', string='机床名称')
new_machine_tool_code = fields.Char(string='机床号')
new_cutter_spacing_code = fields.Char(string='刀位号')
@@ -97,63 +97,7 @@ class ToolTransferRequestInformation(models.TransientModel):
:return:
"""
self.env['sf.machine.table.tool.changing.apply'].search(
[('CNC_machine_table', '=', self.CNC_machine_table)]).write({'status': '2'})
class ApplyForTooling(models.TransientModel):
_name = 'sf.apply.for.tooling'
_description = '申请装刀'
ticket_task_code = fields.Char(string='工单任务编号', readonly=True)
cam_procedure_code = fields.Char(string='CAM程序编号', readonly=True)
machine_table_name = fields.Char(string='机床名称', readonly=True)
cam_cutter_spacing_code = fields.Char(string='CAM刀位号', readonly=True)
functional_tool_code = fields.Char(string='功能刀具编码', readonly=True)
functional_tool_name = fields.Char(string='功能刀具名称', readonly=True)
functional_tool_type = fields.Char(string='功能刀具类型', readonly=True)
diameter = fields.Char(string='直径(程式)', readonly=True)
tool_loading_length = fields.Char(string='装刀长', readonly=True)
clearance_length = fields.Char(string='避空长', readonly=True)
tool_included_angle = fields.Char(string='刀尖角R角', readonly=True)
L_D = fields.Char(string='L/D', readonly=True)
coarse_middle_thin = fields.Selection([("1", ""), ('2', ''), ('3', '')], string='粗/中/精', readonly=True)
whether_standard_tool = fields.Boolean(string='是否标准刀', readonly=True)
need_knife_time = fields.Datetime(string='需要用刀时间', readonly=True)
required_cutting_time = fields.Char(string='需要切割时间', readonly=True)
reason_for_applying = fields.Char(string='申请原因', readonly=True)
applicant = fields.Char(string='申请人', invisible='1')
def apply_for_tooling(self):
"""
申请装刀
:return:
"""
self.env['sf.functional.tool.assembly'].create({
'functional_tool_code': self.functional_tool_code,
'name': self.functional_tool_name,
'functional_tool_type': self.functional_tool_type,
'functional_tool_diameter': self.diameter,
'functional_tool_length': self.tool_loading_length,
'loading_task_source': '0',
'coarse_middle_thin': None,
'tool_loading_length': None,
'applicant': self.applicant,
'reason_for_applying': self.reason_for_applying,
'use_tool_time': self.need_knife_time,
'machine_tool_name': self.machine_table_name,
'machine_tool_code': self.cam_procedure_code,
'cutter_spacing_code': self.cam_cutter_spacing_code
})
# 将计划执行状态改为执行中
self.env['sf.cam.work.order.program.knife.plan'].search(
[('functional_tool_code', '=', self.functional_tool_code)]).write({'plan_execute_status': '1'})
# 关闭弹出窗口
return {'type': 'ir.actions.act_window_close'}
[('name', '=', self.CNC_machine_table_id.id)]).write({'status': '2'})
class FunctionalToolAssemblyOrder(models.TransientModel):
@@ -161,10 +105,11 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
_description = '功能刀具组装单'
# 功能刀具申请信息
machine_tool_name = fields.Char(string='机床名称', readonly=True)
machine_tool_name_id = fields.Many2one('sf.machine_tool', string='机床名称', readonly=True)
code = fields.Char(string='功能刀具编码', readonly=True)
cutter_spacing_code = fields.Char(string='刀位号', readonly=True)
functional_tool_name = fields.Char(string='功能刀具名称', readonly=True)
functional_tool_type = fields.Char(string='功能刀具类型', readonly=True)
functional_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=True)
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True)
functional_tool_length = fields.Char(string='功能刀具伸出长', readonly=True)
effective_length = fields.Char(string='有效长', readonly=True)
functional_tool_diameter = fields.Char(string='功能刀具直径', readonly=True)
@@ -174,14 +119,50 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
whether_standard_tool = fields.Boolean(string='是否标准刀', readonly=True)
# 功能刀具组装信息
tool_name = fields.Char(string='刀具名称')
tool_code = fields.Char(string='刀具编码')
tool_brand = fields.Char(string='品牌')
tool_type = fields.Char(string='型号')
knife_handle_name = fields.Char(string='刀柄名称')
knife_handle_code = fields.Char(string='刀柄编码')
knife_handle_brand = fields.Char(string='品牌')
knife_handle_type = fields.Char(string='型号')
# 整体式刀具型号
mrs_cutting_tool_integral_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_tool_assembly_order_id',
string='整体式刀具型号', readonly=False, domain=
[('mrs_cutting_tool_material_name', '=', '整体式刀具')])
integral_code = fields.Char('整体式刀具序列号')
integral_name = fields.Char('整体式刀具名称')
sf_tool_brand_id_1 = fields.Many2one('sf.machine.brand', '整体式刀具品牌')
# 刀片型号
mrs_cutting_tool_blade_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_tool_assembly_order_id',
string='刀片型号', readonly=False, domain=
[('mrs_cutting_tool_material_name', '=', '刀片')])
blade_code = fields.Char('刀片序列号')
blade_name = fields.Char('刀片名称')
sf_tool_brand_id_2 = fields.Many2one('sf.machine.brand', '刀片品牌')
# 刀杆型号
mrs_cutting_tool_cutterbar_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_tool_assembly_order_id',
string='刀杆型号', readonly=False, domain=
[('mrs_cutting_tool_material_name', '=', '刀杆')])
bar_code = fields.Char('刀杆序列号')
bar_name = fields.Char('刀杆名称')
sf_tool_brand_id_3 = fields.Many2one('sf.machine.brand', '刀杆品牌')
# 刀盘型号
mrs_cutting_tool_cutterpad_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_tool_assembly_order_id',
string='刀盘型号', readonly=False, domain=
[('mrs_cutting_tool_material_name', '=', '刀盘')])
pad_code = fields.Char('刀盘序列号')
pad_name = fields.Char('刀盘名称')
sf_tool_brand_id_4 = fields.Many2one('sf.machine.brand', '刀盘品牌')
# 刀柄型号
mrs_cutting_tool_cutterhandle_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_tool_assembly_order_id',
string='刀柄型号', readonly=False, domain=
[('mrs_cutting_tool_material_name', '=', '刀柄')])
handle_code = fields.Char('刀柄序列号')
handle_name = fields.Char('刀柄名称')
sf_tool_brand_id_5 = fields.Many2one('sf.machine.brand', '刀柄品牌')
# 夹头型号
mrs_cutting_tool_cutterhead_model_ids = fields.Many2many('sf.cutting.tool.model', 'sf_functional_tool_assembly_order_id',
string='夹头型号', readonly=False, domain=
[('mrs_cutting_tool_material_name', '=', '夹头')])
chuck_code = fields.Char('夹头序列号')
chuck_name = fields.Char('夹头名称')
sf_tool_brand_id_6 = fields.Many2one('sf.machine.brand', '夹头品牌')
coarse_middle_thin = fields.Selection([("1", ""), ('2', ''), ('3', '')], string='粗/中/精')
tool_loading_length = fields.Char(string='装刀长')
new_former = fields.Selection([('0', ''), ('1', '')], string='新/旧')
@@ -196,15 +177,33 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
:return:
"""
self.env['sf.functional.tool.assembly'].search([
('machine_tool_name', '=', self.machine_tool_name),
('machine_tool_name_id', '=', self.machine_tool_name_id.id),
('cutter_spacing_code', '=', self.cutter_spacing_code)
]).write({
'tool_name': self.tool_name,
'tool_brand': self.tool_brand,
'tool_type': self.tool_type,
'knife_handle_name': self.knife_handle_name,
'knife_handle_brand': self.knife_handle_brand,
'knife_handle_type': self.knife_handle_type,
'mrs_cutting_tool_integral_model_ids': self.mrs_cutting_tool_integral_model_ids.ids,
'integral_code': self.integral_code,
'integral_name': self.integral_name,
'sf_tool_brand_id_1': self.sf_tool_brand_id_1,
'mrs_cutting_tool_blade_model_ids': self.mrs_cutting_tool_blade_model_ids.ids,
'blade_code': self.blade_code,
'blade_name': self.blade_name,
'sf_tool_brand_id_2': self.sf_tool_brand_id_2,
'mrs_cutting_tool_cutterbar_model_ids': self.mrs_cutting_tool_cutterbar_model_ids.ids,
'bar_code': self.bar_code,
'bar_name': self.bar_name,
'sf_tool_brand_id_3': self.sf_tool_brand_id_3,
'mrs_cutting_tool_cutterpad_model_ids': self.mrs_cutting_tool_cutterpad_model_ids.ids,
'pad_code': self.pad_code,
'pad_name': self.pad_name,
'sf_tool_brand_id_4': self.sf_tool_brand_id_4,
'mrs_cutting_tool_cutterhandle_model_ids': self.mrs_cutting_tool_cutterhandle_model_ids.ids,
'handle_code': self.handle_code,
'handle_name': self.handle_name,
'sf_tool_brand_id_5': self.sf_tool_brand_id_5,
'mrs_cutting_tool_cutterhead_model_ids': self.mrs_cutting_tool_cutterhead_model_ids.ids,
'chuck_code': self.chuck_code,
'chuck_name': self.chuck_name,
'sf_tool_brand_id_6': self.sf_tool_brand_id_6,
'coarse_middle_thin': self.coarse_middle_thin,
'tool_loading_length': self.tool_loading_length,
'new_former': self.new_former,
@@ -217,6 +216,38 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
'tool_loading_time': fields.Datetime.now()
})
# 封装功能刀具数据
desc = {
'code': self.code,
'name': self.functional_tool_name_id.name,
'mrs_cutting_tool_type_id': self.functional_tool_type_id.id,
'mrs_cutting_tool_integral_model_ids': self.mrs_cutting_tool_integral_model_ids.ids,
'mrs_cutting_tool_blade_model_ids': self.mrs_cutting_tool_blade_model_ids.ids,
'mrs_cutting_tool_cutterbar_model_ids': self.mrs_cutting_tool_cutterbar_model_ids.ids,
'mrs_cutting_tool_cutterpad_model_ids': self.mrs_cutting_tool_cutterpad_model_ids.ids,
'mrs_cutting_tool_cutterhandle_model_ids': self.mrs_cutting_tool_cutterhandle_model_ids.ids,
'mrs_cutting_tool_cutterhead_model_ids': self.mrs_cutting_tool_cutterhead_model_ids.ids,
'diameter': self.functional_tool_diameter,
'tool_grade': None,
'machining_accuracy': None,
'tool_length': self.tool_loading_length,
'blade_number': None,
'integral_blade_length': None,
'effective_blade_length': self.effective_length,
'max_life': None,
'is_standard': self.whether_standard_tool,
'applicable_range': None,
'image': None,
}
if self.new_former == '0':
# 如果是新刀,则创建功能刀具列表、
self.env['sf.functional.cutting.tool.entity'].create(desc)
# 创建功能刀具预警、实时分布、出入库记录的新记录
self.env['sf.functional.tool.warning'].create(desc)
self.env['sf.real.time.distribution.of.functional.tools'].create(desc)
self.env['sf.inbound.and.outbound.records.of.functional.tools'].create(desc)
# 关闭弹出窗口
return {'type': 'ir.actions.act_window_close'}
@@ -227,9 +258,9 @@ class DeliveryOfCargoFromStorage(models.TransientModel):
order = fields.Integer(string='')
functional_tool_code = fields.Char(string='功能刀具编码')
name = fields.Char(string='功能刀具名称')
functional_tool_type = fields.Char(string='功能刀具类型')
production_line_name = fields.Char(string='产线名称')
name = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称')
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型')
production_line_name_id = fields.Many2one('sf.production.line', string='产线名称')
machine_tool_code = fields.Char(string='机台号')
receive_person = fields.Char(string='领用人')
receive_time = fields.Datetime(string='领用出库时间')
@@ -240,11 +271,14 @@ class DeliveryOfCargoFromStorage(models.TransientModel):
:return:
"""
vals = self.env['sf.delivery.of.cargo.from.storage'].search([])
print(vals)
if vals:
for val in vals:
self.env['sf.functional.tool.assembly'].search([
('functional_tool_code', '=', val.functional_tool_code),
('name', '=', val.name)
('machine_tool_code', '=', val.machine_tool_code),
('name', '=', val.name.id),
('production_line_name_id', '=', val.production_line_name_id.id)
]).write({
'assemble_status': '2',
'receive_person': self.env.user.name,
@@ -253,13 +287,13 @@ class DeliveryOfCargoFromStorage(models.TransientModel):
tool_assembly = self.env['sf.functional.tool.assembly'].search([
('functional_tool_code', '=', val.functional_tool_code),
('name', '=', val.name)
('name', '=', val.name.id)
])
# 判断装刀任务来源如果来源于CAM装刀则修改CAM装刀的计划执行状态
if tool_assembly.loading_task_source == '0':
self.env['sf.cam.work.order.program.knife.plan'].search([
('functional_tool_code', '=', val.functional_tool_code),
('functional_tool_name', '=', val.name)
('functional_tool_name_id', '=', val.name.id)
]).write({
'plan_execute_status': '2'
})

View File

@@ -20,25 +20,17 @@
</group>
<group string="刀具信息">
<group>
<field name="replacement_tool_name"/>
</group>
<group>
<field name="replacement_tool_type"/>
</group>
</group>
<group>
<group>
<field name="replacement_tool_name_id"/>
<field name="replacement_tool_code"/>
<field name="replacement_tool_coarse_middle_thin"/>
<field name="used_tool_time"/>
</group>
<group>
<field name="new_former"/>
<field name="applicant"/>
</group>
</group>
<group>
<group>
<field name="replacement_tool_type_id"/>
<field name="used_tool_time"/>
<field name="new_former"/>
<field name="reason_for_applying"/>
</group>
</group>
</sheet>
@@ -69,7 +61,7 @@
<sheet>
<group string="机床信息">
<group>
<field name="CNC_machine_table"/>
<field name="CNC_machine_table_id"/>
<field name="cutter_spacing_code"/>
</group>
<group>
@@ -78,8 +70,8 @@
</group>
<group string="刀具信息">
<group>
<field name="functional_tool_name" string="刀具名称"/>
<field name="functional_tool_type" string="刀具类型"/>
<field name="functional_tool_name_id" string="刀具名称"/>
<field name="functional_tool_type_id" string="刀具类型"/>
</group>
<group>
<field name="functional_tool_code" string="刀具编码"/>
@@ -92,7 +84,7 @@
</group>
<group>
<group>
<field name="new_cnc_machine_table" attrs="{'invisible': [('transfer_target', '!=', '机台')]}"/>
<field name="new_cnc_machine_table_id" attrs="{'invisible': [('transfer_target', '!=', '机台')]}"/>
<field name="new_machine_tool_code" attrs="{'invisible': [('transfer_target', '!=', '机台')]}"/>
<field name="new_cutter_spacing_code" attrs="{'invisible': [('transfer_target', '!=', '机台')]}"/>
<field name="magazine_tool_warehouse_district" attrs="{'invisible': [('transfer_target', '!=', '线边刀库')]}"/>
@@ -120,67 +112,6 @@
</record>
<!--================================================申请装刀================================================-->
<record id="sf_apply_for_tooling_form" model="ir.ui.view">
<field name="name">申请装刀</field>
<field name="model">sf.apply.for.tooling</field>
<field name="arch" type="xml">
<form string="申请装刀">
<sheet>
<group string="基础信息">
<group>
<field name="ticket_task_code" string="工单编号"/>
</group>
</group>
<group>
<group>
<field name="machine_table_name" string="CAM指定机床"/>
<field name="cam_procedure_code" string="CAM程序编号"/>
<field name="cam_cutter_spacing_code" string="CAM指定刀位号"/>
</group>
<group>
<field name="functional_tool_name"/>
<field name="functional_tool_code"/>
<field name="functional_tool_type"/>
</group>
</group>
<group string="数据信息">
<group>
<field name="diameter" string="直径"/>
<field name="tool_included_angle" string="刀尖角"/>
<field name="clearance_length"/>
<field name="need_knife_time"/>
<field name="whether_standard_tool"/>
</group>
<group>
<field name="tool_loading_length"/>
<field name="L_D"/>
<field name="coarse_middle_thin"/>
<field name="required_cutting_time" string="需切削时长"/>
</group>
</group>
<group string="其他">
<field name="reason_for_applying"/>
</group>
</sheet>
<footer>
<button string="确定" name="apply_for_tooling" type="object" class="btn-primary" confirm="是否确认申请装刀"/>
<button string="取消" class="btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="sf_apply_for_tooling_act" model="ir.actions.act_window">
<field name="name">申请装刀</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sf.apply.for.tooling</field>
<field name="view_mode">form</field>
<field name="view_id" ref="sf_apply_for_tooling_form"/>
<field name="target">new</field>
</record>
<!--================================================功能刀具组装单================================================-->
<record id="sf_functional_tool_assembly_order_form" model="ir.ui.view">
<field name="name">功能刀具组装单</field>
@@ -190,48 +121,108 @@
<sheet>
<group string="功能刀具申请信息">
<group>
<field name="machine_tool_name"/>
<field name="functional_tool_name"/>
<field name="machine_tool_name_id"/>
<field name="code"/>
<field name="functional_tool_name_id"/>
<field name="functional_tool_length"/>
<field name="effective_length"/>
<field name="functional_tool_cutting_type"/>
<field name="required_cutting_time"/>
</group>
<group>
<field name="cutter_spacing_code"/>
<field name="functional_tool_type"/>
<field name="functional_tool_type_id"/>
<field name="functional_tool_diameter"/>
<field name="tool_included_angle"/>
<field name="whether_standard_tool"/>
<field name="required_cutting_time"/>
</group>
</group>
<group string="功能刀具组装信息">
<!-- <group string="功能刀具组装信息">-->
<!-- <group>-->
<!-- <group>-->
<!-- <field name="mrs_cutting_tool_integral_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>-->
<!-- <field name="mrs_cutting_tool_blade_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>-->
<!-- <field name="mrs_cutting_tool_cutterbar_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>-->
<!-- <field name="mrs_cutting_tool_cutterpad_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>-->
<!-- <field name="mrs_cutting_tool_cutterhandle_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>-->
<!-- <field name="mrs_cutting_tool_cutterhead_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>-->
<!-- <field name="tool_loading_length"/>-->
<!-- </group>-->
<!-- <group>-->
<!-- <field name="integral_code"/>-->
<!-- <field name="blade_code"/>-->
<!-- <field name="bar_code"/>-->
<!-- <field name="pad_code"/>-->
<!-- <field name="handle_code"/>-->
<!-- <field name="chuck_code"/>-->
<!-- <field name="coarse_middle_thin"/>-->
<!-- </group>-->
<!-- </group>-->
<!-- <group>-->
<!-- <group>-->
<!-- <field name="integral_name"/>-->
<!-- <field name="blade_name"/>-->
<!-- <field name="bar_name"/>-->
<!-- <field name="pad_name"/>-->
<!-- <field name="handle_name"/>-->
<!-- <field name="chuck_name"/>-->
<!-- <field name="new_former"/>-->
<!-- </group>-->
<!-- <group>-->
<!-- <field name="sf_tool_brand_id_1"/>-->
<!-- <field name="sf_tool_brand_id_2"/>-->
<!-- <field name="sf_tool_brand_id_3"/>-->
<!-- <field name="sf_tool_brand_id_4"/>-->
<!-- <field name="sf_tool_brand_id_5"/>-->
<!-- <field name="sf_tool_brand_id_6"/>-->
<!-- <field name="reference_length"/>-->
<!-- </group>-->
<!-- </group>-->
<!-- </group>-->
<!-- <group>-->
<!-- <group>-->
<!-- <field name="cut_time"/>-->
<!-- <field name="cut_length"/>-->
<!-- <field name="cut_number"/>-->
<!-- </group>-->
<!-- </group>-->
<group string="组装物料信息">
<group>
<group>
<field name="tool_name"/>
<field name="knife_handle_name"/>
<field name="tool_loading_length"/>
<field name="integral_code"/>
<field name="mrs_cutting_tool_integral_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="blade_code"/>
<field name="mrs_cutting_tool_blade_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="bar_code"/>
<field name="mrs_cutting_tool_cutterbar_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="pad_code"/>
<field name="mrs_cutting_tool_cutterpad_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="handle_code"/>
<field name="mrs_cutting_tool_cutterhandle_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
<field name="chuck_code"/>
<field name="mrs_cutting_tool_cutterhead_model_ids" options="{'no_create': True, 'no_quick_create': True}" widget="many2many_tags"/>
</group>
<group>
<field name="tool_code"/>
<field name="knife_handle_code"/>
<field name="integral_name"/>
<field name="sf_tool_brand_id_1"/>
<field name="blade_name"/>
<field name="sf_tool_brand_id_2"/>
<field name="bar_name"/>
<field name="sf_tool_brand_id_3"/>
<field name="pad_name"/>
<field name="sf_tool_brand_id_4"/>
<field name="handle_name"/>
<field name="sf_tool_brand_id_5"/>
<field name="chuck_name"/>
<field name="sf_tool_brand_id_6"/>
</group>
</group>
<group string="组装参数信息">
<group>
<field name="coarse_middle_thin"/>
</group>
</group>
<group>
<group>
<field name="tool_brand"/>
<field name="knife_handle_brand"/>
<field name="new_former"/>
</group>
<group>
<field name="tool_type"/>
<field name="knife_handle_type"/>
<field name="tool_loading_length"/>
<field name="reference_length"/>
</group>
</group>
</group>
<group>
<group>
<field name="cut_time"/>
<field name="cut_length"/>
@@ -267,8 +258,8 @@
<field name="order"/>
<field name="functional_tool_code"/>
<field name="name"/>
<field name="functional_tool_type"/>
<field name="production_line_name"/>
<field name="functional_tool_type_id"/>
<field name="production_line_name_id"/>
<field name="machine_tool_code"/>
<field name="receive_person"/>
<field name="receive_time"/>