diff --git a/sf_tool_management/models/functional_tool.py b/sf_tool_management/models/functional_tool.py index ce0400ba..1badbefa 100644 --- a/sf_tool_management/models/functional_tool.py +++ b/sf_tool_management/models/functional_tool.py @@ -41,7 +41,9 @@ class FunctionalCuttingToolEntity(models.Model): used_value = fields.Integer(string='已使用值(min)', readonly=True) functional_tool_status = fields.Selection([('正常', '正常'), ('报警', '报警'), ('已拆除', '已拆除')], string='状态', store=True, default='正常') - current_location_id = fields.Many2one('stock.location', string='当前位置', readonly=True) + current_location_id = fields.Many2one('stock.location', string='当前位置', compute='_compute_current_location_id', + store=True) + current_shelf_location_id = fields.Many2one('sf.shelf.location', string='当前货位', readonly=True) current_location = fields.Selection( [('组装后', '组装后'), ('刀具房', '刀具房'), ('线边刀库', '线边刀库'), ('机内刀库', '机内刀库')], string='位置', compute='_compute_current_location_id', store=True) @@ -60,7 +62,10 @@ class FunctionalCuttingToolEntity(models.Model): if quant_id.inventory_quantity_auto_apply > 0: record.current_location_id = quant_id.location_id if quant_id.location_id.name == '制造前': - record.current_location = '机内刀库' + if not record.current_shelf_location_id: + record.current_location = '机内刀库' + else: + record.current_location = '线边刀库' else: record.current_location = quant_id.location_id.name if record.current_location_id: @@ -75,48 +80,6 @@ class FunctionalCuttingToolEntity(models.Model): record.line_edge_knife_library_num = 0 record.machine_knife_library_num = 0 - def tool_in_out_stock_location(self, location_id): - for item in self: - if item: - pass - else: - if location_id.product_sn_id: - tool = self.env['sf.functional.cutting.tool.entity'].search( - ['barcode_id', '=', location_id.product_sn_id.id]) - if tool.current_location == '线边刀库': - pass - - def create_stock_move(self): - # 创建库存移动记录 - stock_move_id = self.env['stock.move'].sudo().create({ - 'name': name, - 'product_id': self.barcode_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'].sudo().create({ - 'product_id': self.barcode_id.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', - 'functional_tool_type_id': False if not obj else obj.functional_tool_type_id.id, - 'diameter': None if not obj else obj.after_assembly_functional_tool_diameter, - 'knife_tip_r_angle': None if not obj else obj.after_assembly_knife_tip_r_angle, - 'code': '' if not obj else obj.code, - 'rfid': '' if not obj else obj.rfid, - 'functional_tool_name': '' if not obj else obj.after_assembly_functional_tool_name, - 'tool_groups_id': False if not tool_groups_id else tool_groups_id.id - }) - return stock_move_id, stock_move_line_id - - def get_location_num(self): """ 计算库存位置数量 @@ -133,6 +96,73 @@ class FunctionalCuttingToolEntity(models.Model): elif "机内刀库" in obj.current_location: obj.machine_knife_library_num = 1 + def tool_in_out_stock_location(self, location_id): + tool_room_id = self.env['stock.location'].search([('name', '=', '刀具房')]) + pre_manufacturing_id = self.env['stock.location'].search([('name', '=', '制造前')]) + for item in self: + # 中控反馈该位置有刀 + if item: + # 系统该位置有刀 + if location_id.product_sn_id: + # 中控反馈和系统中,该位置是同一把刀 + if item.barcode_id == location_id.product_sn_id: + return True + # 中控反馈和系统中,该位置不是同一把刀 + else: + # 原刀从线边出库 + item.tool_in_out_stock_location_1(location_id, tool_room_id) + # 新刀入库到线边 + item.create_stock_move(pre_manufacturing_id, location_id) + item.current_location_id = tool_room_id.id + item.current_shelf_location_id = location_id.id + + # 中控反馈该位置没有刀 + else: + # 系统该位置有刀 + if location_id.product_sn_id: + item.tool_in_out_stock_location_1(location_id, tool_room_id) + + def tool_in_out_stock_location_1(self, location_id, tool_room_id): + tool = self.env['sf.functional.cutting.tool.entity'].search( + [('barcode_id', '=', location_id.product_sn_id.id)]) + if tool.current_location == '线边刀库': + tool.create_stock_move(tool_room_id, False) + # 修改功能刀具的当前位置 + tool.current_location_id = tool_room_id.id + tool.current_shelf_location_id = False + + def create_stock_move(self, location_dest_id, destination_location_id): + + # 创建库存移动记录 + stock_move_id = self.env['stock.move'].sudo().create({ + 'name': '/', + 'product_id': self.barcode_id.product_id.id, + 'location_id': self.current_location_id.id, + 'location_dest_id': location_dest_id.id, + 'product_uom_qty': 1.00, + 'state': 'done' + }) + + # 创建移动历史记录 + stock_move_line_id = self.env['stock.move.line'].sudo().create({ + 'product_id': self.barcode_id.product_id.id, + 'lot_id': self.barcode_id.id, + 'move_id': stock_move_id.id, + 'current_location_id': False if not self.current_shelf_location_id else self.current_shelf_location_id.id, + 'destination_location_id': False if not destination_location_id else destination_location_id.id, + 'install_tool_time': fields.Datetime.now(), + 'qty_done': 1.0, + 'state': 'done', + 'functional_tool_type_id': self.sf_cutting_tool_type_id.id, + 'diameter': self.functional_tool_diameter, + 'knife_tip_r_angle': self.knife_tip_r_angle, + 'code': self.code, + 'rfid': self.rfid, + 'functional_tool_name': self.name, + 'tool_groups_id': self.tool_groups_id.id + }) + return stock_move_id, stock_move_line_id + @api.model def _read_group_mrs_cutting_tool_type_id(self, categories, domain, order): mrs_cutting_tool_type_ids = categories._search([], order=order, access_rights_uid=SUPERUSER_ID) @@ -234,12 +264,14 @@ class FunctionalCuttingToolEntity(models.Model): 机床当前刀库实时信息接口,功能刀具出库 """ # 获取位置对象 - location_inventory_id = self.current_location_id stock_location_id = self.env['stock.location'].search([('name', '=', '制造前')]) # 创建功能刀具该批次/序列号 库存移动和移动历史 - self.barcode_id.create_stock_quant(location_inventory_id, stock_location_id, - self.functional_tool_name_id.id, '机床装刀', self.functional_tool_name_id, - self.functional_tool_name_id.tool_groups_id) + self.create_stock_move(stock_location_id, False) + self.current_location_id = stock_location_id.id + self.current_shelf_location_id = False + # self.barcode_id.create_stock_quant(location_inventory_id, stock_location_id, + # self.functional_tool_name_id.id, '机床装刀', self.functional_tool_name_id, + # self.functional_tool_name_id.tool_groups_id) # ==========刀具组接口========== # def _register_functional_tool_groups(self, obj): diff --git a/sf_tool_management/models/maintenance_equipment.py b/sf_tool_management/models/maintenance_equipment.py index a700da50..d47369bc 100644 --- a/sf_tool_management/models/maintenance_equipment.py +++ b/sf_tool_management/models/maintenance_equipment.py @@ -76,6 +76,8 @@ class SfMaintenanceEquipment(models.Model): functional_tool_id = self.env['sf.functional.cutting.tool.entity'].sudo().search( [('rfid', '=', data['RfidCode'])]) if functional_tool_id: + if len(functional_tool_id) > 1: + functional_tool_id = functional_tool_id[-1] # 查询该功能刀具是否已经装在机床内其他位置,如果是就删除 equipment_tools = self.env['maintenance.equipment.tool'].sudo().search( [('functional_tool_name_id', '=', functional_tool_id.id), ('code', '!=', tool_id)]) @@ -97,8 +99,9 @@ class SfMaintenanceEquipment(models.Model): 'functional_tool_name_id': functional_tool_id.id, 'tool_install_time': time }) - if functional_tool_id.current_location_id.name != '制造前': - # 对功能刀具进行出库到生产线 + if (functional_tool_id.current_location_id.name != '制造前' or + functional_tool_id.current_shelf_location_id): + # 对功能刀具进行移动到生产线 functional_tool_id.tool_inventory_displacement_out() functional_tool_id.write({ 'max_lifetime_value': data['MaxLife'], @@ -106,9 +109,9 @@ class SfMaintenanceEquipment(models.Model): 'functional_tool_status': tool_install_time.get(data['State']) }) else: - raise ValidationError('获取的【%s】设备不存在!!!' % data['DeviceId']) + logging.info('获取的【%s】设备不存在!!!' % data['DeviceId']) else: - raise ValidationError('没有获取到刀具库信息!!!') + logging.info('没有获取到【%s】设备的刀具库信息!!!' % self.name) class StockLot(models.Model): diff --git a/sf_tool_management/views/functional_tool_views.xml b/sf_tool_management/views/functional_tool_views.xml index bc2fc01e..fa4a99bb 100644 --- a/sf_tool_management/views/functional_tool_views.xml +++ b/sf_tool_management/views/functional_tool_views.xml @@ -27,7 +27,7 @@ - + @@ -46,8 +46,8 @@
- - + +