Compare commits

..

56 Commits

Author SHA1 Message Date
WEB许何哲\xuhez
2b7f4c3f06 看板样式修改 2023-10-20 17:18:46 +08:00
WEB许何哲\xuhez
26de811174 看板样式修改 2023-10-20 16:33:00 +08:00
WEB许何哲\xuhez
d023848c70 Merge branch 'develop' into feature/sf看板样式统一
# Conflicts:
#	jikimo_frontend/static/src/scss/custom_style.scss
2023-10-20 16:31:40 +08:00
WEB许何哲\xuhez
a109c0fb39 看板样式修改 2023-10-20 16:29:57 +08:00
龚启豪
9b5a0162ff Accept Merge Request #483: (feature/修改机床参数bug -> develop)
Merge Request: 设备其他table增加参数

Created By: @龚启豪
Accepted By: @龚启豪
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/483?initial=true
2023-10-17 15:11:40 +08:00
qihao.gong@jikimo.com
a57cdbe2f3 设备其他table增加参数 2023-10-17 15:10:25 +08:00
龚启豪
d02e0cf455 Accept Merge Request #482: (feature/修改机床参数bug -> develop)
Merge Request: 修改设备table布局

Created By: @龚启豪
Accepted By: @龚启豪
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/482?initial=true
2023-10-16 17:24:17 +08:00
qihao.gong@jikimo.com
e3bdf9409f Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改机床参数bug 2023-10-16 17:23:21 +08:00
qihao.gong@jikimo.com
93a6b4ccb4 修改设备table布局 2023-10-16 17:23:04 +08:00
龚启豪
d532ff8c05 Accept Merge Request #481: (feature/修改机床参数bug -> develop)
Merge Request: 修改设备table布局

Created By: @龚启豪
Accepted By: @龚启豪
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/481?initial=true
2023-10-16 17:12:28 +08:00
qihao.gong@jikimo.com
0f15814916 Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改机床参数bug 2023-10-16 17:11:37 +08:00
qihao.gong@jikimo.com
f02d1a0ace 修改设备table布局 2023-10-16 17:11:24 +08:00
马广威
cbc298f6ad Accept Merge Request #480: (feature/制造-计划优化 -> develop)
Merge Request: tree视图记录左侧增加序号展示记录数

Created By: @马广威
Accepted By: @马广威
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/480?initial=true
2023-10-16 15:19:08 +08:00
mgw
e02ab7fd95 tree视图记录左侧增加序号展示记录数 2023-10-16 15:18:18 +08:00
龚启豪
dbbddfadab Accept Merge Request #479: (feature/修改机床参数bug -> develop)
Merge Request: 修改设备table格式布局

Created By: @龚启豪
Accepted By: @龚启豪
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/479?initial=true
2023-10-13 16:43:45 +08:00
qihao.gong@jikimo.com
1f090fdd20 修改设备table格式布局 2023-10-13 16:42:16 +08:00
龚启豪
0b72c59335 Accept Merge Request #415: (feature/修改机床参数bug -> develop)
Merge Request: 修改机床注册接口

Created By: @龚启豪
Accepted By: @龚启豪
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/415?initial=true
2023-10-13 14:28:06 +08:00
qihao.gong@jikimo.com
7c6dd76464 Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改机床参数bug 2023-10-13 14:26:49 +08:00
qihao.gong@jikimo.com
01ad3e7d8c 修改机床注册接口 2023-10-13 14:26:38 +08:00
龚启豪
53f7f75795 Accept Merge Request #414: (feature/修改机床参数bug -> develop)
Merge Request: 设备过滤能力特征库只关联加工能力

Created By: @龚启豪
Accepted By: @龚启豪
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/414?initial=true
2023-10-12 14:50:13 +08:00
qihao.gong@jikimo.com
a80ab33c50 Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改机床参数bug 2023-10-12 14:49:41 +08:00
qihao.gong@jikimo.com
3bd5c7efb3 设备过滤能力特征库只关联加工能力 2023-10-12 14:49:25 +08:00
龚启豪
aa2e9e8c1f Accept Merge Request #413: (feature/修改机床参数bug -> develop)
Merge Request: 修改设备table的样式  修改关联品牌根据各不同类别展示

