60 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from rest_framework import serializers
 | 
						|
from .models import *
 | 
						|
from uncloud_vm.serializers import ManagedVMProductSerializer
 | 
						|
from uncloud_vm.models import VMProduct
 | 
						|
from uncloud_pay.models import RecurringPeriod, BillingAddress
 | 
						|
 | 
						|
# XXX: the OrderSomethingSomthingProductSerializer classes add a lot of
 | 
						|
# boilerplate: can we reduce it somehow?
 | 
						|
 | 
						|
class MatrixServiceProductSerializer(serializers.ModelSerializer):
 | 
						|
    vm = ManagedVMProductSerializer()
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = MatrixServiceProduct
 | 
						|
        fields = ['uuid', 'order', 'owner', 'status', 'vm', 'domain',
 | 
						|
                'recurring_period']
 | 
						|
        read_only_fields = ['uuid', 'order', 'owner', 'status']
 | 
						|
 | 
						|
class OrderMatrixServiceProductSerializer(MatrixServiceProductSerializer):
 | 
						|
    recurring_period = serializers.ChoiceField(
 | 
						|
            choices=MatrixServiceProduct.allowed_recurring_periods())
 | 
						|
 | 
						|
    def __init__(self, *args, **kwargs):
 | 
						|
        super(OrderMatrixServiceProductSerializer, self).__init__(*args, **kwargs)
 | 
						|
        self.fields['billing_address'] = serializers.ChoiceField(
 | 
						|
                choices=BillingAddress.get_addresses_for(
 | 
						|
                    self.context['request'].user)
 | 
						|
                )
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = MatrixServiceProductSerializer.Meta.model
 | 
						|
        fields = MatrixServiceProductSerializer.Meta.fields + [
 | 
						|
                'recurring_period', 'billing_address'
 | 
						|
                ]
 | 
						|
        read_only_fields = MatrixServiceProductSerializer.Meta.read_only_fields
 | 
						|
 | 
						|
class GenericServiceProductSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = GenericServiceProduct
 | 
						|
        fields = ['uuid', 'order', 'owner', 'status', 'custom_recurring_price',
 | 
						|
                'custom_description', 'custom_one_time_price']
 | 
						|
        read_only_fields = ['uuid', 'order', 'owner', 'status']
 | 
						|
 | 
						|
class OrderGenericServiceProductSerializer(GenericServiceProductSerializer):
 | 
						|
    recurring_period = serializers.ChoiceField(
 | 
						|
            choices=GenericServiceProduct.allowed_recurring_periods())
 | 
						|
 | 
						|
    def __init__(self, *args, **kwargs):
 | 
						|
        super(OrderGenericServiceProductSerializer, self).__init__(*args, **kwargs)
 | 
						|
        self.fields['billing_address'] = serializers.ChoiceField(
 | 
						|
                choices=BillingAddress.get_addresses_for(
 | 
						|
                    self.context['request'].user)
 | 
						|
                )
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = GenericServiceProductSerializer.Meta.model
 | 
						|
        fields = GenericServiceProductSerializer.Meta.fields + [
 | 
						|
                'recurring_period', 'billing_address'
 | 
						|
                ]
 | 
						|
        read_only_fields = GenericServiceProductSerializer.Meta.read_only_fields
 |