fix: prevent inbound of disabled materials
This commit is contained in:
@ -60,7 +60,9 @@ class BuyInboundService:
|
||||
@staticmethod
|
||||
def search_base_material(keyword):
|
||||
try:
|
||||
# [核心修改] 只查询已启用的物料,防止选择已禁用的历史物料
|
||||
query = MaterialBase.query.filter(MaterialBase.is_enabled == True)
|
||||
|
||||
if keyword:
|
||||
query = query.filter(
|
||||
or_(
|
||||
@ -100,6 +102,10 @@ class BuyInboundService:
|
||||
if not material:
|
||||
raise ValueError("所选物料不存在")
|
||||
|
||||
# [核心修改] 后端二次校验:如果物料已停用,禁止入库
|
||||
if not material.is_enabled:
|
||||
raise ValueError(f"物料【{material.name}】已停用,无法办理新入库。")
|
||||
|
||||
# --- [修复点] 执行唯一性校验 ---
|
||||
BuyInboundService._check_unique(
|
||||
base_id=base_id,
|
||||
|
||||
@ -40,7 +40,7 @@ class ProductInboundService:
|
||||
@staticmethod
|
||||
def search_base_material(keyword):
|
||||
try:
|
||||
# 1. 基础查询:必须是已启用的物料
|
||||
# [核心修改] 只查询已启用的物料
|
||||
query = MaterialBase.query.filter(MaterialBase.is_enabled == True)
|
||||
|
||||
# 2. 动态条件:如果传入了关键词,则增加模糊匹配条件
|
||||
@ -85,6 +85,10 @@ class ProductInboundService:
|
||||
material = MaterialBase.query.get(base_id)
|
||||
if not material: raise ValueError("物料不存在")
|
||||
|
||||
# [核心修改] 后端二次校验:如果物料已停用,禁止入库
|
||||
if not material.is_enabled:
|
||||
raise ValueError(f"物料【{material.name}】已停用,无法办理新入库。")
|
||||
|
||||
# --- [核心修改] 执行唯一性校验 ---
|
||||
ProductInboundService._check_unique(
|
||||
serial_number=data.get('serial_number')
|
||||
|
||||
@ -54,7 +54,7 @@ class SemiInboundService:
|
||||
@staticmethod
|
||||
def search_base_material(keyword):
|
||||
try:
|
||||
# 基础查询:必须是已启用的物料
|
||||
# [核心修改] 只查询已启用的物料
|
||||
query = MaterialBase.query.filter(MaterialBase.is_enabled == True)
|
||||
|
||||
# 如果有关键词,进行模糊匹配
|
||||
@ -101,6 +101,10 @@ class SemiInboundService:
|
||||
if not material:
|
||||
raise ValueError(f"ID为 {base_id} 的基础物料不存在")
|
||||
|
||||
# [核心修改] 后端二次校验:如果物料已停用,禁止入库
|
||||
if not material.is_enabled:
|
||||
raise ValueError(f"物料【{material.name}】已停用,无法办理新入库。")
|
||||
|
||||
# --- [核心修改] 执行唯一性校验 ---
|
||||
SemiInboundService._check_unique(
|
||||
base_id=base_id,
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
# app/services/inbound/service_service.py
|
||||
from app import db
|
||||
from app.models.inbound.service import StockService
|
||||
from app.models.base import MaterialBase
|
||||
@ -37,7 +38,9 @@ class ServiceService:
|
||||
def search_base_material(cls, keyword):
|
||||
"""搜索基础物料,供前端远程选择"""
|
||||
try:
|
||||
# [核心修改] 只查询已启用的物料
|
||||
query = MaterialBase.query.filter(MaterialBase.is_enabled == True)
|
||||
|
||||
if keyword:
|
||||
query = query.filter(
|
||||
db.or_(
|
||||
@ -66,9 +69,15 @@ class ServiceService:
|
||||
def create_service(cls, data):
|
||||
"""创建服务权益记录"""
|
||||
# 检查基础物料是否存在
|
||||
base = MaterialBase.query.get(data.get('base_id'))
|
||||
base_id = data.get('base_id')
|
||||
base = MaterialBase.query.get(base_id)
|
||||
if not base:
|
||||
raise ValueError('基础物料不存在')
|
||||
|
||||
# [核心修改] 后端二次校验:如果物料已停用,禁止创建服务权益
|
||||
if not base.is_enabled:
|
||||
raise ValueError(f"物料【{base.name}】已停用,无法创建新的服务权益。")
|
||||
|
||||
# 生成SKU
|
||||
sku = cls._generate_sku()
|
||||
service = StockService(
|
||||
@ -144,12 +153,12 @@ class ServiceService:
|
||||
# 总数
|
||||
total = query.count()
|
||||
# 分页
|
||||
items = query.order_by(StockService.created_at.desc())\
|
||||
.offset((page - 1) * per_page)\
|
||||
.limit(per_page).all()
|
||||
items = query.order_by(StockService.created_at.desc()) \
|
||||
.offset((page - 1) * per_page) \
|
||||
.limit(per_page).all()
|
||||
return {
|
||||
'items': [item.to_dict() for item in items],
|
||||
'total': total,
|
||||
'page': page,
|
||||
'per_page': per_page
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user