You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
5.9 KiB
141 lines
5.9 KiB
from datetime import datetime, timedelta
|
|
from random import shuffle
|
|
|
|
import short_url
|
|
from django.db.models import Min, Func, F
|
|
from django.contrib.auth import get_user_model
|
|
from django.views.generic import TemplateView
|
|
from django.utils.timezone import now
|
|
from paymentwall.pingback import Pingback
|
|
|
|
from apps.course.models import Course
|
|
from apps.school.models import SchoolSchedule
|
|
from apps.payment.models import SchoolPayment, UserGiftCertificate, Payment, DrawingCampPayment
|
|
from apps.content.models import Banner
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
class AboutView(TemplateView):
|
|
template_name = 'templates/lilcity/about.html'
|
|
|
|
|
|
class IndexView(TemplateView):
|
|
template_name = 'templates/lilcity/home.html'
|
|
|
|
def get_context_data(self):
|
|
referrer = self.request.GET.get('referrer')
|
|
user_gift_certificate = self.request.GET.get('gift-certificate')
|
|
is_referral_url = bool(referrer)
|
|
context = super().get_context_data()
|
|
|
|
now_time = now()
|
|
try:
|
|
school_schedule = SchoolSchedule.objects.get(weekday=now_time.isoweekday(), is_camp=True)
|
|
except SchoolSchedule.DoesNotExist:
|
|
online = False
|
|
online_coming_soon = False
|
|
school_schedule = None
|
|
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_camp_lesson
|
|
)
|
|
online_coming_soon = (
|
|
school_schedule.start_at > now_time.time() and
|
|
datetime.combine(datetime.today(), school_schedule.start_at) - timedelta(hours=12)
|
|
<= datetime.combine(datetime.today(), now_time.time()) and
|
|
school_schedule.current_camp_lesson
|
|
)
|
|
date_now = now_time.date()
|
|
if self.request.user.is_authenticated:
|
|
school_payment = SchoolPayment.objects.filter(
|
|
user=self.request.user,
|
|
date_start__lte=date_now,
|
|
date_end__gte=date_now,
|
|
status__in=[
|
|
Pingback.PINGBACK_TYPE_REGULAR,
|
|
Pingback.PINGBACK_TYPE_GOODWILL,
|
|
Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED,
|
|
],
|
|
)
|
|
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()
|
|
|
|
camp_payment = DrawingCampPayment.objects.filter(
|
|
user=self.request.user,
|
|
status__in=DrawingCampPayment.PW_PAID_STATUSES,
|
|
date_start__lte=date_now,
|
|
date_end__gte=date_now
|
|
)
|
|
camp_payment_exists = camp_payment.exists()
|
|
|
|
else:
|
|
camp_payment_exists = False
|
|
school_payment_exists = False
|
|
school_schedules_purchased = []
|
|
|
|
if referrer and not self.request.user.is_authenticated:
|
|
try:
|
|
referrer = short_url.decode_url(referrer)
|
|
referrer = User.objects.get(pk=referrer)
|
|
except:
|
|
referrer = None
|
|
self.request.session['referrer'] = referrer and referrer.id
|
|
else:
|
|
referrer = None
|
|
|
|
if user_gift_certificate:
|
|
try:
|
|
user_gift_certificate = short_url.decode_url(user_gift_certificate)
|
|
user_gift_certificate = UserGiftCertificate.objects.get(pk=user_gift_certificate, bonuses_sent__isnull=True)
|
|
except:
|
|
user_gift_certificate = None
|
|
|
|
review_images = list(map(str, range(1, 107)))
|
|
shuffle(review_images)
|
|
|
|
context.update({
|
|
'banners': Banner.get_for_page(Banner.PAGE_INDEX),
|
|
'is_drawing_camp': True,
|
|
'review_images': review_images,
|
|
'gift_certificate': user_gift_certificate.gift_certificate if user_gift_certificate else None,
|
|
'user_gift_certificate': user_gift_certificate,
|
|
'is_gift_certificate_url': bool(user_gift_certificate),
|
|
'referrer': referrer,
|
|
'is_referral_url': is_referral_url,
|
|
'online': online,
|
|
'online_coming_soon': online_coming_soon,
|
|
'school_schedule': school_schedule,
|
|
'course_items': Course.shuffle(Course.objects.filter(status=Course.PUBLISHED)[:3]),
|
|
'is_purchased': camp_payment_exists, # school_payment_exists,
|
|
'camp_price': DrawingCampPayment.MONTH_PRICE,
|
|
'min_school_price': SchoolSchedule.objects.aggregate(Min('month_price'))['month_price__min'],
|
|
'school_schedules': SchoolSchedule.objects.filter(weekday__in=DrawingCampPayment.WEEKDAYS, is_camp=True),
|
|
'school_schedules_purchased': DrawingCampPayment.WEEKDAYS if camp_payment_exists else [],
|
|
'teachers': User.objects.filter(role=User.TEACHER_ROLE, show_in_mainpage=True),
|
|
'works_count': Payment.objects.filter(status__in=Payment.PW_PAID_STATUSES).count() * 7,
|
|
'subscription_ends': camp_payment.latest('date_end').date_end if camp_payment_exists else None,
|
|
'subscription_ends_humanize': camp_payment.latest('date_end').date_end_humanize if camp_payment_exists else None,
|
|
'school_purchased_future': False,
|
|
'is_purchased_future': False,
|
|
|
|
})
|
|
return context
|
|
|
|
|
|
class SchoolSchedulesView(TemplateView):
|
|
template_name = 'templates/lilcity/school_schedules.html'
|
|
|
|
def get_context_data(self):
|
|
context = super().get_context_data()
|
|
context['school_schedules'] = SchoolSchedule.objects.filter(is_camp=True)
|
|
return context
|
|
|
|
|
|
class LinksView(TemplateView):
|
|
template_name = 'templates/lilcity/links.html'
|
|
|