diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index e3d4cff7..649d6b86 100644 --- a/sf_tool_management/wizard/wizard.py +++ b/sf_tool_management/wizard/wizard.py @@ -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,72 +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 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', '=', 'Production')]) - - # 创建库存移动 - 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.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 get_desc_1(self, stock_lot): return { 'barcode_id': stock_lot.id, @@ -552,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