parent
7980b911f1
commit
bef692e71d
5 changed files with 163 additions and 3 deletions
@ -0,0 +1,26 @@ |
|||||||
|
from django import forms |
||||||
|
|
||||||
|
from apps.payment.models import Discount |
||||||
|
|
||||||
|
|
||||||
|
class DiscountAdminForm(forms.ModelForm): |
||||||
|
|
||||||
|
def clean(self): |
||||||
|
clean_data = super().clean() |
||||||
|
|
||||||
|
if clean_data['product'] == Discount.PRODUCT_ONE_COURSE and clean_data.get('course') is None: |
||||||
|
self.add_error('course', 'Не выбран курс') |
||||||
|
if clean_data['product'] == Discount.PRODUCT_ONE_PACKAGE and clean_data.get('package') is None: |
||||||
|
self.add_error('package', 'Не выбрана подписка') |
||||||
|
|
||||||
|
if clean_data['usage_type'] == Discount.USAGE_TYPE_LIMIT: |
||||||
|
if clean_data.get('usage_count_limit') is None: |
||||||
|
self.add_error('usage_count_limit', 'Не указан лимит использования') |
||||||
|
elif clean_data['usage_count_limit'] == 0: |
||||||
|
self.add_error('usage_count_limit', 'Лимит использования равен 0') |
||||||
|
return clean_data |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = Discount |
||||||
|
fields = '__all__' |
||||||
|
exclude = ['author'] |
||||||
@ -0,0 +1,53 @@ |
|||||||
|
# Generated by Django 2.0.7 on 2019-09-13 07:55 |
||||||
|
|
||||||
|
from django.conf import settings |
||||||
|
from django.db import migrations, models |
||||||
|
import django.db.models.deletion |
||||||
|
import django.utils.timezone |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||||
|
('course', '0050_auto_20190818_1043'), |
||||||
|
('content', '0030_auto_20190809_0133'), |
||||||
|
('payment', '0038_auto_20190814_1506'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.CreateModel( |
||||||
|
name='Discount', |
||||||
|
fields=[ |
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||||
|
('name', models.CharField(max_length=200, verbose_name='Название')), |
||||||
|
('product', models.PositiveSmallIntegerField(choices=[(0, 'Все курсы'), (1, 'Все подписки'), (2, 'Один курс'), (3, 'Одна подписка')], default=0, verbose_name='На какие продукты распространяется скидка')), |
||||||
|
('promo_id', models.CharField(blank=True, max_length=20, null=True, verbose_name='Промокод')), |
||||||
|
('usage_type', models.PositiveSmallIntegerField(choices=[(0, 'Ограничен по количеству использований'), (1, 'Не ограничен по количеству использований')], default=0, verbose_name='Тип использования')), |
||||||
|
('usage_count_limit', models.PositiveIntegerField(blank=True, null=True, verbose_name='Сколько раз можно использовать')), |
||||||
|
('activate_count', models.PositiveIntegerField(default=0, verbose_name='Сколько раз использован')), |
||||||
|
('value', models.PositiveIntegerField(default=0, validators=[django.core.validators.MaxValueValidator(100, 'Размер скидки не может быть больше 100')], verbose_name='Размер скидки в %')), |
||||||
|
('start', models.DateTimeField(default=django.utils.timezone.now, verbose_name='Дата начала действия скидки')), |
||||||
|
('end', models.DateTimeField(verbose_name='Дата окончания скидки')), |
||||||
|
('is_active', models.BooleanField(default=True, verbose_name='Активность')), |
||||||
|
('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='author_discounts', to=settings.AUTH_USER_MODEL, verbose_name='Автор')), |
||||||
|
('client', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='discounts', to=settings.AUTH_USER_MODEL, verbose_name='Пользователь скидки')), |
||||||
|
('course', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='course_discounts', to='course.Course', verbose_name='Курс на который распространяется скидка')), |
||||||
|
('package', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='package_discounts', to='content.Package', verbose_name='Подписка на которую распространяется скидка')), |
||||||
|
], |
||||||
|
options={ |
||||||
|
'verbose_name': 'Скидка', |
||||||
|
'verbose_name_plural': 'Скидки', |
||||||
|
}, |
||||||
|
), |
||||||
|
migrations.AlterField( |
||||||
|
model_name='userbonus', |
||||||
|
name='payment', |
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='payment.Payment'), |
||||||
|
), |
||||||
|
migrations.AlterField( |
||||||
|
model_name='userbonus', |
||||||
|
name='referral', |
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='user.Referral'), |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,17 @@ |
|||||||
|
# Generated by Django 2.0.7 on 2019-09-13 07:55 |
||||||
|
|
||||||
|
from django.db import migrations |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('user', '0034_auto_20190612_1852'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.AlterModelOptions( |
||||||
|
name='child', |
||||||
|
options={'ordering': ('id',)}, |
||||||
|
), |
||||||
|
] |
||||||
Loading…
Reference in new issue