forked from erp-dev/erp
feat: relaxed in restrict out
This commit is contained in:
@@ -55,6 +55,51 @@ class CreateStockChangeSerializer(serializers.Serializer):
|
||||
return value
|
||||
|
||||
|
||||
class RelaxedQuantitySerializer(serializers.Serializer):
|
||||
"""宽松模式数量结构"""
|
||||
value = serializers.DecimalField(
|
||||
max_digits=10,
|
||||
decimal_places=2,
|
||||
min_value=Decimal('0.01'),
|
||||
help_text="产品总数量"
|
||||
)
|
||||
unit_count = serializers.DecimalField(
|
||||
max_digits=10,
|
||||
decimal_places=2,
|
||||
min_value=Decimal('0.01'),
|
||||
default=Decimal('1.00'),
|
||||
help_text="单条(匹)数量,默认 1"
|
||||
)
|
||||
|
||||
|
||||
class RelaxedProductStockChangeSerializer(serializers.Serializer):
|
||||
"""宽松模式产品序列化器"""
|
||||
product = serializers.IntegerField(help_text="产品ID")
|
||||
quantity = RelaxedQuantitySerializer(help_text="数量定义(总数与单条数)")
|
||||
|
||||
def validate_product(self, value: int) -> int:
|
||||
try:
|
||||
basic_info_models.Product.objects.get(id=value)
|
||||
except basic_info_models.Product.DoesNotExist:
|
||||
raise serializers.ValidationError(f"产品ID {value} 不存在")
|
||||
return value
|
||||
|
||||
|
||||
class CreateStockChangeRelaxedSerializer(serializers.Serializer):
|
||||
"""宽松模式创建库存变动记录"""
|
||||
products = RelaxedProductStockChangeSerializer(many=True, help_text="产品列表")
|
||||
|
||||
def validate_products(self, value: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
|
||||
if not value:
|
||||
raise serializers.ValidationError("产品列表不能为空")
|
||||
|
||||
product_ids = [item['product'] for item in value]
|
||||
if len(product_ids) != len(set(product_ids)):
|
||||
raise serializers.ValidationError("产品列表中存在重复的产品ID")
|
||||
|
||||
return value
|
||||
|
||||
|
||||
class StockChangeRecordResponseSerializer(serializers.ModelSerializer):
|
||||
"""库存变动记录响应序列化器"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user