diff --git a/api/v1/serializers/payment.py b/api/v1/serializers/payment.py index d005a88d..b24d2777 100644 --- a/api/v1/serializers/payment.py +++ b/api/v1/serializers/payment.py @@ -1,7 +1,22 @@ from rest_framework import serializers -from apps.payment.models import AuthorBalance +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): @@ -54,3 +69,57 @@ class AuthorBalanceSerializer(serializers.ModelSerializer): '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() + + 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', + ) diff --git a/api/v1/urls.py b/api/v1/urls.py index 455adb25..409ed79f 100644 --- a/api/v1/urls.py +++ b/api/v1/urls.py @@ -17,6 +17,7 @@ from .views import ( GalleryViewSet, GalleryImageViewSet, UserViewSet, LessonViewSet, ImageObjectViewSet, SchoolScheduleViewSet, LiveLessonViewSet, + PaymentViewSet, ) router = DefaultRouter() @@ -30,7 +31,7 @@ router.register(r'materials', MaterialViewSet, base_name='materials') router.register(r'lessons', LessonViewSet, base_name='lessons') router.register(r'likes', LikeViewSet, base_name='likes') router.register(r'live-lesson', LiveLessonViewSet, base_name='live-lesson') - +router.register(r'payments', PaymentViewSet, base_name='payments') router.register(r'image-objects', ImageObjectViewSet, base_name='image-objects') router.register(r'images', ImageViewSet, base_name='images') router.register(r'texts', TextViewSet, base_name='texts') diff --git a/api/v1/views.py b/api/v1/views.py index c67a4c81..e1342080 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -30,7 +30,11 @@ from .serializers.school import ( LiveLessonCreateSerializer, LiveLessonSerializer, ) -from .serializers.payment import AuthorBalanceSerializer, AuthorBalanceCreateSerializer +from .serializers.payment import ( + AuthorBalanceSerializer, AuthorBalanceCreateSerializer, + PaymentSerializer, CoursePaymentSerializer, + SchoolPaymentSerializer, +) from .serializers.user import ( AuthorRequestSerializer, UserSerializer, UserPhotoSerializer, @@ -53,7 +57,10 @@ from apps.content.models import ( Baner, Image, Text, ImageText, Video, Gallery, GalleryImage, ImageObject, ) -from apps.payment.models import AuthorBalance +from apps.payment.models import ( + AuthorBalance, Payment, + CoursePayment, SchoolPayment, +) from apps.school.models import SchoolSchedule, LiveLesson from apps.user.models import AuthorRequest @@ -409,3 +416,10 @@ class AuthorRequestViewSet(ExtendedModelViewSet): serializer_class = AuthorRequestSerializer permission_classes = (IsAdmin,) filter_fields = ('status',) + + +class PaymentViewSet(ExtendedModelViewSet): + queryset = Payment.objects.all() + serializer_class = PaymentSerializer + permission_classes = (IsAdmin,) + filter_fields = ('status',)