From 66f0f17a540f9da434679cd2673a706339ad70e1 Mon Sep 17 00:00:00 2001 From: gzbender Date: Wed, 15 May 2019 12:32:56 +0300 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B8=D1=81=D0=BE=D0=B2=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BB=D0=B0=D0=B3=D0=B5=D1=80=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/serializers/school.py | 2 ++ apps/payment/models.py | 1 + apps/school/admin.py | 1 + .../migrations/0024_schoolschedule_is_camp.py | 18 +++++++++++++++ .../migrations/0025_auto_20190515_1207.py | 22 +++++++++++++++++++ apps/school/models.py | 6 +++-- apps/school/templates/drawing_camp/promo.html | 2 +- apps/school/views.py | 10 ++++----- project/views.py | 10 ++++----- 9 files changed, 59 insertions(+), 13 deletions(-) create mode 100644 apps/school/migrations/0024_schoolschedule_is_camp.py create mode 100644 apps/school/migrations/0025_auto_20190515_1207.py diff --git a/api/v1/serializers/school.py b/api/v1/serializers/school.py index e25f06d6..caceba24 100644 --- a/api/v1/serializers/school.py +++ b/api/v1/serializers/school.py @@ -56,6 +56,7 @@ class SchoolScheduleSerializer(serializers.ModelSerializer): 'schoolschedule_images', 'cover', 'trial_lesson', + 'is_camp', ) read_only_fields = ( @@ -116,6 +117,7 @@ class SchoolScheduleSerializerImg(serializers.ModelSerializer): 'schoolschedule_images', 'cover', 'trial_lesson', + 'is_camp', ) read_only_fields = ( diff --git a/apps/payment/models.py b/apps/payment/models.py index f932765a..827332ac 100644 --- a/apps/payment/models.py +++ b/apps/payment/models.py @@ -220,6 +220,7 @@ class Payment(PolymorphicModel): add_days = False school_schedules = SchoolSchedule.objects.filter( weekday__in=weekdays, + is_camp=False, ) if add_days: date_end = prev_school_payment.date_end diff --git a/apps/school/admin.py b/apps/school/admin.py index 0f995b9e..59807de1 100644 --- a/apps/school/admin.py +++ b/apps/school/admin.py @@ -23,6 +23,7 @@ class SchoolScheduleAdmin(admin.ModelAdmin): 'weekday', 'title', 'month_price', + 'is_camp', ) diff --git a/apps/school/migrations/0024_schoolschedule_is_camp.py b/apps/school/migrations/0024_schoolschedule_is_camp.py new file mode 100644 index 00000000..7cc9e40c --- /dev/null +++ b/apps/school/migrations/0024_schoolschedule_is_camp.py @@ -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), + ), + ] diff --git a/apps/school/migrations/0025_auto_20190515_1207.py b/apps/school/migrations/0025_auto_20190515_1207.py new file mode 100644 index 00000000..65674d8d --- /dev/null +++ b/apps/school/migrations/0025_auto_20190515_1207.py @@ -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')}, + ), + ] diff --git a/apps/school/models.py b/apps/school/models.py index bccaa7f7..7aa9a83e 100644 --- a/apps/school/models.py +++ b/apps/school/models.py @@ -25,7 +25,7 @@ class SchoolSchedule(models.Model): (7, 'воскресенье'), ) weekday = models.PositiveSmallIntegerField( - 'День недели', choices=WEEKDAY_CHOICES, unique=True + 'День недели', choices=WEEKDAY_CHOICES, ) title = models.CharField('Заголовок', default='', max_length=100, db_index=True) short_description = models.CharField( @@ -48,11 +48,13 @@ class SchoolSchedule(models.Model): blank=True, ) trial_lesson = models.URLField(default='', blank=True) + is_camp = models.BooleanField(default=False) class Meta: ordering = ('weekday',) verbose_name = 'Расписание' verbose_name_plural = 'Расписания' + unique_together = (('weekday', 'is_camp'),) def __str__(self): return dict(self.WEEKDAY_CHOICES).get(self.weekday, '') @@ -183,7 +185,7 @@ class LiveLesson(BaseModel, DeactivatedMixin): @cached_property def school_schedule(self): 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: return None diff --git a/apps/school/templates/drawing_camp/promo.html b/apps/school/templates/drawing_camp/promo.html index 18d1ec78..c8b747ca 100644 --- a/apps/school/templates/drawing_camp/promo.html +++ b/apps/school/templates/drawing_camp/promo.html @@ -2,7 +2,7 @@
- Рисовальный лагерь — продолжение нашей онлайн-колы только летом. + Рисовальный лагерь — продолжение нашей онлайн-школы только летом. Понедельник, среда и пятница ждем вас в 17:00 (мск). Уроки хранятся 7 дней.
diff --git a/apps/school/views.py b/apps/school/views.py index f494e7f3..37a63dc2 100644 --- a/apps/school/views.py +++ b/apps/school/views.py @@ -154,7 +154,7 @@ class SchoolView(TemplateView): date_now = now().date() now_time = now() 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: online = False else: @@ -165,7 +165,7 @@ class SchoolView(TemplateView): school_schedule.current_live_lesson ) - school_schedules = SchoolSchedule.objects.all() + school_schedules = SchoolSchedule.objects.filter(is_camp=False) try: school_schedules_sorted = sorted(school_schedules, key=lambda ss: ss.current_live_lesson and ss.current_live_lesson.date) @@ -275,7 +275,7 @@ class DrawingCampView(TemplateView): next_lesson_start = None if now_time.isoweekday() in DrawingCampPayment.WEEKDAYS: 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: online = False else: @@ -290,12 +290,12 @@ class DrawingCampView(TemplateView): next_lesson_start = next_schedule.start_at_humanize if not next_schedule: 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_lesson_start = arrow.get(datetime.combine(next_camp_lesson.date, next_schedule.start_at), 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: school_schedules_sorted = sorted(school_schedules, key=lambda ss: ss.current_camp_lesson and ss.current_camp_lesson.date) diff --git a/project/views.py b/project/views.py index 485d7a0c..93a87f39 100644 --- a/project/views.py +++ b/project/views.py @@ -30,7 +30,7 @@ class IndexView(TemplateView): now_time = now() 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: online = False online_coming_soon = False @@ -40,13 +40,13 @@ class IndexView(TemplateView): online = ( school_schedule.start_at <= 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 = ( 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_live_lesson + school_schedule.current_camp_lesson ) date_now = now_time.date() if self.request.user.is_authenticated: @@ -113,7 +113,7 @@ class IndexView(TemplateView): '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), + '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), '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, @@ -134,7 +134,7 @@ class SchoolSchedulesView(TemplateView): def get_context_data(self): context = super().get_context_data() - context['school_schedules'] = SchoolSchedule.objects.all() + context['school_schedules'] = SchoolSchedule.objects.filter(is_camp=True) return context