From 7110a84e2778f98fecf8a8c404d98613726896ca Mon Sep 17 00:00:00 2001 From: gzbender Date: Wed, 12 Sep 2018 17:52:51 +0500 Subject: [PATCH] =?UTF-8?q?LIL-659=20=D0=9F=D0=BE=D0=B4=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D1=87=D0=B8=D0=BA=20=D0=B2=D0=B8=D0=B4=D0=B8=D1=82=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D0=B8=D1=81=D0=B8=20=D1=83=D1=80=D0=BE=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=B4=D0=BE=20=D0=B4=D0=B0=D1=82=D1=8B=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BE=D0=B1=D1=80=D0=B5=D1=82=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/school/views.py | 48 +++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/apps/school/views.py b/apps/school/views.py index 3816c0eb..1728d443 100644 --- a/apps/school/views.py +++ b/apps/school/views.py @@ -140,21 +140,9 @@ class SchoolView(TemplateView): pass school_schedules_dict = {ss.weekday: ss for ss in school_schedules} school_schedules_dict[0] = school_schedules_dict.get(7) - all_schedules_purchased = [] + live_lessons = None + live_lessons_exists = False if self.request.user.is_authenticated: - all_schedules_purchased = 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__range=[month_start, date_now], - ).annotate( - joined_weekdays=Func(F('weekdays'), function='unnest',) - ).distinct().values_list('joined_weekdays', flat=True) - all_schedules_purchased = list(map(lambda x: 1 if x == 7 else x+1, all_schedules_purchased)) - school_payment = SchoolPayment.objects.filter( user=self.request.user, status__in=[ @@ -173,18 +161,32 @@ class SchoolView(TemplateView): else: school_payment_exists = False school_schedules_purchased = [] - if all_schedules_purchased and is_previous: - live_lessons = LiveLesson.objects.filter( - date__range=[yesterday - timedelta(days=7), yesterday], - deactivated_at__isnull=True, - date__week_day__in=all_schedules_purchased, - ).order_by('-date') + if is_previous: + prev_range = [yesterday - timedelta(days=7), yesterday] + live_lessons = [] + # берем все подписки, которые были в периоде + for sp in SchoolPayment.objects.filter( + date_start__lte=prev_range[1], + date_end__gte=prev_range[0], + user=self.request.user, + status__in=[ + Pingback.PINGBACK_TYPE_REGULAR, + Pingback.PINGBACK_TYPE_GOODWILL, + Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED, + ], + ): + # берем все уроки в оплаченном промежутке + date_range = [max(sp.date_start, prev_range[0]), min(sp.date_end, prev_range[1])] + live_lessons += LiveLesson.objects.filter( + date__range=date_range, + deactivated_at__isnull=True, + date__week_day__in=list(map(lambda x: 1 if x == 7 else x+1, sp.weekdays)), + ).values_list('id', flat=True) + live_lessons = LiveLesson.objects.filter(id__in=set(live_lessons)).order_by('-date') for ll in live_lessons: ll.school_schedule = school_schedules_dict.get(ll.date.isoweekday()) live_lessons_exists = live_lessons.exists() - else: - live_lessons = None - live_lessons_exists = False + live_lessons = live_lessons or None context.update({ 'online': online, 'live_lessons': live_lessons,