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.
82 lines
2.6 KiB
82 lines
2.6 KiB
from django.contrib.auth import get_user_model
|
|
from django.contrib.auth.decorators import login_required, user_passes_test
|
|
from django.db.models import Min
|
|
from django.http import Http404
|
|
from django.shortcuts import get_object_or_404
|
|
from django.utils.decorators import method_decorator
|
|
from django.utils.timezone import now
|
|
from django.views.generic import ListView, UpdateView, TemplateView, DetailView
|
|
|
|
from apps.payment.models import SchoolPayment
|
|
from .models import LiveLesson, SchoolSchedule
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
def is_admin_or_teacher(function=None, login_url=None):
|
|
actual_decorator = user_passes_test(
|
|
lambda u: u.role in [User.ADMIN_ROLE, User.TEACHER_ROLE], login_url=login_url
|
|
)
|
|
if function:
|
|
return actual_decorator(function)
|
|
|
|
return actual_decorator
|
|
|
|
|
|
@method_decorator([login_required, is_admin_or_teacher], name='dispatch')
|
|
class LiveLessonsView(ListView):
|
|
model = LiveLesson
|
|
template_name = 'school/livelessons_list.html'
|
|
|
|
|
|
@method_decorator(login_required, name='dispatch')
|
|
class LiveLessonsDetailView(DetailView):
|
|
model = LiveLesson
|
|
template_name = 'school/livelesson_detail.html'
|
|
|
|
def get(self, request, pk=None):
|
|
response = super().get(request, pk=pk)
|
|
try:
|
|
school_payment = SchoolPayment.objects.get(
|
|
user=request.user, date_start__gte=now(), date__end__lte=now()
|
|
)
|
|
except SchoolPayment.DoesNotExist:
|
|
school_payment = None
|
|
if request.user.role not in [User.ADMIN_ROLE, User.TEACHER_ROLE] or not (
|
|
request.user.role == User.USER_ROLE and
|
|
school_payment and
|
|
school_payment.is_deliverable()
|
|
):
|
|
raise Http404
|
|
|
|
return response
|
|
|
|
|
|
@method_decorator([login_required, is_admin_or_teacher], name='dispatch')
|
|
class LiveLessonEditView(TemplateView):
|
|
template_name = 'course/course_edit.html'
|
|
|
|
def get(self, request, pk=None):
|
|
if pk:
|
|
self.object = get_object_or_404(LiveLesson, pk=pk)
|
|
else:
|
|
self.object = LiveLesson.objects.create()
|
|
return super().get(request)
|
|
|
|
def get_context_data(self):
|
|
context = super().get_context_data()
|
|
context['object'] = self.object
|
|
context['live'] = 'true'
|
|
return context
|
|
|
|
|
|
class SchoolView(TemplateView):
|
|
template_name = 'school/school.html'
|
|
|
|
def get_context_data(self):
|
|
context = super().get_context_data()
|
|
context.update({
|
|
'school_schedules': SchoolSchedule.objects.all(),
|
|
'min_school_price': SchoolSchedule.objects.aggregate(Min('month_price'))['month_price__min'],
|
|
})
|
|
return context
|
|
|