from django.contrib.auth import get_user_model from rest_framework import serializers from .models import * from functools import reduce from uncloud_vm.serializers import VMProductSerializer class BillSerializer(serializers.ModelSerializer): class Meta: model = Bill fields = ['owner', 'amount', 'due_date', 'creation_date', 'starting_date', 'ending_date', 'paid'] class PaymentSerializer(serializers.ModelSerializer): class Meta: model = Payment fields = ['owner', 'amount', 'source', 'timestamp'] class PaymentMethodSerializer(serializers.ModelSerializer): class Meta: model = PaymentMethod fields = ['owner', 'primary', 'source', 'description'] class ProductSerializer(serializers.Serializer): vms = VMProductSerializer(many=True, required=False) class meta: fields = ['vms'] def create(self, validated_data): pass class OrderSerializer(serializers.ModelSerializer): products = ProductSerializer(many=True) class Meta: model = Order fields = '__all__' def create(self, validated_data): products_data = validated_data.pop('products') order = Order.objects.create(**validated_data) for product_data in products_data: print("spouik") print(product_data) pass # TODO return order class UserSerializer(serializers.ModelSerializer): class Meta: model = get_user_model() fields = ['username', 'email', 'balance'] # Display current 'balance' balance = serializers.SerializerMethodField('get_balance') def __sum_balance(self, entries): return reduce(lambda acc, entry: acc + entry.amount, entries, 0) def get_balance(self, user): bills = self.__sum_balance(Bill.objects.filter(owner=user)) payments = self.__sum_balance(Payment.objects.filter(owner=user)) balance = payments - bills return balance