Merge branch 'feature/LIL-721' into 'master'

LIL-721 Раздел бонусы в админке

Closes LIL-721

See merge request lilschool/site!241
remotes/origin/editis_13-01-19^2
cfwme 7 years ago
commit a5a4b6a48b
  1. 67
      api/v1/serializers/payment.py
  2. 5
      api/v1/urls.py
  3. 36
      api/v1/views.py
  4. 2
      apps/payment/models.py

@ -3,7 +3,7 @@ from rest_framework import serializers
from apps.payment.models import (
AuthorBalance, Payment,
CoursePayment, SchoolPayment,
GiftCertificatePayment)
GiftCertificatePayment, UserBonus,)
from .user import UserSerializer
from .course import CourseSerializer
@ -200,3 +200,68 @@ class GiftCertificatePaymentSerializer(serializers.ModelSerializer):
'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,
}

@ -19,7 +19,7 @@ from .views import (
SchoolScheduleViewSet, LiveLessonViewSet,
PaymentViewSet, ObjectCommentsViewSet,
ContestViewSet, ContestWorkViewSet,
AuthorBalanceUsersViewSet, CaptureEmail, FAQViewSet, UserGalleryViewSet)
AuthorBalanceUsersViewSet, CaptureEmail, FAQViewSet, UserGalleryViewSet, BonusesViewSet)
router = DefaultRouter()
router.register(r'author-requests', AuthorRequestViewSet, base_name='author-requests')
@ -43,10 +43,9 @@ router.register(r'galleries', GalleryViewSet, base_name='galleries')
router.register(r'gallery-images', GalleryImageViewSet, base_name='gallery-images')
router.register(r'faq', FAQViewSet, base_name='faq')
router.register(r'school-schedules', SchoolScheduleViewSet, base_name='school-schedules')
router.register(r'bonuses', BonusesViewSet, base_name='bonuses')
router.register(r'users', UserViewSet, base_name='users')
router.register(r'user-gallery', UserGalleryViewSet, base_name='user-gallery')
router.register(r'contests', ContestViewSet, base_name='contests')
router.register(r'contest-works', ContestWorkViewSet, base_name='contest_works')

@ -39,7 +39,7 @@ from .serializers.school import (
)
from .serializers.payment import (
AuthorBalanceSerializer, AuthorBalanceCreateSerializer,
PaymentSerializer,
PaymentSerializer, UserBonusSerializer, UserBonusCreateSerializer,
CoursePaymentCreateSerializer, SchoolPaymentCreateSerializer)
from .serializers.user import (
AuthorRequestSerializer,
@ -68,7 +68,7 @@ from apps.content.models import (
Contest, ContestWork, FAQ)
from apps.payment.models import (
AuthorBalance, Payment,
CoursePayment, SchoolPayment,
CoursePayment, SchoolPayment, UserBonus,
)
from apps.school.models import SchoolSchedule, LiveLesson
from apps.user.models import AuthorRequest
@ -724,7 +724,37 @@ class CaptureEmail(views.APIView):
return Response({'status': 'ok'})
class FAQViewSet(ExtendedModelViewSet):
queryset = FAQ.objects.all()
serializer_class = FAQSerializer
class BonusesViewSet(ExtendedModelViewSet):
queryset = UserBonus.objects.all()
serializer_class = UserBonusCreateSerializer
serializer_class_map = {
'list': UserBonusSerializer,
}
permission_classes = (IsAdmin,)
filter_fields = ('user', 'referral', 'payment', 'is_service', 'action_name')
search_fields = (
'action_name',
'user__email',
'user__first_name',
'user__last_name',
'referral__referral__email',
'referral__referral__first_name',
'referral__referral__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)

@ -304,7 +304,7 @@ class GiftCertificatePayment(Payment):
class UserBonus(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='bonuses')
amount = models.DecimalField(max_digits=8, decimal_places=2, default=0, editable=False)
amount = models.DecimalField(max_digits=8, decimal_places=2, default=0)
payment = models.ForeignKey(Payment, on_delete=models.SET_NULL, null=True)
referral = models.ForeignKey('user.Referral', on_delete=models.SET_NULL, null=True)
created_at = models.DateTimeField(auto_now_add=True)

Loading…
Cancel
Save