From df85bce66eecde48ebb374480b94ac2a5281df17 Mon Sep 17 00:00:00 2001 From: gzbender Date: Wed, 4 Sep 2019 13:13:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=91=D0=B0=D0=B3=20/=20=D0=9F=D0=BE=D1=81?= =?UTF-8?q?=D0=BB=D0=B5=20=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D1=8B=20=D0=B1?= =?UTF-8?q?=D0=BE=D0=BD=D1=83=D1=81=D0=B0=D0=BC=D0=B8=20=D0=BF=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=D0=B7=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=20=D0=BF=D0=BE=D0=BF?= =?UTF-8?q?=D0=B0=D0=BF=20"=D0=B2=D0=B0=D0=BC=20=D0=BD=D0=B0=D1=87=D0=B8?= =?UTF-8?q?=D1=81=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=A5=20=D0=BB=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=B2"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/payment/admin.py | 7 ++++++- apps/payment/models.py | 7 +++++-- apps/user/models.py | 9 +++++---- project/templates/blocks/lil_store_js.html | 2 +- web/src/js/modules/popup.js | 6 +++--- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/apps/payment/admin.py b/apps/payment/admin.py index d502c2fe..0b5a31cb 100644 --- a/apps/payment/admin.py +++ b/apps/payment/admin.py @@ -5,7 +5,7 @@ from polymorphic.admin import ( PolymorphicChildModelFilter, ) -from .models import AuthorBalance, CoursePayment, SchoolPayment, Payment, GiftCertificate +from .models import AuthorBalance, CoursePayment, SchoolPayment, Payment, GiftCertificate, UserBonus @admin.register(AuthorBalance) @@ -65,3 +65,8 @@ class PaymentAdmin(PolymorphicParentModelAdmin): @admin.register(GiftCertificate) class GiftCertificateAdmin(admin.ModelAdmin): pass + + +@admin.register(UserBonus) +class UserBonusAdmin(admin.ModelAdmin): + pass diff --git a/apps/payment/models.py b/apps/payment/models.py index 0d4d7c25..47af6711 100644 --- a/apps/payment/models.py +++ b/apps/payment/models.py @@ -389,8 +389,8 @@ class UserBonus(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='bonuses') amount = models.DecimalField(max_digits=8, decimal_places=2, default=0) - payment = models.ForeignKey(Payment, on_delete=models.SET_NULL, null=True) - referral = models.ForeignKey('user.Referral', on_delete=models.SET_NULL, null=True) + payment = models.ForeignKey(Payment, on_delete=models.SET_NULL, null=True, blank=True) + referral = models.ForeignKey('user.Referral', on_delete=models.SET_NULL, null=True, blank=True) created_at = models.DateTimeField(auto_now_add=True) is_service = models.BooleanField(default=False) action_name = models.CharField(max_length=20, blank=True, default='') @@ -399,6 +399,9 @@ class UserBonus(models.Model): class Meta: ordering = ('created_at',) + def __str__(self): + return '%s %s' % (self.user_id, self.amount) + class GiftCertificate(models.Model): price = models.DecimalField(max_digits=8, decimal_places=2, default=0) diff --git a/apps/user/models.py b/apps/user/models.py index 2b07118c..f12a2755 100644 --- a/apps/user/models.py +++ b/apps/user/models.py @@ -155,12 +155,13 @@ class User(AbstractUser): ).aggregate(models.Sum('amount')).get('amount__sum') or 0) @property - def has_new_bonuses(self): + def new_bonuses(self): from apps.payment.models import Payment - last_bonus = self.bonuses.filter( + old_bonuses = int(self.bonuses.filter( Q(payment__isnull=False, payment__status__in=Payment.PW_PAID_STATUSES) | Q(is_service=True), - ).order_by('-created_at').first() - return bool(last_bonus) and last_bonus.amount > 0 and not last_bonus.notified_at + Q(amount__lte=0) | Q(amount__gt=0, notified_at__isnull=False), + ).aggregate(models.Sum('amount')).get('amount__sum') or 0) + return max(self.bonus - old_bonuses, 0) @property def paid_one_more(self): diff --git a/project/templates/blocks/lil_store_js.html b/project/templates/blocks/lil_store_js.html index 1bbb297f..84471ccd 100644 --- a/project/templates/blocks/lil_store_js.html +++ b/project/templates/blocks/lil_store_js.html @@ -17,7 +17,7 @@ id: '{{ request.user.id|default:'' }}', role: +'{{ request.user.role }}', photo: '{% if request.user.photo %}{{ request.user.photo.url }}{% else %}{% static 'img/user_default.jpg' %}{% endif %}', - hasNewBonuses: {{ request.user.has_new_bonuses|yesno:"true,false" }}, + newBonuses: {{ request.user.new_bonuses }}, bonus: +'{{ request.user.bonus }}', }, components: {}, diff --git a/web/src/js/modules/popup.js b/web/src/js/modules/popup.js index b3b18a93..8baf5ef3 100644 --- a/web/src/js/modules/popup.js +++ b/web/src/js/modules/popup.js @@ -365,7 +365,7 @@ $(document).ready(function () { } }); - if(window.LIL_STORE.user.id && window.LIL_STORE.user.hasNewBonuses && window.LIL_STORE.user.bonus > 0){ + if(window.LIL_STORE.user.id && window.LIL_STORE.user.newBonuses > 0){ $(document).ready(() => { popup = $('.js-popup-bonuses-came'); const $bonusesImg = popup.find('.bonuses-came__img'); @@ -387,8 +387,8 @@ $(document).ready(function () { audioAddition.play().catch(error => console.log(error)); $bonusesImg.attr('src', window.LIL_STORE.staticUrl + 'img/lilcoin48x54.png') .attr('src', window.LIL_STORE.staticUrl + 'img/lilcoin_spin.gif'); - $({bonuses: 0}).animate({bonuses: window.LIL_STORE.user.bonus}, { - duration: 2900, + $({bonuses: 0}).animate({bonuses: window.LIL_STORE.user.newBonuses}, { + duration: 2000, easing: "linear", step: function(val) { $bonusesValue.html(Math.ceil(val));