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..54c9ca60 100644 --- a/project/templates/blocks/lil_store_js.html +++ b/project/templates/blocks/lil_store_js.html @@ -17,8 +17,8 @@ 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" }}, - bonus: +'{{ request.user.bonus }}', + newBonuses: {{ request.user.new_bonuses|default:0 }}, + bonus: {{ request.user.bonus|default:0 }}, }, components: {}, urls: { 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));