LIL-686 Доработать балансы преподавателей

remotes/origin/hotfix/LIL-691
gzbender 7 years ago
parent ba6249f984
commit f23036e8d3
  1. 23
      api/v1/serializers/payment.py
  2. 38
      api/v1/views.py
  3. 3
      apps/payment/models.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'] = {

@ -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()

@ -61,7 +61,8 @@ class AuthorBalance(models.Model):
verbose_name_plural = 'Балансы'
def save(self, *args, **kwargs):
self.commission = self.calc_commission()
if self.status != self.ACCEPTED:
self.commission = self.calc_commission()
if self.type == self.OUT:
if self.status == self.DECLINED and not self.declined_send_at:
send_email(

Loading…
Cancel
Save