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.utils.decorators import permission_required, audit_log
|
||||||
from app.services.auth_service import AuthService
|
from app.services.auth_service import AuthService
|
||||||
from app.extensions import db
|
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.buy import StockBuy
|
||||||
from app.models.inbound.semi import StockSemi
|
from app.models.inbound.semi import StockSemi
|
||||||
from app.models.inbound.product import StockProduct
|
from app.models.inbound.product import StockProduct
|
||||||
@ -172,6 +172,28 @@ class ScrapService:
|
|||||||
res['price'] = get_price(buy, 'stock_buy')
|
res['price'] = get_price(buy, 'stock_buy')
|
||||||
return res
|
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
|
return None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -210,6 +232,31 @@ class ScrapService:
|
|||||||
if not stock_id or not source_table or scrap_qty <= 0:
|
if not stock_id or not source_table or scrap_qty <= 0:
|
||||||
continue
|
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
|
stock_record = None
|
||||||
if source_table == 'stock_product':
|
if source_table == 'stock_product':
|
||||||
|
|||||||
@ -209,6 +209,10 @@ class RepairInboundService:
|
|||||||
if status == '已出库':
|
if status == '已出库':
|
||||||
raise ValueError("禁止手动变更为已出库状态,请通过扫码出库模块进行操作")
|
raise ValueError("禁止手动变更为已出库状态,请通过扫码出库模块进行操作")
|
||||||
|
|
||||||
|
# 禁止手动变更为报废转出状态,必须通过扫码报废模块进行
|
||||||
|
if status == '报废转出':
|
||||||
|
raise ValueError("禁止手动变更为报废状态,请前往报废管理进行扫码操作")
|
||||||
|
|
||||||
repair = TransRepair.query.get(id)
|
repair = TransRepair.query.get(id)
|
||||||
if not repair:
|
if not repair:
|
||||||
return None
|
return None
|
||||||
|
|||||||
@ -186,7 +186,6 @@
|
|||||||
<el-option label="维修中" value="维修中" />
|
<el-option label="维修中" value="维修中" />
|
||||||
<el-option label="等待配件" value="等待配件" />
|
<el-option label="等待配件" value="等待配件" />
|
||||||
<el-option label="已修复" value="已修复" />
|
<el-option label="已修复" value="已修复" />
|
||||||
<el-option label="报废转出" value="报废转出" />
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="追加日志" prop="repair_log">
|
<el-form-item label="追加日志" prop="repair_log">
|
||||||
|
|||||||
Reference in New Issue
Block a user