Merge branch refs/heads/develop into refs/heads/feature/制造-计划优化

This commit is contained in:
马广威
2023-10-23 00:21:20 +08:00
33 changed files with 2368 additions and 1758 deletions

View File

@@ -3,7 +3,7 @@
}
.test_model > .o_form_label {
margin-left: 20px;
margin-left: 0px !important;
margin-right: 0px !important;
white-space: nowrap;
}
@@ -257,6 +257,12 @@ div[class="o_content o_component_with_search_panel"] .o_kanban_primary_right > .
top: 55px;
right: 43.5%;
}
//------------------------------------------
.test_model > .o_form_label {
margin-left: 4px !important;
line-height: 0 !important;
}
@media screen and (min-width: 1200px) {
div[class="o_content o_component_with_search_panel"] .o_kanban_primary_right > .row {
@@ -289,4 +295,49 @@ div[class="o_content o_component_with_search_panel"] .o_kanban_primary_right > .
.text-bg-warning {
background-color: #FED300 !important;
}
}
.test_model>div {
display: flex;
width: 40%;
}
.test_model>div .o_field_widget {
width: 40% !important;
}
.o_form_label {
font-weight: 700 !important;
}
.bigger .o_horizontal_separator {
font-size: 1.5rem;
}
.o_horizontal_separator {
font-size: 1.5rem;
}
.o_field_widget input[class='o_input'] {
text-align: center
}
div:has(.o_required_modifier) > label::before {
position: absolute;
left: -3px;
}
.o_form_view .o_form_label {
position: relative;
width: 9rem;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding-left: 1rem;
}
.o_form_view .o_form_label:hover {
white-space: normal;
overflow: visible;
}

View File

@@ -67,7 +67,12 @@ class MrsMaterialModel(models.Model):
mf_materia_post = fields.Char("热处理后密度")
density = fields.Float("密度(kg/m³)")
materials_id = fields.Many2one('sf.production.materials', "材料名")
tensile_strength = fields.Float("拉伸强度(n/mm²)")
tensile_strength = fields.Char("拉伸强度(n/mm²)")
standards_id = fields.Many2one('sf.international.standards', '制造标准')
alloy_code = fields.Char('合金牌号')
price = fields.Float('单价/kg')
apply = fields.Many2many('material.apply', string='材料应用')
materials_code = fields.Char('材料代号')
hardness = fields.Float("硬度(hrc)")
rough_machining = fields.Float("粗加工Vc(m/min)")
finish_machining = fields.Float("精加工Vc(m/min)")
@@ -96,7 +101,7 @@ class MrsProductionProcess(models.Model):
_name = 'sf.production.process'
_description = '表面工艺'
process_encode = fields.Char("编码")
code = fields.Char("编码")
name = fields.Char('名称')
remark = fields.Text("备注")
processing_order_ids = fields.One2many('sf.processing.order', 'production_process_id', string='工序')
@@ -113,7 +118,7 @@ class MrsProcessingTechnology(models.Model):
name = fields.Char('名称', index=True)
remark = fields.Text('备注', index=True)
process_encode = fields.Char("编码")
code = fields.Char("编码")
processing_order_ids = fields.Many2many('sf.processing.order', 'sf_associated_processes',
index=True, string='工序')
active = fields.Boolean('有效', default=True)
@@ -172,3 +177,20 @@ class MrsProductionProcessParameter(models.Model):
for i in item.parameter_ids:
code_arr.append(i.code)
return code_arr
class ModelInternationalStandards(models.Model):
_name = 'sf.international.standards'
_description = '制造标准'
code = fields.Char('编码')
name = fields.Char('名称')
active = fields.Boolean('有效', default=True)
class MrsMaterialApply(models.Model):
_name = 'material.apply'
_description = '材料应用'
name = fields.Char('名称', default=True)
active = fields.Boolean('有效', default=True)

View File

@@ -30,7 +30,7 @@ class FixtureModel(models.Model):
fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料", )
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="品牌")
brand_id = fields.Many2one('sf.machine.brand', string="品牌", domain="[('tag_ids.name', 'ilike', '夹具')]")
clamping_way = fields.Char(string="装夹方式")
port_type = fields.Char(string="接口类型")
model_file = fields.Binary(string="3D模型图")

View File

@@ -70,7 +70,7 @@ class IntegralCuttingTool(models.Model):
# 整体式刀具类型字段,关联整体式刀具类型对象
integral_model_number = fields.Many2one('sf.integral.cutting.tool.model', '整体式刀具类型')
# 增加品牌、总长度(mm)、柄部长度(mm)、刃部长度(mm)、直径(mm)、刃数、前角(°)、后角(°)、主偏角(°)、材料型号、配对螺母(mm)、适用夹头型号、适用范围、图片、创建人、创建时间等字段
brand = fields.Many2one('sf.machine.brand', '品牌')
brand = fields.Many2one('sf.machine.brand', '品牌', domain="[('tag_ids.name', 'ilike', '刀具')]")
total_length = fields.Float('总长度(mm)')
shank_length = fields.Float('柄部长度(mm)')
blade_length = fields.Float('刃部长度(mm)')

View File

@@ -101,7 +101,7 @@ class CuttingToolModel(models.Model):
cutting_tool_type = fields.Char(string="刀具物料类型", related='cutting_tool_material_id.name', store=True)
cutting_tool_type_id = fields.Many2one('sf.cutting.tool.type', string='刀具类型',
)
brand_id = fields.Many2one('sf.machine.brand', '品牌')
brand_id = fields.Many2one('sf.machine.brand', '品牌', domain="[('tag_ids.name', 'ilike', '刀具')]")
tool_length = fields.Integer('长度(mm)')
tool_width = fields.Integer('宽度(mm)')
tool_height = fields.Integer('高度(mm)')

View File

@@ -24,6 +24,8 @@ access_sf_fixture_model,sf_fixture_model,model_sf_fixture_model,base.group_user,
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_sync_common,sf_sync_common,model_sf_sync_common,base.group_user,1,1,1,1
access_sf_international_standards,sf_international_standards,model_sf_international_standards,base.group_user,1,1,1,1
access_material_apply,material_apply,model_material_apply,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
24 access_sf_functional_fixture_type sf_functional_fixture_type model_sf_functional_fixture_type base.group_user 1 1 1 1
25 access_sf_functional_fixture sf_functional_fixture model_sf_functional_fixture base.group_user 1 1 1 1
26 access_sf_sync_common sf_sync_common model_sf_sync_common base.group_user 1 1 1 1
27 access_sf_international_standards sf_international_standards model_sf_international_standards base.group_user 1 1 1 1
28 access_material_apply material_apply model_material_apply base.group_user 1 1 1 1
29
30
31

View File

@@ -24,7 +24,7 @@
<field name="model">sf.processing.technology</field>
<field name="arch" type="xml">
<tree string="加工工艺" create="0" edit="0" delete="1">
<field name="process_encode"/>
<field name="code"/>
<field name="name"/>
</tree>
</field>
@@ -35,7 +35,7 @@
<field name="arch" type="xml">
<search>
<field name="name" string="名称搜索" filter_domain="[('name','ilike',self)]"/>
<field name="process_encode" string="编码搜索" filter_domain="[('process_encode','ilike',self)]"/>
<field name="code" string="编码搜索" filter_domain="[('code','ilike',self)]"/>
<filter name="filter_active" string="已归档" domain="[('active','=',False)]"/>
</search>
</field>
@@ -64,7 +64,7 @@
<page string="表面工艺">
<field name='production_process_ids' widget="ony2many">
<tree editable="bottom">
<field name="process_encode" string="编码号" readonly="1" force_save="1"/>
<field name="code" string="编码号" readonly="1" force_save="1"/>
<field name="name" string="名称" required="1"/>
<field name='category_id' default="default" invisible="1"/>
<field name="remark"/>
@@ -105,7 +105,7 @@
<field name="model">sf.production.process</field>
<field name="arch" type="xml">
<tree string="表面工艺" create="0" edit="0" delete="1">
<field name="process_encode"/>
<field name="code"/>
<field name="name" string="名称"/>
<field name="remark"/>
</tree>
@@ -124,7 +124,7 @@
</div>
<group>
<group>
<field name="process_encode"/>
<field name="code"/>
</group>
<notebook>
<page string="可选参数">
@@ -186,7 +186,7 @@
<field name="arch" type="xml">
<search>
<field name="name" string="名称搜索" filter_domain="[('name','ilike',self)]"/>
<field name="process_encode" string="编码搜索" filter_domain="[('process_encode','ilike',self)]"/>
<field name="code" string="编码搜索" filter_domain="[('code','ilike',self)]"/>
<filter name="filter_active" string="已归档" domain="[('active','=',False)]"/>
</search>
</field>
@@ -241,17 +241,20 @@
<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" delete="1">
<field name="materials_no" readonly="1"/>
<field name="name" readonly="1"/>
<field name="gain_way"/>
<tree string="材料型号" delete="0">
<field name="materials_no"/>
<field name="materials_code"/>
<field name="name"/>
<field name="standards_id" optional="hide"/>
<field name="alloy_code"/>
<field name="tensile_strength"/>
<field name="hardness"/>
<field name="hardness" optional="show"/>
<field name="need_h"/>
<field name="density"/>
<field name="rough_machining"/>
<field name="finish_machining"/>
<field name="remark"/>
<field name="apply" widget="many2many_tags" optional="show"/>
<field name="density" optional="show"/>
<field name="rough_machining" optional="hide"/>
<field name="finish_machining" optional="hide"/>
<field name="remark" optional="hide"/>
<field name='materials_id' invisible="1"/>
</tree>
</field>

