Merge branch 'dev' into 'master'

Dev

See merge request lilcity/backend!44
remotes/origin/hasaccess
Vitaly Baev 8 years ago
commit 08c2eb5fa9
  1. 2
      apps/notification/templates/notification/email/_base.html
  2. 2
      apps/payment/templates/payment/payment_success.html
  3. 23
      apps/payment/views.py
  4. 60
      apps/school/fixtures/school_schedules.json
  5. 14
      apps/school/templates/blocks/promo.html
  6. 4
      apps/school/templates/blocks/schedule.html
  7. 5
      apps/school/templates/school/school.html
  8. 15
      apps/school/templates/school/summer_school.html
  9. 78
      apps/school/templates/summer/_schedule_purchased_item.html
  10. 26
      apps/school/templates/summer/about.html
  11. 44
      apps/school/templates/summer/advantages.html
  12. 7
      apps/school/templates/summer/day_pay_btn.html
  13. 21
      apps/school/templates/summer/last_courses.html
  14. 12
      apps/school/templates/summer/online.html
  15. 4
      apps/school/templates/summer/open_lesson.html
  16. 9
      apps/school/templates/summer/prolong_btn.html
  17. 67
      apps/school/templates/summer/promo.html
  18. 69
      apps/school/templates/summer/schedule_purchased.html
  19. 3
      apps/school/urls.py
  20. 85
      apps/school/views.py
  21. 4
      apps/user/templates/user/become-author.html
  22. 45
      apps/user/templates/user/profile.html
  23. 32
      apps/user/views.py
  24. 46
      project/templates/blocks/about.html
  25. 10
      project/templates/blocks/advantages.html
  26. 72
      project/templates/blocks/arts.html
  27. 9
      project/templates/blocks/footer.html
  28. 2
      project/templates/blocks/gallery.html
  29. 9
      project/templates/blocks/header.html
  30. 4
      project/templates/blocks/live.html
  31. 36
      project/templates/blocks/popup_subscribe.html
  32. 41
      project/templates/blocks/promo.html
  33. 13
      project/templates/blocks/teachers.html
  34. 1
      project/templates/lilcity/index.html
  35. 12
      project/templates/lilcity/subscribe_success.html
  36. 4
      project/templates/lilcity/terms.html
  37. 1
      project/urls.py
  38. 16
      project/views.py
  39. 10
      web/src/components/CourseRedactor.vue
  40. 2
      web/src/email/index.html
  41. 14
      web/src/sass/_common.sass
  42. 2
      web/src/templates/partials/_footer.pug

@ -22,7 +22,7 @@
</a>
</td>
<td style="padding:30px 50px 30px 10px;vertical-align:middle;text-align:right">
<div style="display:inline-block;width:220px;font-size:18px;line-height:1.22">Первая онлайн-школа креативного мышления Lil City School</div>
<div style="display:inline-block;width:220px;font-size:18px;line-height:1.22">Первая онлайн-школа креативного мышления Lil School</div>
</td>
</tr>
</tbody>

@ -5,7 +5,7 @@
{% if school %}
<div class="done__title title">Вы успешно приобрели доступ к урокам онлайн-школы!</div>
<div class="done__foot">
<a class="done__btn btn btn_md btn_stroke" href="{% url 'school:school' %}">ПЕРЕЙТИ К ШКОЛЕ</a>
<a class="done__btn btn btn_md btn_stroke" href="{% url 'school:summer-school' %}">ПЕРЕЙТИ К ШКОЛЕ</a>
</div>
{% else %}
<div class="done__title title">Вы успешно приобрели курс!</div>

@ -5,6 +5,9 @@ import logging
from datetime import timedelta
from urllib.parse import urlsplit
import datetime
import calendar
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
@ -95,12 +98,12 @@ class SchoolBuyView(TemplateView):
add_days = 'add_days' in request.GET
if not weekdays:
messages.error(request, 'Выберите несколько дней недели.')
return redirect('school:school')
return redirect('school:summer-school')
try:
weekdays = [int(weekday) for weekday in weekdays]
except ValueError:
messages.error(request, 'Ошибка выбора дней недели.')
return redirect('school:school')
return redirect('school:summer-school')
if add_days:
_school_payment = SchoolPayment.objects.get(
user=request.user,
@ -117,7 +120,7 @@ class SchoolBuyView(TemplateView):
)
if school_payment.amount <= 0:
messages.error(request, 'Выбранные дни отсутствуют в оставшемся периоде подписки')
return redirect(reverse_lazy('school:school'))
return redirect(reverse_lazy('school:summer-school'))
else:
school_payment = SchoolPayment.objects.create(
user=request.user,
@ -148,6 +151,13 @@ class SchoolBuyView(TemplateView):
@method_decorator(csrf_exempt, name='dispatch')
class PaymentwallCallbackView(View):
def add_months(self, sourcedate, months):
month = sourcedate.month - 1 + months
year = sourcedate.year + month // 12
month = month % 12 + 1
day = min(sourcedate.day, calendar.monthrange(year, month)[1])
return datetime.date(year, month, day)
def get_request_ip(self):
x_forwarded_for = self.request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
@ -201,14 +211,15 @@ class PaymentwallCallbackView(View):
).last()
if school_payment:
if payment.add_days:
date_start = now()
date_start = self.add_months(sourcedate=now().replace(hour=0, minute=0, day=1), months=1)
date_end = school_payment.date_end
else:
date_start = arrow.get(school_payment.date_end).shift(days=1).datetime
date_end = arrow.get(date_start).shift(months=1).datetime
else:
date_start = now()
date_end = arrow.get(date_start).shift(months=1).datetime
date_start = self.add_months(sourcedate=now().replace(hour=0, minute=0, day=1), months=1)
date__end = arrow.get(date_start).shift(months=1) - datetime.timedelta(minutes=1)
date_end = date__end.datetime
payment.date_start = date_start
payment.date_end = date_end
if product_type_name == 'course':

