Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改设备基础参数

This commit is contained in:
qihao.gong@jikimo.com
2023-07-18 10:47:43 +08:00
22 changed files with 2290 additions and 1419 deletions

View File

@@ -1,4 +1,2 @@
from . import models from . import models
from . import commons from . import commons
from . import wizard

View File

@@ -18,8 +18,6 @@
'views/common_view.xml', 'views/common_view.xml',
'views/fixture_view.xml', 'views/fixture_view.xml',
'views/functional_fixture_view.xml', 'views/functional_fixture_view.xml',
'wizard/workpiece_clamping_wizard_view.xml',
'wizard/stock_removal_wizard_view.xml',
'views/menu_view.xml', 'views/menu_view.xml',
"views/tool_views.xml", "views/tool_views.xml",
"views/tool_menu.xml", "views/tool_menu.xml",

View File

@@ -32,21 +32,18 @@ class FixtureModel(models.Model):
clamping_way = fields.Char(string="装夹方式") clamping_way = fields.Char(string="装夹方式")
port_type = fields.Char(string="接口类型") port_type = fields.Char(string="接口类型")
model_file = fields.Binary(string="3D模型图") model_file = fields.Binary(string="3D模型图")
length = fields.Char(string="长度[mm]") length = fields.Char(string="长度[mm]", size=6)
width = fields.Char(string="宽度[mm]") width = fields.Char(string="宽度[mm]", size=6)
height = fields.Char(string="高度[mm]") height = fields.Char(string="高度[mm]", size=6)
weight = fields.Char(string="重量[kg]") weight = fields.Char(string="重量[kg]", size=4)
clamp_workpiece_length_max = fields.Char(string="夹持工件长度MAX[mm]") clamp_workpiece_length_max = fields.Char(string="夹持工件长度MAX[mm]", size=6)
clamp_workpiece_width_max = fields.Char(string="夹持工件宽度MAX[mm]") clamp_workpiece_width_max = fields.Char(string="夹持工件宽度MAX[mm]", size=6)
clamp_workpiece_height_max = fields.Char(string="夹持工件高度MAX[mm]") clamp_workpiece_height_max = fields.Char(string="夹持工件高度MAX[mm]", size=6)
clamp_workpiece_diameter_max = fields.Char(string="夹持工件直径MAX[mm]") clamp_workpiece_diameter_max = fields.Char(string="夹持工件直径MAX[mm]", size=6)
maximum_carrying_weight = fields.Char(string="最大承载重量[kg]") maximum_carrying_weight = fields.Char(string="最大承载重量[kg]", size=4)
maximum_clamping_force = fields.Char(string="最大夹持力[n]") maximum_clamping_force = fields.Char(string="最大夹持力[n]", size=8)
materials_model_id = fields.Many2one('sf.materials.model', string="材料型号") materials_model_id = fields.Many2one('sf.materials.model', string="材料型号")
driving_way = fields.Char(string="驱动方式") driving_way = fields.Char(string="驱动方式")
apply_machine_tool_type = fields.Char(string="适用机床型号") apply_machine_tool_type_id = fields.Many2one('sf.machine_tool.type', string="适用机床型号")
through_hole_size = fields.Integer(string="过孔大小[mm]", size=6) through_hole_size = fields.Integer(string="过孔大小[mm]", size=6)
screw_size = fields.Integer(string="螺牙大小[mm]", size=6) screw_size = fields.Integer(string="螺牙大小[mm]", size=6)

View File

@@ -24,8 +24,6 @@ access_sf_multi_mounting_type,sf_multi_mounting_type,model_sf_multi_mounting_typ
access_sf_fixture_model,sf_fixture_model,model_sf_fixture_model,base.group_user,1,1,1,1 access_sf_fixture_model,sf_fixture_model,model_sf_fixture_model,base.group_user,1,1,1,1
access_sf_functional_fixture_type,sf_functional_fixture_type,model_sf_functional_fixture_type,base.group_user,1,1,1,1 access_sf_functional_fixture_type,sf_functional_fixture_type,model_sf_functional_fixture_type,base.group_user,1,1,1,1
access_sf_functional_fixture,sf_functional_fixture,model_sf_functional_fixture,base.group_user,1,1,1,1 access_sf_functional_fixture,sf_functional_fixture,model_sf_functional_fixture,base.group_user,1,1,1,1
access_sf_workpiece_clamping_wizard,sf_workpiece_clamping_wizard,model_sf_workpiece_clamping_wizard,base.group_user,1,1,1,1
access_sf_stock_removal_wizard,sf_stock_removal_wizard,model_sf_stock_removal_wizard,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
24 access_sf_fixture_model sf_fixture_model model_sf_fixture_model base.group_user 1 1 1 1
25 access_sf_functional_fixture_type sf_functional_fixture_type model_sf_functional_fixture_type base.group_user 1 1 1 1
26 access_sf_functional_fixture sf_functional_fixture model_sf_functional_fixture base.group_user 1 1 1 1
access_sf_workpiece_clamping_wizard sf_workpiece_clamping_wizard model_sf_workpiece_clamping_wizard base.group_user 1 1 1 1
access_sf_stock_removal_wizard sf_stock_removal_wizard model_sf_stock_removal_wizard base.group_user 1 1 1 1
27
28
29

View File

@@ -239,7 +239,7 @@
attrs='{"invisible": [("fixture_material_type","!=",("转接板(锁板)托盘"))]}'/> attrs='{"invisible": [("fixture_material_type","!=",("转接板(锁板)托盘"))]}'/>
<field name="driving_way" <field name="driving_way"
attrs='{"invisible": [("fixture_material_type","not in",("虎钳托盘","零点卡盘"))]}'/> attrs='{"invisible": [("fixture_material_type","not in",("虎钳托盘","零点卡盘"))]}'/>
<field name="apply_machine_tool_type" <field name="apply_machine_tool_type_id"
attrs='{"invisible": [("fixture_material_type","!=",("零点卡盘"))]}'/> attrs='{"invisible": [("fixture_material_type","!=",("零点卡盘"))]}'/>
</group> </group>
</group> </group>

View File

@@ -1,4 +0,0 @@
# -*- coding: utf-8 -*-
from . import workpiece_clamping_wizard
from . import stock_removal_wizard

View File

@@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
import logging
_logger = logging.getLogger(__name__)
class StockRemovalWizard(models.Model):
_name = 'sf.stock.removal.wizard'
_description = "出库"
code = fields.Char(string="功能夹具编码", size=25, required=True)
name = fields.Char(string="功能夹具名称", size=25, required=True)
type = fields.Char(string="功能夹具类型", required=True)
production_line = fields.Char(string="生产线", required=True)
machine_tool = fields.Many2one('sf.machine_tool', string="机床", required=True)
def submit(self):
return 1

View File

@@ -1,36 +0,0 @@
<openerp>
<data>
<record model="ir.ui.view" id="stock_removal_wizard_form_view">
<field name="name">sf.stock.removal.wizard.form.view</field>
<field name="model">sf.stock.removal.wizard</field>
<field name="arch" type="xml">
<form string="装夹">
<sheet>
<group>
<group>
<field name="code" string="功能夹具编码"></field>
<field name="type" string="类型"></field>
<field name="machine_tool" string="机台"></field>
</group>
<group>
<field name="name" string="功能夹具名称"></field>
<field name="production_line"></field>
</group>
</group>
<footer>
<button string="确定" name="submit" type="object" class="oe_highlight"/>
<button string="取消" class="btn btn-secondary" special="cancel"/>
</footer>
</sheet>
</form>
</field>
</record>
<record id="action_stock_removal_wizard" model="ir.actions.act_window">
<field name="name">出库</field>
<field name="res_model">sf.stock.removal.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</data>
</openerp>

