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 { .test_model > .o_form_label {
margin-left: 20px; margin-left: 0px !important;
margin-right: 0px !important; margin-right: 0px !important;
white-space: nowrap; white-space: nowrap;
} }
@@ -257,6 +257,12 @@ div[class="o_content o_component_with_search_panel"] .o_kanban_primary_right > .
top: 55px; top: 55px;
right: 43.5%; right: 43.5%;
} }
//------------------------------------------
.test_model > .o_form_label {
margin-left: 4px !important;
line-height: 0 !important;
}
@media screen and (min-width: 1200px) { @media screen and (min-width: 1200px) {
div[class="o_content o_component_with_search_panel"] .o_kanban_primary_right > .row { div[class="o_content o_component_with_search_panel"] .o_kanban_primary_right > .row {
@@ -290,3 +296,48 @@ div[class="o_content o_component_with_search_panel"] .o_kanban_primary_right > .
.text-bg-warning { .text-bg-warning {
background-color: #FED300 !important; 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("热处理后密度") mf_materia_post = fields.Char("热处理后密度")
density = fields.Float("密度(kg/m³)") density = fields.Float("密度(kg/m³)")
materials_id = fields.Many2one('sf.production.materials', "材料名") 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)") hardness = fields.Float("硬度(hrc)")
rough_machining = fields.Float("粗加工Vc(m/min)") rough_machining = fields.Float("粗加工Vc(m/min)")
finish_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' _name = 'sf.production.process'
_description = '表面工艺' _description = '表面工艺'
process_encode = fields.Char("编码") code = fields.Char("编码")
name = fields.Char('名称') name = fields.Char('名称')
remark = fields.Text("备注") remark = fields.Text("备注")
processing_order_ids = fields.One2many('sf.processing.order', 'production_process_id', string='工序') 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) name = fields.Char('名称', index=True)
remark = fields.Text('备注', 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', processing_order_ids = fields.Many2many('sf.processing.order', 'sf_associated_processes',
index=True, string='工序') index=True, string='工序')
active = fields.Boolean('有效', default=True) active = fields.Boolean('有效', default=True)
@@ -172,3 +177,20 @@ class MrsProductionProcessParameter(models.Model):
for i in item.parameter_ids: for i in item.parameter_ids:
code_arr.append(i.code) code_arr.append(i.code)
return code_arr 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_id = fields.Many2one('sf.fixture.material', string="夹具物料", )
fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name', store=True) fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name', store=True)
multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型") 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="装夹方式") 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模型图")

View File

@@ -70,7 +70,7 @@ class IntegralCuttingTool(models.Model):
# 整体式刀具类型字段,关联整体式刀具类型对象 # 整体式刀具类型字段,关联整体式刀具类型对象
integral_model_number = fields.Many2one('sf.integral.cutting.tool.model', '整体式刀具类型') integral_model_number = fields.Many2one('sf.integral.cutting.tool.model', '整体式刀具类型')
# 增加品牌、总长度(mm)、柄部长度(mm)、刃部长度(mm)、直径(mm)、刃数、前角(°)、后角(°)、主偏角(°)、材料型号、配对螺母(mm)、适用夹头型号、适用范围、图片、创建人、创建时间等字段 # 增加品牌、总长度(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)') total_length = fields.Float('总长度(mm)')
shank_length = fields.Float('柄部长度(mm)') shank_length = fields.Float('柄部长度(mm)')
blade_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 = fields.Char(string="刀具物料类型", related='cutting_tool_material_id.name', store=True)
cutting_tool_type_id = fields.Many2one('sf.cutting.tool.type', string='刀具类型', 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_length = fields.Integer('长度(mm)')
tool_width = fields.Integer('宽度(mm)') tool_width = fields.Integer('宽度(mm)')
tool_height = 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_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_sync_common,sf_sync_common,model_sf_sync_common,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="model">sf.processing.technology</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="加工工艺" create="0" edit="0" delete="1"> <tree string="加工工艺" create="0" edit="0" delete="1">
<field name="process_encode"/> <field name="code"/>
<field name="name"/> <field name="name"/>
</tree> </tree>
</field> </field>
@@ -35,7 +35,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<search> <search>
<field name="name" string="名称搜索" filter_domain="[('name','ilike',self)]"/> <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)]"/> <filter name="filter_active" string="已归档" domain="[('active','=',False)]"/>
</search> </search>
</field> </field>
@@ -64,7 +64,7 @@
<page string="表面工艺"> <page string="表面工艺">
<field name='production_process_ids' widget="ony2many"> <field name='production_process_ids' widget="ony2many">
<tree editable="bottom"> <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="name" string="名称" required="1"/>
<field name='category_id' default="default" invisible="1"/> <field name='category_id' default="default" invisible="1"/>
<field name="remark"/> <field name="remark"/>
@@ -105,7 +105,7 @@
<field name="model">sf.production.process</field> <field name="model">sf.production.process</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="表面工艺" create="0" edit="0" delete="1"> <tree string="表面工艺" create="0" edit="0" delete="1">
<field name="process_encode"/> <field name="code"/>
<field name="name" string="名称"/> <field name="name" string="名称"/>
<field name="remark"/> <field name="remark"/>
</tree> </tree>
@@ -124,7 +124,7 @@
</div> </div>
<group> <group>
<group> <group>
<field name="process_encode"/> <field name="code"/>
</group> </group>
<notebook> <notebook>
<page string="可选参数"> <page string="可选参数">
@@ -186,7 +186,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<search> <search>
<field name="name" string="名称搜索" filter_domain="[('name','ilike',self)]"/> <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)]"/> <filter name="filter_active" string="已归档" domain="[('active','=',False)]"/>
</search> </search>
</field> </field>
@@ -241,17 +241,20 @@
<record model="ir.ui.view" id="sf_materials_model_tree"> <record model="ir.ui.view" id="sf_materials_model_tree">
<field name="model">sf.materials.model</field> <field name="model">sf.materials.model</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="材料型号" create="0" delete="1"> <tree string="材料型号" delete="0">
<field name="materials_no" readonly="1"/> <field name="materials_no"/>
<field name="name" readonly="1"/> <field name="materials_code"/>
<field name="gain_way"/> <field name="name"/>
<field name="standards_id" optional="hide"/>
<field name="alloy_code"/>
<field name="tensile_strength"/> <field name="tensile_strength"/>
<field name="hardness"/> <field name="hardness" optional="show"/>
<field name="need_h"/> <field name="need_h"/>
<field name="density"/> <field name="apply" widget="many2many_tags" optional="show"/>
<field name="rough_machining"/> <field name="density" optional="show"/>
<field name="finish_machining"/> <field name="rough_machining" optional="hide"/>
<field name="remark"/> <field name="finish_machining" optional="hide"/>
<field name="remark" optional="hide"/>
<field name='materials_id' invisible="1"/> <field name='materials_id' invisible="1"/>
</tree> </tree>
</field> </field>