@ -14,21 +14,6 @@
"start_at": "17:00:00"
}
},
{
"model": "school.schoolschedule",
"pk": 2,
"fields": {
"weekday": 2,
"title": "Живопись",
"short_description": "Однажды он затеял скандал на торговой площади ради леденца, вокруг собралась толпа, и полицейские...",
"description": "Позднее в возрасте 5 лет на его могиле родители сказали Сальвадору, что он — реинкарнация своего старшего брата.",
"materials": "В детстве Дали был сообразительным, но заносчивым и неуправляемым ребёнком.",
"age": 0,
"month_price": "500.00",
"day_discount": "0.00",
"start_at": "17:00:00"
}
},
{
"model": "school.schoolschedule",
"pk": 3,
@ -44,21 +29,6 @@
"start_at": "17:00:00"
}
},
{
"model": "school.schoolschedule",
"pk": 4,
"fields": {
"weekday": 4,
"title": "Моторика",
"short_description": "Многочисленные комплексы[какие?] и фобии, например, страх перед",
"description": "Многочисленные комплексы[какие?] и фобии, например, страх перед кузнечиками[9], мешали ему включиться в обычную школьную жизнь, завести с детьми обычные связи дружбы и симпатии.",
"materials": "Но, как и любой человек, испытывая сенсорный голод, он искал эмоциональный контакт с детьми любыми способами, стараясь вжиться в их коллектив если не в роли товарища, то в любой другой роли, а точнее той единственной, на которую был способен, — в роли эпатажного и непослушного ребёнка, странного, чудаковатого, всегда поступающего вопреки чужим мнениям.",
"age": 0,
"month_price": "500.00",
"day_discount": "0.00",
"start_at": "17:00:00"
}
},
{
"model": "school.schoolschedule",
"pk": 5,
@ -73,35 +43,5 @@
"day_discount": "0.00",
"start_at": "17:00:00"
}
},
{
"model": "school.schoolschedule",
"pk": 6,
"fields": {
"weekday": 6,
"title": "Анимация",
"short_description": "Проигрывая в школьных азартных играх, он вёл себя так",
"description": "Обучаться изобразительному искусству Дали начал в муниципальной художественной школе. С 1914 по 1918 год воспитывался в Академии братьев ордена маристов в Фигерасе.",
"materials": "Одним из друзей детства был будущий футболист ФК «Барселона» Хосеп Самитьер. В 1916 году, с семьей Рамона Пишó, отправился на каникулы в город Кадакéс, где познакомился с современным искусством.",
"age": 0,
"month_price": "500.00",
"day_discount": "0.00",
"start_at": "17:00:00"
}
},
{
"model": "school.schoolschedule",
"pk": 7,
"fields": {
"weekday": 7,
"title": "Персонаж",
"short_description": "Проигрывая в школьных азартных играх, он вёл себя так",
"description": "После прихода к власти Каудильо Фрáнко в 1936 году Дали ссорится с сюрреалистами, стоящими на левых позициях, и его исключают из группы.",
"materials": "В ответ Дали: «Сюрреализм — это я».",
"age": 0,
"month_price": "500.00",
"day_discount": "0.00",
"start_at": "17:00:00"
}
}
]

@ -2,17 +2,13 @@
<div class="main main_default" style="background-image: url({% static 'img/bg-2.jpg' %});">
<div class="main__center center">
<div class="main__title">
<span class="main__bold">Lil City School</span> — первая образовательная онлайн-платформа креативного мышления для детей</div>
<span class="main__bold">Lil School</span> — первая образовательная онлайн-платформа креативного мышления для детей</div>
<div class="main__actions">
<a
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
{% else %}
data-popup=".js-popup-buy"
{% endif %}
class="main__btn btn"
href="#"
>купить доступ от {{ min_school_price }} руб./месяц</a>
data-popup=".js-popup-subscribe"
class="main__btn btn"
href="#"
>Оставить заявку</a>
</div>
<div class="main__school school school_main">
<div class="school__col">

@ -19,7 +19,7 @@
</div>
<div class="timing__buy">
<div class="timing__time">{{ school_schedule.start_at }} (МСК)</div>
{% include './pay_btn.html' %}
<!--{% include './pay_btn.html' %}-->
</div>
</div>
<div class="timing__cell">
@ -77,7 +77,7 @@
{% endfor %}
</div>
<div class="timing__foot">
{% include './pay_btn.html' %}
<!--{% include './pay_btn.html' %}-->
<a target="_blank" class="timing__print" href="{% url 'school:school_schedules-print' %}">Распечатать расписание
<span class="bold">чтобы не забыть</span>
<svg class="icon icon-print">

@ -1,15 +1,10 @@
{% extends "templates/lilcity/index.html" %} {% load static %}
{% block title %}Онлайн-школа LilCity{% endblock title%}
{% block content %}
{% if not is_purchased %}
{% include "../blocks/promo.html" %}
{% include "../blocks/about.html" %}
{% include "../blocks/advantages.html" %}
{% include "../blocks/online.html" %}
{% include "../blocks/schedule.html" %}
{% include "templates/blocks/game.html" %}
{% include "templates/blocks/partners.html" %}
{% else %}
{% include "../blocks/schedule_purchased.html" %}
{% endif %}
{% endblock %}

@ -0,0 +1,15 @@
{% extends "templates/lilcity/index.html" %} {% load static %}
{% block title %}Онлайн-школа LilCity{% endblock title%}
{% block content %}
{% if not is_purchased %}
{% include "../summer/promo.html" %}
{% include "../summer/about.html" %}
{% include "../summer/advantages.html" %}
{% include "../summer/online.html" %}
{% include "../blocks/schedule.html" %}
{% include "templates/blocks/game.html" %}
{% include "templates/blocks/partners.html" %}
{% else %}
{% include "../summer/schedule_purchased.html" %}
{% endif %}
{% endblock %}

@ -0,0 +1,78 @@
{% load static %} {% load thumbnail %}
<div class="timing__item{% if school_schedule.weekday > 5 %} timing__item_bg{% endif %} js-timing-item js-timing-toggle{% if not school_schedule.weekday in school_schedules_purchased %} disable{% endif %}">
<div class="timing__cell">
<div class="timing__info">
<div class="timing__day{% if school_schedule.is_online %} active{% endif %}">
{{ school_schedule }}
</div>
{% if live_lesson %}
<div class="timing__date">{{ live_lesson.date }}</div>
{% endif %}
</div>
<div class="timing__buy">
<div class="timing__time">{{ school_schedule.start_at }} (МСК)</div>
{% if school_schedule.weekday in school_schedules_purchased %}
{% if live_lesson and school_schedule.is_online or live_lesson and is_previous and live_lesson in live_lessons %}
{% include './open_lesson.html' %}
{% endif %}
{% else %}
{% include './day_pay_btn.html' %}
{% endif %}
</div>
{% comment %}
<!-- это нужно чтобы в попапе продления школы всегда знать какие дни выбраны(куплены) -->
{% endcomment %}
{% if school_schedule.weekday in school_schedules_purchased %}
<span style="display: none;" data-purchased="{{ school_schedule.weekday }}"></span>
{% endif %}
</div>
<div class="timing__cell">
<div class="timing__preview">
{% thumbnail live_lesson.cover.image "70x70" crop="center" as im %}
<img class="timing__pic" src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" />
{% empty %}
<img class="timing__pic" src="{% static 'img/no_cover.png' %}" width="70px" height="70px" />
{% endthumbnail %}
</div>
</div>
<div class="timing__cell">
<div class="timing__title">{{ school_schedule.title }}{% if live_lesson %},
<span class="bold">{{ live_lesson.title }}</span>
{% endif %}
</div>
<div class="timing__content">
{% if live_lesson %}
{{ live_lesson.short_description }}
{% else %}
{{ school_schedule.description }}
{% endif %}
</div>
<div class="timing__more">
<div class="timing__head">Материалы</div>
<div class="timing__row">
<div class="timing__text">
{{ school_schedule.materials }}
</div>
</div>
{% if school_schedule.schoolschedule_images.exists %}
<div class="timing__head">Результаты прошлых уроков</div>
<div class="timing__works gallery">
{% for image in school_schedule.schoolschedule_images.all %}
{% thumbnail image.img.image "48x48" crop="center" as im %}
<a class="timing__work" href="{{ image.img.image.url }}">
<img class="timing__pic" src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}"/>
</a>
{% endthumbnail %}
{% endfor %}
</div>
{% endif %}
</div>
</div>
<div class="timing__cell">
<button class="timing__toggle">
<svg class="icon icon-arrow-down">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-arrow-down"></use>
</svg>
</button>
</div>
</div>

