Merge branch 'feature/drawing-camp' into 'master'

рисовальный лагерь

See merge request lilschool/site!298
remotes/origin/feature/cat-title-links-24-05-19
Danil 7 years ago
commit b0a6e91008
  1. 2
      api/v1/serializers/school.py
  2. 1
      apps/payment/models.py
  3. 1
      apps/school/admin.py
  4. 18
      apps/school/migrations/0024_schoolschedule_is_camp.py
  5. 22
      apps/school/migrations/0025_auto_20190515_1207.py
  6. 6
      apps/school/models.py
  7. 2
      apps/school/templates/drawing_camp/promo.html
  8. 10
      apps/school/views.py
  9. 10
      project/views.py

@ -56,6 +56,7 @@ class SchoolScheduleSerializer(serializers.ModelSerializer):
'schoolschedule_images', 'schoolschedule_images',
'cover', 'cover',
'trial_lesson', 'trial_lesson',
'is_camp',
) )
read_only_fields = ( read_only_fields = (
@ -116,6 +117,7 @@ class SchoolScheduleSerializerImg(serializers.ModelSerializer):
'schoolschedule_images', 'schoolschedule_images',
'cover', 'cover',
'trial_lesson', 'trial_lesson',
'is_camp',
) )
read_only_fields = ( read_only_fields = (

@ -220,6 +220,7 @@ class Payment(PolymorphicModel):
add_days = False add_days = False
school_schedules = SchoolSchedule.objects.filter( school_schedules = SchoolSchedule.objects.filter(
weekday__in=weekdays, weekday__in=weekdays,
is_camp=False,
) )
if add_days: if add_days:
date_end = prev_school_payment.date_end date_end = prev_school_payment.date_end

@ -23,6 +23,7 @@ class SchoolScheduleAdmin(admin.ModelAdmin):
'weekday', 'weekday',
'title', 'title',
'month_price', 'month_price',
'is_camp',
) )

@ -0,0 +1,18 @@
# Generated by Django 2.0.7 on 2019-05-15 11:39
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('school', '0023_livelesson_is_camp'),
]
operations = [
migrations.AddField(
model_name='schoolschedule',
name='is_camp',
field=models.BooleanField(default=False),
),
]

@ -0,0 +1,22 @@
# Generated by Django 2.0.7 on 2019-05-15 12:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('school', '0024_schoolschedule_is_camp'),
]
operations = [
migrations.AlterField(
model_name='schoolschedule',
name='weekday',
field=models.PositiveSmallIntegerField(choices=[(1, 'понедельник'), (2, 'вторник'), (3, 'среда'), (4, 'четверг'), (5, 'пятница'), (6, 'суббота'), (7, 'воскресенье')], verbose_name='День недели'),
),
migrations.AlterUniqueTogether(
name='schoolschedule',
unique_together={('weekday', 'is_camp')},
),
]

@ -25,7 +25,7 @@ class SchoolSchedule(models.Model):
(7, 'воскресенье'), (7, 'воскресенье'),
) )
weekday = models.PositiveSmallIntegerField( weekday = models.PositiveSmallIntegerField(
'День недели', choices=WEEKDAY_CHOICES, unique=True 'День недели', choices=WEEKDAY_CHOICES,
) )
title = models.CharField('Заголовок', default='', max_length=100, db_index=True) title = models.CharField('Заголовок', default='', max_length=100, db_index=True)
short_description = models.CharField( short_description = models.CharField(
@ -48,11 +48,13 @@ class SchoolSchedule(models.Model):
blank=True, blank=True,
) )
trial_lesson = models.URLField(default='', blank=True) trial_lesson = models.URLField(default='', blank=True)
is_camp = models.BooleanField(default=False)
class Meta: class Meta:
ordering = ('weekday',) ordering = ('weekday',)
verbose_name = 'Расписание' verbose_name = 'Расписание'
verbose_name_plural = 'Расписания' verbose_name_plural = 'Расписания'
unique_together = (('weekday', 'is_camp'),)
def __str__(self): def __str__(self):
return dict(self.WEEKDAY_CHOICES).get(self.weekday, '') return dict(self.WEEKDAY_CHOICES).get(self.weekday, '')
@ -183,7 +185,7 @@ class LiveLesson(BaseModel, DeactivatedMixin):
@cached_property @cached_property
def school_schedule(self): def school_schedule(self):
try: try:
return SchoolSchedule.objects.get(weekday=self.date.isoweekday()) return SchoolSchedule.objects.get(weekday=self.date.isoweekday(), is_camp=self.is_camp)
except SchoolSchedule.DoesNotExist: except SchoolSchedule.DoesNotExist:
return None return None

