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

remotes/origin/hotfix/LIL-661
gzbender 7 years ago
commit 9f3f53d587
  1. 81
      api/v1/serializers/payment.py
  2. 14
      api/v1/views.py
  3. 12
      apps/user/models.py

@ -46,8 +46,29 @@ 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()
class Meta:
model = AuthorBalance
@ -70,25 +91,23 @@ class AuthorBalanceSerializer(serializers.ModelSerializer):
'payment',
)
class PaymentCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Payment
# fields = (
# 'weekdays',
# 'date_start',
# 'date_end',
# )
fields = '__all__'
read_only_fields = (
'id',
'user',
'created_at',
'update_at',
)
def get_payment(self, instance):
try:
p = instance.payment
except Exception:
return None
data = {
'id': p.id,
'created_at': p.created_at,
'amount': p.amount,
'data': p.data,
}
if isinstance(instance.payment, CoursePayment):
data['course'] = {
'id': p.course.id,
'title': p.course.title,
}
return data
class PaymentSerializer(serializers.ModelSerializer):
@ -112,6 +131,7 @@ class PaymentSerializer(serializers.ModelSerializer):
class CoursePaymentCreateSerializer(serializers.ModelSerializer):
class Meta:
model = CoursePayment
fields = BASE_PAYMENT_FIELDS + ('course',)
@ -124,13 +144,24 @@ class CoursePaymentCreateSerializer(serializers.ModelSerializer):
)
class CoursePaymentSerializer(CoursePaymentCreateSerializer):
class CoursePaymentSerializer(serializers.ModelSerializer):
user = UserSerializer()
course = CourseSerializer()
class Meta:
model = CoursePayment
fields = BASE_PAYMENT_FIELDS + ('course',)
read_only_fields = (
'id',
'user',
'course',
'created_at',
'update_at',
)
class SchoolPaymentCreateSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = SchoolPayment
fields = BASE_PAYMENT_FIELDS + (
@ -146,14 +177,8 @@ class SchoolPaymentCreateSerializer(serializers.ModelSerializer):
'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 SchoolPaymentSerializer(SchoolPaymentCreateSerializer):
class SchoolPaymentSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:

@ -34,7 +34,7 @@ from .serializers.payment import (
AuthorBalanceSerializer, AuthorBalanceCreateSerializer,
PaymentSerializer, CoursePaymentSerializer,
SchoolPaymentSerializer,
PaymentCreateSerializer, CoursePaymentCreateSerializer, SchoolPaymentCreateSerializer)
CoursePaymentCreateSerializer, SchoolPaymentCreateSerializer)
from .serializers.user import (
AuthorRequestSerializer,
UserSerializer, UserPhotoSerializer,
@ -453,13 +453,9 @@ class AuthorRequestViewSet(ExtendedModelViewSet):
filter_fields = ('status',)
class PaymentViewSet(ExtendedModelViewSet):
class PaymentViewSet(viewsets.ModelViewSet):
queryset = Payment.objects.all()
serializer_class = PaymentCreateSerializer
serializer_class_map = {
'list': PaymentSerializer,
'retrieve': PaymentSerializer,
}
serializer_class = PaymentSerializer
permission_classes = (IsAdmin,)
filter_fields = ('status', 'user',)
ordering_fields = (
@ -472,14 +468,14 @@ class PaymentViewSet(ExtendedModelViewSet):
def get_serializer(self, instance, *args, **kwargs):
print('instance', type(instance), self.action)
serializer_class = self.get_serializer_class()
if self.action == 'partial_update':
if 'update' in self.action:
if isinstance(instance, CoursePayment):
serializer_class = CoursePaymentCreateSerializer
elif isinstance(instance, SchoolPayment):
serializer_class = SchoolPaymentCreateSerializer
print('serializer_class', serializer_class)
kwargs['context'] = self.get_serializer_context()
return serializer_class(*args, **kwargs)
return serializer_class(instance, *args, **kwargs)
def get_queryset(self):
queryset = self.queryset

@ -92,7 +92,7 @@ class User(AbstractUser):
@property
def balance(self):
aggregate = self.balances.filter(
income = self.balances.filter(
type=0,
payment__isnull=False,
payment__status__isnull=False
@ -100,9 +100,13 @@ class User(AbstractUser):
models.Sum('amount'),
models.Sum('commission'),
)
amount = aggregate.get('amount__sum') or 0
commission = aggregate.get('commission__sum') or 0
return amount - commission
income_amount = income.get('amount__sum') or 0
income_commission = income.get('commission__sum') or 0
payout = self.balances.filter(type=1, status=1).aggregate(models.Sum('amount'))
payout_amount = payout.get('amount__sum') or 0
return income_amount - income_commission - payout_amount
@receiver(post_save, sender=User)

Loading…
Cancel
Save