@ -0,0 +1,26 @@
{% load static %}
<div class="section" id="about">
<div class="section__center center">
<div class="title title_center">О школе</div>
<div class="about">
<div class="about__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}">
</div>
<div class="about__wrap">
<div class="about__content">
<p>С раннего возраста мы стремимся развить в детях креативность, умение думать и&nbsp;анализировать, работать в смешанных
техниках и всевозможными материалами. Каждый урок интересный и уникальный.</p>
<p>Для раскрытия творческого потенциала создаем благоприятные условия которые вдохновляют к развитию. Наша школа создает
необходимую среду, в которой маленькое семечко способностей и желания рисовать вырастет в могучее дерево безграничного
потенциала.
</p>
<p>Наши ученики становятся осознанными, уверенными и творческими личностями.</p>
<p>Они способны решать сложные задачи благодаря воображению.</p>
</div>
<div class="about__ceo">- Sasha Kru, CEO и основатель
<a href='#'>Lil.City</a>
</div>
</div>
</div>
</div>
</div>

@ -0,0 +1,44 @@
{% load static %}
<div class="section section_benefits" id="advantages">
<div class="section__center center">
<div class="title title_center">Преимущества</div>
<div class="benefits benefits_colors">
<div class="benefits__item">
<div class="benefits__preview">
<svg class="icon icon-thumb">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-thumb"></use>
</svg>
</div>
<div class="benefits__title">Доступность</div>
<div class="benefits__content">Учитесь, не выходя из дома. С жизнью в городах, времени для образования остается не много.</div>
</div>
<div class="benefits__item">
<div class="benefits__preview">
<svg class="icon icon-wallet">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-wallet"></use>
</svg>
</div>
<div class="benefits__title">Стоимость</div>
<div class="benefits__content">Онлайн-образование дешевле и эффективнее. Вы сами выбираете сколько платить.</div>
</div>
<div class="benefits__item">
<div class="benefits__preview">
<svg class="icon icon-location">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-location"></use>
</svg>
</div>
<div class="benefits__title">Свобода перемещений</div>
<div class="benefits__content">С онлайн-образованием не нужно тратить свое время на что-то кроме образования.</div>
</div>
<div class="benefits__item">
<div class="benefits__preview">
<svg class="icon icon-searching">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-searching"></use>
</svg>
</div>
<div class="benefits__title">Выбор преподавателя</div>
<div class="benefits__content">Личные аккаунты Инстаграм также доступны, чтобы узнать о творчестве, мыслях и интересах.</div>
</div>
</div>
</div>
</div>

@ -0,0 +1,7 @@
<a
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
{% endif %}
class="timing__btn btn"
href="{% url 'school-checkout' %}?weekdays={{ school_schedule.weekday }}&add_days=true"
>купить</a>

@ -0,0 +1,21 @@
{% load static %} {% if course_items %}
<div class="section section_courses">
<div class="section__center center">
<div class="text">
<p>Хотите ещё? :)
<br>Для Вас у нас есть дополнительные видео-курсы на самые душещипательные темы.</p>
</div>
<div class="head">
<div class="head__title title title_center">Видео-курсы</div>
</div>
<div class="courses">
<div class="courses__list">
{% include "course/course_items.html" %}
</div>
<div class="courses__load load">
<a class="load__btn btn" href="{% url 'courses' %}">Узнать подробнее</a>
</div>
</div>
</div>
</div>
{% endif %}

@ -0,0 +1,12 @@
{% load static %}
<a class="online" target="_blank" href="https://www.youtube.com/watch?v=PhZ8qQbIej0" style="background-image: url({% static 'img/video-1.jpg' %});">
<div class="online__center center">
<div class="online__type">ПРЯМОЙ ЭФИР</div>
<div class="online__title">В 17.00 (по Мск) </div>
<div class="online__text text">Понедельник, среда, пятница.</div>
<div class="online__action">
<svg class="icon icon-play">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-play"></use>
</svg>СМОТРЕТЬ ПРИМЕР ЭФИРА</div>
</div>
</a>

@ -0,0 +1,4 @@
<a
class="timing__btn btn btn_light"
href="{% url 'school:lesson-detail' live_lesson.id %}"
>смотреть урок</a>

@ -0,0 +1,9 @@
<a
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
{% else %}
data-popup=".js-popup-buy"
{% endif %}
class="casing__btn btn{% if pink %} btn_pink{% endif %}"
href="#"
>продлить</a>

@ -0,0 +1,67 @@
{% load static %}
<div class="main main_default" style="background-image: url({% static 'img/bg-2.jpg' %});">
<div class="main__center center">
<div class="main__title">
<span class="main__bold">Lil School</span> — первая образовательная онлайн-платформа креативного мышления для детей
</div>
<div class="main__subtitle">
Присоединяйтесь в Рисовальный лагерь
</div>
<div class="main__actions">
<a
{% if not is_purchased_future %}
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
{% else %}
data-popup=".js-popup-buy"
{% endif %}
{% endif %}
class="main__btn btn"
href="#"
>
{% if not is_purchased and not is_purchased_future %}Получить доступ{% endif %}
{% if is_purchased_future and not is_purchased %}ваша подписка начинается {{school_purchased_future.date_start}}{% endif %}
{% if is_purchased %}ваша подписка истекает {{ subscription_ends_humanize }}<br/>перейти к оплате{% endif %}
</a>
</div>
<div class="main__school school school_main">
<div class="school__col">
<div class="school__preview">
<svg class="icon icon-online">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-online"></use>
</svg>
</div>
<div class="school__title">Прямой эфир</div>
<div class="school__text">Понедельник, среда, пятница</div>
</div>
<div class="school__col">
<div class="school__preview">
<svg class="icon icon-everyday">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-everyday"></use>
</svg>
</div>
<div class="school__title">В&nbsp;17:00</div>
<div class="school__text">По московскому времени</div>
</div>
<div class="school__col">
<div class="school__preview">
<svg class="icon icon-subjects">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-subjects"></use>
</svg>
</div>
<div class="school__title">12 уроков</div>
<div class="school__text">В разных техниках</div>
</div>
<div class="school__col">
<div class="school__preview">
<svg class="icon icon-view">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-view"></use>
</svg>
</div>
<div class="school__title">Запись эфира</div>
<div class="school__text">Хранится 7 дней</div>
</div>
</div>
</div>
</div>

