remotes/origin/hotfix/LIL-691
gzbender 8 years ago
parent 167a6470b3
commit a8b8e0b83a
  1. 23
      apps/config/migrations/0010_auto_20180820_0853.py
  2. 4
      apps/config/models.py
  3. 28
      apps/payment/migrations/0020_userbonus.py
  4. 10
      apps/payment/models.py
  5. 20
      apps/user/migrations/0025_auto_20180820_0651.py
  6. 4
      apps/user/models.py
  7. 9
      apps/user/templates/blocks/menu.html
  8. 54
      apps/user/templates/user/bonus-history.html
  9. 10
      apps/user/templates/user/payment-history.html
  10. 15
      apps/user/views.py
  11. 4
      project/context_processors.py
  12. 2
      project/settings.py
  13. 31
      project/templates/blocks/user_menu.html
  14. 3
      project/urls.py

@ -0,0 +1,23 @@
# Generated by Django 2.0.6 on 2018-08-20 08:53
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('config', '0009_auto_20180729_0503'),
]
operations = [
migrations.RenameField(
model_name='config',
old_name='REFERRAL_DISCOUNT',
new_name='REFERRAL_BONUS',
),
migrations.RenameField(
model_name='config',
old_name='REFERRER_CASHBACK',
new_name='REFERRER_BONUS',
),
]

@ -17,8 +17,8 @@ class Config(models.Model):
SERVICE_DISCOUNT = models.IntegerField(default=1000)
SCHOOL_LOGO_IMAGE = models.ImageField(null=True, blank=True)
MAIN_PAGE_TOP_IMAGE = models.ImageField(null=True, blank=True)
REFERRER_CASHBACK = models.IntegerField(default=10)
REFERRAL_DISCOUNT = models.IntegerField(default=10)
REFERRER_BONUS = models.IntegerField(default=10)
REFERRAL_BONUS = models.IntegerField(default=10)
def save(self, *args, **kwargs):
self.pk = 1

@ -0,0 +1,28 @@
# Generated by Django 2.0.6 on 2018-08-20 06:51
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('user', '0025_auto_20180820_0651'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('payment', '0019_payment_roistat_visit'),
]
operations = [
migrations.CreateModel(
name='UserBonus',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('amount', models.DecimalField(decimal_places=2, default=0, editable=False, max_digits=8)),
('created_at', models.DateTimeField(auto_now_add=True)),
('payment', models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to='payment.Payment')),
('referral', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='user.Referral')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bonuses', to=settings.AUTH_USER_MODEL)),
],
),
]

@ -11,6 +11,7 @@ from django.core.validators import RegexValidator
from django.utils.timezone import now
from django.conf import settings
from apps.user.models import Referral
from project.utils import weekday_in_date_range
from apps.course.models import Course
@ -247,3 +248,12 @@ class SchoolPayment(Payment):
@property
def date_end_humanize(self):
return arrow.get(self.date_end, settings.TIME_ZONE).humanize(locale='ru')
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, editable=False)
payment = models.OneToOneField(Payment, on_delete=models.SET_NULL, null=True)
referral = models.ForeignKey(Referral, on_delete=models.SET_NULL, null=True)
created_at = models.DateTimeField(auto_now_add=True)

@ -0,0 +1,20 @@
# Generated by Django 2.0.6 on 2018-08-20 06:51
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('user', '0024_referral_payment'),
]
operations = [
migrations.AlterField(
model_name='referral',
name='referral',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='referral', to=settings.AUTH_USER_MODEL),
),
]

@ -102,6 +102,10 @@ class User(AbstractUser):
commission = aggregate.get('commission__sum') or 0
return amount - commission
@property
def bonus(self):
return self.balances.aggregate(models.Sum('amount')).get('amount__sum') or 0
@receiver(post_save, sender=User)
def create_auth_token(sender, instance=None, created=False, **kwargs):

@ -0,0 +1,9 @@
<div class="section section_gray section_menu">
<div class="section__center center center_xs">
<div class="menu">
<a class="menu__link" href="{% url 'user-edit-profile' %}">Профиль</a>
<a class="menu__link" href="{% url 'user-edit-notifications' user.id %}">Уведомления</a>
<a class="menu__link active" href="{% url 'user-edit-payments' user.id %}">Платежи</a>
</div>
</div>
</div>

@ -0,0 +1,54 @@
{% extends "templates/lilcity/index.html" %}
{% load static %}
{% load rupluralize from plural %}
{% block content %}
{% include "../blocks/menu.html" %}
<div class="section section_gray">
<div class="section__center center center_xs">
<div class="title title_sm">Бонусы</div>
<div class="text">У вас {{ request.user.bonus|rupluralize:"бонус,бонуса,бонусов" }}</div>
<div>
Вы можете пригласить своих друзей в наш сервис, за это вы получите {{ config.REFERRER_BONUS }} % от суммы
их первой покупки и они получат {{ config.REFERRAL_BONUS }} % от суммы покупки на свой бонусный счет <br>
Просто отправьте им эту ссылку, по которой они смогут зарегестрироваться:
</div>
<div class="text">{{ referrer_url }}</div>
</div>
</div>
<div class="section section_gray">
<div class="section__center center center_xs">
<div class="title title_sm">История бонусов</div>
<div class="transactions">
<div class="transactions__wrap">
{% for bonus in bonuses %}
<div class="transactions__row">
{% with payment=bonus.payment %}
{% if payment.course %}
<div class="transactions__cell">Курс. {{ payment.course.title }}</div>
{% else %}
<div class="transactions__cell">
Школа. {% if payment.date_start and payment.date_end %}{{ payment.date_start }} - {{ payment.date_end }}{% endif %}
</div>
{% endif %}
{% if payment.balance %}
<div class="transactions__cell">{{payment.balance.amount}}</div>
{% else %}
<div class="transactions__cell">{{payment.amount}}</div>
{% endif %}
{% if bonus.referral %}
<div class="transactions__cell"><a href="{% url 'user' id=bonus.referral.id %}">{{ bonus.referral.get_full_name }}</a></div>
{% endif %}
<div class="transactions__cell">{{ bonus.amount }}</div>
{% endwith %}
</div>
{% empty %}
Нет истории бонусов
{% endfor %}
</div>
</div>
</div>
</div>
{% endblock content %}

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