Created By: @龚启豪
Accepted By: @龚启豪
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/413?initial=true
2023-10-12 14:11:26 +08:00
qihao.gong@jikimo.com
8db9ed68c1 Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改机床参数bug 2023-10-12 14:10:47 +08:00
qihao.gong@jikimo.com
53e307cd55 修改设备table的样式 修改关联品牌根据各不同类别展示 2023-10-12 14:10:29 +08:00
龚启豪
e4fb6edb05 Accept Merge Request #412: (feature/修改机床参数bug -> develop)
Merge Request: 处理同步报错bug

Created By: @龚启豪
Accepted By: @龚启豪
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/412?initial=true
2023-10-11 15:42:52 +08:00
qihao.gong@jikimo.com
6724d0e0c1 Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改机床参数bug 2023-10-11 15:42:06 +08:00
qihao.gong@jikimo.com
e505285a91 处理同步报错bug 2023-10-11 15:41:55 +08:00
龚启豪
2ecc130fd1 Accept Merge Request #411: (feature/修改机床参数bug -> develop)
Merge Request: 设备参数根据不同类别修改必填项, 新增刀具库位table

Created By: @龚启豪
Accepted By: @龚启豪
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/411?initial=true
2023-10-11 14:57:29 +08:00
qihao.gong@jikimo.com
ecb1f4140e Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改机床参数bug
# Conflicts:
#	sf_mrs_connect/models/res_config_setting.py
#	sf_mrs_connect/models/sync_common.py
2023-10-11 14:56:18 +08:00
qihao.gong@jikimo.com
b1d2cd1ceb 设备类别参数根据不同类别必填 设备增加刀具库位table 并自动生成 2023-10-11 14:45:35 +08:00
杨金灵
0752ba9d2d Accept Merge Request #410: (feature/刀具产品调取Cloud刀具标准库 -> develop)
Merge Request: 优化能力特征库

Created By: @杨金灵
Accepted By: @杨金灵
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/410?initial=true
2023-10-10 17:27:39 +08:00
jinling.yang
6b7b536236 1.优化同步cloud的静态资源库的定时器的代码
2.新增能力特征库的接口
2023-10-10 17:19:11 +08:00
qihao.gong@jikimo.com
b9d6e0ea35 材料型号同步接口修改 新增国际标准和材料应用 2023-10-09 17:35:39 +08:00
杨金灵
8f4eff6d1c Accept Merge Request #409: (feature/bug修复 -> develop)
Merge Request: 同步cloud资源库静态资源Bug修复及代码优化

Created By: @杨金灵
Accepted By: @杨金灵
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/409?initial=true
2023-10-09 15:23:57 +08:00
jinling.yang
708889b1ed 去掉不要的代码及刀具型号的定时器 2023-10-09 15:21:41 +08:00
jinling.yang
59514cc433 去掉刀具型号的同步方法 2023-10-09 15:15:52 +08:00
qihao.gong@jikimo.com
ea3dbb290f Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改机床参数bug 2023-10-08 17:28:09 +08:00
qihao.gong@jikimo.com
30cebea5a1 修改材料型号参数类型 2023-10-08 17:27:51 +08:00
jinling.yang
e586ed8e3b Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/bug修复 2023-10-08 17:19:22 +08:00
jinling.yang
7551bf38ef 销售模块新增依赖引用 2023-10-08 17:19:02 +08:00
龚启豪
34beb03a6a Accept Merge Request #408: (feature/修改机床参数bug -> develop)
Merge Request: 新增设备AGV小车,机器人,检测设备参数

Created By: @龚启豪
Accepted By: @龚启豪
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/408?initial=true
2023-10-08 09:11:39 +08:00
qihao.gong@jikimo.com
af05d3ec30 设备增加AGV小车,机械臂,检测设备参数 2023-10-07 17:26:09 +08:00
qihao.gong@jikimo.com
ac6315c76a Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改机床参数bug 2023-09-28 16:20:24 +08:00
qihao.gong@jikimo.com
960bea5bb0 设备新增参数 AGV小车table页 2023-09-28 16:20:03 +08:00
龚启豪
69bae5b853 Accept Merge Request #407: (feature/修改机床参数bug -> develop)
Merge Request: 故障日志bug