@ -0,0 +1,69 @@
{% load static %} {% load thumbnail %}
<div class="section" id="schedule">
<div class="section__center center">
{% include 'templates/blocks/messages.html' %}
<div class="casing">
<div class="casing__col">
<div class="casing__subscribe">
{% if is_purchased %}
<div class="casing__msg">Подписка истекает
<span class="bold">{{ subscription_ends }}</span>
</div>
{% include './prolong_btn.html' %}
{% else %}
<div class="casing__msg">Подписка
<span class="bold">истекла</span>
</div>
{% include './prolong_btn.html' with pink=True %}
{% endif %}
</div>
</div>
<div class="casing__col">
{% if not profile %}
<div class="casing__head">
{% if is_previous %}
<div class="casing__title title">Запись уроков</div>
{% else %}
<div class="casing__title title">Новые уроки</div>
{% endif %}
<label class="casing__switcher switcher">
<span class="switcher__wrap">
<a href="{% url 'school:summer-school' %}?is_previous=true" class="switcher__item{% if is_previous %} active{% endif %}">запись уроков</a>
<a href="{% url 'school:summer-school' %}" class="switcher__item{% if not is_previous %} active{% endif %}">новые уроки</a>
</span>
</label>
</div>
{% endif %}
<div class="casing__timing timing js-timing">
<div class="timing__week">
{% if is_previous and not live_lessons_exists %}
Записей уроков пока нет
{% else %}
{% for school_schedule in school_schedules %}
{% if is_previous %}
{% if school_schedule.previous_live_lesson in live_lessons %}
{% include './_schedule_purchased_item.html' with school_schedule=school_schedule live_lesson=school_schedule.previous_live_lesson %}
{% endif %}
{% else %}
{% include './_schedule_purchased_item.html' with school_schedule=school_schedule live_lesson=school_schedule.current_live_lesson %}
{% endif %}
{% endfor %}
{% endif %}
</div>
<div class="timing__week">
{% comment %} previous week schedules {% endcomment %}
</div>
<div class="timing__foot">
<a target="_blank" class="timing__print" href="{% url 'school:school_schedules-print' %}">Распечатать расписание
<span class="bold">чтобы не забыть</span>
<svg class="icon icon-print">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-print"></use>
</svg>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
{% include './last_courses.html' %}

@ -3,11 +3,12 @@ from django.urls import path, include
from .views import (
LiveLessonsView, LiveLessonEditView,
LiveLessonsDetailView, SchoolView,
SchoolSchedulesPrintView,
SchoolSchedulesPrintView, SummerSchoolView,
)
urlpatterns = [
path('', SchoolView.as_view(), name='school'),
path('summer', SummerSchoolView.as_view(), name='summer-school'),
path('schedules/print', SchoolSchedulesPrintView.as_view(), name='school_schedules-print'),
path('lessons/', LiveLessonsView.as_view(), name='lessons'),
path('lessons/create', LiveLessonEditView.as_view(), name='lessons-create'),

@ -161,15 +161,92 @@ class SchoolView(TemplateView):
'course_items': Course.objects.filter(status=Course.PUBLISHED)[:6],
'is_purchased': school_payment_exists,
'min_school_price': SchoolSchedule.objects.aggregate(Min('month_price'))['month_price__min'],
'school_schedules': SchoolSchedule.objects.annotate(
calk=F('weekday') - now().isoweekday(),
weight=(7 + F('calk') % 7) % 7,
).order_by('weight'),
'school_schedules': SchoolSchedule.objects.all(),
'school_schedules_purchased': school_schedules_purchased,
'subscription_ends': school_payment.filter(add_days=False).first().date_end if school_payment_exists else None,
})
return context
class SummerSchoolView(TemplateView):
template_name = 'school/summer_school.html'
def get_context_data(self):
context = super().get_context_data()
is_previous = 'is_previous' in self.request.GET
date_now = now().date()
now_time = now()
try:
school_schedule = SchoolSchedule.objects.get(weekday=now_time.isoweekday())
except SchoolSchedule.DoesNotExist:
online = False
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=2)).time() >= now_time.time() and
school_schedule.current_live_lesson()
)
if self.request.user.is_authenticated:
school_payment = SchoolPayment.objects.filter(
user=self.request.user,
status__in=[
Pingback.PINGBACK_TYPE_REGULAR,
Pingback.PINGBACK_TYPE_GOODWILL,
Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED,
],
date_start__lte=date_now,
date_end__gte=date_now
)
school_payment_exists = school_payment.exists()
school_payment_future = SchoolPayment.objects.filter(
user=self.request.user,
status__in=[
Pingback.PINGBACK_TYPE_REGULAR,
Pingback.PINGBACK_TYPE_GOODWILL,
Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED,
],
date_start__gte=date_now,
date_end__gte=date_now
)
school_payment_exists_future = school_payment_future.exists()
school_purchased_future = school_payment_future.last()
school_schedules_purchased = school_payment.annotate(
joined_weekdays=Func(F('weekdays'), function='unnest',)
).values_list('joined_weekdays', flat=True).distinct()
else:
school_payment_exists = False
school_payment_exists_future = False
school_purchased_future = False
school_schedules_purchased = []
if school_payment_exists and is_previous:
live_lessons = LiveLesson.objects.filter(
date__gte=school_payment.last().date_start,
date__range=[(now_time - timedelta(days=8)).date(), (now_time - timedelta(days=1)).date()],
deactivated_at__isnull=True,
)
live_lessons_exists = live_lessons.exists()
else:
live_lessons = None
live_lessons_exists = False
context.update({
'online': online,
'live_lessons': live_lessons,
'live_lessons_exists': live_lessons_exists,
'is_previous': is_previous,
'course_items': Course.objects.filter(status=Course.PUBLISHED)[:6],
'is_purchased': school_payment_exists,
'is_purchased_future': school_payment_exists_future,
'min_school_price': SchoolSchedule.objects.aggregate(Min('month_price'))['month_price__min'],
'school_schedules': SchoolSchedule.objects.all(),
'school_schedules_purchased': school_schedules_purchased,
'school_purchased_future': school_purchased_future,
'subscription_ends': school_payment.filter(add_days=False).first().date_end if school_payment_exists else None,
})
return context
class SchoolSchedulesPrintView(TemplateView):
template_name = 'school/schedules_print.html'

@ -44,9 +44,9 @@
{% endfor %}
</div>
<div class="form__field field{% if form.facebook.errors %} error{% endif %}">
<div class="field__label">FACEBOOK</div>
<div class="field__label">Ссылка на портфолио</div>
<div class="field__wrap">
<input name='facebook' class="field__input" type="text" placeholder="https://facebook.com/lilcitycompany" value="{% if form.facebook.value %}{{ form.facebook.value }}{% endif %}">
<input name='facebook' class="field__input" type="text" placeholder="https://yoursite.com" value="{% if form.facebook.value %}{{ form.facebook.value }}{% endif %}">
</div>
{% for error in form.facebook.errors %}
<div class="field__error">{{ error }}</div>