View File

@@ -1,56 +0,0 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
import logging
_logger = logging.getLogger(__name__)
class WorkpieceClampingWizard(models.Model):
_name = 'sf.workpiece.clamping.wizard'
_description = "工件装夹"
# 以下为坯料(工件)申请信息
apply_code = fields.Char(string="申请坯料编码", size=25, required=True)
apply_name = fields.Char(string="申请坯料名称", size=25, required=True)
material_id = fields.Many2one('sf.production.materials', string="坯料材料", required=True)
apply_width = fields.Float(string="申请宽度", required=True)
apply_length = fields.Float(string="申请长度", required=True)
apply_height = fields.Float(string="申请高度", required=True)
apply_weight = fields.Float(string="申请重量", required=True)
apply_diameter = fields.Float(string="申请直径", required=True)
surface_accuracy = fields.Char(string="表面精度", required=True)
# 以下为坯料(工件)装夹信息
chuck_name = fields.Char(string="卡盘名称", required=True)
chuck_brand_id = fields.Many2one('sf.machine.brand', string="卡盘品牌", required=True)
chuck_type_id = fields.Char(string="卡盘类型", required=True)
chuck_model_id = fields.Char(string="卡盘型号", required=True)
tray_name = fields.Char(string="托盘名称", required=True)
tray_brand_id = fields.Many2one('sf.machine.brand', string="托盘品牌", required=True)
tray_type_id = fields.Char(string="托盘类型", required=True)
tray_model_id = fields.Char(string="托盘型号", required=True)
real_code = fields.Char(string="真实坯料编码", size=25, required=True)
real_name = fields.Char(string="真实坯料名称", size=25, required=True)
real_width = fields.Float(string="真实宽度", required=True)
real_length = fields.Float(string="真实长度", required=True)
real_height = fields.Float(string="真实高度", required=True)
real_diameter = fields.Float(string="真实直径", required=True)
# 以下为坯料(工件)预调信息
# hole_site = fields.Char(string="孔位", required=True)
# curve = fields.Char(string="曲线", required=True)
# straight_line = fields.Char(string="直线", required=True)
# x_axis = fields.Float(string="X轴", required=True)
# y_axis = fields.Float(string="Y轴", required=True)
# z_axis = fields.Float(string="Z轴", required=True)
# tool_radius = fields.Float(string="刀具半径", required=True)
# tool_length = fields.Float(string="刀具长度", required=True)
# tool_offset_point = fields.Float(string="刀具偏移点", required=True)
# tool_compensation_value = fields.Float(string="刀具补偿值", required=True)
# cutting_spindle_speed = fields.Float(string="切削主轴转速", required=True)
# cutting_feed_rate = fields.Float(string="切削进给速度", required=True)
# depth_of_cutting = fields.Float(string="切削深度", required=True)
# cutting_direction = fields.Char(string="切削方向", required=True)
preset_program_information = fields.Char(string="预调程序信息", required=True)
def submit(self):
return 1

View File

@@ -1,87 +0,0 @@
<openerp>
<data>
<record model="ir.ui.view" id="workpiece_clamping_wizard_form_view">
<field name="name">sf.workpiece.clamping.wizard.form.view</field>
<field name="model">sf.workpiece.clamping.wizard</field>
<field name="arch" type="xml">
<form string="装夹">
<sheet>
<group string="坯料(工件)申请信息">
<group>
<field name="apply_code" string="坯料编码"></field>
<field name="material_id" string="坯料材质"></field>
</group>
<group>
<field name="apply_name" string="坯料名称"></field>
<label for="apply_length" string="尺寸[mm]"/>
<div class="o_address_format">
<label for="apply_length" string="长"/>
<field name="apply_length" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="apply_width" string="宽"/>
<field name="apply_width" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="apply_height" string="高"/>
<field name="apply_height" class="o_address_zip"
options="{'format': false}"/>
</div>
<field name="apply_diameter" string="直径[mm]"></field>
</group>
</group>
<group string="坯料(工件)装夹信息">
<group string="卡盘">
<field name="chuck_type_id"></field>
<field name="chuck_name"></field>
<field name="chuck_brand_id"></field>
<field name="chuck_model_id"></field>
</group>
<group string="托盘">
<field name="tray_type_id"></field>
<field name="tray_name"></field>
<field name="tray_brand_id"></field>
<field name="tray_model_id"></field>
</group>
<group string="坯料">
<field name="real_code" string="坯料编码"></field>
<field name="real_name" string="坯料名称"></field>
<label for="real_length" string="尺寸[mm]"/>
<div class="o_address_format">
<label for="real_length" string="长"/>
<field name="real_length" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="real_width" string="宽"/>
<field name="real_width" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="real_height" string="高"/>
<field name="real_height" class="o_address_zip"
options="{'format': false}"/>
</div>
<field name="real_diameter" string="直径[mm]"></field>
</group>
</group>
<group>
<group>
<field name="preset_program_information"></field>
</group>
</group>
<footer>
<button string="确定" name="submit" type="object" class="oe_highlight"/>
<button string="取消" class="btn btn-secondary" special="cancel"/>
</footer>
</sheet>
</form>
</field>
</record>
<record id="action_workpiece_clamping_wizard" model="ir.actions.act_window">
<field name="name">装夹</field>
<field name="res_model">sf.workpiece.clamping.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</data>
</openerp>

View File

@@ -34,12 +34,6 @@ class Sf_Bf_Connect(http.Controller):
logging.info('get_bfm_process_or===================================:%s' % order_id.name) logging.info('get_bfm_process_or===================================:%s' % order_id.name)
aa.default_code = kw['order_number'] aa.default_code = kw['order_number']
logging.info('get_bfm_process_order_listaaaaaaaaaaaaaaaaaaaaaaaaaaaa================:%s' % aa.default_code) logging.info('get_bfm_process_order_listaaaaaaaaaaaaaaaaaaaaaaaaaaaa================:%s' % aa.default_code)
# # 给stock.picking的default_code字段赋值
# bb = request.env['stock.picking'].sudo().search([('origin', '=', order_id.name)])
# logging.info('get_bfm_process_or===================================:%s' % order_id.name)
# bb.default_code = kw['order_number']
# logging.info('get_bfm_process_order_listbbbbbbbbbbbbbbbbbbbbbbbbbbbb================:%s' % bb.default_code)
for item in bfm_process_order_list: for item in bfm_process_order_list:
product = request.env['product.template'].sudo().product_create(product_id, item, order_id, product = request.env['product.template'].sudo().product_create(product_id, item, order_id,
kw['order_number'], i) kw['order_number'], i)

View File

@@ -15,7 +15,6 @@
'data': [ 'data': [
'data/product_data.xml', 'data/product_data.xml',
'data/uom_data.xml', 'data/uom_data.xml',
# 'data/cutting_tool_data.xml',
'views/product_template_view.xml', 'views/product_template_view.xml',
'views/product_workorder.xml' 'views/product_workorder.xml'
], ],

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="product_category_cutting_tool_sf" model="product.category">
<field name="name">刀具</field>
<field name="type">刀具</field>
</record>
<record id="product_category_clamp_sf" model="product.category">
<field name="name">夹具</field>
<field name="type">夹具</field>
</record>
</data>
</odoo>

