|
|
|
|
@ -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,7 +77,8 @@ User = get_user_model() |
|
|
|
|
|
|
|
|
|
class AuthorBalanceViewSet(ExtendedModelViewSet): |
|
|
|
|
queryset = AuthorBalance.objects.filter( |
|
|
|
|
author__role__in=[User.AUTHOR_ROLE, User.ADMIN_ROLE, User.TEACHER_ROLE], |
|
|
|
|
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 |
|
|
|
|
serializer_class_map = { |
|
|
|
|
@ -90,6 +92,38 @@ class AuthorBalanceViewSet(ExtendedModelViewSet): |
|
|
|
|
'author__last_name', |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def get_queryset(self): |
|
|
|
|
qs = super().get_queryset() |
|
|
|
|
return qs |
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs): |
|
|
|
|
queryset = self.filter_queryset(self.get_queryset()) |
|
|
|
|
|
|
|
|
|
if 'page' in request.query_params: |
|
|
|
|
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() |
|
|
|
|
|