remotes/origin/hotfix/LIL-691
gzbender 8 years ago
parent ba3f95362e
commit 65bbde0ede
  1. 1
      api/v1/views.py
  2. 29
      apps/payment/models.py
  3. 11
      apps/user/models.py
  4. 0
      apps/user/templates/blocks/profile-menu.html
  5. 16
      apps/user/templates/user/bonus-history.html
  6. 10
      apps/user/templates/user/notification-settings.html
  7. 2
      apps/user/templates/user/payment-history.html
  8. 10
      apps/user/templates/user/profile-settings.html
  9. 2
      apps/user/views.py
  10. 1
      project/templates/blocks/lil_store_js.html
  11. 10
      project/templates/lilcity/main.html
  12. 4
      web/src/js/modules/common.js
  13. 4
      web/src/js/modules/profile.js

@ -486,6 +486,7 @@ class PaymentViewSet(ExtendedModelViewSet):
return Response(Payment.calc_amount(user=user, course=course, weekdays=weekdays)) return Response(Payment.calc_amount(user=user, course=course, weekdays=weekdays))
class ContestViewSet(ExtendedModelViewSet): class ContestViewSet(ExtendedModelViewSet):
queryset = Contest.objects.all() queryset = Contest.objects.all()
serializer_class = ContestCreateSerializer serializer_class = ContestCreateSerializer

@ -11,7 +11,6 @@ from django.core.validators import RegexValidator
from django.utils.timezone import now from django.utils.timezone import now
from django.conf import settings from django.conf import settings
from apps.user.models import Referral
from project.utils import weekday_in_date_range from project.utils import weekday_in_date_range
from apps.course.models import Course from apps.course.models import Course
@ -122,11 +121,11 @@ class Payment(PolymorphicModel):
add_days = school_payment.add_days add_days = school_payment.add_days
date_start = school_payment.date_start date_start = school_payment.date_start
date_end = school_payment.date_end date_end = school_payment.date_end
referral_discount = 0 referral_bonus = 0
referrer_cashback = 0 referrer_bonus = 0
if hasattr(user, 'referral') and not user.referral.payment: if hasattr(user, 'referral') and not user.referral.payment:
referral_discount = user.referral.discount referral_bonus = user.referral.bonus
referrer_cashback = user.referral.referrer_cashback referrer_bonus = user.referral.referrer_bonus
discount = 0 discount = 0
if course: if course:
price = course.price price = course.price
@ -155,14 +154,14 @@ class Payment(PolymorphicModel):
price = Decimal(aggregate.get('month_price__sum', 0)) price = Decimal(aggregate.get('month_price__sum', 0))
if price >= config.SERVICE_DISCOUNT_MIN_AMOUNT: if price >= config.SERVICE_DISCOUNT_MIN_AMOUNT:
discount = config.SERVICE_DISCOUNT discount = config.SERVICE_DISCOUNT
referral_discount = (price - discount) * referral_discount / 100 amount = price - discount
referrer_cashback = (price - discount) * referrer_cashback / 100 referral_bonus = round(amount * referral_bonus / 100)
amount = price - discount - referral_discount referrer_bonus = round(amount * referrer_bonus / 100)
return { return {
'price': price, 'price': price,
'amount': amount, 'amount': amount,
'referral_discount': referral_discount, 'referral_bonus': referral_bonus,
'referrer_cashback': referrer_cashback, 'referrer_bonus': referrer_bonus,
'discount': discount, 'discount': discount,
} }
@ -209,11 +208,11 @@ class CoursePayment(Payment):
author_balance.save() author_balance.save()
# Если юзер реферал и нет платежа, где применялась скидка # Если юзер реферал и нет платежа, где применялась скидка
if hasattr(self.user, 'referral') and not self.user.referral.payment: if hasattr(self.user, 'referral') and not self.user.referral.payment:
# Отправляем кэшбэк
self.user.referral.cashback(amount_data.get('referrer_cashback'))
# Платеж - как сигнал, что скидка применилась # Платеж - как сигнал, что скидка применилась
self.user.referral.payment = self self.user.referral.payment = self
self.user.referral.save() self.user.referral.save()
# Отправляем кэшбэк
self.user.referral.send_bonuses(amount_data.get('referral_bonus'), amount_data.get('referrer_bonus'))
class SchoolPayment(Payment): class SchoolPayment(Payment):
@ -239,11 +238,11 @@ class SchoolPayment(Payment):
super().save(*args, **kwargs) super().save(*args, **kwargs)
# Если юзер реферал и нет платежа, где применялась скидка # Если юзер реферал и нет платежа, где применялась скидка
if not self.add_days and hasattr(self.user, 'referral') and not self.user.referral.payment: if not self.add_days and hasattr(self.user, 'referral') and not self.user.referral.payment:
# Отправляем кэшбэк
self.user.referral.cashback(amount_data.get('referrer_cashback'))
# Платеж - как сигнал, что скидка применилась # Платеж - как сигнал, что скидка применилась
self.user.referral.payment = self self.user.referral.payment = self
self.user.referral.save() self.user.referral.save()
# Отправляем кэшбэк
self.user.referral.send_bonuses(amount_data.get('referral_bonus'), amount_data.get('referrer_bonus'))
@property @property
def date_end_humanize(self): def date_end_humanize(self):
@ -254,6 +253,6 @@ class UserBonus(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='bonuses') user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='bonuses')
amount = models.DecimalField(max_digits=8, decimal_places=2, default=0, editable=False) amount = models.DecimalField(max_digits=8, decimal_places=2, default=0, editable=False)
payment = models.OneToOneField(Payment, on_delete=models.SET_NULL, null=True) payment = models.OneToOneField(Payment, on_delete=models.SET_NULL, null=True)
referral = models.ForeignKey(Referral, on_delete=models.SET_NULL, null=True) referral = models.ForeignKey('user.Referral', on_delete=models.SET_NULL, null=True)
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)

