diff --git a/apps/payment/migrations/0017_schoolpayment_add_days.py b/apps/payment/migrations/0017_schoolpayment_add_days.py new file mode 100644 index 00000000..844c4e70 --- /dev/null +++ b/apps/payment/migrations/0017_schoolpayment_add_days.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.4 on 2018-04-30 06:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('payment', '0016_auto_20180429_1308'), + ] + + operations = [ + migrations.AddField( + model_name='schoolpayment', + name='add_days', + field=models.BooleanField(default=False, verbose_name='Докупленные дни'), + ), + ] diff --git a/apps/payment/models.py b/apps/payment/models.py index 0cdfcbf5..2de1c26a 100644 --- a/apps/payment/models.py +++ b/apps/payment/models.py @@ -143,6 +143,7 @@ class CoursePayment(Payment): class SchoolPayment(Payment): weekdays = ArrayField(models.IntegerField(), size=7, verbose_name='Дни недели') + add_days = models.BooleanField('Докупленные дни', default=False) date_start = models.DateField('Дата начала подписки', null=True, blank=True) date_end = models.DateField('Дата окончания подписки', null=True, blank=True) diff --git a/apps/payment/views.py b/apps/payment/views.py index 538a6ca0..6c8213d5 100644 --- a/apps/payment/views.py +++ b/apps/payment/views.py @@ -87,18 +87,32 @@ class SchoolBuyView(TemplateView): host = urlsplit(self.request.META.get('HTTP_REFERER')) host = str(host[0]) + '://' + str(host[1]) weekdays = set(request.GET.getlist('weekdays', [])) + add_days = 'add_days' in request.GET if not weekdays: messages.error(request, 'Выберите несколько дней недели.') - return redirect('index') + return redirect('school:school') try: weekdays = [int(weekday) for weekday in weekdays] except ValueError: messages.error(request, 'Ошибка выбора дней недели.') - return redirect('index') - school_payment = SchoolPayment.objects.create( - user=request.user, - weekdays=weekdays, - ) + return redirect('school:school') + if add_days: + _school_payment = SchoolPayment.objects.get( + user=request.user, + date_start__lte=now().date(), + date_end__gte=now().date(), + add_days=False, + ) + school_payment = SchoolPayment.objects.create( + user=request.user, + weekdays=weekdays, + add_days=True, + ) + else: + school_payment = SchoolPayment.objects.create( + user=request.user, + weekdays=weekdays, + ) product = Product( f'school_{school_payment.id}', school_payment.amount, @@ -166,8 +180,9 @@ class PaymentwallCallbackView(View): if product_type_name == 'school': school_payment = SchoolPayment.objects.filter( user=payment.user, - date_start__lte=now(), - date_end__gt=now(), + add_days=False, + date_start__lte=now().date(), + date_end__gte=now().date(), status__in=[ Pingback.PINGBACK_TYPE_REGULAR, Pingback.PINGBACK_TYPE_GOODWILL, @@ -175,8 +190,12 @@ class PaymentwallCallbackView(View): ], ).last() if school_payment: - date_start = school_payment.date_end + timedelta(days=1) - date_end = date_start + timedelta(days=30) + if payment.add_days: + date_start = now().date(), + date_end = school_payment.date_end, + else: + date_start = school_payment.date_end + timedelta(days=1) + date_end = date_start + timedelta(days=30) else: date_start = now() date_end = now() + timedelta(days=30) @@ -197,6 +216,7 @@ class PaymentwallCallbackView(View): 'amount': payment.amount, 'status': payment.status, 'weekdays': payment.weekdays, + 'add_days': payment.add_days, 'date_start': payment.date_start, 'date_end': payment.date_end, 'created_at': payment.created_at, diff --git a/apps/school/views.py b/apps/school/views.py index b680ae99..22942053 100644 --- a/apps/school/views.py +++ b/apps/school/views.py @@ -99,7 +99,7 @@ class SchoolView(TemplateView): width=date_now.weekday()-F('weekday') % 7, ).order_by('-width'), 'school_schedules_purchased': school_schedules_purchased, - 'subscription_ends': school_payment.first().date_end if school_payment_exists else None, + 'subscription_ends': school_payment.filter(add_days=False).first().date_end if school_payment_exists else None, }) return context diff --git a/project/views.py b/project/views.py index 1efb2c08..b9ab2660 100644 --- a/project/views.py +++ b/project/views.py @@ -48,12 +48,12 @@ class IndexView(TemplateView): 'online': online, 'course_items': Course.objects.filter(status=Course.PUBLISHED)[:6], 'is_purchased': school_payment_exists, - 'min_school_price': SchoolSchedule.objects.all().aggregate(Min('month_price'))['month_price__min'], + 'min_school_price': SchoolSchedule.objects.aggregate(Min('month_price'))['month_price__min'], 'school_schedules': SchoolSchedule.objects.all(), 'school_schedules_purchased': school_schedules_purchased, 'teachers': User.objects.filter(role=User.TEACHER_ROLE, show_in_mainpage=True), - 'subscription_ends': school_payment.first().date_end if school_payment_exists else None, - 'subscription_ends_humanize': school_payment.first().date_end_humanize if school_payment_exists else None, + 'subscription_ends': school_payment.filter(add_days=False).first().date_end if school_payment_exists else None, + 'subscription_ends_humanize': school_payment.filter(add_days=False).first().date_end_humanize if school_payment_exists else None, }) return context