View File

@@ -1,50 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.cron" id="ir_cron_mrs_machine_brand_tags">
<field name="name">基础信息同步:品牌类别</field>
<field name="model_id" ref="model_mrs_machine_brand_tags"/>
<field name="state">code</field>
<field name="code">model._cron_machine_brand_tags_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<!-- <field name="nextcall" eval="True"/>-->
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_machine_brand_tags">-->
<!-- <field name="name">基础信息同步:品牌类别</field>-->
<!-- <field name="model_id" ref="model_mrs_machine_brand_tags"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_machine_brand_tags_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- &lt;!&ndash; <field name="nextcall" eval="True"/>&ndash;&gt;-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_processing_order">
<field name="name">基础信息同步:工序</field>
<field name="model_id" ref="model_mrs_processing_order"/>
<field name="state">code</field>
<field name="code">model._cron_processing_order_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_processing_order">-->
<!-- <field name="name">基础信息同步:工序</field>-->
<!-- <field name="model_id" ref="model_mrs_processing_order"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_processing_order_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_machine_brand">
<field name="name">基础信息同步:品牌</field>
<field name="model_id" ref="model_mrs_machine_brand"/>
<field name="state">code</field>
<field name="code">model._cron_machine_brand_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_machine_brand">-->
<!-- <field name="name">基础信息同步:品牌</field>-->
<!-- <field name="model_id" ref="model_mrs_machine_brand"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_machine_brand_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_machine_tool_type">
<field name="name">基础信息同步:机床型号</field>
<field name="model_id" ref="model_mrs_machine_tool_type"/>
<field name="state">code</field>
<field name="code">model._cron_machine_tool_type_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_machine_tool_type">-->
<!-- <field name="name">基础信息同步:机床型号</field>-->
<!-- <field name="model_id" ref="model_mrs_machine_tool_type"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_machine_tool_type_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<!-- <record model="ir.cron" id="ir_cron_mrs_cutting_tool_category">-->
<!-- <field name="name">基础信息同步:刀具类别</field>-->
@@ -80,50 +80,50 @@
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_production_materials">
<field name="name">基础信息同步:材料</field>
<field name="model_id" ref="model_mrs_production_materials"/>
<field name="state">code</field>
<field name="code">model._cron_production_materials_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_production_materials">-->
<!-- <field name="name">基础信息同步:材料</field>-->
<!-- <field name="model_id" ref="model_mrs_production_materials"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_production_materials_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_materials_model">
<field name="name">基础信息同步:材料型号</field>
<field name="model_id" ref="model_mrs_materials_model"/>
<field name="state">code</field>
<field name="code">model._cron_materials_model_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_materials_model">-->
<!-- <field name="name">基础信息同步:材料型号</field>-->
<!-- <field name="model_id" ref="model_mrs_materials_model"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_materials_model_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_production_process_category">
<field name="name">基础信息同步:表面工艺类别</field>
<field name="model_id" ref="model_mrs_production_process_category"/>
<field name="state">code</field>
<field name="code">model._cron_production_process_category_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_production_process_category">-->
<!-- <field name="name">基础信息同步:表面工艺类别</field>-->
<!-- <field name="model_id" ref="model_mrs_production_process_category"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_production_process_category_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_production_process">
<field name="name">基础信息同步:表面工艺</field>
<field name="model_id" ref="model_mrs_production_process"/>
<field name="state">code</field>
<field name="code">model._cron_production_process_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_production_process">-->
<!-- <field name="name">基础信息同步:表面工艺</field>-->
<!-- <field name="model_id" ref="model_mrs_production_process"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_production_process_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<!-- <record model="ir.cron" id="ir_cron_mrs_processing_technology">-->
<!-- <field name="name">基础信息同步:加工工艺</field>-->
@@ -136,237 +136,127 @@
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_machine_control_system">
<field name="name">基础信息同步:数控系统</field>
<field name="model_id" ref="model_mrs_machine_control_system"/>
<field name="state">code</field>
<field name="code">model._cron_machine_control_system_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_machine_control_system">-->
<!-- <field name="name">基础信息同步:数控系统</field>-->
<!-- <field name="model_id" ref="model_mrs_machine_control_system"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_machine_control_system_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_model_type">
<field name="name">基础信息同步:模型类型</field>
<field name="model_id" ref="model_mrs_model_type"/>
<field name="state">code</field>
<field name="code">model._cron_model_type_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_model_type">-->
<!-- <field name="name">基础信息同步:模型类型</field>-->
<!-- <field name="model_id" ref="model_mrs_model_type"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_model_type_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_production_process_parameter">
<field name="name">基础信息同步:可选参数</field>
<field name="model_id" ref="model_mrs_production_process_parameter"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_production_process_parameter()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_production_process_parameter">-->
<!-- <field name="name">基础信息同步:可选参数</field>-->
<!-- <field name="model_id" ref="model_mrs_production_process_parameter"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_mrs_production_process_parameter()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_machine_tool_category">
<field name="name">基础信息同步:机床类型</field>
<field name="model_id" ref="model_mrs_machine_tool_category"/>
<field name="state">code</field>
<field name="code">model._cron_machine_tool_category_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_machine_tool_category">-->
<!-- <field name="name">基础信息同步:机床类型</field>-->
<!-- <field name="model_id" ref="model_mrs_machine_tool_category"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_machine_tool_category_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_functional_cutting_tool">
<field name="name">基础信息同步:功能刀具型号</field>
<field name="model_id" ref="model_mrs_functional_cutting_tool"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_functional_cutting_tool_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_functional_cutting_tool">-->
<!-- <field name="name">基础信息同步:功能刀具型号</field>-->
<!-- <field name="model_id" ref="model_mrs_functional_cutting_tool"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_mrs_functional_cutting_tool_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_functional_cutting_tool_model">
<field name="name">基础信息同步:功能刀具类型</field>
<field name="model_id" ref="model_mrs_functional_cutting_tool_model"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_functional_cutting_tool_model_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_functional_cutting_tool_model">-->
<!-- <field name="name">基础信息同步:功能刀具类型</field>-->
<!-- <field name="model_id" ref="model_mrs_functional_cutting_tool_model"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_mrs_functional_cutting_tool_model_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_integral_cutting_tool">
<field name="name">基础信息同步:整体式刀具</field>
<field name="model_id" ref="model_mrs_integral_cutting_tool"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_integral_cutting_tool_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- -->
<!-- <record model="ir.cron" id="ir_cron_mrs_fixture_material">-->
<!-- <field name="name">基础信息同步:夹具物料</field>-->
<!-- <field name="model_id" ref="model_mrs_fixture_material"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_fixture_material_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_integral_cutting_tool_model">
<field name="name">基础信息同步:整体式刀具类型</field>
<field name="model_id" ref="model_mrs_integral_cutting_tool_model"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_integral_cutting_tool_model_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_multi_mounting_type">-->
<!-- <field name="name">基础信息同步:联装类型</field>-->
<!-- <field name="model_id" ref="model_mrs_multi_mounting_type"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_multi_mounting_type_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_blade">
<field name="name">基础信息同步:刀片型号</field>
<field name="model_id" ref="model_mrs_blade"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_blade_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_fixture_model">-->
<!-- <field name="name">基础信息同步:夹具型号</field>-->
<!-- <field name="model_id" ref="model_mrs_fixture_model"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_fixture_model_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_blade_model">
<field name="name">基础信息同步:刀片类型</field>
<field name="model_id" ref="model_mrs_blade_model"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_blade_model_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_functional_fixture_type">-->
<!-- <field name="name">基础信息同步:功能夹具类型</field>-->
<!-- <field name="model_id" ref="model_mrs_functional_fixture_type"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_functional_fixture_type_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="ir_cron_mrs_cutter_bar">
<field name="name">基础信息同步:刀杆型号</field>
<field name="model_id" ref="model_mrs_cutter_bar"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_cutter_bar_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="ir_cron_mrs_cutter_bar_model">
<field name="name">基础信息同步:刀杆类型</field>
<field name="model_id" ref="model_mrs_cutter_bar_model"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_cutter_bar_model_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="ir_cron_mrs_cutter_pad">
<field name="name">基础信息同步:刀盘型号</field>
<field name="model_id" ref="model_mrs_cutter_pad"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_cutter_pad_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="ir_cron_mrs_cutter_pad_model">
<field name="name">基础信息同步:刀盘类型</field>
<field name="model_id" ref="model_mrs_cutter_pad_model"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_cutter_pad_model_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="ir_cron_mrs_handle">
<field name="name">基础信息同步:刀柄型号</field>
<field name="model_id" ref="model_mrs_handle"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_handle_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="ir_cron_mrs_handle_model">
<field name="name">基础信息同步:刀柄类型</field>
<field name="model_id" ref="model_mrs_handle_model"/>
<field name="state">code</field>
<field name="code">model._cron_mrs_handle_model_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="ir_cron_mrs_fixture_material">
<field name="name">基础信息同步:夹具物料</field>
<field name="model_id" ref="model_mrs_fixture_material"/>
<field name="state">code</field>
<field name="code">model._cron_fixture_material_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="ir_cron_mrs_multi_mounting_type">
<field name="name">基础信息同步:联装类型</field>
<field name="model_id" ref="model_mrs_multi_mounting_type"/>
<field name="state">code</field>
<field name="code">model._cron_multi_mounting_type_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="ir_cron_mrs_fixture_model">
<field name="name">基础信息同步:夹具型号</field>
<field name="model_id" ref="model_mrs_fixture_model"/>
<field name="state">code</field>
<field name="code">model._cron_fixture_model_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="ir_cron_mrs_functional_fixture_type">
<field name="name">基础信息同步:功能夹具类型</field>
<field name="model_id" ref="model_mrs_functional_fixture_type"/>
<field name="state">code</field>
<field name="code">model._cron_functional_fixture_type_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="ir_cron_mrs_functional_fixture">
<field name="name">基础信息同步:功能夹具</field>
<field name="model_id" ref="model_mrs_functional_fixture"/>
<field name="state">code</field>
<field name="code">model._cron_functional_fixture_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="ir_cron_mrs_functional_fixture">-->
<!-- <field name="name">基础信息同步:功能夹具</field>-->
<!-- <field name="model_id" ref="model_mrs_functional_fixture"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model._cron_functional_fixture_func()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<!-- <record model="ir.cron" id="ir_cron_mrs_chuck">-->
<!-- <field name="name">基础信息同步:夹头型号</field>-->

