Скинул все версии кода в 1 - в самом низу версия от bramabrama

remotes/origin/pm_task_31703
Baryshnikov Nikolay 9 years ago
parent c10cf257ef
commit 58750c88b5
  1. 18
      README.md
  2. 140
      _utils/1.txt
  3. 232
      _utils/2.txt
  4. 10
      _utils/check_journals.py
  5. 30
      _utils/check_lesson_open_near_homework.py
  6. 72
      _utils/lessons_comments_hc.xml
  7. 2
      _utils/open_lesson.py
  8. 0
      access/__init__.py
  9. 6
      access/admin.py
  10. 988
      access/api.py
  11. 74
      access/forms.py
  12. 180
      access/migrations/0001_initial.py
  13. 40
      access/migrations/0002_auto_20160405_2045.py
  14. 40
      access/migrations/0003_user_delay.py
  15. 52
      access/migrations/0004_auto_20160412_2152.py
  16. 40
      access/migrations/0005_auto_20160414_1527.py
  17. 42
      access/migrations/0006_user_delay_date.py
  18. 42
      access/migrations/0007_auto_20160414_1543.py
  19. 42
      access/migrations/0008_auto_20160414_1547.py
  20. 42
      access/migrations/0009_auto_20160414_1941.py
  21. 42
      access/migrations/0010_auto_20160414_1944.py
  22. 42
      access/migrations/0011_auto_20160420_1749.py
  23. 42
      access/migrations/0012_auto_20160420_1819.py
  24. 52
      access/migrations/0013_auto_20160421_1808.py
  25. 42
      access/migrations/0014_auto_20160421_1824.py
  26. 42
      access/migrations/0015_auto_20160421_1829.py
  27. 52
      access/migrations/0016_auto_20160421_2009.py
  28. 52
      access/migrations/0017_auto_20160421_2135.py
  29. 52
      access/migrations/0018_auto_20160422_1555.py
  30. 52
      access/migrations/0019_auto_20160424_1646.py
  31. 42
      access/migrations/0020_auto_20160506_1303.py
  32. 62
      access/migrations/0021_auto_20160509_1331.py
  33. 82
      access/migrations/0022_auto_20160509_1401.py
  34. 76
      access/migrations/0023_auto_20160509_1408.py
  35. 122
      access/migrations/0024_auto_20160509_1537.py
  36. 52
      access/migrations/0025_auto_20160509_1539.py
  37. 52
      access/migrations/0026_auto_20160509_1803.py
  38. 92
      access/migrations/0027_auto_20160510_1823.py
  39. 122
      access/migrations/0028_auto_20160526_1427.py
  40. 76
      access/migrations/0029_auto_20160526_1435.py
  41. 52
      access/migrations/0030_auto_20160526_1727.py
  42. 52
      access/migrations/0031_auto_20160531_1240.py
  43. 42
      access/migrations/0032_auto_20160601_1256.py
  44. 42
      access/migrations/0033_auto_20160607_1614.py
  45. 42
      access/migrations/0034_auto_20160607_2002.py
  46. 42
      access/migrations/0035_auto_20160607_2034.py
  47. 42
      access/migrations/0036_auto_20160607_2051.py
  48. 42
      access/migrations/0037_auto_20160608_1700.py
  49. 42
      access/migrations/0038_auto_20160608_1705.py
  50. 42
      access/migrations/0039_auto_20160608_1804.py
  51. 42
      access/migrations/0040_auto_20160608_1841.py
  52. 42
      access/migrations/0041_auto_20160609_1429.py
  53. 42
      access/migrations/0042_auto_20160609_1442.py
  54. 42
      access/migrations/0043_auto_20160609_1534.py
  55. 42
      access/migrations/0044_auto_20160609_1536.py
  56. 42
      access/migrations/0045_auto_20160609_1536.py
  57. 42
      access/migrations/0046_auto_20160609_1546.py
  58. 42
      access/migrations/0047_auto_20160609_1627.py
  59. 42
      access/migrations/0048_auto_20160609_2224.py
  60. 42
      access/migrations/0049_auto_20160628_1731.py
  61. 42
      access/migrations/0050_auto_20160711_1518.py
  62. 42
      access/migrations/0051_auto_20160713_2038.py
  63. 42
      access/migrations/0052_auto_20160718_1714.py
  64. 42
      access/migrations/0053_auto_20160718_1714.py
  65. 62
      access/migrations/0054_auto_20160725_1551.py
  66. 72
      access/migrations/0055_auto_20160809_1653.py
  67. 52
      access/migrations/0056_auto_20160809_1659.py
  68. 42
      access/migrations/0057_auto_20160810_1234.py
  69. 42
      access/migrations/0058_auto_20160814_1736.py
  70. 396
      access/migrations/0059_auto_20160815_1853.py
  71. 52
      access/migrations/0060_auto_20160815_1855.py
  72. 0
      access/migrations/__init__.py
  73. 4
      access/models.py
  74. 896
      access/out_api.py
  75. 80
      access/tasks.py
  76. 22
      access/teach_urls.py
  77. 280
      access/teach_views.py
  78. 86
      access/urls.py
  79. 468
      access/views.py
  80. 80
      configs/celery.conf
  81. 102
      configs/codemy_ssl/privat.key
  82. 168
      configs/codemy_ssl/public.pem
  83. 32
      configs/packs
  84. 102
      configs/skillbox_ssl/private.key
  85. 56
      configs/skillbox_ssl/request.csr
  86. 14
      configs/supervisor.conf
  87. 30
      configs/uwsgi.ini
  88. 0
      courses/__init__.py
  89. 240
      courses/admin.py
  90. 1818
      courses/api.py
  91. 398
      courses/migrations/0001_initial.py
  92. 58
      courses/migrations/0002_achievementsmap.py
  93. 38
      courses/migrations/0003_auto_20160322_1852.py
  94. 40
      courses/migrations/0004_lesson_video_id.py
  95. 40
      courses/migrations/0005_auto_20160331_2030.py
  96. 50
      courses/migrations/0006_auto_20160407_2006.py
  97. 40
      courses/migrations/0007_lesson_video_date.py
  98. 40
      courses/migrations/0008_coursetheme_block.py
  99. 38
      courses/migrations/0009_remove_coursetheme_block.py
  100. 38
      courses/migrations/0010_remove_coursetheme_empty_description.py
  101. Some files were not shown because too many files have changed in this diff Show More

