Files

70 lines
2.6 KiB
Python

"""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)