Merge branch 'master' of gitlab.com:lilcity/backend into feature/LIL-682

remotes/origin/hotfix/LIL-691
gzbender 7 years ago
commit 4efb16f864
  1. 23
      api/v1/serializers/payment.py
  2. 44
      api/v1/views.py
  3. 6
      apps/auth/templates/auth/password_reset.html
  4. 2
      apps/course/templates/course/courses.html
  5. 2
      apps/course/views.py
  6. 3
      apps/payment/models.py
  7. 3
      web/src/components/blocks/BlockImageText.vue
  8. 2
      web/src/components/redactor/VueRedactor.vue

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

@ -3,7 +3,11 @@
{% block content %}
<p style="margin: 0 0 20px">Для восстановления пароля нажмите кнопку ниже.</p>
<div style="margin-bottom: 10px;">
<a href="{{ domain }}{% url 'lilcity:password_reset_confirm' uidb64=uid token=token %}" style="text-decoration: none; position: relative; padding: 13px 24px 12px; background-image: linear-gradient(-225deg, #D1FF7F 0%, #56FFFD 100%); border-radius: 3px; font-size: 12px; color: #191919; text-transform: uppercase; letter-spacing: 2px; text-align: center; transition: all .2s; z-index: 2;">Нажмите для восстановления</a>
<a href="{{ domain }}{% url 'lilcity:password_reset_confirm' uidb64=uid token=token %}"
style="text-decoration: none; position: relative; padding: 13px 24px 12px;
background-image: linear-gradient(-225deg, #D1FF7F 0%, #56FFFD 100%); display: inline-block;
border-radius: 3px; font-size: 12px; color: #191919; text-transform: uppercase;
letter-spacing: 2px; text-align: center; transition: all .2s; z-index: 2;">Нажмите для восстановления</a>
<p>Или скопируйте ссылку ниже, и вставьте её в адресную строку браузера.</p>
<p>{{ domain }}{% url 'lilcity:password_reset_confirm' uidb64=uid token=token %}</p>
</div>

@ -57,7 +57,7 @@
</div>
<div class="courses__load load">
{% if page_obj.has_next %}
<button class="load__btn btn" data-next-page="{{ page_obj.next_page_number }}">Подгрузить еще</button>
<button class="load__btn btn" data-next-page="{{ page_obj.next_page_number }}">Показать еще</button>
{% endif %}
</div>
</div>

@ -236,7 +236,7 @@ class CourseView(DetailView):
class CoursesView(ListView):
model = Course
context_object_name = 'course_items'
paginate_by = 6
paginate_by = 12
def get(self, request, *args, **kwargs):
self.object_list = self.get_queryset()

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

@ -30,6 +30,7 @@
<textarea class="field__textarea field__textarea_sm"
placeholder="Описание"
:value="text"
v-autosize="text"
@change="onTextChange"></textarea>
</div>
</div>
@ -65,4 +66,4 @@
'lil-image': LilImage,
},
}
</script>
</script>

@ -1,5 +1,5 @@
<template>
<textarea ref="input">{{ content }}</textarea>
<textarea ref="input" v-autosize="content">{{ content }}</textarea>
</template>
<script>

Loading…
Cancel
Save