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

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, # '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): def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset()) 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() 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) 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) @receiver(post_save, sender=User)
def create_auth_token(sender, instance=None, created=False, **kwargs): 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.course.models import Course
from apps.notification.utils import send_email from apps.notification.utils import send_email
from apps.school.models import SchoolSchedule 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 apps.user.models import AuthorRequest, EmailSubscription, SubscriptionCategory
from .forms import AuthorRequesForm, UserEditForm, WithdrawalForm from .forms import AuthorRequesForm, UserEditForm, WithdrawalForm
@ -245,7 +245,14 @@ class ProfileEditView(UpdateView):
else: else:
messages.error(request, 'Неверный пароль.') messages.error(request, 'Неверный пароль.')
messages.info(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): def get_success_url(self):
return reverse('user-edit-profile') return reverse('user-edit-profile')

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

@ -1,9 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json
from datetime import datetime, timedelta from datetime import timedelta
from django.test import TestCase from django.test import TestCase
from django.utils.timezone import now from django.utils.timezone import now
from django.shortcuts import reverse
from factory.faker import Faker from factory.faker import Faker
from project.tests.factories import UserFactory, CourseFactory from project.tests.factories import UserFactory, CourseFactory
@ -56,11 +58,25 @@ class AutoAddingUserBonusTestCase(TestCase):
def test_adding_user_bonuses_after_fill_profile(self): def test_adding_user_bonuses_after_fill_profile(self):
user = UserFactory.create(role=User.USER_ROLE, first_name='', last_name='', phone='') user = UserFactory.create(role=User.USER_ROLE, first_name='', last_name='', phone='')
self.assertEqual(user.bonus, 0, 'При создании есть бонусы') 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'] del user.__dict__['bonus']
self.assertEqual(user.bonus, UserBonus.AMOUNT_FILL_PROFILE, 'Неверное кол-во бонусов после заполнения профиля') 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): def test_adding_user_bonuses_after_fill_review_url(self):
user = UserFactory.create(role=User.USER_ROLE, first_name='', last_name='', phone='') user = UserFactory.create(role=User.USER_ROLE, first_name='', last_name='', phone='')
self.assertEqual(user.bonus, 0, 'При создании есть бонусы') self.assertEqual(user.bonus, 0, 'При создании есть бонусы')
self.client.force_login(user)
user.review_url = 'http://youtube.com/review_url' self.client.patch('/api/v1/users/%d/' % user.id, json.dumps({
user.save() 'review_url': 'http://youtube.com/review_url',
}), 'application/json')
del user.__dict__['bonus'] del user.__dict__['bonus']
self.assertEqual(user.bonus, UserBonus.AMOUNT_HAVE_REVIEW, 'Неверное кол-во бонусов после заполнения ссылки на отзыв') self.assertEqual(user.bonus, UserBonus.AMOUNT_HAVE_REVIEW, 'Неверное кол-во бонусов после заполнения ссылки на отзыв')

Loading…
Cancel
Save