View File

@@ -62,13 +62,13 @@
action="action_sf_cutting_tool_type"
/>
<!-- 刀具型号 -->
<menuitem
id="menu_sf_integral_cutting_tool"
parent="menu_sf_cutting_tool"
name="刀具型号"
sequence="3"
action="action_sf_cutting_tool"
/>
<!-- <menuitem-->
<!-- id="menu_sf_integral_cutting_tool"-->
<!-- parent="menu_sf_cutting_tool"-->
<!-- name="刀具型号"-->
<!-- sequence="3"-->
<!-- action="action_sf_cutting_tool"-->
<!-- />-->
<!-- 功能刀具 -->
<!-- <menuitem-->
<!-- id="menu_sf_functional_cutting_tool"-->

View File

@@ -0,0 +1,12 @@
# -*- coding: utf-8 -*-
import json
import logging
from odoo import http
from odoo.http import request
# class ProductController(http.Controller):
#
# @http.route('/api/cloud/get_cutting_model', type='http', auth='none', methods=['GET', 'POST'], csrf=False,
# cors="*")
# def get_cutting_model(self, **kw):

View File

@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
import logging
import datetime
import time
from datetime import datetime, timedelta
import hashlib
from odoo import models
from odoo.http import request
@@ -10,8 +9,6 @@ __author__ = 'jinling.yang'
_logger = logging.getLogger(__name__)
class AuthenticationError(Exception):
pass
class AuthenticationError(Exception):
pass
@@ -29,16 +26,18 @@ class Http(models.AbstractModel):
# 查询密钥
factory_secret = request.env['res.partner'].sudo().search(
[('sf_token', '=', datas['HTTP_TOKEN'])], limit=1)
logging.info('factory_secret:%s' % factory_secret)
if not factory_secret:
raise AuthenticationError('无效的token')
timestamp_str = int(time.time())
# 设置API接口请求时间,不能超过5秒
deltime = datetime.timedelta(seconds=5)
# if abs(int(datas['HTTP_TIMESTAMP'])-timestamp_str) > deltime.seconds:
# deltime = datetime.timedelta(seconds=30)
# if abs(int(datas['HTTP_TIMESTAMP']) - timestamp_str) > deltime.seconds:
# raise AuthenticationError('请求已过期')
# 获得sha1_str加密字符串
post_time = int(datas['HTTP_TIMESTAMP'])
datetime_post = datetime.fromtimestamp(post_time)
datetime_now = datetime.now().replace(microsecond=0)
datetime_del = datetime_now + timedelta(seconds=5)
if datetime_post > datetime_del:
raise AuthenticationError('请求已过期')
check_str = '%s%s%s' % (datas['HTTP_TOKEN'], post_time, factory_secret.sf_secret_key)
check_sf_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest()
if check_sf_str != datas['HTTP_CHECKSTR']:

View File

@@ -106,7 +106,7 @@
<page string="刀具物料参数" attrs="{'invisible': [('categ_type', '!=', '刀具')]}">
<group>
<group attrs="{'invisible': [('categ_type', '!=', '刀具')]}" col="1">
<field name="cutting_tool_type_id" options="{'no_create': True}" placeholder="请选择"/>
<field name="cutting_tool_type_id" options="{'no_create': True}" placeholder="请选择" />
<field name="brand_id" options="{'no_create': True}" placeholder="请选择"/>
<field name="materials_type_id" options="{'no_create': True}"
attrs="{'invisible': [('cutting_tool_type', 'in', ('整体式刀具','夹头','刀柄'))]}"

View File