View File

@@ -79,7 +79,7 @@
<page string="刀具物料参数" attrs="{'invisible': [('categ_type', '!=', '刀具')]}"> <page string="刀具物料参数" attrs="{'invisible': [('categ_type', '!=', '刀具')]}">
<group> <group>
<!--整体式刀具--> <!--整体式刀具-->
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '整体式刀具')]}"> <group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '整体式刀具')]}">
<field name="brand_id" <field name="brand_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'required': [('cutting_tool_type', '=', '整体式刀具')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'required': [('cutting_tool_type', '=', '整体式刀具')]}"/>
<field name="cutting_tool_total_length"/> <field name="cutting_tool_total_length"/>
@@ -91,10 +91,9 @@
<field name="cutting_tool_blade_number" <field name="cutting_tool_blade_number"
attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')]}"/>
</group> </group>
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '整体式刀具')]}"> <group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '整体式刀具')]}">
<field name="cutting_tool_material_model_id" <field name="cutting_tool_material_model_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'required': [('cutting_tool_type', '=', '整体式刀具')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'required': [('cutting_tool_type', '=', '整体式刀具')]}"/>
/>
<field name="cutting_tool_front_angle" <field name="cutting_tool_front_angle"
attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')]}"/>
<field name="cutting_tool_rear_angle" <field name="cutting_tool_rear_angle"
@@ -109,7 +108,7 @@
attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')]}"/>
</group> </group>
<!--刀片--> <!--刀片-->
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀片')]}"> <group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀片')]}">
<field name="brand_id" <field name="brand_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'required': [('cutting_tool_type', '=', '刀片')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'required': [('cutting_tool_type', '=', '刀片')]}"/>
<field name="cutting_tool_top_angle"/> <field name="cutting_tool_top_angle"/>
@@ -123,7 +122,7 @@
<field name="cutting_tool_working_hardness" <field name="cutting_tool_working_hardness"
attrs="{'required': [('cutting_tool_type', '=', '刀片')]}"/> attrs="{'required': [('cutting_tool_type', '=', '刀片')]}"/>
</group> </group>
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀片')]}"> <group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀片')]}">
<field name="cutting_tool_material_model_id" <field name="cutting_tool_material_model_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'required': [('cutting_tool_type', '=', '刀片')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'required': [('cutting_tool_type', '=', '刀片')]}"/>
<label for="tool_length" string="尺寸[mm]"/> <label for="tool_length" string="尺寸[mm]"/>
@@ -140,14 +139,12 @@
<field name="cutting_tool_radius"/> <field name="cutting_tool_radius"/>
<field name="cutting_tool_nut" <field name="cutting_tool_nut"
attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')]}"/>
<field name="cutting_tool_cutter_bar_ids" widget="many2many_tags" <field name="cutting_tool_cutter_bar_ids" widget="many2many_tags"/>
attrs="{'required': [('cutting_tool_type', '=', '刀片')]}"/> <field name="cutting_tool_cutter_pad_ids" widget="many2many_tags"/>
<field name="cutting_tool_cutter_pad_ids" widget="many2many_tags"
attrs="{'required': [('cutting_tool_type', '=', '刀片')]}"/>
</group> </group>
<!--刀杆/刀盘--> <!--刀杆/刀盘-->
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}"> <group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}">
<field name="brand_id" <field name="brand_id"
attrs="{'invisible': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])],'required': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}"/> attrs="{'invisible': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])],'required': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}"/>
<field name="cutting_tool_c_diameter"/> <field name="cutting_tool_c_diameter"/>
@@ -160,7 +157,7 @@
attrs="{'invisible': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}"/> attrs="{'invisible': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}"/>
</group> </group>
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}"> <group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}">
<field name="cutting_tool_material_model_id" <field name="cutting_tool_material_model_id"
attrs="{'invisible': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])],'required': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}"/> attrs="{'invisible': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])],'required': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}"/>
<field name="cutting_tool_rounded_corner"/> <field name="cutting_tool_rounded_corner"/>
@@ -170,7 +167,7 @@
<field name="cutting_tool_hardness"/> <field name="cutting_tool_hardness"/>
</group> </group>
<!--刀柄--> <!--刀柄-->
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀柄')]}"> <group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀柄')]}">
<field name="brand_id" <field name="brand_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'required': [('cutting_tool_type', '=', '刀柄')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'required': [('cutting_tool_type', '=', '刀柄')]}"/>
<field name="cutting_tool_handle_length"/> <field name="cutting_tool_handle_length"/>
@@ -185,7 +182,7 @@
<field name="cutting_tool_chuck_model_ids" widget="many2many_tags" <field name="cutting_tool_chuck_model_ids" widget="many2many_tags"
attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'required': [('cutting_tool_type', '=', '刀柄')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'required': [('cutting_tool_type', '=', '刀柄')]}"/>
</group> </group>
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀柄')]}"> <group attrs="{'invisible':['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀柄')]}">
<field name="cutting_tool_material_model_id" <field name="cutting_tool_material_model_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'required': [('cutting_tool_type', '=', '刀柄')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'required': [('cutting_tool_type', '=', '刀柄')]}"/>
<field name="cutting_tool_detection_accuracy"/> <field name="cutting_tool_detection_accuracy"/>
@@ -193,7 +190,7 @@
<field name="cutting_tool_standard_speed"/> <field name="cutting_tool_standard_speed"/>
</group> </group>
<!--夹头--> <!--夹头-->
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '夹头')]}"> <group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '夹头')]}">
<field name="brand_id" <field name="brand_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')],'required': [('cutting_tool_type', '=', '夹头')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')],'required': [('cutting_tool_type', '=', '夹头')]}"/>
<field name="cutting_tool_outer_diameter"/> <field name="cutting_tool_outer_diameter"/>
@@ -206,7 +203,7 @@
<field name="cutting_tool_handle_model_ids" widget="many2many_tags" <field name="cutting_tool_handle_model_ids" widget="many2many_tags"
attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')]}"/>
</group> </group>
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '夹头')]}"> <group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '夹头')]}">
<field name="cutting_tool_material_model_id" <field name="cutting_tool_material_model_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')],'required': [('cutting_tool_type', '=', '夹头')]}"/> attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')],'required': [('cutting_tool_type', '=', '夹头')]}"/>
<field name="tool_height" string="高度[mm]" <field name="tool_height" string="高度[mm]"
@@ -217,30 +214,29 @@
</page> </page>
<page string="夹具物料参数" attrs="{'invisible': [('categ_type', '!=', '夹具')]}"> <page string="夹具物料参数" attrs="{'invisible': [('categ_type', '!=', '夹具')]}">
<group> <group>
<group> <group attrs='{"invisible": ["|",("fixture_model_id", "=", False),("fixture_material_type","not in",("气动托盘","转接板(锁板)托盘","磁吸托盘","虎钳托盘","零点卡盘"))]}'>
<field name="brand_id"/> <field name="brand_id"/>
<field name="fixture_multi_mounting_type_id"/> <field name="fixture_multi_mounting_type_id"/>
</group> </group>
<group> <group>
<!-- <field name="upload_model_file" widget="many2many_binary"/>-->
<field name="fixture_model_file" widget="Viewer3D" string="模型" readonly="1" <field name="fixture_model_file" widget="Viewer3D" string="模型" readonly="1"
force_save="1" force_save="1"
attrs="{'invisible': [('fixture_model_file', '=', False)]}"/> attrs="{'invisible': [('fixture_model_file', '=', False)]}"/>
</group> </group>
</group> </group>
<group string="参数" <group string="参数"
attrs='{"invisible": [("fixture_material_type","not in",("气动托盘","转接板(锁板)托盘","磁吸托盘","虎钳托盘","零点卡盘"))]}'> attrs='{"invisible": ["|",("fixture_model_id", "=", False),("fixture_material_type","not in",("气动托盘","转接板(锁板)托盘","磁吸托盘","虎钳托盘","零点卡盘"))]}'>
<group> <group>
<label for="tool_length" string="尺寸[mm]"/> <label for="tool_length" string="尺寸[mm]"/>
<div class="o_address_format"> <div class="o_address_format">
<label for="tool_length" string="长"/> <label for="tool_length" string="长"/>
<field name="tool_length" class="o_address_zip" <field name="tool_length" class="o_address_zip"
options="{'format': false}"/> options="{'format': false}"/>
<span>&amp;nbsp;</span> <!-- <span>&amp;nbsp;</span>-->
<label for="tool_width" string="宽"/> <label for="tool_width" string="宽"/>
<field name="tool_width" class="o_address_zip" <field name="tool_width" class="o_address_zip"
options="{'format': false}"/> options="{'format': false}"/>
<span>&amp;nbsp;</span> <!-- <span>&amp;nbsp;</span>-->
<label for="tool_height" string="高"/> <label for="tool_height" string="高"/>
<field name="tool_height" class="o_address_zip" <field name="tool_height" class="o_address_zip"
options="{'format': false}"/> options="{'format': false}"/>
@@ -254,12 +250,12 @@
<field name="fixture_clamp_workpiece_length_max" class="o_address_zip" <field name="fixture_clamp_workpiece_length_max" class="o_address_zip"
options="{'format': false}" options="{'format': false}"
attrs="{'required': [('fixture_material_type', 'in',('气动托盘','转接板(锁板)托盘','磁吸托盘','虎钳托盘'))]}"/> attrs="{'required': [('fixture_material_type', 'in',('气动托盘','转接板(锁板)托盘','磁吸托盘','虎钳托盘'))]}"/>
<span>&amp;nbsp;</span> <!-- <span>&amp;nbsp;</span>-->
<label for="fixture_clamp_workpiece_width_max" string="宽"/> <label for="fixture_clamp_workpiece_width_max" string="宽"/>
<field name="fixture_clamp_workpiece_width_max" class="o_address_zip" <field name="fixture_clamp_workpiece_width_max" class="o_address_zip"
options="{'format': false}" options="{'format': false}"
attrs="{'required': [('fixture_material_type', 'in',('气动托盘','转接板(锁板)托盘','磁吸托盘','虎钳托盘'))]}"/> attrs="{'required': [('fixture_material_type', 'in',('气动托盘','转接板(锁板)托盘','磁吸托盘','虎钳托盘'))]}"/>
<span>&amp;nbsp;</span> <!-- <span>&amp;nbsp;</span>-->
<label for="fixture_clamp_workpiece_height_max" string="高"/> <label for="fixture_clamp_workpiece_height_max" string="高"/>
<field name="fixture_clamp_workpiece_height_max" class="o_address_zip" <field name="fixture_clamp_workpiece_height_max" class="o_address_zip"
options="{'format': false}" options="{'format': false}"
@@ -282,7 +278,7 @@
attrs='{"invisible": [("fixture_material_type","!=",("转接板(锁板)托盘"))]}'/> attrs='{"invisible": [("fixture_material_type","!=",("转接板(锁板)托盘"))]}'/>
<field name="fixture_driving_way" <field name="fixture_driving_way"
attrs='{"invisible": [("fixture_material_type","not in",("虎钳托盘","零点卡盘"))]}'/> attrs='{"invisible": [("fixture_material_type","not in",("虎钳托盘","零点卡盘"))]}'/>
<field name="fixture_apply_machine_tool_type" <field name="fixture_apply_machine_tool_type_id"
attrs='{"invisible": [("fixture_material_type","!=",("零点卡盘"))]}'/> attrs='{"invisible": [("fixture_material_type","!=",("零点卡盘"))]}'/>
</group> </group>
</group> </group>

