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

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

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

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

Loading…
Cancel
Save