@ -2,7 +2,9 @@
<div class="section">
<div class="section__center center">
<div class="profile">
{% if not guest %}
<a class="profile__btn profile__btn_edit btn" href="{% url 'user-edit-profile' user.id %}">Редактировать</a>
{% endif %}
<div class="profile__ava ava">
{% thumbnail user.photo "120x120" crop="center" as im %}
<img class="ava__pic" src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" />
@ -59,6 +61,8 @@
</div>
</div>
</div>
{% if not guest %}
<div class="section section_pink-light section_tabs">
<div class="section__center center">
<div class="tabs js-tabs">
@ -75,25 +79,33 @@
</div>
<div class="tabs__container">
<div class="tabs__item js-tabs-item">
{% if is_purchased %}
{% include "blocks/schedule_purchased.html" %}
{% if is_purchased_future %}
<div class="center center_xs">
<div class="done">
<div class="done__title title">Ваша подписка начинается {{school_purchased_future.date_start}}</div>
</div>
</div>
{% else %}
<div class="center center_xs">
<div class="done">
<div class="done__title title">Вы не подписаны на школу!</div>
<div class="done__foot">
<a
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
{% else %}
data-popup=".js-popup-buy"
{% endif %}
href="#"
class="done__btn btn btn_md btn_stroke"
>Купить подписку</a>
{% if is_purchased %}
{% include "blocks/schedule_purchased.html" %}
{% else %}
<div class="center center_xs">
<div class="done">
<div class="done__title title">Вы не подписаны на школу!</div>
<div class="done__foot">
<a
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
{% else %}
data-popup=".js-popup-buy"
{% endif %}
href="#"
class="done__btn btn btn_md btn_stroke"
>Купить подписку</a>
</div>
</div>
</div>
</div>
{% endif %}
{% endif %}
</div>
<div class="tabs__item js-tabs-item">
@ -138,4 +150,5 @@
</div>
</div>
</div>
{% endif %}
{% endblock content %}

@ -43,14 +43,22 @@ def resend_email_verify(request):
return redirect('user-edit-profile', request.user.id)
@method_decorator(login_required, name='dispatch')
class UserView(DetailView):
model = User
template_name = 'user/profile.html'
def get_context_data(self, object):
context = super().get_context_data()
context['simple_user'] = self.request.user.role == User.USER_ROLE
if not self.request.user.is_anonymous:
context['simple_user'] = self.request.user.role == User.USER_ROLE
context['guest'] = self.request.user.id != self.object.id and self.request.user.role <= User.USER_ROLE
else:
context['simple_user'] = True
context['guest'] = True
if context['guest'] and self.object.role <= User.USER_ROLE:
raise Http404()
context['published'] = Course.objects.filter(
author=self.object,
)
@ -85,12 +93,18 @@ class UserView(DetailView):
context['subscription_ends'] = school_payment.last().date_end
context['school_schedules'] = SchoolSchedule.objects.filter(
weekday__in=school_schedules_purchased if school_payment.exists() else [],
).annotate(
calk=F('weekday') - now().isoweekday(),
weight=(7 + F('calk') % 7) % 7,
).order_by('weight')
).all()
context['all_school_schedules'] = SchoolSchedule.objects.all()
school_payment_future = SchoolPayment.objects.filter(
user=self.request.user,
date_start__gte=now(),
date_end__gte=now()
)
context['is_purchased_future'] = school_payment_future.exists()
context['school_purchased_future'] = school_payment_future.last()
return context
@ -103,6 +117,10 @@ class SubscribeView(View):
return redirect(refferer)
email = request.POST.get('email', None)
if email:
if EmailSubscription.objects.filter(email=email).exists():
messages.error(request, 'Вы уже подписаны!')
return redirect(refferer)
email_subscription = EmailSubscription.objects.create(
email=email,
)
@ -110,7 +128,7 @@ class SubscribeView(View):
SubscriptionCategory.objects.filter(auto_add=True)
)
messages.info(request, 'Вы подписаны на новости.')
return redirect(refferer)
return redirect('subscribe-success')
else:
messages.error(request, 'Введите адрес электронной почты.')
return redirect(refferer)

@ -13,7 +13,7 @@
</svg>
</div>
<div class="school__title">Прямой эфир</div>
<div class="school__text">С понедельника по&nbsp;пятницу кроме выходных</div>
<div class="school__text">Понедельник, среда, пятница</div>
</div>
<div class="school__col">
<div class="school__preview">
@ -21,7 +21,7 @@
<use xlink:href="{% static 'img/sprite.svg' %}#icon-everyday"></use>
</svg>
</div>
<div class="school__title">Ежедневно в 17:00</div>
<div class="school__title">В 17:00</div>
<div class="school__text">По московскому времени</div>
</div>
<div class="school__col">
@ -30,8 +30,8 @@
<use xlink:href="{% static 'img/sprite.svg' %}#icon-subjects"></use>
</svg>
</div>
<div class="school__title">7 предметов</div>
<div class="school__text">на каждый день</div>
<div class="school__title">12 уроков</div>
<div class="school__text">В разных техниках</div>
</div>
<div class="school__col">
<div class="school__preview">
@ -39,32 +39,26 @@
<use xlink:href="{% static 'img/sprite.svg' %}#icon-view"></use>
</svg>
</div>
<div class="school__title">Посмотреть</div>
<div class="school__text">пропущенные дни</div>
<div class="school__title">Запись эфира</div>
<div class="school__text">Хранится 7 дней</div>
</div>
</div>
<div class="letsgo">
{% if is_purchased %}
<a
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
{% else %}
data-popup=".js-popup-buy"
{% endif %}
class="main__btn btn"
href="#"
>ваша подписка истекает {{ subscription_ends_humanize }}<br/>перейти к оплате</a>
{% else %}
<a
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
{% else %}
data-popup=".js-popup-buy"
{% endif %}
class="main__btn btn"
href="#"
>купить доступ от {{ min_school_price }} руб./месяц</a>
{% endif %}
{% if not is_purchased_future %}
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
{% else %}
data-popup=".js-popup-buy"
{% endif %}
{% endif %}
class="main__btn btn"
href="#"
>
{% if not is_purchased and not is_purchased_future %}купить доступ от {{ min_school_price }} руб./месяц{% endif %}
{% if is_purchased_future and not is_purchased %}ваша подписка начинается {{school_purchased_future.date_start}}{% endif %}
{% if is_purchased %}ваша подписка истекает {{ subscription_ends_humanize }}<br/>перейти к оплате{% endif %}
</a>
</div>
</div>
</div>