@ -1,16 +1,8 @@
## Правила для разработчика #**INDIGO**
RLMS ( Real Learning Management System )
- Разрабока ведется в отдельном брэнче [http://go.skillbox.ru](http://go.skillbox.ru)
- После комита изменений можно проверить свою работу по следующему адресу: <branch_name>.lms.test.spicycms.com
- После проверки тестового сайта по имени брэнча, брэнч помечается к мерж реквесту
- Ответсвенный инженер производит код ревью и запускает/отклоняет мерж
- Если сайт запустился на демо сайте, код в ручом режиме можно обновить на продакшен сервере
### Замечания Барышников Н.Р.
- Мерж реквест лучше производить в ветку develop(чтобы исключить случайного обновления кода на демо сайте) **Наша задача** - построить гибкую систему обучения, предоставляющую возможность эффективно подстраиваться под нужны конкретного проекта обучения. Хранить и обрабатывать информацию об аудитории. Давать конструктивную и максимально приближенную к реальности оценку процессов проводимых в системе. Предоставлять возможность проведения экспериментов в обучении без ущерба для самого процесса. Необходимо реализовать в полной мере принцип модульности частей системы. Все процессы, проходимые через систему должны подчиняться общей политике безопасности. Административный интерфейс должен быть максимально упрощен, для быстрого и эффективного доступа к данным. Максимально интегрироваться с готовыми решениями имеющими косвенную выгоду для обучения непосредственно. Четко соблюдать прицип MVC при любых объемах. Контролировать полноценно работу на всех 3х уровнях. Собирать и хранить всю поступающую, уникальную информацию.
- Внимание! Разработчик обязан проверить работоспособность тестового сайта по имени созданного брэнча <branch_name>.lms.test.spicycms.com
- Если необходимы тестовые данные разработчик их подготавливает дополнительно
- Если нет возможности добавить тестовые данные в авто режиме, разработчик добавляет инструкцию в README файл по запуску необходимых команд
(Под тестовыми данными подразумеваются фикстуры)

@ -1,71 +1,71 @@
einzheev@itl.com.kz einzheev@itl.com.kz
dmitry.sedov@inbox.ru dmitry.sedov@inbox.ru
ivanpokalyuk@gmail.com ivanpokalyuk@gmail.com
baho9208@mail.ru baho9208@mail.ru
feyorz@gmail.com feyorz@gmail.com
waximov@gmail.com waximov@gmail.com
alvo_05@mail.ru alvo_05@mail.ru
redkuk@gmail.com redkuk@gmail.com
petrichv@gmail.com petrichv@gmail.com
tagfelix500@gmail.com tagfelix500@gmail.com
ikey0172@mail.ru ikey0172@mail.ru
gb.gayane@gmail.com gb.gayane@gmail.com
eco.pun@gmail.com eco.pun@gmail.com
sanzharsurshanov@gmail.com sanzharsurshanov@gmail.com
dennis.loboda@gmail.com dennis.loboda@gmail.com
webar4i@gmail.com webar4i@gmail.com
zvetaan@gmail.com zvetaan@gmail.com
svelavs@gmail.com svelavs@gmail.com
art@magicdesign.ru art@magicdesign.ru
mbf23tb@gmail.com mbf23tb@gmail.com
andrievskiydmitriy@gmail.com andrievskiydmitriy@gmail.com
pulya7@gmail.com pulya7@gmail.com
mikhail.a.gusev@gmail.com mikhail.a.gusev@gmail.com
elena@citrus-soft.ru elena@citrus-soft.ru
kropev@rarus.ru kropev@rarus.ru
nikonorov@labizum.ru nikonorov@labizum.ru
gulin@labizum.ru gulin@labizum.ru
vladfedorovich@gmail.com vladfedorovich@gmail.com
Gfgaliya@gmail.com Gfgaliya@gmail.com
romqa.guard@gmail.com romqa.guard@gmail.com
srfedotov@gmail.com srfedotov@gmail.com
vinjuli4ka2008@rambler.ru vinjuli4ka2008@rambler.ru
kuzzzal@gmail.com kuzzzal@gmail.com
zvetaan@gmail.com zvetaan@gmail.com
lepon@bk.ru lepon@bk.ru
y.robocopov@gmail.com y.robocopov@gmail.com
enchervinskaya@gmail.com enchervinskaya@gmail.com
volokos@gmail.com volokos@gmail.com
mtsalka@scnsoft.com mtsalka@scnsoft.com
dubnyak404@gmail.com dubnyak404@gmail.com
o.tibirkova@yandex.ru o.tibirkova@yandex.ru
a.nikiforov@uplab.ru a.nikiforov@uplab.ru
dmytriy.suslov@gmail.com dmytriy.suslov@gmail.com
s.shtukaturka@gmail.com s.shtukaturka@gmail.com
alex.dntv@gmail.com alex.dntv@gmail.com
m.chelyadenkov@gmail.com m.chelyadenkov@gmail.com
timur.shulgin@infocraft.ru timur.shulgin@infocraft.ru
sp.rusanov@gmail.com sp.rusanov@gmail.com
zyabra@gmail.com zyabra@gmail.com
timakova@fistashki.org timakova@fistashki.org
aknoraz@deloitte.ru aknoraz@deloitte.ru
sesyunin@realweb.ru sesyunin@realweb.ru
bravo.johnny@yandex.ru bravo.johnny@yandex.ru
didenko@braind.agency didenko@braind.agency
whysecondjuly@gmail.com whysecondjuly@gmail.com
yuzik.74@gmail.com yuzik.74@gmail.com
art@amado-id.ru art@amado-id.ru
9330733@mail.ru 9330733@mail.ru
ek.design11@gmail.com ek.design11@gmail.com
danila.zarechnev@gmail.com danila.zarechnev@gmail.com
kira.yakuhina@gmail.com kira.yakuhina@gmail.com
geiz@yandex.ru geiz@yandex.ru
tuning_a@mail.ru tuning_a@mail.ru
suonarama@gmail.com suonarama@gmail.com
abrakadavr@gmail.com abrakadavr@gmail.com
irina_z_z@mail.ru irina.huchak@gmail.com irina_z_z@mail.ru irina.huchak@gmail.com
ha@brightstudio.ru ha@brightstudio.ru
smorozov@qsoft.ru smorozov@qsoft.ru
a.reva@qsoft.ru a.reva@qsoft.ru
d.pogodin@itech-group.ru d.pogodin@itech-group.ru
lemma.ka@gmail.com lemma.ka@gmail.com

@ -1,117 +1,117 @@
makspirogov@gmail.com makspirogov@gmail.com
velesart@gmail.com velesart@gmail.com
dmitrij.pastushenko@gmail.com dmitrij.pastushenko@gmail.com
pavlov@complexsys.ru pavlov@complexsys.ru
ceo@pride-m.ru ceo@pride-m.ru
spinngewebex@gmail.com spinngewebex@gmail.com
an_b@inbox.ru an_b@inbox.ru
ilyuha86@gmail.com ilyuha86@gmail.com
juniperland@gmail.com juniperland@gmail.com
egor@yugs.ru egor@yugs.ru
kashlatch@gmail.com kashlatch@gmail.com
niozuki@mail.ru niozuki@mail.ru
Gnatovych@gmail.com Gnatovych@gmail.com
sahem@mail.ru sahem@mail.ru
zfalevich@gmail.com zfalevich@gmail.com
lalaviva@yandex.ru lalaviva@yandex.ru
z.ilnurri@gmail.com z.ilnurri@gmail.com
mmaslennikov@mail.ru mmaslennikov@mail.ru
info@wbest.ru info@wbest.ru
arthur.subbota@gmail.com arthur.subbota@gmail.com
goha@kiosov.com goha@kiosov.com
Igorfedorenko@mail.ru Igorfedorenko@mail.ru
annazayidova@gmail.com annazayidova@gmail.com
anton.reznichenko@gmail.com anton.reznichenko@gmail.com
me@flexure.ru me@flexure.ru
es@vipro.ru es@vipro.ru
km@colary.ru km@colary.ru
kiselev_s_l@mail.ru kiselev_s_l@mail.ru
a.reznichenko@clientlab.ru a.reznichenko@clientlab.ru
soldakov.p@yandex.ru soldakov.p@yandex.ru
ap@ds-p.ru ap@ds-p.ru
702752@gmail.com 702752@gmail.com
shpakova@sebbia.com shpakova@sebbia.com
skugarov@sebbia.com skugarov@sebbia.com
taranov@sebbia.com taranov@sebbia.com
rusakovevgen@gmail.com rusakovevgen@gmail.com
frostoffman@gmail.com frostoffman@gmail.com
a.khadeko@gmail.com a.khadeko@gmail.com
trogatyuk@gmail.com trogatyuk@gmail.com
hello@aokunev.com hello@aokunev.com
dengenich@gmail.com dengenich@gmail.com
Alexpozdnyakof@gmail.com Alexpozdnyakof@gmail.com
korobajr@ya.ru korobajr@ya.ru
pavlov@complexsys.ru pavlov@complexsys.ru
elizaveta.bandalet@gmail.com elizaveta.bandalet@gmail.com
deniskondrashov@yahoo.com deniskondrashov@yahoo.com
prokosha10@gmail.com prokosha10@gmail.com
i.flinn@yandex.ru i.flinn@yandex.ru
s.darbaidze@inostudio.com s.darbaidze@inostudio.com
zhurakoff@gmail.com zhurakoff@gmail.com
krylya@inbox.ru krylya@inbox.ru
146133@gmail.com 146133@gmail.com
i.flinn@yandex.ru i.flinn@yandex.ru
sasha.melbourne@gmail.com sasha.melbourne@gmail.com
tiano_taurus747@mail.ru tiano_taurus747@mail.ru
hip-hop-org@yandex.ru hip-hop-org@yandex.ru
j.tolkova@yandex.ru j.tolkova@yandex.ru
jaglin@itsoft.ru jaglin@itsoft.ru
den.volchkevich@gmail.com den.volchkevich@gmail.com
yakimov.dmitriy@gmail.com yakimov.dmitriy@gmail.com
994677@mail.ru 994677@mail.ru
rumbeshta@userstory.ru rumbeshta@userstory.ru
ylkin_list@mail.ru ylkin_list@mail.ru
salofoot@fermastudio.ru salofoot@fermastudio.ru
smiley1776@gmail.com smiley1776@gmail.com
info@darneo.ru info@darneo.ru
egor@studiofact.ru egor@studiofact.ru
alevtina.i.danilova@gmail.com alevtina.i.danilova@gmail.com
puponina.irina@gmail.com puponina.irina@gmail.com
yevseev@mail.ru yevseev@mail.ru
ekde@wide-web.spb.ru ekde@wide-web.spb.ru
corpas@gmail.com corpas@gmail.com
nitrohlorid@gmail.com nitrohlorid@gmail.com
kayl24brof@gmail.com kayl24brof@gmail.com
skovalska@mail.ru skovalska@mail.ru
Dmitry.eremin7@gmail.com Dmitry.eremin7@gmail.com
Nikolebedev@mail.ru Nikolebedev@mail.ru
ishulga86@gmail.com ishulga86@gmail.com
bobafas@gmail.com bobafas@gmail.com
kalina531345@gmail.com kalina531345@gmail.com
dsgn.shots@gmail.com dsgn.shots@gmail.com
dsukhanova@gmail.com dsukhanova@gmail.com
kizilov.s@gmail.com kizilov.s@gmail.com
zlk.marjana@gmail.com zlk.marjana@gmail.com
nava011235@gmail.com nava011235@gmail.com
i.shymanskyi@gmail.com i.shymanskyi@gmail.com
anastasy.petrenko87@gmail.com anastasy.petrenko87@gmail.com
dinozavrix@gmail.com dinozavrix@gmail.com
yana.berezhnaya999@gmail.com yana.berezhnaya999@gmail.com
person.ira@gmail.com person.ira@gmail.com
bershonok@gmail.com bershonok@gmail.com
vivi_bvo@mail.ru vivi_bvo@mail.ru
lens2002@gmail.com lens2002@gmail.com
ohmeinkot@gmail.com ohmeinkot@gmail.com
d22s@ya.ru d22s@ya.ru
masha49@yandex.ru masha49@yandex.ru
biz.trp@gmail.com biz.trp@gmail.com
leo55506@gmail.com leo55506@gmail.com
ksenia.vitkova@gmail.com ksenia.vitkova@gmail.com
e.poberezhnik@artw.ru e.poberezhnik@artw.ru
alexzarkov@gmail.com alexzarkov@gmail.com
ekde@wide-web.spb.ru ekde@wide-web.spb.ru
vemelin@gmail.com vemelin@gmail.com
gausf2@gmail.com gausf2@gmail.com
vd@wearewowagency.com vd@wearewowagency.com
va@wearewowagency.com va@wearewowagency.com
domrachv@gmail.com domrachv@gmail.com
ad@wearewowagency.com ad@wearewowagency.com
jalalovna@yandex.ru jalalovna@yandex.ru
mohov-g@yandex.ru mohov-g@yandex.ru
st.wasp@yandex.ru st.wasp@yandex.ru
Irina.lisofa@gmail.com Irina.lisofa@gmail.com
Kornblumchen@yandex.ru Kornblumchen@yandex.ru
albytime@gmail.com albytime@gmail.com
as.plyaskin@gmail.com as.plyaskin@gmail.com
trunovaon@gmail.com trunovaon@gmail.com
yuri.a.k.design@gmail.com yuri.a.k.design@gmail.com

@ -3,16 +3,20 @@ import os
import django import django
import sys import sys
import datetime import datetime
import os
start = datetime.datetime.now() start = datetime.datetime.now()
sys.path.append("/var/www/projects/codemy/") sys.path.append("/var/www/projects/codemy/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup() django.setup()
os.system('python check_course_map.py')
os.system('python check_prices.py')
from lms.settings import BASE_DIR from lms.settings import BASE_DIR
from journals.models import TeacherJ, check_journal from journals.models import TeacherJ, check_journal
from lms.tools import show_progress from lms.tools import show_progress
os.system('python clean_twice_journals.py')
all = TeacherJ.objects.filter(progress__gt=0).count() all = TeacherJ.objects.filter(progress__gt=0).count()
print('Количество журналов на проверку: %s' % all) print('Количество журналов на проверку: %s' % all)
@ -29,6 +33,6 @@ for i in TeacherJ.objects.filter(progress__gt=0).order_by('-id'):
f = open(os.path.join(BASE_DIR, 'journals/check_switch'), 'w') f = open(os.path.join(BASE_DIR, 'journals/check_switch'), 'w')
f.write('0\n') f.write('0\n')
f.close() f.close()
os.system('python open_lesson.py')
finish = datetime.datetime.now() finish = datetime.datetime.now()
print('\nTIME: %s seconds' % (finish-start).seconds) print('\nTIME: %s seconds' % (finish-start).seconds)

@ -3,45 +3,33 @@ import os
import django import django
import sys import sys
import datetime import datetime
print(1)
start = datetime.datetime.now() start = datetime.datetime.now()
sys.path.append("/var/www/projects/codemy/") sys.path.append("/var/www/projects/codemy/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup() django.setup()
print(2)
from courses.models import CourseMap from courses.models import CourseMap
from journals.models import TeacherJ, LessonJ, HomeworkJ, HomeworkTry, CourseThemeJ from journals.models import TeacherJ, LessonJ, HomeworkJ, HomeworkTry, CourseThemeJ
# Получить все журналы, где начато обучение
print(3)
last = TeacherJ.objects.filter(status='W').order_by('-id').last().id
print(4)
for journal in TeacherJ.objects.filter(id=26933).order_by('-id'): # Получить все журналы, где начато обучение
print(journal.id) for journal in TeacherJ.objects.filter(status='W').order_by('-id'):
if HomeworkTry.objects.filter(material__course__id=journal.course.id, student__id=journal.student.id).exists(): if HomeworkTry.objects.filter(parent__parent__parent=journal).exists():
print('4a')
hw = int(CourseMap.objects.get( hw = int(CourseMap.objects.get(
homework=HomeworkTry.objects.filter(parent__parent__parent=journal).order_by('id').last().material).sort) homework=HomeworkTry.objects.filter(parent__parent__parent=journal).order_by('id').last().material).sort)
print(hw) before = []
for i in LessonJ.objects.filter(parent__parent=journal): for i in LessonJ.objects.filter(parent__parent=journal):
if int(CourseMap.objects.get(lesson=i.material).sort) > hw: if int(CourseMap.objects.get(lesson=i.material).sort):
i.date = None i.date = None
i.f_date = None i.f_date = None
i.success = False i.success = False
i.save() i.save()
else: else:
try: i.saw_this()
i.saw_this()
except Exception as e:
print(e)
print(i)
for ct in CourseThemeJ.objects.filter(parent=journal): for ct in CourseThemeJ.objects.filter(parent=journal):
if LessonJ.objects.filter(parent=ct).count() == LessonJ.objects.filter(parent=ct, date=None).count(): if LessonJ.objects.filter(parent=ct).count() == LessonJ.objects.filter(parent=ct, date=None).count():
ct.date = None ct.date = None
ct.save() ct.save()
print(5) for i in HomeworkJ.objects.filter(f_date=None).exclude(date=None):
#for i in HomeworkJ.objects.filter(f_date=None).exclude(date=None): i.open_next()
# i.open_next()

@ -86,16 +86,16 @@
<id>3602</id> <id>3602</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>Я уже писал об этом и после четвёртого урока, и после пятого,&nbsp; но рассинхронизация становится всё хуже и хуже. Что-то понять, когда ты видишь одно, а слышишь совсем другое - это просто взрыв мозга.</p> <text><p>Я уже писал об этом и после четвёртого урока, и после пятого,&nbsp; но рассинхронизация становится всё хуже и хуже. Что-то понять, когда ты видишь одно, а слышишь совсем другое - это просто взрыв мозга.</p>
<p>Кроме того, не было ни слова сказано о</p> <p>Кроме того, не было ни слова сказано о</p>
<ul> <ul>
<li>Вопросы кроссбраузерности &ndash; логика введения новых компонентнов Javascript ведущими браузерами</li> <li>Вопросы кроссбраузерности &ndash; логика введения новых компонентнов Javascript ведущими браузерами</li>
<li>Практическая сторона процесса стандартизации,</li> <li>Практическая сторона процесса стандартизации,</li>
</ul> </ul>
<p>хотя это было анонсировано в описании урока. Или только я этого не услышал?</p> <p>хотя это было анонсировано в описании урока. Или только я этого не услышал?</p>
</text> </text>
<nick>Михаил</nick> <nick>Михаил</nick>
<time></time> <time></time>
@ -109,7 +109,7 @@
<id>3841</id> <id>3841</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>К сожалению, на 30 минуте просто взял и закрыл. и стал смотреть подобные видео уроки на ютубе. Просто невозможно смотреть из-за этого рассинхрона. Очень жаль. Писали выше &quot;Да логики как-то нет!!!! Получается что тупо читают лекцию... ((((( Ожидал большего. В начале была в лекциях жизнь, интерес... желание... А сейчас как-то это напоминает вебинар, на котором рассказывают обо всем, но не о чем. Хотя где-то и затрагиваться моменты и логика работы скрипта. Я понимаю что нельзя все рассказать за 1,5 часа, но можно было бы тогда хоть материал дать, шпаргалку в которой бы написано было все что надо знать.&quot; - полностью с этим согласен :(</p> <text><p>К сожалению, на 30 минуте просто взял и закрыл. и стал смотреть подобные видео уроки на ютубе. Просто невозможно смотреть из-за этого рассинхрона. Очень жаль. Писали выше &quot;Да логики как-то нет!!!! Получается что тупо читают лекцию... ((((( Ожидал большего. В начале была в лекциях жизнь, интерес... желание... А сейчас как-то это напоминает вебинар, на котором рассказывают обо всем, но не о чем. Хотя где-то и затрагиваться моменты и логика работы скрипта. Я понимаю что нельзя все рассказать за 1,5 часа, но можно было бы тогда хоть материал дать, шпаргалку в которой бы написано было все что надо знать.&quot; - полностью с этим согласен :(</p>
</text> </text>
<nick>Кирилл</nick> <nick>Кирилл</nick>
<time></time> <time></time>
@ -123,7 +123,7 @@
<id>3948</id> <id>3948</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>- полностью с этим согласен :( s vami siwu В начале была в лекциях жизнь, интерес... желание... А сейчас как-то это напоминает вебинар, на котором рассказывают обо всем, но не о чем.</p> <text><p>- полностью с этим согласен :( s vami siwu В начале была в лекциях жизнь, интерес... желание... А сейчас как-то это напоминает вебинар, на котором рассказывают обо всем, но не о чем.</p>
</text> </text>
<nick>Без имени</nick> <nick>Без имени</nick>
<time></time> <time></time>
@ -137,7 +137,7 @@
<id>4439</id> <id>4439</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>На многих бесплатных курсах на ютубе и то доходчивее обьясняют и видео от звука не отстаёт:((&nbsp;</p> <text><p>На многих бесплатных курсах на ютубе и то доходчивее обьясняют и видео от звука не отстаёт:((&nbsp;</p>
</text> </text>
<nick>Роман</nick> <nick>Роман</nick>
<time></time> <time></time>
@ -151,13 +151,13 @@
<id>4593</id> <id>4593</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>Всем привет!</p> <text><p>Всем привет!</p>
<p>Мне то-же не понравилась рассинхронизация звука и видео, просто монтаж видео делался не программистом :)</p> <p>Мне то-же не понравилась рассинхронизация звука и видео, просто монтаж видео делался не программистом :)</p>
<p>Преподаватель дает материал компактно и доходчиво. Мне нравится.</p> <p>Преподаватель дает материал компактно и доходчиво. Мне нравится.</p>
<p>Предлагаю перередактировать видео всего курса с нормальной синхронизацией, убрать <a href="http://ssmaker.ru/af6cd7d1.png" target="_blank">косяки</a> и добавить оптимизацию пространства картинки&nbsp;как на <a href="http://ssmaker.ru/884e4a79.png" target="_blank">рисунке (ссылка)</a>. Готов выполнить.</p> <p>Предлагаю перередактировать видео всего курса с нормальной синхронизацией, убрать <a href="http://ssmaker.ru/af6cd7d1.png" target="_blank">косяки</a> и добавить оптимизацию пространства картинки&nbsp;как на <a href="http://ssmaker.ru/884e4a79.png" target="_blank">рисунке (ссылка)</a>. Готов выполнить.</p>
</text> </text>
<nick>Сергей</nick> <nick>Сергей</nick>
<time></time> <time></time>
@ -171,7 +171,7 @@
<id>5494</id> <id>5494</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>Я просто возмущена тем, что в таком режиме (рассинхронизации) невозможно учиться и что-то вообще понять... А главное, рассказывает преподаватель доходчиво... и очень обидно, что просто кто-то слепил все тяп-ляп, испортив хорошую вещь... А еще - переделать всё это элементарно, имея исходники... Почему ничего не меняется как минимум месяц, судя по первым комментариям?&nbsp; Кто-нибудь кроме недовольных учеников вообще их читает?</p> <text><p>Я просто возмущена тем, что в таком режиме (рассинхронизации) невозможно учиться и что-то вообще понять... А главное, рассказывает преподаватель доходчиво... и очень обидно, что просто кто-то слепил все тяп-ляп, испортив хорошую вещь... А еще - переделать всё это элементарно, имея исходники... Почему ничего не меняется как минимум месяц, судя по первым комментариям?&nbsp; Кто-нибудь кроме недовольных учеников вообще их читает?</p>
</text> </text>
<nick>Анастасия</nick> <nick>Анастасия</nick>
<time></time> <time></time>
@ -185,7 +185,7 @@
<id>5495</id> <id>5495</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>Интересно, а у всех получается повторить, что демонстрируется на лекции, у меня уже на предыдущей и этой лекции некоторые элементы не работают как у лектора. Делал все как и лектор, на прошлом занятии даже сравнивал с &quot;рыбой&quot; присланной к заданию - визуально всё правильно, но у меня, в отличие от &quot;рыбы&quot; не все работает!</p> <text><p>Интересно, а у всех получается повторить, что демонстрируется на лекции, у меня уже на предыдущей и этой лекции некоторые элементы не работают как у лектора. Делал все как и лектор, на прошлом занятии даже сравнивал с &quot;рыбой&quot; присланной к заданию - визуально всё правильно, но у меня, в отличие от &quot;рыбы&quot; не все работает!</p>
</text> </text>
<nick>Сергей</nick> <nick>Сергей</nick>
<time></time> <time></time>
@ -199,7 +199,7 @@
<id>5653</id> <id>5653</id>
<parent_id>8096</parent_id> <parent_id>8096</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>Пару раз за прошлую лекцию он делал опечатки и у него тоже не работало.&nbsp;Потом их поправлял &quot;незаметно&quot;, по ходу рассказа о других вещах. А еще попробуйте пропустить Ваш код через HTML-валидатор, вот этот:&nbsp;<a href="https://validator.w3.org/#validate_by_upload">https://validator.w3.org/#validate_by_upload</a>&nbsp;. Возможно выдаваемые им ошибки подскажут, где Вы ошиблись. А так обычное для программирования дело: опечатки в одной букве, пропущенная точка с запятой и т.п.</p> <text><p>Пару раз за прошлую лекцию он делал опечатки и у него тоже не работало.&nbsp;Потом их поправлял &quot;незаметно&quot;, по ходу рассказа о других вещах. А еще попробуйте пропустить Ваш код через HTML-валидатор, вот этот:&nbsp;<a href="https://validator.w3.org/#validate_by_upload">https://validator.w3.org/#validate_by_upload</a>&nbsp;. Возможно выдаваемые им ошибки подскажут, где Вы ошиблись. А так обычное для программирования дело: опечатки в одной букве, пропущенная точка с запятой и т.п.</p>
</text> </text>
<nick>Вячеслав</nick> <nick>Вячеслав</nick>
<time></time> <time></time>
@ -213,7 +213,7 @@
<id>5654</id> <id>5654</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>P.S. Если Вы так и не сможете найти почему не работает, попробуйте еще открыть текст в &quot;умном&quot; текстовом редакторе, например Notepad++. Он подсвечивает синтаксис, возможно заметите опечатку или незакрытый тег. Еще есть средства разработчика во &nbsp;всех популярных&nbsp;браузерах, тоже полезны для поиска ошибок.</p> <text><p>P.S. Если Вы так и не сможете найти почему не работает, попробуйте еще открыть текст в &quot;умном&quot; текстовом редакторе, например Notepad++. Он подсвечивает синтаксис, возможно заметите опечатку или незакрытый тег. Еще есть средства разработчика во &nbsp;всех популярных&nbsp;браузерах, тоже полезны для поиска ошибок.</p>
</text> </text>
<nick>Вячеслав</nick> <nick>Вячеслав</nick>
<time></time> <time></time>
@ -227,7 +227,7 @@
<id>5940</id> <id>5940</id>
<parent_id>8256</parent_id> <parent_id>8256</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>&quot; Потом их поправлял &quot;незаметно&quot;, по ходу рассказа о других вещах. &quot; - тоже подметил. Правильнее,&nbsp;грамотнее и полезнее для новичков было бы, если б лектор указывал на ошибки, опечатки и их исправление, а не делал бы это&nbsp;молча, как бы тайком.&nbsp;</p> <text><p>&quot; Потом их поправлял &quot;незаметно&quot;, по ходу рассказа о других вещах. &quot; - тоже подметил. Правильнее,&nbsp;грамотнее и полезнее для новичков было бы, если б лектор указывал на ошибки, опечатки и их исправление, а не делал бы это&nbsp;молча, как бы тайком.&nbsp;</p>
</text> </text>
<nick>Константин</nick> <nick>Константин</nick>
<time></time> <time></time>
@ -241,7 +241,7 @@
<id>6181</id> <id>6181</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>Запись уже невозможно открыть. Может быть на ремонте?</p> <text><p>Запись уже невозможно открыть. Может быть на ремонте?</p>
</text> </text>
<nick>ANATOLY</nick> <nick>ANATOLY</nick>
<time></time> <time></time>
@ -255,12 +255,12 @@
<id>7719</id> <id>7719</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>Вторая часть лекции - очень сумбурная и непонятная. Похоже, что чем сложнее тема - тем хуже объяснение!</p> <text><p>Вторая часть лекции - очень сумбурная и непонятная. Похоже, что чем сложнее тема - тем хуже объяснение!</p>
<p>Кто-нибудь, кроме студентов, видит, что изображение&nbsp;и&nbsp;речь рассинхронизированы!</p> <p>Кто-нибудь, кроме студентов, видит, что изображение&nbsp;и&nbsp;речь рассинхронизированы!</p>
<p>С уважением,<br /> <p>С уважением,<br />
D</p> D</p>
</text> </text>
<nick>Без имени</nick> <nick>Без имени</nick>
<time></time> <time></time>
@ -274,7 +274,7 @@ D</p>
<id>8843</id> <id>8843</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>Когда с рассинхроном разберётесь?? Вообще теряется нить повествования. Невозможно так обучаться.</p> <text><p>Когда с рассинхроном разберётесь?? Вообще теряется нить повествования. Невозможно так обучаться.</p>
</text> </text>
<nick>Вячеслав</nick> <nick>Вячеслав</nick>
<time></time> <time></time>
@ -288,7 +288,7 @@ D</p>
<id>9236</id> <id>9236</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>Сильно раздражает не соответствие лекции&nbsp;и &quot;рыбы&quot;, а так же отставание экрана. Куда теперь отправлять ДЗ тоже не понятно.Подскажите!</p> <text><p>Сильно раздражает не соответствие лекции&nbsp;и &quot;рыбы&quot;, а так же отставание экрана. Куда теперь отправлять ДЗ тоже не понятно.Подскажите!</p>
</text> </text>
<nick>Ольга</nick> <nick>Ольга</nick>
<time></time> <time></time>
@ -302,7 +302,7 @@ D</p>
<id>9345</id> <id>9345</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>Мое предложение - подать совместную жалобу и запросить возврат средств. Никакой обратной связи, обучаться невозможно изза недостатка информации, услуга оказывается не должным образом. Кто за - пишите whatsapp 79251879198 будем придумывать что делать)</p> <text><p>Мое предложение - подать совместную жалобу и запросить возврат средств. Никакой обратной связи, обучаться невозможно изза недостатка информации, услуга оказывается не должным образом. Кто за - пишите whatsapp 79251879198 будем придумывать что делать)</p>
</text> </text>
<nick>Леонид</nick> <nick>Леонид</nick>
<time></time> <time></time>
@ -316,6 +316,6 @@ D</p>
<id>9483</id> <id>9483</id>
<parent_id>0</parent_id> <parent_id>0</parent_id>
<root_id></root_id> <root_id></root_id>
<text><p>Вот люди пишут:&quot;Я понимаю что нельзя все рассказать за 1,5 часа&quot;, а за 50 минут? Лекции становятся все короче и сумбурнее, полностью согласна, что качество услуги никак не соответствует цене.</p> <text><p>Вот люди пишут:&quot;Я понимаю что нельзя все рассказать за 1,5 часа&quot;, а за 50 минут? Лекции становятся все короче и сумбурнее, полностью согласна, что качество услуги никак не соответствует цене.</p>
</text> </text>
<nick>Елизавета</nick> <nick>Елизавета</nick>

@ -11,7 +11,7 @@ django.setup()
from journals.models import CourseMap, LessonJ, TeacherJ, HomeworkTry from journals.models import CourseMap, LessonJ, TeacherJ, HomeworkTry
from lms.tools import show_progress from lms.tools import show_progress
_NEED_OPEN = None#LessonJ.objects.get(material__id='684', student__email='alexandersvinin@gmail.com') _NEED_OPEN = LessonJ.objects.get(material__id='79', student__email='agar10@yandex.ru')
_TEACHERJ_FILTER = {'progress__gte': 0} _TEACHERJ_FILTER = {'progress__gte': 0}
_TEACHERJ_EXCLUDE = {'teacher': None} _TEACHERJ_EXCLUDE = {'teacher': None}

@ -49,17 +49,13 @@ class DocumentAdmin(admin.ModelAdmin):
class UserRequestAdmin(admin.ModelAdmin): class UserRequestAdmin(admin.ModelAdmin):
list_display = ('ip', 'user', 'count', 'date', ) list_display = ('ip', 'user', 'count', 'date', )
list_filter = ['date'] list_filter = ['date']
search_fields = ('ip', 'user__email', 'user__fname', 'user__name', 'user__oname',) search_fields = ('ip', 'user__email', 'user__fname', 'user__name', 'user__oname', 'user__id',)
class UserRequestDataAdmin(admin.ModelAdmin): class UserRequestDataAdmin(admin.ModelAdmin):
search_fields = ('row__ip', ) search_fields = ('row__ip', )
#class UserSyncAdmin(admin.ModelAdmin):
# list_display = ('user', 'source', 'dist', 'date', 'f_date', 'result',)
#admin.site.register(UserSync, UserSyncAdmin)
admin.site.register(UserRequest, UserRequestAdmin) admin.site.register(UserRequest, UserRequestAdmin)
admin.site.register(UserRequestData, UserRequestDataAdmin) admin.site.register(UserRequestData, UserRequestDataAdmin)
admin.site.register(Document, DocumentAdmin) admin.site.register(Document, DocumentAdmin)

@ -1,491 +1,497 @@
# coding=utf-8 # coding=utf-8
import datetime import datetime
from django.contrib import auth from django.contrib import auth
from django.http import Http404 from django.http import Http404
from access.models import User, Subscription, sent_registration from access.models import User, Subscription, sent_registration, UserRequest
from lms.decors import api_decor from lms.decors import api_decor
from lms.regex import check_email from lms.regex import check_email
from lms.tools import condition_factory, check_set_password from lms.tools import condition_factory, check_set_password
from management.letters import sent_active_new_email, sent_good_activation, sent_accept_forgot from management.letters import sent_active_new_email, sent_good_activation, sent_accept_forgot
@api_decor(without_auth=True) @api_decor(without_auth=True)
def search_user(request, context): def search_user(request, context):
context['code'] = '0' context['code'] = '0'
if request.user.is_authenticated(): if request.user.is_authenticated():
if request.GET.get('user'): if request.GET.get('user'):
context['code'] = '1' if User.objects.filter(email=request.GET.get('user')).exists() else '0' context['code'] = '1' if User.objects.filter(email=request.GET.get('user')).exists() else '0'
return context return context
@api_decor(without_auth=False) @api_decor(without_auth=False)
def find_user(request, context): def find_user(request, context):
if request.user.is_authenticated() and request.user.in_role in ['T', 'S2', 'A']: if request.user.is_authenticated() and request.user.in_role in ['T', 'S2', 'A']:
if request.GET.get('user'): if request.GET.get('user'):
context['code'] = '1' context['code'] = '1'
context['data'] = [{'str': str(user), 'ava': user.get_image_url(), 'email': user.email, 'id': user.id} for user in User.objects.filter(email__icontains=request.GET['user'])] context['data'] = [{'str': str(user), 'ava': user.get_image_url(), 'email': user.email, 'id': user.id} for user in User.objects.filter(email__icontains=request.GET['user'])]
else: else:
context['response'] = u'Параметры не переданы' context['response'] = u'Параметры не переданы'
context['code'] = '0' context['code'] = '0'
return context return context
else: else:
raise Http404 raise Http404
@api_decor(without_auth=False) @api_decor(without_auth=False)
def change_private(request, context): def change_private(request, context):
if 'type' in request.POST: if 'type' in request.POST:
request.user.private = request.POST['type'] request.user.private = request.POST['type']
request.user.save() request.user.save()
return context return context
@api_decor(without_auth=False) @api_decor(without_auth=False)
def resent_active_email(request, context): def resent_active_email(request, context):
sent_registration(request.user, title=u'Повторное письмо активации') sent_registration(request.user, title=u'Повторное письмо активации')
context['code'] = '1' context['code'] = '1'
return context return context
@api_decor(without_auth=True) @api_decor(without_auth=True)
def check_auth(request, context): def check_auth(request, context):
if request.user.is_authenticated(): if request.user.is_authenticated():
context['code'] = '0' context['code'] = '0'
else: else:
context['code'] = '1' context['code'] = '1'
return context return context
@api_decor(without_auth=True) @api_decor(without_auth=True)
def logout(request, context): def logout(request, context):
if request.user.is_authenticated(): if request.user.is_authenticated():
context['code'] = '0' context['code'] = '0'
else: else:
context['code'] = '1' context['code'] = '1'
return context return context
@api_decor(without_auth=False) @api_decor(without_auth=False)
def send_settings_data(request, context): def send_settings_data(request, context):
# Изменение данных пользователя # Изменение данных пользователя
context['code'] = '0' context['code'] = '0'
request.user.oname = request.POST['user_settings_oname'] request.user.oname = request.POST['user_settings_oname']
request.user.avatar = request.POST['avatar_code'] request.user.avatar = request.POST['avatar_code']
request.user.city = request.POST['user_settings_city'] request.user.city = request.POST['user_settings_city']
if request.POST.get('user_settings_bday'): if request.POST.get('user_settings_bday'):
try: try:
request.user.b_day = datetime.datetime.strptime(request.POST['user_settings_bday'], '%d.%m.%Y').date() request.user.b_day = datetime.datetime.strptime(request.POST['user_settings_bday'], '%d.%m.%Y').date()
except ValueError: except ValueError:
context['response'] = u'Дата рождения указана в неверном формате. Пример: 18.11.1990' context['response'] = u'Дата рождения указана в неверном формате. Пример: 18.11.1990'
return context return context
if request.POST.get('user_settings_fname'): if request.POST.get('user_settings_fname'):
request.user.fname = request.POST['user_settings_fname'] request.user.fname = request.POST['user_settings_fname']
else: else:
context['response'] = u'Укажите вашу фамилию' context['response'] = u'Укажите вашу фамилию'
return context return context
if request.POST.get('user_settings_name'): if request.POST.get('user_settings_name'):
request.user.name = request.POST['user_settings_name'] request.user.name = request.POST['user_settings_name']
else: else:
context['response'] = u'Укажите ваше имя' context['response'] = u'Укажите ваше имя'
return context return context
if request.POST.get('user_settings_phone'): if request.POST.get('user_settings_phone'):
if request.user.phone != request.POST['user_settings_phone']: if request.user.phone != request.POST['user_settings_phone']:
request.user.back_phone = request.user.phone request.user.back_phone = request.user.phone
request.user.phone = request.POST['user_settings_phone'] request.user.phone = request.POST['user_settings_phone']
else: else:
context['response'] = u'Укажите ваш телефон' context['response'] = u'Укажите ваш телефон'
return context return context
if request.POST.get('user_settings_email') and check_email(request.POST['user_settings_email']): if request.POST.get('user_settings_email') and check_email(request.POST['user_settings_email']):
if request.POST['user_settings_email'].lower() != request.user.email: if request.POST['user_settings_email'].lower() != request.user.email:
email = request.POST['user_settings_email'].lower() email = request.POST['user_settings_email'].lower()
if not User.objects.filter(email=email).exists(): if not User.objects.filter(email=email).exists():
request.user.changed_email = request.POST['user_settings_email'].lower() request.user.changed_email = request.POST['user_settings_email'].lower()
request.user.change_token() request.user.change_token()
sent_active_new_email(request.user) sent_active_new_email(request.user)
context['response'] = u'Данные изменены. Для изменения поля email, необходимо подтвердить владение ' \ context['response'] = u'Данные изменены. Для изменения поля email, необходимо подтвердить владение ' \
u'им. На указанный почтовый ящик выслано письмо активации.' u'им. На указанный почтовый ящик выслано письмо активации.'
else: else:
context['response'] = u'Пользователь с таким email уже существует' context['response'] = u'Пользователь с таким email уже существует'
return context return context
else: else:
context['response'] = u'Укажите ваш email' context['response'] = u'Укажите ваш email'
return context return context
context['code'] = '1' context['code'] = '1'
request.user.save() request.user.save()
return context return context
@api_decor(without_auth=False) @api_decor(without_auth=False)
def get_settings_data(request, context): def get_settings_data(request, context):
# Отправка данных пользователя # Отправка данных пользователя
context['code'] = '1' context['code'] = '1'
context['data'] = { context['data'] = {
'short_name': request.user.get_short_name(), 'short_name': request.user.get_short_name(),
'avatar_code': request.user.avatar, 'avatar_code': request.user.avatar,
'avatar': request.user.get_image_url(type_in='big'), 'avatar': request.user.get_image_url(type_in='big'),
'fname': request.user.fname, 'fname': request.user.fname,
'name': request.user.name, 'name': request.user.name,
'oname': request.user.oname, 'oname': request.user.oname,
'phone': request.user.get_phone(), 'phone': request.user.get_phone(),
'email': request.user.email, 'email': request.user.email,
'city': request.user.city, 'city': request.user.city,
'bday': '' 'bday': ''
} }
if request.user.b_day: if request.user.b_day:
context['data']['bday'] = '{0}.{1}.{2}'.format(request.user.b_day.day, request.user.b_day.month, request.user.b_day.year) context['data']['bday'] = '{0}.{1}.{2}'.format(request.user.b_day.day, request.user.b_day.month, request.user.b_day.year)
return context return context
@api_decor(without_auth=False) @api_decor(without_auth=False)
def send_subscription_data(request, context): def send_subscription_data(request, context):
# Сохранение выбора подписок # Сохранение выбора подписок
context['code'] = '1' context['code'] = '1'
subscription = Subscription.objects.get(owner=request.user) subscription = Subscription.objects.get(owner=request.user)
right_map = subscription.right_map(None) right_map = subscription.right_map(None)
context['data'] = [] context['data'] = []
for i, x in right_map.items(): for i, x in right_map.items():
if 'subscription_{0}'.format(i) in request.POST: if 'subscription_{0}'.format(i) in request.POST:
if not x: if not x:
subscription.set_right(i, True) subscription.set_right(i, True)
else: else:
if x: if x:
subscription.set_right(i, False) subscription.set_right(i, False)
return context return context
@api_decor(without_auth=False) @api_decor(without_auth=False)
def get_subscription_data(request, context): def get_subscription_data(request, context):
# Получение подписок пользователя # Получение подписок пользователя
context['code'] = '1' context['code'] = '1'
context['data'] = {} context['data'] = {}
subscription, c = Subscription.objects.get_or_create(owner=request.user) subscription, c = Subscription.objects.get_or_create(owner=request.user)
for i, n in subscription.right_map(None).items(): for i, n in subscription.right_map(None).items():
context['data'][i] = n context['data'][i] = n
return context return context
@api_decor(without_auth=False) @api_decor(without_auth=False)
def change_password(request, context): def change_password(request, context):
# Изменение данных о профиле # Изменение данных о профиле
context['data'] = [] context['data'] = []
if request.POST.get('old_password'): if request.POST.get('old_password'):
old_password = request.POST['old_password'] old_password = request.POST['old_password']
if request.user.check_password(old_password): if request.user.check_password(old_password):
if request.POST.get('password1'): if request.POST.get('password1'):
password1 = request.POST['password1'] password1 = request.POST['password1']
ps, ms = check_set_password(request.POST['password1']) ps, ms = check_set_password(request.POST['password1'])
if not ps: if not ps:
context['response'] = ms context['response'] = ms
context['code'] = '0' context['code'] = '0'
else: else:
if request.POST.get('password2'): if request.POST.get('password2'):
password2 = request.POST['password2'] password2 = request.POST['password2']
if password1 == password2: if password1 == password2:
user = User.objects.get(id=request.user.id) user = User.objects.get(id=request.user.id)
user.set_password(password1) user.set_password(password1)
user.save() user.save()
user._set_to_sync() context['response'] = u'Пароль изменен. Авторизуйтесь используя новый пароль.'
context['response'] = u'Пароль изменен. Авторизуйтесь используя новый пароль.' context['code'] = '1'
context['code'] = '1' else:
else: context['response'] = u'Новые пароли не совпадают'
context['response'] = u'Новые пароли не совпадают' context['code'] = '0'
context['code'] = '0' else:
else: context['response'] = u'Повторите введеный пароль'
context['response'] = u'Повторите введеный пароль' context['code'] = '0'
context['code'] = '0' else:
else: context['response'] = u'Поле нового пароля не заполнено'
context['response'] = u'Поле нового пароля не заполнено' context['code'] = '0'
context['code'] = '0' else:
else: context['response'] = u'Старый пароль введен не верно'
context['response'] = u'Старый пароль введен не верно' context['code'] = '0'
context['code'] = '0' else:
else: context['response'] = u'Поле старого пароля не заполнено'
context['response'] = u'Поле старого пароля не заполнено' context['code'] = '0'
context['code'] = '0' return context
return context
@api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True)
@api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True) def get_user_role(request, context):
def get_user_role(request, context): # Получение роли пользователя для руководителя в его профиле
# Получение роли пользователя для руководителя в его профиле # TODO: Убрать изменение ролей из профиля пользователя
# TODO: Убрать изменение ролей из профиля пользователя if request.user.in_role == 'S' or request.user.in_role == 'A':
if request.user.in_role == 'S' or request.user.in_role == 'A': try:
try: user = User.objects.get(id=request.GET['id'])
user = User.objects.get(id=request.GET['id']) except User.DoesNotExist:
except User.DoesNotExist: context['code'] = '0'
context['code'] = '0' else:
else: context['code'] = '1'
context['code'] = '1' context['data'] = user.in_role
context['data'] = user.in_role else:
else: raise Http404
raise Http404 return context
return context
@api_decor(without_auth=False, need_keys=['new_role_user_id', 'new_role_name'], method='GET', check_request=True)
@api_decor(without_auth=False, need_keys=['new_role_user_id', 'new_role_name'], method='GET', check_request=True) def new_role(request, context):
def new_role(request, context): # Присвоение роли в профиле руководителя
# Присвоение роли в профиле руководителя # TODO: Убрать присвоение
# TODO: Убрать присвоение if request.user.in_role == 'S' or request.user.in_role == 'A':
if request.user.in_role == 'S' or request.user.in_role == 'A': try:
try: user = User.objects.get(id=request.GET['new_role_user_id'])
user = User.objects.get(id=request.GET['new_role_user_id']) except User.DoesNotExist:
except User.DoesNotExist: raise Http404
raise Http404 else:
else: user.in_role = request.GET['new_role_name']
user.in_role = request.GET['new_role_name'] user.save()
user.save() context['code'] = '1'
context['code'] = '1' else:
else: raise Http404
raise Http404 return context
return context
@api_decor(without_auth=True)
@api_decor(without_auth=True) def check_active(request, context):
def check_active(request, context): # Проверка статуса активации пользователя
# Проверка статуса активации пользователя # Используется для доступов
# Используется для доступов if request.user.is_active and request.user.reg_status == '4':
if request.user.is_active and request.user.reg_status == '4': context['code'] = '1'
context['code'] = '1' else:
else: context['code'] = '0'
context['code'] = '0' return context
return context
@api_decor(without_auth=True)
@api_decor(without_auth=True) def reg_step(request, context):
def reg_step(request, context): # Процедура активации пользователя
# Процедура активации пользователя condition = condition_factory([
condition = condition_factory([ {'condition': request.POST.get('email'), 'error': u'Не верно передан email'},
{'condition': request.POST.get('email'), 'error': u'Не верно передан email'}, {'condition': request.POST.get('token'), 'error': u'Не верно передан токен'},
{'condition': request.POST.get('token'), 'error': u'Не верно передан токен'}, {'condition': request.POST.get('step'), 'error': u'Не верно передн этап'}, ])
{'condition': request.POST.get('step'), 'error': u'Не верно передн этап'}, ]) context['data'] = {}
context['data'] = {} if condition['code'] == '1':
if condition['code'] == '1': try:
try: email = request.POST['email'].lower()
email = request.POST['email'].lower() user = User.objects.get(email=email, token=request.POST['token'])
user = User.objects.get(email=email, token=request.POST['token']) except User.DoesNotExist:
except User.DoesNotExist: context['code'] = '0'
context['code'] = '0' context['data']['message'] = u'Запрашиваемый пользователь не найден'
context['data']['message'] = u'Запрашиваемый пользователь не найден' else:
else: context['code'] = '0'
context['code'] = '0' if request.POST['step'] == '1':
if request.POST['step'] == '1': # Проверка пароля
# Проверка пароля if request.POST.get('password1'):
if request.POST.get('password1'): if request.POST.get('password2'):
if request.POST.get('password2'): if request.POST['password1'] == request.POST['password2']:
if request.POST['password1'] == request.POST['password2']: ps, ms = check_set_password(request.POST['password1'])
ps, ms = check_set_password(request.POST['password1']) if not ps:
if not ps: context['data']['message'] = ms
context['data']['message'] = ms context['data']['inputs'] = ['password1', 'password2']
context['data']['inputs'] = ['password1', 'password2'] context['code'] = '0'
context['code'] = '0' else:
else: user.set_password(request.POST['password1'])
user.set_password(request.POST['password1']) user.reg_status = '2'
user.reg_status = '2' user.save()
user.save() context['code'] = '1'
context['code'] = '1' else:
else: context['data']['message'] = u'Введеные пароли не совпадают'
context['data']['message'] = u'Введеные пароли не совпадают' context['data']['inputs'] = ['password1', 'password2']
context['data']['inputs'] = ['password1', 'password2'] else:
else: context['data']['message'] = u'Повторите введеный пароль'
context['data']['message'] = u'Повторите введеный пароль' context['data']['inputs'] = ['password2']
context['data']['inputs'] = ['password2'] else:
else: context['data']['message'] = u'Введите пароль'
context['data']['message'] = u'Введите пароль' context['data']['inputs'] = ['password1']
context['data']['inputs'] = ['password1']
return context
return context
elif request.POST['step'] == '2':
elif request.POST['step'] == '2': # Проверка Телефона
# Проверка Телефона if request.POST.get('fname'):
if request.POST.get('fname'): if request.POST.get('name'):
if request.POST.get('name'): if request.POST.get('phone'):
if request.POST.get('phone'): user.phone = request.POST['phone']
user.phone = request.POST['phone'] user.name = request.POST['name']
user.name = request.POST['name'] user.fname = request.POST['fname']
user.fname = request.POST['fname'] user.city = request.POST['city']
user.city = request.POST['city'] if request.POST.get('bday'):
if request.POST.get('bday'): try:
try: user.b_day = datetime.datetime.strptime(request.POST['bday'], '%d.%m.%Y').date()
user.b_day = datetime.datetime.strptime(request.POST['bday'], '%d.%m.%Y').date() except ValueError:
except ValueError: user.b_day = datetime.datetime.strptime(request.POST['bday'], '%d.%m.%y').date()
user.b_day = datetime.datetime.strptime(request.POST['bday'], '%d.%m.%y').date() user.reg_status = '3'
user.reg_status = '3' user.save()
user.save() context['code'] = '1'
context['code'] = '1' else:
else: context['data']['message'] = u'Введите Телефон'
context['data']['message'] = u'Введите Телефон' context['data']['inputs'] = ['phone']
context['data']['inputs'] = ['phone'] else:
else: context['data']['message'] = u'Введите Имя'
context['data']['message'] = u'Введите Имя' context['data']['inputs'] = ['name']
context['data']['inputs'] = ['name'] else:
else: context['data']['message'] = u'Введите Фамилию'
context['data']['message'] = u'Введите Фамилию' context['data']['inputs'] = ['fname']
context['data']['inputs'] = ['fname']
elif request.POST['step'] == '3':
elif request.POST['step'] == '3': # Проверка фотографии
# Проверка фотографии if request.POST.get('avatar_code'):
if request.POST.get('avatar_code'): user.avatar = request.POST['avatar_code']
user.avatar = request.POST['avatar_code'] user.reg_status = '4'
user.reg_status = '4' user.is_active = True
user.is_active = True user.save()
user.save() user._set_to_sync()
user._set_to_sync() sent_good_activation(user)
sent_good_activation(user) context['code'] = '1'
context['code'] = '1'
else:
else: context['code'] = '0'
context['code'] = '0' context['data']['message'] = u'Этап активации указан не верно'
context['data']['message'] = u'Этап активации указан не верно' else:
else: context['data']['message'] = condition['response']
context['data']['message'] = condition['response'] context['code'] = '0'
context['code'] = '0' return context
return context
@api_decor(without_auth=True)
@api_decor(without_auth=True) def registration(request, context):
def registration(request, context): # Форма стандартногоз аведения пользователя
# Форма стандартногоз аведения пользователя condition = condition_factory([
condition = condition_factory([ {'condition': request.POST.get('email'), 'error': u'Вы не ввели email'}])
{'condition': request.POST.get('email'), 'error': u'Вы не ввели email'}])
if condition['code'] == '1':
if condition['code'] == '1': try:
try: email = request.POST['email'].lower()
email = request.POST['email'].lower() user = User.objects.get(email=email)
user = User.objects.get(email=email) except User.DoesNotExist:
except User.DoesNotExist: if request.POST.get('password1'):
if request.POST.get('password1'): if request.POST.get('password2'):
if request.POST.get('password2'): if request.POST['password1'] == request.POST['password2']:
if request.POST['password1'] == request.POST['password2']: ps, ms = check_set_password(request.POST['password1'])
ps, ms = check_set_password(request.POST['password1']) if not ps:
if not ps: context['response'] = ms
context['response'] = ms context['code'] = '0'
context['code'] = '0' else:
else: email = request.POST['email'].lower()
email = request.POST['email'].lower() user = User.objects.create_user(email=email)
user = User.objects.create_user(email=email) user.set_password(request.POST['password1'])
user.set_password(request.POST['password1']) user.reg_status = '2'
user.reg_status = '2' user.save()
user.save() context['code'] = '1'
context['code'] = '1' else:
else: context['response'] = u'Введеные пароли не совпадают'
context['response'] = u'Введеные пароли не совпадают' context['code'] = '0'
context['code'] = '0' else:
else: context['response'] = u'Повторите введеный пароль'
context['response'] = u'Повторите введеный пароль' context['code'] = '0'
context['code'] = '0' else:
else: context['response'] = u'Введите пароль'
context['response'] = u'Введите пароль' context['code'] = '0'
context['code'] = '0' else:
else: if user.is_active and user.reg_status == '4':
if user.is_active and user.reg_status == '4': context['code'] = '0'
context['code'] = '0' context[
context[ 'response'] = u'Пользователь с таким email уже существует и активен. ' \
'response'] = u'Пользователь с таким email уже существует и активен. ' \ u'Авторизуйтесь или попробуйте восстановить пароль.'
u'Авторизуйтесь или попробуйте восстановить пароль.' else:
else: context['code'] = '0'
context['code'] = '0' sent_registration(user, title=u'Повторное письмо активации')
sent_registration(user, title=u'Повторное письмо активации') context[
context[ 'response'] = u'Пользователь с таким email уже существует, но не был активирован. ' \
'response'] = u'Пользователь с таким email уже существует, но не был активирован. ' \ u'Вам было выслано повторное письмо активации.'
u'Вам было выслано повторное письмо активации.' else:
else: context['response'] = condition['response']
context['response'] = condition['response'] context['code'] = '0'
context['code'] = '0' return context
return context
@api_decor(without_auth=True)
@api_decor(without_auth=True) def auth_in(request, context):
def auth_in(request, context): # Авторизация
# Авторизация condition = condition_factory([
condition = condition_factory([ {'condition': request.POST.get('email'), 'error': u'Вы не ввели email'},
{'condition': request.POST.get('email'), 'error': u'Вы не ввели email'}, {'condition': request.POST.get('password'), 'error': u'Вы не ввели пароль'}
{'condition': request.POST.get('password'), 'error': u'Вы не ввели пароль'} ])
]) if condition['code'] == '1':
if condition['code'] == '1': email = request.POST['email'].lower()
email = request.POST['email'].lower() user = auth.authenticate(email=email, password=request.POST.get('password'))
user = auth.authenticate(email=email, password=request.POST.get('password'))
if user is not None:
if user is not None: if user.block:
context['code'] = '1' context['code'] = '0'
auth.login(request, user) context['data'] = []
user.set_request_data(request) context['data']['ERROR'] = 'BLOCK'
context['data']['data'] = UserRequest.objects.filter(user__email=email).count()
elif user is None:
context['response'] = u'По введенным данным пользователь не найден' else:
context['code'] = '0' context['code'] = '1'
auth.login(request, user)
else: user.set_request_data(request)
context['response'] = u"Не верные данные. Повторите попытку"
context['code'] = '0' elif user is None:
else: context['response'] = u'По введенным данным пользователь не найден'
context['response'] = condition['response'] context['code'] = '0'
context['code'] = '0'
return context else:
context['response'] = u"Не верные данные. Повторите попытку"
context['code'] = '0'
@api_decor(without_auth=True) else:
def auth_from_admin(request, context): context['response'] = condition['response']
# Авторизация context['code'] = '0'
condition = condition_factory([ return context
{'condition': request.POST.get('email'), 'error': u'Вы не ввели email'},
{'condition': request.POST.get('password'), 'error': u'Вы не ввели пароль'},
{'condition': request.POST.get('token'), 'error': u'Вы не ввели свой токен'}, @api_decor(without_auth=True)
{'condition': request.user.is_staff and request.user.is_admin, 'error': u'У вас нет прав'} def auth_from_admin(request, context):
]) # Авторизация
if condition['code'] == '1': condition = condition_factory([
email = request.POST['email'].lower() {'condition': request.POST.get('email'), 'error': u'Вы не ввели email'},
user = auth.authenticate(email=email, {'condition': request.POST.get('password'), 'error': u'Вы не ввели пароль'},
password=request.POST.get('password'), {'condition': request.POST.get('token'), 'error': u'Вы не ввели свой токен'},
token=request.POST.get('token')) {'condition': request.user.is_staff and request.user.is_admin, 'error': u'У вас нет прав'}
])
if user is not None: if condition['code'] == '1':
context['code'] = '1' email = request.POST['email'].lower()
auth.login(request, user) user = auth.authenticate(email=email,
request.user.change_token() password=request.POST.get('password'),
token=request.POST.get('token'))
elif user is None:
context['response'] = u'По введенным данным пользователь не найден' if user is not None:
context['code'] = '0' context['code'] = '1'
auth.login(request, user)
else: request.user.change_token()
context['response'] = u"Не верные данные. Повторите попытку"
context['code'] = '0' elif user is None:
else: context['response'] = u'По введенным данным пользователь не найден'
context['response'] = condition['response'] context['code'] = '0'
context['code'] = '0'
return context else:
context['response'] = u"Не верные данные. Повторите попытку"
context['code'] = '0'
@api_decor(without_auth=True) else:
def forgot(request, context): context['response'] = condition['response']
# Форма восстановления пароля context['code'] = '0'
condition = condition_factory([ return context
{'condition': request.GET.get('email'), 'error': u'Email не указан'},
{'condition': check_email(request.GET['email']), 'error': u'Email введен не верно'}
]) @api_decor(without_auth=True)
if condition['code'] == '1': def forgot(request, context):
try: # Форма восстановления пароля
email = request.GET['email'].lower() condition = condition_factory([
user = User.objects.get(email=email) {'condition': request.GET.get('email'), 'error': u'Email не указан'},
except User.DoesNotExist: {'condition': check_email(request.GET['email']), 'error': u'Email введен не верно'}
context['response'] = u'Пользователя с таким email не существует.' ])
context['code'] = '0' if condition['code'] == '1':
else: try:
user.change_token() email = request.GET['email'].lower()
sent_accept_forgot(user) user = User.objects.get(email=email)
context['code'] = '1' except User.DoesNotExist:
else: context['response'] = u'Пользователя с таким email не существует.'
context['response'] = condition['response'] context['code'] = '0'
context['code'] = '0' else:
return context user.change_token()
sent_accept_forgot(user)
context['code'] = '1'
else:
context['response'] = condition['response']
context['code'] = '0'
return context

@ -1,38 +1,38 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from access.models import User from access.models import User
from django.contrib.auth.forms import ReadOnlyPasswordHashField from django.contrib.auth.forms import ReadOnlyPasswordHashField
from django import forms from django import forms
class UserCreationForm(forms.ModelForm): class UserCreationForm(forms.ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput) password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput) password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)
class Meta: class Meta:
model = User model = User
fields = '__all__' fields = '__all__'
def clean_password2(self): def clean_password2(self):
password1 = self.cleaned_data.get("password1") password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2") password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2: if password1 and password2 and password1 != password2:
raise forms.ValidationError("Passwords don't match") raise forms.ValidationError("Passwords don't match")
return password2 return password2
def save(self, commit=True): def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False) user = super(UserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"]) user.set_password(self.cleaned_data["password1"])
if commit: if commit:
user.save() user.save()
return user return user
class UserChangeForm(forms.ModelForm): class UserChangeForm(forms.ModelForm):
password = ReadOnlyPasswordHashField() password = ReadOnlyPasswordHashField()
class Meta: class Meta:
model = User model = User
fields = '__all__' fields = '__all__'
def clean_password(self): def clean_password(self):
return self.initial["password"] return self.initial["password"]

@ -1,90 +1,90 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-03-18 16:46 # Generated by Django 1.9.2 on 2016-03-18 16:46
from __future__ import unicode_literals from __future__ import unicode_literals
import access.models import access.models
import datetime import datetime
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
import django.utils.timezone import django.utils.timezone
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='User', name='User',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')), ('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('deactivate', models.BooleanField(default=False, verbose_name='\u0423\u0432\u043e\u043b\u0438\u0442\u044c')), ('deactivate', models.BooleanField(default=False, verbose_name='\u0423\u0432\u043e\u043b\u0438\u0442\u044c')),
('email', models.EmailField(blank=True, db_index=True, editable=False, max_length=255, unique=True, verbose_name=b'email')), ('email', models.EmailField(blank=True, db_index=True, editable=False, max_length=255, unique=True, verbose_name=b'email')),
('changed_email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='\u042f\u0449\u0438\u043a \u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0443')), ('changed_email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='\u042f\u0449\u0438\u043a \u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0443')),
('phone', models.CharField(default=b'', max_length=255, verbose_name='\u0422\u0435\u043b\u0435\u0444\u043e\u043d')), ('phone', models.CharField(default=b'', max_length=255, verbose_name='\u0422\u0435\u043b\u0435\u0444\u043e\u043d')),
('back_phone', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041f\u0440\u0435\u0434\u0438\u0434\u0443\u0449\u0438\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d')), ('back_phone', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041f\u0440\u0435\u0434\u0438\u0434\u0443\u0449\u0438\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d')),
('status', models.CharField(choices=[(b'ON', b'on-line'), (b'OFF', b'off-line')], default=b'ON', max_length=9)), ('status', models.CharField(choices=[(b'ON', b'on-line'), (b'OFF', b'off-line')], default=b'ON', max_length=9)),
('in_role', models.CharField(choices=[(b'U', '\u0421\u0442\u0443\u0434\u0435\u043d\u0442 \u0448\u043a\u043e\u043b\u044b'), (b'T', '\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), (b'M', '\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440'), (b'S', '\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c'), (b'S2', '\u041e\u043a\u043e \u0441\u0430\u0443\u0440\u043e\u043d\u0430'), (b'A', '\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440')], default=b'U', max_length=2, verbose_name='\u0420\u043e\u043b\u044c')), ('in_role', models.CharField(choices=[(b'U', '\u0421\u0442\u0443\u0434\u0435\u043d\u0442 \u0448\u043a\u043e\u043b\u044b'), (b'T', '\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), (b'M', '\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440'), (b'S', '\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c'), (b'S2', '\u041e\u043a\u043e \u0441\u0430\u0443\u0440\u043e\u043d\u0430'), (b'A', '\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440')], default=b'U', max_length=2, verbose_name='\u0420\u043e\u043b\u044c')),
('city', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0413\u043e\u0440\u043e\u0434')), ('city', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0413\u043e\u0440\u043e\u0434')),
('b_day', models.DateField(blank=True, null=True, verbose_name='\u0414\u0435\u043d\u044c \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f')), ('b_day', models.DateField(blank=True, null=True, verbose_name='\u0414\u0435\u043d\u044c \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f')),
('token', models.CharField(blank=True, default=b'', max_length=255)), ('token', models.CharField(blank=True, default=b'', max_length=255)),
('activate_time', models.DateTimeField(default=access.models.get_activate_time, verbose_name='\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e')), ('activate_time', models.DateTimeField(default=access.models.get_activate_time, verbose_name='\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e')),
('reg_status', models.CharField(choices=[(b'1', b'\xd0\x9f\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c'), (b'2', b'\xd0\x9e \xd1\x81\xd0\xb5\xd0\xb1\xd0\xb5'), (b'3', b'\xd0\xa4\xd0\xbe\xd1\x82\xd0\xbe'), (b'4', b'\xd0\x97\xd0\xb0\xd0\xba\xd0\xbe\xd0\xbd\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb0')], default=b'1', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438')), ('reg_status', models.CharField(choices=[(b'1', b'\xd0\x9f\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c'), (b'2', b'\xd0\x9e \xd1\x81\xd0\xb5\xd0\xb1\xd0\xb5'), (b'3', b'\xd0\xa4\xd0\xbe\xd1\x82\xd0\xbe'), (b'4', b'\xd0\x97\xd0\xb0\xd0\xba\xd0\xbe\xd0\xbd\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb0')], default=b'1', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438')),
('is_active', models.BooleanField(default=False)), ('is_active', models.BooleanField(default=False)),
('is_admin', models.BooleanField(default=False)), ('is_admin', models.BooleanField(default=False)),
('is_staff', models.BooleanField(default=False)), ('is_staff', models.BooleanField(default=False)),
('avatar', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u0430\u0432\u0430\u0442\u0430\u0440\u0430')), ('avatar', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u0430\u0432\u0430\u0442\u0430\u0440\u0430')),
('in_avatar', models.ImageField(blank=True, editable=False, null=True, upload_to=b'', verbose_name='\u041d\u0430\u0448 \u0430\u0432\u0430\u0442\u0430\u0440')), ('in_avatar', models.ImageField(blank=True, editable=False, null=True, upload_to=b'', verbose_name='\u041d\u0430\u0448 \u0430\u0432\u0430\u0442\u0430\u0440')),
('fname', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0424\u0430\u043c\u0438\u043b\u0438\u044f')), ('fname', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0424\u0430\u043c\u0438\u043b\u0438\u044f')),
('name', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0418\u043c\u044f')), ('name', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0418\u043c\u044f')),
('oname', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e')), ('oname', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e')),
('skype', models.CharField(blank=True, default=b'', max_length=300)), ('skype', models.CharField(blank=True, default=b'', max_length=300)),
('facebook', models.CharField(blank=True, default=b'', max_length=255)), ('facebook', models.CharField(blank=True, default=b'', max_length=255)),
('vk', models.CharField(blank=True, default=b'', max_length=255)), ('vk', models.CharField(blank=True, default=b'', max_length=255)),
('linkedin', models.CharField(blank=True, default=b'', max_length=255)), ('linkedin', models.CharField(blank=True, default=b'', max_length=255)),
('odnoklassniki', models.CharField(blank=True, default=b'', max_length=255)), ('odnoklassniki', models.CharField(blank=True, default=b'', max_length=255)),
('date_joined', models.DateTimeField(default=datetime.datetime.now)), ('date_joined', models.DateTimeField(default=datetime.datetime.now)),
], ],
options={ options={
'verbose_name': '\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f', 'verbose_name': '\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f',
'verbose_name_plural': '\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438', 'verbose_name_plural': '\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='ActionJ', name='ActionJ',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('a_type', models.CharField(choices=[(b'B', b'b-default'), (b'P', b'b-primary'), (b'S', b'b-success'), (b'I', b'b-info'), (b'W', b'b-warning'), (b'D', b'b-danger')], default=b'B', max_length=1, verbose_name='\u0422\u0438\u043f \u0441\u043e\u0431\u044b\u0442\u0438\u044f')), ('a_type', models.CharField(choices=[(b'B', b'b-default'), (b'P', b'b-primary'), (b'S', b'b-success'), (b'I', b'b-info'), (b'W', b'b-warning'), (b'D', b'b-danger')], default=b'B', max_length=1, verbose_name='\u0422\u0438\u043f \u0441\u043e\u0431\u044b\u0442\u0438\u044f')),
('place', models.CharField(max_length=100, verbose_name='\u041c\u0435\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f')), ('place', models.CharField(max_length=100, verbose_name='\u041c\u0435\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f')),
('date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f')), ('date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f')),
('text', models.TextField(verbose_name='\u0422\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f')), ('text', models.TextField(verbose_name='\u0422\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f')),
('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')),
], ],
options={ options={
'verbose_name': '\u0416\u0443\u0440\u043d\u0430\u043b \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438', 'verbose_name': '\u0416\u0443\u0440\u043d\u0430\u043b \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438',
'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b\u044b \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439', 'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b\u044b \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Subscription', name='Subscription',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('news', models.BooleanField(default=True, verbose_name='\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0438')), ('news', models.BooleanField(default=True, verbose_name='\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0438')),
('teacher', models.BooleanField(default=True, verbose_name='\u041e\u0442\u0432\u0435\u0442\u044b \u043f\u0440\u0435\u043f\u043e\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044f')), ('teacher', models.BooleanField(default=True, verbose_name='\u041e\u0442\u0432\u0435\u0442\u044b \u043f\u0440\u0435\u043f\u043e\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044f')),
('new_comments', models.BooleanField(default=True, verbose_name='\u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438')), ('new_comments', models.BooleanField(default=True, verbose_name='\u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438')),
('send_sms', models.BooleanField(default=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c sms')), ('send_sms', models.BooleanField(default=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c sms')),
('courses', models.BooleanField(default=True, verbose_name='\u041d\u043e\u0432\u044b\u0435 \u043a\u0443\u0440\u0441\u044b')), ('courses', models.BooleanField(default=True, verbose_name='\u041d\u043e\u0432\u044b\u0435 \u043a\u0443\u0440\u0441\u044b')),
('owner', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='rights_owner', to=settings.AUTH_USER_MODEL, verbose_name='\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446')), ('owner', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='rights_owner', to=settings.AUTH_USER_MODEL, verbose_name='\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446')),
], ],
options={ options={
'verbose_name': '\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430', 'verbose_name': '\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430',
'verbose_name_plural': '\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0438', 'verbose_name_plural': '\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0438',
}, },
), ),
] ]