View File

@@ -46,19 +46,19 @@ class ResProductMo(models.Model):
) )
brand_id = fields.Many2one('sf.machine.brand', '品牌') brand_id = fields.Many2one('sf.machine.brand', '品牌')
tool_length = fields.Float('长度L[mm]') tool_length = fields.Integer('长度L[mm]', size=6)
tool_width = fields.Float('宽度D[mm])') tool_width = fields.Integer('宽度D[mm])', size=6)
tool_height = fields.Float('高度T[mm]') tool_height = fields.Integer('高度T[mm]', size=6)
tool_weight = fields.Float('重量[kg]') tool_weight = fields.Float('重量[kg]', size=4)
# 整体式刀具参数 # 整体式刀具参数
cutting_tool_total_length = fields.Float('总长度[mm]') cutting_tool_total_length = fields.Float('总长度[mm]')
cutting_tool_shank_length = fields.Float('柄部长度[mm]') cutting_tool_shank_length = fields.Float('柄部长度[mm]')
cutting_tool_blade_length = fields.Float('刃部长度[mm]') cutting_tool_blade_length = fields.Float('刃部长度[mm]')
cutting_tool_diameter = fields.Float('直径[mm]') cutting_tool_diameter = fields.Float('直径[mm]')
cutting_tool_blade_number = fields.Integer('刃数') cutting_tool_blade_number = fields.Integer('刃数')
cutting_tool_front_angle = fields.Float('前角(°)') cutting_tool_front_angle = fields.Float('前角[°]')
cutting_tool_rear_angle = fields.Float('后角(°)') cutting_tool_rear_angle = fields.Float('后角[°]')
cutting_tool_main_included_angle = fields.Float('主偏角(°)') cutting_tool_main_included_angle = fields.Float('主偏角[°]')
cutting_tool_material_model_id = fields.Many2one('sf.materials.model', '材料型号') cutting_tool_material_model_id = fields.Many2one('sf.materials.model', '材料型号')
cutting_tool_nut = fields.Float('配对螺母[mm]') cutting_tool_nut = fields.Float('配对螺母[mm]')
# 适用夹头型号可以多选 # 适用夹头型号可以多选
@@ -72,8 +72,8 @@ class ResProductMo(models.Model):
cutting_tool_scope = fields.Char('适用范围') cutting_tool_scope = fields.Char('适用范围')
# 刀片参数 # 刀片参数
cutting_tool_top_angle = fields.Float('顶角(°)') cutting_tool_top_angle = fields.Float('顶角[°]')
cutting_tool_r_angle = fields.Float('R角(°)') cutting_tool_r_angle = fields.Float('R角[°]')
cutting_tool_working_hardness = fields.Char('加工硬度') cutting_tool_working_hardness = fields.Char('加工硬度')
cutting_tool_cutter_bar_ids = fields.Many2many( cutting_tool_cutter_bar_ids = fields.Many2many(
'sf.cutting.tool.model', 'sf.cutting.tool.model',
@@ -108,7 +108,7 @@ class ResProductMo(models.Model):
cutting_tool_screw = fields.Float('配备螺丝[mm]') cutting_tool_screw = fields.Float('配备螺丝[mm]')
cutting_tool_accuracy_level = fields.Char('精度等级') cutting_tool_accuracy_level = fields.Char('精度等级')
cutting_tool_rounded_corner = fields.Float('刀尖圆角半径[mm]') cutting_tool_rounded_corner = fields.Float('刀尖圆角半径[mm]')
cutting_tool_hardness = fields.Char('硬度(°)') cutting_tool_hardness = fields.Char('硬度[°]')
# 刀柄参数 # 刀柄参数
cutting_tool_handle_length = fields.Float('L[mm]') cutting_tool_handle_length = fields.Float('L[mm]')
cutting_tool_length1 = fields.Float('L1[mm]') cutting_tool_length1 = fields.Float('L1[mm]')
@@ -140,14 +140,14 @@ class ResProductMo(models.Model):
fixture_clamping_way = fields.Char(string="装夹方式") fixture_clamping_way = fields.Char(string="装夹方式")
fixture_port_type = fields.Char(string="接口类型") fixture_port_type = fields.Char(string="接口类型")
fixture_model_file = fields.Binary(string="3D模型图") fixture_model_file = fields.Binary(string="3D模型图")
fixture_clamp_workpiece_length_max = fields.Char(string="夹持工件长度MAX[mm]") fixture_clamp_workpiece_length_max = fields.Integer(string="夹持工件长度MAX[mm]", size=6)
fixture_clamp_workpiece_width_max = fields.Char(string="夹持工件宽度MAX[mm]") fixture_clamp_workpiece_width_max = fields.Integer(string="夹持工件宽度MAX[mm]", size=6)
fixture_clamp_workpiece_height_max = fields.Char(string="夹持工件高度MAX[mm]") fixture_clamp_workpiece_height_max = fields.Integer(string="夹持工件高度MAX[mm]", size=6)
fixture_clamp_workpiece_diameter_max = fields.Char(string="夹持工件直径MAX[mm]") fixture_clamp_workpiece_diameter_max = fields.Float(string="夹持工件直径MAX[mm]", digits=(16, 6))
fixture_maximum_carrying_weight = fields.Char(string="最大承载重量[kg]") fixture_maximum_carrying_weight = fields.Float(string="最大承载重量[kg]", digits=(16, 4))
fixture_maximum_clamping_force = fields.Char(string="最大夹持力[n]") fixture_maximum_clamping_force = fields.Integer(string="最大夹持力[n]", size=8)
fixture_driving_way = fields.Char(string="驱动方式") fixture_driving_way = fields.Char(string="驱动方式")
fixture_apply_machine_tool_type = fields.Char(string="适用机床型号") fixture_apply_machine_tool_type_id = fields.Many2one('sf.machine_tool.type', string="适用机床型号")
fixture_through_hole_size = fields.Integer(string="过孔大小[mm]", size=6) fixture_through_hole_size = fields.Integer(string="过孔大小[mm]", size=6)
fixture_screw_size = fields.Integer(string="螺牙大小[mm]", size=6) fixture_screw_size = fields.Integer(string="螺牙大小[mm]", size=6)
@@ -163,6 +163,7 @@ class ResProductMo(models.Model):
def _onchange_categ_id(self): def _onchange_categ_id(self):
if self.categ_type in ('刀具', '夹具'): if self.categ_type in ('刀具', '夹具'):
self.invoice_policy = 'delivery' self.invoice_policy = 'delivery'
self.detailed_type = 'product'
self.sale_ok = False self.sale_ok = False
@api.onchange('cutting_tool_material_id') @api.onchange('cutting_tool_material_id')
@@ -171,119 +172,40 @@ class ResProductMo(models.Model):
if item.cutting_tool_material_id.id != item.cutting_tool_model_id.mrs_cutting_tool_material_id.id: if item.cutting_tool_material_id.id != item.cutting_tool_model_id.mrs_cutting_tool_material_id.id:
item.cutting_tool_model_id = False item.cutting_tool_model_id = False
@api.onchange('fixture_material_id')
def _onchange_fixture_material_id(self):
for item in self:
if item.fixture_material_id.id != item.fixture_model_id.fixture_material_id.id:
item.fixture_model_id = False
@api.onchange('fixture_model_id') @api.onchange('fixture_model_id')
def _onchange_fixture_model_id(self): def _onchange_fixture_model_id(self):
for item in self: for item in self:
if self.cutting_tool_type == '整体式刀具': if self.fixture_material_type in ['气动托盘', '转接板(锁板)托盘', '磁吸托盘', '虎钳托盘', '零点卡盘']:
item.brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id item.brand_id = item.fixture_model_id.brand_id.id
item.cutting_tool_total_length = item.cutting_tool_model_id.integral_total_length item.fixture_multi_mounting_type_id = item.fixture_model_id.multi_mounting_type_id.id
item.cutting_tool_shank_length = item.cutting_tool_model_id.integral_shank_length item.fixture_model_file = item.fixture_model_id.model_file
item.cutting_tool_blade_length = item.cutting_tool_model_id.integral_blade_length item.tool_length = item.fixture_model_id.length
item.cutting_tool_diameter = item.cutting_tool_model_id.integral_diameter item.tool_width = item.fixture_model_id.width
item.cutting_tool_nut = item.cutting_tool_model_id.integral_nut item.tool_height = item.fixture_model_id.height
item.cutting_tool_blade_number = item.cutting_tool_model_id.integral_blade_number item.tool_weight = item.fixture_model_id.weight
item.cutting_tool_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id item.materials_type_id = item.fixture_model_id.materials_model_id.id
item.cutting_tool_front_angle = item.cutting_tool_model_id.integral_front_angle item.fixture_maximum_carrying_weight = item.fixture_model_id.maximum_carrying_weight
item.cutting_tool_rear_angle = item.cutting_tool_model_id.integral_rear_angle item.fixture_maximum_clamping_force = item.fixture_model_id.maximum_clamping_force
item.cutting_tool_main_included_angle = item.cutting_tool_model_id.integral_main_included_angle if self.fixture_material_type in ['零点卡盘', '转接板(锁板)托盘']:
item.cutting_tool_chuck_model_ids = self._get_ids( item.fixture_clamping_way = item.fixture_model_id.clamping_way
item.cutting_tool_model_id.mrs_cutting_tool_model_handle_chuck_model_ids) item.fixture_port_type = item.fixture_model_id.port_type
item.cutting_tool_scope = item.cutting_tool_model_id.integral_scope if self.fixture_material_type in ['气动托盘', '转接板(锁板)托盘', '磁吸托盘']:
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image item.fixture_driving_way = item.fixture_model_id.driving_way
elif self.cutting_tool_type == '刀片': if self.fixture_material_type in ['气动托盘', '磁吸托盘', '虎钳托盘', '零点卡盘']:
item.brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id item.fixture_through_hole_size = item.fixture_model_id.through_hole_size
item.cutting_tool_top_angle = item.cutting_tool_model_id.blade_top_angle item.fixture_screw_size = item.fixture_model_id.screw_size
item.cutting_tool_front_angle = item.cutting_tool_model_id.blade_front_angle if self.fixture_material_type in ['气动托盘', '转接板(锁板)托盘', '磁吸托盘', '虎钳托盘']:
item.cutting_tool_rear_angle = item.cutting_tool_model_id.blade_rear_angle item.fixture_clamp_workpiece_length_max = item.fixture_model_id.clamp_workpiece_length_max
item.cutting_tool_main_included_angle = item.cutting_tool_model_id.blade_main_included_angle item.fixture_clamp_workpiece_width_max = item.fixture_model_id.clamp_workpiece_width_max
item.cutting_tool_r_angle = item.cutting_tool_model_id.blade_r_angle item.fixture_clamp_workpiece_height_max = item.fixture_model_id.clamp_workpiece_height_max
item.cutting_tool_working_hardness = item.cutting_tool_model_id.blade_hardness item.fixture_clamp_workpiece_diameter_max = item.fixture_model_id.clamp_workpiece_diameter_max
item.cutting_tool_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id item.fixture_apply_machine_tool_type_id = item.fixture_model_id.apply_machine_tool_type_id.id
item.tool_length = item.cutting_tool_model_id.blade_length
item.tool_width = item.cutting_tool_model_id.blade_width
item.tool_height = item.cutting_tool_model_id.blade_height
item.cutting_tool_radius = item.cutting_tool_model_id.blade_radius
item.cutting_tool_nut = item.cutting_tool_model_id.blade_nut
item.cutting_tool_cutter_bar_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_blade_cutter_bar_ids)
item.cutting_tool_cutter_pad_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_blade_cutter_pad_ids)
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
elif self.cutting_tool_type == '刀杆':
item.brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
item.cutting_tool_c_diameter = item.cutting_tool_model_id.bar_c_diameter
item.cutting_tool_d_diameter = item.cutting_tool_model_id.bar_d_diameter
item.cutting_tool_l_total_length = item.cutting_tool_model_id.bar_total_length
item.cutting_tool_wrench = item.cutting_tool_model_id.bar_wrench
item.cutting_tool_screw = item.cutting_tool_model_id.bar_screw
item.cutting_tool_blade_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_pad_blade_ids)
item.cutting_tool_scope = item.cutting_tool_model_id.bar_scope
item.cutting_tool_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
item.cutting_tool_rounded_corner = item.cutting_tool_model_id.bar_radius
item.cutting_tool_accuracy_level = item.cutting_tool_model_id.bar_accuracy
item.cutting_tool_blade_number = item.cutting_tool_model_id.bar_blade_number
item.cutting_tool_hardness = item.cutting_tool_model_id.bar_hardness
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
elif self.cutting_tool_type == '刀盘':
item.brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
item.cutting_tool_c_diameter = item.cutting_tool_model_id.pad_c_diameter
item.cutting_tool_d_diameter = item.cutting_tool_model_id.pad_d_diameter
item.cutting_tool_l_total_length = item.cutting_tool_model_id.pad_total_length
item.cutting_tool_wrench = item.cutting_tool_model_id.pad_wrench
item.cutting_tool_screw = item.cutting_tool_model_id.pad_screw
item.cutting_tool_blade_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_pad_blade_ids)
item.cutting_tool_scope = item.cutting_tool_model_id.pad_scope
item.cutting_tool_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
item.cutting_tool_rounded_corner = item.cutting_tool_model_id.pad_radius
item.cutting_tool_accuracy_level = item.cutting_tool_model_id.pad_accuracy
item.cutting_tool_blade_number = item.cutting_tool_model_id.pad_blade_number
item.cutting_tool_hardness = item.cutting_tool_model_id.pad_hardness
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
elif self.cutting_tool_type == '刀柄':
item.brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
item.cutting_tool_handle_length = item.cutting_tool_model_id.handle_length
item.cutting_tool_length1 = item.cutting_tool_model_id.handle_length
item.cutting_tool_diameter1 = item.cutting_tool_model_id.handle_diameter
item.cutting_tool_body_accuracy = item.cutting_tool_model_id.handle_body_accuracy
item.cutting_tool_nut = item.cutting_tool_model_id.handle_nut
item.cutting_tool_clamping_range = item.cutting_tool_model_id.handle_clamping_range
item.tool_weight = item.cutting_tool_model_id.handle_weight
item.cutting_tool_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
item.cutting_tool_chuck_model_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_handle_chuck_model_ids)
item.cutting_tool_detection_accuracy = item.cutting_tool_model_id.handle_detection_accuracy
item.cutting_tool_detection_hardness = item.cutting_tool_model_id.handle_detection_hardness
item.cutting_tool_standard_speed = item.cutting_tool_model_id.handle_standard_speed
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
elif self.cutting_tool_type == '夹头':
item.brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
item.cutting_tool_outer_diameter = item.cutting_tool_model_id.chuck_diameter
item.cutting_tool_inner_diameter = item.cutting_tool_model_id.chuck_inner_diameter
item.cutting_tool_accuracy = item.cutting_tool_model_id.chuck_accuracy
item.cutting_tool_nut = item.cutting_tool_model_id.chuck_nut
item.cutting_tool_clamping_range = item.cutting_tool_model_id.chuck_clamping_range
item.cutting_tool_handle_model_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_chuck_handle_model_ids)
item.cutting_tool_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
item.tool_height = item.cutting_tool_model_id.chuck_height
item.cutting_tool_feature = item.cutting_tool_model_id.chuck_feature
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
else:
item.brand_id = False
item.cutting_tool_total_length = False
item.cutting_tool_shank_length = False
item.cutting_tool_blade_length = False
item.cutting_tool_diameter = False
item.cutting_tool_nut = False
item.cutting_tool_blade_number = False
item.cutting_tool_material_model_id = False
item.cutting_tool_front_angle = False
item.cutting_tool_rear_angle = False
item.cutting_tool_main_included_angle = False
item.cutting_tool_chuck_model_ids = False
item.cutting_tool_scope = False
@api.onchange('cutting_tool_model_id') @api.onchange('cutting_tool_model_id')
def _onchange_cutting_tool_model_id(self): def _onchange_cutting_tool_model_id(self):