@ -10,7 +10,7 @@
</svg>
</div>
<div class="benefits__title">Доступность</div>
<div class="benefits__content">Учитесь, не выходя из&nbsp;дома</div>
<div class="benefits__content">Учитесь, не выходя из дома. С жизнью в городах, времени для образования остается не много.</div>
</div>
<div class="benefits__item">
<div class="benefits__preview">
@ -19,7 +19,7 @@
</svg>
</div>
<div class="benefits__title">Стоимость</div>
<div class="benefits__content">Онлайн-образование дешевле</div>
<div class="benefits__content">Онлайн-образование дешевле и эффективнее. Вы сами выбираете сколько платить.</div>
</div>
<div class="benefits__item">
<div class="benefits__preview">
@ -28,7 +28,7 @@
</svg>
</div>
<div class="benefits__title">Свобода перемещений</div>
<div class="benefits__content">Доступность до проф. уроков без пробок, сборов и&nbsp;лишней потери времени</div>
<div class="benefits__content">С онлайн-образованием не нужно тратить свое время на что-то кроме образования.</div>
</div>
<div class="benefits__item">
<div class="benefits__preview">
@ -36,8 +36,8 @@
<use xlink:href="{% static 'img/sprite.svg' %}#icon-searching"></use>
</svg>
</div>
<div class="benefits__title">Выбор преподавателя </div>
<div class="benefits__content">Описание элемента</div>
<div class="benefits__title">Выбор преподавателя</div>
<div class="benefits__content">Личные аккаунты Инстаграм также доступны, чтобы узнать о творчестве, мыслях и интересах.</div>
</div>
</div>
</div>

@ -1,37 +1,37 @@
{% load static %}
<div class="section section_arts">
<div class="section__center">
<div class="arts">
<div class="arts__col">
<div class="arts__item" style="background-image: url({% static 'img/art01.png' %});">
<div class="arts__title">Персонаж</div>
</div>
</div>
<div class="arts__col">
<div class="arts__item" style="background-image: url({% static 'img/art02.png' %});">
<div class="arts__title">Развитие креативного мышления</div>
</div>
</div>
<div class="arts__col">
<div class="arts__item" style="background-image: url({% static 'img/art03.png' %});">
<div class="arts__title">Акварельная живопись</div>
</div>
</div>
<div class="arts__col">
<div class="arts__item" style="background-image: url({% static 'img/art04.png' %});">
<div class="arts__title">Пластилиновая живопись</div>
</div>
</div>
<div class="arts__col">
<div class="arts__item" style="background-image: url({% static 'img/art05.png' %});">
<div class="arts__title">История искусств</div>
</div>
</div>
<div class="arts__col">
<div class="arts__item" style="background-image: url({% static 'img/art06.png' %});">
<div class="arts__title">Коллаж</div>
</div>
</div>
</div>
</div>
</div>
<!--<div class="section section_arts">-->
<!--<div class="section__center">-->
<!--<div class="arts">-->
<!--<div class="arts__col">-->
<!--<div class="arts__item" style="background-image: url({% static 'img/art01.png' %});">-->
<!--<div class="arts__title">Персонаж</div>-->
<!--</div>-->
<!--</div>-->
<!--<div class="arts__col">-->
<!--<div class="arts__item" style="background-image: url({% static 'img/art02.png' %});">-->
<!--<div class="arts__title">Развитие креативного мышления</div>-->
<!--</div>-->
<!--</div>-->
<!--<div class="arts__col">-->
<!--<div class="arts__item" style="background-image: url({% static 'img/art03.png' %});">-->
<!--<div class="arts__title">Акварельная живопись</div>-->
<!--</div>-->
<!--</div>-->
<!--<div class="arts__col">-->
<!--<div class="arts__item" style="background-image: url({% static 'img/art04.png' %});">-->
<!--<div class="arts__title">Пластилиновая живопись</div>-->
<!--</div>-->
<!--</div>-->
<!--<div class="arts__col">-->
<!--<div class="arts__item" style="background-image: url({% static 'img/art05.png' %});">-->
<!--<div class="arts__title">История искусств</div>-->
<!--</div>-->
<!--</div>-->
<!--<div class="arts__col">-->
<!--<div class="arts__item" style="background-image: url({% static 'img/art06.png' %});">-->
<!--<div class="arts__title">Коллаж</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->

@ -4,7 +4,7 @@
<div class="footer__row footer__row_first">
<div class="footer__col footer__col_md">
<a class="footer__logo logo" href="/"></a>
<div class="footer__content">Первая онлайн-школа креативного мышления Lil City School</div>
<div class="footer__content">Первая онлайн-школа креативного мышления Lil School</div>
</div>
<div class="footer__col">
<div class="footer__title">КОМПАНИЯ</div>
@ -19,6 +19,7 @@
<div class="footer__col">
<div class="footer__title">Программы</div>
<nav class="footer__nav">
<a class="footer__link" href="{% url 'school:summer-school' %}">Лагерь</a>
<a class="footer__link" href="{% url 'school:school' %}">Онлайн-школа</a>
<a class="footer__link" href="{% url 'courses' %}">Онлайн-курсы</a>
<a class="footer__link" href="{% url 'author_request' %}">Стать автором</a>
@ -42,12 +43,12 @@
ПОДПИСАТЬСЯ
</a>
<div class="subscribe__content">
Подпишитесь на наш канал в Telegram, чтобы получать от нас важные новости о школе, новых курсах и бонусах от Lil City.
Подпишитесь на наш канал в Telegram чтобы получать от нас важные новости о школе, новых курсах и бонусах от Lil City.
</div>
</div>
</div>
<div class="footer__row footer__row_second">
<div class="footer__col footer__col_md">
<div class="footer__col footer__col_md" style="flex: 0 0 23%;">
<div class="footer__socials socials">
<a target="_blank" class="socials__item" href="{{ config.SERVICE_INSTAGRAM_URL }}">
<svg class="icon icon-instagram">
@ -71,7 +72,7 @@
</a>
</div>
</div>
<div class="footer__col footer__col_lg">
<div class="footer__col footer__col_lg" style="flex: 0 0 77%;">
<div class="footer__group">
<div class="footer__copyright">{% now 'Y' %} © Lil City, UAB.</div>
<div class="footer__links">

@ -5,7 +5,7 @@
<div class="title title_center">Галерея</div>
</a>
<div class="text">
<p>Тысячи шедевров уже созданы благодаря Lil City School. Более 10000 работ можно
<p>Тысячи шедевров уже созданы благодаря Lil School. Более 10000 работ можно
<a target="_blank" href='{{ config.SERVICE_INSTAGRAM_URL }}'>увидеть</a> в Инстаграм</p>
<img class="text__curve text__curve_three" src="{% static 'img/curve-3.svg' %}">
</div>

@ -25,10 +25,17 @@
</form>
</div>
<nav class="header__nav">
<div class="header__group">
<a class="header__section {% active_link 'school:summer-school' %}" href="{% url 'school:summer-school' %}">
ЛАГЕРЬ {% if online or livelesson.is_online %}
<div class="header__dot"></div>
{% endif %}
</a>
</div>
<div class="header__group">
<a class="header__section {% active_link 'school:school' %}" href="{% url 'school:school' %}">
ОНЛАЙН-ШКОЛА {% if online or livelesson.is_online %}
<div class="header__dot"></div>
<!--<div class="header__dot"></div>-->
{% endif %}
</a>
</div>

