начислять лилики с анимацией и попапом

remotes/origin/feature/lilcoin-popup
gzbender 7 years ago
parent 82a953de98
commit 1ff4151c61
  1. 10
      api/v1/views.py
  2. 13
      apps/user/models.py
  3. 11
      apps/user/views.py
  4. 2
      project/templates/blocks/popup_bonuses_came.html
  5. 33
      project/tests/test_features.py

@ -432,6 +432,16 @@ class UserViewSet(ExtendedModelViewSet):
# 'delete': IsAdmin,
# }
def update(self, *args, **kwargs):
response = super().update(*args, **kwargs)
instance = self.get_object()
if instance.review_url and not instance.bonuses.filter(is_service=True,
action_name=UserBonus.ACTION_HAVE_REVIEW).count():
UserBonus.objects.create(user=instance, amount=UserBonus.AMOUNT_HAVE_REVIEW, is_service=True,
action_name=UserBonus.ACTION_HAVE_REVIEW)
return response
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())

@ -155,19 +155,6 @@ class User(AbstractUser):
course_payment_cnt = CoursePayment.objects.filter(status__in=Payment.PW_PAID_STATUSES, user=self).count()
return school_payments_cnt > 1 or course_payment_cnt > 1 or (school_payments_cnt and course_payment_cnt)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
from apps.payment.models import UserBonus
# начисляемм бонусы, если заполнил профиль
if self.phone and self.first_name and self.last_name and not self.bonuses.filter(
is_service=True, action_name=UserBonus.ACTION_FILL_PROFILE).count():
UserBonus.objects.create(user=self, amount=UserBonus.AMOUNT_FILL_PROFILE, is_service=True,
action_name=UserBonus.ACTION_FILL_PROFILE)
if self.review_url and not self.bonuses.filter(is_service=True,
action_name=UserBonus.ACTION_HAVE_REVIEW).count():
UserBonus.objects.create(user=self, amount=UserBonus.AMOUNT_HAVE_REVIEW, is_service=True,
action_name=UserBonus.ACTION_HAVE_REVIEW)
@receiver(post_save, sender=User)
def create_auth_token(sender, instance=None, created=False, **kwargs):

@ -24,7 +24,7 @@ from apps.config.models import Config
from apps.course.models import Course
from apps.notification.utils import send_email
from apps.school.models import SchoolSchedule
from apps.payment.models import AuthorBalance, CoursePayment, SchoolPayment, Payment, UserGiftCertificate
from apps.payment.models import AuthorBalance, CoursePayment, SchoolPayment, Payment, UserGiftCertificate, UserBonus
from apps.user.models import AuthorRequest, EmailSubscription, SubscriptionCategory
from .forms import AuthorRequesForm, UserEditForm, WithdrawalForm
@ -245,7 +245,14 @@ class ProfileEditView(UpdateView):
else:
messages.error(request, 'Неверный пароль.')
messages.info(request, 'Данные сохранены.')
return super().post(request, *args, **kwargs)
response = super().post(request, *args, **kwargs)
user = User.objects.get(pk=request.user.id)
# начисляемм бонусы, если заполнил профиль
if user.phone and user.first_name and user.last_name and not user.bonuses.filter(
is_service=True, action_name=UserBonus.ACTION_FILL_PROFILE).count():
UserBonus.objects.create(user=user, amount=UserBonus.AMOUNT_FILL_PROFILE, is_service=True,
action_name=UserBonus.ACTION_FILL_PROFILE)
return response
def get_success_url(self):
return reverse('user-edit-profile')

@ -11,7 +11,7 @@
<div class="bonuses-came__title">Вам начислено</div>
<div class="bonuses-came__bonuses"></div>
<div>лиликов</div>
<div class="bonuses-came__text">Приглашайте друзей в Lil School и получайте 30% от суммы их первой покупки.
<div class="bonuses-came__text">Приглашайте друзей в Lil School и получайте {{ config.REFERRER_BONUS }}% от суммы их первой покупки.
Накапливайте монеты и тратьте их на оплату школы и курсов.</div>
<a href="{% url 'user-bonuses' %}" class="bonuses-came__link">Узнать больше про Лилики</a>
</div>

@ -1,9 +1,11 @@
# -*- coding: utf-8 -*-
import json
from datetime import datetime, timedelta
from datetime import timedelta
from django.test import TestCase
from django.utils.timezone import now
from django.shortcuts import reverse
from factory.faker import Faker
from project.tests.factories import UserFactory, CourseFactory
@ -56,11 +58,25 @@ class AutoAddingUserBonusTestCase(TestCase):
def test_adding_user_bonuses_after_fill_profile(self):
user = UserFactory.create(role=User.USER_ROLE, first_name='', last_name='', phone='')
self.assertEqual(user.bonus, 0, 'При создании есть бонусы')
self.client.force_login(user)
data = {k: user.__dict__[k] for k in ['email', 'slug', 'child_first_name',
'child_last_name', 'child_birthday', 'child_gender', 'city',
'country', 'birthday', 'gender', 'about', 'instagram', 'facebook',
'twitter', 'pinterest', 'youtube', 'vkontakte', 'site']}
data.update({
'first_name': Faker('first_name').generate({}),
'last_name': Faker('last_name').generate({}),
'phone': '+79123456789',
'old_password': '',
'new_password1': '',
'new_password2': '',
})
for k, v in data.items():
if v is None:
data[k] = ''
self.client.post(reverse('user-edit-profile'), data)
user.first_name = Faker('first_name').generate({})
user.last_name = Faker('last_name').generate({})
user.phone = '+7123456789'
user.save()
del user.__dict__['bonus']
self.assertEqual(user.bonus, UserBonus.AMOUNT_FILL_PROFILE, 'Неверное кол-во бонусов после заполнения профиля')
@ -70,9 +86,10 @@ class AutoAddingUserBonusTestCase(TestCase):
def test_adding_user_bonuses_after_fill_review_url(self):
user = UserFactory.create(role=User.USER_ROLE, first_name='', last_name='', phone='')
self.assertEqual(user.bonus, 0, 'При создании есть бонусы')
user.review_url = 'http://youtube.com/review_url'
user.save()
self.client.force_login(user)
self.client.patch('/api/v1/users/%d/' % user.id, json.dumps({
'review_url': 'http://youtube.com/review_url',
}), 'application/json')
del user.__dict__['bonus']
self.assertEqual(user.bonus, UserBonus.AMOUNT_HAVE_REVIEW, 'Неверное кол-во бонусов после заполнения ссылки на отзыв')

Loading…
Cancel
Save