feat(scrap): integrate repair items into physical scrap scanning flow and lock manual status
This commit is contained in:
@ -4,7 +4,7 @@ from flask_jwt_extended import jwt_required, get_jwt_identity, get_jwt
|
||||
from app.utils.decorators import permission_required, audit_log
|
||||
from app.services.auth_service import AuthService
|
||||
from app.extensions import db
|
||||
from app.models.transaction import TransScrap
|
||||
from app.models.transaction import TransScrap, TransRepair
|
||||
from app.models.inbound.buy import StockBuy
|
||||
from app.models.inbound.semi import StockSemi
|
||||
from app.models.inbound.product import StockProduct
|
||||
@ -172,6 +172,28 @@ class ScrapService:
|
||||
res['price'] = get_price(buy, 'stock_buy')
|
||||
return res
|
||||
|
||||
# 4. 查询维修单 (TransRepair)
|
||||
repair = TransRepair.query.filter(
|
||||
db.or_(TransRepair.sku == clean_code, TransRepair.serial_number == clean_code)
|
||||
).filter(
|
||||
TransRepair.repair_status.notin_(['已出库', '报废转出'])
|
||||
).first()
|
||||
if repair:
|
||||
return {
|
||||
'id': repair.id,
|
||||
'sku': repair.sku,
|
||||
'barcode': repair.sku,
|
||||
'name': repair.material_name or '维修件',
|
||||
'spec': '',
|
||||
'category': '',
|
||||
'material_type': '',
|
||||
'warehouse_loc': repair.customer_location or '',
|
||||
'stock_quantity': 1,
|
||||
'available_quantity': 1,
|
||||
'source_table': 'trans_repair',
|
||||
'price': float(repair.sale_price) if repair.sale_price else 0
|
||||
}
|
||||
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
@ -210,6 +232,31 @@ class ScrapService:
|
||||
if not stock_id or not source_table or scrap_qty <= 0:
|
||||
continue
|
||||
|
||||
# 处理维修单报废
|
||||
if source_table == 'trans_repair':
|
||||
repair = TransRepair.query.get(stock_id)
|
||||
if not repair:
|
||||
raise ValueError(f'维修单不存在: ID={stock_id}')
|
||||
|
||||
# 更新维修单状态为报废转出
|
||||
repair.repair_status = '报废转出'
|
||||
|
||||
# 创建报废记录
|
||||
scrap_record = TransScrap(
|
||||
sku=repair.sku,
|
||||
source_table='trans_repair',
|
||||
stock_id=stock_id,
|
||||
quantity=1,
|
||||
reason=reason,
|
||||
operator_name=operator_name,
|
||||
approval_status='approved',
|
||||
cost_at_scrap=float(repair.cost_price) if repair.cost_price else 0,
|
||||
total_loss=float(repair.cost_price) if repair.cost_price else 0
|
||||
)
|
||||
db.session.add(scrap_record)
|
||||
created_records.append(scrap_record)
|
||||
continue
|
||||
|
||||
# 获取库存记录
|
||||
stock_record = None
|
||||
if source_table == 'stock_product':
|
||||
|
||||
Reference in New Issue
Block a user