@ -1,20 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-04-05 20:45 # Generated by Django 1.9.2 on 2016-04-05 20:45
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0001_initial'), ('access', '0001_initial'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='in_role', name='in_role',
field=models.CharField(choices=[(b'U', '\u0421\u0442\u0443\u0434\u0435\u043d\u0442 \u0448\u043a\u043e\u043b\u044b'), (b'T', '\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), (b'M', '\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440'), (b'S', '\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c'), (b'S2', '\u041e\u043a\u043e \u0441\u0430\u0443\u0440\u043e\u043d\u0430'), (b'A', '\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440'), (b'Ts', '\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c')], default=b'U', max_length=2, verbose_name='\u0420\u043e\u043b\u044c'), field=models.CharField(choices=[(b'U', '\u0421\u0442\u0443\u0434\u0435\u043d\u0442 \u0448\u043a\u043e\u043b\u044b'), (b'T', '\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), (b'M', '\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440'), (b'S', '\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c'), (b'S2', '\u041e\u043a\u043e \u0441\u0430\u0443\u0440\u043e\u043d\u0430'), (b'A', '\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440'), (b'Ts', '\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c')], default=b'U', max_length=2, verbose_name='\u0420\u043e\u043b\u044c'),
), ),
] ]

@ -1,20 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-12 21:45 # Generated by Django 1.9.5 on 2016-04-12 21:45
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0002_auto_20160405_2045'), ('access', '0002_auto_20160405_2045'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='delay', name='delay',
field=models.BooleanField(default=False, verbose_name='\u041c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438'), field=models.BooleanField(default=False, verbose_name='\u041c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438'),
), ),
] ]

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-12 21:52 # Generated by Django 1.9.5 on 2016-04-12 21:52
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
import redactor.fields import redactor.fields
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0003_user_delay'), ('access', '0003_user_delay'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='delay_description', name='delay_description',
field=redactor.fields.RedactorField(blank=True, verbose_name='\u041f\u043e\u0432\u043e\u0434 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u043a\u0438'), field=redactor.fields.RedactorField(blank=True, verbose_name='\u041f\u043e\u0432\u043e\u0434 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u043a\u0438'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay', name='delay',
field=models.BooleanField(default=False, help_text='\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438', verbose_name='\u041c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438'), field=models.BooleanField(default=False, help_text='\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438', verbose_name='\u041c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438'),
), ),
] ]

@ -1,20 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-14 15:27 # Generated by Django 1.9.5 on 2016-04-14 15:27
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0004_auto_20160412_2152'), ('access', '0004_auto_20160412_2152'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_description', name='delay_description',
field=models.TextField(blank=True, verbose_name='\u041f\u043e\u0432\u043e\u0434 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u043a\u0438'), field=models.TextField(blank=True, verbose_name='\u041f\u043e\u0432\u043e\u0434 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u043a\u0438'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-14 15:42 # Generated by Django 1.9.5 on 2016-04-14 15:42
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0005_auto_20160414_1527'), ('access', '0005_auto_20160414_1527'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.TextField(blank=True, default=datetime.datetime(2016, 4, 14, 15, 42, 6, 457603), verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.TextField(blank=True, default=datetime.datetime(2016, 4, 14, 15, 42, 6, 457603), verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-14 15:43 # Generated by Django 1.9.5 on 2016-04-14 15:43
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0006_user_delay_date'), ('access', '0006_user_delay_date'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.TextField(blank=True, default=datetime.datetime(2016, 4, 14, 15, 43, 33, 80232), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.TextField(blank=True, default=datetime.datetime(2016, 4, 14, 15, 43, 33, 80232), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-14 15:47 # Generated by Django 1.9.5 on 2016-04-14 15:47
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0007_auto_20160414_1543'), ('access', '0007_auto_20160414_1543'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 14, 15, 47, 18, 142514), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 14, 15, 47, 18, 142514), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-14 19:41 # Generated by Django 1.9.5 on 2016-04-14 19:41
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0008_auto_20160414_1547'), ('access', '0008_auto_20160414_1547'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 14, 19, 41, 21, 863845), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 14, 19, 41, 21, 863845), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-14 19:44 # Generated by Django 1.9.5 on 2016-04-14 19:44
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0009_auto_20160414_1941'), ('access', '0009_auto_20160414_1941'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 14, 19, 44, 42, 129160), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 14, 19, 44, 42, 129160), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-20 17:49 # Generated by Django 1.9.5 on 2016-04-20 17:49
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0010_auto_20160414_1944'), ('access', '0010_auto_20160414_1944'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 20, 17, 49, 55, 401859), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 20, 17, 49, 55, 401859), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-20 18:19 # Generated by Django 1.9.5 on 2016-04-20 18:19
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0011_auto_20160420_1749'), ('access', '0011_auto_20160420_1749'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 20, 18, 19, 6, 238659), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 20, 18, 19, 6, 238659), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-21 18:08 # Generated by Django 1.9.5 on 2016-04-21 18:08
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0012_auto_20160420_1819'), ('access', '0012_auto_20160420_1819'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='interactive_key', name='interactive_key',
field=models.CharField(blank=True, max_length=255, verbose_name='\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u044b\u0439 \u043a\u043b\u044e\u0447'), field=models.CharField(blank=True, max_length=255, verbose_name='\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u044b\u0439 \u043a\u043b\u044e\u0447'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 18, 8, 50, 535390), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 18, 8, 50, 535390), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-21 18:24 # Generated by Django 1.9.5 on 2016-04-21 18:24
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0013_auto_20160421_1808'), ('access', '0013_auto_20160421_1808'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 18, 24, 46, 904871), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 18, 24, 46, 904871), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-21 18:29 # Generated by Django 1.9.5 on 2016-04-21 18:29
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0014_auto_20160421_1824'), ('access', '0014_auto_20160421_1824'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 18, 29, 23, 185173), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 18, 29, 23, 185173), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-21 20:09 # Generated by Django 1.9.5 on 2016-04-21 20:09
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0015_auto_20160421_1829'), ('access', '0015_auto_20160421_1829'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='private', name='private',
field=models.CharField(choices=[(b'A', b'\xd0\x92\xd1\x81\xd0\xb5\xd0\xbc\xd1\x83 \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd0\xbd\xd0\xb5\xd1\x82\xd1\x83'), (b'U', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f\xd0\xbc lms'), (b'L', b'\xd0\x9f\xd0\xbe \xd0\xbf\xd1\x80\xd1\x8f\xd0\xbc\xd0\xbe\xd0\xb9 \xd1\x81\xd1\x81\xd1\x8b\xd0\xbb\xd0\xba\xd0\xb5'), (b'B', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbc\xd0\xbd\xd0\xb5')], default=b'A', max_length=1, verbose_name='\u041f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044f'), field=models.CharField(choices=[(b'A', b'\xd0\x92\xd1\x81\xd0\xb5\xd0\xbc\xd1\x83 \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd0\xbd\xd0\xb5\xd1\x82\xd1\x83'), (b'U', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f\xd0\xbc lms'), (b'L', b'\xd0\x9f\xd0\xbe \xd0\xbf\xd1\x80\xd1\x8f\xd0\xbc\xd0\xbe\xd0\xb9 \xd1\x81\xd1\x81\xd1\x8b\xd0\xbb\xd0\xba\xd0\xb5'), (b'B', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbc\xd0\xbd\xd0\xb5')], default=b'A', max_length=1, verbose_name='\u041f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044f'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 20, 9, 41, 221779), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 20, 9, 41, 221779), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-21 21:35 # Generated by Django 1.9.5 on 2016-04-21 21:35
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0016_auto_20160421_2009'), ('access', '0016_auto_20160421_2009'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='last_time', name='last_time',
field=models.DateTimeField(default=datetime.datetime.now, verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c'), field=models.DateTimeField(default=datetime.datetime.now, verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 21, 35, 2, 761309), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 21, 35, 2, 761309), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-22 15:55 # Generated by Django 1.9.5 on 2016-04-22 15:55
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0017_auto_20160421_2135'), ('access', '0017_auto_20160421_2135'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='unique_role', name='unique_role',
field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u043e\u043b\u044c'), field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u043e\u043b\u044c'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 22, 15, 55, 55, 944230), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 22, 15, 55, 55, 944230), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-04-24 16:46 # Generated by Django 1.9.2 on 2016-04-24 16:46
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0018_auto_20160422_1555'), ('access', '0018_auto_20160422_1555'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='customer', name='customer',
field=models.BooleanField(default=False, verbose_name='\u041f\u043e\u043a\u0443\u043f\u0430\u0442\u0435\u043b\u044c'), field=models.BooleanField(default=False, verbose_name='\u041f\u043e\u043a\u0443\u043f\u0430\u0442\u0435\u043b\u044c'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 24, 16, 46, 31, 25686), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 24, 16, 46, 31, 25686), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-06 13:03 # Generated by Django 1.9.5 on 2016-05-06 13:03
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0019_auto_20160424_1646'), ('access', '0019_auto_20160424_1646'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 6, 13, 3, 19, 582728), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 6, 13, 3, 19, 582728), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,31 +1,31 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-09 13:31 # Generated by Django 1.9.5 on 2016-05-09 13:31
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0020_auto_20160506_1303'), ('access', '0020_auto_20160506_1303'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='refer', name='refer',
field=models.CharField(choices=[(b'S', b'\xd0\xa1\xd0\xb0\xd0\xbc \xd0\xb7\xd0\xb0\xd1\x80\xd0\xb5\xd0\xb3\xd0\xb8\xd1\x81\xd1\x82\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbb\xd1\x81\xd1\x8f'), (b'B', b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xbb\xd0\xb5\xd1\x87\xd0\xb5\xd0\xbd')], default=b'S', max_length=1, null=True, verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a'), field=models.CharField(choices=[(b'S', b'\xd0\xa1\xd0\xb0\xd0\xbc \xd0\xb7\xd0\xb0\xd1\x80\xd0\xb5\xd0\xb3\xd0\xb8\xd1\x81\xd1\x82\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbb\xd1\x81\xd1\x8f'), (b'B', b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xbb\xd0\xb5\xd1\x87\xd0\xb5\xd0\xbd')], default=b'S', max_length=1, null=True, verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a'),
), ),
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='refer_source', name='refer_source',
field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f'), field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 13, 31, 31, 19346), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 13, 31, 31, 19346), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,41 +1,41 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-09 14:01 # Generated by Django 1.9.5 on 2016-05-09 14:01
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0021_auto_20160509_1331'), ('access', '0021_auto_20160509_1331'),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='TrafSource', name='TrafSource',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('on', models.BooleanField(default=True, verbose_name='\u0410\u0442\u0438\u0432\u0435\u043d')), ('on', models.BooleanField(default=True, verbose_name='\u0410\u0442\u0438\u0432\u0435\u043d')),
('url', models.URLField(verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0440\u0430\u0444\u0438\u043a\u0430')), ('url', models.URLField(verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0440\u0430\u0444\u0438\u043a\u0430')),
('token', models.CharField(max_length=255, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430')), ('token', models.CharField(max_length=255, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430')),
('live_time', models.IntegerField(blank=True, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0442\u043e\u043a\u0435\u043d\u0430')), ('live_time', models.IntegerField(blank=True, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0442\u043e\u043a\u0435\u043d\u0430')),
('date_start', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430')), ('date_start', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430')),
], ],
options={ options={
'verbose_name': '\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0440\u0430\u0444\u0438\u043a\u0430', 'verbose_name': '\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0440\u0430\u0444\u0438\u043a\u0430',
'verbose_name_plural': '\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430', 'verbose_name_plural': '\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430',
}, },
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 14, 1, 37, 826573), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 14, 1, 37, 826573), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='refer', name='refer',
field=models.CharField(choices=[(b'S', b'\xd0\x9e\xd1\x80\xd0\xb3\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x87\xd0\xbd\xd0\xbe'), (b'B', b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xbb\xd0\xb5\xd1\x87\xd0\xb5\xd0\xbd')], default=b'S', max_length=1, null=True, verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a'), field=models.CharField(choices=[(b'S', b'\xd0\x9e\xd1\x80\xd0\xb3\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x87\xd0\xbd\xd0\xbe'), (b'B', b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xbb\xd0\xb5\xd1\x87\xd0\xb5\xd0\xbd')], default=b'S', max_length=1, null=True, verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a'),
), ),
] ]