@ -2,8 +2,8 @@
<a class="online" target="_blank" href="https://www.youtube.com/watch?v=PhZ8qQbIej0" style="background-image: url({% static 'img/video-1.jpg' %});">
<div class="online__center center">
<div class="online__type">ПРЯМОЙ ЭФИР</div>
<div class="online__title">Каждый день в 17.00 (по Мск) </div>
<div class="online__text text">Кроме выходных. Запись эфира доступна в&nbsp;течение 24-х&nbsp;часов.</div>
<div class="online__title">В 17.00 (по Мск) </div>
<div class="online__text text">Понедельник, среда, пятница.</div>
<div class="online__action">
<svg class="icon icon-play">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-play"></use>

@ -0,0 +1,36 @@
{% load static %}
<div class="popup js-popup-subscribe">
<div class="popup__wrap js-popup-wrap">
<button class="popup__close js-popup-close">
<svg class="icon icon-close">
<use xlink:href={% static "img/sprite.svg" %}#icon-close></use>
</svg>
</button>
<div class="popup__body">
<div class="auth js-auth" style="padding:20px 20px 25px;">
<div class="auth__login js-auth-login">
<div class="auth__body">
<form id="learner-auth-form" method="post" action="{% url 'subscribe' %}">
{% csrf_token %}
<div class="auth__tab js-auth-tab" style="display: block;">
<div class="auth__enter js-auth-enter">
<div id="learner-auth-field__username" class="auth__field field learner-auth-form__field">
<div class="field__label">ПОЧТА</div>
<div class="field__wrap"><input id="learner-auth-form__email" class="field__input" type="email"
name="email"
placeholder="name@website.com" tabindex="1"></div>
<div id="learner-auth-field-error__username"
class="field__error learner-auth-form__field-error"></div>
</div>
<div class="auth__foot">
<button id="learner-auth__button" class="auth__btn btn btn_light" tabindex="3">Подписаться</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>

@ -9,30 +9,29 @@
>
<div class="main__center center">
<div class="main__title">
<span class="main__bold">Lil City School</span> — первая образовательная онлайн-платформа креативного мышления для детей</div>
<span class="main__bold">Lil School</span> — первая образовательная онлайн-платформа креативного мышления для детей
</div>
<div class="main__subtitle">
Присоединяйтесь в Рисовальный лагерь
</div>
<div class="main__actions">
{% if is_purchased %}
<a
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
{% else %}
data-popup=".js-popup-buy"
{% endif %}
class="main__btn btn"
href="#"
>ваша подписка истекает {{ subscription_ends_humanize }}<br/>перейти к оплате</a>
{% else %}
<a
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
{% else %}
data-popup=".js-popup-buy"
{% if not is_purchased_future %}
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
{% else %}
data-popup=".js-popup-buy"
{% endif %}
{% endif %}
class="main__btn btn"
href="#"
>купить доступ от {{ min_school_price }} руб./месяц</a>
{% endif %}
<a class="main__btn btn btn_white" href="{% url 'school:school' %}">подробнее</a>
class="main__btn btn"
href="#"
>
{% if not is_purchased and not is_purchased_future %}Получить доступ{% endif %}
{% if is_purchased_future and not is_purchased %}ваша подписка начинается {{school_purchased_future.date_start}}{% endif %}
{% if is_purchased %}ваша подписка истекает {{ subscription_ends_humanize }}<br/>перейти к оплате{% endif %}
</a>
<a class="main__btn btn btn_white" href="{% url 'school:summer-school' %}">О лагере</a>
</div>
</div>
</div>

@ -4,7 +4,7 @@
<div class="section__center center center_md">
<div class="title title_center">Преподаватели</div>
<div class="text">
<p>Преподаватели Lil City School имеют большой опыт, поэтому с первых минут детям будет интересно с нами.</p>
<p>Преподаватели Lil School имеют большой опыт, поэтому с первых минут детям будет интересно с нами.</p>
<img class="text__curve text__curve_three" src="{% static 'img/curve-3.svg' %}">
</div>
<div class="teachers">
@ -16,10 +16,11 @@
<img class="ava__pic" src="{% static 'img/user_default.jpg' %}"> {% endif %}
</div>
<div class="teachers__wrap">
<div class="teachers__title">{{ teacher.get_full_name }}{% if teacher.instagram_hashtag %},
<a href='https://www.instagram.com/explore/tags/{{ teacher.instagram_hashtag }}/' target="_blank">
#{{ teacher.instagram_hashtag }}
</a>
<div class="teachers__title">
<a href="{% url 'user' teacher.id %}">{{ teacher.get_full_name }}</a>{% if teacher.instagram_hashtag %},
<a href='https://www.instagram.com/explore/tags/{{ teacher.instagram_hashtag }}/' target="_blank">
{{ teacher.instagram_hashtag }}
</a>
{% endif %}
</div>
<div class="teachers__social">
@ -64,6 +65,6 @@
</div>
{% endfor %}
</div>
<div class="text text_mb0">Если хотите к нам в команду, то отправьте нам заявку</div>
<div class="text text_mb0">Если хотите к нам в команду, то <a href="{% url 'author_request' %}">отправьте</a> нам заявку</div>
</div>
</div>

@ -65,6 +65,7 @@
{% include "templates/blocks/popup_auth.html" %}
{% include "templates/blocks/popup_buy.html" %}
{% include "templates/blocks/popup_course_lock.html" %}
{% include "templates/blocks/popup_subscribe.html" %}
</div>
<script type="text/javascript" src={% static "app.js" %}></script>
<script>

@ -0,0 +1,12 @@
{% extends "templates/lilcity/index.html" %} {% load static %} {% block content %}
<div class="section">
<div class="section__center center center_xs">
<div class="done">
<div class="done__title title">Вы успешно оставили заявку на школу!</div>
<div class="done__foot">
<a class="done__btn btn btn_md btn_stroke" href="/">ПЕРЕЙТИ К ГЛАВНОЙ</a>
</div>
</div>
</div>
</div>
{% endblock content %}