@@ -15,13 +15,31 @@ class SfEquipmentSaintenanceStandards(models.Model):
num = "%04d" % 1
else:
m = int(partner.code) + 1
m = int(partner.code[-4:]) + 1
num = "%04d" % m
return num
code = fields.Char(string='编码', default=get_no)
code = fields.Char(string='编码')
remark = fields.Char('备注')
maintenance_type = fields.Selection([('保养', '保养'), ("检修", "检修")], string='类型', default='保养')
name = fields.Char(string='名称')
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
if not vals['code']:
if vals['maintenance_type']:
if vals['maintenance_type'] == '保养':
vals['code'] = 'BY' + self.get_no()
else:
vals['code'] = 'JX' + self.get_no()
if not vals['name']:
if vals['maintenance_equipment_category_id']:
ma_name = self.env['maintenance.equipment.category'].sudo().search(
[('id', '=', vals['maintenance_equipment_category_id'])]).name
vals['name'] = ma_name + '-' + vals['maintenance_type'] + '标准-' + vals[
'code']
return super().create(vals_list)
created_user_id = fields.Many2one('res.users', string='创建人', default=lambda self: self.env.user)
maintenance_equipment_category_id = fields.Many2one('maintenance.equipment.category', string='设备类别')
maintenance_equipment_ids = fields.Many2many(

View File

@@ -14,7 +14,7 @@ class SfMaintenanceEquipmentCategory(models.Model):
_inherit = 'maintenance.equipment.category'
_description = '设备类别'
equipment_type = fields.Selection([('机床', '机床'), ('械臂', '械臂'), ('AGV小车', 'AGV小车'), ('检测设备', '检测设备')], string='类型', default='机床')
equipment_type = fields.Selection([('机床', '机床'), ('器人', '器人'), ('AGV小车', 'AGV小车'), ('检测设备', '检测设备')], string='类型', default='机床')
class SfMaintenanceEquipment(models.Model):
@@ -36,6 +36,7 @@ class SfMaintenanceEquipment(models.Model):
num = "%04d" % m
return num
equipment_maintenance_standards_ids = fields.Many2many('equipment.maintenance.standards',
'sf_maintenance_equipment_ids', string='设备维保标准')
eq_maintenance_id = fields.Many2one('equipment.maintenance.standards', string='设备保养标准',
@@ -65,7 +66,7 @@ class SfMaintenanceEquipment(models.Model):
MTcode = fields.Char("编码", default=get_no)
created_user = fields.Many2one('res.users', string='创建人', default=lambda self: self.env.user)
equipment_type = fields.Selection([('机床', '机床')], compute='_compute_category_id')
equipment_type = fields.Selection([('机床', '机床'), ('机器人', '机器人'), ('AGV小车', 'AGV小车'), ('检测设备', '检测设备')], compute='_compute_category_id')
@api.depends('category_id')
def _compute_category_id(self):
@@ -96,7 +97,7 @@ class SfMaintenanceEquipment(models.Model):
control_system_id = fields.Many2one('sf.machine.control_system',
string="控制系统")
# 多个机床型号对应一个机床
brand_id = fields.Many2one('sf.machine.brand', string='品牌')
brand_id = fields.Many2one('sf.machine.brand', string='品牌', domain="[('tag_ids.name', 'ilike', equipment_type)]")
type_id = fields.Many2one('sf.machine_tool.type', '型号')
state = fields.Selection(
@@ -153,48 +154,48 @@ class SfMaintenanceEquipment(models.Model):
result.append((parameter.id, name))
return result
@api.constrains('rotate_speed')
def _check_rotate_speed(self):
if self.rotate_speed <= 0:
raise UserError("转速不能为0")
@api.constrains('precision')
def _check_precision(self):
if self.precision <= 0.00:
raise UserError("加工精度不能为0")
@api.constrains('number_of_knife_library')
def _check_number_of_knife_library(self):
if self.number_of_knife_library <= 0:
raise UserError("刀库数量不能为0")
@api.constrains('x_axis')
def _check_x_axis(self):
if self.x_axis <= 0:
raise UserError("加工行程里x轴不能为0")
@api.constrains('y_axis')
def _check_y_axis(self):
if self.y_axis <= 0:
raise UserError("加工行程里y轴不能为0")
@api.constrains('z_axis')
def _check_z_axis(self):
if self.z_axis <= 0:
raise UserError("加工行程里z轴不能为0")
@api.constrains('b_axis')
def _check_b_axis(self):
if self.number_of_axles == '四轴':
print(self.number_of_axles)
if self.b_axis <= 0:
raise UserError("加工行程里b轴不能为0")
@api.constrains('c_axis')
def _check_c_axis(self):
if self.number_of_axles == '五轴':
if self.c_axis <= 0:
raise UserError("加工行程里c轴不能为0")
# @api.constrains('rotate_speed')
# def _check_rotate_speed(self):
# if self.rotate_speed <= 0:
# raise UserError("转速不能为0")
#
# @api.constrains('precision')
# def _check_precision(self):
# if self.equipment_type == '机床' and self.precision <= 0.00:
# raise UserError("加工精度不能为0")
#
# @api.constrains('number_of_knife_library')
# def _check_number_of_knife_library(self):
# if self.equipment_type == '机床' and self.number_of_knife_library <= 0:
# raise UserError("刀库数量不能为0")
#
# @api.constrains('x_axis')
# def _check_x_axis(self):
# if self.equipment_type == '机床' and self.x_axis <= 0:
# raise UserError("加工行程里x轴不能为0")
#
# @api.constrains('y_axis')
# def _check_y_axis(self):
# if self.equipment_type == '机床' and self.y_axis <= 0:
# raise UserError("加工行程里y轴不能为0")
#
# @api.constrains('z_axis')
# def _check_z_axis(self):
# if self.equipment_type == '机床' and self.z_axis <= 0:
# raise UserError("加工行程里z轴不能为0")
#
# @api.constrains('b_axis')
# def _check_b_axis(self):
# if self.equipment_type == '机床' and self.number_of_axles == '四轴':
# print(self.number_of_axles)
# if self.b_axis <= 0:
# raise UserError("加工行程里b轴不能为0")
#
# @api.constrains('c_axis')
# def _check_c_axis(self):
# if self.equipment_type == '机床' and self.number_of_axles == '五轴':
# if self.c_axis <= 0:
# raise UserError("加工行程里c轴不能为0")
@api.onchange('type_id')
def get_type_info(self):
@@ -235,6 +236,105 @@ class SfMaintenanceEquipment(models.Model):
item.machine_tool_category = item.type_id.machine_tool_category.id
item.brand_id = item.type_id.brand_id.id
# AGV小车设备参数
AGV_L = fields.Char('设备尺寸(长)')
AGV_W = fields.Char('设备尺寸(宽)')
AGV_H = fields.Char('设备尺寸(高)')
AGV_goods_L = fields.Char('载货尺寸(长)')
AGV_goods_W = fields.Char('载货尺寸(宽)')
AGV_goods_H = fields.Char('载货尺寸(高)')
AGV_velocity = fields.Char('标准速度')
AGV_velocity_min = fields.Char('标准速度(最小)')
AGV_velocity_max = fields.Char('标准速度(最大)')
AGV_Lifting_height = fields.Char('升降高度(max)')
AGV_ground_clearance = fields.Char('最小离地高度')
AGV_turning_radius = fields.Char('最小转弯半径')
AGV_gradeability_max = fields.Integer('最大爬坡度')
AGV_parking_accuracy = fields.Char('停车精度')
AGV_load_weight_max = fields.Char('最大负载重量')
AGV_weight = fields.Char('本体总重量')
AGV_job_duration = fields.Char('连续作业时长')
AGV_transfer_mode = fields.Char('移载方式')
AGV_drive_motor_power = fields.Char('驱动电机功率')
AGV_hoist_motor_power = fields.Char('提升电机功率')
AGV_drive_motor_speed_ratio = fields.Char('驱动电机速比')
AGV_veer_motor_power = fields.Char('转向电机功率')
AGV_veer_motor_speed_ratio = fields.Char('转向电机速比')
AGV_move_motor_power = fields.Char('前移电机功率')
AGV_move_motor_speed_ratio = fields.Char('前移电机速比')
AGV_drive_mode = fields.Char('驱动方式')
AGV_navigation_mode = fields.Char('导航方式')
AGV_communication_mode = fields.Char('通讯方式')
AGV_direction_travel = fields.Char('行走方向')
AGV_power_requirements = fields.Char('电源要求')
AGV_charge_mode = fields.Selection([('手动', '手动'), ('自动', '自动')], string='充电方式')
AGV_security = fields.Char('安全防护')
AGV_operating_temperature = fields.Char('环境温度')
AGV_operating_humidity = fields.Char('环境湿度')
# 三元检测设备参数
detect_L = fields.Char('设备尺寸(长)')
detect_W = fields.Char('设备尺寸(宽)')
detect_H = fields.Char('设备尺寸(高)')
detect_x_axis = fields.Char('X轴')
detect_y_axis = fields.Char('Y轴')
detect_z_axis = fields.Char('Z轴')
detect_precision = fields.Char('测量精度')
detect_measurement_mode = fields.Selection([('光栅尺', '光栅尺'), ('容栅', '容栅'), ('磁栅', '磁栅'), ('激光干涉仪', '激光干涉仪')], string='测量方式')
detect_resolution = fields.Char('分辨率')
detect_load_weight_max = fields.Char('最大负载重量')
detect_weight = fields.Char('本体总重量')
detect_measurement_length = fields.Char('深孔测量长度(max)')
detect_control_mode = fields.Char('控制方式')
detect_balance_mode_for_Z = fields.Char('Z轴平衡方式')
detect_zoom_objective_magnification = fields.Char('变焦物镜倍率')
detect_magnification = fields.Char('放大倍率')
detect_working_distance = fields.Char('工作距离')
detect_locking_mode = fields.Char('锁紧方式')
detect_pressurized_air = fields.Char('压缩空气')
detect_object_field_of_view_max = fields.Char('物方视场(最大)')
detect_object_field_of_view_min = fields.Char('物方视场(最小)')
detect_power_requirements = fields.Char('电源要求')
detect_operating_temperature = fields.Char('环境温度')
detect_operating_humidity = fields.Char('环境湿度')
# 机器人设备参数
robot_gripping_of_workpieces_L = fields.Char('可抓取工件(长)')
robot_gripping_of_workpieces_W = fields.Char('可抓取工件(宽)')
robot_gripping_of_workpieces_H = fields.Char('可抓取工件(高)')
robot_radius_of_the_boom = fields.Char('展臂半径')
robot_load_weight_max = fields.Char('最大负载重量')
robot_weight = fields.Char('本体总重量')
robot_repeatable_positioning_accuracy = fields.Char('重复定位精度')
robot_axis_num = fields.Selection([('2轴', '2轴'), ('3轴', '3轴'), ('4轴', '4轴'), ('5轴', '5轴'), ('6轴', '6轴'), ('7轴', '7轴'), ('8轴', '8轴')], string='轴数')
axis_ids = fields.One2many('sf.robot.axis.num', 'equipment_id', string='动作范围')
robot_track_dimensions_L = fields.Char('轨道尺寸(长)')
robot_track_dimensions_W = fields.Char('轨道尺寸(宽)')
robot_track_dimensions_H = fields.Char('轨道尺寸(高)')
robot_drive_mode = fields.Char('驱动方式')
robot_installation_method = fields.Selection([('置地式', '置地式'), ('壁挂式', '壁挂式'), ('倒挂式', '倒挂式')], string='安装方式')
robot_operating_temperature = fields.Char('环境温度')
robot_operating_humidity = fields.Char('环境湿度')
# 其他参数(所有设备)
date_of_purchase = fields.Date('采购日期')
date_of_manufacture = fields.Date('出厂日期')
date_of_warranty = fields.Date('质保截至日期')
original_value = fields.Char('原值')
incomplete_value = fields.Char('残值')
# 注册同步机床
def enroll_machine_tool(self):
sf_sync_config = self.env['res.config.settings'].get_values()
@@ -246,25 +346,28 @@ class SfMaintenanceEquipment(models.Model):
machine_tool_list = []
if objs_all:
for item in objs_all:
images_ids_names = []
for a in self.env['maintenance.equipment.image'].search([('id', 'in', item.image_id.ids)]):
images_ids_names.append(a.name)
if item.machine_tool_picture != False:
image = base64.b64encode(item.machine_tool_picture).decode('utf-8')
else:
image = False
control_system_id = self.env['sf.machine.control_system'].sudo().browse(item.control_system_id.id).code
val = {
'MTcode': item.MTcode,
'factory_token': token,
'id': item.id,
'name': item.name,
'code': item.code,
'precision': item.precision,
'knife_type': item.knife_type,
'number_of_knife_library': item.number_of_knife_library,
'rotate_speed': item.rotate_speed,
'number_of_axles': item.number_of_axles,
'control_system_id': self.env['sf.machine.control_system'].search(
[('id', '=', item.control_system_id.id)]).code,
'type_id': self.env['sf.machine_tool.type'].search([('id', '=', item.type_id.id)]).code,
'brand_id': self.env['sf.machine.brand'].search([('id', '=', item.brand_id.id)]).code,
'control_system_id': control_system_id,
'type_id': self.env['sf.machine_tool.type'].sudo().browse(item.type_id.id).code,
'brand_id': self.env['sf.machine.brand'].sudo().browse(item.brand_id.id).code,
'supplier_id': item.supplier_id.id,
'x_axis': item.x_axis,
'y_axis': item.y_axis,
@@ -285,15 +388,19 @@ class SfMaintenanceEquipment(models.Model):
'machine_tool_H': item.machine_tool_H,
'feed_speed': item.feed_speed,
'tool_speed': item.tool_speed,
'distance': item.distance,
'taper': item.taper,
'torque': item.torque,
'motor_power': item.motor_power,
'tool_quality_max': item.tool_quality_max,
'tool_long_max': item.tool_long_max,
'tool_diameter_max': item.tool_diameter_max,
'precision_min': item.precision_min,
'precision_max': item.precision_max,
'distance_min': item.distance_min,
'distance_max': item.distance_max,
'tool_diameter_min': item.tool_diameter_min,
'machine_tool_category': item.machine_tool_category.code,
'image_id': images_ids_names
}
machine_tool_list.append(val)
# kw = machine_tool_list
@@ -472,7 +579,7 @@ class SfMaintenanceEquipment(models.Model):
if not next_requests:
equipment._create_new_request1(equipment.overhaul_date)
image_id = fields.Many2many('maintenance.equipment.image', 'equipment_id', string='设备图文')
image_id = fields.Many2many('maintenance.equipment.image', 'equipment_id', string='加工能力', domain="[('type', '=', '加工能力')]")
class MaintenanceStandardImage(models.Model):
@@ -483,7 +590,8 @@ class MaintenanceStandardImage(models.Model):
name = fields.Char('名称')
image = fields.Binary(string='图文')
type = fields.Selection(
[('加工能力', '加工能力'), ('刀尖特征', '刀尖特征'), ('柄部类型', '柄部类型'), ('走刀方向', '走刀方向'), ('冷却液', '冷却液')],
[('加工能力', '加工能力'), ('刀尖特征', '刀尖特征'), ('柄部类型', '柄部类型'), ('走刀方向', '走刀方向'),
('冷却液', '冷却液'), ('压紧方式', '压紧方式'), ('刀片形状', '刀片形状')],
string='特征')
equipment_id = fields.Many2many('maintenance.equipment', 'image_id', string='设备')
@@ -517,3 +625,16 @@ class MaintenanceStandardImage(models.Model):
new_res.append([id, name, data_uri])
# 返回新的结果列表
return new_res
class SfRobotAxisNum(models.Model):
_name = 'sf.robot.axis.num'
_description = '机器人轴参数'
name = fields.Char('*轴')
angle_min = fields.Char('最小角度-(°)')
angle_max = fields.Char('最大角度+(°)')
velocity = fields.Char('最大速度(°/s)')
weight = fields.Char('最大负载(kg)')
permissible_load_torque = fields.Char('允许负载扭矩(N-m)')
permissible_inertial_torque = fields.Char('允许惯性扭矩(kg-m²)')
equipment_id = fields.Many2one('maintenance.equipment', string='机器人', domain="[('equipment_type', '=', '机器人')]")

View File

@@ -5,6 +5,7 @@ access_maintenance_equipment,maintenance_equipment,model_maintenance_equipment,b
access_maintenance_standards,maintenance_standards,model_maintenance_standards,base.group_user,1,1,1,1
access_maintenance_standard_image,maintenance_standard_image,model_maintenance_standard_image,base.group_user,1,1,1,1
access_maintenance_equipment_image,maintenance_equipment_image,model_maintenance_equipment_image,base.group_user,1,1,1,1
access_sf_robot_axis_num,sf_robot_axis_num,model_sf_robot_axis_num,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
5 access_maintenance_standards maintenance_standards model_maintenance_standards base.group_user 1 1 1 1
6 access_maintenance_standard_image maintenance_standard_image model_maintenance_standard_image base.group_user 1 1 1 1
7 access_maintenance_equipment_image maintenance_equipment_image model_maintenance_equipment_image base.group_user 1 1 1 1
8 access_sf_robot_axis_num sf_robot_axis_num model_sf_robot_axis_num base.group_user 1 1 1 1
9
10
11

View File

@@ -11,7 +11,7 @@
<group>
<group>
<field name="code" readonly="1" force_save="1"/>
<field name="name" required="1"/>
<field name="name" readonly="1" force_save="1"/>
<field name="maintenance_equipment_category_id" required="1"/>
<field name="eq_maintenance_ids" invisible='1'/>
<field name="overhaul_ids" invisible='1'/>

File diff suppressed because it is too large Load Diff

View File

@@ -18,11 +18,12 @@
'views/mrp_production_addional_change.xml',
# 'views/mrp_maintenance_views.xml',
'views/mrp_routing_workcenter_view.xml',
'views/production_line_view.xml',
'views/mrp_workcenter_views.xml',
'views/mrp_workorder_view.xml',
'views/production_line_view.xml',
'views/tool_other_features_view.xml',
'views/model_type_view.xml',
'views/sf_maintenance_equipment.xml',
# 'views/kanban_change.xml'
],

View File

@@ -2,8 +2,8 @@ from . import model_type
from . import product_template
from . import mrp_production
from . import mrp_workorder
from . import mrp_workcenter
from . import mrp_maintenance
from . import mrp_workcenter
from . import mrp_routing_workcenter
from . import stock
from . import res_user

View File

@@ -6,8 +6,8 @@ from dateutil.relativedelta import relativedelta
class MaintenanceEquipment(models.Model):
_inherit = "maintenance.equipment"
_check_company_auto = True
production_line_id = fields.Many2one('sf.production.line', string='生产线')
expected_mtbf = fields.Integer(string='Expected MTBF', help='Expected Mean Time Between Failure')
mtbf = fields.Integer(compute='_compute_maintenance_request', string='MTBF',
help='Mean Time Between Failure, computed based on done corrective maintenances.')
@@ -16,8 +16,6 @@ class MaintenanceEquipment(models.Model):
string='Estimated time before next failure (in days)',
help='Computed as Latest Failure Date + MTBF')
latest_failure_date = fields.Date(compute='_compute_maintenance_request', string='Latest Failure Date')
workcenter_id = fields.Many2one(
'mrp.workcenter', string='Work Center', check_company=True)
@api.depends('effective_date', 'maintenance_ids.stage_id', 'maintenance_ids.close_date',
'maintenance_ids.request_date')
@@ -64,3 +62,8 @@ class MaintenanceRequest(models.Model):
'mrp.workorder', string='Work Order', check_company=True)
production_company_id = fields.Many2one(string='Production Company', related='production_id.company_id')
company_id = fields.Many2one(domain="[('id', '=?', production_company_id)]")
class SfMaintenanceLogs(models.Model):
_inherit = 'sf.maintenance.logs'
production_line_id = fields.Many2one('sf.production.line', string='生产线', related='maintenance_equipment_id.production_line_id', store=True)