@ -1,38 +1,38 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-09 14:08 # Generated by Django 1.9.5 on 2016-05-09 14:08
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0022_auto_20160509_1401'), ('access', '0022_auto_20160509_1401'),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='TrafHistory', name='TrafHistory',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('action', models.CharField(choices=[(b'G', b'\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x83\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85'), (b'C', b'\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f'), (b'O', b'\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd1\x81\xd1\x87\xd0\xb5\xd1\x82\xd0\xb0')], max_length=1, verbose_name='\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435')), ('action', models.CharField(choices=[(b'G', b'\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x83\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85'), (b'C', b'\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f'), (b'O', b'\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd1\x81\xd1\x87\xd0\xb5\xd1\x82\xd0\xb0')], max_length=1, verbose_name='\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435')),
('data', models.TextField(verbose_name='\u0414\u0430\u043d\u043d\u044b\u0435 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435')), ('data', models.TextField(verbose_name='\u0414\u0430\u043d\u043d\u044b\u0435 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435')),
('result', models.BooleanField(default=False, verbose_name='\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430')), ('result', models.BooleanField(default=False, verbose_name='\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430')),
('result_description', models.CharField(blank=True, max_length=255, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430')), ('result_description', models.CharField(blank=True, max_length=255, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430')),
('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f')), ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f')),
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='access.TrafSource', verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0430')), ('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='access.TrafSource', verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0430')),
], ],
options={ options={
'verbose_name': '\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430', 'verbose_name': '\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430',
'verbose_name_plural': '\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432', 'verbose_name_plural': '\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432',
}, },
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 14, 8, 4, 599702), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 14, 8, 4, 599702), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,61 +1,61 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-09 15:37 # Generated by Django 1.9.5 on 2016-05-09 15:37
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0023_auto_20160509_1408'), ('access', '0023_auto_20160509_1408'),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='TrafTokenHistory', name='TrafTokenHistory',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('token', models.CharField(editable=False, max_length=255, verbose_name='\u0422\u043e\u043a\u0435\u043d')), ('token', models.CharField(editable=False, max_length=255, verbose_name='\u0422\u043e\u043a\u0435\u043d')),
('live_time', models.IntegerField(editable=False, help_text='\u0412 \u0447\u0430\u0441\u0430\u0445', verbose_name='\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438')), ('live_time', models.IntegerField(editable=False, help_text='\u0412 \u0447\u0430\u0441\u0430\u0445', verbose_name='\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438')),
('date_start', models.DateTimeField(editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0442\u043e\u043a\u0435\u043d\u0430')), ('date_start', models.DateTimeField(editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0442\u043e\u043a\u0435\u043d\u0430')),
('date_end', models.DateTimeField(editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f')), ('date_end', models.DateTimeField(editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f')),
], ],
options={ options={
'verbose_name': '\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043c\u0435\u043d\u044b \u0442\u043e\u043a\u0435\u043d\u0430', 'verbose_name': '\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043c\u0435\u043d\u044b \u0442\u043e\u043a\u0435\u043d\u0430',
'verbose_name_plural': '\u0418\u0441\u0442\u043e\u0440\u0438\u0438 \u0441\u043c\u0435\u043d\u044b \u0442\u043e\u043a\u0435\u043d\u043e\u0432', 'verbose_name_plural': '\u0418\u0441\u0442\u043e\u0440\u0438\u0438 \u0441\u043c\u0435\u043d\u044b \u0442\u043e\u043a\u0435\u043d\u043e\u0432',
}, },
), ),
migrations.AddField( migrations.AddField(
model_name='trafhistory', model_name='trafhistory',
name='token', name='token',
field=models.CharField(max_length=255, null=True, verbose_name='\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0442\u043e\u043a\u0435\u043d'), field=models.CharField(max_length=255, null=True, verbose_name='\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0442\u043e\u043a\u0435\u043d'),
), ),
migrations.AddField( migrations.AddField(
model_name='trafsource', model_name='trafsource',
name='token_start', name='token_start',
field=models.DateTimeField(editable=False, null=True, verbose_name='\u0422\u043e\u0447\u043a\u0430 \u043e\u0442\u0441\u0447\u0435\u0442\u0430 \u0436\u0438\u0437\u043d\u0438 \u0442\u043e\u043a\u0435\u043d\u0430'), field=models.DateTimeField(editable=False, null=True, verbose_name='\u0422\u043e\u0447\u043a\u0430 \u043e\u0442\u0441\u0447\u0435\u0442\u0430 \u0436\u0438\u0437\u043d\u0438 \u0442\u043e\u043a\u0435\u043d\u0430'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='trafsource', model_name='trafsource',
name='live_time', name='live_time',
field=models.IntegerField(blank=True, help_text='\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0430\u0445. \u043f\u0443\u0441\u0442\u043e\u0435 \u043f\u043e\u043b\u0435 - \u043f\u043e\u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e', verbose_name='\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0442\u043e\u043a\u0435\u043d\u0430'), field=models.IntegerField(blank=True, help_text='\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0430\u0445. \u043f\u0443\u0441\u0442\u043e\u0435 \u043f\u043e\u043b\u0435 - \u043f\u043e\u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e', verbose_name='\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0442\u043e\u043a\u0435\u043d\u0430'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='trafsource', model_name='trafsource',
name='token', name='token',
field=models.CharField(editable=False, max_length=255, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), field=models.CharField(editable=False, max_length=255, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 15, 37, 34, 495507), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 15, 37, 34, 495507), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
migrations.AddField( migrations.AddField(
model_name='traftokenhistory', model_name='traftokenhistory',
name='sources', name='sources',
field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='access.TrafSource', verbose_name='\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a'), field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='access.TrafSource', verbose_name='\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a'),
), ),
] ]

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-09 15:39 # Generated by Django 1.9.5 on 2016-05-09 15:39
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0024_auto_20160509_1537'), ('access', '0024_auto_20160509_1537'),
] ]
operations = [ operations = [
migrations.RenameField( migrations.RenameField(
model_name='traftokenhistory', model_name='traftokenhistory',
old_name='sources', old_name='sources',
new_name='source', new_name='source',
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 15, 39, 30, 69095), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 15, 39, 30, 69095), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-09 18:03 # Generated by Django 1.9.5 on 2016-05-09 18:03
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0025_auto_20160509_1539'), ('access', '0025_auto_20160509_1539'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='trafsource', model_name='trafsource',
name='live_time', name='live_time',
field=models.IntegerField(blank=True, help_text='\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0430\u0445. \u043f\u0443\u0441\u0442\u043e\u0435 \u043f\u043e\u043b\u0435 - \u043f\u043e\u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e', null=True, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0442\u043e\u043a\u0435\u043d\u0430'), field=models.IntegerField(blank=True, help_text='\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0430\u0445. \u043f\u0443\u0441\u0442\u043e\u0435 \u043f\u043e\u043b\u0435 - \u043f\u043e\u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e', null=True, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0442\u043e\u043a\u0435\u043d\u0430'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 18, 3, 57, 586863), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 18, 3, 57, 586863), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,46 +1,46 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-10 18:23 # Generated by Django 1.9.5 on 2016-05-10 18:23
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0026_auto_20160509_1803'), ('access', '0026_auto_20160509_1803'),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Questionnaire', name='Questionnaire',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('fully', models.CharField(choices=[(b'1', b'\xd0\xa4\xd0\xbb\xd0\xb0\xd0\xb3\xd0\xb8'), (b'2', b'\xd0\xa1\xd0\xb2\xd0\xbe\xd0\xb1\xd0\xbe\xd0\xb4\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xbe\xd1\x82\xd0\xb2\xd0\xb5\xd1\x82'), (b'3', b'\xd0\x97\xd0\xb0\xd0\xb2\xd0\xb5\xd1\x80\xd1\x88\xd0\xb5\xd0\xbd\xd0\xbe')], default=1, max_length=1, verbose_name='\u0421\u0442\u0430\u0434\u0438\u044f')), ('fully', models.CharField(choices=[(b'1', b'\xd0\xa4\xd0\xbb\xd0\xb0\xd0\xb3\xd0\xb8'), (b'2', b'\xd0\xa1\xd0\xb2\xd0\xbe\xd0\xb1\xd0\xbe\xd0\xb4\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xbe\xd1\x82\xd0\xb2\xd0\xb5\xd1\x82'), (b'3', b'\xd0\x97\xd0\xb0\xd0\xb2\xd0\xb5\xd1\x80\xd1\x88\xd0\xb5\xd0\xbd\xd0\xbe')], default=1, max_length=1, verbose_name='\u0421\u0442\u0430\u0434\u0438\u044f')),
('steps', models.IntegerField(default=0, help_text='\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f', verbose_name='\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u043e\u0432')), ('steps', models.IntegerField(default=0, help_text='\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f', verbose_name='\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u043e\u0432')),
('male', models.CharField(blank=True, choices=[(b'M', b'\xd0\x9c\xd1\x83\xd0\xb6\xd1\x87\xd0\xb8\xd0\xbd\xd0\xb0'), (b'W', b'\xd0\x96\xd0\xb5\xd0\xbd\xd1\x89\xd0\xb8\xd0\xbd\xd0\xb0')], max_length=1, null=True, verbose_name='\u041f\u043e\u043b')), ('male', models.CharField(blank=True, choices=[(b'M', b'\xd0\x9c\xd1\x83\xd0\xb6\xd1\x87\xd0\xb8\xd0\xbd\xd0\xb0'), (b'W', b'\xd0\x96\xd0\xb5\xd0\xbd\xd1\x89\xd0\xb8\xd0\xbd\xd0\xb0')], max_length=1, null=True, verbose_name='\u041f\u043e\u043b')),
('city', models.CharField(blank=True, max_length=255, null=True, verbose_name='\u0413\u043e\u0440\u043e\u0434')), ('city', models.CharField(blank=True, max_length=255, null=True, verbose_name='\u0413\u043e\u0440\u043e\u0434')),
('experience', models.CharField(blank=True, choices=[(b'1', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbd\xd0\xb0\xd1\x87\xd0\xb8\xd0\xbd\xd0\xb0\xd1\x8e'), (b'2', b'\xd0\x94\xd0\xb0, \xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb5\xd0\xb5 \xd0\xb3\xd0\xbe\xd0\xb4\xd0\xb0'), (b'3', b'\xd0\x94\xd0\xb0, 1-2 \xd0\xb3\xd0\xbe\xd0\xb4\xd0\xb0'), (b'4', b'\xd0\x94\xd0\xb0, \xd0\xb1\xd0\xbe\xd0\xbb\xd0\xb5\xd0\xb5 2 \xd0\xbb\xd0\xb5\xd1\x82')], max_length=1, null=True, verbose_name='\u041e\u043f\u044b\u0442')), ('experience', models.CharField(blank=True, choices=[(b'1', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbd\xd0\xb0\xd1\x87\xd0\xb8\xd0\xbd\xd0\xb0\xd1\x8e'), (b'2', b'\xd0\x94\xd0\xb0, \xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb5\xd0\xb5 \xd0\xb3\xd0\xbe\xd0\xb4\xd0\xb0'), (b'3', b'\xd0\x94\xd0\xb0, 1-2 \xd0\xb3\xd0\xbe\xd0\xb4\xd0\xb0'), (b'4', b'\xd0\x94\xd0\xb0, \xd0\xb1\xd0\xbe\xd0\xbb\xd0\xb5\xd0\xb5 2 \xd0\xbb\xd0\xb5\xd1\x82')], max_length=1, null=True, verbose_name='\u041e\u043f\u044b\u0442')),
('aim', models.CharField(blank=True, choices=[(b'1', b'\xd0\x94\xd0\xb0, \xd0\xb2 \xd0\xbe\xd1\x84\xd0\xb8\xd1\x81\xd0\xb5'), (b'2', b'\xd0\x94\xd0\xb0, \xd1\x81\xd0\xb2\xd0\xbe\xd0\xb9 \xd0\xbf\xd1\x80\xd0\xbe\xd0\xb5\xd0\xba\xd1\x82'), (b'3', b'\xd0\x94\xd0\xb0, \xd0\xbd\xd0\xb0 \xd1\x84\xd1\x80\xd0\xb8\xd0\xbb\xd0\xb0\xd0\xbd\xd1\x81\xd0\xb5'), (b'4', b'\xd0\x9d\xd0\xb5\xd1\x82, \xd0\xb8\xd0\xb7\xd1\x83\xd1\x87\xd0\xb0\xd1\x8e \xd0\xb4\xd0\xbb\xd1\x8f \xd1\x81\xd0\xb5\xd0\xb1\xd1\x8f')], max_length=1, null=True, verbose_name='\u0426\u0435\u043b\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f')), ('aim', models.CharField(blank=True, choices=[(b'1', b'\xd0\x94\xd0\xb0, \xd0\xb2 \xd0\xbe\xd1\x84\xd0\xb8\xd1\x81\xd0\xb5'), (b'2', b'\xd0\x94\xd0\xb0, \xd1\x81\xd0\xb2\xd0\xbe\xd0\xb9 \xd0\xbf\xd1\x80\xd0\xbe\xd0\xb5\xd0\xba\xd1\x82'), (b'3', b'\xd0\x94\xd0\xb0, \xd0\xbd\xd0\xb0 \xd1\x84\xd1\x80\xd0\xb8\xd0\xbb\xd0\xb0\xd0\xbd\xd1\x81\xd0\xb5'), (b'4', b'\xd0\x9d\xd0\xb5\xd1\x82, \xd0\xb8\xd0\xb7\xd1\x83\xd1\x87\xd0\xb0\xd1\x8e \xd0\xb4\xd0\xbb\xd1\x8f \xd1\x81\xd0\xb5\xd0\xb1\xd1\x8f')], max_length=1, null=True, verbose_name='\u0426\u0435\u043b\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f')),
('age', models.CharField(blank=True, choices=[(b'1', b'\xd0\xb4\xd0\xbe 18'), (b'2', b'18-25'), (b'3', b'25-30'), (b'4', b'30-40'), (b'5', b'\xd0\xb1\xd0\xbe\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 40')], max_length=1, null=True, verbose_name='\u0412\u043e\u0437\u0440\u0430\u0441\u0442')), ('age', models.CharField(blank=True, choices=[(b'1', b'\xd0\xb4\xd0\xbe 18'), (b'2', b'18-25'), (b'3', b'25-30'), (b'4', b'30-40'), (b'5', b'\xd0\xb1\xd0\xbe\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 40')], max_length=1, null=True, verbose_name='\u0412\u043e\u0437\u0440\u0430\u0441\u0442')),
('description', models.TextField(blank=True, verbose_name='\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b \u043e\u0442\u0432\u0435\u0442')), ('description', models.TextField(blank=True, verbose_name='\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b \u043e\u0442\u0432\u0435\u0442')),
], ],
options={ options={
'verbose_name': '\u0410\u043a\u0435\u0442\u0430', 'verbose_name': '\u0410\u043a\u0435\u0442\u0430',
'verbose_name_plural': '\u0410\u043d\u043a\u0435\u0442\u044b', 'verbose_name_plural': '\u0410\u043d\u043a\u0435\u0442\u044b',
}, },
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 10, 18, 23, 39, 577802), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 10, 18, 23, 39, 577802), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
migrations.AddField( migrations.AddField(
model_name='questionnaire', model_name='questionnaire',
name='user', name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c'), field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c'),
), ),
] ]

@ -1,61 +1,61 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-05-26 14:27 # Generated by Django 1.9.2 on 2016-05-26 14:27
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0027_auto_20160510_1823'), ('access', '0027_auto_20160510_1823'),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Document', name='Document',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')), ('title', models.CharField(max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')),
('status', models.CharField(choices=[(b'W', '\u041d\u0430 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0438'), (b'F', '\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d')], default=b'W', editable=False, max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')), ('status', models.CharField(choices=[(b'W', '\u041d\u0430 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0438'), (b'F', '\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d')], default=b'W', editable=False, max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')),
('date', models.DateField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f')), ('date', models.DateField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f')),
('in_date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f')), ('in_date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f')),
], ],
options={ options={
'verbose_name': '\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442', 'verbose_name': '\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442',
'verbose_name_plural': '\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b', 'verbose_name_plural': '\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='DocumentScan', name='DocumentScan',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('page', models.CharField(max_length=255, verbose_name='\u2116 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b')), ('page', models.CharField(max_length=255, verbose_name='\u2116 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b')),
('file', models.ImageField(upload_to=b'documents', verbose_name='\u0421\u043a\u0430\u043d')), ('file', models.ImageField(upload_to=b'documents', verbose_name='\u0421\u043a\u0430\u043d')),
('date', models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f')), ('date', models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f')),
], ],
options={ options={
'ordering': ['page'], 'ordering': ['page'],
'verbose_name': '\u0421\u043a\u0430\u043d \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430', 'verbose_name': '\u0421\u043a\u0430\u043d \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430',
'verbose_name_plural': '\u0421\u043a\u0430\u043d\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432', 'verbose_name_plural': '\u0421\u043a\u0430\u043d\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432',
}, },
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 26, 14, 27, 8, 278824), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 26, 14, 27, 8, 278824), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
migrations.AddField( migrations.AddField(
model_name='document', model_name='document',
name='scans', name='scans',
field=models.ManyToManyField(blank=True, to='access.DocumentScan', verbose_name='\u0421\u043a\u0430\u043d\u044b'), field=models.ManyToManyField(blank=True, to='access.DocumentScan', verbose_name='\u0421\u043a\u0430\u043d\u044b'),
), ),
migrations.AddField( migrations.AddField(
model_name='document', model_name='document',
name='user', name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c'), field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c'),
), ),
] ]

@ -1,38 +1,38 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-05-26 14:35 # Generated by Django 1.9.2 on 2016-05-26 14:35
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0028_auto_20160526_1427'), ('access', '0028_auto_20160526_1427'),
] ]
operations = [ operations = [
migrations.RemoveField( migrations.RemoveField(
model_name='document', model_name='document',
name='scans', name='scans',
), ),
migrations.AddField( migrations.AddField(
model_name='document', model_name='document',
name='file', name='file',
field=models.ImageField(null=True, upload_to=b'documents', verbose_name='\u0421\u043a\u0430\u043d'), field=models.ImageField(null=True, upload_to=b'documents', verbose_name='\u0421\u043a\u0430\u043d'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='document', model_name='document',
name='in_date', name='in_date',
field=models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f'), field=models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 26, 14, 35, 38, 532166), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 26, 14, 35, 38, 532166), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
migrations.DeleteModel( migrations.DeleteModel(
name='DocumentScan', name='DocumentScan',
), ),
] ]

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-05-26 17:27 # Generated by Django 1.9.2 on 2016-05-26 17:27
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0029_auto_20160526_1435'), ('access', '0029_auto_20160526_1435'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='document', model_name='document',
name='file', name='file',
field=models.FileField(blank=True, null=True, upload_to=b'documents', verbose_name='\u0421\u043a\u0430\u043d'), field=models.FileField(blank=True, null=True, upload_to=b'documents', verbose_name='\u0421\u043a\u0430\u043d'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 26, 17, 27, 27, 217966), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 26, 17, 27, 27, 217966), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-05-31 12:40 # Generated by Django 1.9.2 on 2016-05-31 12:40
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0030_auto_20160526_1727'), ('access', '0030_auto_20160526_1727'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 31, 12, 40, 17, 702246), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 31, 12, 40, 17, 702246), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='in_role', name='in_role',
field=models.CharField(choices=[(b'U', '\u0421\u0442\u0443\u0434\u0435\u043d\u0442 \u0448\u043a\u043e\u043b\u044b'), (b'T', '\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), (b'M', '\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440'), (b'S', '\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c'), (b'S2', '\u041e\u043a\u043e \u0441\u0430\u0443\u0440\u043e\u043d\u0430'), (b'A', '\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440'), (b'Ts', '\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c'), (b'F', '\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430')], default=b'U', max_length=2, verbose_name='\u0420\u043e\u043b\u044c'), field=models.CharField(choices=[(b'U', '\u0421\u0442\u0443\u0434\u0435\u043d\u0442 \u0448\u043a\u043e\u043b\u044b'), (b'T', '\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), (b'M', '\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440'), (b'S', '\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c'), (b'S2', '\u041e\u043a\u043e \u0441\u0430\u0443\u0440\u043e\u043d\u0430'), (b'A', '\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440'), (b'Ts', '\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c'), (b'F', '\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430')], default=b'U', max_length=2, verbose_name='\u0420\u043e\u043b\u044c'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-01 12:56 # Generated by Django 1.9.2 on 2016-06-01 12:56
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0031_auto_20160531_1240'), ('access', '0031_auto_20160531_1240'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 1, 12, 56, 55, 630156), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 1, 12, 56, 55, 630156), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-07 16:14 # Generated by Django 1.9.2 on 2016-06-07 16:14
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0032_auto_20160601_1256'), ('access', '0032_auto_20160601_1256'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 7, 16, 14, 9, 853317), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 7, 16, 14, 9, 853317), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-07 20:02 # Generated by Django 1.9.2 on 2016-06-07 20:02
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0033_auto_20160607_1614'), ('access', '0033_auto_20160607_1614'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 7, 20, 2, 41, 564255), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 7, 20, 2, 41, 564255), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-07 20:34 # Generated by Django 1.9.2 on 2016-06-07 20:34
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0034_auto_20160607_2002'), ('access', '0034_auto_20160607_2002'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 7, 20, 34, 43, 673956), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 7, 20, 34, 43, 673956), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-07 20:51 # Generated by Django 1.9.2 on 2016-06-07 20:51
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0035_auto_20160607_2034'), ('access', '0035_auto_20160607_2034'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 7, 20, 51, 37, 90991), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 7, 20, 51, 37, 90991), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-08 17:00 # Generated by Django 1.9.2 on 2016-06-08 17:00
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0036_auto_20160607_2051'), ('access', '0036_auto_20160607_2051'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 8, 16, 59, 59, 621057), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 8, 16, 59, 59, 621057), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-08 17:05 # Generated by Django 1.9.2 on 2016-06-08 17:05
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0037_auto_20160608_1700'), ('access', '0037_auto_20160608_1700'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 8, 17, 5, 4, 809207), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 8, 17, 5, 4, 809207), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-08 18:04 # Generated by Django 1.9.2 on 2016-06-08 18:04
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0038_auto_20160608_1705'), ('access', '0038_auto_20160608_1705'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 8, 18, 4, 57, 435515), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 8, 18, 4, 57, 435515), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-08 18:41 # Generated by Django 1.9.2 on 2016-06-08 18:41
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0039_auto_20160608_1804'), ('access', '0039_auto_20160608_1804'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 8, 18, 41, 17, 775100), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 8, 18, 41, 17, 775100), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-09 14:29 # Generated by Django 1.9.2 on 2016-06-09 14:29
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0040_auto_20160608_1841'), ('access', '0040_auto_20160608_1841'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 14, 29, 17, 471762), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 14, 29, 17, 471762), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-09 14:42 # Generated by Django 1.9.2 on 2016-06-09 14:42
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0041_auto_20160609_1429'), ('access', '0041_auto_20160609_1429'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 14, 42, 25, 538404), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 14, 42, 25, 538404), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-09 15:34 # Generated by Django 1.9.2 on 2016-06-09 15:34
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0042_auto_20160609_1442'), ('access', '0042_auto_20160609_1442'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 15, 34, 28, 437751), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 15, 34, 28, 437751), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-09 15:36 # Generated by Django 1.9.2 on 2016-06-09 15:36
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0043_auto_20160609_1534'), ('access', '0043_auto_20160609_1534'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 15, 36, 24, 57777), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 15, 36, 24, 57777), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-09 15:36 # Generated by Django 1.9.2 on 2016-06-09 15:36
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0044_auto_20160609_1536'), ('access', '0044_auto_20160609_1536'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 15, 36, 29, 820351), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 15, 36, 29, 820351), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-09 15:46 # Generated by Django 1.9.2 on 2016-06-09 15:46
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0045_auto_20160609_1536'), ('access', '0045_auto_20160609_1536'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 15, 46, 17, 181201), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 15, 46, 17, 181201), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-09 16:27 # Generated by Django 1.9.2 on 2016-06-09 16:27
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0046_auto_20160609_1546'), ('access', '0046_auto_20160609_1546'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 16, 27, 14, 187304), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 16, 27, 14, 187304), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-09 22:24 # Generated by Django 1.9.2 on 2016-06-09 22:24
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0047_auto_20160609_1627'), ('access', '0047_auto_20160609_1627'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 22, 24, 43, 724608), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 22, 24, 43, 724608), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-06-28 17:31 # Generated by Django 1.9.2 on 2016-06-28 17:31
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0048_auto_20160609_2224'), ('access', '0048_auto_20160609_2224'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 28, 17, 31, 12, 186349), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 28, 17, 31, 12, 186349), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-07-11 15:18 # Generated by Django 1.9.2 on 2016-07-11 15:18
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0049_auto_20160628_1731'), ('access', '0049_auto_20160628_1731'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 11, 15, 18, 42, 159532), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 11, 15, 18, 42, 159532), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-07-13 20:38 # Generated by Django 1.9.2 on 2016-07-13 20:38
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0050_auto_20160711_1518'), ('access', '0050_auto_20160711_1518'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 13, 20, 38, 33, 272929), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 13, 20, 38, 33, 272929), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-07-18 17:14 # Generated by Django 1.9.2 on 2016-07-18 17:14
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0051_auto_20160713_2038'), ('access', '0051_auto_20160713_2038'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 18, 17, 14, 45, 907017), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 18, 17, 14, 45, 907017), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-07-18 17:14 # Generated by Django 1.9.2 on 2016-07-18 17:14
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0052_auto_20160718_1714'), ('access', '0052_auto_20160718_1714'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 18, 17, 14, 57, 300386), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 18, 17, 14, 57, 300386), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,31 +1,31 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-07-25 15:51 # Generated by Django 1.9.2 on 2016-07-25 15:51
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0053_auto_20160718_1714'), ('access', '0053_auto_20160718_1714'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 25, 15, 51, 36, 404906), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 25, 15, 51, 36, 404906), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='is_admin', name='is_admin',
field=models.BooleanField(default=False, editable=False), field=models.BooleanField(default=False, editable=False),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='is_staff', name='is_staff',
field=models.BooleanField(default=False, editable=False), field=models.BooleanField(default=False, editable=False),
), ),
] ]

@ -1,36 +1,36 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-08-09 16:53 # Generated by Django 1.9.2 on 2016-08-09 16:53
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0054_auto_20160725_1551'), ('access', '0054_auto_20160725_1551'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='sync', name='sync',
field=models.BooleanField(default=False, verbose_name='\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d'), field=models.BooleanField(default=False, verbose_name='\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='trafhistory', model_name='trafhistory',
name='action', name='action',
field=models.CharField(choices=[(b'G', b'\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x83\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85'), (b'D', b'\xd0\x97\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8c \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85'), (b'C', b'\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f'), (b'O', b'\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd1\x81\xd1\x87\xd0\xb5\xd1\x82\xd0\xb0')], max_length=1, verbose_name='\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435'), field=models.CharField(choices=[(b'G', b'\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x83\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85'), (b'D', b'\xd0\x97\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8c \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85'), (b'C', b'\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f'), (b'O', b'\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd1\x81\xd1\x87\xd0\xb5\xd1\x82\xd0\xb0')], max_length=1, verbose_name='\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 9, 16, 53, 12, 35311), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 9, 16, 53, 12, 35311), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='private', name='private',
field=models.CharField(choices=[(b'A', b'\xd0\x92\xd1\x81\xd0\xb5\xd0\xbc\xd1\x83 \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd0\xbd\xd0\xb5\xd1\x82\xd1\x83'), (b'U', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f\xd0\xbc \xd1\x81\xd0\xb8\xd1\x81\xd1\x82\xd0\xb5\xd0\xbc\xd1\x8b'), (b'L', b'\xd0\x9f\xd0\xbe \xd0\xbf\xd1\x80\xd1\x8f\xd0\xbc\xd0\xbe\xd0\xb9 \xd1\x81\xd1\x81\xd1\x8b\xd0\xbb\xd0\xba\xd0\xb5'), (b'B', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbc\xd0\xbd\xd0\xb5')], default=b'A', max_length=1, verbose_name='\u041f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044f'), field=models.CharField(choices=[(b'A', b'\xd0\x92\xd1\x81\xd0\xb5\xd0\xbc\xd1\x83 \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd0\xbd\xd0\xb5\xd1\x82\xd1\x83'), (b'U', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f\xd0\xbc \xd1\x81\xd0\xb8\xd1\x81\xd1\x82\xd0\xb5\xd0\xbc\xd1\x8b'), (b'L', b'\xd0\x9f\xd0\xbe \xd0\xbf\xd1\x80\xd1\x8f\xd0\xbc\xd0\xbe\xd0\xb9 \xd1\x81\xd1\x81\xd1\x8b\xd0\xbb\xd0\xba\xd0\xb5'), (b'B', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbc\xd0\xbd\xd0\xb5')], default=b'A', max_length=1, verbose_name='\u041f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044f'),
), ),
] ]

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-08-09 16:59 # Generated by Django 1.9.2 on 2016-08-09 16:59
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0055_auto_20160809_1653'), ('access', '0055_auto_20160809_1653'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='user', model_name='user',
name='sync_date', name='sync_date',
field=models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e'), field=models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 9, 16, 59, 0, 490315), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 9, 16, 59, 0, 490315), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-08-10 12:34 # Generated by Django 1.9.2 on 2016-08-10 12:34
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0056_auto_20160809_1659'), ('access', '0056_auto_20160809_1659'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 10, 12, 34, 1, 608983), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 10, 12, 34, 1, 608983), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,21 +1,21 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-08-14 17:36 # Generated by Django 1.9.2 on 2016-08-14 17:36
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0057_auto_20160810_1234'), ('access', '0057_auto_20160810_1234'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 14, 17, 36, 41, 669896), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 14, 17, 36, 41, 669896), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'),
), ),
] ]