@ -27,7 +27,7 @@
<p style="font-size: 12px; line-height: 15px;">You acknowledge and agree that Lil City, UAB shall not be responsible for any Third-Party Services, including their accuracy, completeness, timeliness, validity, copyright compliance, legality, decency, quality or any other aspect thereof. Lil City, UAB does not assume and shall not have any liability or responsibility to you or any other person or entity for any Third-Party Services.</p>
<p style="font-size: 12px; line-height: 15px;">Third-Party Services and links thereto are provided solely as a convenience to you and you access and use them entirely at your own risk and subject to such third parties' terms and conditions.</p>
<p style="font-size: 12px; line-height: 15px;">Privacy Policy</p>
<p style="font-size: 12px; line-height: 15px;">Lil City, UAB has the right to use any materials/images created by the user using the Company's products (Lil World, Lil City School and others) to promote the services/products of the Company without informing the author of the artwork.</p>
<p style="font-size: 12px; line-height: 15px;">Lil City, UAB has the right to use any materials/images created by the user using the Company's products (Lil World, Lil School and others) to promote the services/products of the Company without informing the author of the artwork.</p>
<p style="font-size: 12px; line-height: 15px;">Lil City, UAB collects, stores, maintains, and shares information about you in accordance with its Privacy Policy, which is available at http://privacy.lil.city. By accepting this Agreement, you acknowledge that you hereby agree and consent to the terms and conditions of our Privacy Policy.</p>
<p style="font-size: 13px; line-height: 17px; padding-top: 24px; font-weight: bold;">Term and Termination</p>
<p style="font-size: 12px; line-height: 15px;">This Agreement shall remain in effect until terminated by you or Lil City, UAB.</p>
@ -71,7 +71,7 @@
<p style="font-size: 12px; line-height: 15px;">Обновления к применению</p>
<p style="font-size: 12px; line-height: 15px;">Lil City, UAB может время от времени вносить улучшения или усовершенствования в возможности / функциональность Продуктов, которые может включать в себя патчи, исправления ошибок, обновления, обновления и другие модификации ( "Обновление").</p>
<p style="font-size: 12px; line-height: 15px;">Обновления могут изменять или удалять определенные функции и / или функциональные возможности применения. Вы согласны с тем, что Lil City, UAB не имеет никаких обязательств (I), предоставлять какие-либо обновления, или (II) продолжать предоставлять или включить какие-либо особые характеристики и / или функциональные возможности применения к вам.</p>
<p style="font-size: 12px; line-height: 15px;">Lil City, UAB имеет право использовать любые материалы/изображения созданные пользователем при помощи или благодаря продуктам Компании (Lil World, Lil City School и других) для рекламы услуг/продуктов Компании без предупреждения пользователя/автора произведения.</p>
<p style="font-size: 12px; line-height: 15px;">Lil City, UAB имеет право использовать любые материалы/изображения созданные пользователем при помощи или благодаря продуктам Компании (Lil World, Lil School и других) для рекламы услуг/продуктов Компании без предупреждения пользователя/автора произведения.</p>
<p style="font-size: 12px; line-height: 15px;">Вы также соглашаетесь с тем, что все обновления будут (я) считается, являются неотъемлемой частью Заявки, и (II) в соответствии с условиями настоящего Соглашения.</p>
<p style="font-size: 13px; line-height: 17px; padding-top: 24px; font-weight: bold;">Услуги сторонних организаций</p>
<p style="font-size: 12px; line-height: 15px;">Приложение может отображать, включать в себя или предоставлять контент сторонних производителей (в том числе данные, информацию, приложения и другие продукты услуг) или предоставлять ссылки на сторонние веб-сайты или услуги ( "Услуги сторонних организаций").</p>

@ -73,6 +73,7 @@ urlpatterns = [
path('user/<int:pk>/payments', PaymentHistoryView.as_view(), name='user-edit-payments'),
path('user/resend-email-verify', resend_email_verify, name='resend-email-verify'),
path('subscribe', SubscribeView.as_view(), name='subscribe'),
path('subscribe/success', TemplateView.as_view(template_name='templates/lilcity/subscribe_success.html'), name='subscribe-success'),
path('privacy', TemplateView.as_view(template_name='templates/lilcity/privacy_policy.html'), name='privacy'),
path('terms', TemplateView.as_view(template_name='templates/lilcity/terms.html'), name='terms'),
path('refund-policy', TemplateView.as_view(template_name='templates/lilcity/refund_policy.html'), name='refund_policy'),

@ -44,8 +44,20 @@ class IndexView(TemplateView):
school_payment_exists = school_payment.exists()
school_schedules_purchased = school_payment.values_list('weekdays', flat=True)
school_schedules_purchased = school_schedules_purchased[0] if school_schedules_purchased else []
school_payment_future = SchoolPayment.objects.filter(
user=self.request.user,
date_start__gte=date_now,
date_end__gte=date_now
)
school_payment_exists_future = school_payment_future.exists()
school_purchased_future = school_payment_future.last()
else:
school_payment_exists = False
school_payment_exists_future = False
school_purchased_future = False
school_schedules_purchased = []
context.update({
@ -58,6 +70,10 @@ class IndexView(TemplateView):
'teachers': User.objects.filter(role=User.TEACHER_ROLE, show_in_mainpage=True),
'subscription_ends': school_payment.filter(add_days=False).first().date_end if school_payment_exists else None,
'subscription_ends_humanize': school_payment.filter(add_days=False).first().date_end_humanize if school_payment_exists else None,
'school_purchased_future': school_purchased_future,
'is_purchased_future': school_payment_exists_future,
})
return context

@ -948,10 +948,12 @@
console.log('data', i, now.getDay(), weekday, now, moment(now).format("D MMM"));
options.push({
title: `${schedule[weekday]} (${this.weekdays[weekday]}, ${moment(now).format("D MMM")})`,
value: moment(now).format('YYYY-MM-DD')
});
if(schedule[weekday]) {
options.push({
title: `${schedule[weekday]} (${this.weekdays[weekday]}, ${moment(now).format("D MMM")})`,
value: moment(now).format('YYYY-MM-DD')
});
}
}
console.log('options',options);

@ -22,7 +22,7 @@
</a>
</td>
<td style="padding:30px 50px 30px 10px;vertical-align:middle;text-align:right">
<div style="display:inline-block;width:220px;font-size:18px;line-height:1.22">Первая онлайн-школа креативного мышления Lil City School</div>
<div style="display:inline-block;width:220px;font-size:18px;line-height:1.22">Первая онлайн-школа креативного мышления Lil School</div>
</td>
</tr>
</tbody>

@ -741,7 +741,7 @@ a.btn
&_default &__center
margin-bottom: 0
&_default &__title
margin-bottom: 55px
margin-bottom: 25px
+f
font-size: 40px
+t
@ -751,6 +751,16 @@ a.btn
+m
margin-bottom: 30px
font-size: 20px
&__subtitle
margin-bottom: 25px
+f
font-size: 20px
+t
margin-bottom: 40px
font-size: 20px
+m
margin-bottom: 30px
font-size: 15px
a[name]
.title
@ -946,7 +956,7 @@ a[name]
+t
padding: 80px 0 40px
&_video
padding: 0 0 70px
padding: 70px 0 70px
.ava
display: block

@ -3,7 +3,7 @@ footer.footer
.footer__row.footer__row_first
.footer__col.footer__col_md
a.footer__logo.logo(href='#')
.footer__content Первая онлайн-школа креативного мышления Lil City School
.footer__content Первая онлайн-школа креативного мышления Lil School
.footer__col
.footer__title КОМПАНИЯ
nav.footer__nav

Loading…
Cancel
Save