@ -2,7 +2,7 @@
<div class="main main_default" style="background-image: url({% static 'img/bg-2.jpg' %});"> <div class="main main_default" style="background-image: url({% static 'img/bg-2.jpg' %});">
<div class="main__center center"> <div class="main__center center">
<div class="main__title"> <div class="main__title">
<span class="main__bold">Рисовальный лагерь</span> — продолжение нашей онлайн-колы только летом. <span class="main__bold">Рисовальный лагерь</span> — продолжение нашей онлайн-школы только летом.
Понедельник, среда и пятница ждем вас в 17:00 (мск). Уроки хранятся 7 дней. Понедельник, среда и пятница ждем вас в 17:00 (мск). Уроки хранятся 7 дней.
</div> </div>
<div class="main__actions"> <div class="main__actions">

@ -154,7 +154,7 @@ class SchoolView(TemplateView):
date_now = now().date() date_now = now().date()
now_time = now() now_time = now()
try: try:
school_schedule = SchoolSchedule.objects.get(weekday=now_time.isoweekday()) school_schedule = SchoolSchedule.objects.get(weekday=now_time.isoweekday(), is_camp=False)
except SchoolSchedule.DoesNotExist: except SchoolSchedule.DoesNotExist:
online = False online = False
else: else:
@ -165,7 +165,7 @@ class SchoolView(TemplateView):
school_schedule.current_live_lesson school_schedule.current_live_lesson
) )
school_schedules = SchoolSchedule.objects.all() school_schedules = SchoolSchedule.objects.filter(is_camp=False)
try: try:
school_schedules_sorted = sorted(school_schedules, school_schedules_sorted = sorted(school_schedules,
key=lambda ss: ss.current_live_lesson and ss.current_live_lesson.date) key=lambda ss: ss.current_live_lesson and ss.current_live_lesson.date)
@ -275,7 +275,7 @@ class DrawingCampView(TemplateView):
next_lesson_start = None next_lesson_start = None
if now_time.isoweekday() in DrawingCampPayment.WEEKDAYS: if now_time.isoweekday() in DrawingCampPayment.WEEKDAYS:
try: try:
school_schedule = SchoolSchedule.objects.get(weekday=now_time.isoweekday()) school_schedule = SchoolSchedule.objects.get(weekday=now_time.isoweekday(), is_camp=True)
except SchoolSchedule.DoesNotExist: except SchoolSchedule.DoesNotExist:
online = False online = False
else: else:
@ -290,12 +290,12 @@ class DrawingCampView(TemplateView):
next_lesson_start = next_schedule.start_at_humanize next_lesson_start = next_schedule.start_at_humanize
if not next_schedule: if not next_schedule:
next_camp_lesson = LiveLesson.objects.filter(date__gt=date_now, is_camp=True).first() next_camp_lesson = LiveLesson.objects.filter(date__gt=date_now, is_camp=True).first()
if next_camp_lesson: if next_camp_lesson and next_camp_lesson.school_schedule:
next_schedule = next_camp_lesson.school_schedule next_schedule = next_camp_lesson.school_schedule
next_lesson_start = arrow.get(datetime.combine(next_camp_lesson.date, next_schedule.start_at), next_lesson_start = arrow.get(datetime.combine(next_camp_lesson.date, next_schedule.start_at),
settings.TIME_ZONE).humanize(locale='ru') settings.TIME_ZONE).humanize(locale='ru')
school_schedules = SchoolSchedule.objects.filter(weekday__in=DrawingCampPayment.WEEKDAYS) school_schedules = SchoolSchedule.objects.filter(weekday__in=DrawingCampPayment.WEEKDAYS, is_camp=True)
try: try:
school_schedules_sorted = sorted(school_schedules, school_schedules_sorted = sorted(school_schedules,
key=lambda ss: ss.current_camp_lesson and ss.current_camp_lesson.date) key=lambda ss: ss.current_camp_lesson and ss.current_camp_lesson.date)