View File

@@ -9,13 +9,10 @@ class ResWorkcenter(models.Model):
# 生产线显示
production_line_show = fields.Char(string='生产线名称')
machine_tool_id = fields.Many2one('sf.machine_tool', string='机床')
production_line_id = fields.Many2one('sf.production.line', string='生产线')
equipment_id = fields.Many2one(
'maintenance.equipment', string="设备",
check_company=True)
)
production_line_id = fields.Many2one('sf.production.line', string='生产线', related='equipment_id.production_line_id', store=True)
is_process_outsourcing = fields.Boolean('工艺外协')
users_ids = fields.Many2many("res.users", 'users_workcenter')
@@ -25,13 +22,13 @@ class ResWorkcenter(models.Model):
equipment_status = fields.Selection(
[("正常", "正常"), ("故障", "故障"), ("不可用", "不可用")],
string="设备状态", compute='_compute_equipment_id')
string="设备状态", related='equipment_id.state')
@api.depends('equipment_id')
def _compute_equipment_id(self):
for record in self:
if record:
record.equipment_status = record.equipment_id.state
# @api.depends('equipment_id')
# def _compute_equipment_id(self):
# for record in self:
# if record:
# record.equipment_status = record.equipment_id.state
equipment_image = fields.Binary('设备图片', related='equipment_id.machine_tool_picture')
@@ -40,23 +37,23 @@ class ResWorkcenter(models.Model):
outsourcing_workcenter = self.env['mrp.workcenter'].search([('is_process_outsourcing', '=', True)])
return outsourcing_workcenter.id
@api.onchange('machine_tool_id')
def update_machine_tool_is_binding(self):
machine_tool = self.env["sf.machine_tool"].search([('is_binding', '=', True)])
if machine_tool:
for item in machine_tool:
workcenter_machine_tool = self.env["mrp.workcenter"].search([('machine_tool_id', '=', item.id)])
if workcenter_machine_tool:
if self.machine_tool_id.id:
if workcenter_machine_tool.id != self.machine_tool_id.id:
self.machine_tool_id.is_binding = True
else:
self.machine_tool_id.is_binding = True
else:
self.machine_tool_id.is_binding = True
item.is_binding = False
else:
self.machine_tool_id.is_binding = True
# @api.onchange('machine_tool_id')
# def update_machine_tool_is_binding(self):
# machine_tool = self.env["sf.machine_tool"].search([('is_binding', '=', True)])
# if machine_tool:
# for item in machine_tool:
# workcenter_machine_tool = self.env["mrp.workcenter"].search([('machine_tool_id', '=', item.id)])
# if workcenter_machine_tool:
# if self.machine_tool_id.id:
# if workcenter_machine_tool.id != self.machine_tool_id.id:
# self.machine_tool_id.is_binding = True
# else:
# self.machine_tool_id.is_binding = True
# else:
# self.machine_tool_id.is_binding = True
# item.is_binding = False
# else:
# self.machine_tool_id.is_binding = True
def action_work_order(self):
if not self.env.context.get('desktop_list_view', False):

