diff --git a/sf_manufacturing/models/model_type.py b/sf_manufacturing/models/model_type.py index 48707939..29357d02 100644 --- a/sf_manufacturing/models/model_type.py +++ b/sf_manufacturing/models/model_type.py @@ -1,4 +1,4 @@ -from odoo import fields, models, api +from odoo import fields, models class ModelType(models.Model): diff --git a/sf_tool_management/__manifest__.py b/sf_tool_management/__manifest__.py index 20bf2b2a..a3350a58 100644 --- a/sf_tool_management/__manifest__.py +++ b/sf_tool_management/__manifest__.py @@ -10,12 +10,10 @@ """, 'category': 'sf', 'website': 'https://www.sf.jikimo.com', - 'depends': ['sf_base', 'sf_manufacturing'], + 'depends': ['sf_manufacturing'], 'data': [ 'security/group_security.xml', 'security/ir.model.access.csv', - # 'views/tool_base_views.xml', - # # 'views/menu_view.xml', 'wizard/wizard_view.xml', 'views/tool_base_views.xml', 'views/menu_view.xml', diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 35949f47..99a7f3d9 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -25,7 +25,7 @@ class FunctionalCuttingToolEntity(models.Model): 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) - tool_room_num = fields.Integer(string='刀具房数量', readonly=True, ) + tool_room_num = fields.Integer(string='刀具房数量', readonly=True, compute='_compute_location_num') line_edge_knife_library_num = fields.Integer(string='线边刀库数量', readonly=True) machine_knife_library_num = fields.Integer(string='机内刀库数量', readonly=True) max_lifetime_value = fields.Integer(string='最大寿命值(min)', readonly=True) @@ -241,7 +241,7 @@ class RealTimeDistributionOfFunctionalTools(models.Model): record = self.env['sf.real.time.distribution.of.functional.tools'].search( [('name', '=', vals['name']), ('sf_cutting_tool_type_id', '=', vals['sf_cutting_tool_type_id']), ('diameter', '=', vals['diameter']), ('knife_tip_r_angle', '=', vals['knife_tip_r_angle']), - ('knife_tip_r_angle', '=', vals['knife_tip_r_angle'])]) + ('coarse_middle_thin', '=', vals['coarse_middle_thin'])]) print(record) if len(record) > 0: for obj in record: diff --git a/sf_tool_management/models/tool_material_search.py b/sf_tool_management/models/tool_material_search.py index b89b76cd..2453aafb 100644 --- a/sf_tool_management/models/tool_material_search.py +++ b/sf_tool_management/models/tool_material_search.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- from odoo import fields, models, api, SUPERUSER_ID -from odoo.exceptions import ValidationError +# from odoo.exceptions import ValidationError # 刀具物料搜索 diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index a764b896..8ebb20d4 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -284,6 +284,7 @@ + diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index 16ae5259..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,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