@ -1,198 +1,198 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2016-08-15 18:53 # Generated by Django 1.9.3 on 2016-08-15 18:53
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0058_auto_20160814_1736'), ('access', '0058_auto_20160814_1736'),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='UserSync', name='UserSync',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='Дата начала')), ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='Дата начала')),
('f_date', models.DateTimeField(blank=True, null=True, verbose_name='Дата завершения процеса')), ('f_date', models.DateTimeField(blank=True, null=True, verbose_name='Дата завершения процеса')),
('source', models.CharField(max_length=255, verbose_name='Источник синхронизации')), ('source', models.CharField(max_length=255, verbose_name='Источник синхронизации')),
('dist', models.CharField(max_length=255, verbose_name='Получатель синхронизации')), ('dist', models.CharField(max_length=255, verbose_name='Получатель синхронизации')),
('result', models.BooleanField(default=False, verbose_name='Результат синхронизации')), ('result', models.BooleanField(default=False, verbose_name='Результат синхронизации')),
], ],
options={ options={
'verbose_name': 'Задача синхронизации', 'verbose_name': 'Задача синхронизации',
'verbose_name_plural': 'Задачи синхронизации', 'verbose_name_plural': 'Задачи синхронизации',
}, },
), ),
migrations.AlterField( migrations.AlterField(
model_name='actionj', model_name='actionj',
name='a_type', name='a_type',
field=models.CharField(choices=[('B', 'b-default'), ('P', 'b-primary'), ('S', 'b-success'), ('I', 'b-info'), ('W', 'b-warning'), ('D', 'b-danger')], default='B', max_length=1, verbose_name='Тип события'), field=models.CharField(choices=[('B', 'b-default'), ('P', 'b-primary'), ('S', 'b-success'), ('I', 'b-info'), ('W', 'b-warning'), ('D', 'b-danger')], default='B', max_length=1, verbose_name='Тип события'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='document', model_name='document',
name='file', name='file',
field=models.FileField(blank=True, null=True, upload_to='documents', verbose_name='Скан'), field=models.FileField(blank=True, null=True, upload_to='documents', verbose_name='Скан'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='document', model_name='document',
name='status', name='status',
field=models.CharField(choices=[('W', 'На оформлении'), ('F', 'Оформлен')], default='W', editable=False, max_length=1, verbose_name='Статус'), field=models.CharField(choices=[('W', 'На оформлении'), ('F', 'Оформлен')], default='W', editable=False, max_length=1, verbose_name='Статус'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='questionnaire', model_name='questionnaire',
name='age', name='age',
field=models.CharField(blank=True, choices=[('1', 'до 18'), ('2', '18-25'), ('3', '25-30'), ('4', '30-40'), ('5', 'больше 40')], max_length=1, null=True, verbose_name='Возраст'), field=models.CharField(blank=True, choices=[('1', 'до 18'), ('2', '18-25'), ('3', '25-30'), ('4', '30-40'), ('5', 'больше 40')], max_length=1, null=True, verbose_name='Возраст'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='questionnaire', model_name='questionnaire',
name='aim', name='aim',
field=models.CharField(blank=True, choices=[('1', 'Да, в офисе'), ('2', 'Да, свой проект'), ('3', 'Да, на фрилансе'), ('4', 'Нет, изучаю для себя')], max_length=1, null=True, verbose_name='Цель обучения'), field=models.CharField(blank=True, choices=[('1', 'Да, в офисе'), ('2', 'Да, свой проект'), ('3', 'Да, на фрилансе'), ('4', 'Нет, изучаю для себя')], max_length=1, null=True, verbose_name='Цель обучения'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='questionnaire', model_name='questionnaire',
name='experience', name='experience',
field=models.CharField(blank=True, choices=[('1', 'Только начинаю'), ('2', 'Да, менее года'), ('3', 'Да, 1-2 года'), ('4', 'Да, более 2 лет')], max_length=1, null=True, verbose_name='Опыт'), field=models.CharField(blank=True, choices=[('1', 'Только начинаю'), ('2', 'Да, менее года'), ('3', 'Да, 1-2 года'), ('4', 'Да, более 2 лет')], max_length=1, null=True, verbose_name='Опыт'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='questionnaire', model_name='questionnaire',
name='fully', name='fully',
field=models.CharField(choices=[('1', 'Флаги'), ('2', 'Свободный ответ'), ('3', 'Завершено')], default=1, max_length=1, verbose_name='Стадия'), field=models.CharField(choices=[('1', 'Флаги'), ('2', 'Свободный ответ'), ('3', 'Завершено')], default=1, max_length=1, verbose_name='Стадия'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='questionnaire', model_name='questionnaire',
name='male', name='male',
field=models.CharField(blank=True, choices=[('M', 'Мужчина'), ('W', 'Женщина')], max_length=1, null=True, verbose_name='Пол'), field=models.CharField(blank=True, choices=[('M', 'Мужчина'), ('W', 'Женщина')], max_length=1, null=True, verbose_name='Пол'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='trafhistory', model_name='trafhistory',
name='action', name='action',
field=models.CharField(choices=[('G', 'Получение данных'), ('D', 'Запись данных'), ('C', 'Создание пользователя'), ('O', 'Создание счета')], max_length=1, verbose_name='Действие'), field=models.CharField(choices=[('G', 'Получение данных'), ('D', 'Запись данных'), ('C', 'Создание пользователя'), ('O', 'Создание счета')], max_length=1, verbose_name='Действие'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='avatar', name='avatar',
field=models.CharField(blank=True, default='', max_length=255, verbose_name='Ключ аватара'), field=models.CharField(blank=True, default='', max_length=255, verbose_name='Ключ аватара'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='back_phone', name='back_phone',
field=models.CharField(blank=True, default='', max_length=255, verbose_name='Предидущий телефон'), field=models.CharField(blank=True, default='', max_length=255, verbose_name='Предидущий телефон'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='city', name='city',
field=models.CharField(blank=True, default='', max_length=255, verbose_name='Город'), field=models.CharField(blank=True, default='', max_length=255, verbose_name='Город'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 15, 18, 53, 53, 111817), null=True, verbose_name='Задержка до. Не включая этот день.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 15, 18, 53, 53, 111817), null=True, verbose_name='Задержка до. Не включая этот день.'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='email', name='email',
field=models.EmailField(blank=True, db_index=True, editable=False, max_length=255, unique=True, verbose_name='email'), field=models.EmailField(blank=True, db_index=True, editable=False, max_length=255, unique=True, verbose_name='email'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='facebook', name='facebook',
field=models.CharField(blank=True, default='', max_length=255), field=models.CharField(blank=True, default='', max_length=255),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='fname', name='fname',
field=models.CharField(blank=True, default='', max_length=255, verbose_name='Фамилия'), field=models.CharField(blank=True, default='', max_length=255, verbose_name='Фамилия'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='in_avatar', name='in_avatar',
field=models.ImageField(blank=True, editable=False, null=True, upload_to='', verbose_name='Наш аватар'), field=models.ImageField(blank=True, editable=False, null=True, upload_to='', verbose_name='Наш аватар'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='in_role', name='in_role',
field=models.CharField(choices=[('U', 'Студент школы'), ('T', 'Преподаватель'), ('M', 'Менеджер'), ('S', 'Руководитель'), ('S2', 'Око саурона'), ('A', 'Администратор'), ('Ts', 'Тестовый пользователь'), ('F', 'Пользователь свободного счета')], default='U', max_length=2, verbose_name='Роль'), field=models.CharField(choices=[('U', 'Студент школы'), ('T', 'Преподаватель'), ('M', 'Менеджер'), ('S', 'Руководитель'), ('S2', 'Око саурона'), ('A', 'Администратор'), ('Ts', 'Тестовый пользователь'), ('F', 'Пользователь свободного счета')], default='U', max_length=2, verbose_name='Роль'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='linkedin', name='linkedin',
field=models.CharField(blank=True, default='', max_length=255), field=models.CharField(blank=True, default='', max_length=255),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='name', name='name',
field=models.CharField(blank=True, default='', max_length=255, verbose_name='Имя'), field=models.CharField(blank=True, default='', max_length=255, verbose_name='Имя'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='odnoklassniki', name='odnoklassniki',
field=models.CharField(blank=True, default='', max_length=255), field=models.CharField(blank=True, default='', max_length=255),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='oname', name='oname',
field=models.CharField(blank=True, default='', max_length=255, verbose_name='Отчество'), field=models.CharField(blank=True, default='', max_length=255, verbose_name='Отчество'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='phone', name='phone',
field=models.CharField(default='', max_length=255, verbose_name='Телефон'), field=models.CharField(default='', max_length=255, verbose_name='Телефон'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='private', name='private',
field=models.CharField(choices=[('A', 'Всему интернету'), ('U', 'Только пользователям системы'), ('L', 'По прямой ссылке'), ('B', 'Только мне')], default='A', max_length=1, verbose_name='Приватность профиля'), field=models.CharField(choices=[('A', 'Всему интернету'), ('U', 'Только пользователям системы'), ('L', 'По прямой ссылке'), ('B', 'Только мне')], default='A', max_length=1, verbose_name='Приватность профиля'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='refer', name='refer',
field=models.CharField(choices=[('S', 'Органично'), ('B', 'Привлечен')], default='S', max_length=1, null=True, verbose_name='Источник'), field=models.CharField(choices=[('S', 'Органично'), ('B', 'Привлечен')], default='S', max_length=1, null=True, verbose_name='Источник'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='refer_source', name='refer_source',
field=models.CharField(blank=True, default='', max_length=255, verbose_name='Источник пользователя'), field=models.CharField(blank=True, default='', max_length=255, verbose_name='Источник пользователя'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='reg_status', name='reg_status',
field=models.CharField(choices=[('1', 'Пароль'), ('2', 'О себе'), ('3', 'Фото'), ('4', 'Закончена')], default='1', max_length=1, verbose_name='Статус регистрации'), field=models.CharField(choices=[('1', 'Пароль'), ('2', 'О себе'), ('3', 'Фото'), ('4', 'Закончена')], default='1', max_length=1, verbose_name='Статус регистрации'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='skype', name='skype',
field=models.CharField(blank=True, default='', max_length=300), field=models.CharField(blank=True, default='', max_length=300),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='status', name='status',
field=models.CharField(choices=[('ON', 'on-line'), ('OFF', 'off-line')], default='ON', max_length=9), field=models.CharField(choices=[('ON', 'on-line'), ('OFF', 'off-line')], default='ON', max_length=9),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='token', name='token',
field=models.CharField(blank=True, default='', max_length=255), field=models.CharField(blank=True, default='', max_length=255),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='unique_role', name='unique_role',
field=models.CharField(blank=True, default='', max_length=255, verbose_name='Уникальная роль'), field=models.CharField(blank=True, default='', max_length=255, verbose_name='Уникальная роль'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='vk', name='vk',
field=models.CharField(blank=True, default='', max_length=255), field=models.CharField(blank=True, default='', max_length=255),
), ),
migrations.AddField( migrations.AddField(
model_name='usersync', model_name='usersync',
name='user', name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Синхронизируемый'), field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Синхронизируемый'),
), ),
] ]

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2016-08-15 18:55 # Generated by Django 1.9.3 on 2016-08-15 18:55
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('access', '0059_auto_20160815_1853'), ('access', '0059_auto_20160815_1853'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='usersync', model_name='usersync',
name='data', name='data',
field=models.TextField(blank=True, default='', verbose_name='Сырые данные'), field=models.TextField(blank=True, default='', verbose_name='Сырые данные'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='user', model_name='user',
name='delay_date', name='delay_date',
field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 15, 18, 55, 46, 279309), null=True, verbose_name='Задержка до. Не включая этот день.'), field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 15, 18, 55, 46, 279309), null=True, verbose_name='Задержка до. Не включая этот день.'),
), ),
] ]

@ -122,6 +122,7 @@ class User(AbstractBaseUser):
) )
#sync = models.BooleanField(verbose_name=u'Синхронизирован', default=False) #sync = models.BooleanField(verbose_name=u'Синхронизирован', default=False)
#sync_date = models.DateTimeField(verbose_name=u'Дата постановки на синхронизацию', blank=True, null=True) #sync_date = models.DateTimeField(verbose_name=u'Дата постановки на синхронизацию', blank=True, null=True)
block = models.BooleanField(verbose_name=u'Заблокировать', default=False)
refer = models.CharField(verbose_name=u'Источник', max_length=1, choices=SOURCE, default='S', null=True) refer = models.CharField(verbose_name=u'Источник', max_length=1, choices=SOURCE, default='S', null=True)
refer_source = models.CharField(verbose_name=u'Источник пользователя', blank=True, max_length=255, default='') refer_source = models.CharField(verbose_name=u'Источник пользователя', blank=True, max_length=255, default='')
traf_source = models.ForeignKey('TrafHistory', verbose_name=u'Обращение', blank=True, null=True) traf_source = models.ForeignKey('TrafHistory', verbose_name=u'Обращение', blank=True, null=True)
@ -180,6 +181,9 @@ class User(AbstractBaseUser):
super(User, self).save(*args, **kwargs) super(User, self).save(*args, **kwargs)
def get_ip_len(self):
UserRequest.objects.filter(user=self).count()
def set_request_data(self, request): def set_request_data(self, request):
ip = get_client_ip(request) ip = get_client_ip(request)
try: try:

@ -1,448 +1,448 @@
# coding=utf-8 # coding=utf-8
import datetime import datetime
from lms.decors import out_api_decor, api_decor from lms.decors import out_api_decor, api_decor
from access.models import TrafSource, User, TrafHistory # , UserSync from access.models import TrafSource, User, TrafHistory # , UserSync
from lms.regex import check_email from lms.regex import check_email
from management.letters import sent_registration from management.letters import sent_registration
from finance.models import Price, Bill from finance.models import Price, Bill
from lms.tools import out_date_format from lms.tools import out_date_format
import hashlib import hashlib
from django.contrib import auth from django.contrib import auth
from lms.settings import SECRET_KEY, SUPERVISOR, MANAGER from lms.settings import SECRET_KEY, SUPERVISOR, MANAGER
from django.http import Http404 from django.http import Http404
@api_decor(without_auth=False) @api_decor(without_auth=False)
def set_in_user(request, context): def set_in_user(request, context):
# Наша установка # Наша установка
data = None data = None
context['code'] = '0' context['code'] = '0'
context['response'] = '' context['response'] = ''
if request.user and request.user.is_authenticated() and request.user.is_admin: if request.user and request.user.is_authenticated() and request.user.is_admin:
if request.method: if request.method:
if request.method == 'POST': if request.method == 'POST':
data = request.POST data = request.POST
elif request.method == 'GET': elif request.method == 'GET':
data = request.GET data = request.GET
else: else:
raise Http404 raise Http404
if not data or not (data.get('SERVICE') or data.get('USER')) or (data.get('SERVICE') and not data.get('USER')): if not data or not (data.get('SERVICE') or data.get('USER')) or (data.get('SERVICE') and not data.get('USER')):
context['response'] = u'REQUEST IS NOT VALID. ' \ context['response'] = u'REQUEST IS NOT VALID. ' \
u'USER - user email (required) / ' \ u'USER - user email (required) / ' \
u'SERVICE - service token / ' \ u'SERVICE - service token / ' \
u'GIFT - will set bill in a payed status / ' \ u'GIFT - will set bill in a payed status / ' \
u'PRICE - set self price to the service' u'PRICE - set self price to the service'
return context return context
service = None service = None
if data.get('SERVICE'): if data.get('SERVICE'):
try: try:
service = Price.objects.get(key=data.get('SERVICE')) service = Price.objects.get(key=data.get('SERVICE'))
except Price.DoesNotExist: except Price.DoesNotExist:
context['response'] = u'SERVICE NOT FOUND' context['response'] = u'SERVICE NOT FOUND'
return context return context
if data.get('USER') and check_email(data.get('USER')): if data.get('USER') and check_email(data.get('USER')):
result, user = self_create_user(data.get('USER'), sent_letter=True) result, user = self_create_user(data.get('USER'), sent_letter=True)
context['response'] = 'USER CREATED.' if result else 'USER ALREADY EXISTS.' context['response'] = 'USER CREATED.' if result else 'USER ALREADY EXISTS.'
elif not check_email(data.get('USER')): elif not check_email(data.get('USER')):
context['response'] = 'USER EMAIL IS NOT VALID' context['response'] = 'USER EMAIL IS NOT VALID'
if service and user: if service and user:
bill, created = Bill.objects.get_or_create(service=service, bill, created = Bill.objects.get_or_create(service=service,
gift=bool(data.get('GIFT')), gift=bool(data.get('GIFT')),
user=user, user=user,
status='F' if data.get('GIFT') else 'W', status='F' if data.get('GIFT') else 'W',
manager=User.objects.get(email=MANAGER), manager=User.objects.get(email=MANAGER),
price=data['PRICE'] if data.get('PRICE') else service.cost) price=data['PRICE'] if data.get('PRICE') else service.cost)
if created: if created:
if data.get('GIFT'): if data.get('GIFT'):
context['response'] += ' ACCESS OPENED. IT IS A GIFT.' context['response'] += ' ACCESS OPENED. IT IS A GIFT.'
else: else:
context['response'] += ' THIS OFFER SENT TO THE USER. THE SERVICE PRICE: %s' % str(bill.price) context['response'] += ' THIS OFFER SENT TO THE USER. THE SERVICE PRICE: %s' % str(bill.price)
else: else:
context['response'] += ' BILL ALREADY EXISTS id:%s' % str(bill.id) context['response'] += ' BILL ALREADY EXISTS id:%s' % str(bill.id)
return context return context
def self_check_token(token): def self_check_token(token):
try: try:
source = TrafSource.objects.get(on=True, token=token) source = TrafSource.objects.get(on=True, token=token)
except TrafSource.DoesNotExist: except TrafSource.DoesNotExist:
return [False, None] return [False, None]
else: else:
return [True, source] return [True, source]
def self_check_user_exists(email): def self_check_user_exists(email):
email = email.lower() email = email.lower()
try: try:
user = User.objects.get(email=email) user = User.objects.get(email=email)
except User.DoesNotExist: except User.DoesNotExist:
return [False, None] return [False, None]
else: else:
return [True, user] return [True, user]
def self_create_user(email, phone=None, sent_letter=True): def self_create_user(email, phone=None, sent_letter=True):
email = email.lower() email = email.lower()
try: try:
user = User.objects.get(email=email) user = User.objects.get(email=email)
except User.DoesNotExist: except User.DoesNotExist:
user = User.objects.create_user(email=email, sent_letter=sent_letter) user = User.objects.create_user(email=email, sent_letter=sent_letter)
user.reg_status = '1' user.reg_status = '1'
user.refer = 'B' user.refer = 'B'
user.is_active = False user.is_active = False
if phone: if phone:
user.phone = phone user.phone = phone
user.save() user.save()
return [True, user] return [True, user]
else: else:
return [False, user] return [False, user]
def self_create_bill(user, service_key, uid=None): def self_create_bill(user, service_key, uid=None):
# Создание счета для пользователя по ключу услуги # Создание счета для пользователя по ключу услуги
description = u'' description = u''
bill = None bill = None
result = False result = False
try: try:
price = Price.objects.get(key=service_key) price = Price.objects.get(key=service_key)
except Price.DoesNotExist: except Price.DoesNotExist:
description = u'Счет по ключу не найден' description = u'Счет по ключу не найден'
else: else:
bill, c = Bill.objects.get_or_create(user=user, manager=User.objects.get(email=SUPERVISOR), service=price) bill, c = Bill.objects.get_or_create(user=user, manager=User.objects.get(email=SUPERVISOR), service=price)
if bill.status == 'F': if bill.status == 'F':
description = u'Счет для данного пользователя уже был создан {0}'.format( description = u'Счет для данного пользователя уже был создан {0}'.format(
out_date_format(bill.finish_date, no_time=True)) out_date_format(bill.finish_date, no_time=True))
result = False result = False
else: else:
result = True result = True
description = u'Счет успешно создан. Приятного обучения' description = u'Счет успешно создан. Приятного обучения'
if bill.status in ['C', 'H']: if bill.status in ['C', 'H']:
bill.status = 'P' bill.status = 'P'
bill.status_changed = datetime.datetime.now() bill.status_changed = datetime.datetime.now()
bill.save() bill.save()
if uid: if uid:
bill.admitad_uid = uid bill.admitad_uid = uid
bill.save() bill.save()
return [result, description, bill] return [result, description, bill]
def code_dict(d): def code_dict(d):
# Преобразование словаря для передачи по HTTP # Преобразование словаря для передачи по HTTP
return u'||'.join(list([u'{0}|{1}'.format(key, value) for key, value in d.items()])) return u'||'.join(list([u'{0}|{1}'.format(key, value) for key, value in d.items()]))
def decode_dict(s): def decode_dict(s):
# Расшифровка словаря из строки, переданого по HTTP # Расшифровка словаря из строки, переданого по HTTP
result = {} result = {}
for one in s.split(u'||'): for one in s.split(u'||'):
__tmp = one.split(u'|') __tmp = one.split(u'|')
result[__tmp[0]] = __tmp[1] result[__tmp[0]] = __tmp[1]
return result return result
def get_sync_data(user): def get_sync_data(user):
# Синхронизировать пользователя с остальными LMS # Синхронизировать пользователя с остальными LMS
# Отправить в LMS измнениея по пользователю или нового пользователя # Отправить в LMS измнениея по пользователю или нового пользователя
# POST['user'] = {} # Поля с полной информацией пользователя # POST['user'] = {} # Поля с полной информацией пользователя
_data = {} _data = {}
_keys = [] _keys = []
exclude = ['id', 'customer', 'deactivate', 'delay', 'delay_description', 'delay_date', 'changed_email', 'status', exclude = ['id', 'customer', 'deactivate', 'delay', 'delay_description', 'delay_date', 'changed_email', 'status',
'last_time', 'date_joined', 'avatar', 'last_login', 'activate_time', 'in_avatar'] 'last_time', 'date_joined', 'avatar', 'last_login', 'activate_time', 'in_avatar']
for key in user._meta.local_concrete_fields: for key in user._meta.local_concrete_fields:
if key.name not in exclude: if key.name not in exclude:
_tmp = key.value_to_string(user) _tmp = key.value_to_string(user)
if _tmp: if _tmp:
_keys.append(key.name) _keys.append(key.name)
_data[key.name] = _tmp _data[key.name] = _tmp
_tmp = code_dict(_data) _tmp = code_dict(_data)
return {'data': _tmp, return {'data': _tmp,
'hash': hashlib.md5(_tmp.encode('utf-8')).hexdigest()} 'hash': hashlib.md5(_tmp.encode('utf-8')).hexdigest()}
''' '''
def sent_sync_user(user): def sent_sync_user(user):
data = get_sync_data(user) data = get_sync_data(user)
data['secret_key'] = SECRET_KEY data['secret_key'] = SECRET_KEY
data['source'] = DOMAIN data['source'] = DOMAIN
## Если провал на одном из этапов - пропустить синхронизацию этого пользователя ## Если провал на одном из этапов - пропустить синхронизацию этого пользователя
# Авторизация на сервисе под системным пользователем # Авторизация на сервисе под системным пользователем
result = 0 result = 0
for HOST in REL_LMS: for HOST in REL_LMS:
__tmp = HOST['protocol'] + HOST['url'] __tmp = HOST['protocol'] + HOST['url']
if __tmp != DOMAIN: if __tmp != DOMAIN:
log = UserSync.objects.create(user=user, source=DOMAIN, dist=__tmp, data=str(data)) log = UserSync.objects.create(user=user, source=DOMAIN, dist=__tmp, data=str(data))
_request = requests.post(__tmp + 'access/sync_user/', data=data) _request = requests.post(__tmp + 'access/sync_user/', data=data)
if _request.status_code == 200: if _request.status_code == 200:
_tmp = ast.literal_eval(_request.text) _tmp = ast.literal_eval(_request.text)
if _tmp['code'] == '1': if _tmp['code'] == '1':
result += 1 result += 1
log.good_sync() log.good_sync()
else: else:
log.fail_sync() log.fail_sync()
else: else:
log.fail_sync() log.fail_sync()
return result == len(REL_LMS)-1 return result == len(REL_LMS)-1
''' '''
@out_api_decor(without_auth=True, method='POST', need_keys=['email', 'password', 'secret_key'], check_request=True) @out_api_decor(without_auth=True, method='POST', need_keys=['email', 'password', 'secret_key'], check_request=True)
def service_auth(request, context): def service_auth(request, context):
# Удаленная авторизация для внутренних процессов # Удаленная авторизация для внутренних процессов
# Авторизация # Авторизация
if request.POST['secret_key'] == SECRET_KEY: if request.POST['secret_key'] == SECRET_KEY:
email = request.POST['email'].lower() email = request.POST['email'].lower()
user = auth.authenticate(email=email, password=request.POST.get('password')) user = auth.authenticate(email=email, password=request.POST.get('password'))
if user is not None: if user is not None:
context['code'] = '1' context['code'] = '1'
context['response'] = u'AUTH_SUCCESS' context['response'] = u'AUTH_SUCCESS'
auth.login(request, user) auth.login(request, user)
elif user is None: elif user is None:
context['response'] = u'По введенным данным пользователь не найден' context['response'] = u'По введенным данным пользователь не найден'
context['code'] = '0' context['code'] = '0'
else: else:
context['response'] = u"Не верные данные. Повторите попытку" context['response'] = u"Не верные данные. Повторите попытку"
context['code'] = '0' context['code'] = '0'
else: else:
context['response'] = u'AUTH SUCCESS' context['response'] = u'AUTH SUCCESS'
context['code'] = '0' context['code'] = '0'
return context return context
''' '''
@out_api_decor(without_auth=True, method='POST', need_keys=['secret_key', 'data', 'hash', 'source'], check_request=True) @out_api_decor(without_auth=True, method='POST', need_keys=['secret_key', 'data', 'hash', 'source'], check_request=True)
def sync_user(request, context): def sync_user(request, context):
if request.POST['secret_key'] == SECRET_KEY: if request.POST['secret_key'] == SECRET_KEY:
if hashlib.md5(request.POST['data'].encode('utf-8')).hexdigest() != request.POST['hash']: if hashlib.md5(request.POST['data'].encode('utf-8')).hexdigest() != request.POST['hash']:
context['code'] = '0' context['code'] = '0'
context['data'] = '' context['data'] = ''
context['response'] = u'Не сходится хеш данных' context['response'] = u'Не сходится хеш данных'
return context return context
data = decode_dict(request.POST['data']) data = decode_dict(request.POST['data'])
# Получение пользователя для вставки # Получение пользователя для вставки
try: try:
user = User.objects.get(email=data['email']) user = User.objects.get(email=data['email'])
except User.DoesNotExist: except User.DoesNotExist:
# Создать пользователя # Создать пользователя
user = User.objects.create(email=data['email']) user = User.objects.create(email=data['email'])
log = UserSync.objects.create(user=user, source=request.POST['source'], dist=DOMAIN, data=str(request.POST['data'])) log = UserSync.objects.create(user=user, source=request.POST['source'], dist=DOMAIN, data=str(request.POST['data']))
save = False save = False
if 'refer' in data and user.refer != data['refer']: if 'refer' in data and user.refer != data['refer']:
user.refer = data['refer'] user.refer = data['refer']
save = True save = True
if 'refer_source' in data and user.refer_source != data['refer_source']: if 'refer_source' in data and user.refer_source != data['refer_source']:
user.refer_source = data['refer_source'] user.refer_source = data['refer_source']
save = True save = True
if 'private' in data and user.private != data['private']: if 'private' in data and user.private != data['private']:
user.private = data['private'] user.private = data['private']
save = True save = True
if 'interactive_key' in data and user.interactive_key != data['interactive_key']: if 'interactive_key' in data and user.interactive_key != data['interactive_key']:
user.interactive_key = data['interactive_key'] user.interactive_key = data['interactive_key']
save = True save = True
if 'email' in data and user.email != data['email']: if 'email' in data and user.email != data['email']:
user.email = data['email'] user.email = data['email']
save = True save = True
if 'phone' in data and user.phone != data['phone']: if 'phone' in data and user.phone != data['phone']:
user.phone = data['phone'] user.phone = data['phone']
save = True save = True
if 'back_phone' in data and user.back_phone != data['back_phone']: if 'back_phone' in data and user.back_phone != data['back_phone']:
user.back_phone = data['back_phone'] user.back_phone = data['back_phone']
save = True save = True
if 'in_role' in data and user.in_role != data['in_role']: if 'in_role' in data and user.in_role != data['in_role']:
user.in_role = data['in_role'] user.in_role = data['in_role']
save = True save = True
if 'unique_role' in data and user.unique_role != data['unique_role']: if 'unique_role' in data and user.unique_role != data['unique_role']:
user.unique_role = data['unique_role'] user.unique_role = data['unique_role']
save = True save = True
if 'city' in data and user.city != data['city']: if 'city' in data and user.city != data['city']:
user.city = data['city'] user.city = data['city']
save = True save = True
if 'b_day' in data and user.b_day != data['b_day']: if 'b_day' in data and user.b_day != data['b_day']:
user.b_day = data['b_day'] user.b_day = data['b_day']
save = True save = True
if 'token' in data and user.token != data['token']: if 'token' in data and user.token != data['token']:
user.token = data['token'] user.token = data['token']
save = True save = True
if 'reg_status' in data and user.reg_status != data['reg_status']: if 'reg_status' in data and user.reg_status != data['reg_status']:
user.reg_status = data['reg_status'] user.reg_status = data['reg_status']
save = True save = True
if 'is_active' in data and user.is_active != data['is_active']: if 'is_active' in data and user.is_active != data['is_active']:
user.is_active = data['is_active'] user.is_active = data['is_active']
save = True save = True
if 'is_admin' in data and user.is_admin != data['is_admin']: if 'is_admin' in data and user.is_admin != data['is_admin']:
user.is_admin = data['is_admin'] user.is_admin = data['is_admin']
save = True save = True
if 'is_staff' in data and user.is_staff != data['is_staff']: if 'is_staff' in data and user.is_staff != data['is_staff']:
user.is_staff = data['is_staff'] user.is_staff = data['is_staff']
save = True save = True
if 'fname' in data and user.fname != data['fname']: if 'fname' in data and user.fname != data['fname']:
user.fname = data['fname'] user.fname = data['fname']
save = True save = True
if 'name' in data and user.name != data['name']: if 'name' in data and user.name != data['name']:
user.name = data['name'] user.name = data['name']
save = True save = True
if 'oname' in data and user.oname != data['oname']: if 'oname' in data and user.oname != data['oname']:
user.oname = data['oname'] user.oname = data['oname']
save = True save = True
if 'skype' in data and user.skype != data['skype']: if 'skype' in data and user.skype != data['skype']:
user.skype = data['skype'] user.skype = data['skype']
save = True save = True
if 'facebook' in data and user.facebook != data['facebook']: if 'facebook' in data and user.facebook != data['facebook']:
user.facebook = data['facebook'] user.facebook = data['facebook']
save = True save = True
if 'vk' in data and user.vk != data['vk']: if 'vk' in data and user.vk != data['vk']:
user.vk = data['vk'] user.vk = data['vk']
save = True save = True
if 'linkedin' in data and user.linkedin != data['linkedin']: if 'linkedin' in data and user.linkedin != data['linkedin']:
user.linkedin = data['linkedin'] user.linkedin = data['linkedin']
save = True save = True
if 'odnoklassniki' in data and user.odnoklassniki != data['odnoklassniki']: if 'odnoklassniki' in data and user.odnoklassniki != data['odnoklassniki']:
user.odnoklassniki = data['odnoklassniki'] user.odnoklassniki = data['odnoklassniki']
save = True save = True
if 'password' in data and user.password != data['password']: if 'password' in data and user.password != data['password']:
user.password = data['password'] user.password = data['password']
save = True save = True
if save: if save:
user.save() user.save()
log.good_sync() log.good_sync()
context['code'] = '1' context['code'] = '1'
else: else:
log.fail_sync() log.fail_sync()
else: else:
raise Http404 raise Http404
return context return context
''' '''
@out_api_decor(without_auth=True, need_keys=['token', 'email'], method='POST', check_request=True) @out_api_decor(without_auth=True, need_keys=['token', 'email'], method='POST', check_request=True)
def create_user(request, context): def create_user(request, context):
# Создание пользователя # Создание пользователя
# TODO: Политика использования токена # TODO: Политика использования токена
res = False res = False
result, source = self_check_token(request.POST['token']) result, source = self_check_token(request.POST['token'])
if not result: if not result:
context['code'] = '0' context['code'] = '0'
description = u'Не найден активный источник' description = u'Не найден активный источник'
context['response'] = description context['response'] = description
return context return context
result, user = self_check_user_exists(request.POST['email']) result, user = self_check_user_exists(request.POST['email'])
if result: if result:
if user.is_active and user.reg_status == '4': if user.is_active and user.reg_status == '4':
context['code'] = '0' context['code'] = '0'
description = u'Пользователь уже существует и активен' description = u'Пользователь уже существует и активен'
context['response'] = description context['response'] = description
else: else:
context['code'] = '1' context['code'] = '1'
res = True res = True
description = u'Пользователь уже существует. Отправлено повторное письмо активации' description = u'Пользователь уже существует. Отправлено повторное письмо активации'
context['response'] = description context['response'] = description
sent_registration(user, title=u'Повторное письмо активации') sent_registration(user, title=u'Повторное письмо активации')
return context return context
else: else:
result, user = self_create_user(request.POST['email'], result, user = self_create_user(request.POST['email'],
phone=request.POST['phone'] if request.POST.get('phone') else None) phone=request.POST['phone'] if request.POST.get('phone') else None)
context['code'] = '1' context['code'] = '1'
res = True res = True
description = u'Пользователь создан. На указанный email отправлено письмо активации' description = u'Пользователь создан. На указанный email отправлено письмо активации'
context['response'] = description context['response'] = description
ref_history = TrafHistory.objects.create(action='C', source=source, token=request.POST['token'], data=request.POST, ref_history = TrafHistory.objects.create(action='C', source=source, token=request.POST['token'], data=request.POST,
result_description=description, result=res) result_description=description, result=res)
user.traf_source = ref_history user.traf_source = ref_history
user.save() user.save()
return context return context
@out_api_decor(without_auth=True, check_request=True, need_keys=['token', 'service', 'email'], method='POST') @out_api_decor(without_auth=True, check_request=True, need_keys=['token', 'service', 'email'], method='POST')
def create_bill(request, context): def create_bill(request, context):
# TODO: Политика использования токена # TODO: Политика использования токена
result, source = self_check_token(request.POST['token']) result, source = self_check_token(request.POST['token'])
if not result: if not result:
context['code'] = '0' context['code'] = '0'
context['response'] = u'Не найден активный источник' context['response'] = u'Не найден активный источник'
return context return context
result, user = self_check_user_exists(request.POST['email']) result, user = self_check_user_exists(request.POST['email'])
if result: if result:
if not user.is_active or user.reg_status != '4': if not user.is_active or user.reg_status != '4':
sent_registration(user, title=u'Повторное письмо активации') sent_registration(user, title=u'Повторное письмо активации')
if request.POST.get('phone') and user.phone != request.POST.get('phone'): if request.POST.get('phone') and user.phone != request.POST.get('phone'):
user.phone = request.POST['phone'] user.phone = request.POST['phone']
user.save() user.save()
else: else:
result, user = self_create_user(request.POST['email'], result, user = self_create_user(request.POST['email'],
phone=request.POST['phone'] if request.POST.get('phone') else None) phone=request.POST['phone'] if request.POST.get('phone') else None)
result, description, bill = self_create_bill(user, request.POST['service'], result, description, bill = self_create_bill(user, request.POST['service'],
request.POST['uid'] if request.POST.get('uid') else None) request.POST['uid'] if request.POST.get('uid') else None)
context['code'] = '1' if result else '0' context['code'] = '1' if result else '0'
context['response'] = description context['response'] = description
context['data'] = bill.get_face() context['data'] = bill.get_face()
rel_source = TrafHistory.objects.create(action='O', source=source, token=request.POST['token'], data=request.POST, rel_source = TrafHistory.objects.create(action='O', source=source, token=request.POST['token'], data=request.POST,
result_description=description, result=True if result else False) result_description=description, result=True if result else False)
bill.traf_source = rel_source bill.traf_source = rel_source
bill.save() bill.save()
return context return context
@out_api_decor(without_auth=True, need_keys=['token', 'data'], method='POST', check_request=True) @out_api_decor(without_auth=True, need_keys=['token', 'data'], method='POST', check_request=True)
def set_lendos_data(request, context): def set_lendos_data(request, context):
# Создание пользователя # Создание пользователя
res = False res = False
result, source = self_check_token(request.POST['token']) result, source = self_check_token(request.POST['token'])
if not result: if not result:
context['code'] = '0' context['code'] = '0'
description = u'Не найден активный источник' description = u'Не найден активный источник'
context['response'] = description context['response'] = description
return context return context
TrafHistory.objects.create(action='D', source=source, token=request.POST['token'], data=request.POST['data'], TrafHistory.objects.create(action='D', source=source, token=request.POST['token'], data=request.POST['data'],
result_description='Данные из форм', result=res) result_description='Данные из форм', result=res)
return context return context

@ -1,40 +1,40 @@
# coding=utf-8 # coding=utf-8
from celery.task import periodic_task from celery.task import periodic_task
from datetime import timedelta, datetime from datetime import timedelta, datetime
from access.models import User, TrafSource, TrafTokenHistory from access.models import User, TrafSource, TrafTokenHistory
@periodic_task(run_every=timedelta(minutes=20)) @periodic_task(run_every=timedelta(minutes=20))
def check_prepo_delay(): def check_prepo_delay():
# Проверка просроченых задач преподавателя # Проверка просроченых задач преподавателя
for res in User.objects.filter(delay_date__lte=datetime.now(), in_role='T'): for res in User.objects.filter(delay_date__lte=datetime.now(), in_role='T'):
res.delay = False res.delay = False
res.delay_description = '' res.delay_description = ''
res.delay_date = None res.delay_date = None
res.save() res.save()
@periodic_task(run_every=timedelta(minutes=1)) @periodic_task(run_every=timedelta(minutes=1))
def check_online(): def check_online():
for user in User.objects.filter(status='ON', last_time__lte=datetime.now()-timedelta(minutes=10)): for user in User.objects.filter(status='ON', last_time__lte=datetime.now()-timedelta(minutes=10)):
user.status = 'OFF' user.status = 'OFF'
user.save() user.save()
@periodic_task(run_every=timedelta(hours=1)) @periodic_task(run_every=timedelta(hours=1))
def check_traf_source(): def check_traf_source():
for source in TrafSource.objects.filter(on=True).exclude(live_time=None): for source in TrafSource.objects.filter(on=True).exclude(live_time=None):
if source.token and source.token_start + timedelta(hours=source.live_time) < datetime.now(): if source.token and source.token_start + timedelta(hours=source.live_time) < datetime.now():
source.on = False source.on = False
TrafTokenHistory.objects.create(token=source.token, source=source, live_time=source.live_time, date_start=source.token_start, date_end=datetime.now()) TrafTokenHistory.objects.create(token=source.token, source=source, live_time=source.live_time, date_start=source.token_start, date_end=datetime.now())
source.token = None source.token = None
source.token_start = None source.token_start = None
source.save() source.save()
#@periodic_task(run_every=timedelta(minutes=1)) #@periodic_task(run_every=timedelta(minutes=1))
#def sync_users(): #def sync_users():
# for user in User.objects.filter(sync=False): # for user in User.objects.filter(sync=False):
# result = sent_sync_user(user) # result = sent_sync_user(user)
# if result: # if result:
# user._set_synced() # user._set_synced()

@ -1,12 +1,12 @@
from access import teach_views as views from access import teach_views as views
from django.conf.urls import url from django.conf.urls import url
urlpatterns = [ urlpatterns = [
url(r'profile/$', views.profile), url(r'profile/$', views.profile),
url(r'homeworks/([0-9]{1,99})$', views.homeworks), url(r'homeworks/([0-9]{1,99})$', views.homeworks),
url(r'comments/([0-9]{1,99})$', views.comments), url(r'comments/([0-9]{1,99})$', views.comments),
url(r'exams/([0-9]{1,99})$', views.exams), url(r'exams/([0-9]{1,99})$', views.exams),
url(r'materials/([0-9]{1,99})$', views.materials), url(r'materials/([0-9]{1,99})$', views.materials),
url(r'workshop/homework/([0-9]{1,99})$', views.homework_workshop), url(r'workshop/homework/([0-9]{1,99})$', views.homework_workshop),
url(r'workshop/exam/([0-9]{1,99})$', views.exam_workshop) url(r'workshop/exam/([0-9]{1,99})$', views.exam_workshop)
] ]

@ -1,140 +1,140 @@
# coding=utf-8 # coding=utf-8
from django.http import Http404 from django.http import Http404
from lms.decors import response_decor from lms.decors import response_decor
from lms.tools import check_role from lms.tools import check_role
from courses.models import Course from courses.models import Course
from journals.models import HomeworkJ, ExamJ, HomeworkTry, ExamTry from journals.models import HomeworkJ, ExamJ, HomeworkTry, ExamTry
@response_decor(template='teach_profile.html') @response_decor(template='teach_profile.html')
def profile(request): def profile(request):
checker = check_role(request.user, 'T') checker = check_role(request.user, 'T')
if checker['result']: if checker['result']:
# Быстрый список активных студентов # Быстрый список активных студентов
all_homeworks = [] all_homeworks = []
homeworks = {} homeworks = {}
exams = {} exams = {}
for journal in HomeworkTry.objects.filter(teacher=request.user, f_date=None).exclude(success=True, date=None for journal in HomeworkTry.objects.filter(teacher=request.user, f_date=None).exclude(success=True, date=None
).order_by('date'): ).order_by('date'):
if journal.parent.get_status_flag() not in ['N', 'F']: if journal.parent.get_status_flag() not in ['N', 'F']:
title = (journal.material.course.get_title(), title = (journal.material.course.get_title(),
journal.material.get_title(), journal.material.get_title(),
journal.material.id, journal.material.id,
journal.material.theme.sort, journal.material.theme.sort,
journal.material.get_icon()) journal.material.get_icon())
if not title in homeworks: homeworks[title] = [] if not title in homeworks: homeworks[title] = []
homeworks[title].append(journal) homeworks[title].append(journal)
for journal in HomeworkTry.objects.filter(teacher=request.user, f_date=None).exclude(success=True, date=None for journal in HomeworkTry.objects.filter(teacher=request.user, f_date=None).exclude(success=True, date=None
).order_by('date'): ).order_by('date'):
if journal.parent.get_status_flag() not in ['N', 'F']: if journal.parent.get_status_flag() not in ['N', 'F']:
all_homeworks.append(journal) all_homeworks.append(journal)
for journal in ExamTry.objects.filter(teacher=request.user, f_date=None).exclude(success=True, date=None for journal in ExamTry.objects.filter(teacher=request.user, f_date=None).exclude(success=True, date=None
).order_by('date'): ).order_by('date'):
if journal.parent.get_status_flag() not in ['N', 'F']: if journal.parent.get_status_flag() not in ['N', 'F']:
title = (journal.material.course.get_title(), title = (journal.material.course.get_title(),
journal.material.get_title(), journal.material.get_title(),
journal.material.id) journal.material.id)
if not title in exams: exams[title] = [] if not title in exams: exams[title] = []
exams[title].append(journal) exams[title].append(journal)
return { return {
'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id'), 'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id'),
'active_themes': homeworks, 'active_themes': homeworks,
'active_exams': exams, 'active_exams': exams,
'all_homeworks': all_homeworks, 'all_homeworks': all_homeworks,
} }
else: else:
return checker return checker
@response_decor(template='teacher_homeworks.html') @response_decor(template='teacher_homeworks.html')
def homeworks(request, course): def homeworks(request, course):
# Список домашних заданий по курсу на проверку # Список домашних заданий по курсу на проверку
checker = check_role(request.user, 'T') checker = check_role(request.user, 'T')
if checker['result']: if checker['result']:
return {'T': 'H', return {'T': 'H',
'course': Course.objects.get(id=course), 'course': Course.objects.get(id=course),
'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id'), 'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id'),
'homeworks': HomeworkTry.objects.filter(teacher=request.user).order_by( 'homeworks': HomeworkTry.objects.filter(teacher=request.user).order_by(
'-date') '-date')
} }
else: else:
return checker return checker
@response_decor(template='teacher_comments.html') @response_decor(template='teacher_comments.html')
def comments(request, course): def comments(request, course):
# Комментари для преподавателя # Комментари для преподавателя
checker = check_role(request.user, 'T') checker = check_role(request.user, 'T')
if checker['result']: if checker['result']:
return {'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id')} return {'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id')}
else: else:
return checker return checker
@response_decor(template='teacher_materials.html') @response_decor(template='teacher_materials.html')
def materials(request, course): def materials(request, course):
# Материалы курсов # Материалы курсов
checker = check_role(request.user, 'T') checker = check_role(request.user, 'T')
if checker['result']: if checker['result']:
return {'T': 'M', return {'T': 'M',
'courses': Course.objects.filter(teachers__in=[request.user]), 'courses': Course.objects.filter(teachers__in=[request.user]),
'course': Course.objects.get(id=course)} 'course': Course.objects.get(id=course)}
else: else:
return checker return checker
@response_decor(template='teacher_exams.html') @response_decor(template='teacher_exams.html')
def exams(request, exam): def exams(request, exam):
checker = check_role(request.user, 'T') checker = check_role(request.user, 'T')
if checker['result']: if checker['result']:
return {'T': 'E', return {'T': 'E',
'course': Course.objects.get(id=exam), 'course': Course.objects.get(id=exam),
'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id'), 'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id'),
'exams': ExamTry.objects.filter(teacher=request.user).order_by('-date')} 'exams': ExamTry.objects.filter(teacher=request.user).order_by('-date')}
else: else:
return checker return checker
@response_decor(template='workshop_homework.html') @response_decor(template='workshop_homework.html')
def homework_workshop(request, homework): def homework_workshop(request, homework):
if request.user.in_role in ['T', 'S2', 'A']: if request.user.in_role in ['T', 'S2', 'A']:
try: try:
journal = HomeworkJ.objects.get(id=homework) journal = HomeworkJ.objects.get(id=homework)
except HomeworkJ.DoesNotExist: except HomeworkJ.DoesNotExist:
raise Http404 raise Http404
else: else:
if not journal.teacher or journal.teacher == request.user or request.user.in_role in ['S2', 'A']: if not journal.teacher or journal.teacher == request.user or request.user.in_role in ['S2', 'A']:
return { return {
'homework': journal.get_face(request.user), 'homework': journal.get_face(request.user),
'student': journal.student, 'student': journal.student,
'theme': journal.material.theme 'theme': journal.material.theme
} }
else: else:
raise Http404 raise Http404
else: else:
raise Http404 raise Http404
@response_decor(template='workshop_exam.html') @response_decor(template='workshop_exam.html')
def exam_workshop(request, exam): def exam_workshop(request, exam):
if request.user.in_role in ['T', 'S2', 'A']: if request.user.in_role in ['T', 'S2', 'A']:
try: try:
journal = ExamJ.objects.get(id=exam) journal = ExamJ.objects.get(id=exam)
except ExamJ.DoesNotExist: except ExamJ.DoesNotExist:
raise Http404 raise Http404
else: else:
if not journal.teacher or journal.teacher == request.user or request.user.in_role in ['S2', 'A']: if not journal.teacher or journal.teacher == request.user or request.user.in_role in ['S2', 'A']:
return { return {
'exam': journal.get_face(request.user), 'exam': journal.get_face(request.user),
'student': journal.student, 'student': journal.student,
'theme': journal.material.theme 'theme': journal.material.theme
} }
else: else:
raise Http404 raise Http404
else: else:
raise Http404 raise Http404

@ -1,43 +1,43 @@
from access import views from access import views
from access import api from access import api
from access import out_api from access import out_api
from django.conf.urls import url from django.conf.urls import url
urlpatterns = [ urlpatterns = [
url(r'accept_forgot/$', views.accept_forgot), url(r'accept_forgot/$', views.accept_forgot),
url(r'activate_email/$', views.activate_email), url(r'activate_email/$', views.activate_email),
url(r'all_actions/$', views.all_actions), url(r'all_actions/$', views.all_actions),
url(r'get_subscription_data/$', api.get_subscription_data), url(r'get_subscription_data/$', api.get_subscription_data),
url(r'send_subscription_data/$', api.send_subscription_data), url(r'send_subscription_data/$', api.send_subscription_data),
url(r'forgot/$', api.forgot), url(r'forgot/$', api.forgot),
url(r'fast_auth/$', views.fast_auth), url(r'fast_auth/$', views.fast_auth),
url(r'auth/', api.auth_in), url(r'auth/', api.auth_in),
url(r'auth_from_admin/', api.auth_from_admin), url(r'auth_from_admin/', api.auth_from_admin),
url(r'activate/$', views.activate), url(r'activate/$', views.activate),
url(r'profile/$', views.profile), url(r'profile/$', views.profile),
url(r'profile/(?P<view_id>.*)/$', views.profile_view), url(r'profile/(?P<view_id>.*)/$', views.profile_view),
url(r'registration/$', api.registration), url(r'registration/$', api.registration),
url(r'reg_step/$', api.reg_step), url(r'reg_step/$', api.reg_step),
url(r'logout/$', views.logout_in), url(r'logout/$', views.logout_in),
url(r'come_off/$', views.come_off), url(r'come_off/$', views.come_off),
url(r'check_auth/$', api.check_auth), url(r'check_auth/$', api.check_auth),
url(r'get_settings_data/$', api.get_settings_data), url(r'get_settings_data/$', api.get_settings_data),
url(r'send_settings_data/$', api.send_settings_data), url(r'send_settings_data/$', api.send_settings_data),
url(r'get_user_role/$', api.get_user_role), url(r'get_user_role/$', api.get_user_role),
url(r'new_role/$', api.new_role), url(r'new_role/$', api.new_role),
url(r'change_password/$', api.change_password), url(r'change_password/$', api.change_password),
url(r'by_error/$', views.by_error), url(r'by_error/$', views.by_error),
url(r'auth_error/$', views.auth_error), url(r'auth_error/$', views.auth_error),
url(r'access_error/$', views.access_error), url(r'access_error/$', views.access_error),
url(r'check_active/$', api.check_active), url(r'check_active/$', api.check_active),
url(r'resent_active_email$', api.resent_active_email), url(r'resent_active_email$', api.resent_active_email),
url(r'change_private/$', api.change_private), url(r'change_private/$', api.change_private),
url(r'create_user/$', out_api.create_user), url(r'create_user/$', out_api.create_user),
url(r'create_bill/$', out_api.create_bill), url(r'create_bill/$', out_api.create_bill),
url(r'set_lendos_data/$', out_api.set_lendos_data), url(r'set_lendos_data/$', out_api.set_lendos_data),
#url(r'sync_user/$', out_api.sync_user), #url(r'sync_user/$', out_api.sync_user),
url(r'search_user/$', api.search_user), url(r'search_user/$', api.search_user),
url(r'find_user/$', api.find_user), url(r'find_user/$', api.find_user),
url(r'service_auth/$', out_api.service_auth), url(r'service_auth/$', out_api.service_auth),
url(r'set_in_user/$', out_api.set_in_user) url(r'set_in_user/$', out_api.set_in_user)
] ]

@ -1,234 +1,234 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.contrib import auth from django.contrib import auth
from django.contrib.auth import logout from django.contrib.auth import logout
from django.http import Http404 from django.http import Http404
from django.shortcuts import redirect from django.shortcuts import redirect
from access.models import User, ActionJ, Document from access.models import User, ActionJ, Document
from lms.tools import random_string, condition_factory, check_role from lms.tools import random_string, condition_factory, check_role
from lms.decors import response_decor from lms.decors import response_decor
from courses.tools import get_user_achievements, get_user_diploms, get_user_completed_courses_count, \ from courses.tools import get_user_achievements, get_user_diploms, get_user_completed_courses_count, \
get_user_skills_size_count, get_user_achievements_count get_user_skills_size_count, get_user_achievements_count
from courses.tools import get_user_skills from courses.tools import get_user_skills
from journals.models import TeacherJ from journals.models import TeacherJ
from management.letters import sent_forgot_password from management.letters import sent_forgot_password
from finance.models import Bill from finance.models import Bill
from management.models import Comment from management.models import Comment
from library.models import Article from library.models import Article
@response_decor(template='index.html', without_auth=True) @response_decor(template='index.html', without_auth=True)
def activate_email(request): def activate_email(request):
# Активация пользователя через почту # Активация пользователя через почту
if request.GET.get('token') and request.GET.get('email'): if request.GET.get('token') and request.GET.get('email'):
try: try:
email = request.GET['email'].lower() email = request.GET['email'].lower()
user = User.objects.get(email=email, token=request.GET['token']) user = User.objects.get(email=email, token=request.GET['token'])
except User.DoesNotExist: except User.DoesNotExist:
return {'redirect': '/404/?error=Ссылка устарела. Дождитесь письма с актуальной ссылкой'} return {'redirect': '/404/?error=Ссылка устарела. Дождитесь письма с актуальной ссылкой'}
else: else:
user.email = user.changed_email user.email = user.changed_email
user.save() user.save()
user.change_token() user.change_token()
return {'DIALOG': 'activate_email'} return {'DIALOG': 'activate_email'}
else: else:
# TODO: Отправлять пользователя в тупиковую страницу, а не на 404 # TODO: Отправлять пользователя в тупиковую страницу, а не на 404
raise Http404 raise Http404
@response_decor(template='index.html', without_auth=True) @response_decor(template='index.html', without_auth=True)
def accept_forgot(request): def accept_forgot(request):
# Подтверждение почты при восстановлении # Подтверждение почты при восстановлении
if request.GET.get('token') and request.GET.get('email'): if request.GET.get('token') and request.GET.get('email'):
try: try:
email = request.GET['email'].lower() email = request.GET['email'].lower()
user = User.objects.get(email=email, token=request.GET['token']) user = User.objects.get(email=email, token=request.GET['token'])
except User.DoesNotExist: except User.DoesNotExist:
return {'redirect': '/404/?error=Ссылка устарела. Дождитесь письма с актуальной ссылкой'} return {'redirect': '/404/?error=Ссылка устарела. Дождитесь письма с актуальной ссылкой'}
else: else:
pas = random_string(length=6).upper() pas = random_string(length=6).upper()
user.set_password(pas) user.set_password(pas)
user.change_token() user.change_token()
sent_forgot_password(user, pas) sent_forgot_password(user, pas)
return {'DIALOG': 'accept_forgot'} return {'DIALOG': 'accept_forgot'}
else: else:
# TODO: Отправлять пользователя в тупиковую страницу, а не на 404 # TODO: Отправлять пользователя в тупиковую страницу, а не на 404
raise Http404 raise Http404
@response_decor(template='activation.html', without_auth=True) @response_decor(template='activation.html', without_auth=True)
def activate(request): def activate(request):
# Страница активации пользователя # Страница активации пользователя
condition = condition_factory([ condition = condition_factory([
{'condition': request.GET.get('email'), 'error': u'Поле пользователя передано не корректно'}, {'condition': request.GET.get('email'), 'error': u'Поле пользователя передано не корректно'},
{'condition': request.GET.get('token'), 'error': u'Поле токена передано не корректно'}, {'condition': request.GET.get('token'), 'error': u'Поле токена передано не корректно'},
{'condition': request.GET.get('step'), 'error': u'Не верно передан этап'} {'condition': request.GET.get('step'), 'error': u'Не верно передан этап'}
]) ])
if condition['code'] == '1': if condition['code'] == '1':
try: try:
email = request.GET['email'].lower() email = request.GET['email'].lower()
user = User.objects.get(email=email, token=request.GET['token']) user = User.objects.get(email=email, token=request.GET['token'])
except User.DoesNotExist: except User.DoesNotExist:
return {'redirect': '/404/?error=Ссылка устарела. Дождитесь письма с актуальной ссылкой'} return {'redirect': '/404/?error=Ссылка устарела. Дождитесь письма с актуальной ссылкой'}
else: else:
if not user.is_active or user.reg_status != '4': if not user.is_active or user.reg_status != '4':
user.save() user.save()
return {'step': user.reg_status, 'token': request.GET['token'], 'email': email, return {'step': user.reg_status, 'token': request.GET['token'], 'email': email,
'phone': user.phone if user.phone else None} 'phone': user.phone if user.phone else None}
else: else:
raise Http404 raise Http404
else: else:
raise Http404 raise Http404
@response_decor(template='profile.html', without_auth=True) @response_decor(template='profile.html', without_auth=True)
def profile(request): def profile(request):
if request.user.is_authenticated(): if request.user.is_authenticated():
checker = check_role(request.user, 'U') checker = check_role(request.user, 'U')
if checker['result']: if checker['result']:
courses = [i.get_head_face() for i in courses = [i.get_head_face() for i in
TeacherJ.objects.filter(student=request.user, course__public=True).exclude(progress=0)] TeacherJ.objects.filter(student=request.user, course__public=True).exclude(progress=0)]
return {'in_user': None, return {'in_user': None,
'courses': courses, 'courses': courses,
'achievements': get_user_achievements(request.user), 'achievements': get_user_achievements(request.user),
'skills': get_user_skills(request.user), 'skills': get_user_skills(request.user),
'diploms': get_user_diploms(request.user), 'diploms': get_user_diploms(request.user),
'completed_courses': get_user_completed_courses_count(request.user), 'completed_courses': get_user_completed_courses_count(request.user),
'got_achievements': get_user_achievements_count(request.user), 'got_achievements': get_user_achievements_count(request.user),
'skills_size': get_user_skills_size_count(request.user), 'skills_size': get_user_skills_size_count(request.user),
'documents': Document.objects.filter(user=request.user), 'documents': Document.objects.filter(user=request.user),
'b_bills': Bill.objects.filter(user=request.user), 'b_bills': Bill.objects.filter(user=request.user),
'articles': [i.get_face(request.user) for i in Article.objects.filter(views__id=request.user.id)], 'articles': [i.get_face(request.user) for i in Article.objects.filter(views__id=request.user.id)],
'forum_ask': Comment.objects.filter(owner=request.user, status='Q'), 'forum_ask': Comment.objects.filter(owner=request.user, status='Q'),
'forum_ans': { 'forum_ans': {
'all': 'all':
Comment.objects.filter(owner=request.user, status='Q2'), Comment.objects.filter(owner=request.user, status='Q2'),
'best': 'best':
Comment.objects.filter(owner=request.user, status='Q2', best=True).count() Comment.objects.filter(owner=request.user, status='Q2', best=True).count()
} }
} }
else: else:
return checker return checker
else: else:
return {'redirect': '/access/auth_error/'} return {'redirect': '/access/auth_error/'}
@response_decor(template='profile.html', without_auth=True) @response_decor(template='profile.html', without_auth=True)
def profile_view(request, view_id): def profile_view(request, view_id):
if view_id: if view_id:
try: try:
user = User.objects.get(interactive_key=view_id) user = User.objects.get(interactive_key=view_id)
except User.DoesNotExist: except User.DoesNotExist:
raise Http404 raise Http404
else: else:
if request.user.is_authenticated() and request.user.is_admin: if request.user.is_authenticated() and request.user.is_admin:
go = True go = True
else: else:
go = False go = False
if user.private == 'A' or user.private == 'L': if user.private == 'A' or user.private == 'L':
go = True go = True
elif user.private == 'U': elif user.private == 'U':
if request.user.is_authenticated() and request.user.is_active: if request.user.is_authenticated() and request.user.is_active:
go = True go = True
elif user.private == 'B': elif user.private == 'B':
if request.user == user: if request.user == user:
go = True go = True
if go: if go:
courses = [i.get_head_face() for i in TeacherJ.objects.filter(student=user, course__public=True).exclude(progress=0)] courses = [i.get_head_face() for i in TeacherJ.objects.filter(student=user, course__public=True).exclude(progress=0)]
return {'in_user': user, return {'in_user': user,
'courses': courses, 'courses': courses,
'achievements': get_user_achievements(user), 'achievements': get_user_achievements(user),
'skills': get_user_skills(user), 'skills': get_user_skills(user),
'diploms': get_user_diploms(user), 'diploms': get_user_diploms(user),
'articles': [i.get_face(user) for i in Article.objects.filter(views__id=user.id)], 'articles': [i.get_face(user) for i in Article.objects.filter(views__id=user.id)],
'completed_courses': get_user_completed_courses_count(user), 'completed_courses': get_user_completed_courses_count(user),
'got_achievements': get_user_achievements_count(user), 'got_achievements': get_user_achievements_count(user),
'skills_size': get_user_skills_size_count(user), 'skills_size': get_user_skills_size_count(user),
'forum_ask': Comment.objects.filter(owner=user, status='Q'), 'forum_ask': Comment.objects.filter(owner=user, status='Q'),
'forum_ans': { 'forum_ans': {
'all': 'all':
Comment.objects.filter(owner=user, status='Q2'), Comment.objects.filter(owner=user, status='Q2'),
'best': 'best':
Comment.objects.filter(owner=user, status='Q2', best=True).count() Comment.objects.filter(owner=user, status='Q2', best=True).count()
}} }}
else: else:
raise Http404 raise Http404
def logout_in(request): def logout_in(request):
logout(request) logout(request)
return redirect('/') return redirect('/')
@response_decor(template='index.html') @response_decor(template='index.html')
def come_off(request): def come_off(request):
# Деактивация подписок # Деактивация подписок
context = {'code': 'error'} context = {'code': 'error'}
condition = condition_factory([ condition = condition_factory([
{'condition': request.GET.get('token'), 'error': u'В запросе не обнаружен токен'}, {'condition': request.GET.get('token'), 'error': u'В запросе не обнаружен токен'},
{'condition': request.GET.get('right'), 'error': u'В запросе не обнаружено изменяемое право'} {'condition': request.GET.get('right'), 'error': u'В запросе не обнаружено изменяемое право'}
]) ])
if condition['code'] == '1': if condition['code'] == '1':
try: try:
user = User.objects.get(token=request.GET['token']) user = User.objects.get(token=request.GET['token'])
except User.DoesNotExist: except User.DoesNotExist:
context['response'] = u'Запрос не обработан' context['response'] = u'Запрос не обработан'
else: else:
if user.rights.check_right(user, request.GET['right']): if user.rights.check_right(user, request.GET['right']):
if request.GET['right'] == 'feedback_follow': if request.GET['right'] == 'feedback_follow':
user.rights.set_right('feedback_follow', False) user.rights.set_right('feedback_follow', False)
context['response'] = u'Подписка деактивирована' context['response'] = u'Подписка деактивирована'
context['code'] = u'info' context['code'] = u'info'
elif request.GET['right'] == 'news_follow': elif request.GET['right'] == 'news_follow':
user.rights.set_right('news_follow', False) user.rights.set_right('news_follow', False)
context['response'] = u'Подписка деактивирована' context['response'] = u'Подписка деактивирована'
context['code'] = u'info' context['code'] = u'info'
else: else:
context[ context[
'response'] = u'Вы указали право, на которое не распространяется функция быстрого отключения' 'response'] = u'Вы указали право, на которое не распространяется функция быстрого отключения'
else: else:
context['response'] = u'Вы уже описаны от данной рассылки' context['response'] = u'Вы уже описаны от данной рассылки'
else: else:
context['response'] = condition['response'] context['response'] = condition['response']
context['code'] = '0' context['code'] = '0'
return {'response': context['response'], 'code': context['code']} return {'response': context['response'], 'code': context['code']}
@response_decor(template='auth_error.html', without_auth=True) @response_decor(template='auth_error.html', without_auth=True)
def auth_error(request): def auth_error(request):
# Запрешен доступ - кабинет менеджера, пепода и.т.д. # Запрешен доступ - кабинет менеджера, пепода и.т.д.
return {} return {}
@response_decor(template='access_error.html', without_auth=True) @response_decor(template='access_error.html', without_auth=True)
def access_error(request): def access_error(request):
# Закрытая страница - не открытый урок, дз и.т.д. # Закрытая страница - не открытый урок, дз и.т.д.
return {} return {}
@response_decor(template='by_error.html', without_auth=True) @response_decor(template='by_error.html', without_auth=True)
def by_error(request): def by_error(request):
# Запрещен доступ по подпискеs # Запрещен доступ по подпискеs
return {} return {}
@response_decor(template='all_actions.html', without_auth=False) @response_decor(template='all_actions.html', without_auth=False)
def all_actions(request): def all_actions(request):
# Страница событий # Страница событий
return {'b_actions': ActionJ.objects.filter(student=request.user).order_by('-id')} return {'b_actions': ActionJ.objects.filter(student=request.user).order_by('-id')}
@response_decor(template='index.html', without_auth=True) @response_decor(template='index.html', without_auth=True)
def fast_auth(request): def fast_auth(request):
# Авторизация по кнопке # Авторизация по кнопке
# FIXME: Усилить проверку # FIXME: Усилить проверку
if request.POST.get('email') and request.POST.get('password'): if request.POST.get('email') and request.POST.get('password'):
email = request.POST['email'].lower() email = request.POST['email'].lower()
user = auth.authenticate(email=email, password=request.POST['password']) user = auth.authenticate(email=email, password=request.POST['password'])
if user is not None: if user is not None:
auth.login(request, user) auth.login(request, user)
return {'redirect': '/'} return {'redirect': '/'}

@ -1,40 +1,40 @@
; ================================== ; ==================================
; celery worker supervisor example ; celery worker supervisor example
; ================================== ; ==================================
[program:celery_codemy] [program:celery_codemy]
command=/var/www/.envs/codemy/bin/celery worker -A lms --loglevel=INFO command=/var/www/.envs/codemy/bin/celery worker -A lms --loglevel=INFO
directory=/var/www/projects/codemy/ directory=/var/www/projects/codemy/
user=www-data user=www-data
numprocs=1 numprocs=1
stdout_logfile=/var/www/logs/codemy/celery-worker.log stdout_logfile=/var/www/logs/codemy/celery-worker.log
stderr_logfile=/var/www/logs/codemy/celery-worker.log stderr_logfile=/var/www/logs/codemy/celery-worker.log
autostart=true autostart=true
autorestart=true autorestart=true
startsecs=10 startsecs=10
stopwaitsecs = 600 stopwaitsecs = 600
killasgroup=true killasgroup=true
[program:celery_beat_codemy] [program:celery_beat_codemy]
command=/var/www/.envs/codemy/bin/celery beat -A lms --schedule /var/lib/celery/beat.db --loglevel=INFO command=/var/www/.envs/codemy/bin/celery beat -A lms --schedule /var/lib/celery/beat.db --loglevel=INFO
directory=/var/www/projects/codemy directory=/var/www/projects/codemy
user=www-data user=www-data
numprocs=1 numprocs=1
stdout_logfile=/var/www/logs/codemy/celery-beat.log stdout_logfile=/var/www/logs/codemy/celery-beat.log
stderr_logfile=/var/www/logs/codemy/celery-beat.log stderr_logfile=/var/www/logs/codemy/celery-beat.log
autostart=true autostart=true
autorestart=true autorestart=true
startsecs=10 startsecs=10
priority=999 priority=999
[program:celery_flower_codemy] [program:celery_flower_codemy]
command=/var/www/.envs/codemy/bin/celery -A lms flower command=/var/www/.envs/codemy/bin/celery -A lms flower
directory=/var/www/projects/codemy directory=/var/www/projects/codemy
user=www-data user=www-data
numprocs=1 numprocs=1
stdout_logfile=/var/www/logs/codemy/celery-flower.log stdout_logfile=/var/www/logs/codemy/celery-flower.log
stderr_logfile=/var/www/logs/codemy/celery-flower.log stderr_logfile=/var/www/logs/codemy/celery-flower.log
autostart=true autostart=true
autorestart=true autorestart=true
startsecs=10 startsecs=10
priority=600 priority=600

@ -1,51 +1,51 @@
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----

@ -1,85 +1,85 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIF9jCCBN6gAwIBAgIMY/C5dNv6x+tP/WuUMA0GCSqGSIb3DQEBCwUAMGAxCzAJ MIIF9jCCBN6gAwIBAgIMY/C5dNv6x+tP/WuUMA0GCSqGSIb3DQEBCwUAMGAxCzAJ
BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTYwNAYDVQQDEy1H BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTYwNAYDVQQDEy1H
bG9iYWxTaWduIERvbWFpbiBWYWxpZGF0aW9uIENBIC0gU0hBMjU2IC0gRzIwHhcN bG9iYWxTaWduIERvbWFpbiBWYWxpZGF0aW9uIENBIC0gU0hBMjU2IC0gRzIwHhcN
MTYwNzAxMTMyMzM0WhcNMTcwNzAyMTMyMzM0WjA5MSEwHwYDVQQLExhEb21haW4g MTYwNzAxMTMyMzM0WhcNMTcwNzAyMTMyMzM0WjA5MSEwHwYDVQQLExhEb21haW4g
Q29udHJvbCBWYWxpZGF0ZWQxFDASBgNVBAMMCyouY29kZW15LnJ1MIICIjANBgkq Q29udHJvbCBWYWxpZGF0ZWQxFDASBgNVBAMMCyouY29kZW15LnJ1MIICIjANBgkq
hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArcJkDivloDX2QRQE+s1jPH/pxq+oZGeS hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArcJkDivloDX2QRQE+s1jPH/pxq+oZGeS
Ne8aJVMXRu3IbIML+iJt0H0XGol9N9FkvSHF2G33oOmJ134Imd6BcQ/OQCT8J7Mv Ne8aJVMXRu3IbIML+iJt0H0XGol9N9FkvSHF2G33oOmJ134Imd6BcQ/OQCT8J7Mv
Pbts5Y7LWBcwUomJ+QZq9qcHFVrcP95Q0wrZTV5f2zU468dz+eUnmWVfFYIR674Z Pbts5Y7LWBcwUomJ+QZq9qcHFVrcP95Q0wrZTV5f2zU468dz+eUnmWVfFYIR674Z
ImLLtc+bLl3NjzH6t23WrTiIUmPpe4dOH9CktKoUyfzgzFcXFOI967mooMAzhefK ImLLtc+bLl3NjzH6t23WrTiIUmPpe4dOH9CktKoUyfzgzFcXFOI967mooMAzhefK
zigr+5sU34SMbWLsczspC7cj22LRpIXowFeuRnoygXXVbDvRlgU2criLFqiDCwWq zigr+5sU34SMbWLsczspC7cj22LRpIXowFeuRnoygXXVbDvRlgU2criLFqiDCwWq
i6OOVZMcNjqePwc41R4qdWeIf7mJ69xuPQtzHrO+rRC8mgGVSU+9nKunNq6tIxvO i6OOVZMcNjqePwc41R4qdWeIf7mJ69xuPQtzHrO+rRC8mgGVSU+9nKunNq6tIxvO
OnK/TeOzaJoCx/yb7XsNcYCoue3ZV3emM2WeUB6MOxG41m9AFo9TKsHOtpFLx8ty OnK/TeOzaJoCx/yb7XsNcYCoue3ZV3emM2WeUB6MOxG41m9AFo9TKsHOtpFLx8ty
WTcypBWhr6xTYhNBGTiSUMofGZmM6sjcVyQT6pEFpx50DxZeTDhnO+wSi8NZRoNK WTcypBWhr6xTYhNBGTiSUMofGZmM6sjcVyQT6pEFpx50DxZeTDhnO+wSi8NZRoNK
jqMo3wvrvJjcM1mzqRzHE5nyzU1/Gf/j5WCNdCC/+2Q8s+LXaKkm0iRUuSqmQVtp jqMo3wvrvJjcM1mzqRzHE5nyzU1/Gf/j5WCNdCC/+2Q8s+LXaKkm0iRUuSqmQVtp
kzaMCdEf33ELDshGXN4jCvTSG5w8fL+GdeZ8BpBPLob8qKkYU2kW3YqawQ9+bi7p kzaMCdEf33ELDshGXN4jCvTSG5w8fL+GdeZ8BpBPLob8qKkYU2kW3YqawQ9+bi7p
8MDs1ZCNtjScCzgtaNvoX/3/TFO4tSu/XCz5nGYKVYbjUrr1Mv9NldSIiua/hJOr 8MDs1ZCNtjScCzgtaNvoX/3/TFO4tSu/XCz5nGYKVYbjUrr1Mv9NldSIiua/hJOr
sWFfpoEXjmMCAwEAAaOCAdUwggHRMA4GA1UdDwEB/wQEAwIFoDCBlAYIKwYBBQUH sWFfpoEXjmMCAwEAAaOCAdUwggHRMA4GA1UdDwEB/wQEAwIFoDCBlAYIKwYBBQUH
AQEEgYcwgYQwRwYIKwYBBQUHMAKGO2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5j AQEEgYcwgYQwRwYIKwYBBQUHMAKGO2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5j
b20vY2FjZXJ0L2dzZG9tYWludmFsc2hhMmcycjEuY3J0MDkGCCsGAQUFBzABhi1o b20vY2FjZXJ0L2dzZG9tYWludmFsc2hhMmcycjEuY3J0MDkGCCsGAQUFBzABhi1o
dHRwOi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vZ3Nkb21haW52YWxzaGEyZzIwVgYD dHRwOi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vZ3Nkb21haW52YWxzaGEyZzIwVgYD
VR0gBE8wTTBBBgkrBgEEAaAyAQowNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cu VR0gBE8wTTBBBgkrBgEEAaAyAQowNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cu
Z2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCAYGZ4EMAQIBMAkGA1UdEwQCMAAw Z2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCAYGZ4EMAQIBMAkGA1UdEwQCMAAw
QwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9ncy9n QwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9ncy9n
c2RvbWFpbnZhbHNoYTJnMi5jcmwwIQYDVR0RBBowGIILKi5jb2RlbXkucnWCCWNv c2RvbWFpbnZhbHNoYTJnMi5jcmwwIQYDVR0RBBowGIILKi5jb2RlbXkucnWCCWNv
ZGVteS5ydTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYE ZGVteS5ydTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYE
FHlv5NiaqItBFuN0vudXy9jt1bLkMB8GA1UdIwQYMBaAFOpOfNSALeUVgYYmjIJt FHlv5NiaqItBFuN0vudXy9jt1bLkMB8GA1UdIwQYMBaAFOpOfNSALeUVgYYmjIJt
wJikz5cPMA0GCSqGSIb3DQEBCwUAA4IBAQBfIs7hKJlHw5Hly/vVhjAQzX8qcN9H wJikz5cPMA0GCSqGSIb3DQEBCwUAA4IBAQBfIs7hKJlHw5Hly/vVhjAQzX8qcN9H
ISyHjmU4KeMKtiq0RdvC2Jf1IQFmxvgmycrARH1Xc9cHoMXZ8prYonnXeRX7fqrL ISyHjmU4KeMKtiq0RdvC2Jf1IQFmxvgmycrARH1Xc9cHoMXZ8prYonnXeRX7fqrL
hsjp6x87DxwDDXqblHqpoakFXhZhY2fJCeH+YQTrY37+hOy3qOreI3CiRK5N+BYF hsjp6x87DxwDDXqblHqpoakFXhZhY2fJCeH+YQTrY37+hOy3qOreI3CiRK5N+BYF
PO78hVAa5TdawQGM3c1TeYIG3ZzQ3x2wVGAQNCXdwcJOLF9dl6z+syySTOGPABKN PO78hVAa5TdawQGM3c1TeYIG3ZzQ3x2wVGAQNCXdwcJOLF9dl6z+syySTOGPABKN
rIEKOzc4ScqIHOzuQ1qTG2QcjwyH9tarDjJd79rnZUQzf1O58DwGwaQZwh6gjksz rIEKOzc4ScqIHOzuQ1qTG2QcjwyH9tarDjJd79rnZUQzf1O58DwGwaQZwh6gjksz
QXZOLz6LR55gpBP8cGpqJIwOiZKjtLTqeE6q/kJ0C9sbxnNw9sCkeAhh QXZOLz6LR55gpBP8cGpqJIwOiZKjtLTqeE6q/kJ0C9sbxnNw9sCkeAhh
-----END CERTIFICATE----- -----END CERTIFICATE-----
Корневой сертификат Корневой сертификат
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
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
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
-----END CERTIFICATE----- -----END CERTIFICATE-----
Промежуточный сертификат Промежуточный сертификат
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIEYzCCA0ugAwIBAgILBAAAAAABRE7wPiAwDQYJKoZIhvcNAQELBQAwVzELMAkG MIIEYzCCA0ugAwIBAgILBAAAAAABRE7wPiAwDQYJKoZIhvcNAQELBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw
MDBaFw0yNDAyMjAxMDAwMDBaMGAxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i MDBaFw0yNDAyMjAxMDAwMDBaMGAxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
YWxTaWduIG52LXNhMTYwNAYDVQQDEy1HbG9iYWxTaWduIERvbWFpbiBWYWxpZGF0 YWxTaWduIG52LXNhMTYwNAYDVQQDEy1HbG9iYWxTaWduIERvbWFpbiBWYWxpZGF0
aW9uIENBIC0gU0hBMjU2IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK aW9uIENBIC0gU0hBMjU2IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQCp3cwOs+IyOd1JIqgTaZOHiOEM7nF9vZCHll1Z8syz0lhXV/lG72wm2DZC AoIBAQCp3cwOs+IyOd1JIqgTaZOHiOEM7nF9vZCHll1Z8syz0lhXV/lG72wm2DZC
jn4wsy+aPlN7H262okxFHzzTFZMcie089Ffeyr3sBppqKqAZUn9R0XQ5CJ+r69eG jn4wsy+aPlN7H262okxFHzzTFZMcie089Ffeyr3sBppqKqAZUn9R0XQ5CJ+r69eG
ExWXrjbDVGYOWvKgc4Ux47JkFGr/paKOJLu9hVIVonnu8LXuPbj0fYC82ZA1ZbgX ExWXrjbDVGYOWvKgc4Ux47JkFGr/paKOJLu9hVIVonnu8LXuPbj0fYC82ZA1ZbgX
qa2zmJ+gfn1u+z+tfMIbWTaW2jcyS0tdNQJjjtunz2LuzC7Ujcm9PGqRcqIip3It qa2zmJ+gfn1u+z+tfMIbWTaW2jcyS0tdNQJjjtunz2LuzC7Ujcm9PGqRcqIip3It
INH6yjfaGJjmFiRxJUvE5XuJUgkC/VkrBG7KB4HUs9ra2+PMgKhWBwZ8lgg3nds4 INH6yjfaGJjmFiRxJUvE5XuJUgkC/VkrBG7KB4HUs9ra2+PMgKhWBwZ8lgg3nds4
tmI0kWIHdAE42HIw4uuQcSZiwFfzAgMBAAGjggElMIIBITAOBgNVHQ8BAf8EBAMC tmI0kWIHdAE42HIw4uuQcSZiwFfzAgMBAAGjggElMIIBITAOBgNVHQ8BAf8EBAMC
AQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU6k581IAt5RWBhiaMgm3A AQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU6k581IAt5RWBhiaMgm3A
mKTPlw8wRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8v mKTPlw8wRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8v
d3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDMGA1UdHwQsMCowKKAmoCSG d3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDMGA1UdHwQsMCowKKAmoCSG
Imh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwPQYIKwYBBQUHAQEE Imh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwPQYIKwYBBQUHAQEE
MTAvMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9yb290 MTAvMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9yb290
cjEwHwYDVR0jBBgwFoAUYHtmGkUNl8qJUC99BM00qP/8/UswDQYJKoZIhvcNAQEL cjEwHwYDVR0jBBgwFoAUYHtmGkUNl8qJUC99BM00qP/8/UswDQYJKoZIhvcNAQEL
BQADggEBANdFnqDc4ONhWgt9d4QXLWVagpqNoycqhffJ7+mG/dRHzQFSlsVDvTex BQADggEBANdFnqDc4ONhWgt9d4QXLWVagpqNoycqhffJ7+mG/dRHzQFSlsVDvTex
4bjyqdKKEYRxkRWJ3AKdC8tsM4U0KJ4gsrGX3G0LEME8zV/qXdeYMcU0mVwAYVXE 4bjyqdKKEYRxkRWJ3AKdC8tsM4U0KJ4gsrGX3G0LEME8zV/qXdeYMcU0mVwAYVXE
GwJbxeOJyLS4bx448lYm6UHvPc2smU9ZSlctS32ux4j71pg79eXw6ImJuYsDy1oj GwJbxeOJyLS4bx448lYm6UHvPc2smU9ZSlctS32ux4j71pg79eXw6ImJuYsDy1oj
H6T9uOr7Lp2uanMJvPzVoLVEgqtEkS5QLlfBQ9iRBIvpES5ftD953x77PzAAi1Pj H6T9uOr7Lp2uanMJvPzVoLVEgqtEkS5QLlfBQ9iRBIvpES5ftD953x77PzAAi1Pj
tywdO02L3ORkHQRYM68bVeerDL8wBHTk8w4vMDmNSwSMHnVmZkngvkA0x1xaUZK6 tywdO02L3ORkHQRYM68bVeerDL8wBHTk8w4vMDmNSwSMHnVmZkngvkA0x1xaUZK6
EjxS1QSCVS1npd+3lXzuP8MIugS+wEY= EjxS1QSCVS1npd+3lXzuP8MIugS+wEY=
-----END CERTIFICATE----- -----END CERTIFICATE-----

@ -1,17 +1,17 @@
django==1.9.3 django==1.9.3
Pillow Pillow==3.3.0
psycopg2 psycopg2==2.6.2
simplejson simplejson==3.8.2
celery celery==3.1.23
django-celery django-celery==3.1.17
django-wysiwyg-redactor django-wysiwyg-redactor==0.4.9
raven raven==5.24.3
uwsgi uwsgi==2.0.13.1
flower flower==0.9.1
django-import-export django-import-export==0.4.5
python-dateutil python-dateutil==2.5.3
requests requests==2.11.0
ipython ipython==5.1.0
django-precise-bbcode django-precise-bbcode==1.2.6
html2bbcode html2bbcode==2.3.2
markdown markdown==2.6.7

@ -1,51 +1,51 @@
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
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 9iKW1Fp0d4hbYEwvMfwXXb6uYlLIXRB6slKxuiuZOXo5DFZzGTmgY1kgachyau4l
nNdGXctCdlT7XklQOj0WgyKkGjFrHKVS5B+Go7/jdtM+JmqR8nhfzSPysaXZbwor nNdGXctCdlT7XklQOj0WgyKkGjFrHKVS5B+Go7/jdtM+JmqR8nhfzSPysaXZbwor
P7sGB+Wx/XbCPpupIZl7nPgOh5ctLS38WAh60++JZ2uLvJCkELA9dJj9ero5r/T8 P7sGB+Wx/XbCPpupIZl7nPgOh5ctLS38WAh60++JZ2uLvJCkELA9dJj9ero5r/T8
I4RjNK759mVgzay1UYRlmBFK23JwZxqnpA0gFbfVYyyAfA3VTlLu8ydpNq93Gd1/ I4RjNK759mVgzay1UYRlmBFK23JwZxqnpA0gFbfVYyyAfA3VTlLu8ydpNq93Gd1/
w2C5YL9iah7xI4XIlPiOLXWxWyuX7x0IrshejWTSroMCggEBAK8Bg3Q3GzWFYHJc w2C5YL9iah7xI4XIlPiOLXWxWyuX7x0IrshejWTSroMCggEBAK8Bg3Q3GzWFYHJc
OFQcNKQ3v00xpYh9sG1XzgsczHEkL7xJ84xt57vcfre9zb0/NH95/FElK24Fe1SO OFQcNKQ3v00xpYh9sG1XzgsczHEkL7xJ84xt57vcfre9zb0/NH95/FElK24Fe1SO
53qR1u3YlMkJnO3RTSMyNs1ukBbIV3oyYKsrXtZ1qWhvs0we5Vj6FM17ENqgM7rv 53qR1u3YlMkJnO3RTSMyNs1ukBbIV3oyYKsrXtZ1qWhvs0we5Vj6FM17ENqgM7rv
cvCWtfjdikqOGqBbAQd8lQF6oYuR7brxPIzUhA3PP4IVaONWF2A+GrWlFBkzMpdb cvCWtfjdikqOGqBbAQd8lQF6oYuR7brxPIzUhA3PP4IVaONWF2A+GrWlFBkzMpdb
SzHClYKXgmOrtvVyi1uJjRp0y03j1tcctQCDCdOEXi28zHIXv/TUkzJGuyJXEgC5 SzHClYKXgmOrtvVyi1uJjRp0y03j1tcctQCDCdOEXi28zHIXv/TUkzJGuyJXEgC5
oH9VKouZgXsKdena19LKydUp9kpnBV5DDABu5ibEYZDrjFbWr6uMj3kklp20yN6J oH9VKouZgXsKdena19LKydUp9kpnBV5DDABu5ibEYZDrjFbWr6uMj3kklp20yN6J
D/mAkv0CggEAcWLGHT0f3d8BeI8XgHczQRFqddC6mqxxLZfL7JMzTgXxtUlFgcB2 D/mAkv0CggEAcWLGHT0f3d8BeI8XgHczQRFqddC6mqxxLZfL7JMzTgXxtUlFgcB2
Ts+uHysAefvI8lJEi/tSovQGpJ1sf60Nzg+OwkiTH3vkMSV4Yn5eCLvt0kUrRH7r Ts+uHysAefvI8lJEi/tSovQGpJ1sf60Nzg+OwkiTH3vkMSV4Yn5eCLvt0kUrRH7r
6hWCrOE67H0fdOFxktDRh9X3ggSWvsegPjaKm0hrz53L/XFedSYxAnFYcnCLj5VF 6hWCrOE67H0fdOFxktDRh9X3ggSWvsegPjaKm0hrz53L/XFedSYxAnFYcnCLj5VF
njVbpZgDH97XEnOo+QciJncLg6hfducC2I1sjVIuLWZttBN+eTj46NjKwA1l+9Hz njVbpZgDH97XEnOo+QciJncLg6hfducC2I1sjVIuLWZttBN+eTj46NjKwA1l+9Hz
Shq2QtXrogfCyUlpsHqxF7HPFNTk3gxSAHMhu6i7hPx4JdVzIPwNrXMfcQBXVJLA Shq2QtXrogfCyUlpsHqxF7HPFNTk3gxSAHMhu6i7hPx4JdVzIPwNrXMfcQBXVJLA
2E9NAUV7fznKtDH8Ynd+wnmzgF/kg2xidwKCAQAg4h/BV1tPoJBuX2utlvvw+TjS 2E9NAUV7fznKtDH8Ynd+wnmzgF/kg2xidwKCAQAg4h/BV1tPoJBuX2utlvvw+TjS
yuN6GcR7aZu4tvkctktvxcRihyyiZ1Rycftzqij1haA4xxcCzGFDbpAdjUwfO43+ yuN6GcR7aZu4tvkctktvxcRihyyiZ1Rycftzqij1haA4xxcCzGFDbpAdjUwfO43+
0RIV3oLnpvxATxOHGNhvUa7GGYgdJLs9hrX9cTqZRR2Bqt5isTWytaI+b8ViEP7w 0RIV3oLnpvxATxOHGNhvUa7GGYgdJLs9hrX9cTqZRR2Bqt5isTWytaI+b8ViEP7w
rvZQVBkmeg9FUXC4rcTSkbaPrzi3RRMkdtu+EdszLJAEEgt6umqNPd3AIDcwAgK/ rvZQVBkmeg9FUXC4rcTSkbaPrzi3RRMkdtu+EdszLJAEEgt6umqNPd3AIDcwAgK/
2rclPBpncTWYWRRoaay+BMHyJPNmgFZdTkem36WiM1xQ3b1I0fzjcqdX+aDn6Cm9 2rclPBpncTWYWRRoaay+BMHyJPNmgFZdTkem36WiM1xQ3b1I0fzjcqdX+aDn6Cm9
PUxB/vFK9xffL0geEAKptfZJ/kbcZlzecO9GosMvYTEty1ikLTxdYx39/kSm PUxB/vFK9xffL0geEAKptfZJ/kbcZlzecO9GosMvYTEty1ikLTxdYx39/kSm
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----

@ -1,28 +1,28 @@
-----BEGIN CERTIFICATE REQUEST----- -----BEGIN CERTIFICATE REQUEST-----
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
72c= 72c=
-----END CERTIFICATE REQUEST----- -----END CERTIFICATE REQUEST-----

@ -1,8 +1,8 @@
[program:codemy] [program:codemy]
command=/usr/bin/uwsgi --ini /var/www/configs/codemy/uwsgi.ini command=/usr/bin/uwsgi --ini /var/www/configs/codemy/uwsgi.ini
directory=/var/www/projects/codemy directory=/var/www/projects/codemy
user=www-data user=www-data
group=www-data group=www-data
autostart=true autostart=true
autorestart=true autorestart=true
stderr_logfile=/var/www/logs/codemy/supervisor-errors.log stderr_logfile=/var/www/logs/codemy/supervisor-errors.log

@ -1,15 +1,15 @@
[uwsgi] [uwsgi]
chdir = /var/www/projects/codemy/ chdir = /var/www/projects/codemy/
env = DJANGO_SETTINGS_MODULE=lms.settings env = DJANGO_SETTINGS_MODULE=lms.settings
module = lms.wsgi:application module = lms.wsgi:application
home = /var/www/.envs/codemy/ home = /var/www/.envs/codemy/
master = true master = true
threads = 3 threads = 3
processes = 2 processes = 2
socket = /var/www/run/codemy.sock socket = /var/www/run/codemy.sock
chmod-socket = 777 chmod-socket = 777
vacuum = true vacuum = true
harakiri = 20 harakiri = 20
plugins=python34 plugins=python34
uid = www-data uid = www-data
gid = www-data gid = www-data

@ -1,120 +1,120 @@
from django.contrib import admin from django.contrib import admin
from access.models import User from access.models import User
from courses.models import Lesson, Course, CourseTheme, Homework, Exam, Skills, Achievements, SkillJ, CourseMap, \ from courses.models import Lesson, Course, CourseTheme, Homework, Exam, Skills, Achievements, SkillJ, CourseMap, \
AchievementsMap, Diploma, MaterialDirection AchievementsMap, Diploma, MaterialDirection
class LessonAdmin(admin.ModelAdmin): class LessonAdmin(admin.ModelAdmin):
list_display = ('id', 'get_title', 'sort', 'theme', 'token', 'on_comment') list_display = ('id', 'get_title', 'sort', 'theme', 'token', 'on_comment')
raw_id_fields = ['materials'] raw_id_fields = ['materials']
search_fields = ['title', 'sort', 'id', 'token'] search_fields = ['title', 'sort', 'id', 'token']
list_filter = ['course', 'on_comment', 'theme'] list_filter = ['course', 'on_comment', 'theme']
def get_title(self, obj): def get_title(self, obj):
return obj.title[:100] return obj.title[:100]
admin.site.register(Lesson, LessonAdmin) admin.site.register(Lesson, LessonAdmin)
class MaterialDirectionAdmin(admin.ModelAdmin): class MaterialDirectionAdmin(admin.ModelAdmin):
list_display = ('title', 'color',) list_display = ('title', 'color',)
raw_id_fields = ['mentors'] raw_id_fields = ['mentors']
def formfield_for_manytomany(self, db_field, request, **kwargs): def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == "mentors": if db_field.name == "mentors":
kwargs["queryset"] = User.objects.filter(in_role='S2') kwargs["queryset"] = User.objects.filter(in_role='S2')
return super(MaterialDirectionAdmin, self).formfield_for_manytomany(db_field, request, **kwargs) return super(MaterialDirectionAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
admin.site.register(MaterialDirection, MaterialDirectionAdmin) admin.site.register(MaterialDirection, MaterialDirectionAdmin)
class CourseAdmin(admin.ModelAdmin): class CourseAdmin(admin.ModelAdmin):
list_display = ('title', 'id', 'direction', 'must_build', 'public', ) list_display = ('title', 'id', 'direction', 'must_build', 'public', )
list_filter = ('direction', ) list_filter = ('direction', )
raw_id_fields = ['teachers'] raw_id_fields = ['teachers']
search_fields = ['title', 'id'] search_fields = ['title', 'id']
filter_horizontal = ['recommend', 'keywords'] filter_horizontal = ['recommend', 'keywords']
def formfield_for_manytomany(self, db_field, request, **kwargs): def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == "teachers": if db_field.name == "teachers":
kwargs["queryset"] = User.objects.filter(in_role='T') kwargs["queryset"] = User.objects.filter(in_role='T')
if db_field.name == "mentors": if db_field.name == "mentors":
kwargs["queryset"] = User.objects.filter(in_role='S2') kwargs["queryset"] = User.objects.filter(in_role='S2')
return super(CourseAdmin, self).formfield_for_manytomany(db_field, request, **kwargs) return super(CourseAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
admin.site.register(Course, CourseAdmin) admin.site.register(Course, CourseAdmin)
class CourseThemeAdmin(admin.ModelAdmin): class CourseThemeAdmin(admin.ModelAdmin):
list_display = ('id', 'sort', 'title', 'course', '_type', 'price_type', 'on_comment', ) list_display = ('id', 'sort', 'title', 'course', '_type', 'price_type', 'on_comment', )
list_filter = ['course', '_type', 'on_comment'] list_filter = ['course', '_type', 'on_comment']
search_fields = ['title', 'sort'] search_fields = ['title', 'sort']
admin.site.register(CourseTheme, CourseThemeAdmin) admin.site.register(CourseTheme, CourseThemeAdmin)
class HomeworkAdmin(admin.ModelAdmin): class HomeworkAdmin(admin.ModelAdmin):
list_display = ('id', 'course', 'theme', 'token') list_display = ('id', 'course', 'theme', 'token')
search_fields = ['id', 'theme', 'course', 'token'] search_fields = ['id', 'theme', 'course', 'token']
list_filter = ('course',) list_filter = ('course',)
raw_id_fields = ('theme', 'course', 'materials', ) raw_id_fields = ('theme', 'course', 'materials', )
admin.site.register(Homework, HomeworkAdmin) admin.site.register(Homework, HomeworkAdmin)
class ExamAdmin(admin.ModelAdmin): class ExamAdmin(admin.ModelAdmin):
list_display = ('course', 'token', ) list_display = ('course', 'token', )
raw_id_fields = ['materials'] raw_id_fields = ['materials']
search_fields = ['id', 'course__title'] search_fields = ['id', 'course__title']
admin.site.register(Exam, ExamAdmin) admin.site.register(Exam, ExamAdmin)
class SkillsAdmin(admin.ModelAdmin): class SkillsAdmin(admin.ModelAdmin):
list_display = ('title', 'color', 'mini_icon', 'big_icon') list_display = ('title', 'color', 'mini_icon', 'big_icon')
search_fields = ['title'] search_fields = ['title']
admin.site.register(Skills, SkillsAdmin) admin.site.register(Skills, SkillsAdmin)
class AchievementsAdmin(admin.ModelAdmin): class AchievementsAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'icon', 'image', 'background', 'border',) list_display = ('id', 'title', 'icon', 'image', 'background', 'border',)
admin.site.register(Achievements, AchievementsAdmin) admin.site.register(Achievements, AchievementsAdmin)
class SkillJAdmin(admin.ModelAdmin): class SkillJAdmin(admin.ModelAdmin):
list_display = ('skill', 'lesson', 'size',) list_display = ('skill', 'lesson', 'size',)
raw_id_fields = ['lesson'] raw_id_fields = ['lesson']
list_filter = ['lesson__course'] list_filter = ['lesson__course']
admin.site.register(SkillJ, SkillJAdmin) admin.site.register(SkillJ, SkillJAdmin)
class CourseMapAdmin(admin.ModelAdmin): class CourseMapAdmin(admin.ModelAdmin):
list_display = ('id', 'course', 'lesson', 'homework', 'exam', 'sort', 'token', ) list_display = ('id', 'course', 'lesson', 'homework', 'exam', 'sort', 'token', )
raw_id_fields = ['course', 'lesson', 'homework', 'exam'] raw_id_fields = ['course', 'lesson', 'homework', 'exam']
list_filter = ('course',) list_filter = ('course',)
search_fields = ['lesson_id'] search_fields = ['lesson_id']
admin.site.register(CourseMap, CourseMapAdmin) admin.site.register(CourseMap, CourseMapAdmin)
class AchievementsMapAdmin(admin.ModelAdmin): class AchievementsMapAdmin(admin.ModelAdmin):
list_display = ('id', 'point', 'achiv', 'after', ) list_display = ('id', 'point', 'achiv', 'after', )
raw_id_fields = ['point'] raw_id_fields = ['point']
admin.site.register(AchievementsMap, AchievementsMapAdmin) admin.site.register(AchievementsMap, AchievementsMapAdmin)
class DiplomaAdmin(admin.ModelAdmin): class DiplomaAdmin(admin.ModelAdmin):
list_filter = ('course__title', 'key', ) list_filter = ('course__title', 'key', )
search_fields = ['course__title'] search_fields = ['course__title']
admin.site.register(Diploma, DiplomaAdmin) admin.site.register(Diploma, DiplomaAdmin)

File diff suppressed because it is too large Load Diff

@ -1,199 +1,199 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-03-18 16:46 # Generated by Django 1.9.2 on 2016-03-18 16:46
from __future__ import unicode_literals from __future__ import unicode_literals
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
import redactor.fields import redactor.fields
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('management', '0001_initial'), ('management', '0001_initial'),
('storage', '0001_initial'), ('storage', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Achievements', name='Achievements',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('tech_name', models.CharField(blank=True, default=b'', editable=False, help_text='\u0414\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f', max_length=20, unique=True, verbose_name='\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435')), ('tech_name', models.CharField(blank=True, default=b'', editable=False, help_text='\u0414\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f', max_length=20, unique=True, verbose_name='\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435')),
('icon', models.ImageField(upload_to=b'achives', verbose_name='\u0418\u043a\u043e\u043d\u043a\u0430')), ('icon', models.ImageField(upload_to=b'achives', verbose_name='\u0418\u043a\u043e\u043d\u043a\u0430')),
('title', models.CharField(help_text='\u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f', max_length=50, verbose_name='\u0418\u043c\u044f')), ('title', models.CharField(help_text='\u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f', max_length=50, verbose_name='\u0418\u043c\u044f')),
('image', models.ImageField(upload_to=b'achives', verbose_name='\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435')), ('image', models.ImageField(upload_to=b'achives', verbose_name='\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435')),
('background', models.CharField(max_length=10, verbose_name='\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430')), ('background', models.CharField(max_length=10, verbose_name='\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430')),
('border', models.CharField(max_length=10, verbose_name='\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b')), ('border', models.CharField(max_length=10, verbose_name='\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b')),
], ],
options={ options={
'verbose_name': '\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435', 'verbose_name': '\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435',
'verbose_name_plural': '\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f', 'verbose_name_plural': '\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Course', name='Course',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('level', models.CharField(choices=[(b'B', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439'), (b'A', '\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 '), (b'E', '\u042d\u043a\u0441\u043f\u0435\u0440\u0442\u043d\u044b\u0439'), (b'B+A', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439 + \u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439')], default=b'B', max_length=3, verbose_name='\u0423\u0440\u043e\u0432\u0435\u043d\u044c')), ('level', models.CharField(choices=[(b'B', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439'), (b'A', '\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 '), (b'E', '\u042d\u043a\u0441\u043f\u0435\u0440\u0442\u043d\u044b\u0439'), (b'B+A', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439 + \u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439')], default=b'B', max_length=3, verbose_name='\u0423\u0440\u043e\u0432\u0435\u043d\u044c')),
('public', models.BooleanField(default=False, verbose_name='\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c')), ('public', models.BooleanField(default=False, verbose_name='\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c')),
('title', models.CharField(max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')), ('title', models.CharField(max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')),
('description', redactor.fields.RedactorField(blank=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435')), ('description', redactor.fields.RedactorField(blank=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435')),
('image', models.ImageField(blank=True, upload_to=b'course', verbose_name='\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435')), ('image', models.ImageField(blank=True, upload_to=b'course', verbose_name='\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435')),
('big_image', models.ImageField(blank=True, upload_to=b'course', verbose_name='\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435')), ('big_image', models.ImageField(blank=True, upload_to=b'course', verbose_name='\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435')),
('page', models.URLField(blank=True, default=b'', verbose_name='\u0421\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f')), ('page', models.URLField(blank=True, default=b'', verbose_name='\u0421\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f')),
('preview', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0422\u0440\u044d\u0439\u043b')), ('preview', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0422\u0440\u044d\u0439\u043b')),
('sort', models.IntegerField(default=0, verbose_name='\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438')), ('sort', models.IntegerField(default=0, verbose_name='\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438')),
('use_fail', models.BooleanField(default=False, verbose_name='\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0435\u0439\u043a\u043e\u0432\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e')), ('use_fail', models.BooleanField(default=False, verbose_name='\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0435\u0439\u043a\u043e\u0432\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e')),
('basic_len', models.IntegerField(default=0, verbose_name='\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439')), ('basic_len', models.IntegerField(default=0, verbose_name='\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439')),
('addition_len', models.IntegerField(default=0, verbose_name='\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439')), ('addition_len', models.IntegerField(default=0, verbose_name='\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439')),
('min_price', models.IntegerField(default=0, verbose_name='\u0426\u0435\u043d\u0430 \u043e\u0442')), ('min_price', models.IntegerField(default=0, verbose_name='\u0426\u0435\u043d\u0430 \u043e\u0442')),
('buy_icon', models.ImageField(blank=True, null=True, upload_to=b'course', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043f\u043e\u043a\u0443\u043f\u043a\u0438')), ('buy_icon', models.ImageField(blank=True, null=True, upload_to=b'course', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043f\u043e\u043a\u0443\u043f\u043a\u0438')),
('teachers', models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u0438')), ('teachers', models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u0438')),
], ],
options={ options={
'ordering': ['sort'], 'ordering': ['sort'],
'verbose_name': '\u041a\u0443\u0440\u0441', 'verbose_name': '\u041a\u0443\u0440\u0441',
'verbose_name_plural': '\u041a\u0443\u0440\u0441\u044b', 'verbose_name_plural': '\u041a\u0443\u0440\u0441\u044b',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='CourseMap', name='CourseMap',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('_type', models.CharField(choices=[(b'L', '\u0423\u0440\u043e\u043a'), (b'H', '\u0414\u043e\u043c\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435'), (b'E', '\u042d\u043a\u0437\u0430\u043c\u0435\u043d')], default=b'L', max_length=1, verbose_name='\u0422\u0438\u043f\u044b \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432')), ('_type', models.CharField(choices=[(b'L', '\u0423\u0440\u043e\u043a'), (b'H', '\u0414\u043e\u043c\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435'), (b'E', '\u042d\u043a\u0437\u0430\u043c\u0435\u043d')], default=b'L', max_length=1, verbose_name='\u0422\u0438\u043f\u044b \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432')),
('sort', models.IntegerField(default=0, verbose_name='\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a')), ('sort', models.IntegerField(default=0, verbose_name='\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a')),
('token', models.CharField(editable=False, max_length=20, null=True, unique=True, verbose_name='\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043a\u043b\u044e\u0447')), ('token', models.CharField(editable=False, max_length=20, null=True, unique=True, verbose_name='\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043a\u043b\u044e\u0447')),
('course', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), ('course', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')),
], ],
options={ options={
'verbose_name': '\u041a\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430', 'verbose_name': '\u041a\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430',
'verbose_name_plural': '\u041a\u0430\u0440\u0442\u044b \u043a\u0443\u0440\u0441\u043e\u0432', 'verbose_name_plural': '\u041a\u0430\u0440\u0442\u044b \u043a\u0443\u0440\u0441\u043e\u0432',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='CourseTheme', name='CourseTheme',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('price_type', models.CharField(choices=[(b'B', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'E', '\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'P', '\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b')], default=b'B', max_length=1, verbose_name='\u0422\u0438\u043f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438')), ('price_type', models.CharField(choices=[(b'B', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'E', '\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'P', '\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b')], default=b'B', max_length=1, verbose_name='\u0422\u0438\u043f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438')),
('_type', models.CharField(choices=[(b'B', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'E', '\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'P', '\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'M', '\u041f\u0440\u0435\u0434\u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b'), (b'Ex', '\u042d\u043a\u0437\u0430\u043c\u0435\u043d\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0442\u0435\u043c\u0430')], default=b'B', max_length=2, verbose_name='\u0422\u0438\u043f \u0442\u0435\u043c\u044b')), ('_type', models.CharField(choices=[(b'B', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'E', '\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'P', '\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'M', '\u041f\u0440\u0435\u0434\u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b'), (b'Ex', '\u042d\u043a\u0437\u0430\u043c\u0435\u043d\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0442\u0435\u043c\u0430')], default=b'B', max_length=2, verbose_name='\u0422\u0438\u043f \u0442\u0435\u043c\u044b')),
('icon', models.ImageField(blank=True, null=True, upload_to=b'CourseTheme', verbose_name='\u0418\u043a\u043e\u043d\u043a\u0430 \u0442\u0435\u043c\u044b')), ('icon', models.ImageField(blank=True, null=True, upload_to=b'CourseTheme', verbose_name='\u0418\u043a\u043e\u043d\u043a\u0430 \u0442\u0435\u043c\u044b')),
('sort', models.IntegerField(default=1, verbose_name='\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430')), ('sort', models.IntegerField(default=1, verbose_name='\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430')),
('title', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')), ('title', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')),
('description', models.TextField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0435\u043c\u044b')), ('description', models.TextField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0435\u043c\u044b')),
('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')),
], ],
options={ options={
'ordering': ['sort'], 'ordering': ['sort'],
'verbose_name': '\u0422\u0435\u043c\u0430', 'verbose_name': '\u0422\u0435\u043c\u0430',
'verbose_name_plural': '\u0422\u0435\u043c\u044b', 'verbose_name_plural': '\u0422\u0435\u043c\u044b',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Exam', name='Exam',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('token', models.CharField(blank=True, default=b'', max_length=100, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430')), ('token', models.CharField(blank=True, default=b'', max_length=100, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430')),
('sort', models.IntegerField(default=1, verbose_name='\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430')), ('sort', models.IntegerField(default=1, verbose_name='\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430')),
('title', models.CharField(default=b'', help_text='\u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0430', max_length=255, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430')), ('title', models.CharField(default=b'', help_text='\u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0430', max_length=255, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430')),
('description', redactor.fields.RedactorField(verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432')), ('description', redactor.fields.RedactorField(verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432')),
('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')),
('diploma', models.ForeignKey(help_text='\u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435', on_delete=django.db.models.deletion.CASCADE, related_name='exam_diploma', to='storage.Storage', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430')), ('diploma', models.ForeignKey(help_text='\u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435', on_delete=django.db.models.deletion.CASCADE, related_name='exam_diploma', to='storage.Storage', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430')),
('icon', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='storage.Storage', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0434\u0438\u043f\u043b\u043e\u043c\u0430')), ('icon', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='storage.Storage', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0434\u0438\u043f\u043b\u043e\u043c\u0430')),
('materials', models.ManyToManyField(blank=True, related_name='exam_materials', to='storage.Storage', verbose_name='\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430')), ('materials', models.ManyToManyField(blank=True, related_name='exam_materials', to='storage.Storage', verbose_name='\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430')),
('theme', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.CourseTheme', verbose_name='\u0422\u0435\u043c\u0430 \u043a\u0443\u0440\u0441\u0430')), ('theme', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.CourseTheme', verbose_name='\u0422\u0435\u043c\u0430 \u043a\u0443\u0440\u0441\u0430')),
], ],
options={ options={
'ordering': ['sort'], 'ordering': ['sort'],
'verbose_name': '\u042d\u043a\u0437\u0430\u043c\u0435\u043d', 'verbose_name': '\u042d\u043a\u0437\u0430\u043c\u0435\u043d',
'verbose_name_plural': '\u042d\u043a\u0437\u0430\u043c\u0435\u043d\u044b', 'verbose_name_plural': '\u042d\u043a\u0437\u0430\u043c\u0435\u043d\u044b',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Homework', name='Homework',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('token', models.CharField(blank=True, default=b'', max_length=100, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430')), ('token', models.CharField(blank=True, default=b'', max_length=100, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430')),
('description', redactor.fields.RedactorField(verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435')), ('description', redactor.fields.RedactorField(verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435')),
('sort', models.IntegerField(default=1, verbose_name='\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430')), ('sort', models.IntegerField(default=1, verbose_name='\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430')),
('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')),
('materials', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b')), ('materials', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b')),
('theme', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.CourseTheme', verbose_name='\u0422\u0435\u043c\u0430 \u043a\u0443\u0440\u0441\u0430')), ('theme', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.CourseTheme', verbose_name='\u0422\u0435\u043c\u0430 \u043a\u0443\u0440\u0441\u0430')),
], ],
options={ options={
'ordering': ['sort'], 'ordering': ['sort'],
'verbose_name': '\u0414\u043e\u0431\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435', 'verbose_name': '\u0414\u043e\u0431\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435',
'verbose_name_plural': '\u0414\u043e\u043c\u0430\u0448\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f', 'verbose_name_plural': '\u0414\u043e\u043c\u0430\u0448\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Lesson', name='Lesson',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('free', models.BooleanField(default=False, verbose_name='\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e')), ('free', models.BooleanField(default=False, verbose_name='\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e')),
('token', models.CharField(blank=True, default=b'', editable=False, max_length=100, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430')), ('token', models.CharField(blank=True, default=b'', editable=False, max_length=100, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430')),
('title', models.TextField(blank=True, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')), ('title', models.TextField(blank=True, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')),
('sort', models.IntegerField(default=1, verbose_name='\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430')), ('sort', models.IntegerField(default=1, verbose_name='\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430')),
('description', redactor.fields.RedactorField(blank=True, default=b'', verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435')), ('description', redactor.fields.RedactorField(blank=True, default=b'', verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435')),
('video', models.TextField(default=b'', verbose_name='\u041a\u043e\u0434 \u0432\u0438\u0434\u0435\u043e')), ('video', models.TextField(default=b'', verbose_name='\u041a\u043e\u0434 \u0432\u0438\u0434\u0435\u043e')),
('comments', models.ManyToManyField(blank=True, editable=False, to='management.Comment', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438')), ('comments', models.ManyToManyField(blank=True, editable=False, to='management.Comment', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438')),
('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')),
('materials', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0443\u0440\u043e\u043a\u0430')), ('materials', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0443\u0440\u043e\u043a\u0430')),
('theme', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.CourseTheme', verbose_name='\u0422\u0435\u043c\u0430 \u043a\u0443\u0440\u0441\u0430')), ('theme', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.CourseTheme', verbose_name='\u0422\u0435\u043c\u0430 \u043a\u0443\u0440\u0441\u0430')),
], ],
options={ options={
'ordering': ['sort'], 'ordering': ['sort'],
'verbose_name': '\u0423\u0440\u043e\u043a', 'verbose_name': '\u0423\u0440\u043e\u043a',
'verbose_name_plural': '\u0423\u0440\u043e\u043a\u0438', 'verbose_name_plural': '\u0423\u0440\u043e\u043a\u0438',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='SkillJ', name='SkillJ',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('size', models.IntegerField(default=0, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440')), ('size', models.IntegerField(default=0, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440')),
('lesson', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Lesson', verbose_name='\u0423\u0440\u043e\u043a')), ('lesson', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Lesson', verbose_name='\u0423\u0440\u043e\u043a')),
], ],
options={ options={
'ordering': ['id'], 'ordering': ['id'],
'verbose_name': '\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u0430\u0432\u044b\u043a\u0430', 'verbose_name': '\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u0430\u0432\u044b\u043a\u0430',
'verbose_name_plural': '\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u043d\u0430\u0432\u044b\u043a\u043e\u0432', 'verbose_name_plural': '\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u043d\u0430\u0432\u044b\u043a\u043e\u0432',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Skills', name='Skills',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=255, verbose_name='\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435')), ('title', models.CharField(max_length=255, verbose_name='\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435')),
('color', models.CharField(max_length=255, verbose_name='\u0426\u0432\u0435\u0442')), ('color', models.CharField(max_length=255, verbose_name='\u0426\u0432\u0435\u0442')),
], ],
options={ options={
'verbose_name': '\u041d\u0430\u0432\u044b\u043a', 'verbose_name': '\u041d\u0430\u0432\u044b\u043a',
'verbose_name_plural': '\u041d\u0430\u0432\u044b\u043a\u0438', 'verbose_name_plural': '\u041d\u0430\u0432\u044b\u043a\u0438',
}, },
), ),
migrations.AddField( migrations.AddField(
model_name='skillj', model_name='skillj',
name='skill', name='skill',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Skills', verbose_name='\u041d\u0430\u0432\u044b\u043a'), field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Skills', verbose_name='\u041d\u0430\u0432\u044b\u043a'),
), ),
migrations.AddField( migrations.AddField(
model_name='coursemap', model_name='coursemap',
name='exam', name='exam',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Exam', verbose_name='\u042d\u043a\u0437\u0430\u043c\u0435\u043d'), field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Exam', verbose_name='\u042d\u043a\u0437\u0430\u043c\u0435\u043d'),
), ),
migrations.AddField( migrations.AddField(
model_name='coursemap', model_name='coursemap',
name='homework', name='homework',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Homework', verbose_name='\u0417\u0430\u0434\u0430\u043d\u0438\u0435'), field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Homework', verbose_name='\u0417\u0430\u0434\u0430\u043d\u0438\u0435'),
), ),
migrations.AddField( migrations.AddField(
model_name='coursemap', model_name='coursemap',
name='lesson', name='lesson',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Lesson', verbose_name='\u0423\u0440\u043e\u043a'), field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Lesson', verbose_name='\u0423\u0440\u043e\u043a'),
), ),
] ]