View File

@@ -1561,7 +1561,8 @@ class SyncFixtureModel(models.Model):
"materials_model_id": self.env['sf.materials.model'].search( "materials_model_id": self.env['sf.materials.model'].search(
[('materials_no', '=', item['materials_model_code'])]).id, [('materials_no', '=', item['materials_model_code'])]).id,
"driving_way": item['driving_way'], "driving_way": item['driving_way'],
"apply_machine_tool_type": item['apply_machine_tool_type'], "apply_machine_tool_type_id": self.env['sf.machine_tool.type'].search(
[('code', '=', item['apply_machine_tool_type_code'])]).id,
"through_hole_size": item['through_hole_size'], "through_hole_size": item['through_hole_size'],
"screw_size": item['screw_size'], "screw_size": item['screw_size'],
}) })
@@ -1589,7 +1590,8 @@ class SyncFixtureModel(models.Model):
"materials_model_id": self.env['sf.materials.model'].search( "materials_model_id": self.env['sf.materials.model'].search(
[('materials_no', '=', item['materials_model_code'])]).id, [('materials_no', '=', item['materials_model_code'])]).id,
"driving_way": item['driving_way'], "driving_way": item['driving_way'],
"apply_machine_tool_type": item['apply_machine_tool_type'], "apply_machine_tool_type_id": self.env['sf.machine_tool.type'].search(
[('code', '=', item['apply_machine_tool_type_code'])]).id,
"through_hole_size": item['through_hole_size'], "through_hole_size": item['through_hole_size'],
"screw_size": item['screw_size'], "screw_size": item['screw_size'],
}) })
@@ -1639,7 +1641,8 @@ class SyncFixtureModel(models.Model):
"materials_model_id": self.env['sf.materials.model'].search( "materials_model_id": self.env['sf.materials.model'].search(
[('materials_no', '=', item['materials_model_code'])]).id, [('materials_no', '=', item['materials_model_code'])]).id,
"driving_way": item['driving_way'], "driving_way": item['driving_way'],
"apply_machine_tool_type": item['apply_machine_tool_type'], "apply_machine_tool_type_id": self.env['sf.machine_tool.type'].search(
[('code', '=', item['apply_machine_tool_type_code'])]).id,
"through_hole_size": item['through_hole_size'], "through_hole_size": item['through_hole_size'],
"screw_size": item['screw_size'], "screw_size": item['screw_size'],
}) })
@@ -1667,7 +1670,8 @@ class SyncFixtureModel(models.Model):
"materials_model_id": self.env['sf.materials.model'].search( "materials_model_id": self.env['sf.materials.model'].search(
[('materials_no', '=', item['materials_model_code'])]).id, [('materials_no', '=', item['materials_model_code'])]).id,
"driving_way": item['driving_way'], "driving_way": item['driving_way'],
"apply_machine_tool_type": item['apply_machine_tool_type'], "apply_machine_tool_type_id": self.env['sf.machine_tool.type'].search(
[('code', '=', item['apply_machine_tool_type_code'])]).id,
"through_hole_size": item['through_hole_size'], "through_hole_size": item['through_hole_size'],
"screw_size": item['screw_size'], "screw_size": item['screw_size'],
}) })