@ -4,6 +4,7 @@ from uuid import uuid4
from os.path import splitext
from datetime import timedelta
from paymentwall import Pingback
import short_url
from django.conf import settings
from django.contrib.auth import login
@ -297,3 +298,17 @@ class AuthorRequestView(FormView):
'facebook': self.request.user.facebook,
}
return super().get_context_data(**kwargs)
@method_decorator(login_required, name='dispatch')
class BonusHistoryView(TemplateView):
model = User
template_name = 'user/bonus-history.html'
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
context['bonuses'] = request.user.bonuses.all()
context['referrer_url'] = '%s%s?referrer=%s' % (
settings.MAIN_HOST, reverse('index'), short_url.encode(request.user.id)
)
return self.render_to_response(context)

@ -1,6 +1,7 @@
from django.utils.timezone import now
from paymentwall.pingback import Pingback
from django.contrib.auth import get_user_model
from django.conf import settings
from apps.config.models import Config
from apps.content.models import Baner
from apps.payment.models import SchoolPayment
@ -41,3 +42,6 @@ def referrer(request):
referrer = None
return {'referrer': referrer}
def settings(request):
return {'settings': settings}

@ -31,6 +31,7 @@ SECRET_KEY = os.getenv('SECRET_KEY', 'jelm*91lj(_-o20+6^a+bgv!4s6e_efry^#+f#=1ak
DEBUG = os.getenv('DEBUG', False)
ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', '*').split(',')
MAIN_HOST = 'lil.school'
# Application definition
@ -96,6 +97,7 @@ TEMPLATES = [
'project.context_processors.baner',
'project.context_processors.is_summer_school_purchased',
'project.context_processors.referrer',
'project.context_processors.settings',
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',

@ -1,4 +1,5 @@
{% load static %} {% load thumbnail %}
{% load rupluralize from plural %}
{% if request.user.is_authenticated %}
<div class="header__login">
<a class="header__ava ava" href="{% if request.user_agent.is_touch_capable %}#{% else %}{% url 'user-profile' %}{% endif %}">
@ -9,22 +10,26 @@
{% endthumbnail %}
</a>
<div class="header__drop">
{# FIXME #}
{% if request.user.role >= request.user.AUTHOR_ROLE %}
<a class="header__link header__link_border" href="{% url 'user-edit-payments' request.user.id %}">
{{ request.user.balance }} руб.
</a>
{% if request.user.auth_token %}
{% if request.user.role >= request.user.AUTHOR_ROLE %}
<a class="header__link header__link_green" href="{% url 'course_create' %}">
<div class="header__title">ДОБАВИТЬ КУРС</div>
</a>
<a class="header__link header__link_border" href="{% url 'user-edit-payments' request.user.id %}">
{{ request.user.balance }} руб.
</a>
{% endif %}
{% if request.user.role >= request.user.TEACHER_ROLE %}
<a class="header__link" href="{% url 'school:lessons' %}">
<div class="header__title">УРОКИ ШКОЛЫ</div>
<a class="header__link header__link_border" href="{% url 'user-bonuses' %}">
{{ request.user.bonus|rupluralize:"бонус,бонуса,бонусов" }}
</a>
{% endif %}
{% endif %}
{% if request.user.auth_token %}
{% if request.user.role >= request.user.AUTHOR_ROLE %}
<a class="header__link header__link_green" href="{% url 'course_create' %}">
<div class="header__title">ДОБАВИТЬ КУРС</div>
</a>
{% endif %}
{% if request.user.role >= request.user.TEACHER_ROLE %}
<a class="header__link" href="{% url 'school:lessons' %}">
<div class="header__title">УРОКИ ШКОЛЫ</div>
</a>
{% endif %}
{% endif %}
<a class="header__link" href="{% url 'user-profile' %}">
<div class="header__title">ПРОФИЛЬ</div>

@ -30,7 +30,7 @@ from apps.user.views import (
ProfileEditView, NotificationEditView,
PaymentHistoryView, resend_email_verify,
SubscribeView, ProfileView,
)
BonusHistoryView)
from apps.payment.views import (
CourseBuySuccessView, CourseBuyView,
PaymentwallCallbackView, SchoolBuySuccessView,
@ -72,6 +72,7 @@ urlpatterns = [
path('user/<int:pk>/', UserView.as_view(), name='user'),
path('user/<int:pk>/notifications', NotificationEditView.as_view(), name='user-edit-notifications'),
path('user/<int:pk>/payments', PaymentHistoryView.as_view(), name='user-edit-payments'),
path('user/bonuses', BonusHistoryView.as_view(), name='user-bonuses'),
path('user/resend-email-verify', resend_email_verify, name='resend-email-verify'),
path('subscribe', SubscribeView.as_view(), name='subscribe'),
path('subscribe/success', TemplateView.as_view(template_name='templates/lilcity/subscribe_success.html'), name='subscribe-success'),

Loading…
Cancel
Save