View File

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

View File

@@ -62,13 +62,13 @@
action="action_sf_cutting_tool_type" action="action_sf_cutting_tool_type"
/> />
<!-- 刀具型号 --> <!-- 刀具型号 -->
<menuitem <!-- <menuitem-->
id="menu_sf_integral_cutting_tool" <!-- id="menu_sf_integral_cutting_tool"-->
parent="menu_sf_cutting_tool" <!-- parent="menu_sf_cutting_tool"-->
name="刀具型号" <!-- name="刀具型号"-->
sequence="3" <!-- sequence="3"-->
action="action_sf_cutting_tool" <!-- action="action_sf_cutting_tool"-->
/> <!-- />-->
<!-- 功能刀具 --> <!-- 功能刀具 -->
<!-- <menuitem--> <!-- <menuitem-->
<!-- id="menu_sf_functional_cutting_tool"--> <!-- 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 -*- # -*- coding: utf-8 -*-
import logging import logging
import datetime from datetime import datetime, timedelta
import time
import hashlib import hashlib
from odoo import models from odoo import models
from odoo.http import request from odoo.http import request
@@ -10,8 +9,6 @@ __author__ = 'jinling.yang'
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
class AuthenticationError(Exception):
pass
class AuthenticationError(Exception): class AuthenticationError(Exception):
pass pass
@@ -29,16 +26,18 @@ class Http(models.AbstractModel):
# 查询密钥 # 查询密钥
factory_secret = request.env['res.partner'].sudo().search( factory_secret = request.env['res.partner'].sudo().search(
[('sf_token', '=', datas['HTTP_TOKEN'])], limit=1) [('sf_token', '=', datas['HTTP_TOKEN'])], limit=1)
logging.info('factory_secret:%s' % factory_secret)
if not factory_secret: if not factory_secret:
raise AuthenticationError('无效的token') raise AuthenticationError('无效的token')
timestamp_str = int(time.time())
# 设置API接口请求时间,不能超过5秒 # 设置API接口请求时间,不能超过5秒
deltime = datetime.timedelta(seconds=5) # deltime = datetime.timedelta(seconds=30)
# if abs(int(datas['HTTP_TIMESTAMP'])-timestamp_str) > deltime.seconds: # if abs(int(datas['HTTP_TIMESTAMP']) - timestamp_str) > deltime.seconds:
# raise AuthenticationError('请求已过期') # raise AuthenticationError('请求已过期')
# 获得sha1_str加密字符串
post_time = int(datas['HTTP_TIMESTAMP']) 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_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() check_sf_str = hashlib.sha1(check_str.encode('utf-8')).hexdigest()
if check_sf_str != datas['HTTP_CHECKSTR']: if check_sf_str != datas['HTTP_CHECKSTR']:

View File

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

View File

@@ -15,13 +15,31 @@ class SfEquipmentSaintenanceStandards(models.Model):
num = "%04d" % 1 num = "%04d" % 1
else: else:
m = int(partner.code) + 1 m = int(partner.code[-4:]) + 1
num = "%04d" % m num = "%04d" % m
return num return num
code = fields.Char(string='编码', default=get_no) code = fields.Char(string='编码')
remark = fields.Char('备注') remark = fields.Char('备注')
maintenance_type = fields.Selection([('保养', '保养'), ("检修", "检修")], string='类型', default='保养') maintenance_type = fields.Selection([('保养', '保养'), ("检修", "检修")], string='类型', default='保养')
name = fields.Char(string='名称') 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) 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_category_id = fields.Many2one('maintenance.equipment.category', string='设备类别')
maintenance_equipment_ids = fields.Many2many( maintenance_equipment_ids = fields.Many2many(

View File

@@ -14,7 +14,7 @@ class SfMaintenanceEquipmentCategory(models.Model):
_inherit = 'maintenance.equipment.category' _inherit = 'maintenance.equipment.category'
_description = '设备类别' _description = '设备类别'
equipment_type = fields.Selection([('机床', '机床'), ('械臂', '械臂'), ('AGV小车', 'AGV小车'), ('检测设备', '检测设备')], string='类型', default='机床') equipment_type = fields.Selection([('机床', '机床'), ('器人', '器人'), ('AGV小车', 'AGV小车'), ('检测设备', '检测设备')], string='类型', default='机床')
class SfMaintenanceEquipment(models.Model): class SfMaintenanceEquipment(models.Model):
@@ -36,6 +36,7 @@ class SfMaintenanceEquipment(models.Model):
num = "%04d" % m num = "%04d" % m
return num return num
equipment_maintenance_standards_ids = fields.Many2many('equipment.maintenance.standards', equipment_maintenance_standards_ids = fields.Many2many('equipment.maintenance.standards',
'sf_maintenance_equipment_ids', string='设备维保标准') 'sf_maintenance_equipment_ids', string='设备维保标准')
eq_maintenance_id = fields.Many2one('equipment.maintenance.standards', string='设备保养标准', eq_maintenance_id = fields.Many2one('equipment.maintenance.standards', string='设备保养标准',
@@ -65,7 +66,7 @@ class SfMaintenanceEquipment(models.Model):
MTcode = fields.Char("编码", default=get_no) MTcode = fields.Char("编码", default=get_no)
created_user = fields.Many2one('res.users', string='创建人', default=lambda self: self.env.user) 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') @api.depends('category_id')
def _compute_category_id(self): def _compute_category_id(self):
@@ -96,7 +97,7 @@ class SfMaintenanceEquipment(models.Model):
control_system_id = fields.Many2one('sf.machine.control_system', control_system_id = fields.Many2one('sf.machine.control_system',
string="控制系统") 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', '型号') type_id = fields.Many2one('sf.machine_tool.type', '型号')
state = fields.Selection( state = fields.Selection(
@@ -153,48 +154,48 @@ class SfMaintenanceEquipment(models.Model):
result.append((parameter.id, name)) result.append((parameter.id, name))
return result return result
@api.constrains('rotate_speed') # @api.constrains('rotate_speed')
def _check_rotate_speed(self): # def _check_rotate_speed(self):
if self.rotate_speed <= 0: # if self.rotate_speed <= 0:
raise UserError("转速不能为0") # raise UserError("转速不能为0")
#
@api.constrains('precision') # @api.constrains('precision')
def _check_precision(self): # def _check_precision(self):
if self.precision <= 0.00: # if self.equipment_type == '机床' and self.precision <= 0.00:
raise UserError("加工精度不能为0") # raise UserError("加工精度不能为0")
#
@api.constrains('number_of_knife_library') # @api.constrains('number_of_knife_library')
def _check_number_of_knife_library(self): # def _check_number_of_knife_library(self):
if self.number_of_knife_library <= 0: # if self.equipment_type == '机床' and self.number_of_knife_library <= 0:
raise UserError("刀库数量不能为0") # raise UserError("刀库数量不能为0")
#
@api.constrains('x_axis') # @api.constrains('x_axis')
def _check_x_axis(self): # def _check_x_axis(self):
if self.x_axis <= 0: # if self.equipment_type == '机床' and self.x_axis <= 0:
raise UserError("加工行程里x轴不能为0") # raise UserError("加工行程里x轴不能为0")
#
@api.constrains('y_axis') # @api.constrains('y_axis')
def _check_y_axis(self): # def _check_y_axis(self):
if self.y_axis <= 0: # if self.equipment_type == '机床' and self.y_axis <= 0:
raise UserError("加工行程里y轴不能为0") # raise UserError("加工行程里y轴不能为0")
#
@api.constrains('z_axis') # @api.constrains('z_axis')
def _check_z_axis(self): # def _check_z_axis(self):
if self.z_axis <= 0: # if self.equipment_type == '机床' and self.z_axis <= 0:
raise UserError("加工行程里z轴不能为0") # raise UserError("加工行程里z轴不能为0")
#
@api.constrains('b_axis') # @api.constrains('b_axis')
def _check_b_axis(self): # def _check_b_axis(self):
if self.number_of_axles == '四轴': # if self.equipment_type == '机床' and self.number_of_axles == '四轴':
print(self.number_of_axles) # print(self.number_of_axles)
if self.b_axis <= 0: # if self.b_axis <= 0:
raise UserError("加工行程里b轴不能为0") # raise UserError("加工行程里b轴不能为0")
#
@api.constrains('c_axis') # @api.constrains('c_axis')
def _check_c_axis(self): # def _check_c_axis(self):
if self.number_of_axles == '五轴': # if self.equipment_type == '机床' and self.number_of_axles == '五轴':
if self.c_axis <= 0: # if self.c_axis <= 0:
raise UserError("加工行程里c轴不能为0") # raise UserError("加工行程里c轴不能为0")
@api.onchange('type_id') @api.onchange('type_id')
def get_type_info(self): 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.machine_tool_category = item.type_id.machine_tool_category.id
item.brand_id = item.type_id.brand_id.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): def enroll_machine_tool(self):
sf_sync_config = self.env['res.config.settings'].get_values() sf_sync_config = self.env['res.config.settings'].get_values()
@@ -246,25 +346,28 @@ class SfMaintenanceEquipment(models.Model):
machine_tool_list = [] machine_tool_list = []
if objs_all: if objs_all:
for item in 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: if item.machine_tool_picture != False:
image = base64.b64encode(item.machine_tool_picture).decode('utf-8') image = base64.b64encode(item.machine_tool_picture).decode('utf-8')
else: else:
image = False image = False
control_system_id = self.env['sf.machine.control_system'].sudo().browse(item.control_system_id.id).code
val = { val = {
'MTcode': item.MTcode, 'MTcode': item.MTcode,
'factory_token': token, 'factory_token': token,
'id': item.id, 'id': item.id,
'name': item.name, 'name': item.name,
'code': item.code, 'code': item.code,
'precision': item.precision,
'knife_type': item.knife_type, 'knife_type': item.knife_type,
'number_of_knife_library': item.number_of_knife_library, 'number_of_knife_library': item.number_of_knife_library,
'rotate_speed': item.rotate_speed, 'rotate_speed': item.rotate_speed,
'number_of_axles': item.number_of_axles, 'number_of_axles': item.number_of_axles,
'control_system_id': self.env['sf.machine.control_system'].search( 'control_system_id': control_system_id,
[('id', '=', item.control_system_id.id)]).code, 'type_id': self.env['sf.machine_tool.type'].sudo().browse(item.type_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'].sudo().browse(item.brand_id.id).code,
'brand_id': self.env['sf.machine.brand'].search([('id', '=', item.brand_id.id)]).code,
'supplier_id': item.supplier_id.id, 'supplier_id': item.supplier_id.id,
'x_axis': item.x_axis, 'x_axis': item.x_axis,
'y_axis': item.y_axis, 'y_axis': item.y_axis,
@@ -285,15 +388,19 @@ class SfMaintenanceEquipment(models.Model):
'machine_tool_H': item.machine_tool_H, 'machine_tool_H': item.machine_tool_H,
'feed_speed': item.feed_speed, 'feed_speed': item.feed_speed,
'tool_speed': item.tool_speed, 'tool_speed': item.tool_speed,
'distance': item.distance,
'taper': item.taper, 'taper': item.taper,
'torque': item.torque, 'torque': item.torque,
'motor_power': item.motor_power, 'motor_power': item.motor_power,
'tool_quality_max': item.tool_quality_max, 'tool_quality_max': item.tool_quality_max,
'tool_long_max': item.tool_long_max, 'tool_long_max': item.tool_long_max,
'tool_diameter_max': item.tool_diameter_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, 'machine_tool_category': item.machine_tool_category.code,
'image_id': images_ids_names
} }
machine_tool_list.append(val) machine_tool_list.append(val)
# kw = machine_tool_list # kw = machine_tool_list
@@ -472,7 +579,7 @@ class SfMaintenanceEquipment(models.Model):
if not next_requests: if not next_requests:
equipment._create_new_request1(equipment.overhaul_date) 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): class MaintenanceStandardImage(models.Model):
@@ -483,7 +590,8 @@ class MaintenanceStandardImage(models.Model):
name = fields.Char('名称') name = fields.Char('名称')
image = fields.Binary(string='图文') image = fields.Binary(string='图文')
type = fields.Selection( type = fields.Selection(
[('加工能力', '加工能力'), ('刀尖特征', '刀尖特征'), ('柄部类型', '柄部类型'), ('走刀方向', '走刀方向'), ('冷却液', '冷却液')], [('加工能力', '加工能力'), ('刀尖特征', '刀尖特征'), ('柄部类型', '柄部类型'), ('走刀方向', '走刀方向'),
('冷却液', '冷却液'), ('压紧方式', '压紧方式'), ('刀片形状', '刀片形状')],
string='特征') string='特征')
equipment_id = fields.Many2many('maintenance.equipment', 'image_id', 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]) new_res.append([id, name, data_uri])
# 返回新的结果列表 # 返回新的结果列表
return new_res 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_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_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_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>
<group> <group>
<field name="code" readonly="1" force_save="1"/> <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="maintenance_equipment_category_id" required="1"/>
<field name="eq_maintenance_ids" invisible='1'/> <field name="eq_maintenance_ids" invisible='1'/>
<field name="overhaul_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_production_addional_change.xml',
# 'views/mrp_maintenance_views.xml', # 'views/mrp_maintenance_views.xml',
'views/mrp_routing_workcenter_view.xml', 'views/mrp_routing_workcenter_view.xml',
'views/production_line_view.xml',
'views/mrp_workcenter_views.xml', 'views/mrp_workcenter_views.xml',
'views/mrp_workorder_view.xml', 'views/mrp_workorder_view.xml',
'views/production_line_view.xml',
'views/tool_other_features_view.xml', 'views/tool_other_features_view.xml',
'views/model_type_view.xml', 'views/model_type_view.xml',
'views/sf_maintenance_equipment.xml',
# 'views/kanban_change.xml' # 'views/kanban_change.xml'
], ],

View File

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

View File

@@ -6,8 +6,8 @@ from dateutil.relativedelta import relativedelta
class MaintenanceEquipment(models.Model): class MaintenanceEquipment(models.Model):
_inherit = "maintenance.equipment" _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') expected_mtbf = fields.Integer(string='Expected MTBF', help='Expected Mean Time Between Failure')
mtbf = fields.Integer(compute='_compute_maintenance_request', string='MTBF', mtbf = fields.Integer(compute='_compute_maintenance_request', string='MTBF',
help='Mean Time Between Failure, computed based on done corrective maintenances.') 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)', string='Estimated time before next failure (in days)',
help='Computed as Latest Failure Date + MTBF') help='Computed as Latest Failure Date + MTBF')
latest_failure_date = fields.Date(compute='_compute_maintenance_request', string='Latest Failure Date') 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', @api.depends('effective_date', 'maintenance_ids.stage_id', 'maintenance_ids.close_date',
'maintenance_ids.request_date') 'maintenance_ids.request_date')
@@ -64,3 +62,8 @@ class MaintenanceRequest(models.Model):
'mrp.workorder', string='Work Order', check_company=True) 'mrp.workorder', string='Work Order', check_company=True)
production_company_id = fields.Many2one(string='Production Company', related='production_id.company_id') production_company_id = fields.Many2one(string='Production Company', related='production_id.company_id')
company_id = fields.Many2one(domain="[('id', '=?', production_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='生产线名称') 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( equipment_id = fields.Many2one(
'maintenance.equipment', string="设备", '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('工艺外协') is_process_outsourcing = fields.Boolean('工艺外协')
users_ids = fields.Many2many("res.users", 'users_workcenter') users_ids = fields.Many2many("res.users", 'users_workcenter')
@@ -25,13 +22,13 @@ class ResWorkcenter(models.Model):
equipment_status = fields.Selection( equipment_status = fields.Selection(
[("正常", "正常"), ("故障", "故障"), ("不可用", "不可用")], [("正常", "正常"), ("故障", "故障"), ("不可用", "不可用")],
string="设备状态", compute='_compute_equipment_id') string="设备状态", related='equipment_id.state')
@api.depends('equipment_id') # @api.depends('equipment_id')
def _compute_equipment_id(self): # def _compute_equipment_id(self):
for record in self: # for record in self:
if record: # if record:
record.equipment_status = record.equipment_id.state # record.equipment_status = record.equipment_id.state
equipment_image = fields.Binary('设备图片', related='equipment_id.machine_tool_picture') 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)]) outsourcing_workcenter = self.env['mrp.workcenter'].search([('is_process_outsourcing', '=', True)])
return outsourcing_workcenter.id return outsourcing_workcenter.id
@api.onchange('machine_tool_id') # @api.onchange('machine_tool_id')
def update_machine_tool_is_binding(self): # def update_machine_tool_is_binding(self):
machine_tool = self.env["sf.machine_tool"].search([('is_binding', '=', True)]) # machine_tool = self.env["sf.machine_tool"].search([('is_binding', '=', True)])
if machine_tool: # if machine_tool:
for item in machine_tool: # for item in machine_tool:
workcenter_machine_tool = self.env["mrp.workcenter"].search([('machine_tool_id', '=', item.id)]) # workcenter_machine_tool = self.env["mrp.workcenter"].search([('machine_tool_id', '=', item.id)])
if workcenter_machine_tool: # if workcenter_machine_tool:
if self.machine_tool_id.id: # if self.machine_tool_id.id:
if workcenter_machine_tool.id != self.machine_tool_id.id: # if workcenter_machine_tool.id != self.machine_tool_id.id:
self.machine_tool_id.is_binding = True # self.machine_tool_id.is_binding = True
else: # else:
self.machine_tool_id.is_binding = True # self.machine_tool_id.is_binding = True
else: # else:
self.machine_tool_id.is_binding = True # self.machine_tool_id.is_binding = True
item.is_binding = False # item.is_binding = False
else: # else:
self.machine_tool_id.is_binding = True # self.machine_tool_id.is_binding = True
def action_work_order(self): def action_work_order(self):
if not self.env.context.get('desktop_list_view', False): 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( raw_bom = self.env['product.product'].search(
[('categ_id.type', '=', '原材料'), ('materials_type_id', '=', product.materials_type_id.id)]) [('categ_id.type', '=', '原材料'), ('materials_type_id', '=', product.materials_type_id.id)])
return raw_bom 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 return num
mrp_workcenter_ids = fields.One2many('mrp.workcenter', 'production_line_id', '工作中心') 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) name = fields.Char('生产线', size=20, required=True)
code = fields.Char('编码', default=_get_code, readonly=True) code = fields.Char('编码', default=_get_code, readonly=True)
remark = fields.Char('备注') 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_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_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_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="生产线" name="生产线"
sequence="20" sequence="20"
action="sf_production_line_act"/> 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> </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'?> <?xml version="1.0" encoding='UTF-8'?>
<odoo> <odoo>
<record model="ir.cron" id="sf_cron1">
<field name="name">同步资源库材料</field> <record model="ir.cron" id="ir_cron_sf_static_resource_datasync">
<field name="model_id" ref="model_sf_production_materials"/> <field name="name">制造-配置每日定时同步cloud的静态资源库</field>
<field name="model_id" ref="model_sf_static_resource_datasync"/>
<field name="state">code</field> <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_number">1</field>
<field name="interval_type">days</field> <field name="interval_type">days</field>
<field name="numbercall">-1</field> <field name="numbercall">-1</field>
<field name="doall" eval="False"/> <field name="doall" eval="False"/>
</record> </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"> <!-- <record model="ir.cron" id="sf_cron2">-->
<field name="name">同步资源库材料型号</field> <!-- <field name="name">同步静态资源库材料型号</field>-->
<field name="model_id" ref="model_sf_materials_model"/> <!-- <field name="model_id" ref="model_sf_materials_model"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_materials_model()</field> <!-- <field name="code">model.sync_materials_model()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cron3"> <!-- <record model="ir.cron" id="sf_cron8">-->
<field name="name">同步资源库表面工艺</field> <!-- <field name="name">同步静态表面工艺类别</field>-->
<field name="model_id" ref="model_sf_production_process"/> <!-- <field name="model_id" ref="model_sf_production_process_category"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_production_process()</field> <!-- <field name="code">model.sync_production_process_category()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cron4"> <!-- <record model="ir.cron" id="sf_cron3">-->
<field name="name">同步资源库加工工艺</field> <!-- <field name="name">同步静态资源库表面工艺</field>-->
<field name="model_id" ref="model_sf_processing_technology"/> <!-- <field name="model_id" ref="model_sf_production_process"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_processing_technology()</field> <!-- <field name="code">model.sync_production_process()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cron5"> <!-- <record model="ir.cron" id="sf_cron4">-->
<field name="name">同步资源库标签</field> <!-- <field name="name">同步静态资源库加工工艺</field>-->
<field name="model_id" ref="model_sf_machine_brand_tags"/> <!-- <field name="model_id" ref="model_sf_processing_technology"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_machine_brand_tags()</field> <!-- <field name="code">model.sync_processing_technology()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cron6"> <!-- <record model="ir.cron" id="sf_cron5">-->
<field name="name">同步资源库控制系统</field> <!-- <field name="name">同步静态资源库标签</field>-->
<field name="model_id" ref="model_sf_machine_control_system"/> <!-- <field name="model_id" ref="model_sf_machine_brand_tags"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_machine_tool_type_control_system()</field> <!-- <field name="code">model.sync_machine_brand_tags()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cron7"> <!-- <record model="ir.cron" id="sf_cron6">-->
<field name="name">同步资源库品牌</field> <!-- <field name="name">同步静态资源库数控系统</field>-->
<field name="model_id" ref="model_sf_machine_brand"/> <!-- <field name="model_id" ref="model_sf_machine_control_system"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_machine_brand()</field> <!-- <field name="code">model.sync_machine_tool_type_control_system()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cron8"> <!-- <record model="ir.cron" id="sf_cron7">-->
<field name="name">同步表面工艺类别</field> <!-- <field name="name">同步静态资源库品牌</field>-->
<field name="model_id" ref="model_sf_production_process_category"/> <!-- <field name="model_id" ref="model_sf_machine_brand"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_production_process_category()</field> <!-- <field name="code">model.sync_machine_brand()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cron9"> <!-- <record model="ir.cron" id="sf_cron9">-->
<field name="name">同步资源库机床型号</field> <!-- <field name="name">同步静态资源库机床型号</field>-->
<field name="model_id" ref="model_sf_machine_tool_type"/> <!-- <field name="model_id" ref="model_sf_machine_tool_type"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_machine_tool_type()</field> <!-- <field name="code">model.sync_machine_tool_type()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cron12"> <!-- <record model="ir.cron" id="sf_cron12">-->
<field name="name">同步资源库工序</field> <!-- <field name="name">同步静态资源库工序</field>-->
<field name="model_id" ref="model_sf_processing_order"/> <!-- <field name="model_id" ref="model_sf_processing_order"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_processing_order()</field> <!-- <field name="code">model.sync_processing_order()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cron13"> <!-- <record model="ir.cron" id="sf_cron13">-->
<field name="name">同步表面工艺可选参数</field> <!-- <field name="name">同步静态表面工艺可选参数</field>-->
<field name="model_id" ref="model_sf_production_process_parameter"/> <!-- <field name="model_id" ref="model_sf_production_process_parameter"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_production_process_parameter()</field> <!-- <field name="code">model.sync_production_process_parameter()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cron14"> <!-- <record model="ir.cron" id="sf_cron14">-->
<field name="name">同步资源库机床类型</field> <!-- <field name="name">同步静态资源库机床类型</field>-->
<field name="model_id" ref="model_sf_machine_tool_category"/> <!-- <field name="model_id" ref="model_sf_machine_tool_category"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_machine_tool_category()</field> <!-- <field name="code">model.sync_machine_tool_category()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cutting_tool_material"> <!-- <record model="ir.cron" id="sf_cutting_tool_material">-->
<field name="name">同步刀具物料</field> <!-- <field name="name">同步静态资源库刀具物料</field>-->
<field name="model_id" ref="model_sf_cutting_tool_material"/> <!-- <field name="model_id" ref="model_sf_cutting_tool_material"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_cutting_tool_material()</field> <!-- <field name="code">model.sync_cutting_tool_material()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cutting_tool_type"> <!-- <record model="ir.cron" id="sf_cutting_tool_type">-->
<field name="name">同步刀具类型</field> <!-- <field name="name">同步静态资源库刀具类型</field>-->
<field name="model_id" ref="model_sf_cutting_tool_type"/> <!-- <field name="model_id" ref="model_sf_cutting_tool_type"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_tool_type()</field> <!-- <field name="code">model.sync_tool_type()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cutting_tool_model"> <!-- <record model="ir.cron" id="sf_cron16">-->
<field name="name">同步刀具型号</field> <!-- <field name="name">同步静态资源库功能刀具类型</field>-->
<field name="model_id" ref="model_sf_cutting_tool_model"/> <!-- <field name="model_id" ref="model_sf_functional_cutting_tool_model"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_tool_model()</field> <!-- <field name="code">model.sync_functional_cutting_tool_model()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cron15"> <!-- <record model="ir.cron" id="sf_fixture_material">-->
<field name="name">同步功能刀具型号</field> <!-- <field name="name">同步静态资源库夹具物料</field>-->
<field name="model_id" ref="model_sf_functional_cutting_tool"/> <!-- <field name="model_id" ref="model_sf_fixture_material"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_functional_cutting_tool()</field> <!-- <field name="code">model.sync_fixture_material()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_cron16"> <!-- <record model="ir.cron" id="sf_multi_mounting_type">-->
<field name="name">同步功能刀具类型</field> <!-- <field name="name">同步静态资源库联装类型</field>-->
<field name="model_id" ref="model_sf_functional_cutting_tool_model"/> <!-- <field name="model_id" ref="model_sf_multi_mounting_type"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_functional_cutting_tool_model()</field> <!-- <field name="code">model.sync_multi_mounting_type()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_fixture_material"> <!-- <record model="ir.cron" id="sf_fixture_model">-->
<field name="name">同步夹具物料</field> <!-- <field name="name">同步静态资源库夹具型号</field>-->
<field name="model_id" ref="model_sf_fixture_material"/> <!-- <field name="model_id" ref="model_sf_fixture_model"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_fixture_material()</field> <!-- <field name="code">model.sync_fixture_model()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </record>-->
<record model="ir.cron" id="sf_multi_mounting_type"> <!-- <record model="ir.cron" id="sf_functional_fixture_type">-->
<field name="name">同步联装类型</field> <!-- <field name="name">同步静态资源库功能夹具类型</field>-->
<field name="model_id" ref="model_sf_multi_mounting_type"/> <!-- <field name="model_id" ref="model_sf_functional_fixture_type"/>-->
<field name="state">code</field> <!-- <field name="state">code</field>-->
<field name="code">model.sync_multi_mounting_type()</field> <!-- <field name="code">model.sync_functional_fixture_type()</field>-->
<field name="interval_number">1</field> <!-- <field name="interval_number">1</field>-->
<field name="interval_type">days</field> <!-- <field name="interval_type">days</field>-->
<field name="numbercall">-1</field> <!-- <field name="numbercall">-1</field>-->
<field name="doall" eval="False"/> <!-- <field name="doall" eval="False"/>-->
</record> <!-- </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>
</odoo> </odoo>

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -756,7 +756,7 @@ class FunctionalToolAssembly(models.Model):
domain=[('cutting_tool_material_id', '=', '整体式刀具')]) domain=[('cutting_tool_material_id', '=', '整体式刀具')])
integral_code = fields.Char('整体式刀具序列号', readonly=True) integral_code = fields.Char('整体式刀具序列号', readonly=True)
integral_name = 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, cutting_tool_blade_model_id = fields.Many2one('product.product', string='刀片型号', readonly=True,
domain=[('cutting_tool_material_id', '=', '刀片')]) 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='刀具物料名称', mrs_cutting_tool_material_name = fields.Char(related='mrs_cutting_tool_material_id.name', string='刀具物料名称',
store=True) store=True)
cutting_tool_type = 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', '刀具型号') # mrs_cutting_tool_model_id = fields.Many2one('sf.cutting.tool.model', '刀具型号')