View File

@@ -835,3 +835,43 @@ class ResMrpBomMo(models.Model):
raw_bom = self.env['product.product'].search(
[('categ_id.type', '=', '原材料'), ('materials_type_id', '=', product.materials_type_id.id)])
return raw_bom
class SfMaintenanceEquipmentAndProductTemplate(models.Model):
_inherit = 'maintenance.equipment'
_description = '设备'
product_template_ids = fields.One2many('maintenance.equipment.tool', 'equipment_id', string='机床刀位')
@api.model_create_multi
def create(self, vals_list):
vals = []
for value in vals_list:
res = super(SfMaintenanceEquipmentAndProductTemplate, self).create(value)
number = value.get('number_of_knife_library')
for i in range(1, number + 1):
self.env['maintenance.equipment.tool'].create({
'equipment_id': res.id,
'code': 'T' + str(i)
})
vals.append(res)
return vals[0]
class SfMaintenanceEquipmentTool(models.Model):
_name = 'maintenance.equipment.tool'
_description = '机床刀位'
equipment_id = fields.Many2one('maintenance.equipment', string='设备')
product_template_id = fields.Many2one('product.template', string='功能刀具名称', domain="[('categ_type', '=', '刀具')]")
image_1920 = fields.Binary('图片', related='product_template_id.image_1920')
categ_type = fields.Char(string='功能刀具类型')
diameter = fields.Char('直径')
precision = fields.Char('\\')
tool_code = fields.Char('功能刀具编码')
hilt_name = fields.Char('刀柄名称')
hilt_code = fields.Char('刀柄编码')
life_value_max = fields.Char('最大寿命值')
alarm_value = fields.Char('报警值')
used_value = fields.Char('已使用值')
code = fields.Char('机床刀位号')

View File

@@ -22,6 +22,7 @@ class ProductionLine(models.Model):
return num
mrp_workcenter_ids = fields.One2many('mrp.workcenter', 'production_line_id', '工作中心')
mrp_manufacturing_ids = fields.One2many('maintenance.equipment', 'production_line_id', '设备')
name = fields.Char('生产线', size=20, required=True)
code = fields.Char('编码', default=_get_code, readonly=True)
remark = fields.Char('备注')

View File

@@ -14,5 +14,6 @@ access_sf_cutting_direction,sf_cutting_direction,model_sf_cutting_direction,base
access_sf_suitable_coolant,sf_suitable_coolant,model_sf_suitable_coolant,base.group_user,1,1,1,1
access_sf_cutting_speed,sf_cutting_speed,model_sf_cutting_speed,base.group_user,1,1,1,1
access_sf_feed_per_tooth,sf_feed_per_tooth,model_sf_feed_per_tooth,base.group_user,1,1,1,1
access_maintenance_equipment_tool,maintenance_equipment_tool,model_maintenance_equipment_tool,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
14 access_sf_feed_per_tooth sf_feed_per_tooth model_sf_feed_per_tooth base.group_user 1 1 1 1
15 access_maintenance_equipment_tool maintenance_equipment_tool model_maintenance_equipment_tool base.group_user 1 1 1 1
16
17
18
19

View File

@@ -82,4 +82,27 @@
name="生产线"
sequence="20"
action="sf_production_line_act"/>
<!-- 设备新增生产线-->
<record id="sf_hr_equipment_view_form_manufacturing" model="ir.ui.view">
<field name="name">sf_equipment.form</field>
<field name="model">maintenance.equipment</field>
<field name="inherit_id" ref="sf_maintenance.sf_hr_equipment_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='brand_id']" position="after">
<field name="production_line_id"/>
</xpath>
</field>
</record>
<!-- 故障日志增加产线对象-->
<record id="sf_view_maintenance_logs_tree" model="ir.ui.view">
<field name="name">sf.maintenance.logs.tree</field>
<field name="model">sf.maintenance.logs</field>
<field name="inherit_id" ref="sf_maintenance.view_maintenance_logs_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='code']" position="after">
<field name="production_line_id"/>
</xpath>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- 设备新增生产线-->
<record id="sf_hr_equipment_view_form_manufacturing" model="ir.ui.view">
<field name="name">sf_equipment.form</field>
<field name="model">maintenance.equipment</field>
<field name="inherit_id" ref="sf_maintenance.sf_hr_equipment_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='brand_id']" position="after">
<field name="production_line_id"/>
</xpath>
</field>
</record>
<!-- 故障日志增加产线对象-->
<record id="sf_view_maintenance_logs_tree" model="ir.ui.view">
<field name="name">sf.maintenance.logs.tree</field>
<field name="model">sf.maintenance.logs</field>
<field name="inherit_id" ref="sf_maintenance.view_maintenance_logs_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='code']" position="after">
<field name="production_line_id"/>
</xpath>
</field>
</record>
<!-- 设备增加刀具库位table-->
<record id="sf_manufacturing_hr_equipment_view_form" model="ir.ui.view">
<field name="name">sf_manufacturing_equipment.form</field>
<field name="model">maintenance.equipment</field>
<field name="inherit_id" ref="sf_maintenance.sf_hr_equipment_view_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='sf_equipment']" position="after">
<page string="标准刀库" name="sf_equipment_product_template"
attrs="{'invisible': [('equipment_type', '!=', '机床')]}">
<field name = 'product_template_ids' >
<tree editable='bottom'>
<field name="code"/>
<field name="product_template_id"/>
<field name="image_1920" widget="image"/>
<field name="categ_type"/>
<field name="diameter"/>
<field name="precision"/>
<field name="tool_code"/>
<field name="hilt_name"/>
<field name="hilt_code"/>
<field name="life_value_max"/>
<field name="alarm_value"/>
<field name="used_value"/>
</tree>
</field>
</page>
</xpath>
</field>
</record>
</odoo>

