|
|
|
|
@@ -341,6 +341,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
|
|
|
|
功能刀具组装
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
# 获取组装单对象
|
|
|
|
|
functional_tool_assembly = self.env['sf.functional.tool.assembly'].search([
|
|
|
|
|
('assembly_order_code', '=', self.assembly_order_code),
|
|
|
|
|
('machine_tool_name_id', '=', self.machine_tool_name_id.id),
|
|
|
|
|
@@ -349,20 +350,28 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
|
|
|
|
])
|
|
|
|
|
# 对物料做必填判断
|
|
|
|
|
self.materials_must_be_judged()
|
|
|
|
|
# # 刀具物料出库
|
|
|
|
|
# if self.integral_code_id:
|
|
|
|
|
# print("已运行1111")
|
|
|
|
|
# self.tool_material_out_of_store(self.integral_code_id)
|
|
|
|
|
|
|
|
|
|
product_id = self.env['product.product'].search([('name', '=', '功能刀具')])
|
|
|
|
|
# 创建组装入库单
|
|
|
|
|
# 创建功能刀具批次/序列号记录
|
|
|
|
|
stock_lot = self.create_assemble_warehouse_receipt(functional_tool_assembly)
|
|
|
|
|
stock_lot = product_id.create_assemble_warehouse_receipt(self.id, functional_tool_assembly)
|
|
|
|
|
# 创建刀具组装入库单
|
|
|
|
|
self.create_stocking_picking(stock_lot)
|
|
|
|
|
# 封装功能刀具数据
|
|
|
|
|
desc_1 = self.get_desc_1(stock_lot)
|
|
|
|
|
# 刀具物料出库
|
|
|
|
|
if self.integral_code_id:
|
|
|
|
|
product_id.tool_material_stock_moves(self.integral_code_id)
|
|
|
|
|
if self.blade_code_id:
|
|
|
|
|
product_id.tool_material_stock_moves(self.blade_code_id)
|
|
|
|
|
if self.bar_code_id:
|
|
|
|
|
product_id.tool_material_stock_moves(self.bar_code_id)
|
|
|
|
|
if self.pad_code_id:
|
|
|
|
|
product_id.tool_material_stock_moves(self.pad_code_id)
|
|
|
|
|
if self.handle_code_id:
|
|
|
|
|
product_id.tool_material_stock_moves(self.handle_code_id)
|
|
|
|
|
if self.chuck_code_id:
|
|
|
|
|
product_id.tool_material_stock_moves(self.chuck_code_id)
|
|
|
|
|
|
|
|
|
|
# 创建功能刀具列表记录
|
|
|
|
|
# ============================创建功能刀具列表、安全库存记录===============================
|
|
|
|
|
# 封装功能刀具数据
|
|
|
|
|
desc_2 = self.get_desc_2(stock_lot, functional_tool_assembly)
|
|
|
|
|
# 创建功能刀具列表记录
|
|
|
|
|
@@ -376,9 +385,11 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
|
|
|
|
'coarse_middle_thin': self.after_assembly_coarse_middle_thin,
|
|
|
|
|
}, record_1)
|
|
|
|
|
|
|
|
|
|
# =====================修改功能刀具组装单、机床换刀申请、CAM工单程序用刀计划的状态==============
|
|
|
|
|
# 封装功能刀具数据
|
|
|
|
|
desc_1 = self.get_desc_1(stock_lot)
|
|
|
|
|
# 修改功能刀具组装单信息
|
|
|
|
|
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([
|
|
|
|
|
@@ -422,103 +433,6 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
|
|
|
|
# 将刀具组装入库单的状态更改为就绪
|
|
|
|
|
picking_id.action_confirm()
|
|
|
|
|
|
|
|
|
|
def create_assemble_warehouse_receipt(self, functional_tool_assembly):
|
|
|
|
|
"""
|
|
|
|
|
创建功能刀具批次/序列号记录
|
|
|
|
|
"""
|
|
|
|
|
product_id = self.env['product.product'].search([('name', '=', '功能刀具')])
|
|
|
|
|
|
|
|
|
|
stock_lot = self.env['stock.lot'].create({
|
|
|
|
|
'name': self.get_stock_lot_name(),
|
|
|
|
|
'product_id': product_id.id,
|
|
|
|
|
'company_id': self.env.company.id
|
|
|
|
|
})
|
|
|
|
|
# 创建功能刀具该批次/序列号 库存移动和移动历史
|
|
|
|
|
self.create_stock_quant(product_id, stock_lot, functional_tool_assembly)
|
|
|
|
|
|
|
|
|
|
return stock_lot
|
|
|
|
|
|
|
|
|
|
# def tool_material_out_of_store(self, tool_material_serial_id):
|
|
|
|
|
# """
|
|
|
|
|
# 刀具物料出库
|
|
|
|
|
# """
|
|
|
|
|
# # 获取位置
|
|
|
|
|
# location_id = self.env['stock.location'].search([('name', '=', 'Stock')])
|
|
|
|
|
# location_dest_id = self.env['stock.location'].search([('name', '=', '刀具组装位置')])
|
|
|
|
|
# print("已运行2222")
|
|
|
|
|
# # 创建库存移动
|
|
|
|
|
# stock_move_id = self.env['stock.move'].create({
|
|
|
|
|
# 'name': '刀具物料出库',
|
|
|
|
|
# 'lot_id': tool_material_serial_id.id,
|
|
|
|
|
# 'product_id': tool_material_serial_id.product_id.id,
|
|
|
|
|
# 'location_id': location_id.id,
|
|
|
|
|
# 'location_dest_id': location_dest_id.id,
|
|
|
|
|
# 'product_uom_qty': 1.00,
|
|
|
|
|
# 'state': 'done'
|
|
|
|
|
# })
|
|
|
|
|
# print("已运行3333")
|
|
|
|
|
# print(stock_move_id)
|
|
|
|
|
# # 创建移动历史
|
|
|
|
|
# stock_move_line_id = self.env['stock.move.line'].create({
|
|
|
|
|
# 'product_id': tool_material_serial_id.product_id.id,
|
|
|
|
|
# 'lot_id': tool_material_serial_id.id,
|
|
|
|
|
# 'move_id': stock_move_id.id,
|
|
|
|
|
# 'install_tool_time': fields.Datetime.now(),
|
|
|
|
|
# 'qty_done': 1.0,
|
|
|
|
|
# 'state': 'done'
|
|
|
|
|
# })
|
|
|
|
|
#
|
|
|
|
|
# return stock_move_id, stock_move_line_id
|
|
|
|
|
|
|
|
|
|
def create_stock_quant(self, product_id, stock_lot, functional_tool_assembly):
|
|
|
|
|
"""
|
|
|
|
|
创建功能刀具该批次/序列号 库存移动和移动历史
|
|
|
|
|
"""
|
|
|
|
|
# 获取位置对象
|
|
|
|
|
stock_location_id = self.env['stock.location'].search([('name', '=', '组装后')])
|
|
|
|
|
location_inventory_id = self.env['stock.location'].search([('name', '=', 'Inventory adjustment')])
|
|
|
|
|
|
|
|
|
|
# 创建库存移动
|
|
|
|
|
stock_move_id = self.env['stock.move'].create({
|
|
|
|
|
'name': '功能刀具组装出库',
|
|
|
|
|
'product_id': product_id.id,
|
|
|
|
|
'location_id': location_inventory_id.id,
|
|
|
|
|
'location_dest_id': stock_location_id.id,
|
|
|
|
|
'product_uom_qty': 1.00,
|
|
|
|
|
'state': 'done'
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# 创建移动历史
|
|
|
|
|
stock_move_line_id = self.env['stock.move.line'].create({
|
|
|
|
|
'product_id': product_id.id,
|
|
|
|
|
'functional_tool_name_id': functional_tool_assembly.id,
|
|
|
|
|
'lot_id': stock_lot.id,
|
|
|
|
|
'move_id': stock_move_id.id,
|
|
|
|
|
'install_tool_time': fields.Datetime.now(),
|
|
|
|
|
'qty_done': 1.0,
|
|
|
|
|
'state': 'done'
|
|
|
|
|
})
|
|
|
|
|
return stock_move_id, stock_move_line_id
|
|
|
|
|
|
|
|
|
|
def get_stock_lot_name(self):
|
|
|
|
|
"""
|
|
|
|
|
生成功能刀具序列号
|
|
|
|
|
"""
|
|
|
|
|
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(
|
|
|
|
|
[('name', 'like', new_time), ('product_id.name', '=', '功能刀具')],
|
|
|
|
|
limit=1,
|
|
|
|
|
order="id desc"
|
|
|
|
|
)
|
|
|
|
|
if not stock_lot_id:
|
|
|
|
|
num = "%03d" % 1
|
|
|
|
|
else:
|
|
|
|
|
m = int(stock_lot_id.name[-3:]) + 1
|
|
|
|
|
num = "%03d" % m
|
|
|
|
|
return code + str(num)
|
|
|
|
|
|
|
|
|
|
def get_desc_1(self, stock_lot):
|
|
|
|
|
return {
|
|
|
|
|
'barcode_id': stock_lot.id,
|
|
|
|
|
@@ -583,3 +497,90 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
|
|
|
|
|
'cut_number': self.cut_number,
|
|
|
|
|
'current_location_id': stock_lot.quant_ids.location_id.ids[-1],
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ProductProduct(models.Model):
|
|
|
|
|
_inherit = 'product.product'
|
|
|
|
|
|
|
|
|
|
def create_assemble_warehouse_receipt(self, tool_assembly_order_id, functional_tool_assembly):
|
|
|
|
|
"""
|
|
|
|
|
创建功能刀具批次/序列号记录
|
|
|
|
|
"""
|
|
|
|
|
product_id = self.env['product.product'].search([('name', '=', '功能刀具')])
|
|
|
|
|
|
|
|
|
|
stock_lot = self.env['stock.lot'].create({
|
|
|
|
|
'name': self.get_stock_lot_name(tool_assembly_order_id),
|
|
|
|
|
'product_id': product_id.id,
|
|
|
|
|
'company_id': self.env.company.id
|
|
|
|
|
})
|
|
|
|
|
# 获取位置对象
|
|
|
|
|
location_inventory_id = self.env['stock.location'].search([('name', '=', 'Production')])
|
|
|
|
|
stock_location_id = self.env['stock.location'].search([('name', '=', '组装后')])
|
|
|
|
|
# 创建功能刀具该批次/序列号 库存移动和移动历史
|
|
|
|
|
stock_lot.create_stock_quant(location_inventory_id, stock_location_id, functional_tool_assembly.id)
|
|
|
|
|
|
|
|
|
|
return stock_lot
|
|
|
|
|
|
|
|
|
|
def get_stock_lot_name(self, tool_assembly_order_id):
|
|
|
|
|
"""
|
|
|
|
|
生成功能刀具序列号
|
|
|
|
|
"""
|
|
|
|
|
tool_assembly_order = self.env['sf.functional.tool.assembly.order'].search(
|
|
|
|
|
[('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()
|
|
|
|
|
code += str(new_time) + '-'
|
|
|
|
|
stock_lot_id = self.env['stock.lot'].sudo().search(
|
|
|
|
|
[('name', 'like', new_time), ('product_id.name', '=', '功能刀具')],
|
|
|
|
|
limit=1,
|
|
|
|
|
order="id desc"
|
|
|
|
|
)
|
|
|
|
|
if not stock_lot_id:
|
|
|
|
|
num = "%03d" % 1
|
|
|
|
|
else:
|
|
|
|
|
m = int(stock_lot_id.name[-3:]) + 1
|
|
|
|
|
num = "%03d" % m
|
|
|
|
|
return code + str(num)
|
|
|
|
|
|
|
|
|
|
def tool_material_stock_moves(self, tool_material):
|
|
|
|
|
"""
|
|
|
|
|
对刀具物料进行库存移动到 刀具组装位置
|
|
|
|
|
"""
|
|
|
|
|
# 获取位置对象
|
|
|
|
|
location_inventory_id = tool_material.quant_ids.location_id[-1]
|
|
|
|
|
print(location_inventory_id)
|
|
|
|
|
stock_location_id = self.env['stock.location'].search([('name', '=', '刀具组装位置')])
|
|
|
|
|
# 创建功能刀具该批次/序列号 库存移动和移动历史
|
|
|
|
|
tool_material.create_stock_quant(location_inventory_id, stock_location_id, None)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class StockLot(models.Model):
|
|
|
|
|
_inherit = 'stock.lot'
|
|
|
|
|
|
|
|
|
|
def create_stock_quant(self, location_inventory_id, stock_location_id, functional_tool_assembly_id):
|
|
|
|
|
"""
|
|
|
|
|
对功能刀具组装过程的功能刀具和刀具物料进行库存移动,以及创建移动历史
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
# 创建库存移动记录
|
|
|
|
|
stock_move_id = self.env['stock.move'].create({
|
|
|
|
|
'name': '功能刀具组装',
|
|
|
|
|
'product_id': self.product_id.id,
|
|
|
|
|
'location_id': location_inventory_id.id,
|
|
|
|
|
'location_dest_id': stock_location_id.id,
|
|
|
|
|
'product_uom_qty': 1.00,
|
|
|
|
|
'state': 'done'
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# 创建移动历史记录
|
|
|
|
|
stock_move_line_id = self.env['stock.move.line'].create({
|
|
|
|
|
'product_id': self.product_id.id,
|
|
|
|
|
'functional_tool_name_id': functional_tool_assembly_id,
|
|
|
|
|
'lot_id': self.id,
|
|
|
|
|
'move_id': stock_move_id.id,
|
|
|
|
|
'install_tool_time': fields.Datetime.now(),
|
|
|
|
|
'qty_done': 1.0,
|
|
|
|
|
'state': 'done'
|
|
|
|
|
})
|
|
|
|
|
return stock_move_id, stock_move_line_id
|
|
|
|
|
|