@ -265,14 +265,15 @@ class EmailSubscription(models.Model):
class Referral(models.Model): class Referral(models.Model):
referral = models.OneToOneField(User, on_delete=models.CASCADE, related_name='referral') referral = models.OneToOneField(User, on_delete=models.CASCADE, related_name='referral')
referrer = models.ForeignKey(User, on_delete=models.CASCADE, related_name='referrals') referrer = models.ForeignKey(User, on_delete=models.CASCADE, related_name='referrals')
discount = models.IntegerField() bonus = models.IntegerField()
referrer_cashback = models.IntegerField() referrer_bonus = models.IntegerField()
payment = models.OneToOneField('payment.Payment', null=True, blank=True, on_delete=models.CASCADE) payment = models.OneToOneField('payment.Payment', null=True, blank=True, on_delete=models.CASCADE)
class Meta: class Meta:
verbose_name = 'Реферал' verbose_name = 'Реферал'
verbose_name_plural = 'Рефералы' verbose_name_plural = 'Рефералы'
def cashback(self, amount): def send_bonuses(self, referral_bonus, referrer_bonus):
# TODO from apps.payment.models import UserBonus
pass UserBonus.objects.create(user=self.referral, amount=referral_bonus, payment=self.payment, referral=self)
UserBonus.objects.create(user=self.referrer, amount=referrer_bonus, payment=self.payment, referral=self)

@ -3,18 +3,22 @@
{% load rupluralize from plural %} {% load rupluralize from plural %}
{% block content %} {% block content %}
{% include "../blocks/menu.html" %} {% include "../blocks/profile-menu.html" %}
<div class="section section_gray"> <div class="section section_gray" style="padding-bottom: 0;">
<div class="section__center center center_xs"> <div class="section__center center center_xs">
<div class="title title_sm">Бонусы</div> <div class="title title_sm">Бонусы</div>
<div class="text">У вас {{ request.user.bonus|rupluralize:"бонус,бонуса,бонусов" }}</div> <div class="text">У вас {{ request.user.bonus|rupluralize:"бонус,бонуса,бонусов" }}</div>
<div> <div>
Вы можете пригласить своих друзей в наш сервис, за это вы получите {{ config.REFERRER_BONUS }} % от суммы Вы можете пригласить своих друзей в наш сервис, за это вы получите {{ config.REFERRER_BONUS }}% от суммы
их первой покупки и они получат {{ config.REFERRAL_BONUS }} % от суммы покупки на свой бонусный счет <br> их первой покупки и они получат {{ config.REFERRAL_BONUS }}% от суммы первой покупки на свой бонусный счет <br>
Просто отправьте им эту ссылку, по которой они смогут зарегестрироваться: Просто отправьте им эту ссылку, по которой они смогут зарегистрироваться:
</div>
<div class="form__field field" style="margin-bottom: 0;">
<div class="field__wrap">
<input id="referrer-url" class="field__input" type="text" value="{{ referrer_url }}" readonly="readonly">
</div>
</div> </div>
<div class="text">{{ referrer_url }}</div>
</div> </div>
</div> </div>

