LIL-271. Fix balance calc & add balance to user serializer

remotes/origin/hasaccess
Ivlev Denis 8 years ago
parent 6e4e50c01a
commit 8ba76c5ae6
  1. 2
      api/v1/serializers/user.py
  2. 17
      apps/payment/models.py
  3. 9
      apps/user/models.py

@ -35,6 +35,7 @@ class UserSerializer(serializers.ModelSerializer):
'fb_data',
'is_email_proved',
'photo',
'balance',
)
read_only_fields = (
@ -44,6 +45,7 @@ class UserSerializer(serializers.ModelSerializer):
'is_staff',
'fb_id',
'fb_data',
'balance',
)

@ -2,6 +2,7 @@ from django.db import models
from django.contrib.auth import get_user_model
from django.contrib.postgres.fields import ArrayField, JSONField
from constance import config
from paymentwall import Pingback
from polymorphic.models import PolymorphicModel
@ -21,7 +22,8 @@ class AuthorBalance(models.Model):
(1, 'Accepted'),
(2, 'Declined'),
)
author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Автор', null=True, blank=True, related_name='balances')
author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Автор',
null=True, blank=True, related_name='balances')
type = models.PositiveSmallIntegerField('Тип', choices=TYPE_CHOICES, default=0)
amount = models.DecimalField('Итого', max_digits=8, decimal_places=2, default=0)
commission = models.DecimalField('Комиссия', max_digits=8, decimal_places=2, default=0)
@ -55,6 +57,9 @@ class Payment(PolymorphicModel):
verbose_name = 'Платеж'
verbose_name_plural = 'Платежи'
def calc_commission(self):
return self.amount * config.SERVICE_COMMISSION / 100
class CoursePayment(Payment):
course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name='Курс')
@ -72,9 +77,11 @@ class CoursePayment(Payment):
author=self.course.author,
amount=self.amount,
payment=self,
commission=self.calc_commission(),
)
else:
author_balance.amount = self.amount
author_balance.commission = self.calc_commission()
author_balance.save()
@ -96,11 +103,3 @@ class SchoolPayment(Payment):
self.amount = month_price_sum
super().save(*args, **kwargs)
author_balance = getattr(self, 'authorbalance', None)
if not author_balance:
AuthorBalance.objects.create(
amount=month_price_sum,
payment=self,
)
else:
author_balance.amount = self.amount
author_balance.save()

@ -61,8 +61,15 @@ class User(AbstractUser):
user_data = dumps(user_data, ensure_ascii=False)
return user_data
@property
def balance(self):
return self.balances.aggregate(models.Sum('amount')).get('amount__sum', 0)
aggregate = self.balances.aggregate(
models.Sum('amount'),
models.Sum('commission'),
)
amount = aggregate.get('amount__sum', 0)
commission = aggregate.get('commission__sum', 0)
return amount - commission
@receiver(post_save, sender=User)

Loading…
Cancel
Save