diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml index 1c56ad77..72c1226c 100644 --- a/sf_dlm_management/views/product_template_management_view.xml +++ b/sf_dlm_management/views/product_template_management_view.xml @@ -7,7 +7,7 @@ - + - + + diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 22cb1b42..649c757e 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -39,24 +39,29 @@ class FunctionalCuttingToolEntity(models.Model): functional_tool_status = fields.Selection([('正常', '正常'), ('报警', '报警'), ('已拆除', '已拆除')], string='状态', store=True, default='正常') current_location_id = fields.Many2one('stock.location', string='当前位置', readonly=True) - current_location = fields.Char('位置', compute='_compute_current_location_id') + current_location = fields.Selection( + [('组装后', '组装后'), ('刀具房', '刀具房'), ('线边刀库', '线边刀库'), ('机内刀库', '机内刀库')], + string='位置', compute='_compute_current_location_id', store=True) image = fields.Binary('图片', readonly=True) active = fields.Boolean(string='已归档', default=True) - @api.depends('barcode_id') + @api.depends('barcode_id.quant_ids') def _compute_current_location_id(self): for record in self: if record.barcode_id.quant_ids: for quant_id in record.barcode_id.quant_ids: if quant_id.inventory_quantity_auto_apply > 0: - record.sudo().current_location_id = quant_id.location_id - record.sudo().current_location = quant_id.location_id.name + record.current_location_id = quant_id.location_id + if quant_id.location_id.name == '制造前': + record.current_location = '机内刀库' + else: + record.current_location = quant_id.location_id.name if record.current_location_id: record.sudo().get_location_num() else: - record.sudo().current_location_id = False - record.sudo().current_location = False + record.current_location_id = False + record.current_location = False def get_location_num(self): """ @@ -64,15 +69,15 @@ class FunctionalCuttingToolEntity(models.Model): """ for obj in self: if obj.current_location_id: - if obj.current_location_id.name in ['刀具房']: + if obj.current_location in ['刀具房']: obj.tool_room_num = 1 obj.line_edge_knife_library_num = 0 obj.machine_knife_library_num = 0 - elif "线边刀库" in obj.current_location_id.name: + elif "线边刀库" in obj.current_location: obj.tool_room_num = 0 obj.line_edge_knife_library_num = 1 obj.machine_knife_library_num = 0 - elif "机内刀库" in obj.current_location_id.name: + elif "机内刀库" in obj.current_location: obj.tool_room_num = 0 obj.line_edge_knife_library_num = 0 obj.machine_knife_library_num = 1 @@ -180,33 +185,45 @@ class FunctionalCuttingToolEntity(models.Model): ('coarse_middle_thin', '=', self.coarse_middle_thin)] return result - # ==========刀具组接口========== - # def _register_functional_tool_groups(self, obj): - # create_url = '/AutoDeviceApi/ToolGroup' - # sf_sync_config = self.env['res.config.settings'].get_values() - # token = sf_sync_config['token'] - # sf_secret_key = sf_sync_config['sf_secret_key'] - # headers = Common.get_headers(obj, token, sf_secret_key) - # strurl = sf_sync_config['sf_url'] + create_url - # val = { - # 'ToolName': obj.name, - # 'GroupName': obj.tool_groups_id.name, - # 'ToolId': obj.code - # } - # kw = json.dumps(val, ensure_ascii=False) - # r = requests.post(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers) - # ret = r.json() - # if r == 200: - # return "刀具组发送成功" - # else: - # raise ValidationError("刀具组发送失败") + def tool_inventory_displacement_out(self): + """ + 机床当前刀库实时信息接口,功能刀具出库 + """ + # 获取位置对象 + 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, '机床装刀') - # @api.model_create_multi - # def create(self, vals): - # obj = super(FunctionalCuttingToolEntity, self).create(vals) - # # 调用刀具组接口 - # self._register_functional_tool_groups(obj) - # return obj + +# ==========刀具组接口========== +# def _register_functional_tool_groups(self, obj): +# create_url = '/AutoDeviceApi/ToolGroup' +# sf_sync_config = self.env['res.config.settings'].get_values() +# token = sf_sync_config['token'] +# sf_secret_key = sf_sync_config['sf_secret_key'] +# headers = Common.get_headers(obj, token, sf_secret_key) +# strurl = sf_sync_config['sf_url'] + create_url +# val = { +# 'ToolName': obj.name, +# 'GroupName': obj.tool_groups_id.name, +# 'ToolId': obj.code +# } +# kw = json.dumps(val, ensure_ascii=False) +# r = requests.post(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers) +# ret = r.json() +# if r == 200: +# return "刀具组发送成功" +# else: +# raise ValidationError("刀具组发送失败") + +# @api.model_create_multi +# def create(self, vals): +# obj = super(FunctionalCuttingToolEntity, self).create(vals) +# # 调用刀具组接口 +# self._register_functional_tool_groups(obj) +# return obj class FunctionalToolWarning(models.Model): diff --git a/sf_tool_management/models/maintenance_equipment.py b/sf_tool_management/models/maintenance_equipment.py index 9f3cefba..467989b7 100644 --- a/sf_tool_management/models/maintenance_equipment.py +++ b/sf_tool_management/models/maintenance_equipment.py @@ -79,6 +79,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 != '制造前': + # 对功能刀具进行出库到生产线 + functional_tool_id.tool_inventory_displacement_out() functional_tool_id.write({ 'max_lifetime_value': data['MaxLife'], 'used_value': data['UseLife'], diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 239845a4..bf5fe0fb 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -152,8 +152,8 @@ - - + + @@ -203,7 +203,7 @@ - + diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index 3b2649a2..322cf096 100644 --- a/sf_tool_management/wizard/wizard.py +++ b/sf_tool_management/wizard/wizard.py @@ -300,29 +300,32 @@ class FunctionalToolAssemblyOrder(models.TransientModel): 智能工厂组装单处扫码绑定刀具物料') """ for record in self: - records = record.env['stock.lot'].search([('name', '=', barcode)]) - if not records: - raise ValidationError('扫描的条形码数据不存在,请重新扫描!') - for record_stock_lot in records: - if record_stock_lot.quant_ids[-1].location_id.name == '刀具组装位置': - raise ValidationError('该刀具物料已使用,请重新选择!!!') - elif record_stock_lot.quant_ids[-1].location_id.name not in '刀具房': - raise ValidationError('该刀具物料未入库,请重新选择!!!') - tool_material_name = record_stock_lot.product_id.cutting_tool_material_id.name - if tool_material_name == '整体式刀具': - record.integral_code_id = record_stock_lot.id - elif tool_material_name == '刀片': - record.blade_code_id = record_stock_lot.id - elif tool_material_name == '刀杆': - record.bar_code_id = record_stock_lot.id - elif tool_material_name == '刀盘': - record.pad_code_id = record_stock_lot.id - elif tool_material_name == '刀柄': - record.handle_code_id = record_stock_lot.id - elif tool_material_name == '夹头': - record.chuck_code_id = record_stock_lot.id - else: - raise ValidationError('扫描的刀具物料不存在,请重新扫描!') + if 'DJWL' in barcode: + records = record.env['stock.lot'].search([('name', '=', barcode)]) + if not records: + raise ValidationError('扫描的条形码数据不存在,请重新扫描!') + for record_stock_lot in records: + if record_stock_lot.quant_ids[-1].location_id.name == '刀具组装位置': + raise ValidationError('该刀具物料已使用,请重新选择!!!') + elif record_stock_lot.quant_ids[-1].location_id.name not in '刀具房': + raise ValidationError('该刀具物料未入库,请重新选择!!!') + tool_material_name = record_stock_lot.product_id.cutting_tool_material_id.name + if tool_material_name == '整体式刀具': + record.integral_code_id = record_stock_lot.id + elif tool_material_name == '刀片': + record.blade_code_id = record_stock_lot.id + elif tool_material_name == '刀杆': + record.bar_code_id = record_stock_lot.id + elif tool_material_name == '刀盘': + record.pad_code_id = record_stock_lot.id + elif tool_material_name == '刀柄': + record.handle_code_id = record_stock_lot.id + elif tool_material_name == '夹头': + record.chuck_code_id = record_stock_lot.id + else: + raise ValidationError('扫描的刀具物料不存在,请重新扫描!') + else: + record.rfid = barcode # 组装功能刀具参数信息 barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号') @@ -676,7 +679,8 @@ class ProductProduct(models.Model): 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) + stock_lot.create_stock_quant(location_inventory_id, stock_location_id, functional_tool_assembly.id, + '功能刀具组装') return stock_lot @@ -710,20 +714,20 @@ class ProductProduct(models.Model): location_inventory_id = tool_material.quant_ids.location_id[-1] stock_location_id = self.env['stock.location'].search([('name', '=', '刀具组装位置')]) # 创建功能刀具该批次/序列号 库存移动和移动历史 - tool_material.create_stock_quant(location_inventory_id, stock_location_id, None) + 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): + def create_stock_quant(self, location_inventory_id, stock_location_id, functional_tool_assembly_id, name): """ 对功能刀具组装过程的功能刀具和刀具物料进行库存移动,以及创建移动历史 """ # 创建库存移动记录 - stock_move_id = self.env['stock.move'].create({ - 'name': '功能刀具组装', + stock_move_id = self.env['stock.move'].sudo().create({ + 'name': name, 'product_id': self.product_id.id, 'location_id': location_inventory_id.id, 'location_dest_id': stock_location_id.id, @@ -732,7 +736,7 @@ class StockLot(models.Model): }) # 创建移动历史记录 - stock_move_line_id = self.env['stock.move.line'].create({ + stock_move_line_id = self.env['stock.move.line'].sudo().create({ 'product_id': self.product_id.id, 'functional_tool_name_id': functional_tool_assembly_id, 'lot_id': self.id,