diff --git a/apps/config/migrations/0010_auto_20180820_0853.py b/apps/config/migrations/0010_auto_20180820_0853.py new file mode 100644 index 00000000..0b9af168 --- /dev/null +++ b/apps/config/migrations/0010_auto_20180820_0853.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', + ), + ] diff --git a/apps/config/models.py b/apps/config/models.py index 8baa4c86..7e7e833a 100644 --- a/apps/config/models.py +++ b/apps/config/models.py @@ -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 diff --git a/apps/payment/migrations/0020_userbonus.py b/apps/payment/migrations/0020_userbonus.py new file mode 100644 index 00000000..4b029f87 --- /dev/null +++ b/apps/payment/migrations/0020_userbonus.py @@ -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)), + ], + ), + ] diff --git a/apps/payment/models.py b/apps/payment/models.py index ec3936e2..9f8d4d31 100644 --- a/apps/payment/models.py +++ b/apps/payment/models.py @@ -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) + diff --git a/apps/user/migrations/0025_auto_20180820_0651.py b/apps/user/migrations/0025_auto_20180820_0651.py new file mode 100644 index 00000000..ad53086e --- /dev/null +++ b/apps/user/migrations/0025_auto_20180820_0651.py @@ -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), + ), + ] diff --git a/apps/user/models.py b/apps/user/models.py index 286c61c3..230d99d1 100644 --- a/apps/user/models.py +++ b/apps/user/models.py @@ -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): diff --git a/apps/user/templates/blocks/menu.html b/apps/user/templates/blocks/menu.html new file mode 100644 index 00000000..35c4df2d --- /dev/null +++ b/apps/user/templates/blocks/menu.html @@ -0,0 +1,9 @@ +
diff --git a/apps/user/templates/user/bonus-history.html b/apps/user/templates/user/bonus-history.html new file mode 100644 index 00000000..b4095470 --- /dev/null +++ b/apps/user/templates/user/bonus-history.html @@ -0,0 +1,54 @@ +{% extends "templates/lilcity/index.html" %} +{% load static %} +{% load rupluralize from plural %} + +{% block content %} +{% include "../blocks/menu.html" %} + +