View File

@@ -1,245 +1,223 @@
<?xml version="1.0" encoding='UTF-8'?>
<odoo>
<record model="ir.cron" id="sf_cron1">
<field name="name">同步资源库材料</field>
<field name="model_id" ref="model_sf_production_materials"/>
<record model="ir.cron" id="ir_cron_sf_static_resource_datasync">
<field name="name">制造-配置每日定时同步cloud的静态资源库</field>
<field name="model_id" ref="model_sf_static_resource_datasync"/>
<field name="state">code</field>
<field name="code">model.sync_production_materials()</field>
<field name="code">model._cron_static_resource_yesterday_func()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron1">-->
<!-- <field name="name">同步静态资源库材料</field>-->
<!-- <field name="model_id" ref="model_sf_production_materials"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_production_materials()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron2">
<field name="name">同步资源库材料型号</field>
<field name="model_id" ref="model_sf_materials_model"/>
<field name="state">code</field>
<field name="code">model.sync_materials_model()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron2">-->
<!-- <field name="name">同步静态资源库材料型号</field>-->
<!-- <field name="model_id" ref="model_sf_materials_model"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_materials_model()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron3">
<field name="name">同步资源库表面工艺</field>
<field name="model_id" ref="model_sf_production_process"/>
<field name="state">code</field>
<field name="code">model.sync_production_process()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron8">-->
<!-- <field name="name">同步静态表面工艺类别</field>-->
<!-- <field name="model_id" ref="model_sf_production_process_category"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_production_process_category()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron4">
<field name="name">同步资源库加工工艺</field>
<field name="model_id" ref="model_sf_processing_technology"/>
<field name="state">code</field>
<field name="code">model.sync_processing_technology()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron3">-->
<!-- <field name="name">同步静态资源库表面工艺</field>-->
<!-- <field name="model_id" ref="model_sf_production_process"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_production_process()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron5">
<field name="name">同步资源库标签</field>
<field name="model_id" ref="model_sf_machine_brand_tags"/>
<field name="state">code</field>
<field name="code">model.sync_machine_brand_tags()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron4">-->
<!-- <field name="name">同步静态资源库加工工艺</field>-->
<!-- <field name="model_id" ref="model_sf_processing_technology"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_processing_technology()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron6">
<field name="name">同步资源库控制系统</field>
<field name="model_id" ref="model_sf_machine_control_system"/>
<field name="state">code</field>
<field name="code">model.sync_machine_tool_type_control_system()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron5">-->
<!-- <field name="name">同步静态资源库标签</field>-->
<!-- <field name="model_id" ref="model_sf_machine_brand_tags"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_machine_brand_tags()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron7">
<field name="name">同步资源库品牌</field>
<field name="model_id" ref="model_sf_machine_brand"/>
<field name="state">code</field>
<field name="code">model.sync_machine_brand()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron6">-->
<!-- <field name="name">同步静态资源库数控系统</field>-->
<!-- <field name="model_id" ref="model_sf_machine_control_system"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_machine_tool_type_control_system()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron8">
<field name="name">同步表面工艺类别</field>
<field name="model_id" ref="model_sf_production_process_category"/>
<field name="state">code</field>
<field name="code">model.sync_production_process_category()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron7">-->
<!-- <field name="name">同步静态资源库品牌</field>-->
<!-- <field name="model_id" ref="model_sf_machine_brand"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_machine_brand()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron9">
<field name="name">同步资源库机床型号</field>
<field name="model_id" ref="model_sf_machine_tool_type"/>
<field name="state">code</field>
<field name="code">model.sync_machine_tool_type()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron9">-->
<!-- <field name="name">同步静态资源库机床型号</field>-->
<!-- <field name="model_id" ref="model_sf_machine_tool_type"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_machine_tool_type()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron12">
<field name="name">同步资源库工序</field>
<field name="model_id" ref="model_sf_processing_order"/>
<field name="state">code</field>
<field name="code">model.sync_processing_order()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron12">-->
<!-- <field name="name">同步静态资源库工序</field>-->
<!-- <field name="model_id" ref="model_sf_processing_order"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_processing_order()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron13">
<field name="name">同步表面工艺可选参数</field>
<field name="model_id" ref="model_sf_production_process_parameter"/>
<field name="state">code</field>
<field name="code">model.sync_production_process_parameter()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron13">-->
<!-- <field name="name">同步静态表面工艺可选参数</field>-->
<!-- <field name="model_id" ref="model_sf_production_process_parameter"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_production_process_parameter()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron14">
<field name="name">同步资源库机床类型</field>
<field name="model_id" ref="model_sf_machine_tool_category"/>
<field name="state">code</field>
<field name="code">model.sync_machine_tool_category()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron14">-->
<!-- <field name="name">同步静态资源库机床类型</field>-->
<!-- <field name="model_id" ref="model_sf_machine_tool_category"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_machine_tool_category()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cutting_tool_material">
<field name="name">同步刀具物料</field>
<field name="model_id" ref="model_sf_cutting_tool_material"/>
<field name="state">code</field>
<field name="code">model.sync_cutting_tool_material()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cutting_tool_material">-->
<!-- <field name="name">同步静态资源库刀具物料</field>-->
<!-- <field name="model_id" ref="model_sf_cutting_tool_material"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_cutting_tool_material()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cutting_tool_type">
<field name="name">同步刀具类型</field>
<field name="model_id" ref="model_sf_cutting_tool_type"/>
<field name="state">code</field>
<field name="code">model.sync_tool_type()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cutting_tool_type">-->
<!-- <field name="name">同步静态资源库刀具类型</field>-->
<!-- <field name="model_id" ref="model_sf_cutting_tool_type"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_tool_type()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cutting_tool_model">
<field name="name">同步刀具型号</field>
<field name="model_id" ref="model_sf_cutting_tool_model"/>
<field name="state">code</field>
<field name="code">model.sync_tool_model()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_cron16">-->
<!-- <field name="name">同步静态资源库功能刀具类型</field>-->
<!-- <field name="model_id" ref="model_sf_functional_cutting_tool_model"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_functional_cutting_tool_model()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron15">
<field name="name">同步功能刀具型号</field>
<field name="model_id" ref="model_sf_functional_cutting_tool"/>
<field name="state">code</field>
<field name="code">model.sync_functional_cutting_tool()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_fixture_material">-->
<!-- <field name="name">同步静态资源库夹具物料</field>-->
<!-- <field name="model_id" ref="model_sf_fixture_material"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_fixture_material()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_cron16">
<field name="name">同步功能刀具类型</field>
<field name="model_id" ref="model_sf_functional_cutting_tool_model"/>
<field name="state">code</field>
<field name="code">model.sync_functional_cutting_tool_model()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_multi_mounting_type">-->
<!-- <field name="name">同步静态资源库联装类型</field>-->
<!-- <field name="model_id" ref="model_sf_multi_mounting_type"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_multi_mounting_type()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_fixture_material">
<field name="name">同步夹具物料</field>
<field name="model_id" ref="model_sf_fixture_material"/>
<field name="state">code</field>
<field name="code">model.sync_fixture_material()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_fixture_model">-->
<!-- <field name="name">同步静态资源库夹具型号</field>-->
<!-- <field name="model_id" ref="model_sf_fixture_model"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_fixture_model()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
<record model="ir.cron" id="sf_multi_mounting_type">
<field name="name">同步联装类型</field>
<field name="model_id" ref="model_sf_multi_mounting_type"/>
<field name="state">code</field>
<field name="code">model.sync_multi_mounting_type()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="sf_fixture_model">
<field name="name">同步夹具型号</field>
<field name="model_id" ref="model_sf_fixture_model"/>
<field name="state">code</field>
<field name="code">model.sync_fixture_model()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="sf_functional_fixture_type">
<field name="name">同步功能夹具类型</field>
<field name="model_id" ref="model_sf_functional_fixture_type"/>
<field name="state">code</field>
<field name="code">model.sync_functional_fixture_type()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<record model="ir.cron" id="sf_functional_fixture">
<field name="name">同步功能夹具</field>
<field name="model_id" ref="model_sf_functional_fixture"/>
<field name="state">code</field>
<field name="code">model.sync_functional_fixture()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
<!-- <record model="ir.cron" id="sf_functional_fixture_type">-->
<!-- <field name="name">同步静态资源库功能夹具类型</field>-->
<!-- <field name="model_id" ref="model_sf_functional_fixture_type"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.sync_functional_fixture_type()</field>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field name="doall" eval="False"/>-->
<!-- </record>-->
</odoo>