@ -1,29 +1,29 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-03-20 20:26 # Generated by Django 1.9.2 on 2016-03-20 20:26
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('courses', '0001_initial'), ('courses', '0001_initial'),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='AchievementsMap', name='AchievementsMap',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('after', models.BooleanField(default=True, verbose_name='\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f')), ('after', models.BooleanField(default=True, verbose_name='\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f')),
('achiv', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Achievements', verbose_name='\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435')), ('achiv', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Achievements', verbose_name='\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435')),
('point', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.CourseMap', verbose_name='\u041f\u043e\u0437\u0438\u0446\u0438\u044f')), ('point', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.CourseMap', verbose_name='\u041f\u043e\u0437\u0438\u0446\u0438\u044f')),
], ],
options={ options={
'verbose_name': '\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u044f\u044f \u0430\u0447\u0438\u0432\u043a\u0430', 'verbose_name': '\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u044f\u044f \u0430\u0447\u0438\u0432\u043a\u0430',
'verbose_name_plural': '\u0412\u043d\u0435\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0430\u0447\u0438\u0432\u043a\u0438', 'verbose_name_plural': '\u0412\u043d\u0435\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0430\u0447\u0438\u0432\u043a\u0438',
}, },
), ),
] ]

@ -1,19 +1,19 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-03-22 18:52 # Generated by Django 1.9.2 on 2016-03-22 18:52
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('courses', '0002_achievementsmap'), ('courses', '0002_achievementsmap'),
] ]
operations = [ operations = [
migrations.AlterModelOptions( migrations.AlterModelOptions(
name='coursemap', name='coursemap',
options={'ordering': ['sort'], 'verbose_name': '\u041a\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430', 'verbose_name_plural': '\u041a\u0430\u0440\u0442\u044b \u043a\u0443\u0440\u0441\u043e\u0432'}, options={'ordering': ['sort'], 'verbose_name': '\u041a\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430', 'verbose_name_plural': '\u041a\u0430\u0440\u0442\u044b \u043a\u0443\u0440\u0441\u043e\u0432'},
), ),
] ]

