diff --git a/api/v1/serializers/payment.py b/api/v1/serializers/payment.py index b388be21..4330401f 100644 --- a/api/v1/serializers/payment.py +++ b/api/v1/serializers/payment.py @@ -46,26 +46,6 @@ class AuthorBalanceCreateSerializer(serializers.ModelSerializer): return AuthorBalanceSerializer(instance, context=self.context).to_representation(instance) -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 AuthorBalanceSerializer(serializers.ModelSerializer): author = UserSerializer() payment = serializers.SerializerMethodField() @@ -96,11 +76,14 @@ class AuthorBalanceSerializer(serializers.ModelSerializer): 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'] = { diff --git a/api/v1/views.py b/api/v1/views.py index a01f9d6d..df0d180c 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -1,7 +1,8 @@ from datetime import datetime +from decimal import Decimal from django.contrib.auth import get_user_model - +from django.db.models import Q from rest_framework import status, views, viewsets, generics from rest_framework.decorators import detail_route, list_route, action, permission_classes, authentication_classes from rest_framework.response import Response @@ -76,6 +77,7 @@ User = get_user_model() class AuthorBalanceViewSet(ExtendedModelViewSet): queryset = AuthorBalance.objects.filter( + Q(type=1) | Q(payment__status__in=Payment.PW_PAID_STATUSES), author__role__in=[User.AUTHOR_ROLE, User.ADMIN_ROLE, User.TEACHER_ROLE], ) serializer_class = AuthorBalanceCreateSerializer @@ -90,6 +92,34 @@ class AuthorBalanceViewSet(ExtendedModelViewSet): 'author__last_name', ) + def list(self, request, *args, **kwargs): + queryset = self.filter_queryset(self.get_queryset()) + + if request.query_params.get('page'): + page = self.paginate_queryset(queryset) + if page is not None: + serializer = self.get_serializer(page, many=True) + return self.get_paginated_response(serializer.data) + + serializer = self.get_serializer(queryset, many=True) + return Response(serializer.data) + + @action(methods=['post'], detail=False, url_path='add-withdrawal') + def add_withdrawal(self, request): + author_id = request.data.get('author_id') + amount = request.data.get('amount') + card = request.data.get('card') + if not all([author_id, amount, card]): + return Response(status=status.HTTP_400_BAD_REQUEST) + AuthorBalance.objects.create( + author_id=author_id, + type=AuthorBalance.OUT, + amount=Decimal(amount), + status=AuthorBalance.ACCEPTED, + card=card, + ) + return Response(status=status.HTTP_200_OK) + class BanerViewSet(ExtendedModelViewSet): queryset = Baner.objects.all() @@ -391,6 +421,18 @@ class UserViewSet(ExtendedModelViewSet): # 'delete': IsAdmin, # } + def list(self, request, *args, **kwargs): + queryset = self.filter_queryset(self.get_queryset()) + + if request.query_params.get('page'): + page = self.paginate_queryset(queryset) + if page is not None: + serializer = self.get_serializer(page, many=True) + return self.get_paginated_response(serializer.data) + + serializer = self.get_serializer(queryset, many=True) + return Response(serializer.data) + @list_route(methods=['get']) def me(self, request): serializer = self.get_serializer_class() diff --git a/apps/auth/templates/auth/password_reset.html b/apps/auth/templates/auth/password_reset.html index c611ee51..a9a3af16 100644 --- a/apps/auth/templates/auth/password_reset.html +++ b/apps/auth/templates/auth/password_reset.html @@ -3,7 +3,11 @@ {% block content %}
Для восстановления пароля нажмите кнопку ниже.
Или скопируйте ссылку ниже, и вставьте её в адресную строку браузера.
{{ domain }}{% url 'lilcity:password_reset_confirm' uidb64=uid token=token %}