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):
# 首先执行原有逻辑