@ -1,20 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-03-30 22:39 # Generated by Django 1.9.2 on 2016-03-30 22:39
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('courses', '0003_auto_20160322_1852'), ('courses', '0003_auto_20160322_1852'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='lesson', model_name='lesson',
name='video_id', name='video_id',
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='\u0412\u0438\u0434\u0435\u043e ID'), field=models.CharField(blank=True, max_length=50, null=True, verbose_name='\u0412\u0438\u0434\u0435\u043e ID'),
), ),
] ]

@ -1,20 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-03-31 20:30 # Generated by Django 1.9.2 on 2016-03-31 20:30
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('courses', '0004_lesson_video_id'), ('courses', '0004_lesson_video_id'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='lesson', model_name='lesson',
name='video', name='video',
field=models.TextField(blank=True, default=b'', verbose_name='\u041a\u043e\u0434 \u0432\u0438\u0434\u0435\u043e'), field=models.TextField(blank=True, default=b'', verbose_name='\u041a\u043e\u0434 \u0432\u0438\u0434\u0435\u043e'),
), ),
] ]

@ -1,25 +1,25 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-04-07 20:06 # Generated by Django 1.9.2 on 2016-04-07 20:06
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('courses', '0005_auto_20160331_2030'), ('courses', '0005_auto_20160331_2030'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='coursetheme', model_name='coursetheme',
name='empty', name='empty',
field=models.BooleanField(default=False, help_text='\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u0443\u0440\u0441\u0430. \u0418\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u0443\u0440\u0441 \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0442\u043e\u0433\u043e.', verbose_name='\u0422\u044b \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u0448\u044c!'), field=models.BooleanField(default=False, help_text='\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u0443\u0440\u0441\u0430. \u0418\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u0443\u0440\u0441 \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0442\u043e\u0433\u043e.', verbose_name='\u0422\u044b \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u0448\u044c!'),
), ),
migrations.AddField( migrations.AddField(
model_name='coursetheme', model_name='coursetheme',
name='empty_description', name='empty_description',
field=models.TextField(blank=True, default=b'', verbose_name='\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0442\u043a\u0430\u0437\u0430 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f'), field=models.TextField(blank=True, default=b'', verbose_name='\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0442\u043a\u0430\u0437\u0430 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f'),
), ),
] ]

