baseline: 批次A-D 成果 + membership 半成品(测试红)
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
"""inventory 序列化器(async 兼容)。"""
|
||||
|
||||
from rest_framework import serializers
|
||||
from apps.core.serializers import AsyncModelSerializer
|
||||
from .models import Warehouse, Stock, StockBatch, StockMovement
|
||||
|
||||
|
||||
class WarehouseSerializer(AsyncModelSerializer):
|
||||
class Meta:
|
||||
model = Warehouse
|
||||
fields = [
|
||||
"id", "code", "name", "location", "is_active", "is_default",
|
||||
"is_deleted", "created_at", "updated_at",
|
||||
]
|
||||
read_only_fields = ["id", "created_at", "updated_at"]
|
||||
|
||||
|
||||
class StockSerializer(AsyncModelSerializer):
|
||||
warehouse_code = serializers.CharField(source="warehouse.code", read_only=True)
|
||||
product_code = serializers.CharField(source="product.code", read_only=True)
|
||||
product_name = serializers.CharField(source="product.name", read_only=True)
|
||||
available = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Stock
|
||||
fields = [
|
||||
"id", "warehouse_code", "product_code", "product_name",
|
||||
"on_hand", "locked", "available", "avg_cost",
|
||||
"is_deleted", "created_at", "updated_at",
|
||||
]
|
||||
read_only_fields = ["id", "created_at", "updated_at", "available", "on_hand", "locked", "avg_cost"]
|
||||
|
||||
def get_available(self, obj):
|
||||
return str(obj.on_hand - obj.locked)
|
||||
|
||||
|
||||
class StockMovementSerializer(AsyncModelSerializer):
|
||||
warehouse_code = serializers.CharField(source="warehouse.code", read_only=True)
|
||||
product_code = serializers.CharField(source="product.code", read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = StockMovement
|
||||
fields = [
|
||||
"id", "warehouse_code", "product_code",
|
||||
"movement_type", "source_type", "source_ref",
|
||||
"quantity", "unit_cost",
|
||||
"created_at",
|
||||
]
|
||||
read_only_fields = fields # 流水只读
|
||||
|
||||
|
||||
class StockBatchSerializer(AsyncModelSerializer):
|
||||
warehouse_code = serializers.CharField(source="warehouse.code", read_only=True)
|
||||
product_code = serializers.CharField(source="product.code", read_only=True)
|
||||
product_name = serializers.CharField(source="product.name", read_only=True)
|
||||
available = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = StockBatch
|
||||
fields = [
|
||||
"id", "warehouse_code", "product_code", "product_name",
|
||||
"batch_no", "production_date", "expiry_date",
|
||||
"on_hand", "locked", "available", "unit_cost",
|
||||
"is_deleted", "created_at", "updated_at",
|
||||
]
|
||||
read_only_fields = ["id", "created_at", "updated_at", "available"]
|
||||
|
||||
def get_available(self, obj):
|
||||
return str(obj.on_hand - obj.locked)
|
||||
Reference in New Issue
Block a user