View File

@@ -6,7 +6,7 @@ class ProcedureEquipmentResourceSetting(models.Model):
_name = 'sf.procedure.equipment.resource.setting' _name = 'sf.procedure.equipment.resource.setting'
_description = '产线设备资源设置' _description = '产线设备资源设置'
production_line_id = fields.Many2one('sf.production.line', string='生产线', required=True) name = fields.Many2one('sf.production.line', string='生产线', required=True)
work_center_name_id = fields.Many2one('mrp.workcenter', string='工作中心名称') work_center_name_id = fields.Many2one('mrp.workcenter', string='工作中心名称')
equipment_code = fields.Char(string='机台号(原设备编码)', readonly=True, compute='_onchange_equipment_name_id') equipment_code = fields.Char(string='机台号(原设备编码)', readonly=True, compute='_onchange_equipment_name_id')
equipment_name_id = fields.Many2one('maintenance.equipment', equipment_name_id = fields.Many2one('maintenance.equipment',
@@ -49,7 +49,7 @@ class ProcedureEquipmentResourceSetting(models.Model):
@api.depends('working_calendar_id') @api.depends('working_calendar_id')
def _onchange_working_calendar_id(self): def _onchange_working_calendar_id(self):
for record in self: for record in self:
record.working_shift_id = record.working_calendar_id.working_shift_id record.working_shift_id = record.working_calendar_id.working_shift_ids

View File

@@ -1,21 +1,6 @@
from datetime import datetime, timedelta, date import logging
from datetime import datetime, timedelta
from odoo import models, fields, api from odoo import models, fields, api
import re
from odoo.exceptions import ValidationError
def time_H_selection():
return [('00', '00'), ('01', '01'), ('02', '02'), ('03', '03'), ('04', '04'), ('05', '05'),
('06', '06'), ('07', '07'), ('08', '08'), ('09', '09'), ('10', '10'), ('11', '11'),
('12', '12'), ('13', '13'), ('14', '14'), ('15', '15'), ('16', '16'), ('17', '17'),
('18', '18'), ('19', '19'), ('20', '20'), ('21', '21'), ('22', '22'), ('23', '23')]
def time_M_or_S_selection():
return [('00', '00'), ('05', '05'), ('10', '10'), ('15', '15'), ('20', '20'), ('25', '25'),
('30', '30'), ('35', '35'), ('40', '40'), ('45', '45'), ('50', '50'), ('55', '55')]
class WorkLogSetting(models.Model): class WorkLogSetting(models.Model):
@@ -38,20 +23,15 @@ class WorkLogSetting(models.Model):
num = "%03d" % m num = "%03d" % m
return num return num
code = fields.Char(string='序号', default=_get_code, readonly=True) code = fields.Char(string='序号', default=_get_code)
name = fields.Char(string='工作日历名称', required=True, size=15, length=30) name = fields.Char(string='工作日历名称', required=True, size=15, length=30)
start_time = fields.Char(string='日开始时间', readonly=True, compute='_compute_start_time') working_shift_ids = fields.Many2many('sf.working.shift', string='班次')
start_time_H = fields.Selection(time_H_selection(), '', required=True) start_time = fields.Datetime(string='日开始时间', readonly=True, compute='_compute_working_shift_ids')
start_time_M = fields.Selection(time_M_or_S_selection(), '', required=True) end_time = fields.Datetime(string='日结束时间', readonly=True, compute='_compute_working_shift_ids')
end_time = fields.Char(string='日结束时间', readonly=True, compute='_compute_end_time') duration = fields.Char(string='时长', readonly=True, compute='_compute_working_shift_ids')
end_time_H = fields.Selection(time_H_selection(), '', required=True)
end_time_M = fields.Selection(time_M_or_S_selection(), '', required=True)
duration = fields.Char(string='时长', readonly=True, compute='_compute_duration') day_off_ids = fields.Many2many('sf.day.off', string='休息日', required=True)
day_off_id = fields.Many2many('sf.day.off', string='休息日', required=True)
working_shift_id = fields.Many2many('sf.working.shift', string='班次')
status = fields.Boolean(string='状态', default=True) status = fields.Boolean(string='状态', default=True)
update_person = fields.Char(string='更新人', default=lambda self: self.env.user.name) update_person = fields.Char(string='更新人', default=lambda self: self.env.user.name)
@@ -59,48 +39,28 @@ class WorkLogSetting(models.Model):
setting_to_calendar_ids = fields.One2many('sf.work.schedule.calendar', 'name_id', '工作日历') setting_to_calendar_ids = fields.One2many('sf.work.schedule.calendar', 'name_id', '工作日历')
# @api.model @api.depends('working_shift_ids')
# def create(self, vals): def _compute_working_shift_ids(self):
# vals['setting_to_calendar_ids'] = [(4, child.id)]
# return super(WorkLogSetting, self).create(vals)
@api.depends('start_time_H', 'start_time_M')
def _compute_start_time(self):
""" """
设置输入日开始时间 根据所选班次自动生成开始时间和结束时间,同时计算出工作时长
:return: :return:
""" """
for record in self: for record in self:
record.start_time = f"{record.start_time_H}:{record.start_time_M}:00" if record:
for working_shift_id in record.working_shift_ids:
if not record.start_time:
record.start_time = working_shift_id.start_time
record.end_time = working_shift_id.end_time
else:
if (working_shift_id.start_time - record.start_time).total_seconds() < 0:
record.start_time = working_shift_id.start_time
if (working_shift_id.end_time - record.end_time).total_seconds() > 0:
record.end_time = working_shift_id.end_time
@api.depends('end_time_H', 'end_time_M') record.duration = record.end_time - record.start_time
def _compute_end_time(self):
"""
设置输入日结束时间
:return:
"""
for record in self:
record.end_time = f"{record.end_time_H}:{record.end_time_M}:00"
@api.depends('start_time_H', 'start_time_M', 'end_time_H', 'end_time_M') # @api.onchange('day_off_ids')
def _compute_duration(self): # def _onchange_day_off_ids(self):
"""
根据日开始时间和日结束时间计算每日工作时长
:return:
"""
for record in self:
st_h = float(record.start_time_H)
st_m = float(record.start_time_M)
end_h = float(record.end_time_H)
end_m = float(record.end_time_M)
# 日开始时间小于日结束时间
if st_h < end_h:
record.duration = str(round(end_h - st_h + (end_m - st_m) / 60, 2))
else:
record.duration = str(round(end_h - st_h + (end_m - st_m) / 60 + 24, 2))
# @api.onchange('day_off_id')
# def _onchange_day_off_id(self):
# # 先删除之前创建的工作日历事件记录 # # 先删除之前创建的工作日历事件记录
# self.env['sf.work.schedule.calendar'].search([('calendar_code', '=', self.code)]).unlink() # self.env['sf.work.schedule.calendar'].search([('calendar_code', '=', self.code)]).unlink()
# #
@@ -152,6 +112,7 @@ class WorkLogSetting(models.Model):
创建记录时,生成工作日历 创建记录时,生成工作日历
""" """
record = super(WorkLogSetting, self).create(vals) record = super(WorkLogSetting, self).create(vals)
logging.info("工作日历设置【新建】记录时,创建工作日历记录!!!")
record.generate_work_calendar() record.generate_work_calendar()
return record return record
@@ -162,6 +123,7 @@ class WorkLogSetting(models.Model):
# 先删除之前创建的工作日历事件记录 # 先删除之前创建的工作日历事件记录
self.env['sf.work.schedule.calendar'].search([('calendar_code', '=', self.code)]).unlink() self.env['sf.work.schedule.calendar'].search([('calendar_code', '=', self.code)]).unlink()
result = super(WorkLogSetting, self).write(vals) result = super(WorkLogSetting, self).write(vals)
logging.info("工作日历设置【更新】记录时,创建工作日历记录!!!")
self.generate_work_calendar() self.generate_work_calendar()
return result return result
@@ -169,14 +131,16 @@ class WorkLogSetting(models.Model):
""" """
生成工作日历 生成工作日历
""" """
logging.info('开始创建工作日历记录')
self.ensure_one() self.ensure_one()
# start_date = date.today() # 开始日期 # start_date = date.today() # 开始日期
# end_date = start_date + timedelta(days=365) # 结束日期 # end_date = start_date + timedelta(days=365) # 结束日期
# 获取本年第一天和最后一天 # 获取本年第一天和最后一天
start_date = datetime.now().replace(month=1, day=1).date() start_date = datetime.now().replace(month=1, day=1).date()
end_date = datetime.now().replace(month=12, day=31).date() end_date = datetime.now().replace(month=12, day=31).date()
logging.info(f'start_date: {start_date} , end_date: {end_date}')
# 休息日列表 # 休息日列表
rest_days = self.day_off_id.mapped('name') rest_days = self.day_off_ids.mapped('name')
for single_date in self.daterange(start_date, end_date): for single_date in self.daterange(start_date, end_date):
is_workday = single_date.strftime("%A") is_workday = single_date.strftime("%A")
if is_workday in rest_days: if is_workday in rest_days:
@@ -185,6 +149,8 @@ class WorkLogSetting(models.Model):
'name': '休息日', 'name': '休息日',
'name_id': self.id, 'name_id': self.id,
'date_time': single_date}) 'date_time': single_date})
logging.info('创建一条工作日历记录,休息时间: %s' % is_workday)
logging.info('工作日历记录创建完成')
@staticmethod @staticmethod
def daterange(start_date, end_date): def daterange(start_date, end_date):