@ -1,20 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-13 15:39 # Generated by Django 1.9.5 on 2016-04-13 15:39
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('courses', '0006_auto_20160407_2006'), ('courses', '0006_auto_20160407_2006'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='lesson', model_name='lesson',
name='video_date', name='video_date',
field=models.DateTimeField(blank=True, null=True, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0432\u0438\u0434\u0435\u043e'), field=models.DateTimeField(blank=True, null=True, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0432\u0438\u0434\u0435\u043e'),
), ),
] ]

@ -1,20 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-20 18:19 # Generated by Django 1.9.5 on 2016-04-20 18:19
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('courses', '0007_lesson_video_date'), ('courses', '0007_lesson_video_date'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='coursetheme', model_name='coursetheme',
name='block', name='block',
field=models.BooleanField(default=False, verbose_name='\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435'), field=models.BooleanField(default=False, verbose_name='\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435'),
), ),
] ]

@ -1,19 +1,19 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-20 18:21 # Generated by Django 1.9.5 on 2016-04-20 18:21
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('courses', '0008_coursetheme_block'), ('courses', '0008_coursetheme_block'),
] ]
operations = [ operations = [
migrations.RemoveField( migrations.RemoveField(
model_name='coursetheme', model_name='coursetheme',
name='block', name='block',
), ),
] ]

@ -1,19 +1,19 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-20 19:09 # Generated by Django 1.9.5 on 2016-04-20 19:09
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('courses', '0009_remove_coursetheme_block'), ('courses', '0009_remove_coursetheme_block'),
] ]
operations = [ operations = [
migrations.RemoveField( migrations.RemoveField(
model_name='coursetheme', model_name='coursetheme',
name='empty_description', name='empty_description',
), ),
] ]

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save