From 02e597227213401873a73cb48d8e4dbd69c3d7f1 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Wed, 3 Apr 2024 16:52:16 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E8=A3=85=E5=A4=B9?= =?UTF-8?q?=E9=A2=84=E8=B0=83=E5=B7=A5=E5=8D=95=E6=89=AB=E6=8B=96=E7=9B=98?= =?UTF-8?q?Rfid=E7=BB=91=E5=AE=9A=E6=89=98=E7=9B=98=EF=BC=9B2=E3=80=81?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=B7=A5=E5=8D=95=E7=9A=84Rfid=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E7=9A=84customRFID=E6=A0=B7=E5=BC=8F=EF=BC=9B3?= =?UTF-8?q?=E3=80=81=E4=BF=AE=E6=94=B9=E5=BA=8F=E5=88=97=E5=8F=B7=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=9A=84Rfid=E5=AD=97=E6=AE=B5=E7=9A=84=E9=9A=90?= =?UTF-8?q?=E8=97=8F=E6=9D=A1=E4=BB=B6=EF=BC=9B4=E3=80=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=88=80=E6=9F=84=E3=80=81=E6=89=98=E7=9B=98=E7=89=A9?= =?UTF-8?q?=E6=96=99=E9=87=87=E8=B4=AD=E6=97=B6=E7=BB=91=E5=AE=9ARfid?= =?UTF-8?q?=E7=9A=84=E5=88=A4=E6=96=AD=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 120 +++++++++++------- sf_manufacturing/models/stock.py | 1 - sf_manufacturing/views/mrp_workorder_view.xml | 5 +- sf_manufacturing/views/stock_lot_views.xml | 3 +- sf_warehouse/models/model.py | 21 ++- 5 files changed, 89 insertions(+), 61 deletions(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 7b3467b7..c71411c3 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1,3 +1,5 @@ +import re + import logging import base64 import urllib.parse @@ -819,57 +821,77 @@ class SfWorkOrderBarcodes(models.Model): workorder = self.env['mrp.workorder'].browse(self.ids) # workorder = self.env['mrp.workorder'].search( # [('routing_type', '=', '装夹预调'), ('production_id', '=', self.production_id.id)]) + workorder_old = self.env['mrp.workorder'].search([('rfid_code', '=', barcode)]) + if workorder_old: + raise UserError('该托盘已绑定工件,请先解除绑定!!!') if workorder: if workorder.routing_type == '装夹预调': - stock_move_line = self.env['stock.move.line'].search([('lot_name', '=', barcode)]) - if stock_move_line.product_id.categ_type == '夹具': - workorder.write({ - 'tray_serial_number': stock_move_line.lot_name, - 'tray_product_id': stock_move_line.product_id.id, - 'tray_brand_id': stock_move_line.product_id.brand_id.id, - 'tray_type_id': stock_move_line.product_id.fixture_material_id.id, - 'tray_model_id': stock_move_line.product_id.fixture_model_id.id - }) - workorder.button_start() - # return { - # 'type': 'ir.actions.act_window', - # 'res_model': 'mrp.workorder', - # 'view_mode': 'form', - # 'domain': [('id', 'in', workorder.id)], - # 'target': 'current' - # } - else: - embryo_stock_lot = self.env['stock.lot'].search([('name', '=', barcode)]) - if embryo_stock_lot: - embryo_stock_move_line = self.env['stock.move.line'].search( - [('product_id', '=', embryo_stock_lot.product_id.id), - ('reference', '=', workorder.production_id.name), - ('lot_id', '=', embryo_stock_lot.id), - ('product_category_name', '=', '坯料')]) - if embryo_stock_move_line: - bom_production = self.env['mrp.production'].search( - [('product_id', '=', embryo_stock_lot.product_id.id), - ('origin', '=', workorder.production_id.name)], limit=1, order='id asc') - workpiece_delivery = self.env['sf.workpiece.delivery'].search( - [('workorder_id', '=', workorder.id)], limit=1, order='id asc') - if workpiece_delivery: - embryo_workpiece_code = workpiece_delivery.workpiece_code - if bom_production: - if workpiece_delivery.workpiece_code and bom_production.name not in \ - workpiece_delivery.workpiece_code: - embryo_workpiece_code = workpiece_delivery.workpiece_code + ',' + \ - bom_production.name - if not workpiece_delivery.workpiece_code: - embryo_workpiece_code = bom_production.name - workpiece_delivery.write({'workpiece_code': embryo_workpiece_code}) - else: - raise UserError('工件生产线不一致,请重新确认') - else: - workorder_rfid = self.env['mrp.workorder'].search( - [('production_id', '=', workorder.production_id.id)]) - if workorder_rfid: - for item in workorder_rfid: - item.write({'rfid_code': barcode}) + lots = self.env['stock.lot'].sudo().search([('rfid', '=', barcode)]) + if lots: + for lot in lots: + if lot.product_id.categ_type == '夹具': + workorder.write({ + 'tray_serial_number': lot.name, + 'tray_product_id': lot.product_id.id, + 'tray_brand_id': lot.product_id.brand_id.id, + 'tray_type_id': lot.product_id.fixture_material_id.id, + 'tray_model_id': lot.product_id.fixture_model_id.id + }) + workorder_rfid = self.env['mrp.workorder'].search( + [('production_id', '=', workorder.production_id.id)]) + if workorder_rfid: + for item in workorder_rfid: + item.write({'rfid_code': barcode}) + workorder.env.cr.commit() + # stock_move_line = self.env['stock.move.line'].search([('lot_name', '=', barcode)]) + # if stock_move_line.product_id.categ_type == '夹具': + # workorder.write({ + # 'tray_serial_number': stock_move_line.lot_name, + # 'tray_product_id': stock_move_line.product_id.id, + # 'tray_brand_id': stock_move_line.product_id.brand_id.id, + # 'tray_type_id': stock_move_line.product_id.fixture_material_id.id, + # 'tray_model_id': stock_move_line.product_id.fixture_model_id.id + # }) + # workorder.button_start() + # # return { + # # 'type': 'ir.actions.act_window', + # # 'res_model': 'mrp.workorder', + # # 'view_mode': 'form', + # # 'domain': [('id', 'in', workorder.id)], + # # 'target': 'current' + # # } + # else: + # embryo_stock_lot = self.env['stock.lot'].search([('name', '=', barcode)]) + # if embryo_stock_lot: + # embryo_stock_move_line = self.env['stock.move.line'].search( + # [('product_id', '=', embryo_stock_lot.product_id.id), + # ('reference', '=', workorder.production_id.name), + # ('lot_id', '=', embryo_stock_lot.id), + # ('product_category_name', '=', '坯料')]) + # if embryo_stock_move_line: + # bom_production = self.env['mrp.production'].search( + # [('product_id', '=', embryo_stock_lot.product_id.id), + # ('origin', '=', workorder.production_id.name)], limit=1, order='id asc') + # workpiece_delivery = self.env['sf.workpiece.delivery'].search( + # [('workorder_id', '=', workorder.id)], limit=1, order='id asc') + # if workpiece_delivery: + # embryo_workpiece_code = workpiece_delivery.workpiece_code + # if bom_production: + # if workpiece_delivery.workpiece_code and bom_production.name not in \ + # workpiece_delivery.workpiece_code: + # embryo_workpiece_code = workpiece_delivery.workpiece_code + ',' + \ + # bom_production.name + # if not workpiece_delivery.workpiece_code: + # embryo_workpiece_code = bom_production.name + # workpiece_delivery.write({'workpiece_code': embryo_workpiece_code}) + # else: + # raise UserError('工件生产线不一致,请重新确认') + # else: + # workorder_rfid = self.env['mrp.workorder'].search( + # [('production_id', '=', workorder.production_id.id)]) + # if workorder_rfid: + # for item in workorder_rfid: + # item.write({'rfid_code': barcode}) class WorkPieceDelivery(models.Model): diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 6ea88c4c..5833b095 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -223,7 +223,6 @@ class ProductionLot(models.Model): _inherit = ['stock.lot', 'printing.utils'] rfid = fields.Char('Rfid', readonly=True) - product_material_name = fields.Char('刀具产品物料名称', related='product_id.cutting_tool_material_id.name') product_specification = fields.Char('规格', compute='_compute_product_specification', store=True) @api.depends('product_id') diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index 4a766526..b1ca9946 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -184,10 +184,9 @@ attrs='{"invisible": [("routing_type","!=","装夹预调")]}'/> - - @@ -242,6 +241,7 @@ + @@ -250,7 +250,6 @@ - diff --git a/sf_manufacturing/views/stock_lot_views.xml b/sf_manufacturing/views/stock_lot_views.xml index 1d371102..aef50e55 100644 --- a/sf_manufacturing/views/stock_lot_views.xml +++ b/sf_manufacturing/views/stock_lot_views.xml @@ -14,8 +14,7 @@ - - + diff --git a/sf_warehouse/models/model.py b/sf_warehouse/models/model.py index 6e1dd356..cc2e20c8 100644 --- a/sf_warehouse/models/model.py +++ b/sf_warehouse/models/model.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +import re + import datetime import logging import base64 @@ -424,7 +426,7 @@ class Sf_stock_move_line(models.Model): # lot_qr_code = fields.Binary(string='二维码', compute='_compute_lot_qr_code', store=True) lot_qr_code = fields.Binary(string='二维码', compute='_compute_lot_qr_code', store=True) - rfid = fields.Char('Rfid') + rfid = fields.Char('Rfid', readonly=True) def action_revert_inventory(self): # 检查用户是否有执行操作的权限 @@ -746,7 +748,8 @@ class SfStockPicking(models.Model): line.current_location_id.location_status = '空闲' for move in self.move_ids: - if move and move.product_id.cutting_tool_material_id.name == '刀柄': + if move and move.product_id.cutting_tool_material_id.name == '刀柄' or '托盘' in ( + move.product_id.fixture_material_id.name or ''): for item in move.move_line_nosuggest_ids: if item.location_dest_id.name == '进货': if not item.rfid: @@ -950,16 +953,22 @@ class CustomStockMove(models.Model): """ for record in self: if record: - if '刀柄' in record.product_id.cutting_tool_material_id.name: + if '刀柄' in (record.product_id.cutting_tool_material_id.name or '') or '托盘' in ( + record.product_id.fixture_material_id.name or ''): for move_line_nosuggest_id in record.move_line_nosuggest_ids: if move_line_nosuggest_id.rfid: if move_line_nosuggest_id.rfid == barcode: - raise ValidationError('该刀柄的rfid已经录入,请勿重复录入!!!') + if record.product_id.cutting_tool_material_id.name: + raise ValidationError('该刀柄的Rfid已经录入,请勿重复录入!!!') + else: + raise ValidationError('该托盘的Rfid已经录入,请勿重复录入!!!') else: - move_line_nosuggest_id.sudo().rfid = barcode + line_id = int(re.sub(r"\D", "", str(move_line_nosuggest_id.id))) + self.env['stock.move.line'].sudo().search([('id', '=', line_id)]).write({'rfid': barcode}) + move_line_nosuggest_id.rfid = barcode break else: - raise ValidationError('该产品不是刀柄!!!') + raise ValidationError('该产品不需要录入Rfid!!!') def action_assign_serial_show_details(self): # 首先执行原有逻辑