Created By: @龚启豪
Accepted By: @龚启豪
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/407?initial=true
2023-09-27 14:33:03 +08:00
qihao.gong@jikimo.com
6b375ee64d 修改故障日志bug 2023-09-27 14:30:38 +08:00
qihao.gong@jikimo.com
84b211911f Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改机床参数bug 2023-09-26 17:29:37 +08:00
qihao.gong@jikimo.com
22a4ccad6b 修改维保生成编码和名称的规则 2023-09-26 17:29:14 +08:00
jinling.yang
a9f51df151 Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/bug修复 2023-09-21 16:11:04 +08:00
jinling.yang
3aa34ee0cf http权限代码优化 2023-09-21 16:10:18 +08:00
jinling.yang
ab42bde8f2 Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/bug修复 2023-09-18 17:42:13 +08:00
jinling.yang
a96c7a34c1 Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/bug修复 2023-09-18 17:40:30 +08:00
jinling.yang
a7da1dbadd Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/bug修复 2023-09-14 18:08:05 +08:00
jinling.yang
650bf2cf86 Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/bug修复 2023-09-14 09:30:48 +08:00
jinling.yang
ecc9bd446f 材料等同步Bug修复 2023-09-06 16:32:25 +08:00
39 changed files with 2479 additions and 1771 deletions

View File

@@ -10,7 +10,7 @@
""", """,
'category': 'sf', 'category': 'sf',
'website': 'https://www.sf.jikimo.com', 'website': 'https://www.sf.jikimo.com',
'depends': [], 'depends': ['web'],
'data': [ 'data': [
], ],
@@ -23,6 +23,10 @@
'web.assets_backend': [ 'web.assets_backend': [
'jikimo_frontend/static/src/fields/custom_many2many_checkboxes/*', 'jikimo_frontend/static/src/fields/custom_many2many_checkboxes/*',
'jikimo_frontend/static/src/scss/custom_style.scss', 'jikimo_frontend/static/src/scss/custom_style.scss',
# 'jikimo_frontend/static/src/views/list_nums/list_nbCols.js',
'jikimo_frontend/static/src/views/list_nums/list_nums.xml',
'jikimo_frontend/static/src/views/list_nums/list_nums2.xml',
'jikimo_frontend/static/src/views/list_nums/list_nums3.xml',
], ],
}, },

View File

