From 0e9d3af2fa7ef1116e6ad18d129104425452815b Mon Sep 17 00:00:00 2001 From: gzbender Date: Mon, 17 Sep 2018 19:12:04 +0500 Subject: [PATCH 1/3] =?UTF-8?q?LIL-664=20=D0=90=D0=B4=D0=BC=D0=B8=D0=BD?= =?UTF-8?q?=D0=BA=D0=B0=20/=20=D0=B1=D0=B0=D0=BB=D0=B0=D0=BD=D1=81=D1=8B?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B5=D0=BF=D0=BE=D0=B4=D0=B0=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/serializers/payment.py | 58 +++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/api/v1/serializers/payment.py b/api/v1/serializers/payment.py index 6268a63d..0d4aec8b 100644 --- a/api/v1/serializers/payment.py +++ b/api/v1/serializers/payment.py @@ -46,8 +46,30 @@ 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 = PaymentSerializer() + payment = serializers.SerializerMethodField() class Meta: model = AuthorBalance @@ -70,25 +92,23 @@ class AuthorBalanceSerializer(serializers.ModelSerializer): 'payment', ) - -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) + 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 CoursePaymentSerializer(serializers.ModelSerializer): From 4f6e05c6e21dd719e7a4bb72fe99703b5c4a6cf1 Mon Sep 17 00:00:00 2001 From: nikita Date: Mon, 17 Sep 2018 19:16:06 +0300 Subject: [PATCH 2/3] balance pay respect to payoffs --- apps/user/models.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/user/models.py b/apps/user/models.py index 0df7cd01..cded09e6 100644 --- a/apps/user/models.py +++ b/apps/user/models.py @@ -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).aggregate(models.Sum('amount')) + payout_amount = income.get('amount__sum') or 0 + + return income_amount - income_commission - payout_amount @receiver(post_save, sender=User) From 4e936ba18a97370e50ac8dcc6b53a6efca266644 Mon Sep 17 00:00:00 2001 From: nikita Date: Mon, 17 Sep 2018 19:22:20 +0300 Subject: [PATCH 3/3] balance pay respect to payoffs --- apps/user/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/user/models.py b/apps/user/models.py index cded09e6..47008960 100644 --- a/apps/user/models.py +++ b/apps/user/models.py @@ -103,8 +103,8 @@ class User(AbstractUser): income_amount = income.get('amount__sum') or 0 income_commission = income.get('commission__sum') or 0 - payout = self.balances.filter(type=1).aggregate(models.Sum('amount')) - payout_amount = income.get('amount__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