Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/优化客户
This commit is contained in:
@@ -47,4 +47,16 @@ patch(FormStatusIndicator.prototype, 'jikimo_frontend.FormStatusIndicator', {
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
$(function (){
|
||||
document.addEventListener('click', function () {
|
||||
const dom = $('.o_form_status_indicator_buttons ')
|
||||
if(dom) {
|
||||
const dom1 = dom.children().eq(0)
|
||||
const dom2 = dom.children().eq(1)
|
||||
if(!dom1.text()) {
|
||||
dom1.append('保存')
|
||||
dom2.append('取消')
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@@ -328,19 +328,19 @@ div:has(.o_required_modifier) > label::before {
|
||||
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;
|
||||
}
|
||||
//.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;
|
||||
//}
|
||||
|
||||
.o_form_view {
|
||||
.o_form_sheet_bg .o_form_sheet {
|
||||
@@ -383,3 +383,21 @@ div:has(.o_required_modifier) > label::before {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.o_stock_kanban .o_kanban_card_content {
|
||||
.row {
|
||||
align-items: center;
|
||||
|
||||
.o_kanban_primary_left, .o_kanban_primary_right {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.o_kanban_primary_right {
|
||||
position: unset;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 机床换刀申请表格宽度设置
|
||||
.o_list_table_ungrouped {
|
||||
min-width: 1089px;
|
||||
}
|
||||
@@ -9,6 +9,14 @@ from odoo.addons.sf_base.commons.common import Common
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class SpindleTaperType(models.Model):
|
||||
_name = 'spindle.taper.type'
|
||||
_description = '主轴锥孔型号'
|
||||
|
||||
name = fields.Char('名称')
|
||||
active = fields.Boolean('有效', default=True)
|
||||
|
||||
|
||||
class MachineBrandTags(models.Model):
|
||||
_name = 'sf.machine.brand.tags'
|
||||
_description = '标签'
|
||||
@@ -269,31 +277,19 @@ class MachineToolType(models.Model):
|
||||
('chilunjia', '齿轮架驱动')
|
||||
], string="主轴加高方式", default='sifudianji')
|
||||
workpiece_load = fields.Char('工件最大负载(kg)')
|
||||
lead_screw = fields.Char('丝杆')
|
||||
workbench_L = fields.Char('工作台长度(mm)')
|
||||
workbench_W = fields.Char('工作台宽度(mm)')
|
||||
guide_rail = fields.Char('导轨')
|
||||
machine_tool_L = fields.Char('机床长度(mm)')
|
||||
machine_tool_W = fields.Char('机床宽度(mm)')
|
||||
machine_tool_H = fields.Char('机床高度(mm)')
|
||||
feed_speed = fields.Char('进给速度(mm/min)')
|
||||
tool_speed = fields.Char('刀具速度(m/min)')
|
||||
distance_min = fields.Char('主轴端面至工作台面距离MIN(mm)')
|
||||
distance_max = fields.Char('主轴端面至工作台面距离MAX(mm)')
|
||||
taper = fields.Char('主轴锥度(°)')
|
||||
torque = fields.Char('主轴电机扭矩(n/m)')
|
||||
motor_power = fields.Char('主轴电机功率(kw)')
|
||||
tool_quality_max = fields.Char('刀具最大质量(kg)')
|
||||
tool_long_max = fields.Char('刀具最大长度(mm)')
|
||||
tool_diameter_max = fields.Char('刀具刀径max(mm)')
|
||||
tool_diameter_min = fields.Char('刀具刀径min(mm)')
|
||||
machine_tool_category = fields.Many2one('sf.machine_tool.category', string='机床类型')
|
||||
|
||||
# 多个型号对应一个机床
|
||||
machine_tool_id = fields.Many2one('sf.machine_tool', '机床')
|
||||
number_of_axles = fields.Selection(
|
||||
[("三轴", "三轴"), ("四轴", "四轴"), ("五轴", "五轴")],
|
||||
default="", string="轴数")
|
||||
# 加工进程
|
||||
x_axis = fields.Integer('X轴')
|
||||
y_axis = fields.Integer('Y轴')
|
||||
@@ -301,13 +297,80 @@ class MachineToolType(models.Model):
|
||||
b_axis = fields.Integer('B轴')
|
||||
c_axis = fields.Integer('C轴')
|
||||
remark = fields.Char('备注')
|
||||
precision_min = fields.Float('X轴定位精度min(mm)', digits=(12, 3))
|
||||
precision_max = fields.Float('X轴定位精度max(mm)', digits=(12, 3))
|
||||
control_system_id = fields.Many2one('sf.machine.control_system',
|
||||
string="控制系统")
|
||||
active = fields.Boolean('有效', default=True)
|
||||
code = fields.Char('编码')
|
||||
|
||||
# 1212修改后的字段
|
||||
number_of_axles = fields.Selection(
|
||||
[("三轴", "三轴"), ("四轴", "四轴"), ("五轴", "五轴"), ("六轴", "六轴")],
|
||||
default="", string="轴数")
|
||||
|
||||
# 1212新增字段
|
||||
a_axis = fields.Integer('a轴')
|
||||
function_type = fields.Selection(
|
||||
[("ZXJGZX", "钻铣加工中心"), ("CXJGZX", "车削加工中心"), ("FHJGZX", "复合加工中心")],
|
||||
default="", string="功能类型")
|
||||
T_trough_num = fields.Integer('槽数')
|
||||
T_trough_wide = fields.Float('槽宽(mm)')
|
||||
T_trough_distance = fields.Float('槽距(mm)')
|
||||
|
||||
taper_type_id = fields.Many2one('spindle.taper.type', string='主轴锥孔型号')
|
||||
spindle_center_distance = fields.Float('主轴中心至立柱滑轨面距离(mm)')
|
||||
spindle_continuous_power = fields.Float('主轴持续功率(kw)')
|
||||
spindle_peak_power = fields.Float('主轴峰值功率(kw)')
|
||||
spindle_sustained_torque = fields.Float('主轴持续扭矩(n/m)')
|
||||
spindle_peak_torque = fields.Float('主轴峰值扭矩(n/m)')
|
||||
linear_axis_guides_type = fields.Char('直线轴导轨类型')
|
||||
axis_driven_type = fields.Char('坐标轴驱动类型')
|
||||
|
||||
X_axis_rapid_traverse_speed = fields.Char('X轴快速进给速度(mm/min)')
|
||||
Y_axis_rapid_traverse_speed = fields.Char('Y轴快速进给速度(mm/min)')
|
||||
Z_axis_rapid_traverse_speed = fields.Char('Z轴快速进给速度(mm/min)')
|
||||
a_axis_rapid_traverse_speed = fields.Char('a轴快速进给速度(mm/min)')
|
||||
b_axis_rapid_traverse_speed = fields.Char('b轴快速进给速度(mm/min)')
|
||||
c_axis_rapid_traverse_speed = fields.Char('c轴快速进给速度(mm/min)')
|
||||
straight_cutting_feed_rate = fields.Char('直线切削进给速度(mm/min)')
|
||||
rotary_cutting_feed_rate = fields.Char('回转切削进给速度(mm/min)')
|
||||
|
||||
X_precision = fields.Float('X轴定位精度(mm)', digits=(12, 3))
|
||||
X_precision_repeat = fields.Float('X轴重复定位精度(mm)', digits=(12, 3))
|
||||
Y_precision = fields.Float('Y轴定位精度(mm)', digits=(12, 3))
|
||||
Y_precision_repeat = fields.Float('Y轴重复定位精度(mm)', digits=(12, 3))
|
||||
Z_precision = fields.Float('Z轴定位精度(mm)', digits=(12, 3))
|
||||
Z_precision_repeat = fields.Float('Z轴重复定位精度(mm)', digits=(12, 3))
|
||||
a_precision = fields.Float('a轴定位精度(mm)', digits=(12, 3))
|
||||
a_precision_repeat = fields.Float('a轴重复定位精度(mm)', digits=(12, 3))
|
||||
b_precision = fields.Float('b轴定位精度(mm)', digits=(12, 3))
|
||||
b_precision_repeat = fields.Float('b轴重复定位精度(mm)', digits=(12, 3))
|
||||
c_precision = fields.Float('c轴定位精度(mm)', digits=(12, 3))
|
||||
c_precision_repeat = fields.Float('c轴重复定位精度(mm)', digits=(12, 3))
|
||||
|
||||
tool_full_diameter_max = fields.Float('刀具满刀最大直径(mm)')
|
||||
tool_perimeter_diameter_max = fields.Float('刀具邻空刀最大直径(mm)')
|
||||
T_tool_time = fields.Integer('T-T换刀时间(s)')
|
||||
C_tool_time = fields.Integer('C-C换刀时间(s)')
|
||||
|
||||
jg_image_id = fields.Many2many('maintenance.equipment.image', 'jg_equipment_id', string='加工能力',
|
||||
domain="[('type', '=', '加工能力')]")
|
||||
lq_image_id = fields.Many2many('maintenance.equipment.image', 'lq_equipment_id', string='冷却方式',
|
||||
domain="[('type', '=', '冷却方式')]")
|
||||
|
||||
|
||||
#待删除字段
|
||||
precision_min = fields.Float('X轴定位精度min(mm)', digits=(12, 3))
|
||||
precision_max = fields.Float('X轴定位精度max(mm)', digits=(12, 3))
|
||||
lead_screw = fields.Char('丝杆')
|
||||
guide_rail = fields.Char('导轨')
|
||||
feed_speed = fields.Char('进给速度(mm/min)')
|
||||
tool_speed = fields.Char('刀具速度(m/min)')
|
||||
torque = fields.Char('主轴点击扭矩(n/m)')
|
||||
motor_power = fields.Char('主轴电机功率(kw)')
|
||||
taper = fields.Char('主轴锥度(°)')
|
||||
tool_diameter_max = fields.Char('刀具刀径max(mm)')
|
||||
tool_diameter_min = fields.Char('刀具刀径min(mm)')
|
||||
|
||||
def _get_ids(self, machine_tool_type_code):
|
||||
machine_tool_type_ids = []
|
||||
for item in machine_tool_type_code:
|
||||
|
||||
@@ -175,9 +175,12 @@ class MaintenanceStandardImage(models.Model):
|
||||
image = fields.Binary(string='图文')
|
||||
type = fields.Selection(
|
||||
[('加工能力', '加工能力'), ('刀尖特征', '刀尖特征'), ('柄部类型', '柄部类型'), ('走刀方向', '走刀方向'),
|
||||
('冷却液', '冷却液'), ('压紧方式', '压紧方式'), ('刀片形状', '刀片形状')],
|
||||
('冷却液', '冷却液'), ('压紧方式', '压紧方式'), ('刀片形状', '刀片形状'), ('冷却方式', '冷却方式')],
|
||||
string='特征')
|
||||
equipment_id = fields.Many2many('maintenance.equipment', 'image_id', string='设备')
|
||||
equipment_lq_id = fields.Many2many('maintenance.equipment', 'image_lq_id', string='设备')
|
||||
jg_equipment_id = fields.Many2many('sf.machine_tool.type', 'jg_image_id', string='机床型号')
|
||||
lq_equipment_id = fields.Many2many('sf.machine_tool.type', 'lq_image_id', string='机床型号')
|
||||
|
||||
def _get_ids(self, name_arr):
|
||||
ability_feature_ids = []
|
||||
|
||||
@@ -34,10 +34,12 @@ access_purchase_order_group_purchase,access_purchase_order_group_purchase,purcha
|
||||
access_purchase_order_group_purchase_director,access_purchase_order_group_purchase_director,purchase.model_purchase_order,sf_base.group_purchase_director,1,1,1,0
|
||||
access_purchase_order_line_group_purchase,access_purchase_order_line_group_purchase,purchase.model_purchase_order_line,sf_base.group_purchase,1,1,1,0
|
||||
access_purchase_order_line_group_purchase_director,access_purchase_order_line_group_purchase_director,purchase.model_purchase_order_line,sf_base.group_purchase_director,1,1,1,0
|
||||
access_spindle_taper_type,spindle_taper_type,model_spindle_taper_type,base.group_user,1,1,1,1
|
||||
|
||||
|
||||
|
||||
access_purchase_order,purchase.order,purchase.model_purchase_order,sf_base.group_plan_dispatch,1,0,0,0
|
||||
access_res_partner,res.partner,base.model_res_partner,sf_base.group_plan_dispatch,1,0,0,0
|
||||
access_purchase_order_line,purchase.order.line,purchase.model_purchase_order_line,sf_base.group_plan_dispatch,1,0,0,0
|
||||
access_account_move_line,account.move.line,account.model_account_move_line,sf_base.group_plan_dispatch,1,0,0,0
|
||||
|
||||
|
||||
|
@@ -34,8 +34,14 @@ div:has(.o_required_modifier) > label::before {
|
||||
|
||||
.o_kanban_renderer .o_kanban_record .o_kanban_record_has_image_fill .o_kanban_image_fill_left {
|
||||
flex: unset !important;
|
||||
min-width: 100px;
|
||||
}
|
||||
.o_kanban_renderer .o_kanban_record .o_kanban_record_title {
|
||||
font-weight: bold;
|
||||
}
|
||||
.o_kanban_renderer .o_kanban_record .oe_kanban_details ul {
|
||||
margin-top: calc(var(--KanbanRecord-gap-v) * 0.5);
|
||||
}
|
||||
|
||||
.o_kanban_renderer .o_kanban_record .o_kanban_record_bottom {
|
||||
margin-top: 5px;
|
||||
display: inline !important;
|
||||
|
||||
@@ -81,7 +81,10 @@
|
||||
<field name="name" string="模糊搜索"
|
||||
filter_domain="['|',('name', 'ilike', self),('remark', 'ilike', self)]"/>
|
||||
<filter name="filter_active" string="已归档" domain="[('active','=',False)]"/>
|
||||
|
||||
<searchpanel>
|
||||
<field name="brand_id" select="multi" icon="fa-building" enable_counters="1"/>
|
||||
<field name="machine_tool_category" select="multi" icon="fa-building" enable_counters="1"/>
|
||||
</searchpanel>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
@@ -90,7 +93,7 @@
|
||||
<field name="name">tree.sf.machine_tool.type</field>
|
||||
<field name="model">sf.machine_tool.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="机床型号" create="0" delete="1" edit="0">
|
||||
<tree string="机床型号" create="1" delete="1" edit="1">
|
||||
<field name="code"/>
|
||||
<field name="name" string="名称"/>
|
||||
<field name="machine_tool_category"/>
|
||||
@@ -105,20 +108,16 @@
|
||||
<field name="name">form.sf.machine_tool.type</field>
|
||||
<field name="model">sf.machine_tool.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="机床型号" create="0" edit="1" delete="0">
|
||||
<form string="机床型号" delete="0">
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="name" placeholder="e.g. LED Monitor"/>
|
||||
<field name="name" required="1" placeholder="名称"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<!-- <label for="name"/>-->
|
||||
<!-- <h1>-->
|
||||
<!-- <field name="name" string="设备名称" placeholder="e.g. LED Monitor"/>-->
|
||||
<!-- </h1>-->
|
||||
<field name="code" force_save="1" readonly="1"/>
|
||||
<field name="code" force_save="1"/>
|
||||
<field name="brand_id" required="1"
|
||||
domain="[('tag_ids', '=', '机床')]"
|
||||
options="{'no_create': True}"/>
|
||||
@@ -128,10 +127,40 @@
|
||||
<field name="machine_tool_picture" widget="image" nolabel="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="加工能力">
|
||||
<div>
|
||||
<field name='jg_image_id' widget="custom_many2many_checkboxes">
|
||||
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="image" widget="image"
|
||||
options="{'size': [100, 100], 'click enlarge': True}"/>
|
||||
|
||||
</tree>
|
||||
</field>
|
||||
</div>
|
||||
|
||||
</group>
|
||||
<group string="冷却方式">
|
||||
<div>
|
||||
<field name='lq_image_id' widget="custom_many2many_checkboxes">
|
||||
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="image" widget="image"
|
||||
options="{'size': [100, 100], 'click enlarge': True}"/>
|
||||
|
||||
</tree>
|
||||
</field>
|
||||
</div>
|
||||
|
||||
</group>
|
||||
|
||||
|
||||
<notebook>
|
||||
<page string="基本信息">
|
||||
<group>
|
||||
<group string="基本参数">
|
||||
<group string="基础参数">
|
||||
<field name="control_system_id" required="1" options="{'no_create': True}"/>
|
||||
<label for="workbench_L" string="工作台尺寸(mm)"/>
|
||||
<div class="test_model">
|
||||
@@ -143,33 +172,47 @@
|
||||
<field name="workbench_W" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<field name="workpiece_load"/>
|
||||
<label for="machine_tool_L" string="机床尺寸(mm)"/>
|
||||
<div class="test_model">
|
||||
<label for="machine_tool_L" string="长"/>
|
||||
<field name="machine_tool_L" class="o_address_zip" required="1"
|
||||
<field name="machine_tool_L" class="o_address_zip"
|
||||
options="{'format': false}"/>
|
||||
<span>&nbsp;</span>
|
||||
<label for="machine_tool_W" string="宽"/>
|
||||
<field name="machine_tool_W" class="o_address_zip" required="1"
|
||||
<field name="machine_tool_W" class="o_address_zip"
|
||||
options="{'format': false}"/>
|
||||
<label for="machine_tool_H" string="高"/>
|
||||
<field name="machine_tool_H" class="o_address_zip" required="1"
|
||||
<field name="machine_tool_H" class="o_address_zip"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<field name="feed_speed" required="1"/>
|
||||
<label for="precision_min" string="X轴定位精度(mm)"/>
|
||||
<label for="T_trough_num" string="T型槽尺寸:"/>
|
||||
<div class="test_model">
|
||||
<label for="precision_min" string="最小"/>
|
||||
<field name="precision_min" class="o_address_zip" required="1"
|
||||
<label for="T_trough_num" string="槽数"/>
|
||||
<field name="T_trough_num" class="o_address_zip"
|
||||
options="{'format': false}"/>
|
||||
<span>&nbsp;</span>
|
||||
<label for="precision_max" string="最大"/>
|
||||
<field name="precision_max" class="o_address_zip" required="1"
|
||||
<label for="T_trough_wide" string="槽宽(mm)"/>
|
||||
<field name="T_trough_wide" class="o_address_zip"
|
||||
options="{'format': false}"/>
|
||||
<label for="T_trough_distance" string="槽距(mm)"/>
|
||||
<field name="T_trough_distance" class="o_address_zip"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<field name="workpiece_load" required="1"/>
|
||||
<field name="number_of_knife_library" required="1" options="{'format': false}"/>
|
||||
<field name="lead_screw" required="1"/>
|
||||
<!-- <field name="feed_speed" required="1"/>-->
|
||||
<!-- <label for="precision_min" string="X轴定位精度(mm)"/>-->
|
||||
<!-- <div class="test_model">-->
|
||||
<!-- <label for="precision_min" string="最小(min)"/>-->
|
||||
<!-- <field name="precision_min" class="o_address_zip" required="1"-->
|
||||
<!-- options="{'format': false}"/>-->
|
||||
<!-- <span>&nbsp;</span>-->
|
||||
<!-- <label for="precision_max" string="最大(max)"/>-->
|
||||
<!-- <field name="precision_max" class="o_address_zip" required="1"-->
|
||||
<!-- options="{'format': false}"/>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<!-- <field name="lead_screw" required="1"/>-->
|
||||
<!-- <field name="guide_rail" required="1"/>-->
|
||||
<field name="number_of_axles" required="1" widget="radio"
|
||||
options="{'horizontal': true}"/>
|
||||
<label for="x_axis" string="加工行程(mm)"
|
||||
@@ -187,60 +230,105 @@
|
||||
<label for="z_axis" string="z"/>
|
||||
<field name="z_axis" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>
|
||||
<br></br>
|
||||
<label for="b_axis" string="b"
|
||||
<span>&nbsp;</span>
|
||||
<label for="a_axis" string="a"
|
||||
attrs="{'invisible': [('number_of_axles', '=', '三轴')]}"/>
|
||||
<field name="b_axis" class="o_address_zip" required="1"
|
||||
<field name="a_axis" class="o_address_zip"
|
||||
attrs="{'invisible': [('number_of_axles', '=', '三轴')]}"
|
||||
options="{'format': false}"/>
|
||||
<span>&nbsp;</span>
|
||||
<label for="c_axis" string="c"
|
||||
<label for="b_axis" string="b"
|
||||
attrs="{'invisible': [('number_of_axles', 'in', ['三轴','四轴'])]}"/>
|
||||
<field name="c_axis" class="o_address_zip" required="1"
|
||||
<field name="b_axis" class="o_address_zip"
|
||||
attrs="{'invisible': [('number_of_axles', 'in', ['三轴','四轴'])]}"
|
||||
options="{'format': false}"/>
|
||||
<span>&nbsp;</span>
|
||||
<label for="c_axis" string="c"
|
||||
attrs="{'invisible': [('number_of_axles', 'in', ['三轴','四轴','五轴'])]}"/>
|
||||
<field name="c_axis" class="o_address_zip"
|
||||
attrs="{'invisible': [('number_of_axles', 'in', ['三轴','四轴','五轴'])]}"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
</group>
|
||||
<group string="主轴">
|
||||
<field name="taper" required="1"/>
|
||||
<field name="rotate_speed" string="主轴转速(r/min)" required="1"
|
||||
options="{'format': false}"/>
|
||||
<field name="heightened_way" required="1"/>
|
||||
<field name="torque" required="1"/>
|
||||
<field name="motor_power" required="1"/>
|
||||
<field name="taper_type_id" required="1"/>
|
||||
<label for="distance_min" string="主轴端面-工作台距离(mm)"/>
|
||||
<div class="test_model">
|
||||
<label for="distance_min" string="最小"/>
|
||||
<field name="distance_min" class="o_address_zip" required="1"
|
||||
<label for="distance_min" string="最小(min)"/>
|
||||
<field name="distance_min" class="o_address_zip"
|
||||
options="{'format': false}"/>
|
||||
<span>&nbsp;</span>
|
||||
<label for="distance_max" string="最大"/>
|
||||
<field name="distance_max" class="o_address_zip" required="1"
|
||||
<label for="distance_max" string="最大(max)"/>
|
||||
<field name="distance_max" class="o_address_zip"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<field name="guide_rail" required="1"/>
|
||||
<field name="rotate_speed" string="主轴最高转速(r/min)"
|
||||
options="{'format': false}"/>
|
||||
<field name="spindle_center_distance"/>
|
||||
<field name="spindle_continuous_power"/>
|
||||
<field name="spindle_peak_power"/>
|
||||
<field name="spindle_sustained_torque"/>
|
||||
<field name="spindle_peak_torque"/>
|
||||
<field name="heightened_way"/>
|
||||
<field name="linear_axis_guides_type"/>
|
||||
<field name="axis_driven_type"/>
|
||||
|
||||
<!-- <field name="distance" required="1"/>-->
|
||||
</group>
|
||||
<group></group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="进给/精度参数">
|
||||
<group>
|
||||
<group string="进给参数">
|
||||
<field name="X_axis_rapid_traverse_speed"/>
|
||||
<field name="Y_axis_rapid_traverse_speed"/>
|
||||
<field name="Z_axis_rapid_traverse_speed"/>
|
||||
<field name="a_axis_rapid_traverse_speed"/>
|
||||
<field name="b_axis_rapid_traverse_speed"/>
|
||||
<field name="c_axis_rapid_traverse_speed"/>
|
||||
<field name="straight_cutting_feed_rate"/>
|
||||
<field name="rotary_cutting_feed_rate"/>
|
||||
</group>
|
||||
<group string="精度参数">
|
||||
<field name="X_precision"/>
|
||||
<field name="X_precision_repeat"/>
|
||||
<field name="Y_precision"/>
|
||||
<field name="Y_precision_repeat"/>
|
||||
<field name="Z_precision"/>
|
||||
<field name="Z_precision_repeat"/>
|
||||
<field name="a_precision"/>
|
||||
<field name="a_precision_repeat"/>
|
||||
<field name="b_precision"/>
|
||||
<field name="b_precision_repeat"/>
|
||||
<field name="c_precision"/>
|
||||
<field name="c_precision_repeat"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="刀库参数">
|
||||
<group>
|
||||
<group string="刀具">
|
||||
<field name="knife_type" required="1"/>
|
||||
<field name="tool_speed" required="1"/>
|
||||
<field name="tool_long_max" required="1"/>
|
||||
<label for="tool_diameter_min" string="刀具刀径(mm)"/>
|
||||
<div class="test_model">
|
||||
<label for="tool_diameter_min" string="最小"/>
|
||||
<field name="tool_diameter_min" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>Φ
|
||||
<span>&nbsp;</span>
|
||||
<label for="tool_diameter_max" string="最大"/>
|
||||
<field name="tool_diameter_max" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>Φ
|
||||
</div>
|
||||
<field name="tool_quality_max" required="1"/>
|
||||
<!-- <field name="knife_type" required="1"/>-->
|
||||
<field name="number_of_knife_library" required="1" options="{'format': false}"/>
|
||||
<!-- <field name="tool_speed" required="1"/>-->
|
||||
<field name="tool_full_diameter_max"/>
|
||||
<field name="tool_perimeter_diameter_max"/>
|
||||
<field name="tool_long_max"/>
|
||||
<!-- <label for="tool_diameter_min" string="刀具刀径(mm)"/>-->
|
||||
<!-- <div class="test_model">-->
|
||||
<!-- <label for="tool_diameter_min" string="最小(min)"/>-->
|
||||
<!-- <field name="tool_diameter_min" class="o_address_zip" required="1"-->
|
||||
<!-- options="{'format': false}"/>-->
|
||||
<!-- <span>&nbsp;</span>-->
|
||||
<!-- <label for="tool_diameter_max" string="最大(max)"/>-->
|
||||
<!-- <field name="tool_diameter_max" class="o_address_zip" required="1"-->
|
||||
<!-- options="{'format': false}"/>-->
|
||||
<!-- </div>-->
|
||||
<field name="tool_quality_max"/>
|
||||
<field name="T_tool_time"/>
|
||||
<field name="C_tool_time"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="其它">
|
||||
<field name="remark"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
'website': 'https://www.sf.jikimo.com',
|
||||
'depends': ['sf_sale', 'sf_dlm', 'sf_manufacturing'],
|
||||
'data': [
|
||||
'data/stock_data.xml',
|
||||
'views/product_template_management_view.xml',
|
||||
],
|
||||
'demo': [
|
||||
|
||||
29
sf_dlm_management/data/stock_data.xml
Normal file
29
sf_dlm_management/data/stock_data.xml
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<record id="stock_location_tool_room" model="stock.location">
|
||||
<field name="name">刀具房</field>
|
||||
<field name="usage">internal</field>
|
||||
<field name="location_type">库区</field>
|
||||
<field name="area_type">存货区</field>
|
||||
<field name="barcode">DJF</field>
|
||||
<field name="active">true</field>
|
||||
<field name="product_type"
|
||||
eval="[ref('sf_dlm.product_category_cutting_tool_sf'),
|
||||
ref('sf_dlm.product_category_functional_tool_sf')]"/>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="after_assembly_picking_in" model="stock.picking.type">
|
||||
<field name="name">刀具组装入库</field>
|
||||
<field name="code">internal</field>
|
||||
<field name="sequence_id" ref="sf_manufacturing.tool_assembly_in"/>
|
||||
<field name="active">true</field>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field name="sequence_code">ZR</field>
|
||||
<field name="default_location_src_id" ref="sf_manufacturing.stock_location_locations_virtual_after_assembly"/>
|
||||
<field name="default_location_dest_id" ref="stock_location_tool_room"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -14,6 +14,7 @@
|
||||
'views/maintenance_views.xml',
|
||||
'views/equipment_maintenance_standards_views.xml',
|
||||
'views/maintenance_request_views.xml',
|
||||
'views/maintenance_equipment_category_views.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'application': False,
|
||||
|
||||
@@ -14,6 +14,7 @@ class SfMaintenanceEquipmentCategory(models.Model):
|
||||
|
||||
equipment_type = fields.Selection([('机床', '机床'), ('机器人', '机器人'), ('AGV小车', 'AGV小车'),
|
||||
('检测设备', '检测设备')], string='类型', default='机床')
|
||||
equipment_type_code = fields.Char('简写')
|
||||
|
||||
|
||||
class SfMaintenanceEquipment(models.Model):
|
||||
@@ -22,6 +23,69 @@ class SfMaintenanceEquipment(models.Model):
|
||||
|
||||
crea_url = "/api/machine_tool/create"
|
||||
|
||||
# 1212修改后的字段
|
||||
number_of_axles = fields.Selection(
|
||||
[("三轴", "三轴"), ("四轴", "四轴"), ("五轴", "五轴"), ("六轴", "六轴")],
|
||||
default="", string="轴数")
|
||||
|
||||
# 1212新增字段
|
||||
a_axis = fields.Integer('a轴')
|
||||
function_type = fields.Selection(
|
||||
[("ZXJGZX", "钻铣加工中心"), ("CXJGZX", "车削加工中心"), ("FHJGZX", "复合加工中心")],
|
||||
default="", string="功能类型")
|
||||
T_trough_num = fields.Integer('槽数')
|
||||
T_trough_wide = fields.Float('槽宽(mm)')
|
||||
T_trough_distance = fields.Float('槽距(mm)')
|
||||
|
||||
taper_type_id = fields.Many2one('spindle.taper.type', string='主轴锥孔型号')
|
||||
spindle_center_distance = fields.Float('主轴中心至立柱滑轨面距离(mm)')
|
||||
spindle_continuous_power = fields.Float('主轴持续功率(kw)')
|
||||
spindle_peak_power = fields.Float('主轴峰值功率(kw)')
|
||||
spindle_sustained_torque = fields.Float('主轴持续扭矩(n/m)')
|
||||
spindle_peak_torque = fields.Float('主轴峰值扭矩(n/m)')
|
||||
linear_axis_guides_type = fields.Char('直线轴导轨类型')
|
||||
axis_driven_type = fields.Char('坐标轴驱动类型')
|
||||
|
||||
X_axis_rapid_traverse_speed = fields.Char('X轴快速进给速度(mm/min)')
|
||||
Y_axis_rapid_traverse_speed = fields.Char('Y轴快速进给速度(mm/min)')
|
||||
Z_axis_rapid_traverse_speed = fields.Char('Z轴快速进给速度(mm/min)')
|
||||
a_axis_rapid_traverse_speed = fields.Char('a轴快速进给速度(mm/min)')
|
||||
b_axis_rapid_traverse_speed = fields.Char('b轴快速进给速度(mm/min)')
|
||||
c_axis_rapid_traverse_speed = fields.Char('c轴快速进给速度(mm/min)')
|
||||
straight_cutting_feed_rate = fields.Char('直线切削进给速度(mm/min)')
|
||||
rotary_cutting_feed_rate = fields.Char('回转切削进给速度(mm/min)')
|
||||
|
||||
X_precision = fields.Float('X轴定位精度(mm)', digits=(12, 3))
|
||||
X_precision_repeat = fields.Float('X轴重复定位精度(mm)', digits=(12, 3))
|
||||
Y_precision = fields.Float('Y轴定位精度(mm)', digits=(12, 3))
|
||||
Y_precision_repeat = fields.Float('Y轴重复定位精度(mm)', digits=(12, 3))
|
||||
Z_precision = fields.Float('Z轴定位精度(mm)', digits=(12, 3))
|
||||
Z_precision_repeat = fields.Float('Z轴重复定位精度(mm)', digits=(12, 3))
|
||||
a_precision = fields.Float('a轴定位精度(mm)', digits=(12, 3))
|
||||
a_precision_repeat = fields.Float('a轴重复定位精度(mm)', digits=(12, 3))
|
||||
b_precision = fields.Float('b轴定位精度(mm)', digits=(12, 3))
|
||||
b_precision_repeat = fields.Float('b轴重复定位精度(mm)', digits=(12, 3))
|
||||
c_precision = fields.Float('c轴定位精度(mm)', digits=(12, 3))
|
||||
c_precision_repeat = fields.Float('c轴重复定位精度(mm)', digits=(12, 3))
|
||||
|
||||
tool_full_diameter_max = fields.Float('刀具满刀最大直径(mm)')
|
||||
tool_perimeter_diameter_max = fields.Float('刀具邻空刀最大直径(mm)')
|
||||
T_tool_time = fields.Integer('T-T换刀时间(s)')
|
||||
C_tool_time = fields.Integer('C-C换刀时间(s)')
|
||||
|
||||
# 待删除字段
|
||||
precision_min = fields.Float('X轴定位精度min(mm)', digits=(12, 3))
|
||||
precision_max = fields.Float('X轴定位精度max(mm)', digits=(12, 3))
|
||||
lead_screw = fields.Char('丝杆')
|
||||
guide_rail = fields.Char('导轨')
|
||||
feed_speed = fields.Char('进给速度(mm/min)')
|
||||
tool_speed = fields.Char('刀具速度(m/min)')
|
||||
torque = fields.Char('主轴点击扭矩(n/m)')
|
||||
motor_power = fields.Char('主轴电机功率(kw)')
|
||||
taper = fields.Char('主轴锥度(°)')
|
||||
tool_diameter_max = fields.Char('刀具刀径max(mm)')
|
||||
tool_diameter_min = fields.Char('刀具刀径min(mm)')
|
||||
|
||||
def get_no(self):
|
||||
partner = self.env['maintenance.equipment'].sudo().search(
|
||||
[('MTcode', '!=', '')],
|
||||
@@ -81,9 +145,6 @@ class SfMaintenanceEquipment(models.Model):
|
||||
default="", string="刀把类型")
|
||||
number_of_knife_library = fields.Integer('刀库数量(把)')
|
||||
rotate_speed = fields.Integer('转速')
|
||||
number_of_axles = fields.Selection(
|
||||
[("三轴", "三轴"), ("四轴", "四轴"), ("五轴", "五轴")],
|
||||
default="", string="轴数")
|
||||
# 加工进程
|
||||
x_axis = fields.Integer('X轴')
|
||||
y_axis = fields.Integer('Y轴')
|
||||
@@ -92,8 +153,6 @@ class SfMaintenanceEquipment(models.Model):
|
||||
c_axis = fields.Integer('C轴')
|
||||
remark = fields.Char('备注')
|
||||
is_binding = fields.Boolean('是否绑定机床', default=False)
|
||||
precision_min = fields.Float('X轴定位精度min(mm)', digits=(12, 3))
|
||||
precision_max = fields.Float('X轴定位精度max(mm)', digits=(12, 3))
|
||||
control_system_id = fields.Many2one('sf.machine.control_system',
|
||||
string="控制系统")
|
||||
# 多个机床型号对应一个机床
|
||||
@@ -111,24 +170,15 @@ class SfMaintenanceEquipment(models.Model):
|
||||
('chilunjia', '齿轮架驱动')
|
||||
], string="主轴加高方式", default='sifudianji')
|
||||
workpiece_load = fields.Char('工件最大负载(kg)')
|
||||
lead_screw = fields.Char('丝杆')
|
||||
workbench_L = fields.Char('工作台长度(mm)')
|
||||
workbench_W = fields.Char('工作台宽度(mm)')
|
||||
guide_rail = fields.Char('导轨')
|
||||
machine_tool_L = fields.Char('机床长度(mm)')
|
||||
machine_tool_W = fields.Char('机床宽度(mm)')
|
||||
machine_tool_H = fields.Char('机床高度(mm)')
|
||||
feed_speed = fields.Char('进给速度(mm/min)')
|
||||
tool_speed = fields.Char('刀具速度(m/min)')
|
||||
distance_min = fields.Char('主轴端面至工作台面距离MIN(mm)')
|
||||
distance_max = fields.Char('主轴端面至工作台面距离MAX(mm)')
|
||||
taper = fields.Char('主轴锥度(°)')
|
||||
torque = fields.Char('主轴电机扭矩(n/m)')
|
||||
motor_power = fields.Char('主轴电机功率(kw)')
|
||||
tool_quality_max = fields.Char('刀具最大质量(kg)')
|
||||
tool_long_max = fields.Char('刀具最大长度(mm)')
|
||||
tool_diameter_max = fields.Char('刀具刀径max(mm)')
|
||||
tool_diameter_min = fields.Char('刀具刀径min(mm)')
|
||||
machine_tool_category = fields.Many2one('sf.machine_tool.category', string='机床类型')
|
||||
# 一个机床对应一個加工工厂,一个加工工厂对应多个机床
|
||||
factory_id = fields.Many2one('res.partner', string='所属工厂',
|
||||
@@ -247,6 +297,48 @@ class SfMaintenanceEquipment(models.Model):
|
||||
item.tool_diameter_min = item.type_id.tool_diameter_min
|
||||
item.machine_tool_category = item.type_id.machine_tool_category.id
|
||||
item.brand_id = item.type_id.brand_id.id
|
||||
#新增修改字段
|
||||
item.taper_type_id = item.type_id.taper_type_id.id
|
||||
item.function_type = item.type_id.function_type
|
||||
item.a_axis = item.type_id.a_axis
|
||||
item.T_trough_num = item.type_id.T_trough_num
|
||||
item.T_trough_wide = item.type_id.T_trough_wide
|
||||
item.T_trough_distance = item.type_id.T_trough_distance
|
||||
item.spindle_center_distance = item.type_id.spindle_center_distance
|
||||
item.spindle_continuous_power = item.type_id.spindle_continuous_power
|
||||
item.spindle_peak_power = item.type_id.spindle_peak_power
|
||||
item.spindle_sustained_torque = item.type_id.spindle_sustained_torque
|
||||
item.spindle_peak_torque = item.type_id.spindle_peak_torque
|
||||
item.linear_axis_guides_type = item.type_id.linear_axis_guides_type
|
||||
item.axis_driven_type = item.type_id.axis_driven_type
|
||||
item.X_axis_rapid_traverse_speed = item.type_id.X_axis_rapid_traverse_speed
|
||||
item.Y_axis_rapid_traverse_speed = item.type_id.Y_axis_rapid_traverse_speed
|
||||
item.Z_axis_rapid_traverse_speed = item.type_id.Z_axis_rapid_traverse_speed
|
||||
item.a_axis_rapid_traverse_speed = item.type_id.a_axis_rapid_traverse_speed
|
||||
item.b_axis_rapid_traverse_speed = item.type_id.b_axis_rapid_traverse_speed
|
||||
item.c_axis_rapid_traverse_speed = item.type_id.c_axis_rapid_traverse_speed
|
||||
item.straight_cutting_feed_rate = item.type_id.straight_cutting_feed_rate
|
||||
item.rotary_cutting_feed_rate = item.type_id.rotary_cutting_feed_rate
|
||||
item.X_precision = item.type_id.X_precision
|
||||
item.X_precision_repeat = item.type_id.X_precision_repeat
|
||||
item.Y_precision = item.type_id.Y_precision
|
||||
item.Y_precision_repeat = item.type_id.Y_precision_repeat
|
||||
item.Z_precision = item.type_id.Z_precision
|
||||
item.Z_precision_repeat = item.type_id.Z_precision_repeat
|
||||
item.a_precision = item.type_id.a_precision
|
||||
item.a_precision_repeat = item.type_id.a_precision_repeat
|
||||
item.b_precision = item.type_id.b_precision
|
||||
item.b_precision_repeat = item.type_id.b_precision_repeat
|
||||
item.c_precision = item.type_id.c_precision
|
||||
item.c_precision_repeat = item.type_id.c_precision_repeat
|
||||
item.tool_full_diameter_max = item.type_id.tool_full_diameter_max
|
||||
item.tool_perimeter_diameter_max = item.type_id.tool_perimeter_diameter_max
|
||||
item.T_tool_time = item.type_id.T_tool_time
|
||||
item.C_tool_time = item.type_id.C_tool_time
|
||||
item.C_tool_time = item.type_id.C_tool_time
|
||||
item.image_id = item.type_id.jg_image_id.ids
|
||||
item.image_lq_id = item.type_id.lq_image_id.ids
|
||||
|
||||
|
||||
# AGV小车设备参数
|
||||
AGV_L = fields.Char('AGV尺寸(长)')
|
||||
@@ -415,7 +507,45 @@ class SfMaintenanceEquipment(models.Model):
|
||||
'distance_max': item.distance_max,
|
||||
'tool_diameter_min': item.tool_diameter_min,
|
||||
'machine_tool_category': item.machine_tool_category.code,
|
||||
'image_id': images_ids_names
|
||||
'image_id': images_ids_names,
|
||||
'taper_type_id': item.taper_type_id.name,
|
||||
'function_type': item.function_type,
|
||||
'a_axis': item.a_axis,
|
||||
'T_trough_num': item.T_trough_num,
|
||||
'T_trough_wide': item.T_trough_wide,
|
||||
'T_trough_distance': item.T_trough_distance,
|
||||
'spindle_center_distance': item.spindle_center_distance,
|
||||
'spindle_continuous_power': item.spindle_continuous_power,
|
||||
'spindle_peak_power': item.spindle_peak_power,
|
||||
'spindle_sustained_torque': item.spindle_sustained_torque,
|
||||
'spindle_peak_torque': item.spindle_peak_torque,
|
||||
'linear_axis_guides_type': item.linear_axis_guides_type,
|
||||
'axis_driven_type': item.axis_driven_type,
|
||||
'X_axis_rapid_traverse_speed': item.X_axis_rapid_traverse_speed,
|
||||
'Y_axis_rapid_traverse_speed': item.Y_axis_rapid_traverse_speed,
|
||||
'Z_axis_rapid_traverse_speed': item.Z_axis_rapid_traverse_speed,
|
||||
'a_axis_rapid_traverse_speed': item.a_axis_rapid_traverse_speed,
|
||||
'b_axis_rapid_traverse_speed': item.b_axis_rapid_traverse_speed,
|
||||
'c_axis_rapid_traverse_speed': item.c_axis_rapid_traverse_speed,
|
||||
'straight_cutting_feed_rate': item.straight_cutting_feed_rate,
|
||||
'rotary_cutting_feed_rate': item.rotary_cutting_feed_rate,
|
||||
'X_precision': item.X_precision,
|
||||
'X_precision_repeat': item.X_precision_repeat,
|
||||
'Y_precision': item.X_precision,
|
||||
'Y_precision_repeat': item.X_precision_repeat,
|
||||
'Z_precision': item.X_precision,
|
||||
'Z_precision_repeat': item.X_precision_repeat,
|
||||
'a_precision': item.X_precision,
|
||||
'a_precision_repeat': item.X_precision_repeat,
|
||||
'b_precision': item.X_precision,
|
||||
'b_precision_repeat': item.X_precision_repeat,
|
||||
'c_precision': item.X_precision,
|
||||
'c_precision_repeat': item.X_precision_repeat,
|
||||
'tool_full_diameter_max': item.tool_full_diameter_max,
|
||||
'tool_perimeter_diameter_max': item.tool_perimeter_diameter_max,
|
||||
'T_tool_time': item.T_tool_time,
|
||||
'C_tool_time': item.C_tool_time,
|
||||
'jiancheng': item.category_id.equipment_type_code
|
||||
}
|
||||
machine_tool_list.append(val)
|
||||
# kw = machine_tool_list
|
||||
@@ -598,8 +728,10 @@ class SfMaintenanceEquipment(models.Model):
|
||||
if not next_requests:
|
||||
equipment._create_new_request1(equipment.overhaul_date)
|
||||
|
||||
image_id = fields.Many2many('maintenance.equipment.image', 'equipment_id', string='加工能力',
|
||||
image_id = fields.Many2many('maintenance.equipment.image', 'equipment_id',
|
||||
domain="[('type', '=', '加工能力')]")
|
||||
image_lq_id = fields.Many2many('maintenance.equipment.image', 'equipment_lq_id', string='冷却方式',
|
||||
domain="[('type', '=', '冷却方式')]")
|
||||
|
||||
|
||||
class SfRobotAxisNum(models.Model):
|
||||
|
||||
@@ -7,6 +7,8 @@ access_maintenance_standard_image,maintenance_standard_image,model_maintenance_s
|
||||
access_sf_robot_axis_num,sf_robot_axis_num,model_sf_robot_axis_num,sf_group_equipment_user,1,1,1,1
|
||||
|
||||
|
||||
access_maintenance_request,maintenance_request,model_maintenance_request,sf_base.group_plan_dispatch,1,0,0,0
|
||||
access_maintenance_request,maintenance.request,maintenance.model_maintenance_request,sf_base.group_plan_dispatch,1,0,0,0
|
||||
access_maintenance_equipment,maintenance_equipment,model_maintenance_equipment,sf_base.group_plan_dispatch,1,0,0,0
|
||||
access_sf_maintenance_logs,sf_maintenance_logs,model_sf_maintenance_logs,sf_base.group_plan_dispatch,1,0,0,0
|
||||
access_maintenance_standard_image,maintenance_standard_image,model_maintenance_standard_image,sf_base.group_plan_dispatch,1,0,0,0
|
||||
access_equipment_maintenance_standards,equipment_maintenance_standards,model_equipment_maintenance_standards,sf_base.group_plan_dispatch,1,0,0,0
|
||||
|
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<!-- 设备类别 -->
|
||||
<record id="sf_maintenance_equipment_category" model="ir.ui.view">
|
||||
<field name="name">sf.maintenance.equipment.category</field>
|
||||
<field name="model">maintenance.equipment.category</field>
|
||||
<field name="inherit_id" ref="maintenance.hr_equipment_category_view_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='name']" position="after">
|
||||
<field name="equipment_type_code"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -8,6 +8,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='technician_user_id']" position="before">
|
||||
<field name="equipment_type" required='1'/>
|
||||
<field name="equipment_type_code" required='1'/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
@@ -72,175 +73,171 @@
|
||||
<page string="设备参数" name="sf_equipment"
|
||||
attrs="{'invisible': [('equipment_type', '!=', '机床')]}">
|
||||
<group>
|
||||
<div class="bigger">
|
||||
<group string="基本参数">
|
||||
<group string="基础参数">
|
||||
<field name="control_system_id" required="1" options="{'no_create': True}"/>
|
||||
<label for="workbench_L" string="工作台尺寸(mm)"/>
|
||||
<div class="test_model">
|
||||
<div>
|
||||
<label for="workbench_L" string="长"/>
|
||||
<field name="workbench_L" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
<field name="workbench_L" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<span>&nbsp;</span>
|
||||
<div>
|
||||
<label for="workbench_W" string="宽"/>
|
||||
<field name="workbench_W" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
<field name="workbench_W" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
</div>
|
||||
<field name="workpiece_load"/>
|
||||
<label for="machine_tool_L" string="机床尺寸(mm)"/>
|
||||
<div class="test_model">
|
||||
<div>
|
||||
<label for="machine_tool_L" string="长"/>
|
||||
<field name="machine_tool_L" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
options="{'format': false}"/>
|
||||
<span>&nbsp;</span>
|
||||
</div>
|
||||
<div>
|
||||
<label for="machine_tool_W" string="宽"/>
|
||||
<field name="machine_tool_W" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<div>
|
||||
<label for="machine_tool_H" string="高"/>
|
||||
<field name="machine_tool_H" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
</div>
|
||||
<field name="feed_speed" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
|
||||
|
||||
<label for="precision_min" string="X轴定位精度(mm)"/>
|
||||
<label for="T_trough_num" string="T型槽尺寸:"/>
|
||||
<div class="test_model">
|
||||
<div>
|
||||
<label for="precision_min" string="最小(min)"/>
|
||||
<field name="precision_min" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
<label for="T_trough_num" string="槽数"/>
|
||||
<field name="T_trough_num" class="o_address_zip"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<span>&nbsp;</span>
|
||||
<div>
|
||||
<label for="precision_max" string="最大(max)"/>
|
||||
<field name="precision_max" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
<label for="T_trough_wide" string="槽宽(mm)"/>
|
||||
<field name="T_trough_wide" class="o_address_zip"
|
||||
options="{'format': false}"/>
|
||||
<label for="T_trough_distance" string="槽距(mm)"/>
|
||||
<field name="T_trough_distance" class="o_address_zip"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
</div>
|
||||
<field name="workpiece_load"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"/>
|
||||
<!-- <field name="feed_speed" required="1"/>-->
|
||||
<!-- <label for="precision_min" string="X轴定位精度(mm)"/>-->
|
||||
<!-- <div class="test_model">-->
|
||||
<!-- <label for="precision_min" string="最小(min)"/>-->
|
||||
<!-- <field name="precision_min" class="o_address_zip" required="1"-->
|
||||
<!-- options="{'format': false}"/>-->
|
||||
<!-- <span>&nbsp;</span>-->
|
||||
<!-- <label for="precision_max" string="最大(max)"/>-->
|
||||
<!-- <field name="precision_max" class="o_address_zip" required="1"-->
|
||||
<!-- options="{'format': false}"/>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<field name="lead_screw" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
|
||||
<field name="number_of_axles"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
widget="radio"
|
||||
<!-- <field name="lead_screw" required="1"/>-->
|
||||
<!-- <field name="guide_rail" required="1"/>-->
|
||||
<field name="number_of_axles" required="1" widget="radio"
|
||||
options="{'horizontal': true}"/>
|
||||
<label for="x_axis" string="加工行程(mm)"
|
||||
attrs="{'invisible': [('number_of_axles', '=', False)]}"/>
|
||||
<div class="test_model"
|
||||
attrs="{'invisible': [('number_of_axles', '=', False)]}">
|
||||
<div>
|
||||
<label for="x_axis" string="x"/>
|
||||
<field name="x_axis" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
<field name="x_axis" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<span>&nbsp;</span>
|
||||
<div>
|
||||
<label for="y_axis" string="y"/>
|
||||
<field name="y_axis" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
<field name="y_axis" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<span>&nbsp;</span>
|
||||
<div>
|
||||
<label for="z_axis" string="z"/>
|
||||
<field name="z_axis" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
<field name="z_axis" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<br></br>
|
||||
<div>
|
||||
<label for="b_axis" string="b"
|
||||
<span>&nbsp;</span>
|
||||
<label for="a_axis" string="a"
|
||||
attrs="{'invisible': [('number_of_axles', '=', '三轴')]}"/>
|
||||
<field name="b_axis" class="o_address_zip"
|
||||
<field name="a_axis" class="o_address_zip"
|
||||
attrs="{'invisible': [('number_of_axles', '=', '三轴')]}"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<span>&nbsp;</span>
|
||||
<div>
|
||||
<label for="c_axis" string="c"
|
||||
<label for="b_axis" string="b"
|
||||
attrs="{'invisible': [('number_of_axles', 'in', ['三轴','四轴'])]}"/>
|
||||
<field name="c_axis" class="o_address_zip"
|
||||
<field name="b_axis" class="o_address_zip"
|
||||
attrs="{'invisible': [('number_of_axles', 'in', ['三轴','四轴'])]}"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<span>&nbsp;</span>
|
||||
<label for="c_axis" string="c"
|
||||
attrs="{'invisible': [('number_of_axles', 'in', ['三轴','四轴','五轴'])]}"/>
|
||||
<field name="c_axis" class="o_address_zip"
|
||||
attrs="{'invisible': [('number_of_axles', 'in', ['三轴','四轴','五轴'])]}"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
</group>
|
||||
</div>
|
||||
<div class="bigger">
|
||||
<group string="主轴">
|
||||
<field name="taper" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
|
||||
<field name="rotate_speed" string="主轴转速(r/min)"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
options="{'format': false}"/>
|
||||
<field name="heightened_way"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"/>
|
||||
<field name="torque" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
|
||||
<field name="motor_power" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
|
||||
<field name="taper_type_id" required="1"/>
|
||||
<label for="distance_min" string="主轴端面-工作台距离(mm)"/>
|
||||
<div class="test_model">
|
||||
<div>
|
||||
<label for="distance_min" string="最小(min)"/>
|
||||
<label for="distance_min" string="最小(min)"/>
|
||||
<field name="distance_min" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<span>&nbsp;</span>
|
||||
<div>
|
||||
<label for="distance_max" string="最大(max)"/>
|
||||
<label for="distance_max" string="最大(max)"/>
|
||||
<field name="distance_max" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
</div>
|
||||
<field name="guide_rail" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
|
||||
<field name="rotate_speed" string="主轴最高转速(r/min)"
|
||||
options="{'format': false}"/>
|
||||
<field name="spindle_center_distance"/>
|
||||
<field name="spindle_continuous_power"/>
|
||||
<field name="spindle_peak_power"/>
|
||||
<field name="spindle_sustained_torque"/>
|
||||
<field name="spindle_peak_torque"/>
|
||||
<field name="heightened_way"/>
|
||||
<field name="linear_axis_guides_type"/>
|
||||
<field name="axis_driven_type"/>
|
||||
|
||||
<!-- <field name="distance" required="1"/>-->
|
||||
</group>
|
||||
</div>
|
||||
<group string="刀具">
|
||||
<field name="number_of_knife_library"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
options="{'format': false}"/>
|
||||
<field name="knife_type" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
|
||||
<field name="tool_speed" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
|
||||
<field name="tool_long_max"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"/>
|
||||
<label for="tool_diameter_min" string="刀具刀径(mm)"/>
|
||||
<div class="test_model">
|
||||
<div>
|
||||
<label for="tool_diameter_min" string="最小(min)"/>
|
||||
<field name="tool_diameter_min" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
|
||||
<span>&nbsp;</span>
|
||||
<div>
|
||||
<label for="tool_diameter_max" string="最大(max)"/>
|
||||
<field name="tool_diameter_max" class="o_address_zip"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<field name="tool_quality_max"
|
||||
attrs="{'required': [('equipment_type', '=', '机床')]}"/>
|
||||
<!-- <field name="knife_type" required="1"/>-->
|
||||
<field name="number_of_knife_library" required="1" options="{'format': false}"/>
|
||||
<!-- <field name="tool_speed" required="1"/>-->
|
||||
<field name="tool_full_diameter_max"/>
|
||||
<field name="tool_perimeter_diameter_max"/>
|
||||
<field name="tool_long_max"/>
|
||||
<!-- <label for="tool_diameter_min" string="刀具刀径(mm)"/>-->
|
||||
<!-- <div class="test_model">-->
|
||||
<!-- <label for="tool_diameter_min" string="最小(min)"/>-->
|
||||
<!-- <field name="tool_diameter_min" class="o_address_zip" required="1"-->
|
||||
<!-- options="{'format': false}"/>-->
|
||||
<!-- <span>&nbsp;</span>-->
|
||||
<!-- <label for="tool_diameter_max" string="最大(max)"/>-->
|
||||
<!-- <field name="tool_diameter_max" class="o_address_zip" required="1"-->
|
||||
<!-- options="{'format': false}"/>-->
|
||||
<!-- </div>-->
|
||||
<field name="tool_quality_max"/>
|
||||
<field name="T_tool_time"/>
|
||||
<field name="C_tool_time"/>
|
||||
</group>
|
||||
|
||||
<group string="进给参数">
|
||||
<field name="X_axis_rapid_traverse_speed"/>
|
||||
<field name="Y_axis_rapid_traverse_speed"/>
|
||||
<field name="Z_axis_rapid_traverse_speed"/>
|
||||
<field name="a_axis_rapid_traverse_speed"/>
|
||||
<field name="b_axis_rapid_traverse_speed"/>
|
||||
<field name="c_axis_rapid_traverse_speed"/>
|
||||
<field name="straight_cutting_feed_rate"/>
|
||||
<field name="rotary_cutting_feed_rate"/>
|
||||
</group>
|
||||
<group string="精度参数">
|
||||
<field name="X_precision"/>
|
||||
<field name="X_precision_repeat"/>
|
||||
<field name="Y_precision"/>
|
||||
<field name="Y_precision_repeat"/>
|
||||
<field name="Z_precision"/>
|
||||
<field name="Z_precision_repeat"/>
|
||||
<field name="a_precision"/>
|
||||
<field name="a_precision_repeat"/>
|
||||
<field name="b_precision"/>
|
||||
<field name="b_precision_repeat"/>
|
||||
<field name="c_precision"/>
|
||||
<field name="c_precision_repeat"/>
|
||||
</group>
|
||||
|
||||
</group>
|
||||
|
||||
|
||||
|
||||
</page>
|
||||
|
||||
@@ -923,22 +920,34 @@
|
||||
</group>
|
||||
</page>
|
||||
|
||||
<page string="加工能力" attrs="{'invisible': [('equipment_type', '!=', '机床')]}">
|
||||
|
||||
<field name='image_id' widget="custom_many2many_checkboxes">
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//notebook" position="before">
|
||||
<group string="加工能力">
|
||||
<div>
|
||||
<field name='image_id' widget="custom_many2many_checkboxes" string="">
|
||||
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="image" widget="image"
|
||||
options="{'size': [100, 100], 'click enlarge': True}"/>
|
||||
|
||||
</tree>
|
||||
</field>
|
||||
</div>
|
||||
</group>
|
||||
<group string="冷却方式">
|
||||
<div>
|
||||
<field name='image_lq_id' widget="custom_many2many_checkboxes" string="">
|
||||
|
||||
|
||||
</page>
|
||||
|
||||
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="image" widget="image"
|
||||
options="{'size': [100, 100], 'click enlarge': True}"/>
|
||||
</tree>
|
||||
</field>
|
||||
</div>
|
||||
</group>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//field[@name='next_action_date']" position="before">
|
||||
@@ -1193,5 +1202,4 @@
|
||||
sequence="0"/>
|
||||
|
||||
|
||||
|
||||
</odoo>
|
||||
@@ -13,6 +13,12 @@
|
||||
<field name="padding">5</field>
|
||||
</record>
|
||||
|
||||
<record id="tool_assembly_in" model="ir.sequence">
|
||||
<field name="name">My Company 刀具组装入库</field>
|
||||
<field name="prefix">ZR/</field>
|
||||
<field name="padding">5</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_location_locations_virtual_outcontract" model="stock.location">
|
||||
<field name="name">外协</field>
|
||||
<field name="location_id" ref="stock.stock_location_locations_virtual"/>
|
||||
@@ -31,15 +37,6 @@
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
</record>
|
||||
|
||||
<!-- <record id="stock_location_locations_WH_tool_stock_area" model="stock.location">-->
|
||||
<!-- <field name="name">刀具存货区</field>-->
|
||||
<!-- <field name="location_id" ref="stock.stock_location_locations_virtual"/>-->
|
||||
<!-- <field name="usage">internal</field>-->
|
||||
<!-- <field name="barcode">WH-DJCHQ</field>-->
|
||||
<!-- <field name="active">true</field>-->
|
||||
<!-- <field name="company_id" ref="base.main_company"/>-->
|
||||
<!-- </record>-->
|
||||
|
||||
<record id="outcontract_picking_in" model="stock.picking.type">
|
||||
<field name="name">外协入库</field>
|
||||
<field name="code">internal</field>
|
||||
@@ -63,17 +60,5 @@
|
||||
search="[('barcode','=','WH-PREPRODUCTION')]"/>
|
||||
<field name="default_location_dest_id" ref="stock_location_locations_virtual_outcontract"/>
|
||||
</record>
|
||||
|
||||
<record id="after_assembly_picking_in" model="stock.picking.type">
|
||||
<field name="name">刀具组装入库</field>
|
||||
<field name="code">internal</field>
|
||||
<field name="active">true</field>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field name="sequence_code">ZR</field>
|
||||
<field name="default_location_src_id" ref="stock_location_locations_virtual_after_assembly"/>
|
||||
<field name="default_location_dest_id"
|
||||
search="[('barcode','=','WH-PREPRODUCTION')]"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -105,6 +105,11 @@ class ResMrpWorkOrder(models.Model):
|
||||
picking_out_id = fields.Many2one('stock.picking', string='外协出库单')
|
||||
supplier_id = fields.Many2one('res.partner', string='外协供应商')
|
||||
equipment_id = fields.Many2one('maintenance.equipment', string='加工设备')
|
||||
is_ok = fields.Boolean(string='是否合格')
|
||||
# 加工人
|
||||
processing_user_id = fields.Many2one('res.users', string='加工人')
|
||||
# 检测人
|
||||
inspection_user_id = fields.Many2one('res.users', string='检测人')
|
||||
schedule_state = fields.Selection(related='production_id.schedule_state', store=True)
|
||||
# 工件装夹信息
|
||||
functional_fixture_code = fields.Char(string="功能夹具编码", readonly=True)
|
||||
@@ -127,6 +132,13 @@ class ResMrpWorkOrder(models.Model):
|
||||
production_line = fields.Char(string="生产线")
|
||||
preset_program_information = fields.Char(string="预调程序信息")
|
||||
|
||||
@api.onchange('is_ok')
|
||||
def _onchange_inspection_user_id(self):
|
||||
"""
|
||||
检测is_ok(是否合格)被修改的话,就将当前用户赋值给inspection_user_id
|
||||
"""
|
||||
self.inspection_user_id = self.env.user.id
|
||||
|
||||
@api.onchange('functional_fixture_id')
|
||||
def _onchange_functional_fixture_id(self):
|
||||
if self.functional_fixture_id:
|
||||
|
||||
@@ -13,6 +13,7 @@ access_sf_production_line,sf.production.line,model_sf_production_line,sf_base.gr
|
||||
access_sf_production_line_manager,sf.production.line,model_sf_production_line,sf_base.group_sf_mrp_manager,1,1,1,0
|
||||
access_maintenance_equipment_tool,maintenance_equipment_tool,model_maintenance_equipment_tool,sf_base.group_sf_mrp_user,1,0,0,0
|
||||
access_maintenance_equipment_tool_manager,maintenance_equipment_tool,model_maintenance_equipment_tool,sf_base.group_sf_mrp_manager,1,1,1,0
|
||||
access_maintenance_equipment_tool_equipment_manager,maintenance_equipment_tool,model_maintenance_equipment_tool,sf_maintenance.sf_group_equipment_user,1,1,1,0
|
||||
access_mrp_production,mrp_production,model_mrp_production,sf_base.group_sf_mrp_user,1,0,0,0
|
||||
access_mrp_production_manager,mrp_production,model_mrp_production,sf_base.group_sf_mrp_manager,1,1,1,0
|
||||
access_mrp_workorder,mrp_workorder,model_mrp_workorder,sf_base.group_sf_mrp_user,1,0,0,0
|
||||
@@ -101,6 +102,7 @@ access_sf_product_model_type_routing_sort,sf.product.model.type.routing.sort,mod
|
||||
access_sf_embryo_model_type_routing_sort,sf.embryo.model.type.routing.sort,model_sf_embryo_model_type_routing_sort,sf_base.group_plan_dispatch,1,0,0,0
|
||||
access_sf_surface_technics_model_type_routing_sort,sf.surface_technics.model.type.routing.sort,model_sf_surface_technics_model_type_routing_sort,sf_base.group_plan_dispatch,1,0,0,0
|
||||
access_mrp_workcenter_capacity,mrp.workcenter.capacity,mrp.model_mrp_workcenter_capacity,sf_base.group_plan_dispatch,1,0,0,0
|
||||
access_sf_cnc_processing,sf.cnc.processing,model_sf_cnc_processing,sf_base.group_plan_dispatch,1,0,0,0
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -61,10 +61,10 @@
|
||||
<xpath expr="//form//header//button[@name='action_confirm']" position="after">
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="check_status" invisible="1"/>
|
||||
<button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/>
|
||||
<button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<button name="action_check" string="启用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/> -->
|
||||
<!-- <button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/> -->
|
||||
<button name="action_check" string="审核" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/> -->
|
||||
</xpath>
|
||||
|
||||
</field>
|
||||
|
||||
@@ -453,6 +453,19 @@
|
||||
|
||||
</page>
|
||||
</xpath>
|
||||
<xpath expr="//form//sheet//group//group//div[1]" position="after">
|
||||
<label for="date_start" string="实际开始时间"/>
|
||||
<div class="oe_inline">
|
||||
<field name="date_start" class="mr8 oe_inline"/>
|
||||
<strong class="mr8 oe_inline">到</strong>
|
||||
<field name="date_finished" class="oe_inline"/>
|
||||
</div>
|
||||
</xpath>
|
||||
<xpath expr="//form//sheet//group//group//div[3]" position="after">
|
||||
<field name="is_ok"/>
|
||||
<field name="processing_user_id"/>
|
||||
<field name="inspection_user_id"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -615,13 +615,21 @@ class MachineToolType(models.Model):
|
||||
result = json.loads(r['result'])
|
||||
if result['status'] == 1:
|
||||
for item in result['machine_tool_type_yesterday_list']:
|
||||
if item.get('machine_tool_picture'):
|
||||
image = base64.b64decode(item['machine_tool_picture'])
|
||||
else:
|
||||
image = ''
|
||||
taper_type_id = self.env['spindle.taper.type'].search([('name', '=', item['taper_type_id'])])
|
||||
machine_tool_type = self.search([("code", '=', item['code'])])
|
||||
control_system = self.env['sf.machine.control_system'].search(
|
||||
[('code', '=', item['control_system_id'])])
|
||||
jg_image_id = self.env['maintenance.equipment.image'].search([('name', 'in', item['jg_image_id'])])
|
||||
lq_image_id = self.env['maintenance.equipment.image'].search([('name', 'in', item['lq_image_id'])])
|
||||
brand = self.env['sf.machine.brand'].search([('code', '=', item['brand_id'])])
|
||||
category = self.env['sf.machine_tool.category'].search([('code', '=', item['machine_tool_category'])])
|
||||
if machine_tool_type:
|
||||
machine_tool_type.write({
|
||||
machine_tool_type.update({
|
||||
'code': item['code'],
|
||||
"name": item['name'],
|
||||
"number_of_knife_library": item['number_of_knife_library'],
|
||||
"rotate_speed": item['rotate_speed'],
|
||||
@@ -633,40 +641,78 @@ class MachineToolType(models.Model):
|
||||
"knife_type": item['knife_type'],
|
||||
"c_axis": item['c_axis'],
|
||||
"remark": item['remark'],
|
||||
"precision_min": item['precision_min'],
|
||||
"precision_max": item['precision_max'],
|
||||
# "precision_min": item['precision_min'],
|
||||
# "precision_max": item['precision_max'],
|
||||
'control_system_id': control_system.id,
|
||||
"active": item['active'],
|
||||
'brand_id': brand.id,
|
||||
'machine_tool_picture': '' if not item['machine_tool_picture'] else base64.b64decode(
|
||||
item['machine_tool_picture']),
|
||||
'machine_tool_picture': image,
|
||||
"heightened_way": item['heightened_way'],
|
||||
"workpiece_load": item['workpiece_load'],
|
||||
"lead_screw": item['lead_screw'],
|
||||
#"lead_screw": item['lead_screw'],
|
||||
"workbench_L": item['workbench_L'],
|
||||
"workbench_W": item['workbench_W'],
|
||||
"guide_rail": item['guide_rail'],
|
||||
#"guide_rail": item['guide_rail'],
|
||||
"machine_tool_L": item['machine_tool_L'],
|
||||
"machine_tool_W": item['machine_tool_W'],
|
||||
"machine_tool_H": item['machine_tool_H'],
|
||||
"feed_speed": item['feed_speed'],
|
||||
"tool_speed": item['tool_speed'],
|
||||
#"feed_speed": item['feed_speed'],
|
||||
#"tool_speed": item['tool_speed'],
|
||||
"distance_min": item['distance_min'],
|
||||
"distance_max": item['distance_max'],
|
||||
"taper": item['taper'],
|
||||
"torque": item['torque'],
|
||||
"motor_power": item['motor_power'],
|
||||
#"taper": item['taper'],
|
||||
#"torque": item['torque'],
|
||||
#"motor_power": item['motor_power'],
|
||||
"tool_quality_max": item['tool_quality_max'],
|
||||
"tool_long_max": item['tool_long_max'],
|
||||
"tool_diameter_max": item['tool_diameter_max'],
|
||||
"tool_diameter_min": item['tool_diameter_min'],
|
||||
#"tool_diameter_max": item['tool_diameter_max'],
|
||||
#"tool_diameter_min": item['tool_diameter_min'],
|
||||
"machine_tool_category": category.id,
|
||||
'taper_type_id': taper_type_id.id,
|
||||
"function_type": item['function_type'],
|
||||
"a_axis": item['a_axis'],
|
||||
"T_trough_num": item['T_trough_num'],
|
||||
"T_trough_wide": item['T_trough_wide'],
|
||||
"T_trough_distance": item['T_trough_distance'],
|
||||
"spindle_center_distance": item['spindle_center_distance'],
|
||||
"spindle_continuous_power": item['spindle_continuous_power'],
|
||||
"spindle_peak_power": item['spindle_peak_power'],
|
||||
"spindle_sustained_torque": item['spindle_sustained_torque'],
|
||||
"spindle_peak_torque": item['spindle_peak_torque'],
|
||||
"linear_axis_guides_type": item['linear_axis_guides_type'],
|
||||
"axis_driven_type": item['axis_driven_type'],
|
||||
"X_axis_rapid_traverse_speed": item['X_axis_rapid_traverse_speed'],
|
||||
"Y_axis_rapid_traverse_speed": item['Y_axis_rapid_traverse_speed'],
|
||||
"Z_axis_rapid_traverse_speed": item['Z_axis_rapid_traverse_speed'],
|
||||
"a_axis_rapid_traverse_speed": item['a_axis_rapid_traverse_speed'],
|
||||
"b_axis_rapid_traverse_speed": item['b_axis_rapid_traverse_speed'],
|
||||
"c_axis_rapid_traverse_speed": item['c_axis_rapid_traverse_speed'],
|
||||
"straight_cutting_feed_rate": item['straight_cutting_feed_rate'],
|
||||
"rotary_cutting_feed_rate": item['rotary_cutting_feed_rate'],
|
||||
"X_precision": item['X_precision'],
|
||||
"X_precision_repeat": item['X_precision_repeat'],
|
||||
"Y_precision": item['Y_precision'],
|
||||
"Y_precision_repeat": item['Y_precision_repeat'],
|
||||
"Z_precision": item['Z_precision'],
|
||||
"Z_precision_repeat": item['Z_precision_repeat'],
|
||||
"a_precision": item['a_precision'],
|
||||
"a_precision_repeat": item['a_precision_repeat'],
|
||||
"b_precision": item['b_precision'],
|
||||
"b_precision_repeat": item['b_precision_repeat'],
|
||||
"c_precision": item['c_precision'],
|
||||
"c_precision_repeat": item['c_precision_repeat'],
|
||||
"tool_full_diameter_max": item['tool_full_diameter_max'],
|
||||
"tool_perimeter_diameter_max": item['tool_perimeter_diameter_max'],
|
||||
"T_tool_time": item['T_tool_time'],
|
||||
"C_tool_time": item['C_tool_time'],
|
||||
"jg_image_id": jg_image_id.ids,
|
||||
"lq_image_id": lq_image_id.ids,
|
||||
|
||||
})
|
||||
else:
|
||||
self.create({
|
||||
'code': item['code'],
|
||||
"name": item['name'],
|
||||
"code": item['code'],
|
||||
"knife_type": item['knife_type'],
|
||||
"number_of_knife_library": item['number_of_knife_library'],
|
||||
"rotate_speed": item['rotate_speed'],
|
||||
"number_of_axles": item['number_of_axles'],
|
||||
@@ -674,36 +720,76 @@ class MachineToolType(models.Model):
|
||||
"y_axis": item['y_axis'],
|
||||
"z_axis": item['z_axis'],
|
||||
"b_axis": item['b_axis'],
|
||||
"knife_type": item['knife_type'],
|
||||
"c_axis": item['c_axis'],
|
||||
"remark": item['remark'],
|
||||
"precision_min": item['precision_min'],
|
||||
"precision_max": item['precision_max'],
|
||||
# "precision_min": item['precision_min'],
|
||||
# "precision_max": item['precision_max'],
|
||||
'control_system_id': control_system.id,
|
||||
"active": item['active'],
|
||||
'brand_id': brand.id,
|
||||
'machine_tool_picture': '' if not item['machine_tool_picture'] else item[
|
||||
'machine_tool_picture'].encode('utf-8'),
|
||||
'machine_tool_picture': image,
|
||||
"heightened_way": item['heightened_way'],
|
||||
"workpiece_load": item['workpiece_load'],
|
||||
"lead_screw": item['lead_screw'],
|
||||
#"lead_screw": item['lead_screw'],
|
||||
"workbench_L": item['workbench_L'],
|
||||
"workbench_W": item['workbench_W'],
|
||||
"guide_rail": item['guide_rail'],
|
||||
#"guide_rail": item['guide_rail'],
|
||||
"machine_tool_L": item['machine_tool_L'],
|
||||
"machine_tool_W": item['machine_tool_W'],
|
||||
"machine_tool_H": item['machine_tool_H'],
|
||||
"feed_speed": item['feed_speed'],
|
||||
"tool_speed": item['tool_speed'],
|
||||
#"feed_speed": item['feed_speed'],
|
||||
#"tool_speed": item['tool_speed'],
|
||||
"distance_min": item['distance_min'],
|
||||
"distance_max": item['distance_max'],
|
||||
"taper": item['taper'],
|
||||
"torque": item['torque'],
|
||||
"motor_power": item['motor_power'],
|
||||
#"taper": item['taper'],
|
||||
#"torque": item['torque'],
|
||||
#"motor_power": item['motor_power'],
|
||||
"tool_quality_max": item['tool_quality_max'],
|
||||
"tool_long_max": item['tool_long_max'],
|
||||
"tool_diameter_max": item['tool_diameter_max'],
|
||||
"tool_diameter_min": item['tool_diameter_min'],
|
||||
#"tool_diameter_max": item['tool_diameter_max'],
|
||||
#"tool_diameter_min": item['tool_diameter_min'],
|
||||
"machine_tool_category": category.id,
|
||||
'taper_type_id': taper_type_id.id,
|
||||
"function_type": item['function_type'],
|
||||
"a_axis": item['a_axis'],
|
||||
"T_trough_num": item['T_trough_num'],
|
||||
"T_trough_wide": item['T_trough_wide'],
|
||||
"T_trough_distance": item['T_trough_distance'],
|
||||
"spindle_center_distance": item['spindle_center_distance'],
|
||||
"spindle_continuous_power": item['spindle_continuous_power'],
|
||||
"spindle_peak_power": item['spindle_peak_power'],
|
||||
"spindle_sustained_torque": item['spindle_sustained_torque'],
|
||||
"spindle_peak_torque": item['spindle_peak_torque'],
|
||||
"linear_axis_guides_type": item['linear_axis_guides_type'],
|
||||
"axis_driven_type": item['axis_driven_type'],
|
||||
"X_axis_rapid_traverse_speed": item['X_axis_rapid_traverse_speed'],
|
||||
"Y_axis_rapid_traverse_speed": item['Y_axis_rapid_traverse_speed'],
|
||||
"Z_axis_rapid_traverse_speed": item['Z_axis_rapid_traverse_speed'],
|
||||
"a_axis_rapid_traverse_speed": item['a_axis_rapid_traverse_speed'],
|
||||
"b_axis_rapid_traverse_speed": item['b_axis_rapid_traverse_speed'],
|
||||
"c_axis_rapid_traverse_speed": item['c_axis_rapid_traverse_speed'],
|
||||
"straight_cutting_feed_rate": item['straight_cutting_feed_rate'],
|
||||
"rotary_cutting_feed_rate": item['rotary_cutting_feed_rate'],
|
||||
"X_precision": item['X_precision'],
|
||||
"X_precision_repeat": item['X_precision_repeat'],
|
||||
"Y_precision": item['Y_precision'],
|
||||
"Y_precision_repeat": item['Y_precision_repeat'],
|
||||
"Z_precision": item['Z_precision'],
|
||||
"Z_precision_repeat": item['Z_precision_repeat'],
|
||||
"a_precision": item['a_precision'],
|
||||
"a_precision_repeat": item['a_precision_repeat'],
|
||||
"b_precision": item['b_precision'],
|
||||
"b_precision_repeat": item['b_precision_repeat'],
|
||||
"c_precision": item['c_precision'],
|
||||
"c_precision_repeat": item['c_precision_repeat'],
|
||||
"tool_full_diameter_max": item['tool_full_diameter_max'],
|
||||
"tool_perimeter_diameter_max": item['tool_perimeter_diameter_max'],
|
||||
"T_tool_time": item['T_tool_time'],
|
||||
"C_tool_time": item['C_tool_time'],
|
||||
"jg_image_id": jg_image_id.ids,
|
||||
"lq_image_id": lq_image_id.ids,
|
||||
|
||||
})
|
||||
else:
|
||||
raise ValidationError("机床型号认证未通过")
|
||||
@@ -722,15 +808,24 @@ class MachineToolType(models.Model):
|
||||
image = base64.b64decode(item['machine_tool_picture'])
|
||||
else:
|
||||
image = ''
|
||||
taper_type_id = self.env['spindle.taper.type'].search([('name', '=', item['taper_type_id'])])
|
||||
if not taper_type_id:
|
||||
taper_type_id = self.env['spindle.taper.type'].create({
|
||||
'name': item['taper_type_id']
|
||||
})
|
||||
|
||||
machine_tool_type = self.search([("code", '=', item['code'])])
|
||||
control_system = self.env['sf.machine.control_system'].search(
|
||||
[('code', '=', item['control_system_id'])])
|
||||
brand = self.env['sf.machine.brand'].search([('code', '=', item['brand_id'])])
|
||||
jg_image_id = self.env['maintenance.equipment.image'].search([('name', 'in', item['jg_image_id'])])
|
||||
lq_image_id = self.env['maintenance.equipment.image'].search([('name', 'in', item['lq_image_id'])])
|
||||
category = self.env['sf.machine_tool.category'].search([('code', '=', item['machine_tool_category'])])
|
||||
|
||||
if not machine_tool_type:
|
||||
self.create({
|
||||
'code': item['code'],
|
||||
"name": item['name'],
|
||||
"code": item['code'],
|
||||
"number_of_knife_library": item['number_of_knife_library'],
|
||||
"rotate_speed": item['rotate_speed'],
|
||||
"number_of_axles": item['number_of_axles'],
|
||||
@@ -738,39 +833,81 @@ class MachineToolType(models.Model):
|
||||
"y_axis": item['y_axis'],
|
||||
"z_axis": item['z_axis'],
|
||||
"b_axis": item['b_axis'],
|
||||
"c_axis": item['c_axis'],
|
||||
"knife_type": item['knife_type'],
|
||||
"c_axis": item['c_axis'],
|
||||
"remark": item['remark'],
|
||||
"precision_min": item['precision_min'],
|
||||
"precision_max": item['precision_max'],
|
||||
# "precision_min": item['precision_min'],
|
||||
# "precision_max": item['precision_max'],
|
||||
'control_system_id': control_system.id,
|
||||
"active": item['active'],
|
||||
'brand_id': brand.id,
|
||||
'machine_tool_picture': image,
|
||||
"heightened_way": item['heightened_way'],
|
||||
"workpiece_load": item['workpiece_load'],
|
||||
"lead_screw": item['lead_screw'],
|
||||
#"lead_screw": item['lead_screw'],
|
||||
"workbench_L": item['workbench_L'],
|
||||
"workbench_W": item['workbench_W'],
|
||||
"guide_rail": item['guide_rail'],
|
||||
#"guide_rail": item['guide_rail'],
|
||||
"machine_tool_L": item['machine_tool_L'],
|
||||
"machine_tool_W": item['machine_tool_W'],
|
||||
"machine_tool_H": item['machine_tool_H'],
|
||||
"feed_speed": item['feed_speed'],
|
||||
"tool_speed": item['tool_speed'],
|
||||
#"feed_speed": item['feed_speed'],
|
||||
#"tool_speed": item['tool_speed'],
|
||||
"distance_min": item['distance_min'],
|
||||
"distance_max": item['distance_max'],
|
||||
"taper": item['taper'],
|
||||
"torque": item['torque'],
|
||||
"motor_power": item['motor_power'],
|
||||
#"taper": item['taper'],
|
||||
#"torque": item['torque'],
|
||||
#"motor_power": item['motor_power'],
|
||||
"tool_quality_max": item['tool_quality_max'],
|
||||
"tool_long_max": item['tool_long_max'],
|
||||
"tool_diameter_max": item['tool_diameter_max'],
|
||||
"tool_diameter_min": item['tool_diameter_min'],
|
||||
#"tool_diameter_max": item['tool_diameter_max'],
|
||||
#"tool_diameter_min": item['tool_diameter_min'],
|
||||
"machine_tool_category": category.id,
|
||||
'taper_type_id': taper_type_id.id,
|
||||
"function_type": item['function_type'],
|
||||
"a_axis": item['a_axis'],
|
||||
"T_trough_num": item['T_trough_num'],
|
||||
"T_trough_wide": item['T_trough_wide'],
|
||||
"T_trough_distance": item['T_trough_distance'],
|
||||
"spindle_center_distance": item['spindle_center_distance'],
|
||||
"spindle_continuous_power": item['spindle_continuous_power'],
|
||||
"spindle_peak_power": item['spindle_peak_power'],
|
||||
"spindle_sustained_torque": item['spindle_sustained_torque'],
|
||||
"spindle_peak_torque": item['spindle_peak_torque'],
|
||||
"linear_axis_guides_type": item['linear_axis_guides_type'],
|
||||
"axis_driven_type": item['axis_driven_type'],
|
||||
"X_axis_rapid_traverse_speed": item['X_axis_rapid_traverse_speed'],
|
||||
"Y_axis_rapid_traverse_speed": item['Y_axis_rapid_traverse_speed'],
|
||||
"Z_axis_rapid_traverse_speed": item['Z_axis_rapid_traverse_speed'],
|
||||
"a_axis_rapid_traverse_speed": item['a_axis_rapid_traverse_speed'],
|
||||
"b_axis_rapid_traverse_speed": item['b_axis_rapid_traverse_speed'],
|
||||
"c_axis_rapid_traverse_speed": item['c_axis_rapid_traverse_speed'],
|
||||
"straight_cutting_feed_rate": item['straight_cutting_feed_rate'],
|
||||
"rotary_cutting_feed_rate": item['rotary_cutting_feed_rate'],
|
||||
"X_precision": item['X_precision'],
|
||||
"X_precision_repeat": item['X_precision_repeat'],
|
||||
"Y_precision": item['Y_precision'],
|
||||
"Y_precision_repeat": item['Y_precision_repeat'],
|
||||
"Z_precision": item['Z_precision'],
|
||||
"Z_precision_repeat": item['Z_precision_repeat'],
|
||||
"a_precision": item['a_precision'],
|
||||
"a_precision_repeat": item['a_precision_repeat'],
|
||||
"b_precision": item['b_precision'],
|
||||
"b_precision_repeat": item['b_precision_repeat'],
|
||||
"c_precision": item['c_precision'],
|
||||
"c_precision_repeat": item['c_precision_repeat'],
|
||||
"tool_full_diameter_max": item['tool_full_diameter_max'],
|
||||
"tool_perimeter_diameter_max": item['tool_perimeter_diameter_max'],
|
||||
"T_tool_time": item['T_tool_time'],
|
||||
"C_tool_time": item['C_tool_time'],
|
||||
"jg_image_id": jg_image_id.ids,
|
||||
"lq_image_id": lq_image_id.ids,
|
||||
|
||||
|
||||
})
|
||||
else:
|
||||
machine_tool_type.write({
|
||||
machine_tool_type.update({
|
||||
'code': item['code'],
|
||||
"name": item['name'],
|
||||
"number_of_knife_library": item['number_of_knife_library'],
|
||||
"rotate_speed": item['rotate_speed'],
|
||||
@@ -782,33 +919,73 @@ class MachineToolType(models.Model):
|
||||
"knife_type": item['knife_type'],
|
||||
"c_axis": item['c_axis'],
|
||||
"remark": item['remark'],
|
||||
"precision_min": item['precision_min'],
|
||||
"precision_max": item['precision_max'],
|
||||
# "precision_min": item['precision_min'],
|
||||
# "precision_max": item['precision_max'],
|
||||
'control_system_id': control_system.id,
|
||||
"active": item['active'],
|
||||
'brand_id': brand.id,
|
||||
'machine_tool_picture': image,
|
||||
"heightened_way": item['heightened_way'],
|
||||
"workpiece_load": item['workpiece_load'],
|
||||
"lead_screw": item['lead_screw'],
|
||||
#"lead_screw": item['lead_screw'],
|
||||
"workbench_L": item['workbench_L'],
|
||||
"workbench_W": item['workbench_W'],
|
||||
"guide_rail": item['guide_rail'],
|
||||
#"guide_rail": item['guide_rail'],
|
||||
"machine_tool_L": item['machine_tool_L'],
|
||||
"machine_tool_W": item['machine_tool_W'],
|
||||
"machine_tool_H": item['machine_tool_H'],
|
||||
"feed_speed": item['feed_speed'],
|
||||
"tool_speed": item['tool_speed'],
|
||||
#"feed_speed": item['feed_speed'],
|
||||
#"tool_speed": item['tool_speed'],
|
||||
"distance_min": item['distance_min'],
|
||||
"distance_max": item['distance_max'],
|
||||
"taper": item['taper'],
|
||||
"torque": item['torque'],
|
||||
"motor_power": item['motor_power'],
|
||||
#"taper": item['taper'],
|
||||
#"torque": item['torque'],
|
||||
#"motor_power": item['motor_power'],
|
||||
"tool_quality_max": item['tool_quality_max'],
|
||||
"tool_long_max": item['tool_long_max'],
|
||||
"tool_diameter_max": item['tool_diameter_max'],
|
||||
"tool_diameter_min": item['tool_diameter_min'],
|
||||
#"tool_diameter_max": item['tool_diameter_max'],
|
||||
#"tool_diameter_min": item['tool_diameter_min'],
|
||||
"machine_tool_category": category.id,
|
||||
'taper_type_id': taper_type_id.id,
|
||||
"function_type": item['function_type'],
|
||||
"a_axis": item['a_axis'],
|
||||
"T_trough_num": item['T_trough_num'],
|
||||
"T_trough_wide": item['T_trough_wide'],
|
||||
"T_trough_distance": item['T_trough_distance'],
|
||||
"spindle_center_distance": item['spindle_center_distance'],
|
||||
"spindle_continuous_power": item['spindle_continuous_power'],
|
||||
"spindle_peak_power": item['spindle_peak_power'],
|
||||
"spindle_sustained_torque": item['spindle_sustained_torque'],
|
||||
"spindle_peak_torque": item['spindle_peak_torque'],
|
||||
"linear_axis_guides_type": item['linear_axis_guides_type'],
|
||||
"axis_driven_type": item['axis_driven_type'],
|
||||
"X_axis_rapid_traverse_speed": item['X_axis_rapid_traverse_speed'],
|
||||
"Y_axis_rapid_traverse_speed": item['Y_axis_rapid_traverse_speed'],
|
||||
"Z_axis_rapid_traverse_speed": item['Z_axis_rapid_traverse_speed'],
|
||||
"a_axis_rapid_traverse_speed": item['a_axis_rapid_traverse_speed'],
|
||||
"b_axis_rapid_traverse_speed": item['b_axis_rapid_traverse_speed'],
|
||||
"c_axis_rapid_traverse_speed": item['c_axis_rapid_traverse_speed'],
|
||||
"straight_cutting_feed_rate": item['straight_cutting_feed_rate'],
|
||||
"rotary_cutting_feed_rate": item['rotary_cutting_feed_rate'],
|
||||
"X_precision": item['X_precision'],
|
||||
"X_precision_repeat": item['X_precision_repeat'],
|
||||
"Y_precision": item['Y_precision'],
|
||||
"Y_precision_repeat": item['Y_precision_repeat'],
|
||||
"Z_precision": item['Z_precision'],
|
||||
"Z_precision_repeat": item['Z_precision_repeat'],
|
||||
"a_precision": item['a_precision'],
|
||||
"a_precision_repeat": item['a_precision_repeat'],
|
||||
"b_precision": item['b_precision'],
|
||||
"b_precision_repeat": item['b_precision_repeat'],
|
||||
"c_precision": item['c_precision'],
|
||||
"c_precision_repeat": item['c_precision_repeat'],
|
||||
"tool_full_diameter_max": item['tool_full_diameter_max'],
|
||||
"tool_perimeter_diameter_max": item['tool_perimeter_diameter_max'],
|
||||
"T_tool_time": item['T_tool_time'],
|
||||
"C_tool_time": item['C_tool_time'],
|
||||
"jg_image_id": jg_image_id.ids,
|
||||
"lq_image_id": lq_image_id.ids,
|
||||
|
||||
})
|
||||
else:
|
||||
raise ValidationError("机床型号认证未通过")
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
<xpath expr="//form//header//button[@name='action_validate']" position="after">
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="check_status" invisible="1"/>
|
||||
<button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/>
|
||||
<button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<button name="action_check" string="启用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/> -->
|
||||
<!-- <button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/> -->
|
||||
<button name="action_check" string="审核" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/> -->
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
@@ -27,10 +27,10 @@
|
||||
<xpath expr="//form//header//button[@name='action_validate']" position="after">
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="check_status" invisible="1"/>
|
||||
<button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/>
|
||||
<button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<button name="action_check" string="启用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/> -->
|
||||
<!-- <button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/> -->
|
||||
<button name="action_check" string="审核" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/> -->
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
@@ -44,10 +44,10 @@
|
||||
<xpath expr="//form//header" position="inside">
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="check_status" invisible="1"/>
|
||||
<button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/>
|
||||
<button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<button name="action_check" string="启用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/> -->
|
||||
<!-- <button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/> -->
|
||||
<button name="action_check" string="审核" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/> -->
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
@@ -62,10 +62,10 @@
|
||||
<header>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="check_status" invisible="1"/>
|
||||
<button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/>
|
||||
<button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<button name="action_check" string="启用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/> -->
|
||||
<!-- <button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/> -->
|
||||
<button name="action_check" string="审核" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/> -->
|
||||
</header>
|
||||
</xpath>
|
||||
</field>
|
||||
@@ -81,10 +81,10 @@
|
||||
<header>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="check_status" invisible="1"/>
|
||||
<button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/>
|
||||
<button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<button name="action_check" string="启用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/> -->
|
||||
<!-- <button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/> -->
|
||||
<button name="action_check" string="审核" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/> -->
|
||||
</header>
|
||||
</xpath>
|
||||
</field>
|
||||
@@ -100,10 +100,10 @@
|
||||
<header>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="check_status" invisible="1"/>
|
||||
<button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/>
|
||||
<button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<button name="action_check" string="启用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/> -->
|
||||
<!-- <button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/> -->
|
||||
<button name="action_check" string="审核" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/> -->
|
||||
</header>
|
||||
</xpath>
|
||||
</field>
|
||||
@@ -119,10 +119,10 @@
|
||||
<header>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="check_status" invisible="1"/>
|
||||
<button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/>
|
||||
<button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<button name="action_check" string="启用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/> -->
|
||||
<!-- <button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/> -->
|
||||
<button name="action_check" string="审核" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/> -->
|
||||
</header>
|
||||
</xpath>
|
||||
</field>
|
||||
@@ -138,10 +138,10 @@
|
||||
<header>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="check_status" invisible="1"/>
|
||||
<button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/>
|
||||
<button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<button name="action_check" string="启用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/> -->
|
||||
<!-- <button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/> -->
|
||||
<button name="action_check" string="审核" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/> -->
|
||||
</header>
|
||||
</xpath>
|
||||
</field>
|
||||
@@ -157,10 +157,10 @@
|
||||
<header>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="check_status" invisible="1"/>
|
||||
<button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/>
|
||||
<button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<button name="action_check" string="启用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="archive" type="object" string="归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', False)]}"/> -->
|
||||
<!-- <button name="unarchive" type="object" string="取消归档" icon="fa-archive" class="oe_highlight" attrs="{'invisible': [('active', '=', True)]}"/> -->
|
||||
<button name="action_check" string="审核" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', True)]}" groups="sf_base.group_plan_director"/>
|
||||
<!-- <button name="action_uncheck" string="禁用" type="object" class="oe_highlight" attrs="{'invisible': [('check_status', '=', False)]}" groups="sf_base.group_plan_director"/> -->
|
||||
</header>
|
||||
</xpath>
|
||||
</field>
|
||||
|
||||
@@ -322,13 +322,13 @@
|
||||
action="mrp_custom_action"
|
||||
parent="sf_production_plan_menu"
|
||||
/>
|
||||
<menuitem
|
||||
id="sale_custom_menu"
|
||||
name="报价单"
|
||||
sequence="50"
|
||||
action="sale_custom_action"
|
||||
parent="sf_production_plan_menu"
|
||||
/>
|
||||
<!-- <menuitem -->
|
||||
<!-- id="sale_custom_menu" -->
|
||||
<!-- name="报价单" -->
|
||||
<!-- sequence="50" -->
|
||||
<!-- action="sale_custom_action" -->
|
||||
<!-- parent="sf_production_plan_menu" -->
|
||||
<!-- /> -->
|
||||
<menuitem
|
||||
id="schedule_custom_menu"
|
||||
name="排程单"
|
||||
|
||||
@@ -1,39 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
|
||||
<menuitem id="menu_sf_basic_setting"
|
||||
name="基础设置"
|
||||
parent="sf_plan.sf_production_plan_menu"
|
||||
sequence="599"
|
||||
/>
|
||||
<!-- <menuitem id="menu_sf_basic_setting" -->
|
||||
<!-- name="基础设置" -->
|
||||
<!-- parent="sf_plan.sf_production_plan_menu" -->
|
||||
<!-- sequence="599" -->
|
||||
<!-- /> -->
|
||||
|
||||
<menuitem id="menu_sf_procedure_equipment_resource_setting"
|
||||
name="产线设备资源设置"
|
||||
parent="menu_sf_basic_setting"
|
||||
action="sf_procedure_equipment_resource_setting_act"
|
||||
sequence="0"
|
||||
/>
|
||||
<menuitem id="menu_sf_work_log_setting"
|
||||
name="工作日历设置"
|
||||
parent="menu_sf_basic_setting"
|
||||
action="sf_work_log_setting_act"
|
||||
sequence="10"
|
||||
/>
|
||||
<!-- <menuitem id="menu_sf_procedure_equipment_resource_setting" -->
|
||||
<!-- name="产线设备资源设置" -->
|
||||
<!-- parent="menu_sf_basic_setting" -->
|
||||
<!-- action="sf_procedure_equipment_resource_setting_act" -->
|
||||
<!-- sequence="0" -->
|
||||
<!-- /> -->
|
||||
<!-- <menuitem id="menu_sf_work_log_setting" -->
|
||||
<!-- name="工作日历设置" -->
|
||||
<!-- parent="menu_sf_basic_setting" -->
|
||||
<!-- action="sf_work_log_setting_act" -->
|
||||
<!-- sequence="10" -->
|
||||
<!-- /> -->
|
||||
|
||||
|
||||
<menuitem id="menu_sf_working_shift"
|
||||
name="班次"
|
||||
parent="menu_sf_basic_setting"
|
||||
action="sf_working_shift_act"
|
||||
sequence="12"
|
||||
/>
|
||||
<!-- <menuitem id="menu_sf_working_shift" -->
|
||||
<!-- name="班次" -->
|
||||
<!-- parent="menu_sf_basic_setting" -->
|
||||
<!-- action="sf_working_shift_act" -->
|
||||
<!-- sequence="12" -->
|
||||
<!-- /> -->
|
||||
|
||||
<menuitem id="menu_sf_day_off"
|
||||
name="休息日"
|
||||
parent="menu_sf_basic_setting"
|
||||
action="sf_day_off_act"
|
||||
sequence="15"
|
||||
/>
|
||||
<!-- <menuitem id="menu_sf_day_off" -->
|
||||
<!-- name="休息日" -->
|
||||
<!-- parent="menu_sf_basic_setting" -->
|
||||
<!-- action="sf_day_off_act" -->
|
||||
<!-- sequence="15" -->
|
||||
<!-- /> -->
|
||||
|
||||
<!-- <menuitem id="menu_sf_work_schedule_calendar"-->
|
||||
<!-- name="工作日历"-->
|
||||
|
||||
@@ -22,7 +22,7 @@ class FunctionalCuttingToolEntity(models.Model):
|
||||
knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', readonly=True)
|
||||
coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=True)
|
||||
new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True)
|
||||
tool_loading_length = fields.Float(string='装刀长(mm)', readonly=True)
|
||||
tool_loading_length = fields.Float(strin='总长度(mm)', readonly=True)
|
||||
functional_tool_length = fields.Float(string='伸出长(mm)', readonly=True)
|
||||
effective_length = fields.Float(string='有效长(mm)', readonly=True)
|
||||
tool_room_num = fields.Integer(string='刀具房数量', readonly=True)
|
||||
@@ -107,19 +107,41 @@ class FunctionalCuttingToolEntity(models.Model):
|
||||
|
||||
suitable_machining_method_ids = fields.Many2many(
|
||||
'maintenance.equipment.image', 'rel_machining_product_template_tool_entity', '适合加工方式',
|
||||
domain=[('type', '=', '加工能力')], related='cutting_tool_integral_model_id.suitable_machining_method_ids')
|
||||
domain=[('type', '=', '加工能力')])
|
||||
blade_tip_characteristics_id = fields.Many2one(
|
||||
'maintenance.equipment.image', '刀尖特征',
|
||||
domain=[('type', '=', '刀尖特征')], related='cutting_tool_integral_model_id.blade_tip_characteristics_id')
|
||||
domain=[('type', '=', '刀尖特征')])
|
||||
handle_type_id = fields.Many2one(
|
||||
'maintenance.equipment.image', '柄部类型',
|
||||
domain=[('type', '=', '柄部类型')], related='cutting_tool_integral_model_id.handle_type_id')
|
||||
domain=[('type', '=', '柄部类型')])
|
||||
cutting_direction_ids = fields.Many2many(
|
||||
'maintenance.equipment.image', 'rel_cutting_product_template_tool_entity', '走刀方向',
|
||||
domain=[('type', '=', '走刀方向')], related='cutting_tool_integral_model_id.cutting_direction_ids')
|
||||
domain=[('type', '=', '走刀方向')])
|
||||
suitable_coolant_ids = fields.Many2many(
|
||||
'maintenance.equipment.image', 'rel_coolant_product_template_tool_entity', '适合冷却液',
|
||||
domain=[('type', '=', '冷却液')], related='cutting_tool_integral_model_id.suitable_coolant_ids')
|
||||
domain=[('type', '=', '冷却液')])
|
||||
|
||||
@api.depends('cutting_tool_integral_model_id', 'cutting_tool_blade_model_id')
|
||||
def _compute_maintenance_equipment_image(self):
|
||||
for record in self:
|
||||
if record.cutting_tool_integral_model_id:
|
||||
record.suitable_machining_method_ids = record.cutting_tool_integral_model_id.suitable_machining_method_ids.ids
|
||||
record.blade_tip_characteristics_id = record.cutting_tool_integral_model_id.blade_tip_characteristics_id.ids
|
||||
record.handle_type_id = record.cutting_tool_integral_model_id.handle_type_id.ids
|
||||
record.cutting_direction_ids = record.cutting_tool_integral_model_id.cutting_direction_ids.ids
|
||||
record.suitable_coolant_ids = record.cutting_tool_integral_model_id.suitable_coolant_ids.ids
|
||||
elif record.cutting_tool_blade_model_id:
|
||||
record.suitable_machining_method_ids = record.cutting_tool_blade_model_id.suitable_machining_method_ids.ids
|
||||
record.blade_tip_characteristics_id = record.cutting_tool_blade_model_id.blade_tip_characteristics_id.ids
|
||||
record.handle_type_id = record.cutting_tool_blade_model_id.handle_type_id.ids
|
||||
record.cutting_direction_ids = record.cutting_tool_blade_model_id.cutting_direction_ids.ids
|
||||
record.suitable_coolant_ids = record.cutting_tool_blade_model_id.suitable_coolant_ids.ids
|
||||
else:
|
||||
record.suitable_machining_method_ids = []
|
||||
record.blade_tip_characteristics_id = []
|
||||
record.handle_type_id = []
|
||||
record.cutting_direction_ids = []
|
||||
record.suitable_coolant_ids = []
|
||||
|
||||
def _get_functional_tool_model_ids(self, functional_tool_model_code):
|
||||
functional_tool_model_ids = []
|
||||
@@ -332,8 +354,7 @@ class MachineTableToolChangingApply(models.Model):
|
||||
# 设备信息
|
||||
maintenance_equipment_id = fields.Many2one('maintenance.equipment', string='CNC机床', readonly=True,
|
||||
domain=[('category_id.equipment_type', '=', '机床')])
|
||||
production_line_id = fields.Many2one('sf.production.line', string='生产线', readonly=True,
|
||||
group_expand='_read_group_names')
|
||||
production_line_id = fields.Many2one('sf.production.line', string='生产线', readonly=True)
|
||||
machine_table_type_id = fields.Many2one('maintenance.equipment.category', string='机床类型', readonly=True,
|
||||
compute='_compute_machine_table_type_id')
|
||||
machine_tool_code = fields.Char(string='机台号', related='maintenance_equipment_id.name')
|
||||
@@ -344,9 +365,10 @@ class MachineTableToolChangingApply(models.Model):
|
||||
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', store=True,
|
||||
domain=[('product_id.name', '=', '功能刀具')],
|
||||
related='functional_tool_name_id.barcode_id')
|
||||
functional_tool_name_id = fields.Many2one('sf.functional.tool.assembly', string='功能刀具名称')
|
||||
functional_tool_name_id = fields.Many2one('sf.functional.tool.assembly', domain=[('assemble_status', '=', '1')],
|
||||
string='功能刀具名称')
|
||||
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', store=True,
|
||||
related='functional_tool_name_id.functional_tool_type_id')
|
||||
related='functional_tool_name_id.after_assembly_functional_tool_type_id')
|
||||
|
||||
tool_position_interface_type = fields.Selection(
|
||||
[('BT刀柄式', 'BT刀柄式'), ('SK刀柄式', 'SK刀柄式'), ('HSK刀柄式', 'HSK刀柄式'),
|
||||
@@ -403,11 +425,6 @@ class MachineTableToolChangingApply(models.Model):
|
||||
if len(records) > 1:
|
||||
raise ValidationError('该刀位号已存在,请重新选择!!!')
|
||||
|
||||
@api.model
|
||||
def _read_group_names(self, categories, domain, order):
|
||||
names = categories._search([], order=order, access_rights_uid=SUPERUSER_ID)
|
||||
return categories.browse(names)
|
||||
|
||||
@api.constrains('functional_tool_status')
|
||||
def automation_apply_for_tool_change(self):
|
||||
"""
|
||||
@@ -520,7 +537,7 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
|
||||
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=False)
|
||||
diameter = fields.Integer(string='刀具直径(mm)', readonly=False)
|
||||
tool_included_angle = fields.Float(string='刀尖R角(mm)', readonly=False)
|
||||
tool_loading_length = fields.Float(string='装刀长(mm)', readonly=False)
|
||||
tool_loading_length = fields.Float(strin='总长度(mm)', readonly=False)
|
||||
extension_length = fields.Float(string='伸出长(mm)')
|
||||
effective_length = fields.Float(string='有效长(mm)')
|
||||
new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=False, default='0')
|
||||
@@ -608,7 +625,7 @@ class FunctionalToolAssembly(models.Model):
|
||||
knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', readonly=True)
|
||||
coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=True)
|
||||
new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True)
|
||||
tool_loading_length = fields.Float(string='装刀长(mm)', readonly=True)
|
||||
tool_loading_length = fields.Float(strin='总长度(mm)', readonly=True)
|
||||
functional_tool_length = fields.Float(string='伸出长(mm)', readonly=True)
|
||||
effective_length = fields.Float(string='有效长(mm)', readonly=True)
|
||||
loading_task_source = fields.Selection([('0', 'CAM装刀'), ('1', '机台换刀'), ('2', '按库存组装')],
|
||||
@@ -640,91 +657,52 @@ class FunctionalToolAssembly(models.Model):
|
||||
# 整体式刀具型号
|
||||
integral_code_id = fields.Many2one('stock.lot', string='整体式刀具序列号', readonly=True)
|
||||
cutting_tool_integral_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='整体式刀具型号',
|
||||
readonly=True)
|
||||
integral_name = fields.Char('整体式刀具名称', readonly=True, compute='_compute_auto_fill')
|
||||
sf_tool_brand_id_1 = fields.Many2one('sf.machine.brand', string='整体式刀具品牌', readonly=True)
|
||||
related='integral_code_id.product_id.cutting_tool_model_id')
|
||||
integral_name = fields.Char('整体式刀具名称', related='integral_code_id.product_id.name')
|
||||
integral_specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='整体式刀具规格',
|
||||
related='integral_code_id.product_id.specification_id')
|
||||
sf_tool_brand_id_1 = fields.Many2one('sf.machine.brand', string='整体式刀具品牌',
|
||||
related='integral_code_id.product_id.brand_id')
|
||||
# 刀片型号
|
||||
blade_code_id = fields.Many2one('stock.lot', '刀片序列号', readonly=True)
|
||||
cutting_tool_blade_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀片型号', readonly=True)
|
||||
blade_name = fields.Char('刀片名称', readonly=True, compute='_compute_auto_fill')
|
||||
sf_tool_brand_id_2 = fields.Many2one('sf.machine.brand', '刀片品牌', readonly=True)
|
||||
cutting_tool_blade_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀片型号',
|
||||
related='blade_code_id.product_id.cutting_tool_model_id')
|
||||
blade_name = fields.Char('刀片名称', related='blade_code_id.product_id.name')
|
||||
blade_specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='刀片规格',
|
||||
related='blade_code_id.product_id.specification_id')
|
||||
sf_tool_brand_id_2 = fields.Many2one('sf.machine.brand', '刀片品牌', related='blade_code_id.product_id.brand_id')
|
||||
# 刀杆型号
|
||||
bar_code_id = fields.Many2one('stock.lot', '刀杆序列号', readonly=True)
|
||||
cutting_tool_cutterbar_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀杆型号',
|
||||
readonly=True)
|
||||
bar_name = fields.Char('刀杆名称', readonly=True, compute='_compute_auto_fill')
|
||||
sf_tool_brand_id_3 = fields.Many2one('sf.machine.brand', '刀杆品牌', readonly=True)
|
||||
related='bar_code_id.product_id.cutting_tool_model_id')
|
||||
bar_name = fields.Char('刀杆名称', related='bar_code_id.product_id.name')
|
||||
bar_specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='刀杆规格',
|
||||
related='bar_code_id.product_id.specification_id')
|
||||
sf_tool_brand_id_3 = fields.Many2one('sf.machine.brand', '刀杆品牌', related='bar_code_id.product_id.brand_id')
|
||||
# 刀盘型号
|
||||
pad_code_id = fields.Many2one('stock.lot', '刀盘序列号', readonly=True)
|
||||
cutting_tool_cutterpad_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀盘型号',
|
||||
readonly=True)
|
||||
pad_name = fields.Char('刀盘名称', readonly=True, compute='_compute_auto_fill')
|
||||
sf_tool_brand_id_4 = fields.Many2one('sf.machine.brand', '刀盘品牌', readonly=True)
|
||||
related='pad_code_id.product_id.cutting_tool_model_id')
|
||||
pad_name = fields.Char('刀盘名称', related='pad_code_id.product_id.name')
|
||||
pad_specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='刀盘规格',
|
||||
related='pad_code_id.product_id.specification_id')
|
||||
sf_tool_brand_id_4 = fields.Many2one('sf.machine.brand', '刀盘品牌', related='pad_code_id.product_id.brand_id')
|
||||
# 刀柄型号
|
||||
handle_code_id = fields.Many2one('stock.lot', '刀柄序列号', readonly=True)
|
||||
cutting_tool_cutterhandle_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀柄型号',
|
||||
readonly=True)
|
||||
handle_name = fields.Char('刀柄名称', readonly=True, compute='_compute_auto_fill')
|
||||
sf_tool_brand_id_5 = fields.Many2one('sf.machine.brand', '刀柄品牌', readonly=True)
|
||||
related='handle_code_id.product_id.cutting_tool_model_id')
|
||||
handle_name = fields.Char('刀柄名称', related='handle_code_id.product_id.name')
|
||||
handle_specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='刀柄规格',
|
||||
related='handle_code_id.product_id.specification_id')
|
||||
sf_tool_brand_id_5 = fields.Many2one('sf.machine.brand', '刀柄品牌', related='handle_code_id.product_id.brand_id')
|
||||
# 夹头型号
|
||||
chuck_code_id = fields.Many2one('stock.lot', '夹头序列号', readonly=True)
|
||||
cutting_tool_cutterhead_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='夹头型号',
|
||||
readonly=True)
|
||||
chuck_name = fields.Char('夹头名称', readonly=True, compute='_compute_auto_fill')
|
||||
sf_tool_brand_id_6 = fields.Many2one('sf.machine.brand', '夹头品牌', readonly=True)
|
||||
|
||||
@api.depends('integral_code_id', 'blade_code_id', 'bar_code_id', 'pad_code_id', 'handle_code_id', 'chuck_code_id')
|
||||
def _compute_auto_fill(self):
|
||||
for record in self:
|
||||
if record.integral_code_id:
|
||||
print(record.integral_code_id.product_id)
|
||||
record.cutting_tool_integral_model_id = record.integral_code_id.product_id.cutting_tool_model_id.id
|
||||
record.integral_name = record.integral_code_id.product_id.name
|
||||
record.sf_tool_brand_id_1 = record.integral_code_id.product_id.brand_id.id
|
||||
else:
|
||||
record.cutting_tool_integral_model_id = None
|
||||
record.integral_name = None
|
||||
record.sf_tool_brand_id_1 = None
|
||||
if record.blade_code_id:
|
||||
record.cutting_tool_blade_model_id = record.blade_code_id.product_id.cutting_tool_model_id.id
|
||||
record.blade_name = record.blade_code_id.product_id.name
|
||||
record.sf_tool_brand_id_2 = record.blade_code_id.product_id.brand_id.id
|
||||
else:
|
||||
record.cutting_tool_blade_model_id = None
|
||||
record.blade_name = None
|
||||
record.sf_tool_brand_id_2 = None
|
||||
if record.bar_code_id:
|
||||
record.cutting_tool_cutterbar_model_id = record.bar_code_id.product_id.cutting_tool_model_id.id
|
||||
record.bar_name = record.bar_code_id.product_id.name
|
||||
record.sf_tool_brand_id_3 = record.bar_code_id.product_id.brand_id.id
|
||||
else:
|
||||
record.cutting_tool_cutterbar_model_id = None
|
||||
record.bar_name = None
|
||||
record.sf_tool_brand_id_3 = None
|
||||
if record.pad_code_id:
|
||||
record.cutting_tool_cutterpad_model_id = record.pad_code_id.product_id.cutting_tool_model_id.id
|
||||
record.pad_name = record.pad_code_id.product_id.name
|
||||
record.sf_tool_brand_id_4 = record.pad_code_id.product_id.brand_id.id
|
||||
else:
|
||||
record.cutting_tool_cutterpad_model_id = None
|
||||
record.pad_name = None
|
||||
record.sf_tool_brand_id_4 = None
|
||||
if record.handle_code_id:
|
||||
record.cutting_tool_cutterhandle_model_id = record.handle_code_id.product_id.cutting_tool_model_id.id
|
||||
record.handle_name = record.handle_code_id.product_id.name
|
||||
record.sf_tool_brand_id_5 = record.handle_code_id.product_id.brand_id.id
|
||||
else:
|
||||
record.cutting_tool_cutterhandle_model_id = None
|
||||
record.handle_name = None
|
||||
record.sf_tool_brand_id_5 = None
|
||||
if record.chuck_code_id:
|
||||
record.cutting_tool_cutterhead_model_id = record.chuck_code_id.product_id.cutting_tool_model_id.id
|
||||
record.chuck_name = record.chuck_code_id.product_id.name
|
||||
record.sf_tool_brand_id_6 = record.chuck_code_id.product_id.brand_id.id
|
||||
else:
|
||||
record.cutting_tool_cutterhead_model_id = None
|
||||
record.chuck_name = None
|
||||
record.sf_tool_brand_id_6 = None
|
||||
related='chuck_code_id.product_id.cutting_tool_model_id')
|
||||
chuck_name = fields.Char('夹头名称', related='chuck_code_id.product_id.name')
|
||||
chuck_specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='夹头规格',
|
||||
related='chuck_code_id.product_id.specification_id')
|
||||
sf_tool_brand_id_6 = fields.Many2one('sf.machine.brand', '夹头品牌', related='chuck_code_id.product_id.brand_id')
|
||||
|
||||
# 组装功能刀具参数信息
|
||||
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True)
|
||||
@@ -744,7 +722,7 @@ class FunctionalToolAssembly(models.Model):
|
||||
after_assembly_max_lifetime_value = fields.Integer(string='组装后最大寿命值(min)', readonly=True)
|
||||
after_assembly_alarm_value = fields.Integer(string='组装后报警值(min)', readonly=True)
|
||||
after_assembly_used_value = fields.Integer(string='组装后已使用值(min)', readonly=True)
|
||||
after_assembly_tool_loading_length = fields.Float(string='组装后装刀长(mm)', readonly=True)
|
||||
after_assembly_tool_loading_length = fields.Float(string='组装后总长度(mm)', readonly=True)
|
||||
after_assembly_functional_tool_length = fields.Float(string='组装后伸出长(mm)', readonly=True)
|
||||
after_assembly_effective_length = fields.Float(string='组装后有效长(mm)', readonly=True)
|
||||
L_D_number = fields.Float(string='L/D值(mm)', readonly=True)
|
||||
|
||||
@@ -156,9 +156,10 @@
|
||||
<field name="effective_length"/>
|
||||
<field name="L_D_number"/>
|
||||
<field name="hiding_length"/>
|
||||
<field name="cut_time"/>
|
||||
<field name="cut_length"/>
|
||||
<field name="cut_number"/>
|
||||
<field name="new_former"/>
|
||||
<field name="cut_time" attrs="{'invisible': [('new_former','=','0')]}"/>
|
||||
<field name="cut_length" attrs="{'invisible': [('new_former','=','0')]}"/>
|
||||
<field name="cut_number" attrs="{'invisible': [('new_former','=','0')]}"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
@@ -990,7 +991,7 @@
|
||||
string="最大寿命值(min)"/>
|
||||
<field name="after_assembly_alarm_value" string="报警值(min)"/>
|
||||
<field name="after_assembly_used_value" string="已使用值(min)"/>
|
||||
<field name="after_assembly_tool_loading_length" string="装刀长(mm)"/>
|
||||
<field name="after_assembly_tool_loading_length" string="总长度(mm)"/>
|
||||
<field name="after_assembly_functional_tool_length"
|
||||
string="伸出长(mm)"/>
|
||||
<field name="after_assembly_effective_length" string="有效长(mm)"/>
|
||||
@@ -1011,6 +1012,7 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="handle_name" string="名称"/>
|
||||
<field name="cutting_tool_cutterhandle_model_id" string="型号"/>
|
||||
<field name="handle_specification_id" string="规格"/>
|
||||
<field name="sf_tool_brand_id_5" string="品牌"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -1023,6 +1025,7 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="integral_name" string="名称"/>
|
||||
<field name="cutting_tool_integral_model_id" string="型号"/>
|
||||
<field name="integral_specification_id" string="规格"/>
|
||||
<field name="sf_tool_brand_id_1" string="品牌"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -1035,6 +1038,7 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="blade_name" string="名称"/>
|
||||
<field name="cutting_tool_blade_model_id" string="型号"/>
|
||||
<field name="blade_specification_id" string="规格"/>
|
||||
<field name="sf_tool_brand_id_2" string="品牌"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -1050,6 +1054,7 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="chuck_name" string="名称"/>
|
||||
<field name="cutting_tool_cutterhead_model_id" string="型号"/>
|
||||
<field name="chuck_specification_id" string="规格"/>
|
||||
<field name="sf_tool_brand_id_6" string="品牌"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -1064,6 +1069,7 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="bar_name" string="名称"/>
|
||||
<field name="cutting_tool_cutterbar_model_id" string="型号"/>
|
||||
<field name="bar_specification_id" string="规格"/>
|
||||
<field name="sf_tool_brand_id_3" string="品牌"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -1078,6 +1084,7 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="pad_name" string="名称"/>
|
||||
<field name="cutting_tool_cutterpad_model_id" string="型号"/>
|
||||
<field name="pad_specification_id" string="规格"/>
|
||||
<field name="sf_tool_brand_id_4" string="品牌"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from datetime import timedelta
|
||||
from datetime import timedelta, datetime
|
||||
|
||||
from odoo import fields, models, api
|
||||
from odoo.exceptions import ValidationError
|
||||
@@ -35,23 +35,34 @@ class ToolChangeRequirementInformation(models.TransientModel):
|
||||
replacement_tool_name = fields.Char(string='待换功能刀具名称', required=True)
|
||||
replacement_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='待换功能刀具类型')
|
||||
replacement_diameter = fields.Integer(string='待换刀具直径(mm)')
|
||||
replacement_knife_tip_r_angle = fields.Float(string='待换刀具刀尖R角(mm)')
|
||||
replacement_tool_setting_length = fields.Float(string='待换刀具装刀长(mm)')
|
||||
replacement_knife_tip_r_angle = fields.Float(string='待换刀具刀尖R角(mm)', requride=True)
|
||||
replacement_tool_setting_length = fields.Float(string='待换刀具总长度(mm)', requride=True)
|
||||
replacement_extension_length = fields.Float(string='待换刀具伸出长(mm)')
|
||||
replacement_effective_length = fields.Float(string='待换刀具有效长(mm)')
|
||||
replacement_tool_coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')],
|
||||
replacement_tool_coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], requride=True,
|
||||
string='待换刀具粗/中/精', default='3')
|
||||
|
||||
replacement_max_lifetime_value = fields.Integer(string='待换刀具最大寿命值(min)')
|
||||
replacement_alarm_value = fields.Integer(string='待换刀具报警值(min)')
|
||||
replacement_used_value = fields.Integer(string='待换刀具已使用值(min)')
|
||||
new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', default='0')
|
||||
new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', default='0', requride=True)
|
||||
replacement_whether_standard_knife = fields.Boolean(string='待换刀具是否标准刀', default=True)
|
||||
used_tool_time = fields.Datetime(string='用刀时间',
|
||||
default=lambda self: fields.Datetime.now() + timedelta(hours=4))
|
||||
applicant = fields.Char(string='申请人', default=lambda self: self.env.user.name, readonly=True)
|
||||
reason_for_applying = fields.Char(string='申请原因')
|
||||
|
||||
@api.constrains('replacement_knife_tip_r_angle', 'replacement_diameter', 'replacement_tool_coarse_middle_thin',
|
||||
'new_former')
|
||||
def _check_length_or_diamenter(self):
|
||||
for obj in self:
|
||||
if obj.replacement_diameter == 0 and obj.replacement_knife_tip_r_angle == 0:
|
||||
raise ValidationError('待换功能刀具信息【刀具直径】和【刀尖R角】不能同时为0!!!')
|
||||
if not obj.new_former:
|
||||
raise ValidationError('待换功能刀具信息【新/旧】不能位空!!!')
|
||||
if not obj.replacement_tool_coarse_middle_thin:
|
||||
raise ValidationError('待换功能刀具信息【粗/中/精】不能位空!!!')
|
||||
|
||||
def tool_changing_apply(self):
|
||||
"""
|
||||
确认换刀申请(按键)
|
||||
@@ -173,7 +184,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', readonly=True)
|
||||
coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=True)
|
||||
new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True)
|
||||
tool_loading_length = fields.Float(string='装刀长(mm)', readonly=True)
|
||||
tool_loading_length = fields.Float(string='总长度(mm)', readonly=True)
|
||||
functional_tool_length = fields.Float(string='伸出长(mm)', readonly=True)
|
||||
effective_length = fields.Float(string='有效长(mm)', readonly=True)
|
||||
loading_task_source = fields.Selection([('0', 'CAM装刀'), ('1', '机台换刀'), ('2', '按库存组装')],
|
||||
@@ -202,18 +213,24 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
('quant_ids.location_id.name', 'in', ['刀具房']),
|
||||
('quant_ids.quantity', '>', 0)])
|
||||
cutting_tool_integral_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='整体式刀具型号',
|
||||
readonly=True)
|
||||
integral_name = fields.Char('整体式刀具名称', readonly=True)
|
||||
sf_tool_brand_id_1 = fields.Many2one('sf.machine.brand', string='整体式刀具品牌', readonly=True)
|
||||
related='integral_code_id.product_id.cutting_tool_model_id')
|
||||
integral_name = fields.Char('整体式刀具名称', related='integral_code_id.product_id.name')
|
||||
integral_specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='整体式刀具规格',
|
||||
related='integral_code_id.product_id.specification_id')
|
||||
sf_tool_brand_id_1 = fields.Many2one('sf.machine.brand', string='整体式刀具品牌',
|
||||
related='integral_code_id.product_id.brand_id')
|
||||
|
||||
# 刀片型号
|
||||
blade_code_id = fields.Many2one('stock.lot', '刀片序列号',
|
||||
domain=[('product_id.cutting_tool_material_id.name', '=', '刀片'),
|
||||
('quant_ids.location_id.name', 'in', ['刀具房']),
|
||||
('quant_ids.quantity', '>', 0)])
|
||||
cutting_tool_blade_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀片型号', readonly=True)
|
||||
blade_name = fields.Char('刀片名称', readonly=True)
|
||||
sf_tool_brand_id_2 = fields.Many2one('sf.machine.brand', '刀片品牌', readonly=True)
|
||||
cutting_tool_blade_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀片型号',
|
||||
related='blade_code_id.product_id.cutting_tool_model_id')
|
||||
blade_name = fields.Char('刀片名称', related='blade_code_id.product_id.name')
|
||||
blade_specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='刀片规格',
|
||||
related='blade_code_id.product_id.specification_id')
|
||||
sf_tool_brand_id_2 = fields.Many2one('sf.machine.brand', '刀片品牌', related='blade_code_id.product_id.brand_id')
|
||||
|
||||
# 刀杆型号
|
||||
bar_code_id = fields.Many2one('stock.lot', '刀杆序列号',
|
||||
@@ -221,9 +238,11 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
('quant_ids.location_id.name', 'in', ['刀具房']),
|
||||
('quant_ids.quantity', '>', 0)])
|
||||
cutting_tool_cutterbar_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀杆型号',
|
||||
readonly=True)
|
||||
bar_name = fields.Char('刀杆名称', readonly=True)
|
||||
sf_tool_brand_id_3 = fields.Many2one('sf.machine.brand', '刀杆品牌', readonly=True)
|
||||
related='bar_code_id.product_id.cutting_tool_model_id')
|
||||
bar_name = fields.Char('刀杆名称', related='bar_code_id.product_id.name')
|
||||
bar_specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='刀杆规格',
|
||||
related='bar_code_id.product_id.specification_id')
|
||||
sf_tool_brand_id_3 = fields.Many2one('sf.machine.brand', '刀杆品牌', related='bar_code_id.product_id.brand_id')
|
||||
|
||||
# 刀盘型号
|
||||
pad_code_id = fields.Many2one('stock.lot', '刀盘序列号',
|
||||
@@ -231,9 +250,11 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
('quant_ids.location_id.name', 'in', ['刀具房']),
|
||||
('quant_ids.quantity', '>', 0)])
|
||||
cutting_tool_cutterpad_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀盘型号',
|
||||
readonly=True)
|
||||
pad_name = fields.Char('刀盘名称', readonly=True)
|
||||
sf_tool_brand_id_4 = fields.Many2one('sf.machine.brand', '刀盘品牌', readonly=True)
|
||||
related='pad_code_id.product_id.cutting_tool_model_id')
|
||||
pad_name = fields.Char('刀盘名称', related='pad_code_id.product_id.name')
|
||||
pad_specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='刀盘规格',
|
||||
related='pad_code_id.product_id.specification_id')
|
||||
sf_tool_brand_id_4 = fields.Many2one('sf.machine.brand', '刀盘品牌', related='pad_code_id.product_id.brand_id')
|
||||
|
||||
# 刀柄型号
|
||||
handle_code_id = fields.Many2one('stock.lot', '刀柄序列号', required=True,
|
||||
@@ -241,9 +262,11 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
('quant_ids.location_id.name', 'in', ['刀具房']),
|
||||
('quant_ids.quantity', '>', 0)])
|
||||
cutting_tool_cutterhandle_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀柄型号',
|
||||
readonly=True)
|
||||
handle_name = fields.Char('刀柄名称', readonly=True)
|
||||
sf_tool_brand_id_5 = fields.Many2one('sf.machine.brand', '刀柄品牌', readonly=True)
|
||||
related='handle_code_id.product_id.cutting_tool_model_id')
|
||||
handle_name = fields.Char('刀柄名称', related='handle_code_id.product_id.name')
|
||||
handle_specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='刀柄规格',
|
||||
related='handle_code_id.product_id.specification_id')
|
||||
sf_tool_brand_id_5 = fields.Many2one('sf.machine.brand', '刀柄品牌', related='handle_code_id.product_id.brand_id')
|
||||
|
||||
# 夹头型号
|
||||
chuck_code_id = fields.Many2one('stock.lot', '夹头序列号', required=True,
|
||||
@@ -251,9 +274,11 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
('quant_ids.location_id.name', 'in', ['刀具房']),
|
||||
('quant_ids.quantity', '>', 0)])
|
||||
cutting_tool_cutterhead_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='夹头型号',
|
||||
readonly=True)
|
||||
chuck_name = fields.Char('夹头名称', readonly=True, compute='_compute_auto_fill')
|
||||
sf_tool_brand_id_6 = fields.Many2one('sf.machine.brand', '夹头品牌', readonly=True)
|
||||
related='chuck_code_id.product_id.cutting_tool_model_id')
|
||||
chuck_name = fields.Char('夹头名称', related='chuck_code_id.product_id.name')
|
||||
chuck_specification_id = fields.Many2one('sf.tool.materials.basic.parameters', string='夹头规格',
|
||||
related='chuck_code_id.product_id.specification_id')
|
||||
sf_tool_brand_id_6 = fields.Many2one('sf.machine.brand', '夹头品牌', related='chuck_code_id.product_id.brand_id')
|
||||
|
||||
def on_barcode_scanned(self, barcode):
|
||||
"""
|
||||
@@ -280,63 +305,12 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
else:
|
||||
raise ValidationError('扫描的刀具物料不存在,请重新扫描!')
|
||||
|
||||
@api.depends('integral_code_id', 'blade_code_id', 'bar_code_id', 'pad_code_id', 'handle_code_id', 'chuck_code_id')
|
||||
def _compute_auto_fill(self):
|
||||
for record in self:
|
||||
if record.integral_code_id:
|
||||
record.cutting_tool_integral_model_id = record.integral_code_id.product_id.cutting_tool_model_id.id
|
||||
record.integral_name = record.integral_code_id.product_id.name
|
||||
record.sf_tool_brand_id_1 = record.integral_code_id.product_id.brand_id.id
|
||||
else:
|
||||
record.cutting_tool_integral_model_id = None
|
||||
record.integral_name = None
|
||||
record.sf_tool_brand_id_1 = None
|
||||
if record.blade_code_id:
|
||||
record.cutting_tool_blade_model_id = record.blade_code_id.product_id.cutting_tool_model_id.id
|
||||
record.blade_name = record.blade_code_id.product_id.name
|
||||
record.sf_tool_brand_id_2 = record.blade_code_id.product_id.brand_id.id
|
||||
else:
|
||||
record.cutting_tool_blade_model_id = None
|
||||
record.blade_name = None
|
||||
record.sf_tool_brand_id_2 = None
|
||||
if record.bar_code_id:
|
||||
record.cutting_tool_cutterbar_model_id = record.bar_code_id.product_id.cutting_tool_model_id.id
|
||||
record.bar_name = record.bar_code_id.product_id.name
|
||||
record.sf_tool_brand_id_3 = record.bar_code_id.product_id.brand_id.id
|
||||
else:
|
||||
record.cutting_tool_cutterbar_model_id = None
|
||||
record.bar_name = None
|
||||
record.sf_tool_brand_id_3 = None
|
||||
if record.pad_code_id:
|
||||
record.cutting_tool_cutterpad_model_id = record.pad_code_id.product_id.cutting_tool_model_id.id
|
||||
record.pad_name = record.pad_code_id.product_id.name
|
||||
record.sf_tool_brand_id_4 = record.pad_code_id.product_id.brand_id.id
|
||||
else:
|
||||
record.cutting_tool_cutterpad_model_id = None
|
||||
record.pad_name = None
|
||||
record.sf_tool_brand_id_4 = None
|
||||
if record.handle_code_id:
|
||||
record.cutting_tool_cutterhandle_model_id = record.handle_code_id.product_id.cutting_tool_model_id.id
|
||||
record.handle_name = record.handle_code_id.product_id.name
|
||||
record.sf_tool_brand_id_5 = record.handle_code_id.product_id.brand_id.id
|
||||
else:
|
||||
record.cutting_tool_cutterhandle_model_id = None
|
||||
record.handle_name = None
|
||||
record.sf_tool_brand_id_5 = None
|
||||
if record.chuck_code_id:
|
||||
record.cutting_tool_cutterhead_model_id = record.chuck_code_id.product_id.cutting_tool_model_id.id
|
||||
record.chuck_name = record.chuck_code_id.product_id.name
|
||||
record.sf_tool_brand_id_6 = record.chuck_code_id.product_id.brand_id.id
|
||||
else:
|
||||
record.cutting_tool_cutterhead_model_id = None
|
||||
record.chuck_name = None
|
||||
record.sf_tool_brand_id_6 = None
|
||||
|
||||
# 组装功能刀具参数信息
|
||||
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号')
|
||||
after_assembly_functional_tool_name = fields.Char(string='组装后功能刀具名称', required=True)
|
||||
after_assembly_functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model',
|
||||
string='组装后功能刀具类型')
|
||||
string='组装后功能刀具类型',
|
||||
compute='_compute_after_assembly_functional_tool_type_id')
|
||||
after_assembly_functional_tool_diameter = fields.Integer(string='组装后功能刀具直径(mm)')
|
||||
after_assembly_knife_tip_r_angle = fields.Float(string='组装后刀尖R角(mm)')
|
||||
after_assembly_new_former = fields.Selection([('0', '新'), ('1', '旧')], string='组装后新/旧', default='0')
|
||||
@@ -350,14 +324,54 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
after_assembly_max_lifetime_value = fields.Integer(string='组装后最大寿命值(min)')
|
||||
after_assembly_alarm_value = fields.Integer(string='组装后报警值(min)')
|
||||
after_assembly_used_value = fields.Integer(string='组装后已使用值(min)')
|
||||
after_assembly_tool_loading_length = fields.Float(string='组装后装刀长(mm)')
|
||||
after_assembly_functional_tool_length = fields.Float(string='组装后伸出长(mm)')
|
||||
after_assembly_tool_loading_length = fields.Float(string='组装后总长度(mm)')
|
||||
after_assembly_functional_tool_length = fields.Float(string='组装后伸出长(mm)', required=True)
|
||||
after_assembly_effective_length = fields.Float(string='组装后有效长(mm)')
|
||||
L_D_number = fields.Float(string='L/D值(mm)')
|
||||
L_D_number = fields.Float(string='L/D值(mm)', compute='_compute_l_d_number')
|
||||
hiding_length = fields.Float(string='避空长(mm)')
|
||||
|
||||
functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False)
|
||||
|
||||
@api.onchange('integral_code_id')
|
||||
def _onchange_after_assembly_functional_tool_diameter(self):
|
||||
for obj in self:
|
||||
if obj.integral_code_id:
|
||||
obj.after_assembly_functional_tool_diameter = obj.integral_code_id.product_id.cutting_tool_blade_diameter
|
||||
else:
|
||||
obj.after_assembly_functional_tool_diameter = 0
|
||||
|
||||
@api.onchange('blade_code_id')
|
||||
def _onchange_after_assembly_knife_tip_r_angle(self):
|
||||
for obj in self:
|
||||
if obj.blade_code_id:
|
||||
obj.after_assembly_knife_tip_r_angle = obj.blade_code_id.product_id.cutting_tool_blade_tip_circular_arc_radius
|
||||
else:
|
||||
obj.after_assembly_knife_tip_r_angle = 0
|
||||
|
||||
@api.depends('functional_tool_type_id')
|
||||
def _compute_after_assembly_functional_tool_type_id(self):
|
||||
for obj in self:
|
||||
if obj.functional_tool_type_id:
|
||||
obj.after_assembly_functional_tool_type_id = obj.functional_tool_type_id
|
||||
else:
|
||||
obj.after_assembly_functional_tool_type_id = None
|
||||
|
||||
@api.depends('hiding_length', 'after_assembly_functional_tool_diameter')
|
||||
def _compute_l_d_number(self):
|
||||
for record in self:
|
||||
if record.hiding_length != 0 and record.after_assembly_functional_tool_diameter != 0:
|
||||
record.L_D_number = record.hiding_length / record.after_assembly_functional_tool_diameter
|
||||
else:
|
||||
record.L_D_number = 0
|
||||
|
||||
@api.constrains('after_assembly_tool_loading_length', 'after_assembly_functional_tool_length')
|
||||
def _check_length_control(self):
|
||||
for obj in self:
|
||||
if obj.after_assembly_tool_loading_length == 0:
|
||||
raise ValidationError('组装参数信息【总长度】不能为0!!!')
|
||||
if obj.after_assembly_functional_tool_length == 0:
|
||||
raise ValidationError('组装参数信息【伸出长】不能为0!!!')
|
||||
|
||||
def functional_tool_assembly(self):
|
||||
"""
|
||||
功能刀具组装
|
||||
@@ -378,7 +392,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
# 创建功能刀具批次/序列号记录
|
||||
stock_lot = product_id.create_assemble_warehouse_receipt(self.id, functional_tool_assembly)
|
||||
# 创建刀具组装入库单
|
||||
self.create_stocking_picking(stock_lot, functional_tool_assembly)
|
||||
self.env['stock.picking'].create_stocking_picking(stock_lot, functional_tool_assembly)
|
||||
# 刀具物料出库
|
||||
if self.integral_code_id:
|
||||
product_id.tool_material_stock_moves(self.integral_code_id)
|
||||
@@ -436,26 +450,6 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
if not self.bar_code_id and not self.pad_code_id:
|
||||
raise ValidationError('【刀盘】和【刀杆】必须填写一个!')
|
||||
|
||||
def create_stocking_picking(self, stock_lot, functional_tool_assembly):
|
||||
"""
|
||||
创建刀具组装入库单
|
||||
"""
|
||||
# 获取名称为刀具组装入库的作业类型
|
||||
picking_type_id = self.env['stock.picking.type'].sudo().search([('name', '=', '刀具组装入库')])
|
||||
# 创建刀具组装入库单
|
||||
picking_id = self.env['stock.picking'].create({
|
||||
'picking_type_id': picking_type_id.id
|
||||
})
|
||||
# 创建作业详情对象记录,并绑定到刀具组装入库单
|
||||
self.env['stock.move.line'].create({
|
||||
'picking_id': picking_id.id,
|
||||
'product_id': stock_lot.product_id.id,
|
||||
'lot_id': stock_lot.id,
|
||||
'functional_tool_name_id': functional_tool_assembly.id
|
||||
})
|
||||
# 将刀具组装入库单的状态更改为就绪
|
||||
picking_id.action_confirm()
|
||||
|
||||
def get_desc_1(self, stock_lot):
|
||||
return {
|
||||
'barcode_id': stock_lot.id,
|
||||
@@ -523,6 +517,50 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
}
|
||||
|
||||
|
||||
class StockPicking(models.Model):
|
||||
_inherit = 'stock.picking'
|
||||
|
||||
def create_stocking_picking(self, stock_lot, functional_tool_assembly):
|
||||
"""
|
||||
创建刀具组装入库单
|
||||
"""
|
||||
# 获取名称为刀具组装入库的作业类型
|
||||
picking_type_id = self.env['stock.picking.type'].sudo().search([('name', '=', '刀具组装入库')])
|
||||
# 创建刀具组装入库单
|
||||
picking_id = self.env['stock.picking'].create({
|
||||
'name': self._get_name_stock(picking_type_id),
|
||||
'picking_type_id': picking_type_id.id,
|
||||
'location_id': picking_type_id.default_location_src_id.id,
|
||||
'location_dest_id': picking_type_id.default_location_dest_id.id,
|
||||
})
|
||||
# 创建作业详情对象记录,并绑定到刀具组装入库单
|
||||
self.env['stock.move.line'].create({
|
||||
'picking_id': picking_id.id,
|
||||
'product_id': stock_lot.product_id.id,
|
||||
'lot_id': stock_lot.id,
|
||||
'qty_done': 1,
|
||||
'functional_tool_name_id': functional_tool_assembly.id
|
||||
})
|
||||
# 将刀具组装入库单的状态更改为就绪
|
||||
picking_id.action_confirm()
|
||||
picking_id.button_validate()
|
||||
|
||||
def _get_name_stock(self, picking_type_id):
|
||||
name = picking_type_id.sequence_id.prefix + str(
|
||||
datetime.strptime(str(fields.Date.today()), "%Y-%m-%d").strftime("%Y%m%d"))
|
||||
stock_id = self.env['stock.picking'].sudo().search(
|
||||
[('name', 'like', name), ('picking_type_id', '=', picking_type_id.id)],
|
||||
limit=1,
|
||||
order="id desc"
|
||||
)
|
||||
if not stock_id:
|
||||
num = "%03d" % 1
|
||||
else:
|
||||
m = int(stock_id.name[-3:]) + 1
|
||||
num = "%03d" % m
|
||||
return name + str(num)
|
||||
|
||||
|
||||
class ProductProduct(models.Model):
|
||||
_inherit = 'product.product'
|
||||
|
||||
@@ -553,7 +591,7 @@ class ProductProduct(models.Model):
|
||||
[('id', '=', tool_assembly_order_id)])
|
||||
code = 'JKM-T-' + str(tool_assembly_order.after_assembly_functional_tool_type_id.code) + '-' + str(
|
||||
tool_assembly_order.after_assembly_functional_tool_diameter) + '-'
|
||||
new_time = fields.Date.today()
|
||||
new_time = datetime.strptime(str(fields.Date.today()), "%Y-%m-%d").strftime("%Y%m%d")
|
||||
code += str(new_time) + '-'
|
||||
stock_lot_id = self.env['stock.lot'].sudo().search(
|
||||
[('name', 'like', new_time), ('product_id.name', '=', '功能刀具')],
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="replacement_diameter" string="刀具直径(mm)"/>
|
||||
<field name="replacement_knife_tip_r_angle" string="刀尖R角(mm)"/>
|
||||
<field name="replacement_tool_setting_length" string="装刀长(mm)"/>
|
||||
<field name="replacement_tool_setting_length" string="总长度(mm)"/>
|
||||
<field name="replacement_extension_length" string="伸出长(mm)"/>
|
||||
<field name="replacement_effective_length" string="有效长(mm)"/>
|
||||
<field name="replacement_tool_coarse_middle_thin" string="粗/中/精"/>
|
||||
@@ -206,14 +206,13 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
</group>
|
||||
</group>
|
||||
<group col="3">
|
||||
<group col="2">
|
||||
<group>
|
||||
<field name="integral_name" string="名称"/>
|
||||
<field name="integral_specification_id" string="规格"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="cutting_tool_integral_model_id" string="型号"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="sf_tool_brand_id_1" string="品牌"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -228,14 +227,13 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
</group>
|
||||
</group>
|
||||
<group col="3">
|
||||
<group col="2">
|
||||
<group>
|
||||
<field name="blade_name" string="名称"/>
|
||||
<field name="blade_specification_id" string="规格"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="cutting_tool_blade_model_id" string="型号"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="sf_tool_brand_id_2" string="品牌"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -251,14 +249,13 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
</group>
|
||||
</group>
|
||||
<group col="3">
|
||||
<group col="2">
|
||||
<group>
|
||||
<field name="bar_name" string="名称"/>
|
||||
<field name="bar_specification_id" string="规格"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="cutting_tool_cutterbar_model_id" string="型号"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="sf_tool_brand_id_3" string="品牌"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -274,14 +271,13 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
</group>
|
||||
</group>
|
||||
<group col="3">
|
||||
<group col="2">
|
||||
<group>
|
||||
<field name="pad_name" string="名称"/>
|
||||
<field name="pad_specification_id" string="规格"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="cutting_tool_cutterpad_model_id" string="型号"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="sf_tool_brand_id_4" string="品牌"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -296,14 +292,13 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
</group>
|
||||
</group>
|
||||
<group col="3">
|
||||
<group col="2">
|
||||
<group>
|
||||
<field name="handle_name" string="名称"/>
|
||||
<field name="handle_specification_id" string="规格"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="cutting_tool_cutterhandle_model_id" string="型号"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="sf_tool_brand_id_5" string="品牌"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -318,14 +313,13 @@
|
||||
options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
</group>
|
||||
</group>
|
||||
<group col="3">
|
||||
<group col="2">
|
||||
<group>
|
||||
<field name="chuck_name" string="名称"/>
|
||||
<field name="chuck_specification_id" string="规格"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="cutting_tool_cutterhead_model_id" string="型号"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="sf_tool_brand_id_6" string="品牌"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -341,9 +335,9 @@
|
||||
<field name="after_assembly_functional_tool_diameter" string="刀具直径(mm)"/>
|
||||
<field name="after_assembly_knife_tip_r_angle" string="刀尖R角(mm)"/>
|
||||
<field name="after_assembly_new_former" string="新/旧"/>
|
||||
<field name="cut_time"/>
|
||||
<field name="cut_length"/>
|
||||
<field name="cut_number"/>
|
||||
<field name="cut_time" attrs="{'invisible': [('after_assembly_new_former','=','0')]}"/>
|
||||
<field name="cut_length" attrs="{'invisible': [('after_assembly_new_former','=','0')]}"/>
|
||||
<field name="cut_number" attrs="{'invisible': [('after_assembly_new_former','=','0')]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="after_assembly_whether_standard_knife" string="是否标准刀"/>
|
||||
@@ -351,11 +345,11 @@
|
||||
<field name="after_assembly_max_lifetime_value" string="最大寿命值(min)"/>
|
||||
<field name="after_assembly_alarm_value" string="报警值(min)"/>
|
||||
<field name="after_assembly_used_value" string="已使用值(min)"/>
|
||||
<field name="after_assembly_tool_loading_length" string="装刀长(mm)"/>
|
||||
<field name="after_assembly_tool_loading_length" string="总长度(mm)"/>
|
||||
<field name="after_assembly_functional_tool_length" string="伸出长(mm)"/>
|
||||
<field name="after_assembly_effective_length" string="有效长(mm)"/>
|
||||
<field name="L_D_number"/>
|
||||
<field name="hiding_length"/>
|
||||
<field name="L_D_number"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
|
||||
Reference in New Issue
Block a user