@@ -3,18 +3,12 @@
} }
.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;
} }
div:has(.o_required_modifier) > label::before {
content: '*' !important;
color: red !important;
padding: 0 4px !important;
vertical-align: top !important;
font-size: 1.5rem !important;
}
.my-image div { .my-image div {
width: 110px !important; width: 110px !important;
@@ -205,7 +199,7 @@ div[class="o_content o_component_with_search_panel"] img[name="equipment_image"]
div[class="o_content o_component_with_search_panel"] .o_kanban_card_content button { div[class="o_content o_component_with_search_panel"] .o_kanban_card_content button {
position: absolute; position: absolute;
top: -52px; top: -52px;
left: -55px; left: 3rem;
width: 80px; width: 80px;
} }
@@ -257,6 +251,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 {
@@ -265,7 +265,7 @@ div[class="o_content o_component_with_search_panel"] .o_kanban_primary_right > .
div[class="o_content o_component_with_search_panel"] .o_kanban_card_content button { div[class="o_content o_component_with_search_panel"] .o_kanban_card_content button {
left: -95px; left: -4.4rem;
} }
} }
@@ -290,3 +290,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

@@ -0,0 +1,11 @@
/** @odoo-module **/
import { patch } from "@web/core/utils/patch";
import { ListRenderer } from "@web/views/list/list_renderer";
patch(ListRenderer.prototype, '/jikimo_frontend/static/src/views/list_nums/list_nbCols.js', {
get nbCols() {
const nbCols = this._super(...arguments);
return nbCols + 1;
}
});

View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- <odoo> -->
<!-- <data> -->
<!-- <templates xml:space="preserve"> -->
<t t-name="og.web.ListRenderer" t-inherit="web.ListRenderer" t-inherit-mode="extension">
<xpath expr="//table/thead/tr/th[@t-if='hasSelectors']" position="before">
<th><i class="fa fa-list-ol"/></th>
</xpath>
</t>
<!-- 暂存,同一份文件中有问题,拆分后正常工作 -->
<!-- <t t-name="og.web.ListRenderer.Rows" t-inherit="web.ListRenderer.Rows" t-inherit-mode="extension"> -->
<!-- <xpath expr="//t[@t-key='record.id']/t[last()]" position="inside"> -->
<!-- <t t-set="recordSeq" t-value="record_index + 1"/> -->
<!-- <t t-set="recordOffset" t-value="list.offset"/> -->
<!-- </xpath> -->
<!-- </t> -->
<!-- <t t-name="og.web.ListRenderer.RecordRow" t-inherit="web.ListRenderer.RecordRow" t-inherit-mode="extension"> -->
<!-- <xpath expr="//tr/td[1]" position="before"> -->
<!-- <td> -->
<!-- <t t-esc="222"/> -->
<!-- </td> -->
<!-- </xpath> -->
<!-- </t> -->
<!-- <t t-set="recordlimit" t-value="list.limit"/> -->
<!-- <t t-set="recordpage" t-value="list.page"/> -->
<!-- <t t-set="recordpages" t-value="list.pages"/> -->
<!-- <t t-set="recordcount" t-value="list.count"/> -->
<!-- <t t-set="recordids" t-value="list.ids"/> -->
<!-- <t t-set="recordid" t-value="record.id"/> -->
<!-- <t t-set="recordindex" t-value="record.index"/> -->
<!-- <t t-set="recorddata" t-value="record.data"/> -->
<!-- <t t-set="recordstate" t-value="record.state"/> -->
<!-- <t t-set="recordres_id" t-value="record.res_id"/> -->
<!-- <t t-set="recordcontext" t-value="record.context"/> -->
<!-- <t t-set="recordmodel" t-value="record.model"/> -->
<!-- <t t-set="recordfields" t-value="record.fields"/> -->
<!-- <t t-set="recordfields_view" t-value="record.fields_view"/> -->
<!-- <t t-set="recordfields_keys" t-value="record.fields_keys"/> -->
<!-- <t t-set="recordfields_get" t-value="record.fields_get"/> -->
<!-- <t t-set="recordfields_raw" t-value="record.fields_raw"/> -->
<!-- <t t-set="recordfields_view_get" t-value="record.fields_view_get"/> -->
<!-- <t t-set="recordfields_view_raw" t-value="record.fields_view_raw"/> -->
<!-- <t t-set="recordfields_view_fields" t-value="record.fields_view_fields"/> -->
<!-- <t t-set="recordfields_view_arch" t-value="record.fields_view_arch"/> -->
<!-- <t t-set="recordfields_view_type" t-value="record.fields_view_type"/> -->
<!-- <t t-set="recordfields_view_inherit" t-value="record.fields_view_inherit"/> -->
<!-- <t t-set="recordfields_view_parent" t-value="record.fields_view_parent"/> -->
<!-- <t t-set="recordfields_view_id" t-value="record.fields_view_id"/> -->
<!-- <t t-set="recordfields_view_name" t-value="record.fields_view_name"/> -->
<!-- <t t-set="recordfields_view_mode" t-value="record.fields_view_mode"/> -->
<!-- <t t-set="recordfields_view_type" t-value="record.fields_view_type"/> -->
<!-- <t t-set="recordfields_view_arch" t-value="record.fields_view_arch"/> -->
<!-- <t t-set="recordfields_view_inherit" t-value="record.fields_view_inherit"/> -->
<!-- <t t-set="recordfields_view_parent" t-value="record.fields_view_parent"/> -->
<!-- <t t-set="recordfields_view_id" t-value="record.fields_view_id"/> -->
<!-- </templates> -->
<!-- <templates xml:space="preserve"> -->
<!-- </templates> -->
<!-- </data> -->
<!-- </odoo> -->

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<t t-name="og.web.ListRenderer.Rows" t-inherit="web.ListRenderer.Rows" t-inherit-mode="extension">
<xpath expr="//t[@t-key='record.id']/t[last()]" position="inside">
<t t-set="recordSeq" t-value="record_index + 1"/>
<t t-set="recordOffset" t-value="list.offset"/>
</xpath>
</t>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<t t-name="og.web.ListRenderer.RecordRow" t-inherit="web.ListRenderer.RecordRow" t-inherit-mode="extension">
<xpath expr="//tr/td[1]" position="before">
<td>
<t t-esc="recordOffset + recordSeq"/>
</td>
</xpath>
</t>

View File

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

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

@@ -1,8 +1,8 @@
from odoo import models, fields, api from odoo import models, fields, api
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
from odoo.modules import get_resource_path from odoo.modules import get_resource_path
from OCC.Extend.DataExchange import read_step_file # from OCC.Extend.DataExchange import read_step_file
from OCC.Extend.DataExchange import write_stl_file # from OCC.Extend.DataExchange import write_stl_file
import logging import logging
import base64 import base64
import hashlib import hashlib
@@ -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', '刀具型号')