You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
267 lines
6.5 KiB
267 lines
6.5 KiB
from rest_framework import serializers
|
|
|
|
from apps.payment.models import (
|
|
AuthorBalance, Payment,
|
|
CoursePayment, SchoolPayment,
|
|
GiftCertificatePayment, UserBonus,)
|
|
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()
|
|
payment = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = AuthorBalance
|
|
fields = (
|
|
'id',
|
|
'author',
|
|
'type',
|
|
'amount',
|
|
'commission',
|
|
'status',
|
|
'payment',
|
|
'card',
|
|
'cause',
|
|
'created_at',
|
|
)
|
|
|
|
read_only_fields = (
|
|
'id',
|
|
'author',
|
|
'type',
|
|
'payment',
|
|
'created_at',
|
|
)
|
|
|
|
def get_payment(self, instance):
|
|
try:
|
|
p = instance.payment
|
|
except Exception:
|
|
return None
|
|
if not p:
|
|
return None
|
|
data = {
|
|
'id': p.id,
|
|
'created_at': p.created_at,
|
|
'amount': p.amount,
|
|
'data': p.data,
|
|
'status': p.status,
|
|
}
|
|
if isinstance(instance.payment, CoursePayment):
|
|
data['course'] = {
|
|
'id': p.course.id,
|
|
'title': p.course.title,
|
|
}
|
|
return data
|
|
|
|
|
|
class PaymentSerializer(serializers.ModelSerializer):
|
|
user = UserSerializer()
|
|
|
|
class Meta:
|
|
model = Payment
|
|
fields = BASE_PAYMENT_FIELDS
|
|
read_only_fields = (
|
|
'id',
|
|
'user',
|
|
'data',
|
|
'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)
|
|
elif isinstance(instance, GiftCertificatePayment):
|
|
return GiftCertificatePaymentSerializer(instance, context=self.context).to_representation(instance)
|
|
|
|
|
|
class CoursePaymentCreateSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
model = CoursePayment
|
|
fields = BASE_PAYMENT_FIELDS + ('course', 'access_expire')
|
|
read_only_fields = (
|
|
'id',
|
|
'user',
|
|
'course',
|
|
'created_at',
|
|
'update_at',
|
|
)
|
|
|
|
|
|
class CoursePaymentSerializer(serializers.ModelSerializer):
|
|
user = UserSerializer()
|
|
course = CourseSerializer()
|
|
|
|
class Meta:
|
|
model = CoursePayment
|
|
fields = BASE_PAYMENT_FIELDS + ('course', 'access_expire')
|
|
read_only_fields = (
|
|
'id',
|
|
'user',
|
|
'course',
|
|
'created_at',
|
|
'update_at',
|
|
)
|
|
|
|
|
|
class SchoolPaymentCreateSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
model = SchoolPayment
|
|
fields = BASE_PAYMENT_FIELDS + (
|
|
'weekdays',
|
|
'date_start',
|
|
'date_end',
|
|
)
|
|
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',
|
|
)
|
|
|
|
|
|
class GiftCertificatePaymentSerializer(serializers.ModelSerializer):
|
|
user = UserSerializer()
|
|
|
|
class Meta:
|
|
model = GiftCertificatePayment
|
|
fields = BASE_PAYMENT_FIELDS + (
|
|
'gift_certificate',
|
|
)
|
|
read_only_fields = (
|
|
'id',
|
|
'user',
|
|
'course',
|
|
'created_at',
|
|
'update_at',
|
|
)
|
|
|
|
|
|
class UserBonusCreateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = UserBonus
|
|
fields = (
|
|
'user', 'amount', 'payment', 'referral', 'created_at', 'is_service', 'action_name',
|
|
)
|
|
read_only_fields = (
|
|
'id',
|
|
'created_at',
|
|
)
|
|
|
|
def to_representation(self, instance):
|
|
return UserBonusSerializer(instance, context=self.context).to_representation(instance)
|
|
|
|
|
|
class UserBonusSerializer(serializers.ModelSerializer):
|
|
user = UserSerializer()
|
|
payment = serializers.SerializerMethodField()
|
|
referral = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = UserBonus
|
|
fields = (
|
|
'user', 'amount', 'payment', 'referral', 'created_at', 'is_service', 'action_name',
|
|
)
|
|
read_only_fields = (
|
|
'id',
|
|
'user',
|
|
'created_at',
|
|
)
|
|
|
|
def get_payment(self, instance):
|
|
try:
|
|
p = instance.payment
|
|
except Exception:
|
|
return None
|
|
if not p:
|
|
return None
|
|
data = {
|
|
'id': p.id,
|
|
'created_at': p.created_at,
|
|
'amount': p.amount,
|
|
'data': p.data,
|
|
'status': p.status,
|
|
}
|
|
if isinstance(instance.payment, CoursePayment):
|
|
data['course'] = {
|
|
'id': p.course.id,
|
|
'title': p.course.title,
|
|
}
|
|
return data
|
|
|
|
def get_referral(self, instance):
|
|
try:
|
|
r = instance.referral
|
|
except Exception:
|
|
return None
|
|
if not r:
|
|
return None
|
|
return {
|
|
'id': r.id,
|
|
'referral': UserSerializer(instance=r.referral).data,
|
|
}
|
|
|