diff --git a/apps/content/admin.py b/apps/content/admin.py index 1c92c012..c025f198 100644 --- a/apps/content/admin.py +++ b/apps/content/admin.py @@ -8,6 +8,7 @@ from polymorphic.admin import ( from apps.content.models import ( Baner, Content, Image, Text, ImageText, Video, Gallery, GalleryImage, ImageObject, + Contest,ContestWork, ) @@ -79,3 +80,13 @@ class ContentAdmin(PolymorphicParentModelAdmin): @admin.register(GalleryImage) class GalleryImageAdmin(admin.ModelAdmin): pass + + +@admin.register(Contest) +class ContestAdmin(admin.ModelAdmin): + base_model = Contest + + +@admin.register(ContestWork) +class ContestWorkAdmin(admin.ModelAdmin): + base_model = ContestWork diff --git a/apps/content/templates/content/contest_work.html b/apps/content/templates/content/contest_work.html index 67e2e287..5184faae 100644 --- a/apps/content/templates/content/contest_work.html +++ b/apps/content/templates/content/contest_work.html @@ -1,8 +1,14 @@ {% extends "templates/lilcity/index.html" %} +{% load rupluralize from plural %} {% load static %} -{% block title %}{{ contest_work.child_full_name }}, {{ contest_work.age }} лет{% endblock title %} - +{% block title %}Конкурс Lil.School{% endblock title %} +{% block description %}Работа {{ contest_work.child_full_name }}, {{ contest_work.age | rupluralize:"год,года,лет" }}{% endblock description%} +{% block ogdescription %}Работа {{ contest_work.child_full_name }}, {{ contest_work.age | rupluralize:"год,года,лет" }}{% endblock ogdescription %} {% block ogimage %}http://{{request.META.HTTP_HOST}}{{ contest_work.image.image.url }}{% endblock ogimage %} +{% block head %} + + +{% endblock head %} {% block content %}
@@ -25,7 +31,7 @@
{{ contest_work.child_full_name }}
-
{{ contest_work.age }} {% if contest_work.age < 5 %}года{% else %}лет{% endif %}
+
{{ contest_work.age | rupluralize:"год,года,лет" }}
@@ -233,31 +233,7 @@
- + {% include 'templates/blocks/share.html' with share_object_name='курсом' %}
{% endblock content %} diff --git a/apps/course/templates/course/lesson.html b/apps/course/templates/course/lesson.html index 94d6b89b..9cc570c1 100644 --- a/apps/course/templates/course/lesson.html +++ b/apps/course/templates/course/lesson.html @@ -31,7 +31,7 @@
+ src="{% if lesson.cover %}{{ lesson.cover.image_thumbnail.url }}{% else %}{% static 'img/no_cover.png' %}{% endif %}">
diff --git a/apps/payment/templates/payment/payment_success.html b/apps/payment/templates/payment/payment_success.html index d7821bf9..7d174018 100644 --- a/apps/payment/templates/payment/payment_success.html +++ b/apps/payment/templates/payment/payment_success.html @@ -5,7 +5,7 @@ {% if school %}
Вы успешно приобрели доступ к урокам онлайн-школы!
{% else %}
Вы успешно приобрели курс!
diff --git a/apps/payment/views.py b/apps/payment/views.py index afe2b8ac..1c705609 100644 --- a/apps/payment/views.py +++ b/apps/payment/views.py @@ -109,12 +109,15 @@ class SchoolBuyView(TemplateView): messages.error(request, 'Ошибка выбора дней недели.') return redirect('school:summer-school') if add_days: - _school_payment = SchoolPayment.objects.get( + _school_payment = SchoolPayment.objects.filter( user=request.user, date_start__lte=now().date(), date_end__gte=now().date(), add_days=False, - ) + ).first() + if not _school_payment: + add_days = False + if add_days: school_payment = SchoolPayment.objects.create( user=request.user, weekdays=weekdays, @@ -175,6 +178,7 @@ class PaymentwallCallbackView(View): def get(self, request, *args, **kwargs): payment_raw_data = request.GET.copy() pingback = Pingback(payment_raw_data, self.get_request_ip()) + september2018 = datetime.date(2018, 9, 1) if pingback.validate(): product_type_name, payment_id = pingback.get_product().get_id().split('_') @@ -223,16 +227,15 @@ class PaymentwallCallbackView(View): ).last() if school_payment: if payment.add_days: - date_start = self.add_months(sourcedate=now().replace(hour=0, minute=0, day=1), months=1) + date_start = now().date() date_end = school_payment.date_end else: date_start = arrow.get(school_payment.date_end, settings.TIME_ZONE).shift(days=1).datetime date_end = arrow.get(date_start, settings.TIME_ZONE).shift(months=1).datetime else: - #month = 0 if now().day >= 1 and now().day <= 10 else 1 - # Логика июльского лагеря: до конца июля приобретаем только на текущий месяц - month = 0 - date_start = self.add_months(sourcedate=now().replace(hour=0, minute=0, day=1), months=month) + date_start = now().date() + if date_start < september2018: + date_start = september2018 date_end = arrow.get(date_start, settings.TIME_ZONE).shift(months=1, minutes=-1).datetime payment.date_start = date_start payment.date_end = date_end diff --git a/apps/school/models.py b/apps/school/models.py index 91d007e8..fe66564b 100644 --- a/apps/school/models.py +++ b/apps/school/models.py @@ -1,9 +1,10 @@ import arrow -from datetime import datetime, timedelta +from datetime import datetime, timedelta, date from django.conf import settings from django.db import models from django.urls import reverse_lazy +from django.utils.functional import cached_property from django.utils.timezone import now from project.mixins import BaseModel, DeactivatedMixin @@ -50,15 +51,18 @@ class SchoolSchedule(models.Model): end_at = datetime.combine(now().today(), self.start_at) + timedelta(hours=1) return self.start_at <= now().time() and end_at.time() >= now().time() and self.weekday == now().isoweekday() + @cached_property def current_live_lesson(self): - now_time = now() + september2018 = date(2018, 9, 1) + date_start = max(september2018, now().date()) live_lesson = LiveLesson.objects.filter( date__week_day=self.weekday % 7 + 1, - date__range=[now_time.date(), (now_time + timedelta(days=6)).date()], + date__range=[date_start, date_start + timedelta(days=6)], deactivated_at__isnull=True, ).first() return live_lesson + @cached_property def previous_live_lesson(self): now_time = now() live_lesson = LiveLesson.objects.filter( diff --git a/apps/school/templates/blocks/online.html b/apps/school/templates/blocks/online.html index c4c82931..549dad08 100644 --- a/apps/school/templates/blocks/online.html +++ b/apps/school/templates/blocks/online.html @@ -1,7 +1,7 @@ {% load static %}
-
ПРЯМОЙ ЭФИР
+
ВИДЕОУРОКИ
Каждый день в 17.00 (по Мск)
Кроме выходных. Запись эфира доступна по завершению трансляции
diff --git a/apps/school/templates/blocks/promo.html b/apps/school/templates/blocks/promo.html index 72137dbb..86f1f1df 100644 --- a/apps/school/templates/blocks/promo.html +++ b/apps/school/templates/blocks/promo.html @@ -17,7 +17,7 @@
-
Прямой эфир
+
Видеоуроки
С понедельника по пятницу кроме выходных
diff --git a/apps/school/templates/blocks/schedule_item.html b/apps/school/templates/blocks/schedule_item.html index 3895f575..7860e437 100644 --- a/apps/school/templates/blocks/schedule_item.html +++ b/apps/school/templates/blocks/schedule_item.html @@ -15,8 +15,6 @@ {% if live_lesson and live_lesson.title %} {% include './open_lesson.html' %} {% endif %} - {% else %} - {% include './day_pay_btn.html' %} {% endif %} {% endif %}
diff --git a/apps/school/templates/school/livelessons_list.html b/apps/school/templates/school/livelessons_list.html index b2099cbe..f19f81f0 100644 --- a/apps/school/templates/school/livelessons_list.html +++ b/apps/school/templates/school/livelessons_list.html @@ -9,7 +9,7 @@
{% for livelesson in livelesson_list %} -
+
diff --git a/apps/school/templates/summer/online.html b/apps/school/templates/summer/online.html index 3599afcc..113965bb 100644 --- a/apps/school/templates/summer/online.html +++ b/apps/school/templates/summer/online.html @@ -1,9 +1,9 @@ {% load static %}
diff --git a/apps/school/templates/summer/schedule_purchased.html b/apps/school/templates/summer/schedule_purchased.html index b6e183a1..e22818c7 100644 --- a/apps/school/templates/summer/schedule_purchased.html +++ b/apps/school/templates/summer/schedule_purchased.html @@ -26,14 +26,12 @@
Новые уроки
{% endif %} - {% comment %} - {% endcomment %}
{% endif %}
diff --git a/apps/school/urls.py b/apps/school/urls.py index 47361f96..59973c6d 100644 --- a/apps/school/urls.py +++ b/apps/school/urls.py @@ -3,12 +3,11 @@ from django.urls import path, include from .views import ( LiveLessonsView, LiveLessonEditView, LiveLessonsDetailView, SchoolView, - SchoolSchedulesPrintView, SummerSchoolView, + SchoolSchedulesPrintView, ) urlpatterns = [ path('', SchoolView.as_view(), name='school'), - path('summer', SummerSchoolView.as_view(), name='summer-school'), path('schedules/print', SchoolSchedulesPrintView.as_view(), name='school_schedules-print'), path('lessons/', LiveLessonsView.as_view(), name='lessons'), path('lessons/create', LiveLessonEditView.as_view(), name='lessons-create'), diff --git a/apps/school/views.py b/apps/school/views.py index 3f269067..e09801c2 100644 --- a/apps/school/views.py +++ b/apps/school/views.py @@ -1,4 +1,4 @@ -from datetime import datetime, timedelta +from datetime import datetime, timedelta, date from paymentwall import Pingback from django.contrib.auth import get_user_model @@ -34,19 +34,22 @@ class LiveLessonsView(ListView): template_name = 'school/livelessons_list.html' def get_queryset(self): + september2018 = date(2018, 9, 1) + date_start = (now() - timedelta(days=7)).date() + if date_start < september2018: + date_start = september2018 date_range = Q( date__range=[ - (now() - timedelta(days=7)).date(), - (now() + timedelta(days=10)).date(), + date_start, + date_start + timedelta(days=17), ] ) queryset = LiveLesson.objects.filter(date_range) if queryset.count() < 17: - start_date = now() - timedelta(days=7) for i in range(18): try: LiveLesson.objects.create( - date=(start_date + timedelta(days=i)).date(), + date=date_start + timedelta(days=i), ) except IntegrityError: pass @@ -61,6 +64,7 @@ class LiveLessonsDetailView(DetailView): def get(self, request, pk=None): response = super().get(request, pk=pk) + # ??? где проверка? #try: # school_payment = SchoolPayment.objects.get( # user=request.user, @@ -107,75 +111,8 @@ class LiveLessonEditView(TemplateView): class SchoolView(TemplateView): - template_name = 'school/school.html' - - def get_context_data(self): - context = super().get_context_data() - is_previous = 'is_previous' in self.request.GET - date_now = now().date() - now_time = now() - try: - school_schedule = SchoolSchedule.objects.get(weekday=now_time.isoweekday()) - except SchoolSchedule.DoesNotExist: - online = False - else: - end_at = datetime.combine(now_time.today(), school_schedule.start_at) - online = ( - school_schedule.start_at <= now_time.time() and - (end_at + timedelta(hours=1)).time() >= now_time.time() and - school_schedule.current_live_lesson() - ) - if self.request.user.is_authenticated: - school_payment = SchoolPayment.objects.filter( - user=self.request.user, - status__in=[ - Pingback.PINGBACK_TYPE_REGULAR, - Pingback.PINGBACK_TYPE_GOODWILL, - Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED, - ], - date_start__lte=date_now, - date_end__gte=date_now - ) - school_payment_exists = school_payment.exists() - school_schedules_purchased = school_payment.annotate( - joined_weekdays=Func(F('weekdays'), function='unnest',) - ).values_list('joined_weekdays', flat=True).distinct() - else: - school_payment_exists = False - school_schedules_purchased = [] - if school_payment_exists and is_previous: - live_lessons = LiveLesson.objects.filter( - date__gte=school_payment.last().date_start, - date__range=[(now_time - timedelta(days=8)).date(), (now_time - timedelta(days=1)).date()], - deactivated_at__isnull=True, - ) - live_lessons_exists = live_lessons.exists() - else: - live_lessons = None - live_lessons_exists = False - context.update({ - 'online': online, - 'live_lessons': live_lessons, - 'live_lessons_exists': live_lessons_exists, - 'is_previous': is_previous, - 'course_items': Course.objects.filter(status=Course.PUBLISHED)[:6], - 'is_purchased': school_payment_exists, - 'min_school_price': SchoolSchedule.objects.aggregate(Min('month_price'))['month_price__min'], - 'school_schedules': SchoolSchedule.objects.all(), - 'school_schedules_purchased': school_schedules_purchased, - 'subscription_ends': school_payment.filter(add_days=False).first().date_end if school_payment_exists else None, - }) - return context - -class SummerSchoolView(TemplateView): template_name = 'school/summer_school.html' - def get(self, request, *args, **kwargs): - context = self.get_context_data(**kwargs) - if not context.get('is_purchased'): - return redirect('/') - return self.render_to_response(context) - def get_context_data(self): context = super().get_context_data() is_previous = 'is_previous' in self.request.GET @@ -193,10 +130,14 @@ class SummerSchoolView(TemplateView): online = ( school_schedule.start_at <= now_time.time() and (end_at + timedelta(hours=1)).time() >= now_time.time() and - school_schedule.current_live_lesson() + school_schedule.current_live_lesson ) school_schedules = SchoolSchedule.objects.all() + try: + school_schedules = sorted(school_schedules, key=lambda ss: ss.current_live_lesson and ss.current_live_lesson.date) + except Exception: + pass school_schedules_dict = {ss.weekday: ss for ss in school_schedules} school_schedules_dict[0] = school_schedules_dict.get(7) all_schedules_purchased = [] @@ -250,7 +191,7 @@ class SummerSchoolView(TemplateView): school_schedules_purchased = [] if all_schedules_purchased and is_previous: live_lessons = LiveLesson.objects.filter( - date__range=[month_start, yesterday], + date__range=[yesterday - timedelta(days=7), yesterday], deactivated_at__isnull=True, date__week_day__in=all_schedules_purchased, ).order_by('-date') diff --git a/apps/user/templates/user/profile.html b/apps/user/templates/user/profile.html index fd279635..e8a81d33 100644 --- a/apps/user/templates/user/profile.html +++ b/apps/user/templates/user/profile.html @@ -64,7 +64,7 @@
- {# #} + @@ -75,7 +75,6 @@ {% endif %}
- {% comment %}
{% if is_purchased_future %}
@@ -89,7 +88,7 @@ {% else %}
-
Вы не подписаны на лагерь!
+
Вы не подписаны на онлайн-школу!
- {% endcomment %} - diff --git a/project/templates/blocks/footer.html b/project/templates/blocks/footer.html index b586ffc9..14ebdebb 100644 --- a/project/templates/blocks/footer.html +++ b/project/templates/blocks/footer.html @@ -19,7 +19,6 @@