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