@ -1,9 +1,10 @@
from django . db import models
from django . utils . timezone import now
from project . mixins import BaseModel , DeactivatedMixin
from apps . content . models import ImageObject
from apps . course . models import Comment
from apps . payment import models as payment_models
class SchoolSchedule ( models . Model ) :
@ -16,14 +17,20 @@ class SchoolSchedule(models.Model):
( 6 , ' суббота ' ) ,
( 7 , ' воскресенье ' ) ,
)
weekday = models . PositiveSmallIntegerField ( ' День недели ' , choices = WEEKDAY_CHOICES , unique = True )
weekday = models . PositiveSmallIntegerField (
' День недели ' , choices = WEEKDAY_CHOICES , unique = True
)
title = models . CharField ( ' Заголовок ' , default = ' ' , max_length = 100 , db_index = True )
short_description = models . CharField ( ' Короткое описание ' , default = ' ' , max_length = 100 , db_index = True )
short_description = models . CharField (
' Короткое описание ' , default = ' ' , max_length = 100 , db_index = True
)
description = models . TextField ( ' Описание ' )
materials = models . TextField ( ' Материалы ' )
age = models . PositiveSmallIntegerField ( ' Возраст ' , default = 0 )
month_price = models . DecimalField ( ' Цена ' , max_digits = 8 , decimal_places = 2 , default = 0 )
day_discount = models . DecimalField ( ' Скидка, в валюте ' , max_digits = 8 , decimal_places = 2 , default = 0 )
day_discount = models . DecimalField (
' Скидка, в валюте ' , max_digits = 8 , decimal_places = 2 , default = 0
)
start_at = models . TimeField ( ' Начало урока ' , null = True )
class Meta :
@ -34,16 +41,45 @@ class SchoolSchedule(models.Model):
def __str__ ( self ) :
return dict ( self . WEEKDAY_CHOICES ) . get ( self . weekday , ' ' )
def is_online ( self ) :
return now ( ) . isoweekday ( ) == self . weekday and now ( ) . time ( ) > = self . start_at
def is_purchased ( self ) :
try :
school_payment = payment_models . SchoolPayment . objects . get (
weekdays__contains = [ self . weekday ] ,
date_start__gte = now ( ) . date ( ) ,
date_end__lte = now ( ) . date ( ) ,
)
except payment_models . SchoolPayment . DoesNotExist :
return False
else :
return school_payment . is_deliverable ( )
def current_live_lesson ( self ) :
now_time = now ( )
weekday = self . weekday
live_lesson = LiveLesson . objects . filter (
date__week_day = weekday + 1 if weekday % 7 else 1 ,
date__gte = now_time . date ( ) ,
) . first ( )
return live_lesson
class SchoolScheduleImage ( models . Model ) :
schoolschedule = models . ForeignKey (
SchoolSchedule , on_delete = models . CASCADE ,
verbose_name = ' День занятия ' , related_name = ' schoolschedule_images '
SchoolSchedule ,
on_delete = models . CASCADE ,
verbose_name = ' День занятия ' ,
related_name = ' schoolschedule_images ' ,
)
img = models . ForeignKey (
ImageObject , related_name = ' schoolschedule_images ' ,
verbose_name = ' Объект изображения ' , on_delete = models . CASCADE ,
null = True , blank = True ,
ImageObject ,
related_name = ' schoolschedule_images ' ,
verbose_name = ' Объект изображения ' ,
on_delete = models . CASCADE ,
null = True ,
blank = True ,
)
created_at = models . DateTimeField ( auto_now_add = True )
@ -61,9 +97,12 @@ class LiveLesson(BaseModel, DeactivatedMixin):
stream = models . URLField ( ' Ссылка на VIMEO ' , default = ' ' , blank = True )
date = models . DateField ( null = True , blank = True )
cover = models . ForeignKey (
ImageObject , related_name = ' livelesson_covers ' ,
verbose_name = ' Обложка урока школы ' , on_delete = models . CASCADE ,
null = True , blank = True ,
ImageObject ,
related_name = ' livelesson_covers ' ,
verbose_name = ' Обложка урока школы ' ,
on_delete = models . CASCADE ,
null = True ,
blank = True ,
)
created_at = models . DateTimeField ( auto_now_add = True )