LIL-583 реферальная система

remotes/origin/hotfix/LIL-691
gzbender 8 years ago
parent e43e890114
commit 397bc9c2d3
  1. 4
      api/v1/serializers/config.py
  2. 23
      apps/config/migrations/0009_auto_20180729_0503.py
  3. 4
      apps/config/models.py
  4. 29
      apps/user/migrations/0023_referral.py
  5. 11
      apps/user/models.py
  6. 17
      project/templates/blocks/popup_auth.html
  7. 10
      project/views.py
  8. 1
      requirements.txt

@ -20,6 +20,8 @@ class ConfigSerializer(serializers.ModelSerializer):
MAIN_PAGE_TOP_IMAGE = serializers.SerializerMethodField()
# SCHOOL_LOGO_IMAGE = serializers.ImageField(required=False, allow_null=True)
# MAIN_PAGE_TOP_IMAGE = serializers.ImageField(required=False, allow_null=True)
REFERRER_CASHBACK = serializers.IntegerField()
REFERRAL_DISCOUNT = serializers.IntegerField()
class Meta:
model = Config
@ -37,6 +39,8 @@ class ConfigSerializer(serializers.ModelSerializer):
'INSTAGRAM_PROFILE_URL',
'SCHOOL_LOGO_IMAGE',
'MAIN_PAGE_TOP_IMAGE',
'REFERRER_CASHBACK',
'REFERRAL_DISCOUNT',
)
def get_SCHOOL_LOGO_IMAGE(self, config):

@ -0,0 +1,23 @@
# Generated by Django 2.0.6 on 2018-07-29 05:03
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('config', '0008_auto_20180425_1451'),
]
operations = [
migrations.AddField(
model_name='config',
name='REFERRAL_DISCOUNT',
field=models.IntegerField(default=10),
),
migrations.AddField(
model_name='config',
name='REFERRER_CASHBACK',
field=models.IntegerField(default=10),
),
]

@ -17,6 +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)
def save(self, *args, **kwargs):
self.pk = 1
@ -45,5 +47,7 @@ class Config(models.Model):
'SERVICE_DISCOUNT': '',
'SCHOOL_LOGO_IMAGE': '',
'MAIN_PAGE_TOP_IMAGE': '',
'REFERRER_CASHBACK': '',
'REFERRAL_DISCOUNT': '',
}
return obj

@ -0,0 +1,29 @@
# Generated by Django 2.0.6 on 2018-07-29 05:24
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('user', '0022_user_instagram_hashtag'),
]
operations = [
migrations.CreateModel(
name='Referral',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('discount', models.IntegerField()),
('referrer_cashback', models.IntegerField()),
('referral', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('referrer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='referrals', to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name': 'Реферал',
'verbose_name_plural': 'Рефералы',
},
),
]

@ -256,3 +256,14 @@ class EmailSubscription(models.Model):
email = models.EmailField(_('email address'), unique=True)
categories = models.ManyToManyField(SubscriptionCategory)
mailchimp_status = models.PositiveSmallIntegerField(choices=MAILCHIMP_STATUS_CHOICES, default=ERROR)
class Referral(models.Model):
referral = models.OneToOneField(User, on_delete=models.CASCADE)
referrer = models.ForeignKey(User, on_delete=models.CASCADE, related_name='referrals')
discount = models.IntegerField()
referrer_cashback = models.IntegerField()
class Meta:
verbose_name = 'Реферал'
verbose_name_plural = 'Рефералы'

@ -1,5 +1,5 @@
{% load static %}
<div class="popup js-popup-auth">
<div class="popup js-popup-auth {% if referrer %}open visible{% endif %}">
<div class="popup__wrap js-popup-wrap">
<button class="popup__close js-popup-close">
<svg class="icon icon-close">
@ -10,14 +10,25 @@
<div class="auth js-auth">
<div class="auth__login js-auth-login">
<div class="auth__nav">
<a class="auth__type js-auth-type active" href="#">Войти</a>
<a class="auth__type js-auth-type" href="#">РЕГИСТРАЦИЯ</a>
<a class="auth__type js-auth-type {% if not referrer %}active{% endif %}" href="#">Войти</a>
<a class="auth__type js-auth-type {% if referrer %}active{% endif %}" href="#">РЕГИСТРАЦИЯ</a>
</div>
<div class="auth__body">
<form id="learner-auth-form" method="post" action="{% url 'lilcity:login' %}">
{% csrf_token %}
<div class="auth__tab js-auth-tab" style="display: block;">
<div class="auth__enter js-auth-enter">
{% if referrer %}
<input type="hidden" name="referrer" value="{{ referrer.id }}">
<div style="margin: 0 0 20px;">
<a href="{% url 'user' referrer.id %}" target="_blank" style="
font-family: 'ProximaNova-Bold', serif;
font-size: 10px;
letter-spacing: 1px;
text-transform: uppercase;">
{{ referrer.get_full_name }}</a> дарит вам скидку 10% на первую покупку!
</div>
{% endif %}
<div id="learner-auth-field__username" class="auth__field field learner-auth-form__field">
<div class="field__label">ПОЧТА</div>
<div class="field__wrap">

@ -1,5 +1,6 @@
from datetime import datetime, timedelta
import short_url
from django.db.models import Min
from django.contrib.auth import get_user_model
from django.views.generic import TemplateView
@ -20,6 +21,7 @@ class IndexView(TemplateView):
template_name = 'templates/lilcity/main.html'
def get_context_data(self):
referrer = self.request.GET.get('referrer')
context = super().get_context_data()
now_time = now()
@ -70,7 +72,15 @@ class IndexView(TemplateView):
school_purchased_future = False
school_schedules_purchased = []
if referrer:
try:
referrer = short_url.decode_url(referrer)
referrer = User.objects.get(pk=referrer)
except:
referrer = None
context.update({
'referrer': referrer,
'online': online,
'online_coming_soon': online_coming_soon,
'school_schedule': school_schedule,

@ -28,4 +28,5 @@ git+https://github.com/ivlevdenis/python-instagram.git
django-user-agents==0.3.2
user-agents==1.1.0
ua-parser==0.8.0
short_url

Loading…
Cancel
Save