@ -30,7 +30,7 @@ class IndexView(TemplateView):
now_time = now() now_time = now()
try: try:
school_schedule = SchoolSchedule.objects.get(weekday=now_time.isoweekday()) school_schedule = SchoolSchedule.objects.get(weekday=now_time.isoweekday(), is_camp=True)
except SchoolSchedule.DoesNotExist: except SchoolSchedule.DoesNotExist:
online = False online = False
online_coming_soon = False online_coming_soon = False
@ -40,13 +40,13 @@ class IndexView(TemplateView):
online = ( online = (
school_schedule.start_at <= now_time.time() and school_schedule.start_at <= now_time.time() and
(end_at + timedelta(hours=1)).time() >= now_time.time() and (end_at + timedelta(hours=1)).time() >= now_time.time() and
school_schedule.current_live_lesson school_schedule.current_camp_lesson
) )
online_coming_soon = ( online_coming_soon = (
school_schedule.start_at > now_time.time() and school_schedule.start_at > now_time.time() and
datetime.combine(datetime.today(), school_schedule.start_at) - timedelta(hours=12) datetime.combine(datetime.today(), school_schedule.start_at) - timedelta(hours=12)
<= datetime.combine(datetime.today(), now_time.time()) and <= datetime.combine(datetime.today(), now_time.time()) and
school_schedule.current_live_lesson school_schedule.current_camp_lesson
) )
date_now = now_time.date() date_now = now_time.date()
if self.request.user.is_authenticated: if self.request.user.is_authenticated:
@ -113,7 +113,7 @@ class IndexView(TemplateView):
'is_purchased': camp_payment_exists, # school_payment_exists, 'is_purchased': camp_payment_exists, # school_payment_exists,
'camp_price': DrawingCampPayment.MONTH_PRICE, 'camp_price': DrawingCampPayment.MONTH_PRICE,
'min_school_price': SchoolSchedule.objects.aggregate(Min('month_price'))['month_price__min'], 'min_school_price': SchoolSchedule.objects.aggregate(Min('month_price'))['month_price__min'],
'school_schedules': SchoolSchedule.objects.filter(weekday__in=DrawingCampPayment.WEEKDAYS), 'school_schedules': SchoolSchedule.objects.filter(weekday__in=DrawingCampPayment.WEEKDAYS, is_camp=True),
'school_schedules_purchased': DrawingCampPayment.WEEKDAYS if camp_payment_exists else [], # set(school_schedules_purchased), 'school_schedules_purchased': DrawingCampPayment.WEEKDAYS if camp_payment_exists else [], # set(school_schedules_purchased),
'teachers': User.objects.filter(role=User.TEACHER_ROLE, show_in_mainpage=True), '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, 'works_count': Payment.objects.filter(status__in=Payment.PW_PAID_STATUSES).count() * 7,
@ -134,7 +134,7 @@ class SchoolSchedulesView(TemplateView):
def get_context_data(self): def get_context_data(self):
context = super().get_context_data() context = super().get_context_data()
context['school_schedules'] = SchoolSchedule.objects.all() context['school_schedules'] = SchoolSchedule.objects.filter(is_camp=True)
return context return context

Loading…
Cancel
Save