from rest_framework import serializers from apps.payment.models import ( AuthorBalance, Payment, CoursePayment, SchoolPayment, ) from .user import UserSerializer from .course import CourseSerializer BASE_PAYMENT_FIELDS = ( 'id', 'user', 'amount', 'status', 'data', 'is_deliverable', 'created_at', 'update_at', ) class AuthorBalanceCreateSerializer(serializers.ModelSerializer): class Meta: model = AuthorBalance fields = ( 'id', 'author', 'type', 'amount', 'commission', 'status', 'payment', 'card', 'cause', ) read_only_fields = ( 'id', 'author', 'type', 'payment', ) def to_representation(self, instance): return AuthorBalanceSerializer(instance, context=self.context).to_representation(instance) class AuthorBalanceSerializer(serializers.ModelSerializer): author = UserSerializer() class Meta: model = AuthorBalance fields = ( 'id', 'author', 'type', 'amount', 'commission', 'status', 'payment', 'card', 'cause', ) read_only_fields = ( 'id', 'author', 'type', 'payment', ) class PaymentSerializer(serializers.ModelSerializer): user = UserSerializer() class Meta: model = Payment fields = BASE_PAYMENT_FIELDS read_only_fields = ( 'id', 'user', 'created_at', 'update_at', ) def to_representation(self, instance): if isinstance(instance, CoursePayment): return CoursePaymentSerializer(instance, context=self.context).to_representation(instance) elif isinstance(instance, SchoolPayment): return SchoolPaymentSerializer(instance, context=self.context).to_representation(instance) class CoursePaymentSerializer(serializers.ModelSerializer): user = UserSerializer() course = CourseSerializer() class Meta: model = CoursePayment fields = BASE_PAYMENT_FIELDS + ('course',) read_only_fields = ( 'id', 'user', 'course', 'created_at', 'update_at', ) class SchoolPaymentSerializer(serializers.ModelSerializer): user = UserSerializer() class Meta: model = SchoolPayment fields = BASE_PAYMENT_FIELDS + ( 'weekdays', 'date_start', 'date_end', ) read_only_fields = ( 'id', 'user', 'course', 'created_at', 'update_at', )