View File

@@ -21,6 +21,10 @@ class ResConfigSettings(models.TransientModel):
def sf_all_sync(self):
try:
self.env['sf.international.standards'].sync_all_mrs_international_standards()
_logger.info("同步资源库国际标准完成")
self.env['material.apply'].sync_all_material_apply()
_logger.info("同步资源库材料应用完成")
self.env['sf.production.materials'].sync_all_production_materials()
_logger.info("同步资源库材料")
self.env['sf.materials.model'].sync_all_materials_model()
@@ -29,44 +33,41 @@ class ResConfigSettings(models.TransientModel):
_logger.info("同步资源库表面工艺类别")
self.env['sf.production.process'].sync_all_production_process()
_logger.info("同步资源库表面工艺")
self.env['sf.processing.technology'].sync_all_processing_technology()
_logger.info("同步资源库加工工艺")
# self.env['sf.processing.technology'].sync_all_processing_technology()
# _logger.info("同步资源库加工工艺")
self.env['sf.machine.brand.tags'].sync_all_machine_brand_tags()
_logger.info("同步资源库品牌类别")
self.env['sf.machine.brand'].sync_all_machine_brand()
_logger.info("同步资源库品牌")
self.env['sf.machine.control_system'].sync_all_machine_tool_type_control_system()
self.env['sf.machine.control_system'].sync_all_machine_control_system()
_logger.info("同步资源库控制系统")
self.env['sf.machine_tool.category'].sync_all_machine_tool_category()
_logger.info("同步资源库机床类型")
# self.env['sf.production.process.parameter'].sync_all_production_process_parameter()
# _logger.info("同步表面工艺参数")
_logger.info("同步所有刀具物料...")
self.env['sf.production.process.parameter'].sync_all_production_process_parameter()
_logger.info("同步刀具物料")
self.env['sf.cutting.tool.material'].sync_all_cutting_tool_material()
_logger.info("同步所有刀具物料完成")
_logger.info("同步所有刀具类型...")
_logger.info("同步刀具类型")
self.env['sf.cutting.tool.type'].sync_all_tool_type()
_logger.info("同步所有刀具类型完成")
_logger.info("同步所有刀具型号...")
self.env['sf.cutting.tool.model'].sync_all_tool_model()
# _logger.info("同步所有刀具型号...")
# self.env['sf.cutting.tool.model'].sync_all_tool_model()
_logger.info("同步所有刀具型号完成")
_logger.info("定时同步所有功能刀具类型列表...")
self.env['sf.functional.cutting.tool.model'].sync_all_functional_cutting_tool_model()
_logger.info("同步所有功能刀具类型完成")
# _logger.info("同步所有功能刀具列表...")
# self.env['sf.functional.cutting.tool'].sync_all_functional_cutting_tool()
# _logger.info("同步所有功能刀具列表完成")
self.env['sf.fixture.material'].sync_all_fixture_material()
_logger.info("同步夹具物料")
self.env['sf.multi_mounting.type'].sync_all_multi_mounting_type()
self.env['sf.fixture.material'].sync_all_fixture_material()
_logger.info("同步联装类型")
self.env['sf.fixture.model'].sync_all_fixture_model()
self.env['sf.multi_mounting.type'].sync_all_multi_mounting_type()
_logger.info("同步夹具型号")
self.env['sf.functional.fixture.type'].sync_all_functional_fixture_type()
self.env['sf.fixture.model'].sync_all_fixture_model()
_logger.info("同步功能夹具类型")
self.env['sf.functional.fixture'].sync_all_functional_fixture()
# self.env['sf.functional.fixture'].sync_all_functional_fixture()
self.env['sf.functional.fixture.type'].sync_all_functional_fixture_type()
self.env['sf.machine_tool.type'].sync_all_machine_tool_type()
_logger.info("同步资源库机床型号")
_logger.info("同步资源库机床型号完成")
self.env['maintenance.equipment.image'].sync_all_maintenance_equipment_image()
_logger.info("同步能力特征库")
except Exception as e:
_logger.info("捕获错误信息:%s" % e)
raise ValidationError("数据错误导致同步失败,请联系管理员")

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -82,7 +82,7 @@ class QuickEasyOrder(models.Model):
# logging.info('create-model_file:%s' % len(vals['model_file']))
obj = super(QuickEasyOrder, self).create(vals)
# self.model_coloring(obj)
self.model_coloring(obj)
self.distribute_to_factory(obj)
obj.state = '待接单'
return obj
@@ -90,14 +90,14 @@ class QuickEasyOrder(models.Model):
# 将attach的datas内容转为glb文件
def transition_glb_file(self, report_path, model_code):
shapes = read_step_file(report_path)
output_file = os.path.join('C:/Users/43484/Desktop/机企猫工作文档', str(model_code) + '.stl')
# output_file = os.path.join('/tmp', str(model_code) + '.stl')
# output_file = os.path.join('C:/Users/43484/Desktop/机企猫工作文档', str(model_code) + '.stl')
output_file = os.path.join('/tmp', str(model_code) + '.stl')
write_stl_file(shapes, output_file, 'binary', 0.03, 0.5)
# 转化为glb
output_glb_file = os.path.join('C:/Users/43484/Desktop/机企猫工作文档', str(model_code) + '.glb')
# output_glb_file = os.path.join('/tmp', str(model_code) + '.glb')
# output_glb_file = os.path.join('C:/Users/43484/Desktop/机企猫工作文档', str(model_code) + '.glb')
output_glb_file = os.path.join('/tmp', str(model_code) + '.glb')
util_path = get_resource_path('sf_dlm', 'static/util')
cmd = 'python %s/stl2gltf.py %s %s -b' % (util_path, output_file, output_glb_file)
cmd = 'python3 %s/stl2gltf.py %s %s -b' % (util_path, output_file, output_glb_file)
os.system(cmd)
# 转base64
with open(output_glb_file, 'rb') as fileObj:
@@ -122,17 +122,17 @@ class QuickEasyOrder(models.Model):
model_code = hashlib.sha1(base64_datas.encode('utf-8')).hexdigest()
logging.info("模型编码: %s" % model_code)
item.model_file = self.transition_glb_file(report_path, model_code)
# ret = self.feature_recognition(report_path, model_code)
# logging.info("自动报价返回值: %s" % ret)
# boxshape = ret['boxshape'].tolist()
# logging.info("自动报价boxshape: %s" % boxshape)
# logging.info('自动报价feature_infos:%s' % ret['feature_infos'])
# item.model_length = boxshape[0] # 长 单位mm
# item.model_width = boxshape[1] # 宽
# item.model_height = boxshape[2] # 高
# item.model_volume = boxshape[0] * boxshape[1] * boxshape[2]
# item.model_feature = json.dumps(ret['feature_infos'], ensure_ascii=False)
# self._get_price(item)
ret = self.feature_recognition(report_path, model_code)
logging.info("自动报价返回值: %s" % ret)
boxshape = ret['boxshape'].tolist()
logging.info("自动报价boxshape: %s" % boxshape)
logging.info('自动报价feature_infos:%s' % ret['feature_infos'])
item.model_length = boxshape[0] # 长 单位mm
item.model_width = boxshape[1] # 宽
item.model_height = boxshape[2] # 高
item.model_volume = boxshape[0] * boxshape[1] * boxshape[2]
item.model_feature = json.dumps(ret['feature_infos'], ensure_ascii=False)
self._get_price(item)
else:
item.model_file = False
item.model_feature = False

View File

@@ -756,7 +756,7 @@ class FunctionalToolAssembly(models.Model):
domain=[('cutting_tool_material_id', '=', '整体式刀具')])
integral_code = fields.Char('整体式刀具序列号', readonly=True)
integral_name = fields.Char('整体式刀具名称', readonly=True)
sf_tool_brand_id_1 = fields.Many2one('sf.machine.brand', '整体式刀具品牌', readonly=True)
sf_tool_brand_id_1 = fields.Many2one('sf.machine.brand', '整体式刀具品牌', readonly=True, domain="[('tag_ids.name', 'ilike', '刀具')]")
# 刀片型号
cutting_tool_blade_model_id = fields.Many2one('product.product', string='刀片型号', readonly=True,
domain=[('cutting_tool_material_id', '=', '刀片')])

View File

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