@ -1,13 +1,5 @@
{% extends "templates/lilcity/index.html" %} {% load static %} {% block content %} {% extends "templates/lilcity/index.html" %} {% load static %} {% block content %}
<div class="section section_gray section_menu"> {% include "../blocks/profile-menu.html" %}
<div class="section__center center center_xs">
<div class="menu">
<a class="menu__link" href="{% url 'user-edit-profile' %}">Профиль</a>
<a class="menu__link active" href="{% url 'user-edit-notifications' user.id %}">Уведомления</a>
<a class="menu__link" href="{% url 'user-edit-payments' user.id %}">Платежи</a>
</div>
</div>
</div>
{% if not user.is_email_proved %} {% if not user.is_email_proved %}
<div class="section section_confirm"> <div class="section section_confirm">
<div class="section__center center center_xs"> <div class="section__center center center_xs">

@ -1,5 +1,5 @@
{% extends "templates/lilcity/index.html" %} {% load static %} {% block content %} {% extends "templates/lilcity/index.html" %} {% load static %} {% block content %}
{% include "../blocks/menu.html" %} {% include "../blocks/profile-menu.html" %}
{% if not user.is_email_proved %} {% if not user.is_email_proved %}
<div class="section section_confirm"> <div class="section section_confirm">
<div class="section__center center center_xs"> <div class="section__center center center_xs">

@ -1,13 +1,5 @@
{% extends "templates/lilcity/index.html" %} {% load static %} {% load thumbnail %} {% block content %} {% extends "templates/lilcity/index.html" %} {% load static %} {% load thumbnail %} {% block content %}
<div class="section section_gray section_menu"> {% include "../blocks/profile-menu.html" %}
<div class="section__center center center_xs">
<div class="menu">
<a class="menu__link active" href="{% url 'user-edit-profile' %}">Профиль</a>
<a class="menu__link" href="{% url 'user-edit-notifications' user.id %}">Уведомления</a>
<a class="menu__link" href="{% url 'user-edit-payments' user.id %}">Платежи</a>
</div>
</div>
</div>
{% if not user.is_email_proved %} {% if not user.is_email_proved %}
<div class="section section_confirm"> <div class="section section_confirm">
<div class="section__center center center_xs"> <div class="section__center center center_xs">

@ -314,6 +314,6 @@ class BonusHistoryView(TemplateView):
context = self.get_context_data(**kwargs) context = self.get_context_data(**kwargs)
context['bonuses'] = request.user.bonuses.all() context['bonuses'] = request.user.bonuses.all()
context['referrer_url'] = '%s%s?referrer=%s' % ( context['referrer_url'] = '%s%s?referrer=%s' % (
settings.MAIN_HOST, reverse('index'), short_url.encode(request.user.id) settings.MAIN_HOST, reverse('index'), short_url.encode_url(request.user.id)
) )
return self.render_to_response(context) return self.render_to_response(context)

@ -1,6 +1,7 @@
{% load static %} {% load static %}
<script> <script>
window.LIL_STORE = { window.LIL_STORE = {
isRegistration: {{ is_registration|yesno:"true,false" }},
staticUrl: '{% static "" %}', staticUrl: '{% static "" %}',
accessToken: '{{ request.user.auth_token }}', accessToken: '{{ request.user.auth_token }}',
user: { user: {

@ -13,13 +13,3 @@
{% include "templates/blocks/teachers.html" %} {% include "templates/blocks/teachers.html" %}
{% include "templates/blocks/partners.html" %} {% include "templates/blocks/partners.html" %}
{% endblock content %} {% endblock content %}
{% block body_js %}
{% if is_registration %}
<script>
$(document).ready(function () {
$('.js-header-enter').click();
});
</script>
{% endif %}
{% endblock body_js %}

@ -40,6 +40,10 @@ $(document).ready(function () {
$('.banner').slideUp(); $('.banner').slideUp();
}) })
}); });
if(window.LIL_STORE.isRegistration && ! window.LIL_STORE.user.id){
$('.js-header-enter').click();
}
}); });
function updateHeader() { function updateHeader() {

@ -11,4 +11,8 @@ $(document).ready(function () {
$(`[data-gender=${currentGender}]`).addClass('active'); $(`[data-gender=${currentGender}]`).addClass('active');
genderInput.val(currentGender) genderInput.val(currentGender)
}); });
$('#referrer-url').select().click(function(){
$(this).select();
});
}) })

Loading…
Cancel
Save