1、删除功能刀具缓存对象,删除出库弹窗对像,删除功能刀具组装、机台换刀申请和CAM换刀的界面跳转按钮,并在form界面添加管理界面字段;2、优化组装单编码的生成;3、将刀具管理下所以功能刀具相关的模型中的功能刀具名称字段改为绑定功能刀具产品对象,编码改为序列号并绑定产品序列号对象,4、优化刀具管理下的功能刀具界面,5、优化从组装申请到组装完成所以流程功能

This commit is contained in:
JIKIMO-YXH\xianghui
2023-10-31 17:45:45 +08:00
parent deccb6e3cd
commit d429a8b4b8
6 changed files with 202 additions and 368 deletions

View File

@@ -11,14 +11,14 @@ class ToolChangeRequirementInformation(models.TransientModel):
name = fields.Many2one('maintenance.equipment', string='CNC机床', readonly=True)
machine_tool_code = fields.Char(string='机台号', readonly=True)
cutter_spacing_code = fields.Char(string='刀位号', readonly=True)
functional_tool_code = fields.Char(string='功能刀具编码', readonly=True)
functional_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=True)
# functional_tool_code = fields.Char(string='功能刀具编码', readonly=True)
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True)
functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称', readonly=True)
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True)
replacement_tool_code = fields.Char(string='待换功能刀具编码', readonly=True)
replacement_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='待换功能刀具名称')
replacement_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='待换功能刀具类型',
readonly=True)
# replacement_tool_code = fields.Char(string='待换功能刀具编码', readonly=True)
replacement_tool_name_id = fields.Many2one('product.product', string='待换功能刀具名称', )
replacement_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='待换功能刀具类型')
replacement_tool_coarse_middle_thin = fields.Selection([("1", ""), ('2', ''), ('3', '')],
string='粗/中/精')
new_former = fields.Selection([('0', ''), ('1', '')], string='新/旧')
@@ -27,12 +27,6 @@ class ToolChangeRequirementInformation(models.TransientModel):
reason_for_applying = fields.Char(string='申请原因')
remark = fields.Char(string='备注说明')
@api.onchange('replacement_tool_name_id')
def _onchange_replacement_tool_name_id(self):
for record in self:
if record:
record.replacement_tool_code = record.replacement_tool_name_id.code
record.replacement_tool_type_id = record.replacement_tool_name_id.mrs_cutting_tool_type_id.id
def tool_changing_apply(self):
"""
@@ -40,16 +34,16 @@ class ToolChangeRequirementInformation(models.TransientModel):
:return:
"""
# 将数据更新到机台换刀申请界面
print('已运行')
record = self.env['sf.machine.table.tool.changing.apply'].search(
[('name', '=', self.name.id),
('machine_tool_code', '=', self.machine_tool_code),
('cutter_spacing_code', '=', self.cutter_spacing_code),
])
print('运行record_1')
# 功能刀具组装创建新任务(new_assembly_task)
record_1 = self.env['sf.functional.tool.assembly'].sudo().create({
'functional_tool_code': self.replacement_tool_code,
'name': self.replacement_tool_name_id.id,
'functional_tool_name_id': self.replacement_tool_name_id.id,
'functional_tool_type_id': self.replacement_tool_type_id.id,
'loading_task_source': '1',
'applicant': self.applicant,
@@ -60,12 +54,13 @@ class ToolChangeRequirementInformation(models.TransientModel):
'cutter_spacing_code': self.cutter_spacing_code,
'sf_machine_table_tool_changing_apply_id': record.id,
})
print('record_1:', record_1)
# 封装数据
desc = {
'name': self.name.id,
'assembly_order_code': record_1.assembly_order_code,
'machine_tool_code': self.machine_tool_code,
'cutter_spacing_code': self.cutter_spacing_code,
'replacement_tool_code': self.replacement_tool_code,
'replacement_tool_name_id': self.replacement_tool_name_id.id,
'replacement_tool_type_id': self.replacement_tool_type_id.id,
'replacement_tool_coarse_middle_thin': self.replacement_tool_coarse_middle_thin,
@@ -77,7 +72,9 @@ class ToolChangeRequirementInformation(models.TransientModel):
'status': '1',
'sf_functional_tool_assembly_id': record_1.id,
}
print('运行record.write(desc)')
record.write(desc)
print('运行成功')
# 关闭弹出窗口
return {'type': 'ir.actions.act_window_close'}
@@ -90,8 +87,9 @@ class ToolTransferRequestInformation(models.TransientModel):
CNC_machine_table_id = fields.Many2one('sf.machine_tool', string='CNC机床', readonly=True)
machine_tool_code = fields.Char(string='机台号', readonly=True)
cutter_spacing_code = fields.Char(string='刀位号', readonly=True)
functional_tool_code = fields.Char(string='功能刀具编码', readonly=True)
functional_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=True)
# functional_tool_code = fields.Char(string='功能刀具编码', readonly=True)
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True)
functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称', readonly=True)
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True)
transfer_target = fields.Selection([('机台', '机台'),
('线边刀库', '线边刀库'),
@@ -125,8 +123,9 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
machine_tool_name_id = fields.Many2one('maintenance.equipment', string='机床名称', readonly=True)
machine_tool_code = fields.Char(string='机台号', readonly=True)
cutter_spacing_code = fields.Char(string='刀位号', readonly=True)
code = fields.Char(string='功能刀具编码', readonly=True)
functional_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=True)
# code = fields.Char(string='功能刀具编码', readonly=True)
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True)
functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称', readonly=True)
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True)
functional_tool_length = fields.Char(string='功能刀具伸出长(mm)', readonly=True)
effective_length = fields.Char(string='有效长(mm)', readonly=True)
@@ -274,7 +273,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
stock_lot = self.create_assemble_warehouse_receipt()
# 创建刀具组装入库单
self.create_stocking_picking(stock_lot)
print('已运行1')
desc_1 = {
'barcode_id': stock_lot.id,
'integral_code_id': self.integral_code_id.id,
@@ -294,17 +293,17 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
'tool_loading_person': self.env.user.name,
'tool_loading_time': fields.Datetime.now()
}
print('已运行2')
functional_tool_assembly = self.env['sf.functional.tool.assembly'].search([
('machine_tool_name_id', '=', self.machine_tool_name_id.id),
('cutter_spacing_code', '=', self.cutter_spacing_code),
('assemble_status', '=', '0'),
])
print('已运行3')
# 封装功能刀具数据
desc_2 = {
'code': self.code,
'name': self.functional_tool_name_id.name,
'barcode_id': stock_lot.id,
'functional_tool_name_id': self.functional_tool_name_id.id,
'mrs_cutting_tool_type_id': self.functional_tool_type_id.id,
'cutting_tool_integral_model_id': self.cutting_tool_integral_model_id.id,
'cutting_tool_blade_model_id': self.cutting_tool_blade_model_id.id,
@@ -324,58 +323,36 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
'applicable_range': None,
'image': None,
}
if self.new_former == '0':
record = self.env['sf.functional.cutting.tool.entity'].search([('code', '=', self.code)])
if record:
raise ValidationError("该编码的功能刀具已存在!")
else:
# 如果是新刀,则创建功能刀具列表、功能刀具预警、功能刀具实时分布、功能刀具出入库记录
record_1 = self.env['sf.functional.cutting.tool.entity'].create(desc_2)
self.env['sf.functional.tool.warning'].create({
'functional_cutting_tool_id': record_1.id,
'functional_tool_assembly_id': functional_tool_assembly.id,
'machine_table_name_id': self.machine_tool_name_id.id,
})
self.env['sf.real.time.distribution.of.functional.tools'].create({
'functional_cutting_tool_id': record_1.id
})
self.env['sf.inbound.and.outbound.records.of.functional.tools'].create({
'functional_cutting_tool_id': record_1.id
})
else:
record = self.env['sf.functional.cutting.tool.entity'].search([('code', '=', self.code)])
if not record:
raise ValidationError("该编码的功能刀具不存在!!!")
else:
# 创建功能刀具缓存信息
record1 = self.env['sf.functional.cutting.tool.entity.cache'].create({
'code': record.code,
'name': record.name,
'mrs_cutting_tool_type_id': record.mrs_cutting_tool_type_id.id,
'mrs_cutting_tool_model_id': record.mrs_cutting_tool_model_id.id,
'cutting_tool_integral_model_id': record.cutting_tool_integral_model_id.id,
'cutting_tool_blade_model_id': record.cutting_tool_blade_model_id.id,
'cutting_tool_cutterbar_model_id': record.cutting_tool_cutterbar_model_id.id,
'cutting_tool_cutterpad_model_id': record.cutting_tool_cutterpad_model_id.id,
'cutting_tool_cutterhandle_model_id': record.cutting_tool_cutterhandle_model_id.id,
'cutting_tool_cutterhead_model_id': record.cutting_tool_cutterhead_model_id.id,
'diameter': record.diameter,
'tool_grade': record.tool_grade,
'machining_accuracy': record.machining_accuracy,
'tool_length': record.tool_length,
'blade_number': record.blade_number,
'integral_blade_length': record.integral_blade_length,
'effective_blade_length': record.effective_blade_length,
'max_life': record.max_life,
'is_standard': record.is_standard,
'applicable_range': record.applicable_range,
'image': record.image,
})
# 修改功能刀具列表信息
self.env['sf.functional.cutting.tool.entity'].search([('code', '=', self.code)]).write(desc_2)
print('已运行4')
# 创建功能刀具列表、功能刀具预警、功能刀具实时分布、功能刀具出入库记录
record_1 = self.env['sf.functional.cutting.tool.entity'].create(desc_2)
print('已运行5')
self.env['sf.functional.tool.warning'].create({
'functional_cutting_tool_id': record_1.id,
'functional_tool_assembly_id': functional_tool_assembly.id,
'machine_table_name_id': self.machine_tool_name_id.id,
})
self.env['sf.real.time.distribution.of.functional.tools'].create({
'functional_cutting_tool_id': record_1.id
})
self.env['sf.inbound.and.outbound.records.of.functional.tools'].create({
'functional_cutting_tool_id': record_1.id
})
# 修改功能刀具组装信息
functional_tool_assembly.write(desc_1)
if functional_tool_assembly.sf_machine_table_tool_changing_apply_id:
# 修改机床换刀申请的状态
self.env['sf.machine.table.tool.changing.apply'].sudo().search([
('id', '=', functional_tool_assembly.sf_machine_table_tool_changing_apply_id.id)
]).write({'status': '3'})
elif functional_tool_assembly.sf_cam_work_order_program_knife_plan_id:
# 修改CAM工单程序用刀计划状态
self.env['sf.cam.work.order.program.knife.plan'].sudo().search([
('id', '=', functional_tool_assembly.sf_cam_work_order_program_knife_plan_id.id)
]).write({'plan_execute_status': '2'})
# 关闭弹出窗口
return {'type': 'ir.actions.act_window_close'}
@@ -447,7 +424,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
"""
生成功能刀具序列号
"""
code = 'JKM-T-' + str(self.code) + '-' + str(self.functional_tool_diameter) + '-'
code = 'JKM-T-' + str(self.functional_tool_type_id.code) + '-' + str(self.functional_tool_diameter) + '-'
new_time = fields.Date.today()
code += str(new_time) + '-'
stock_lot_id = self.env['stock.lot'].sudo().search(
@@ -460,49 +437,4 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
else:
m = int(stock_lot_id.name[-3:]) + 1
num = "%03d" % m
return code + str(num)
class DeliveryOfCargoFromStorage(models.TransientModel):
_name = 'sf.delivery.of.cargo.from.storage'
_description = '出库'
order = fields.Integer(string='')
functional_tool_code = fields.Char(string='功能刀具编码')
name = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称')
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型')
production_line_name_id = fields.Many2one('sf.production.line', string='产线名称')
machine_tool_code = fields.Char(string='机台号')
receive_person = fields.Char(string='领用人')
receive_time = fields.Datetime(string='领用出库时间')
def stock_removal(self):
"""
出库
:return:
"""
vals = self.env['sf.delivery.of.cargo.from.storage'].search([])
if vals:
for val in vals:
# 删除功能刀具列表缓存的数据
self.env['sf.functional.cutting.tool.entity.cache'].search([
('code', '=', self.functional_tool_code)]).unlink()
record = self.env['sf.functional.tool.assembly'].search([
('functional_tool_code', '=', val.functional_tool_code),
('assemble_status', '=', '1')
])
# 判断装刀任务来源如果来源于CAM装刀则修改CAM装刀的计划执行状态
if record.loading_task_source == '0':
self.env['sf.cam.work.order.program.knife.plan'].search([
('functional_tool_code', '=', val.functional_tool_code),
('functional_tool_name_id', '=', val.name.id)
]).write({
'plan_execute_status': '2'
})
record.write({
'assemble_status': '2',
'receive_person': self.env.user.name,
'receive_time': fields.Datetime.now()
})
return code + str(num)

View File

@@ -10,7 +10,7 @@
<group string="机床信息" col="3">
<group>
<field name="name"/>
<field name="functional_tool_code"/>
<field name="barcode_id"/>
</group>
<group>
<field name="machine_tool_code"/>
@@ -29,11 +29,9 @@
<field name="applicant"/>
</group>
<group>
<field name="replacement_tool_code"/>
<field name="used_tool_time" placeholder="请选择"/>
<field name="new_former" placeholder="请选择"/>
<field name="reason_for_applying"/>
</group>
</group>
</sheet>
@@ -77,7 +75,7 @@
<field name="functional_tool_type_id" string="功能刀具类型"/>
</group>
<group>
<field name="functional_tool_code" string="功能刀具编码"/>
<field name="barcode_id" string="功能刀具编码"/>
</group>
</group>
<group string="刀具转移">
@@ -125,7 +123,7 @@
<group string="功能刀具申请信息">
<group>
<field name="machine_tool_name_id"/>
<field name="code"/>
<field name="barcode_id"/>
<field name="functional_tool_name_id"/>
<field name="functional_tool_length"/>
<field name="effective_length"/>
@@ -306,38 +304,4 @@
<field name="view_id" ref="sf_functional_tool_assembly_order_form"/>
<field name="target">new</field>
</record>
<!--================================================出库================================================-->
<record id="sf_delivery_of_cargo_from_storager_tree" model="ir.ui.view">
<field name="name">出库</field>
<field name="model">sf.delivery.of.cargo.from.storage</field>
<field name="arch" type="xml">
<tree>
<field name="order"/>
<field name="functional_tool_code"/>
<field name="name"/>
<field name="functional_tool_type_id"/>
<field name="production_line_name_id"/>
<field name="machine_tool_code"/>
<field name="receive_person"/>
<field name="receive_time"/>
<button string="确定" name="stock_removal" type="object" class="btn-primary" />
<button string="取消" class="btn-secondary" special="cancel"/>
</tree>
</field>
</record>
<record id="sf_delivery_of_cargo_from_storager_act" model="ir.actions.act_window">
<field name="name">出库</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sf.delivery.of.cargo.from.storage</field>
<field name="view_mode">tree</field>
<field name="view_id" ref="sf_delivery_of_cargo_from_storager_tree"/>
<field name="target">new</field>
</record>
</odoo>