View File

@@ -11,8 +11,8 @@
<field name="start_time"/> <field name="start_time"/>
<field name="end_time"/> <field name="end_time"/>
<field name="duration"/> <field name="duration"/>
<field name="day_off_id" widget="many2many_tags"/> <field name="day_off_ids" widget="many2many_tags"/>
<field name="working_shift_id" widget="many2many_tags"/> <field name="working_shift_ids" widget="many2many_tags"/>
<field name="status"/> <field name="status"/>
<field name="update_person"/> <field name="update_person"/>
<field name="update_time"/> <field name="update_time"/>
@@ -40,30 +40,20 @@
</group> </group>
</group> </group>
<group string="选择班次"> <group string="选择班次">
<field name="working_shift_id"/> <field name="working_shift_ids"/>
</group> </group>
<group string="工作时间"> <group string="工作时间">
<group> <group>
<group> <field name="start_time"/>
<field name="start_time"/>
<field name="end_time"/>
</group>
<group>
<field name="start_time_H"/>
<field name="end_time_H"/>
</group>
</group> </group>
<group> <group>
<group> <field name="end_time"/>
<field name="start_time_M"/>
<field name="end_time_M"/>
</group>
</group> </group>
</group> </group>
<group> <group>
<group> <group>
<field name="duration"/> <field name="duration"/>
<field name="day_off_id" <field name="day_off_ids"
widget="many2many_tags" widget="many2many_tags"
options="{'no_create': True, 'no_quick_create': True}"/> options="{'no_create': True, 'no_quick_create': True}"/>
</group> </group>
@@ -198,6 +188,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<calendar string="工作日历" mode="year" date_start="date_time"> <calendar string="工作日历" mode="year" date_start="date_time">
<field name="name"/> <field name="name"/>
<!-- <field name="monthly_rest_days" widget="char" position="right_bottom"/>-->
</calendar> </calendar>
</field> </field>
</record> </record>
@@ -227,7 +218,7 @@
<field name="create_time"/> <field name="create_time"/>
<field name="status"/> <field name="status"/>
<field name="participate_in_scheduling"/> <field name="participate_in_scheduling"/>
<field name="production_line_id" invisible="True"/> <field name="name" invisible="True"/>
</tree> </tree>
</field> </field>
</record> </record>
@@ -240,7 +231,7 @@
<sheet> <sheet>
<group string="生产线"> <group string="生产线">
<group> <group>
<field name="production_line_id"/> <field name="name"/>
</group> </group>
</group> </group>
<group string="工作中心信息"> <group string="工作中心信息">
@@ -296,7 +287,7 @@
<field name="status"/> <field name="status"/>
<field name="participate_in_scheduling"/> <field name="participate_in_scheduling"/>
<searchpanel> <searchpanel>
<field name="production_line_id" icon="fa-building" enable_counters="1"/> <field name="name" icon="fa-building" enable_counters="1"/>
</searchpanel> </searchpanel>
</search> </search>
</field> </field>

File diff suppressed because it is too large Load Diff

View File

@@ -62,16 +62,16 @@ function makeMenus(env, menusData, fetchLoadMenus) {
return menusData[menuID]; return menusData[menuID];
}, },
getCurrentApp() { getCurrentApp() {
if (!currentAppId) { // if (!currentAppId) {
return; // return;
} // }
var target_tag = '.o_navbar_apps_menu a.main_link[data-menu='+currentAppId+']' // var target_tag = '.o_navbar_apps_menu a.main_link[data-menu='+currentAppId+']'
$(target_tag).addClass('active'); // $(target_tag).addClass('active');
if($(target_tag).hasClass('dropdown-btn')){ // if($(target_tag).hasClass('dropdown-btn')){
var ultag = $(target_tag).parent().find('.header-sub-menus') // var ultag = $(target_tag).parent().find('.header-sub-menus')
$(ultag).addClass('show'); // $(ultag).addClass('show');
} // }
return this.getMenu(currentAppId); // return this.getMenu(currentAppId);
}, },
getMenuAsTree(menuID) { getMenuAsTree(menuID) {
const menu = this.getMenu(menuID); const menu = this.getMenu(menuID);

File diff suppressed because one or more lines are too long