70 lines
2.6 KiB
Python
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)
|