forked from erp-dev/erp
feat: transfer api for stock module
This commit is contained in:
@@ -154,6 +154,86 @@ class SetMerchantAutoCompleteStockChangeSerializer(serializers.Serializer):
|
||||
)
|
||||
|
||||
|
||||
class StockTransferProductSerializer(serializers.Serializer):
|
||||
product_id = serializers.IntegerField()
|
||||
quantities = serializers.ListField(
|
||||
child=serializers.DecimalField(max_digits=10, decimal_places=2),
|
||||
required=False,
|
||||
allow_empty=False,
|
||||
)
|
||||
value = serializers.DecimalField(max_digits=10, decimal_places=2, required=False)
|
||||
num_of_rolls = serializers.IntegerField(required=False)
|
||||
unit_count = serializers.DecimalField(max_digits=10, decimal_places=2, required=False)
|
||||
consume_detail_ids = serializers.ListField(
|
||||
child=serializers.IntegerField(min_value=1),
|
||||
required=False,
|
||||
allow_empty=False,
|
||||
)
|
||||
|
||||
def validate(self, attrs):
|
||||
has_quantities = bool(attrs.get('quantities'))
|
||||
has_value = attrs.get('value') is not None
|
||||
has_consumes = bool(attrs.get('consume_detail_ids'))
|
||||
if not (has_quantities or has_value or has_consumes):
|
||||
raise serializers.ValidationError('必须提供 quantities、value 或 consume_detail_ids 之一')
|
||||
return attrs
|
||||
|
||||
|
||||
class StockTransferSerializer(serializers.Serializer):
|
||||
from_warehouse = serializers.IntegerField()
|
||||
to_warehouse = serializers.IntegerField()
|
||||
transfer_date = serializers.DateField(required=False)
|
||||
remarks = serializers.CharField(required=False, allow_blank=True, allow_null=True, max_length=500)
|
||||
request_id = serializers.CharField(required=False, allow_blank=True, allow_null=True, max_length=64)
|
||||
products = StockTransferProductSerializer(many=True)
|
||||
|
||||
def validate_products(self, value):
|
||||
if not value:
|
||||
raise serializers.ValidationError('产品列表不能为空')
|
||||
return value
|
||||
|
||||
|
||||
class TransferOrderItemSerializer(serializers.ModelSerializer):
|
||||
product_name = serializers.CharField(source='product.name', read_only=True)
|
||||
unit_display = serializers.CharField(source='get_unit_display', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = stock_models.TransferOrderItem
|
||||
fields = ['id', 'product', 'product_name', 'total_quantity', 'unit', 'unit_display', 'num_of_rolls']
|
||||
|
||||
|
||||
class StockTransferResponseSerializer(serializers.ModelSerializer):
|
||||
items = TransferOrderItemSerializer(many=True, read_only=True)
|
||||
from_warehouse_name = serializers.CharField(source='from_warehouse.name', read_only=True)
|
||||
to_warehouse_name = serializers.CharField(source='to_warehouse.name', read_only=True)
|
||||
mode_display = serializers.CharField(source='get_mode_display', read_only=True)
|
||||
status_display = serializers.CharField(source='get_status_display', read_only=True)
|
||||
outgoing_record_id = serializers.IntegerField(source='outgoing_record.id', read_only=True)
|
||||
incoming_record_id = serializers.IntegerField(source='incoming_record.id', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = stock_models.TransferOrder
|
||||
fields = [
|
||||
'id',
|
||||
'merchant',
|
||||
'from_warehouse',
|
||||
'from_warehouse_name',
|
||||
'to_warehouse',
|
||||
'to_warehouse_name',
|
||||
'mode',
|
||||
'mode_display',
|
||||
'operator',
|
||||
'transfer_date',
|
||||
'status',
|
||||
'status_display',
|
||||
'remarks',
|
||||
'request_id',
|
||||
'outgoing_record_id',
|
||||
'incoming_record_id',
|
||||
'items',
|
||||
]
|
||||
|
||||
|
||||
# ==================== 通用文件上传序列化器 ====================
|
||||
|
||||
class UploadedFileSerializer(serializers.ModelSerializer):
|
||||
|
||||
Reference in New Issue
Block a user