parent
33f12bca3e
commit
d3f018ace1
619 changed files with 74828 additions and 88386 deletions
@ -1,18 +0,0 @@ |
|||||||
orlova@mokselle.ru |
|
||||||
arhipov@mokselle.com |
|
||||||
robert@mokselle.ru |
|
||||||
nemtsev@mokselle.ru |
|
||||||
grebennikova@mokselle.com |
|
||||||
a.rybalov@mokselle.ru |
|
||||||
isaev@mokselle.ru |
|
||||||
kravchenko@mokselle.ru |
|
||||||
volosnikov@mokselle.com |
|
||||||
korneva@mokselle.com |
|
||||||
ivanova@mokselle.ru |
|
||||||
shilin@mokselle.com |
|
||||||
grishchenko@mokselle.ru |
|
||||||
iskusnov@mokselle.ru |
|
||||||
dolya@mokselle.com |
|
||||||
dolia@mokselle.ru |
|
||||||
vorobjova@mokselle.com |
|
||||||
plavko@mokselle.ru |
|
||||||
@ -1,11 +0,0 @@ |
|||||||
queue = tuple(i for i in range(0, 99999)) |
|
||||||
point = 0 |
|
||||||
|
|
||||||
|
|
||||||
def handler(): |
|
||||||
print() |
|
||||||
|
|
||||||
|
|
||||||
def switch(): |
|
||||||
for count in queue: |
|
||||||
handler() |
|
||||||
@ -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 |
||||||
@ -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,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,13 +1,13 @@ |
|||||||
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), |
||||||
url(r'history/', views.history) |
url(r'history/', views.history) |
||||||
] |
] |
||||||
@ -1,150 +1,150 @@ |
|||||||
# 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 |
||||||
|
|
||||||
|
|
||||||
@response_decor(template='teacher_history.html') |
@response_decor(template='teacher_history.html') |
||||||
def history(request): |
def history(request): |
||||||
if request.user.in_role in ['T', 'S2', 'A']: |
if request.user.in_role in ['T', 'S2', 'A']: |
||||||
return {'hw': HomeworkJ.objects.filter(teacher=request.user, success=True).exclude(f_date=None), |
return {'hw': HomeworkJ.objects.filter(teacher=request.user, success=True).exclude(f_date=None), |
||||||
'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id') |
'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id') |
||||||
} |
} |
||||||
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 +1 @@ |
|||||||
8311 |
28159 |
||||||
|
|||||||
@ -1,28 +0,0 @@ |
|||||||
# coding=utf-8 |
|
||||||
import os |
|
||||||
import django |
|
||||||
import sys |
|
||||||
import datetime |
|
||||||
|
|
||||||
start = datetime.datetime.now() |
|
||||||
sys.path.append("/var/www/projects/codemy/") |
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") |
|
||||||
django.setup() |
|
||||||
|
|
||||||
from lms.tools import comment_auth_data |
|
||||||
from access.models import User as U |
|
||||||
|
|
||||||
u = U.objects.get(id=2) |
|
||||||
result = comment_auth_data(u) |
|
||||||
#print(result) |
|
||||||
def_json = '''json_encode: {"nick":"\u041d\u0438\u043a\u043e\u043b\u0430\u0439","avatar":"","id":"2","email":"bez.b.unix@gmail.com","profile_url":""}''' |
|
||||||
def_sign = '''Sign: 9b185a7fa42ecfe88cebb36cd400a1b4''' |
|
||||||
print('====================') |
|
||||||
print(def_json) |
|
||||||
print(def_sign) |
|
||||||
print('-------------------') |
|
||||||
for key, value in result.items(): |
|
||||||
if key == '== sign': print('%s %s' % ('---', bool(def_sign==value))) |
|
||||||
print('%s: %s' % (key, value)) |
|
||||||
|
|
||||||
print('=====================') |
|
||||||
@ -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==3.3.0 |
Pillow |
||||||
psycopg2==2.6.2 |
psycopg2 |
||||||
simplejson==3.8.2 |
simplejson |
||||||
celery==3.1.23 |
celery |
||||||
django-celery==3.1.17 |
django-celery |
||||||
django-wysiwyg-redactor==0.4.9 |
django-wysiwyg-redactor |
||||||
raven==5.24.3 |
raven |
||||||
uwsgi==2.0.13.1 |
uwsgi |
||||||
flower==0.9.1 |
flower |
||||||
django-import-export==0.4.5 |
django-import-export |
||||||
python-dateutil==2.5.3 |
python-dateutil |
||||||
requests==2.11.0 |
requests |
||||||
ipython==5.1.0 |
ipython |
||||||
django-precise-bbcode==1.2.6 |
django-precise-bbcode |
||||||
html2bbcode==2.3.2 |
html2bbcode |
||||||
markdown==2.6.7 |
markdown |
||||||
@ -1,50 +0,0 @@ |
|||||||
sudo apt-get update |
|
||||||
sudo apt-get upgrade |
|
||||||
sudo su |
|
||||||
# Установка программ |
|
||||||
apt-get install -y python-dev python-virtualenv python-pip postgresql postgresql-server-dev-9.3 libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk git |
|
||||||
pip install --upgrade pip |
|
||||||
# Создание иерархии |
|
||||||
cd /var/ |
|
||||||
mkdir www |
|
||||||
cd www |
|
||||||
mkdir projects |
|
||||||
mkdir .envs |
|
||||||
virtualenv .envs/codemy |
|
||||||
source .envs/codemy/bin/activate |
|
||||||
mkdir logs |
|
||||||
mkdir run |
|
||||||
cd projects |
|
||||||
mkdir codemy |
|
||||||
cd codemy/configs |
|
||||||
# Установка пакетов |
|
||||||
pip install -r packs |
|
||||||
# Создание базы и пользователя |
|
||||||
echo 'psql -c "create user team with password 'nu5Xefise';"' > start.sh |
|
||||||
echo 'psql -c "CREATE DATAbase codemy owner team;"' >> start.sh |
|
||||||
echo 'psql -c "alter role team login createdb;"' >> start.sh |
|
||||||
sudo -u postgres './start.sh' |
|
||||||
rm -rf start.sh |
|
||||||
# Подправить postgres |
|
||||||
# Изменить метод авторизации в pg_hba |
|
||||||
echo 'local all postgres trust' > /etc/postgresql/9.3/main/pg_hba.conf |
|
||||||
echo 'local all all md5' >> /etc/postgresql/9.3/main/pg_hba.conf |
|
||||||
echo 'host all all 127.0.0.1/32 md5' >> /etc/postgresql/9.3/main/pg_hba.conf |
|
||||||
echo 'host all all ::1/128 md5' >> /etc/postgresql/9.3/main/pg_hba.conf |
|
||||||
service postgresql restart |
|
||||||
# Миграция базы |
|
||||||
cd /var/www/projects/codemy/ |
|
||||||
# Импорь рабочего backup.sql |
|
||||||
# echo 'psql -f backup.sql' > make_backup.sh |
|
||||||
# sudo -u postgres './make_backup.sh' |
|
||||||
rm -rf make_backup.sh |
|
||||||
# Пути nginx |
|
||||||
#ln -s /var/www/projects/codemy/configs/dev_nginx /etc/nginx/conf.d/codemy.conf |
|
||||||
#service nginx restart |
|
||||||
# Пути supervisor |
|
||||||
#ln -s /var/www/projects/codemy/configs/supervisor.conf /etc/supervisor/conf.d/codemy.conf |
|
||||||
#supervisorctl reread |
|
||||||
#supervisorctl update |
|
||||||
cd /var/ |
|
||||||
chown www-data:www-data -R www |
|
||||||
#supervisorctl restart all |
|
||||||
@ -1,51 +0,0 @@ |
|||||||
-----BEGIN RSA PRIVATE KEY----- |
|
||||||
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 |
|
||||||
-----END RSA PRIVATE KEY----- |
|
||||||
@ -1,100 +0,0 @@ |
|||||||
Ваш SSL-сертификат предоставлен ниже |
|
||||||
-----BEGIN CERTIFICATE----- |
|
||||||
MIIIdDCCB1ygAwIBAgIMPkc95DAdllwTruefMA0GCSqGSIb3DQEBCwUAMGAxCzAJ |
|
||||||
BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTYwNAYDVQQDEy1H |
|
||||||
bG9iYWxTaWduIERvbWFpbiBWYWxpZGF0aW9uIENBIC0gU0hBMjU2IC0gRzIwHhcN |
|
||||||
MTYxMjI2MTMxNzM0WhcNMTcxMjI3MTMxNzM0WjA8MSEwHwYDVQQLExhEb21haW4g |
|
||||||
Q29udHJvbCBWYWxpZGF0ZWQxFzAVBgNVBAMMDiouc2tpbGwtYm94LnJ1MIICIjAN |
|
||||||
BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzBKLQbxjOT4tn618AMkbUjcuATjA |
|
||||||
TJNRJ/vcZWtoNER+y8Xh64WyZlXkB3vaRAedmoe5pxYF7gtoATpTgwxhM7ah2RDb |
|
||||||
ui/ZLgK8MHtjhwhcDVu1iCSeXnlYUuqysnbPDHymYZRVtiBVPkRK7sshkIB0CIpA |
|
||||||
XpjoYyHiVoEqFk/xSrsLveXXgQtzPipzuweVHwwq7KufRJkHPWbAEZBpwc3QoLga |
|
||||||
o5khVHTvZuLUMFB9vFGp34AaGkGNbTWDepIn2QviqnWvGqyIshhNv8uuf++irKZM |
|
||||||
BLxuh0MnkSkbXYLf5CCcjw04nzPRDsd5ZZFXQyyIOLL2NIYYiIp22q082idSjbSX |
|
||||||
kobwfagH8nc5ljv8Gryqeo22QERI3Fp3bZ/t+gTVzpFjbCYP8c/nusNKk2vyA/yo |
|
||||||
/aqou9+EjoIFSrqgdiv/FDYyK0MwWik3VrykqCbgy6MuaSdex4iAKBOlAzjRmrSi |
|
||||||
2AF5q3SEaLLhPV1e8HS8z8Z6Xo0EbeEFvLuVeHdukEsPk6167aToNmk0pC5Ic0hq |
|
||||||
eeNtgLZfCLUhLzh/AhYW6sTjT620O6mQP/3IiEpEFYk4iGe+TJ81d7P11/W7+7Va |
|
||||||
gFL611WBnDafYdxT4OZFKhqpnXW0lWvGK4ROtxNmaaZmsfFwAZVDFvavsy0G4FLx |
|
||||||
Miw1CKJNiC4cQjkCAwEAAaOCBFAwggRMMA4GA1UdDwEB/wQEAwIFoDCBlAYIKwYB |
|
||||||
BQUHAQEEgYcwgYQwRwYIKwYBBQUHMAKGO2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2ln |
|
||||||
bi5jb20vY2FjZXJ0L2dzZG9tYWludmFsc2hhMmcycjEuY3J0MDkGCCsGAQUFBzAB |
|
||||||
hi1odHRwOi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vZ3Nkb21haW52YWxzaGEyZzIw |
|
||||||
VgYDVR0gBE8wTTBBBgkrBgEEAaAyAQowNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93 |
|
||||||
d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCAYGZ4EMAQIBMAkGA1UdEwQC |
|
||||||
MAAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9n |
|
||||||
cy9nc2RvbWFpbnZhbHNoYTJnMi5jcmwwJwYDVR0RBCAwHoIOKi5za2lsbC1ib3gu |
|
||||||
cnWCDHNraWxsLWJveC5ydTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw |
|
||||||
HQYDVR0OBBYEFO9PIphPbOr4Bnhcxb2sF7dgOwEsMB8GA1UdIwQYMBaAFOpOfNSA |
|
||||||
LeUVgYYmjIJtwJikz5cPMIICcQYKKwYBBAHWeQIEAgSCAmEEggJdAlsAdgDd6x0r |
|
||||||
eg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+zAAAAVk7R3L9AAAEAwBHMEUCIA2s |
|
||||||
RoFsKZS5geHSL6Gm6nixJWSRjOIDdHiFJU0CuinHAiEAy+5pWxoLEhADou6GVjCS |
|
||||||
j4X3Sq/x2TJhPU4J3IuweBUAdwBWFAaaL9fC7NP14b1Esj7HRna5vJkRXMDvlJhV |
|
||||||
1onQ3QAAAVk7R3XgAAAEAwBIMEYCIQDxshxHNK9czqomcjPMfit/R8WpdYXit/Ke |
|
||||||
ZALI23oZ9wIhAIvmBuv4BssQ1oV/PxxVdNYF7PCC0ZFnTDRdBTDY6A6zAHcAu9nf |
|
||||||
vB+KcbWTlCOXqpJ7RzhXlQqrUugakJZkNo4e0YUAAAFZO0d23QAABAMASDBGAiEA |
|
||||||
zcvKaoSjhTHBDkwiDUtdlcrbWtWF7nzVOXu9lr6A39QCIQCvdi7G5Lf2V5Rp6hyy |
|
||||||
EsAK+2Mq9x/GQukjtfrM90CUdwB3AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3 |
|
||||||
zQ7IDdwQAAABWTtHdioAAAQDAEgwRgIhAInPwgCa+2PDWQo+lJFu2UWHxwyCe2lg |
|
||||||
w9wFjVM6gXJ3AiEAufHeiiQz/yVC//v5l4SMxvvNyvKYQPDf6/Zao2g3wfYAdgDu |
|
||||||
S723dc5guuFCaR+r4Z5mow9+X7By2IMAxHuJeqj9ywAAAVk7R3kcAAAEAwBHMEUC |
|
||||||
IQCv1xvEaL4wxup86rGUTdATh8Ui07/vjBvI8uc+Fvbc1wIgRe5kpxDNZQNwBFZC |
|
||||||
eR8Wbc2X2yV9zI2uDel2HDGNnvcwDQYJKoZIhvcNAQELBQADggEBAH8d8vr922T5 |
|
||||||
vuMYKy/l9id0K8W4HWn3OpHVfIJc91Hm21XWrDDV6AJFDrusQswNCGD4TsFl68U7 |
|
||||||
L+RlnBQZ0piDcrNoveMOeW0nMMP96HLS91G2BbwOxQoJWsWpmbeLryMk0lWhBlAN |
|
||||||
C3LmCASXjMqbgt4IpAKghz6HjGlMgDLM9B7+BsXV3te4kVdLW7SanSpOz5PCDSLB |
|
||||||
Urb4hIbMtMJiiam5eLRLFDByMZoT29hKdgapUbbxBpCOtu0SvSOdp7ArAOLdMNDQ |
|
||||||
RLaI7BJP39stYkp6nS0Ayc2Dsq6NEaFumdFt8gTlmhb4WxmTybRsMfSK2ZxQgB4z |
|
||||||
OJV1e2ozq2g= |
|
||||||
-----END CERTIFICATE----- |
|
||||||
|
|
||||||
Корневой сертификат |
|
||||||
-----BEGIN CERTIFICATE----- |
|
||||||
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG |
|
||||||
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv |
|
||||||
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw |
|
||||||
MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i |
|
||||||
YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT |
|
||||||
aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ |
|
||||||
jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp |
|
||||||
xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp |
|
||||||
1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG |
|
||||||
snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ |
|
||||||
U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 |
|
||||||
9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E |
|
||||||
BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B |
|
||||||
AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz |
|
||||||
yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE |
|
||||||
38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP |
|
||||||
AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad |
|
||||||
DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME |
|
||||||
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== |
|
||||||
-----END CERTIFICATE----- |
|
||||||
|
|
||||||
Промежуточный сертификат |
|
||||||
-----BEGIN CERTIFICATE----- |
|
||||||
MIIEYzCCA0ugAwIBAgILBAAAAAABRE7wPiAwDQYJKoZIhvcNAQELBQAwVzELMAkG |
|
||||||
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv |
|
||||||
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw |
|
||||||
MDBaFw0yNDAyMjAxMDAwMDBaMGAxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i |
|
||||||
YWxTaWduIG52LXNhMTYwNAYDVQQDEy1HbG9iYWxTaWduIERvbWFpbiBWYWxpZGF0 |
|
||||||
aW9uIENBIC0gU0hBMjU2IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK |
|
||||||
AoIBAQCp3cwOs+IyOd1JIqgTaZOHiOEM7nF9vZCHll1Z8syz0lhXV/lG72wm2DZC |
|
||||||
jn4wsy+aPlN7H262okxFHzzTFZMcie089Ffeyr3sBppqKqAZUn9R0XQ5CJ+r69eG |
|
||||||
ExWXrjbDVGYOWvKgc4Ux47JkFGr/paKOJLu9hVIVonnu8LXuPbj0fYC82ZA1ZbgX |
|
||||||
qa2zmJ+gfn1u+z+tfMIbWTaW2jcyS0tdNQJjjtunz2LuzC7Ujcm9PGqRcqIip3It |
|
||||||
INH6yjfaGJjmFiRxJUvE5XuJUgkC/VkrBG7KB4HUs9ra2+PMgKhWBwZ8lgg3nds4 |
|
||||||
tmI0kWIHdAE42HIw4uuQcSZiwFfzAgMBAAGjggElMIIBITAOBgNVHQ8BAf8EBAMC |
|
||||||
AQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU6k581IAt5RWBhiaMgm3A |
|
||||||
mKTPlw8wRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8v |
|
||||||
d3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDMGA1UdHwQsMCowKKAmoCSG |
|
||||||
Imh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwPQYIKwYBBQUHAQEE |
|
||||||
MTAvMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9yb290 |
|
||||||
cjEwHwYDVR0jBBgwFoAUYHtmGkUNl8qJUC99BM00qP/8/UswDQYJKoZIhvcNAQEL |
|
||||||
BQADggEBANdFnqDc4ONhWgt9d4QXLWVagpqNoycqhffJ7+mG/dRHzQFSlsVDvTex |
|
||||||
4bjyqdKKEYRxkRWJ3AKdC8tsM4U0KJ4gsrGX3G0LEME8zV/qXdeYMcU0mVwAYVXE |
|
||||||
GwJbxeOJyLS4bx448lYm6UHvPc2smU9ZSlctS32ux4j71pg79eXw6ImJuYsDy1oj |
|
||||||
H6T9uOr7Lp2uanMJvPzVoLVEgqtEkS5QLlfBQ9iRBIvpES5ftD953x77PzAAi1Pj |
|
||||||
tywdO02L3ORkHQRYM68bVeerDL8wBHTk8w4vMDmNSwSMHnVmZkngvkA0x1xaUZK6 |
|
||||||
EjxS1QSCVS1npd+3lXzuP8MIugS+wEY= |
|
||||||
-----END CERTIFICATE----- |
|
||||||
@ -1,28 +0,0 @@ |
|||||||
-----BEGIN CERTIFICATE REQUEST----- |
|
||||||
MIIEyDCCArACAQAwgYIxCzAJBgNVBAYTAlJVMQ8wDQYDVQQIDAZNb3Njb3cxDzAN |
|
||||||
BgNVBAcMBk1vc2NvdzEVMBMGA1UECwwMSVREZXBhcnRtZW50MRcwFQYDVQQDDA4q |
|
||||||
LnNraWxsLWJveC5ydTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac2tpbGwtYm94LnJ1 |
|
||||||
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzBKLQbxjOT4tn618AMkb |
|
||||||
UjcuATjATJNRJ/vcZWtoNER+y8Xh64WyZlXkB3vaRAedmoe5pxYF7gtoATpTgwxh |
|
||||||
M7ah2RDbui/ZLgK8MHtjhwhcDVu1iCSeXnlYUuqysnbPDHymYZRVtiBVPkRK7ssh |
|
||||||
kIB0CIpAXpjoYyHiVoEqFk/xSrsLveXXgQtzPipzuweVHwwq7KufRJkHPWbAEZBp |
|
||||||
wc3QoLgao5khVHTvZuLUMFB9vFGp34AaGkGNbTWDepIn2QviqnWvGqyIshhNv8uu |
|
||||||
f++irKZMBLxuh0MnkSkbXYLf5CCcjw04nzPRDsd5ZZFXQyyIOLL2NIYYiIp22q08 |
|
||||||
2idSjbSXkobwfagH8nc5ljv8Gryqeo22QERI3Fp3bZ/t+gTVzpFjbCYP8c/nusNK |
|
||||||
k2vyA/yo/aqou9+EjoIFSrqgdiv/FDYyK0MwWik3VrykqCbgy6MuaSdex4iAKBOl |
|
||||||
AzjRmrSi2AF5q3SEaLLhPV1e8HS8z8Z6Xo0EbeEFvLuVeHdukEsPk6167aToNmk0 |
|
||||||
pC5Ic0hqeeNtgLZfCLUhLzh/AhYW6sTjT620O6mQP/3IiEpEFYk4iGe+TJ81d7P1 |
|
||||||
1/W7+7VagFL611WBnDafYdxT4OZFKhqpnXW0lWvGK4ROtxNmaaZmsfFwAZVDFvav |
|
||||||
sy0G4FLxMiw1CKJNiC4cQjkCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4ICAQBVuWBe |
|
||||||
QHNuT6998V8kBFlWOAhoBr2+bxR6mdL+qiCQTsbAjPemkZiZXp/2uji6Wmf11qMB |
|
||||||
dxmPMGiFvXgPsfCcctbxfLqwtJvAo4s0yjCv3N8DISuO56C3WwnAsfF5xoxSDiAa |
|
||||||
SvkpQ0TnuSl2cU4x6HsiKWNgILOLs1f+Lf6NlImC6Yz/bkRwn+1RXyjEDqJJz/wN |
|
||||||
3Eekb9fPWXnloyOgqF+ESZzZbgZ653+nBUg0OMkeKhA82pC8r83CduQMy08YCwXu |
|
||||||
FuHhGWs4AF2xHjwTwKfGjE1E7Ni+Ak5znriCu7o27Kq9UiGMujhKMxOroWxE1wYZ |
|
||||||
Z0x2MuhnI3O1+dSnv7+ffDt75C8i4WiYQcgC2d6QD4Rt9SAxvgedkAbn2Xtadn8i |
|
||||||
Qg+lGouPLhPjT9wCCTYNI/17MJaBpmrz/q+oEXXjSnFFDEXgbv534ltaVujvbLbV |
|
||||||
gMF0beoI0FA6dlLyzHOgiiiyDEyS0znU8Qxfc92S9yD40v8mf0sJBH/mpZmEBO6c |
|
||||||
Wlv9sBBrPWtiLUmbOzsv1eD6g4u992yqpJB317HOECjXXhKJCpw1MXr921tvMnyN |
|
||||||
v5SCf6jIQXHm6k/Srau1upgOkm1GfJT9NIAzbomUSCiWs+0Iucw7FuH0S5RDIfD2 |
|
||||||
3/8LVBh9A/6ddAlsndZ4J0bKysjGW9M1LCU2Gg== |
|
||||||
-----END CERTIFICATE REQUEST----- |
|
||||||
Binary file not shown.
@ -1,51 +1,51 @@ |
|||||||
-----BEGIN RSA PRIVATE KEY----- |
-----BEGIN RSA PRIVATE KEY----- |
||||||
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 |
||||||
vfNg+lmUJLfxcuUCggEBANl20pe7WqKME1NOBt/EsX8DKlwoP6zdVasQ57ywDgif |
vfNg+lmUJLfxcuUCggEBANl20pe7WqKME1NOBt/EsX8DKlwoP6zdVasQ57ywDgif |
||||||
9iKW1Fp0d4hbYEwvMfwXXb6uYlLIXRB6slKxuiuZOXo5DFZzGTmgY1kgachyau4l |
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----- |
||||||
|
|||||||
Binary file not shown.
@ -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', |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,25 +1,25 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-25 15:50 |
# Generated by Django 1.9.5 on 2016-04-25 15:50 |
||||||
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', '0010_remove_coursetheme_empty_description'), |
('courses', '0010_remove_coursetheme_empty_description'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='course', |
model_name='course', |
||||||
name='in_diploma', |
name='in_diploma', |
||||||
field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430'), |
field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='course', |
model_name='course', |
||||||
name='out_diploma', |
name='out_diploma', |
||||||
field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430 c \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e'), |
field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430 c \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,20 +1,20 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-25 15:53 |
# Generated by Django 1.9.5 on 2016-04-25 15:53 |
||||||
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', '0011_auto_20160425_1550'), |
('courses', '0011_auto_20160425_1550'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='course', |
model_name='course', |
||||||
name='diploma_key', |
name='diploma_key', |
||||||
field=models.IntegerField(default=0, help_text='\u0422\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u044b, \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432', verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447'), |
field=models.IntegerField(default=0, help_text='\u0422\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u044b, \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432', verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,42 +1,42 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-25 17:20 |
# Generated by Django 1.9.5 on 2016-04-25 17:20 |
||||||
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', '0012_course_diploma_key'), |
('courses', '0012_course_diploma_key'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='course', |
model_name='course', |
||||||
name='diploma_key', |
name='diploma_key', |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='course', |
model_name='course', |
||||||
name='in_diploma', |
name='in_diploma', |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='course', |
model_name='course', |
||||||
name='out_diploma', |
name='out_diploma', |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='exam', |
model_name='exam', |
||||||
name='diploma_key', |
name='diploma_key', |
||||||
field=models.IntegerField(default=0, help_text='\u0422\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u044b, \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432', verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447'), |
field=models.IntegerField(default=0, help_text='\u0422\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u044b, \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432', verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='exam', |
model_name='exam', |
||||||
name='in_diploma', |
name='in_diploma', |
||||||
field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430'), |
field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='exam', |
model_name='exam', |
||||||
name='out_diploma', |
name='out_diploma', |
||||||
field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430 c \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e'), |
field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430 c \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,35 +1,35 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-25 17:37 |
# Generated by Django 1.9.5 on 2016-04-25 17:37 |
||||||
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 = [ |
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||||
('courses', '0013_auto_20160425_1720'), |
('courses', '0013_auto_20160425_1720'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.CreateModel( |
migrations.CreateModel( |
||||||
name='Diploma', |
name='Diploma', |
||||||
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')), |
||||||
('key', models.CharField(max_length=255, verbose_name='\u041a\u043b\u044e\u0447')), |
('key', models.CharField(max_length=255, verbose_name='\u041a\u043b\u044e\u0447')), |
||||||
('date', models.DateField(default=datetime.date.today, verbose_name='\u0414\u0430\u0442\u0430 \u0432\u044b\u0434\u0430\u0447\u0438')), |
('date', models.DateField(default=datetime.date.today, verbose_name='\u0414\u0430\u0442\u0430 \u0432\u044b\u0434\u0430\u0447\u0438')), |
||||||
('out_image', models.ImageField(upload_to=b'', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e')), |
('out_image', models.ImageField(upload_to=b'', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e')), |
||||||
('in_image', models.ImageField(upload_to=b'', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e')), |
('in_image', models.ImageField(upload_to=b'', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e')), |
||||||
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u043a\u0443\u0440\u0441')), |
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u043a\u0443\u0440\u0441')), |
||||||
('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': '\u0414\u0438\u043f\u043b\u043e\u043c\u044b', |
'verbose_name': '\u0414\u0438\u043f\u043b\u043e\u043c\u044b', |
||||||
'verbose_name_plural': '\u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441\u0434\u0430\u0447\u0438 \u042d\u043a\u0437\u0430\u043c\u0435\u043d\u043e\u0432', |
'verbose_name_plural': '\u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441\u0434\u0430\u0447\u0438 \u042d\u043a\u0437\u0430\u043c\u0435\u043d\u043e\u0432', |
||||||
}, |
}, |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,45 +1,45 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-25 17:50 |
# Generated by Django 1.9.5 on 2016-04-25 17:50 |
||||||
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', '0014_diploma'), |
('courses', '0014_diploma'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AlterModelOptions( |
migrations.AlterModelOptions( |
||||||
name='diploma', |
name='diploma', |
||||||
options={'verbose_name': '\u0414\u0438\u043f\u043b\u043e\u043c', 'verbose_name_plural': '\u0414\u0438\u043f\u043b\u043e\u043c\u044b'}, |
options={'verbose_name': '\u0414\u0438\u043f\u043b\u043e\u043c', 'verbose_name_plural': '\u0414\u0438\u043f\u043b\u043e\u043c\u044b'}, |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='exam', |
model_name='exam', |
||||||
name='diploma', |
name='diploma', |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='exam', |
model_name='exam', |
||||||
name='diploma_key', |
name='diploma_key', |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='exam', |
model_name='exam', |
||||||
name='in_diploma', |
name='in_diploma', |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='exam', |
model_name='exam', |
||||||
name='out_diploma', |
name='out_diploma', |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='in_image', |
name='in_image', |
||||||
field=models.ImageField(upload_to=b'diploms', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e'), |
field=models.ImageField(upload_to=b'diploms', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='out_image', |
name='out_image', |
||||||
field=models.ImageField(upload_to=b'diploms', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0431\u0435\u0437 \u043f\u0435\u0447\u0430\u0442\u0438'), |
field=models.ImageField(upload_to=b'diploms', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0431\u0435\u0437 \u043f\u0435\u0447\u0430\u0442\u0438'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,30 +1,30 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-25 17:52 |
# Generated by Django 1.9.5 on 2016-04-25 17:52 |
||||||
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', '0015_auto_20160425_1750'), |
('courses', '0015_auto_20160425_1750'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='course', |
model_name='course', |
||||||
name='diploma_key', |
name='diploma_key', |
||||||
field=models.IntegerField(default=0, help_text='\u0422\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u044b, \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432', verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447'), |
field=models.IntegerField(default=0, help_text='\u0422\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u044b, \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432', verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='course', |
model_name='course', |
||||||
name='in_diploma', |
name='in_diploma', |
||||||
field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430'), |
field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='course', |
model_name='course', |
||||||
name='out_diploma', |
name='out_diploma', |
||||||
field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430 c \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e'), |
field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430 c \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,39 +1,39 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-26 12:40 |
# Generated by Django 1.9.5 on 2016-04-26 12:40 |
||||||
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', '0016_auto_20160425_1752'), |
('courses', '0016_auto_20160425_1752'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='date', |
name='date', |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='student', |
name='student', |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='icon', |
name='icon', |
||||||
field=models.ImageField(null=True, upload_to=b'diploms', verbose_name='\u041c\u0438\u043d\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), |
field=models.ImageField(null=True, upload_to=b'diploms', verbose_name='\u041c\u0438\u043d\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='course', |
name='course', |
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441'), |
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key', |
name='key', |
||||||
field=models.CharField(max_length=255, verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043b\u044e\u0447'), |
field=models.CharField(max_length=255, verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043b\u044e\u0447'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,19 +1,19 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-26 12:41 |
# Generated by Django 1.9.5 on 2016-04-26 12:41 |
||||||
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', '0017_auto_20160426_1240'), |
('courses', '0017_auto_20160426_1240'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='exam', |
model_name='exam', |
||||||
name='icon', |
name='icon', |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,19 +1,19 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-26 12:42 |
# Generated by Django 1.9.5 on 2016-04-26 12:42 |
||||||
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', '0018_remove_exam_icon'), |
('courses', '0018_remove_exam_icon'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='exam', |
model_name='exam', |
||||||
name='title', |
name='title', |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,27 +1,27 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-26 12:43 |
# Generated by Django 1.9.5 on 2016-04-26 12:43 |
||||||
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', '0019_remove_exam_title'), |
('courses', '0019_remove_exam_title'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='course', |
model_name='course', |
||||||
name='diploma_key', |
name='diploma_key', |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='course', |
model_name='course', |
||||||
name='in_diploma', |
name='in_diploma', |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='course', |
model_name='course', |
||||||
name='out_diploma', |
name='out_diploma', |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,75 +1,75 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-26 14:47 |
# Generated by Django 1.9.5 on 2016-04-26 14:47 |
||||||
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', '0020_auto_20160426_1243'), |
('courses', '0020_auto_20160426_1243'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='date_color', |
name='date_color', |
||||||
field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), |
field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='date_font', |
name='date_font', |
||||||
field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u0434\u0430\u0442\u044b'), |
field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='date_place', |
name='date_place', |
||||||
field=models.CharField(help_text='\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u0432\u0435\u0440\u0445\u0443:\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u043b\u0435\u0432\u0430 - 256:256', max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u044b'), |
field=models.CharField(help_text='\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u0432\u0435\u0440\u0445\u0443:\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u043b\u0435\u0432\u0430 - 256:256', max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='date_size', |
name='date_size', |
||||||
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u044b'), |
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key_color', |
name='key_color', |
||||||
field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), |
field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key_font', |
name='key_font', |
||||||
field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u0434\u0430\u0442\u044b'), |
field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key_place', |
name='key_place', |
||||||
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430'), |
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key_size', |
name='key_size', |
||||||
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u044b'), |
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='name_color', |
name='name_color', |
||||||
field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), |
field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='name_font', |
name='name_font', |
||||||
field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u0434\u0430\u0442\u044b'), |
field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='name_place', |
name='name_place', |
||||||
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438'), |
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='name_size', |
name='name_size', |
||||||
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u044b'), |
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,60 +1,60 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-26 15:26 |
# Generated by Django 1.9.5 on 2016-04-26 15:26 |
||||||
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', '0021_auto_20160426_1447'), |
('courses', '0021_auto_20160426_1447'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='in_image', |
name='in_image', |
||||||
field=models.ImageField(upload_to=b'diploms', verbose_name='\u0414\u0438\u043f\u043b\u043e\u043c c \u043f\u0435\u0447\u0430\u0442\u044c\u044e'), |
field=models.ImageField(upload_to=b'diploms', verbose_name='\u0414\u0438\u043f\u043b\u043e\u043c c \u043f\u0435\u0447\u0430\u0442\u044c\u044e'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key', |
name='key', |
||||||
field=models.IntegerField(max_length=255, verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043b\u044e\u0447'), |
field=models.IntegerField(max_length=255, verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043b\u044e\u0447'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key_color', |
name='key_color', |
||||||
field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u043a\u043b\u044e\u0447\u0430'), |
field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u043a\u043b\u044e\u0447\u0430'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key_font', |
name='key_font', |
||||||
field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u043a\u043b\u044e\u0447\u0430'), |
field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u043a\u043b\u044e\u0447\u0430'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key_size', |
name='key_size', |
||||||
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u043b\u044e\u0447\u0430'), |
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u043b\u044e\u0447\u0430'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='name_color', |
name='name_color', |
||||||
field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0438\u043c\u0435\u043d\u0438'), |
field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0438\u043c\u0435\u043d\u0438'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='name_font', |
name='name_font', |
||||||
field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u0438\u043c\u0435\u043d\u0438'), |
field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u0438\u043c\u0435\u043d\u0438'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='name_size', |
name='name_size', |
||||||
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0438\u043c\u0435\u043d\u0438'), |
field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0438\u043c\u0435\u043d\u0438'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='out_image', |
name='out_image', |
||||||
field=models.ImageField(upload_to=b'diploms', verbose_name='\u0414\u0438\u043f\u043b\u043e\u043c \u0431\u0435\u0437 \u043f\u0435\u0447\u0430\u0442\u0438'), |
field=models.ImageField(upload_to=b'diploms', verbose_name='\u0414\u0438\u043f\u043b\u043e\u043c \u0431\u0435\u0437 \u043f\u0435\u0447\u0430\u0442\u0438'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,55 +1,55 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-26 17:29 |
# Generated by Django 1.9.5 on 2016-04-26 17:29 |
||||||
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', '0022_auto_20160426_1526'), |
('courses', '0022_auto_20160426_1526'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='date_color', |
name='date_color', |
||||||
field=models.CharField(help_text='RGBA. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0,1', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), |
field=models.CharField(help_text='RGBA. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0,1', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='date_size', |
name='date_size', |
||||||
field=models.IntegerField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u044b'), |
field=models.IntegerField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key_color', |
name='key_color', |
||||||
field=models.CharField(help_text='RGBA. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0,1', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u043a\u043b\u044e\u0447\u0430'), |
field=models.CharField(help_text='RGBA. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0,1', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u043a\u043b\u044e\u0447\u0430'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key_place', |
name='key_place', |
||||||
field=models.CharField(help_text='\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u0432\u0435\u0440\u0445\u0443:\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u043b\u0435\u0432\u0430 - 256:256', max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430'), |
field=models.CharField(help_text='\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u0432\u0435\u0440\u0445\u0443:\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u043b\u0435\u0432\u0430 - 256:256', max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key_size', |
name='key_size', |
||||||
field=models.IntegerField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u043b\u044e\u0447\u0430'), |
field=models.IntegerField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u043b\u044e\u0447\u0430'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='name_color', |
name='name_color', |
||||||
field=models.CharField(help_text='RGBA. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0,1', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0438\u043c\u0435\u043d\u0438'), |
field=models.CharField(help_text='RGBA. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0,1', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0438\u043c\u0435\u043d\u0438'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='name_place', |
name='name_place', |
||||||
field=models.CharField(help_text='\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u0432\u0435\u0440\u0445\u0443:\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u043b\u0435\u0432\u0430 - 256:256', max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438'), |
field=models.CharField(help_text='\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u0432\u0435\u0440\u0445\u0443:\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u043b\u0435\u0432\u0430 - 256:256', max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='name_size', |
name='name_size', |
||||||
field=models.IntegerField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0438\u043c\u0435\u043d\u0438'), |
field=models.IntegerField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0438\u043c\u0435\u043d\u0438'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,30 +1,30 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-05-05 17:48 |
# Generated by Django 1.9.5 on 2016-05-05 17:48 |
||||||
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', '0023_auto_20160426_1729'), |
('courses', '0023_auto_20160426_1729'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='date_color', |
name='date_color', |
||||||
field=models.CharField(help_text='RGB. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), |
field=models.CharField(help_text='RGB. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='key_color', |
name='key_color', |
||||||
field=models.CharField(help_text='RGB. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u043a\u043b\u044e\u0447\u0430'), |
field=models.CharField(help_text='RGB. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u043a\u043b\u044e\u0447\u0430'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='diploma', |
model_name='diploma', |
||||||
name='name_color', |
name='name_color', |
||||||
field=models.CharField(help_text='RGB. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0438\u043c\u0435\u043d\u0438'), |
field=models.CharField(help_text='RGB. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0438\u043c\u0435\u043d\u0438'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,31 +1,31 @@ |
|||||||
# -*- 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 |
||||||
|
|
||||||
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 = [ |
||||||
('courses', '0024_auto_20160505_1748'), |
('courses', '0024_auto_20160505_1748'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='skills', |
model_name='skills', |
||||||
name='big_icon', |
name='big_icon', |
||||||
field=models.ImageField(null=True, upload_to=b'skills', verbose_name='\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), |
field=models.ImageField(null=True, upload_to=b'skills', verbose_name='\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='skills', |
model_name='skills', |
||||||
name='description', |
name='description', |
||||||
field=redactor.fields.RedactorField(blank=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435'), |
field=redactor.fields.RedactorField(blank=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='skills', |
model_name='skills', |
||||||
name='mini_icon', |
name='mini_icon', |
||||||
field=models.ImageField(null=True, upload_to=b'skills', verbose_name='\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), |
field=models.ImageField(null=True, upload_to=b'skills', verbose_name='\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,30 +1,30 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-05-06 18:38 |
# Generated by Django 1.9.5 on 2016-05-06 18:38 |
||||||
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', '0025_auto_20160506_1303'), |
('courses', '0025_auto_20160506_1303'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='skills', |
model_name='skills', |
||||||
name='big_icon', |
name='big_icon', |
||||||
field=models.ImageField(help_text=b'65x65', null=True, upload_to=b'skills', verbose_name='\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), |
field=models.ImageField(help_text=b'65x65', null=True, upload_to=b'skills', verbose_name='\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='skills', |
model_name='skills', |
||||||
name='description', |
name='description', |
||||||
field=models.TextField(blank=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435'), |
field=models.TextField(blank=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='skills', |
model_name='skills', |
||||||
name='mini_icon', |
name='mini_icon', |
||||||
field=models.ImageField(help_text=b'15x15', null=True, upload_to=b'skills', verbose_name='\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), |
field=models.ImageField(help_text=b'15x15', null=True, upload_to=b'skills', verbose_name='\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,303 +1,303 @@ |
|||||||
# coding=utf-8 |
# coding=utf-8 |
||||||
import copy |
import copy |
||||||
|
|
||||||
from lms.tools import out_date_format |
from lms.tools import out_date_format |
||||||
|
|
||||||
STATUS_LABEL_CLASS = 'btn btn-{0} pull-right btn-lg m-b-xs m-r-xs m-t-lg' |
STATUS_LABEL_CLASS = 'btn btn-{0} pull-right btn-lg m-b-xs m-r-xs m-t-lg' |
||||||
|
|
||||||
# Ключи материалов |
# Ключи материалов |
||||||
# L - Урок |
# L - Урок |
||||||
# H - ДЗ |
# H - ДЗ |
||||||
# E - Экзамен |
# E - Экзамен |
||||||
|
|
||||||
# ! Если мы ставим словарь в значение, обязательно должен быть ключь 'default' ! |
# ! Если мы ставим словарь в значение, обязательно должен быть ключь 'default' ! |
||||||
STATUS_COLLECTION = ({ |
STATUS_COLLECTION = ({ |
||||||
'title': {'default': u'Доступно для выполнения', 'L': u'Доступно'}, |
'title': {'default': u'Доступно для выполнения', 'L': u'Доступно'}, |
||||||
'flag': 'A', |
'flag': 'A', |
||||||
'color': 'info', |
'color': 'info', |
||||||
'styles': 'text-shadow: 0 0 0;', |
'styles': 'text-shadow: 0 0 0;', |
||||||
'icon': 'glyphicon glyphicon-time' |
'icon': 'glyphicon glyphicon-time' |
||||||
}, { |
}, { |
||||||
'title': {'default': u'Проверяется преподавателем'}, |
'title': {'default': u'Проверяется преподавателем'}, |
||||||
'flag': 'T', |
'flag': 'T', |
||||||
'color': 'info', |
'color': 'info', |
||||||
'styles': 'text-shadow: 0 0 0;', |
'styles': 'text-shadow: 0 0 0;', |
||||||
'icon': 'glyphicon glyphicon-time' |
'icon': 'glyphicon glyphicon-time' |
||||||
}, { |
}, { |
||||||
'title': {'default': u'Требуется доработка'}, |
'title': {'default': u'Требуется доработка'}, |
||||||
'flag': 'E', |
'flag': 'E', |
||||||
'color': 'danger', |
'color': 'danger', |
||||||
'styles': 'text-shadow: 0 0 0;', |
'styles': 'text-shadow: 0 0 0;', |
||||||
'icon': 'glyphicon glyphicon-time' |
'icon': 'glyphicon glyphicon-time' |
||||||
}, { |
}, { |
||||||
'title': {'default': u'Сдано', 'L': u'Пройдено'}, |
'title': {'default': u'Сдано', 'L': u'Пройдено'}, |
||||||
'flag': 'F', |
'flag': 'F', |
||||||
'color': 'success', |
'color': 'success', |
||||||
'styles': 'text-shadow: 0 0 0;', |
'styles': 'text-shadow: 0 0 0;', |
||||||
'icon': 'glyphicon glyphicon-ok' |
'icon': 'glyphicon glyphicon-ok' |
||||||
}, { |
}, { |
||||||
'title': {'default': u'Не доступно'}, |
'title': {'default': u'Не доступно'}, |
||||||
'flag': 'N', |
'flag': 'N', |
||||||
'color': 'default', |
'color': 'default', |
||||||
'styles': 'color: #ccc;text-shadow: 0 0 0;', |
'styles': 'color: #ccc;text-shadow: 0 0 0;', |
||||||
'icon': 'glyphicon glyphicon-remove' |
'icon': 'glyphicon glyphicon-remove' |
||||||
}) |
}) |
||||||
|
|
||||||
|
|
||||||
COMMENTS_STATUS_COLLECTION = ({ |
COMMENTS_STATUS_COLLECTION = ({ |
||||||
'title': 'Одобрено', |
'title': 'Одобрено', |
||||||
'flag': 'G', |
'flag': 'G', |
||||||
'label': '', |
'label': '', |
||||||
'background': '', |
'background': '', |
||||||
'color': '', |
'color': '', |
||||||
'style': '', |
'style': '', |
||||||
'icon': '' |
'icon': '' |
||||||
}, { |
}, { |
||||||
'title': 'Отклонено', |
'title': 'Отклонено', |
||||||
'flag': 'F', |
'flag': 'F', |
||||||
'label': '', |
'label': '', |
||||||
'background': '', |
'background': '', |
||||||
'color': '', |
'color': '', |
||||||
'style': '', |
'style': '', |
||||||
'icon': '' |
'icon': '' |
||||||
}, { |
}, { |
||||||
'title': 'Сообщение от администрации', |
'title': 'Сообщение от администрации', |
||||||
'flag': 'A', |
'flag': 'A', |
||||||
'label': '', |
'label': '', |
||||||
'background': '', |
'background': '', |
||||||
'color': '', |
'color': '', |
||||||
'style': '', |
'style': '', |
||||||
'icon': '' |
'icon': '' |
||||||
}, { |
}, { |
||||||
'title': 'Технический вопрос', |
'title': 'Технический вопрос', |
||||||
'flag': 'T', |
'flag': 'T', |
||||||
'label': '', |
'label': '', |
||||||
'background': '', |
'background': '', |
||||||
'color': '', |
'color': '', |
||||||
'style': '', |
'style': '', |
||||||
'icon': '' |
'icon': '' |
||||||
}, { |
}, { |
||||||
'title': '', |
'title': '', |
||||||
'flag': 'S', |
'flag': 'S', |
||||||
'label': '', |
'label': '', |
||||||
'background': '', |
'background': '', |
||||||
'color': '', |
'color': '', |
||||||
'style': '', |
'style': '', |
||||||
'icon': '' |
'icon': '' |
||||||
}) |
}) |
||||||
|
|
||||||
# ! Если мы ставим словарь в значение, обязательно должен быть ключь 'default' ! |
# ! Если мы ставим словарь в значение, обязательно должен быть ключь 'default' ! |
||||||
LEVELS_COLLECTION = ({ |
LEVELS_COLLECTION = ({ |
||||||
'title': u'Базовый', |
'title': u'Базовый', |
||||||
'flag': 'B', |
'flag': 'B', |
||||||
'color': '#fff', |
'color': '#fff', |
||||||
'background': '#5cb85c', |
'background': '#5cb85c', |
||||||
'icon': 'glyphicon glyphicon-signal' |
'icon': 'glyphicon glyphicon-signal' |
||||||
}, { |
}, { |
||||||
'title': u'Продвинутый', |
'title': u'Продвинутый', |
||||||
'flag': 'A', |
'flag': 'A', |
||||||
'color': '#fff', |
'color': '#fff', |
||||||
'background': '#5bc0de', |
'background': '#5bc0de', |
||||||
'icon': 'glyphicon glyphicon-signal' |
'icon': 'glyphicon glyphicon-signal' |
||||||
}, { |
}, { |
||||||
'title': u'Экспертный', |
'title': u'Экспертный', |
||||||
'flag': 'E', |
'flag': 'E', |
||||||
'color': '#fff', |
'color': '#fff', |
||||||
'background': '#d9534f', |
'background': '#d9534f', |
||||||
'icon': 'glyphicon glyphicon-signal' |
'icon': 'glyphicon glyphicon-signal' |
||||||
}, { |
}, { |
||||||
'title': u'Базовый + Продвинутый', |
'title': u'Базовый + Продвинутый', |
||||||
'flag': 'B+A', |
'flag': 'B+A', |
||||||
'color': '#fff', |
'color': '#fff', |
||||||
'background': '#e68917', |
'background': '#e68917', |
||||||
'icon': 'glyphicon glyphicon-signal' |
'icon': 'glyphicon glyphicon-signal' |
||||||
}) |
}) |
||||||
|
|
||||||
# ! Если мы ставим словарь в значение, обязательно должен быть ключь 'default' ! |
# ! Если мы ставим словарь в значение, обязательно должен быть ключь 'default' ! |
||||||
MATERIAL_TYPE_COLLECTION = ({ |
MATERIAL_TYPE_COLLECTION = ({ |
||||||
'title': u'Базовый материал', # Выводимое имя типа |
'title': u'Базовый материал', # Выводимое имя типа |
||||||
'flag': 'B', # Флаг, по которому идет поиск |
'flag': 'B', # Флаг, по которому идет поиск |
||||||
'color': '#dee5e7', # Стандартный цвет отображения типа материала |
'color': '#dee5e7', # Стандартный цвет отображения типа материала |
||||||
'icon': '/static/img/1441672724_new_seo-37.png' # Стандартная иконка темы |
'icon': '/static/img/1441672724_new_seo-37.png' # Стандартная иконка темы |
||||||
}, { |
}, { |
||||||
'title': u'Расширеный материал', |
'title': u'Расширеный материал', |
||||||
'flag': 'E', |
'flag': 'E', |
||||||
'color': '#66cc99', |
'color': '#66cc99', |
||||||
'icon': '/static/img/1441673370_8.png' |
'icon': '/static/img/1441673370_8.png' |
||||||
}, { |
}, { |
||||||
'title': u'Премиум материал', |
'title': u'Премиум материал', |
||||||
'flag': 'P', |
'flag': 'P', |
||||||
'color': '#ffffcc', |
'color': '#ffffcc', |
||||||
'icon': '/static/img/1441671767_new_seo-36.png' |
'icon': '/static/img/1441671767_new_seo-36.png' |
||||||
}, { |
}, { |
||||||
'title': u'Предэкзаменационные материалы', |
'title': u'Предэкзаменационные материалы', |
||||||
'flag': 'M', |
'flag': 'M', |
||||||
'color': '#dee5e7', |
'color': '#dee5e7', |
||||||
'icon': '/static/img/1447237167_BeOS_app_serv.png' |
'icon': '/static/img/1447237167_BeOS_app_serv.png' |
||||||
}, { |
}, { |
||||||
'title': u'Экзаменационная тема', |
'title': u'Экзаменационная тема', |
||||||
'flag': 'Ex', |
'flag': 'Ex', |
||||||
'color': '#ff1', |
'color': '#ff1', |
||||||
'icon': '/static/img/1441672223_new_seo2-17.png' |
'icon': '/static/img/1441672223_new_seo2-17.png' |
||||||
}) |
}) |
||||||
|
|
||||||
USER_TYPES = ({ |
USER_TYPES = ({ |
||||||
'flag': 'U', |
'flag': 'U', |
||||||
'title': u'Студент', |
'title': u'Студент', |
||||||
'background': 'bg-primary', |
'background': 'bg-primary', |
||||||
'style': '', |
'style': '', |
||||||
'label': '' |
'label': '' |
||||||
}, { |
}, { |
||||||
'flag': 'T', |
'flag': 'T', |
||||||
'title': u'Преподаватель', |
'title': u'Преподаватель', |
||||||
'background': 'bg-primary', |
'background': 'bg-primary', |
||||||
'style': '', |
'style': '', |
||||||
'label': '' |
'label': '' |
||||||
}, { |
}, { |
||||||
'flag': 'M', |
'flag': 'M', |
||||||
'title': u'Менеджер', |
'title': u'Менеджер', |
||||||
'background': 'bg-primary', |
'background': 'bg-primary', |
||||||
'style': '', |
'style': '', |
||||||
'label': '' |
'label': '' |
||||||
}, { |
}, { |
||||||
'flag': 'S', |
'flag': 'S', |
||||||
'title': 'Руководитель', |
'title': 'Руководитель', |
||||||
'background': 'bg-primary', |
'background': 'bg-primary', |
||||||
'style': '', |
'style': '', |
||||||
'label': '' |
'label': '' |
||||||
}, { |
}, { |
||||||
'flag': 'A', |
'flag': 'A', |
||||||
'title': u'Команда «SkillBox»', |
'title': u'Команда «SkillBox»', |
||||||
'background': 'bg-warning', |
'background': 'bg-warning', |
||||||
'style': 'color: #666;font-weight: normal;text-shadow: 0 0 0;', |
'style': 'color: #666;font-weight: normal;text-shadow: 0 0 0;', |
||||||
'label': '' |
'label': '' |
||||||
}, { |
}, { |
||||||
'flag': 'S2', |
'flag': 'S2', |
||||||
'title': u'Куратор', |
'title': u'Куратор', |
||||||
'background': 'bg-warning', |
'background': 'bg-warning', |
||||||
'style': 'color: #666;font-weight: normal;text-shadow: 0 0 0;', |
'style': 'color: #666;font-weight: normal;text-shadow: 0 0 0;', |
||||||
'label': '' |
'label': '' |
||||||
}) |
}) |
||||||
|
|
||||||
BUTTON_TYPES = { |
BUTTON_TYPES = { |
||||||
'N': '', |
'N': '', |
||||||
'B': u'Получить полный доступ к курсу', |
'B': u'Получить полный доступ к курсу', |
||||||
'H': u'Перейти к заданию', |
'H': u'Перейти к заданию', |
||||||
'L': u'Перейти к изучению', |
'L': u'Перейти к изучению', |
||||||
'O': u'Открыть лекцию', |
'O': u'Открыть лекцию', |
||||||
'E': u'Страница экзамена', |
'E': u'Страница экзамена', |
||||||
'T': u'Не доступно по подписке', |
'T': u'Не доступно по подписке', |
||||||
'F': u'Перейти к экзамену' |
'F': u'Перейти к экзамену' |
||||||
} |
} |
||||||
|
|
||||||
BUTTON_TYPE = ({ |
BUTTON_TYPE = ({ |
||||||
'flag': 'A', |
'flag': 'A', |
||||||
'title': {'default': u'Открыть материал', |
'title': {'default': u'Открыть материал', |
||||||
'L': u'Перейти к уроку', |
'L': u'Перейти к уроку', |
||||||
'H': u'Перейти к заданию', |
'H': u'Перейти к заданию', |
||||||
'E': u'Перейти к экзамену'}, |
'E': u'Перейти к экзамену'}, |
||||||
'color': {'default': '#fff'}, |
'color': {'default': '#fff'}, |
||||||
'background': { |
'background': { |
||||||
'default': '#23ad44', |
'default': '#23ad44', |
||||||
'H': '#23b7e5' |
'H': '#23b7e5' |
||||||
}, |
}, |
||||||
'link': {'L': '/courses/lesson/', |
'link': {'L': '/courses/lesson/', |
||||||
'H': '/courses/homework/', |
'H': '/courses/homework/', |
||||||
'E': '/courses/exam/'}, |
'E': '/courses/exam/'}, |
||||||
'by_type': { |
'by_type': { |
||||||
'L': 'lesson', |
'L': 'lesson', |
||||||
'H': 'homework', |
'H': 'homework', |
||||||
'E': 'exam' |
'E': 'exam' |
||||||
} |
} |
||||||
}, { |
}, { |
||||||
'flag': 'F', |
'flag': 'F', |
||||||
'title': {'default': u'Открыть материал', |
'title': {'default': u'Открыть материал', |
||||||
'L': u'Открыть лекцию', |
'L': u'Открыть лекцию', |
||||||
'H': u'Открыть задание', |
'H': u'Открыть задание', |
||||||
'E': u'Открыть экзамен'}, |
'E': u'Открыть экзамен'}, |
||||||
'color': {'default': '#fff'}, |
'color': {'default': '#fff'}, |
||||||
'background': { |
'background': { |
||||||
'default': '#23ad44', |
'default': '#23ad44', |
||||||
'H': '#23b7e5' |
'H': '#23b7e5' |
||||||
}, |
}, |
||||||
'link': {'L': '/courses/lesson/', # ID урока |
'link': {'L': '/courses/lesson/', # ID урока |
||||||
'H': '/courses/homework/', # ID ДЗ |
'H': '/courses/homework/', # ID ДЗ |
||||||
'E': '/courses/exam/'}, # ID экзамена |
'E': '/courses/exam/'}, # ID экзамена |
||||||
'by_type': { |
'by_type': { |
||||||
'L': 'lesson', |
'L': 'lesson', |
||||||
'H': 'homework', |
'H': 'homework', |
||||||
'E': 'exam' |
'E': 'exam' |
||||||
} |
} |
||||||
}) |
}) |
||||||
|
|
||||||
|
|
||||||
def comment_fabric(_comment, __type=None, __user=None): |
def comment_fabric(_comment, __type=None, __user=None): |
||||||
result = { |
result = { |
||||||
'id': _comment.id, |
'id': _comment.id, |
||||||
'status': search_in_collection(COMMENTS_STATUS_COLLECTION, 'flag', _comment.status), |
'status': search_in_collection(COMMENTS_STATUS_COLLECTION, 'flag', _comment.status), |
||||||
'closed': _comment.closed, |
'closed': _comment.closed, |
||||||
'owner': _comment.owner.name if _comment.owner.name else _comment.owner.get_short_name(), |
'owner': _comment.owner.name if _comment.owner.name else _comment.owner.get_short_name(), |
||||||
'owner_name': _comment.owner.get_full_name(), |
'owner_name': _comment.owner.get_full_name(), |
||||||
'owner_id': _comment.owner.id, |
'owner_id': _comment.owner.id, |
||||||
'owner_email': _comment.owner.email, |
'owner_email': _comment.owner.email, |
||||||
'owner_type': search_in_collection(USER_TYPES, 'flag', _comment.owner.in_role), |
'owner_type': search_in_collection(USER_TYPES, 'flag', _comment.owner.in_role), |
||||||
'owner_avatar': _comment.owner.get_image_url(type_in='small'), |
'owner_avatar': _comment.owner.get_image_url(type_in='small'), |
||||||
'owner_status': _comment.owner.get_status_display(), |
'owner_status': _comment.owner.get_status_display(), |
||||||
'owner_interactive_key': _comment.owner.interactive_key, |
'owner_interactive_key': _comment.owner.interactive_key, |
||||||
'owner_model': '', |
'owner_model': '', |
||||||
'text': _comment.get_text(), |
'text': _comment.get_text(), |
||||||
'date': out_date_format(_comment.date, no_time=False), |
'date': out_date_format(_comment.date, no_time=False), |
||||||
'replies': _comment.get_replies(__type, __user), |
'replies': _comment.get_replies(__type, __user), |
||||||
'files': material_fabric(_comment.files.all()), |
'files': material_fabric(_comment.files.all()), |
||||||
'response': _comment.response, |
'response': _comment.response, |
||||||
'response_comment': _comment.response_comment.get_face(_type=__type, _user=__user) if _comment.response else None |
'response_comment': _comment.response_comment.get_face(_type=__type, _user=__user) if _comment.response else None |
||||||
} |
} |
||||||
if __user: |
if __user: |
||||||
result['saw'] = _comment.saw.filter(id=__user.id).exists() |
result['saw'] = _comment.saw.filter(id=__user.id).exists() |
||||||
#comment.set_saw(__user) |
#comment.set_saw(__user) |
||||||
|
|
||||||
return result |
return result |
||||||
|
|
||||||
|
|
||||||
def material_fabric(stores): |
def material_fabric(stores): |
||||||
result = [] |
result = [] |
||||||
for store in stores: |
for store in stores: |
||||||
result.append({ |
result.append({ |
||||||
'id': store.id, |
'id': store.id, |
||||||
'format': store.f_format.f_type, |
'format': store.f_format.f_type, |
||||||
'icon_type': 'class' if store.f_format.icon_class else 'icon', |
'icon_type': 'class' if store.f_format.icon_class else 'icon', |
||||||
'icon': store.f_format.icon.url if store.f_format.icon else store.f_format.icon_class, |
'icon': store.f_format.icon.url if store.f_format.icon else store.f_format.icon_class, |
||||||
'url': store.original.url, |
'url': store.original.url, |
||||||
'title': store.get_name_for_user(), |
'title': store.get_name_for_user(), |
||||||
'name': store.get_file_name() |
'name': store.get_file_name() |
||||||
}) |
}) |
||||||
return result |
return result |
||||||
|
|
||||||
|
|
||||||
def search_in_collection(collection, field, word, artifact=None, in_type='default'): |
def search_in_collection(collection, field, word, artifact=None, in_type='default'): |
||||||
# Поиск по полю в коллекции словарей |
# Поиск по полю в коллекции словарей |
||||||
# == Коллекции статичны. Найдя словарь отображения по флагу к примеру, можно просто вывести результат в веб |
# == Коллекции статичны. Найдя словарь отображения по флагу к примеру, можно просто вывести результат в веб |
||||||
# == artifact - получить значение конкретно поля из словаря |
# == artifact - получить значение конкретно поля из словаря |
||||||
# Получает кортеж, берет словари по очереди и сравнивает в них поле field |
# Получает кортеж, берет словари по очереди и сравнивает в них поле field |
||||||
# Если значение в поле template[field] == work - возвращает полную копию словаря или возвращает пустое значение |
# Если значение в поле template[field] == work - возвращает полную копию словаря или возвращает пустое значение |
||||||
render = '' |
render = '' |
||||||
for template in collection: |
for template in collection: |
||||||
if template[field] == word: |
if template[field] == word: |
||||||
if artifact: |
if artifact: |
||||||
render = copy.deepcopy(template[artifact]) |
render = copy.deepcopy(template[artifact]) |
||||||
else: |
else: |
||||||
render = copy.deepcopy(template) |
render = copy.deepcopy(template) |
||||||
break |
break |
||||||
if render: |
if render: |
||||||
# Получить шаблон специально для запрашиваемого объекта по ключу объекта |
# Получить шаблон специально для запрашиваемого объекта по ключу объекта |
||||||
# У урока к примеру сейчас это 'L' |
# У урока к примеру сейчас это 'L' |
||||||
try: |
try: |
||||||
for key, value in render.items(): |
for key, value in render.items(): |
||||||
if type(value) == dict: |
if type(value) == dict: |
||||||
if in_type in value: |
if in_type in value: |
||||||
render[key] = value[in_type] |
render[key] = value[in_type] |
||||||
else: |
else: |
||||||
render[key] = value['default'] |
render[key] = value['default'] |
||||||
except AttributeError: |
except AttributeError: |
||||||
return render |
return render |
||||||
return render |
return render |
||||||
|
|||||||
@ -1,443 +1,443 @@ |
|||||||
# coding=utf-8 |
# coding=utf-8 |
||||||
from django.db.models import Q |
from django.db.models import Q |
||||||
from courses.models import CourseTheme, Exam, Achievements, Lesson, Homework, SkillJ |
from courses.models import CourseTheme, Exam, Achievements, Lesson, Homework, SkillJ |
||||||
from journals.models import LessonJ, HomeworkJ, ExamJ, AchievementJ, TeacherJ, DiplomaJ |
from journals.models import LessonJ, HomeworkJ, ExamJ, AchievementJ, TeacherJ, DiplomaJ |
||||||
|
|
||||||
|
|
||||||
def get_empty_face(course): |
def get_empty_face(course): |
||||||
return TeacherJ.objects.filter(course__id=course).first().get_empty_face() |
return TeacherJ.objects.filter(course__id=course).first().get_empty_face() |
||||||
|
|
||||||
|
|
||||||
def set_read_flag(student, course): |
def set_read_flag(student, course): |
||||||
pass |
pass |
||||||
|
|
||||||
|
|
||||||
def get_next_button(student, start_place_type, start_place_id): |
def get_next_button(student, start_place_type, start_place_id): |
||||||
pass |
pass |
||||||
|
|
||||||
|
|
||||||
def get_read_flag(student, course): |
def get_read_flag(student, course): |
||||||
pass |
pass |
||||||
|
|
||||||
|
|
||||||
def check_read_flag(student, course): |
def check_read_flag(student, course): |
||||||
pass |
pass |
||||||
|
|
||||||
|
|
||||||
def check_bought(token, user): |
def check_bought(token, user): |
||||||
# Проверка доступа материала по подписке |
# Проверка доступа материала по подписке |
||||||
pass |
pass |
||||||
|
|
||||||
|
|
||||||
def make_journal(journal): |
def make_journal(journal): |
||||||
course = journal.course |
course = journal.course |
||||||
student = journal.student |
student = journal.student |
||||||
|
|
||||||
|
|
||||||
def get_user_courses(user): |
def get_user_courses(user): |
||||||
# Получить рабочие курсы студента |
# Получить рабочие курсы студента |
||||||
return TeacherJ.objects.filter(student=user) |
return TeacherJ.objects.filter(student=user) |
||||||
|
|
||||||
|
|
||||||
def get_user_diploms(user): |
def get_user_diploms(user): |
||||||
# Получить дипломы пользователя |
# Получить дипломы пользователя |
||||||
return DiplomaJ.objects.filter(student=user).exclude(Q(in_image=None)|Q(key=None)).only('material', 'date') |
return DiplomaJ.objects.filter(student=user).exclude(Q(in_image=None)|Q(key=None)).only('material', 'date') |
||||||
|
|
||||||
|
|
||||||
def get_user_achievements(user): |
def get_user_achievements(user): |
||||||
# Получить все ачивки пользователя |
# Получить все ачивки пользователя |
||||||
themes = {} |
themes = {} |
||||||
for i in AchievementJ.objects.filter(student=user): |
for i in AchievementJ.objects.filter(student=user): |
||||||
themes[i.group] = [] |
themes[i.group] = [] |
||||||
|
|
||||||
for i in AchievementJ.objects.filter(student=user): |
for i in AchievementJ.objects.filter(student=user): |
||||||
themes[i.group].append(i) |
themes[i.group].append(i) |
||||||
|
|
||||||
return themes |
return themes |
||||||
|
|
||||||
|
|
||||||
def get_user_achievements_count(user): |
def get_user_achievements_count(user): |
||||||
# Получение количества ачивок пользователя |
# Получение количества ачивок пользователя |
||||||
return AchievementJ.objects.filter(student=user).count() |
return AchievementJ.objects.filter(student=user).count() |
||||||
|
|
||||||
|
|
||||||
def get_user_skills(user): |
def get_user_skills(user): |
||||||
# Получить скилы пользователя |
# Получить скилы пользователя |
||||||
lessons = [i.material for i in LessonJ.objects.filter(student=user, success=True)] |
lessons = [i.material for i in LessonJ.objects.filter(student=user, success=True)] |
||||||
skills = SkillJ.objects.filter(lesson__in=lessons).only('size', 'skill') |
skills = SkillJ.objects.filter(lesson__in=lessons).only('size', 'skill') |
||||||
result = {} |
result = {} |
||||||
for i in skills: |
for i in skills: |
||||||
if i.skill.title in result: |
if i.skill.title in result: |
||||||
result[i.skill.title]['size'] += i.size |
result[i.skill.title]['size'] += i.size |
||||||
else: |
else: |
||||||
result[i.skill.title] = { |
result[i.skill.title] = { |
||||||
'color': i.skill.color, |
'color': i.skill.color, |
||||||
'size': i.size, |
'size': i.size, |
||||||
'icon': i.skill.mini_icon |
'icon': i.skill.mini_icon |
||||||
} |
} |
||||||
return result |
return result |
||||||
|
|
||||||
|
|
||||||
def get_user_completed_courses_count(user): |
def get_user_completed_courses_count(user): |
||||||
return ExamJ.objects.filter(student=user, success=True).count() |
return ExamJ.objects.filter(student=user, success=True).count() |
||||||
|
|
||||||
|
|
||||||
def get_user_skills_size_count(user): |
def get_user_skills_size_count(user): |
||||||
# Посчитать размер навыка |
# Посчитать размер навыка |
||||||
result = 0 |
result = 0 |
||||||
for key, value in get_user_skills(user).items(): |
for key, value in get_user_skills(user).items(): |
||||||
result += value['size'] |
result += value['size'] |
||||||
return result |
return result |
||||||
|
|
||||||
|
|
||||||
def set_achievement(user, title, text, group, achievement_name): |
def set_achievement(user, title, text, group, achievement_name): |
||||||
# Просвоить ачивку |
# Просвоить ачивку |
||||||
achievement = Achievements.objects.get(tech_name=achievement_name) |
achievement = Achievements.objects.get(tech_name=achievement_name) |
||||||
AchievementJ.objects.create(student=user, title=title, text=text, group=group, achievement=achievement) |
AchievementJ.objects.create(student=user, title=title, text=text, group=group, achievement=achievement) |
||||||
|
|
||||||
### Методы над курсом |
### Методы над курсом |
||||||
def get_students_on_homework_length(course): |
def get_students_on_homework_length(course): |
||||||
l = 0 |
l = 0 |
||||||
for i in CourseTheme.objects.filter(course=course): |
for i in CourseTheme.objects.filter(course=course): |
||||||
l += i.get_active_homework_students_length() |
l += i.get_active_homework_students_length() |
||||||
return l |
return l |
||||||
|
|
||||||
|
|
||||||
def get_active_exam_students(course): |
def get_active_exam_students(course): |
||||||
result = [i.student for i in ExamJ.objects.filter(exam__course=course, status='T').exclude(success=True)] |
result = [i.student for i in ExamJ.objects.filter(exam__course=course, status='T').exclude(success=True)] |
||||||
return result |
return result |
||||||
|
|
||||||
|
|
||||||
def get_active_exam_students_length(course): |
def get_active_exam_students_length(course): |
||||||
result = ExamJ.objects.filter(exam__course=course, status='T').count() |
result = ExamJ.objects.filter(exam__course=course, status='T').count() |
||||||
return result |
return result |
||||||
|
|
||||||
|
|
||||||
def exam_status_html(course, student): |
def exam_status_html(course, student): |
||||||
status = course.get_exam_status(student) |
status = course.get_exam_status(student) |
||||||
data = u'<span class="label font-normal text-white bg-{0}" style="margin-left: 10px;">{1}</span>' |
data = u'<span class="label font-normal text-white bg-{0}" style="margin-left: 10px;">{1}</span>' |
||||||
if status == 'B': |
if status == 'B': |
||||||
return data.format(u'primary', u'Пока недоступно') |
return data.format(u'primary', u'Пока недоступно') |
||||||
elif status == 'P': |
elif status == 'P': |
||||||
return data.format(u'warning', u'Достуно для выполнения') |
return data.format(u'warning', u'Достуно для выполнения') |
||||||
elif status == 'T': |
elif status == 'T': |
||||||
return data.format(u'info', u'Проверяется преподавателем') |
return data.format(u'info', u'Проверяется преподавателем') |
||||||
elif status == 'E': |
elif status == 'E': |
||||||
return data.format(u'danger', u'Требуется доработка') |
return data.format(u'danger', u'Требуется доработка') |
||||||
elif status == 'F': |
elif status == 'F': |
||||||
return data.format(u'success', u'Сдано') |
return data.format(u'success', u'Сдано') |
||||||
|
|
||||||
|
|
||||||
def get_exam_status(course, student): |
def get_exam_status(course, student): |
||||||
try: |
try: |
||||||
exam = Exam.objects.get(course=course) |
exam = Exam.objects.get(course=course) |
||||||
except Exam.DoesNotExist: |
except Exam.DoesNotExist: |
||||||
return 'B' |
return 'B' |
||||||
else: |
else: |
||||||
return exam.get_status(student) |
return exam.get_status(student) |
||||||
|
|
||||||
|
|
||||||
def check_course_finish(course, student): |
def check_course_finish(course, student): |
||||||
if LessonJ.objects.filter(lesson__course=course, student=student, status='F').count() == Lesson.objects.filter( |
if LessonJ.objects.filter(lesson__course=course, student=student, status='F').count() == Lesson.objects.filter( |
||||||
course=course).count() \ |
course=course).count() \ |
||||||
and HomeworkJ.objects.filter(homework__course=course, student=student, |
and HomeworkJ.objects.filter(homework__course=course, student=student, |
||||||
status='F').count() == Homework.objects.filter(course=course).count() \ |
status='F').count() == Homework.objects.filter(course=course).count() \ |
||||||
and ExamJ.objects.filter(exam__course=course, student=student, status='F').count() == Exam.objects.filter( |
and ExamJ.objects.filter(exam__course=course, student=student, status='F').count() == Exam.objects.filter( |
||||||
course=course).count(): |
course=course).count(): |
||||||
return True |
return True |
||||||
else: |
else: |
||||||
return False |
return False |
||||||
|
|
||||||
|
|
||||||
### Методы над темой |
### Методы над темой |
||||||
def get_theme_no_saw_lessons_length(__theme): |
def get_theme_no_saw_lessons_length(__theme): |
||||||
result = 0 |
result = 0 |
||||||
for n in __theme.get_lessons(): |
for n in __theme.get_lessons(): |
||||||
result += n.get_no_saw_lessons_length() |
result += n.get_no_saw_lessons_length() |
||||||
|
|
||||||
return result |
return result |
||||||
|
|
||||||
|
|
||||||
def get_theme_description(theme, student): |
def get_theme_description(theme, student): |
||||||
result = '' |
result = '' |
||||||
if theme.description: |
if theme.description: |
||||||
result += '<p style="padding:10px;">%s</p>' % theme.description |
result += '<p style="padding:10px;">%s</p>' % theme.description |
||||||
|
|
||||||
if theme.lessons_length() > 1: |
if theme.lessons_length() > 1: |
||||||
result += u'<ul style="padding: 0 0 0 15px;">' |
result += u'<ul style="padding: 0 0 0 15px;">' |
||||||
for i in Lesson.objects.filter(course=theme.course, theme=theme).order_by('sort'): |
for i in Lesson.objects.filter(course=theme.course, theme=theme).order_by('sort'): |
||||||
result += i.get_description(student) |
result += i.get_description(student) |
||||||
result += u'</ul>' |
result += u'</ul>' |
||||||
return result |
return result |
||||||
|
|
||||||
if not theme.description and theme.lessons_length() == 1: |
if not theme.description and theme.lessons_length() == 1: |
||||||
return Lesson.objects.get(theme=theme).description |
return Lesson.objects.get(theme=theme).description |
||||||
|
|
||||||
|
|
||||||
def get_active_homework_students(theme): |
def get_active_homework_students(theme): |
||||||
result = [] |
result = [] |
||||||
if theme.homework_exist(): |
if theme.homework_exist(): |
||||||
for i in HomeworkJ.objects.filter(homework=theme.get_homework(), status='T'): |
for i in HomeworkJ.objects.filter(homework=theme.get_homework(), status='T'): |
||||||
result.append(i.student) |
result.append(i.student) |
||||||
return result |
return result |
||||||
|
|
||||||
|
|
||||||
def get_active_homework_students_length(theme): |
def get_active_homework_students_length(theme): |
||||||
if theme.homework_exist(): |
if theme.homework_exist(): |
||||||
return HomeworkJ.objects.filter(homework=self.get_homework(), status='T').count() |
return HomeworkJ.objects.filter(homework=self.get_homework(), status='T').count() |
||||||
else: |
else: |
||||||
return 0 |
return 0 |
||||||
|
|
||||||
|
|
||||||
def get_actual_theme_lesson_id(theme, student): |
def get_actual_theme_lesson_id(theme, student): |
||||||
# Получение читаемого урока |
# Получение читаемого урока |
||||||
if student: |
if student: |
||||||
try: |
try: |
||||||
if student.is_authenticated() and student.is_admin: |
if student.is_authenticated() and student.is_admin: |
||||||
return Lesson.objects.get(theme=theme, sort='1').id |
return Lesson.objects.get(theme=theme, sort='1').id |
||||||
except: |
except: |
||||||
pass |
pass |
||||||
|
|
||||||
status = theme.get_status(student) |
status = theme.get_status(student) |
||||||
if status == 'R': |
if status == 'R': |
||||||
if LessonJ.objects.filter(status='R', lesson__theme=theme, student=student).exists(): |
if LessonJ.objects.filter(status='R', lesson__theme=theme, student=student).exists(): |
||||||
return LessonJ.objects.filter(status='R', lesson__theme=theme, student=student).first().lesson.id |
return LessonJ.objects.filter(status='R', lesson__theme=theme, student=student).first().lesson.id |
||||||
else: |
else: |
||||||
if theme.homework_status(student) in ['R', 'E', 'T', 'A']: |
if theme.homework_status(student) in ['R', 'E', 'T', 'A']: |
||||||
return Lesson.objects.filter(theme=theme).order_by('sort').last().id |
return Lesson.objects.filter(theme=theme).order_by('sort').last().id |
||||||
else: |
else: |
||||||
return Lesson.objects.filter(theme=theme, free=True).order_by('sort').first().id |
return Lesson.objects.filter(theme=theme, free=True).order_by('sort').first().id |
||||||
|
|
||||||
elif status == 'F': |
elif status == 'F': |
||||||
return Lesson.objects.filter(theme=theme).order_by('sort').first().id |
return Lesson.objects.filter(theme=theme).order_by('sort').first().id |
||||||
|
|
||||||
else: |
else: |
||||||
if Lesson.objects.filter(theme=theme, free=True).exists(): |
if Lesson.objects.filter(theme=theme, free=True).exists(): |
||||||
return Lesson.objects.filter(theme=theme, free=True).order_by('sort').first().id |
return Lesson.objects.filter(theme=theme, free=True).order_by('sort').first().id |
||||||
else: |
else: |
||||||
return False |
return False |
||||||
|
|
||||||
|
|
||||||
def get_one_lesson_id(theme): |
def get_one_lesson_id(theme): |
||||||
if theme.lessons_length() == 1: |
if theme.lessons_length() == 1: |
||||||
return Lesson.objects.filter(course=theme.course, theme=theme).first().id |
return Lesson.objects.filter(course=theme.course, theme=theme).first().id |
||||||
else: |
else: |
||||||
return '0' |
return '0' |
||||||
|
|
||||||
|
|
||||||
def homework_status_html(theme, student): |
def homework_status_html(theme, student): |
||||||
status = theme.homework_status(student) |
status = theme.homework_status(student) |
||||||
data = u'<span class="label font-normal text-white bg-{0}" style="margin-left: 10px;">{1}</span>' |
data = u'<span class="label font-normal text-white bg-{0}" style="margin-left: 10px;">{1}</span>' |
||||||
if status == 'B': |
if status == 'B': |
||||||
return data.format(u'primary', u'Пока недоступно') |
return data.format(u'primary', u'Пока недоступно') |
||||||
elif status == 'A': |
elif status == 'A': |
||||||
return data.format(u'warning', u'Достуно для выполнения') |
return data.format(u'warning', u'Достуно для выполнения') |
||||||
elif status == 'T': |
elif status == 'T': |
||||||
return data.format(u'info', u'Проверяется преподавателем') |
return data.format(u'info', u'Проверяется преподавателем') |
||||||
elif status == 'E': |
elif status == 'E': |
||||||
return data.format(u'danger', u'Требуется доработка') |
return data.format(u'danger', u'Требуется доработка') |
||||||
elif status == 'F': |
elif status == 'F': |
||||||
return data.format(u'success', u'Сдано') |
return data.format(u'success', u'Сдано') |
||||||
|
|
||||||
|
|
||||||
def homework_status(theme, student): |
def homework_status(theme, student): |
||||||
if Homework.objects.filter(theme=theme).exists(): |
if Homework.objects.filter(theme=theme).exists(): |
||||||
try: |
try: |
||||||
homework = HomeworkJ.objects.get(student=student, homework=Homework.objects.get(theme=theme)) |
homework = HomeworkJ.objects.get(student=student, homework=Homework.objects.get(theme=theme)) |
||||||
except HomeworkJ.DoesNotExist: |
except HomeworkJ.DoesNotExist: |
||||||
return 'B' |
return 'B' |
||||||
else: |
else: |
||||||
return homework.status |
return homework.status |
||||||
else: |
else: |
||||||
return 'B' |
return 'B' |
||||||
|
|
||||||
|
|
||||||
def check_theme_finish(theme, student): |
def check_theme_finish(theme, student): |
||||||
# Проверка, прошел ли пользователь тему по урокам |
# Проверка, прошел ли пользователь тему по урокам |
||||||
if LessonJ.objects.filter(student=student, status='F', lesson__theme=theme).count() == theme.lessons_length(): |
if LessonJ.objects.filter(student=student, status='F', lesson__theme=theme).count() == theme.lessons_length(): |
||||||
return True |
return True |
||||||
else: |
else: |
||||||
return False |
return False |
||||||
|
|
||||||
|
|
||||||
def check_study_access(theme, student): |
def check_study_access(theme, student): |
||||||
if LessonJ.objects.filter(Q(student=student, status='R', lesson__theme=theme) | Q(student=student, status='F', |
if LessonJ.objects.filter(Q(student=student, status='R', lesson__theme=theme) | Q(student=student, status='F', |
||||||
lesson__theme=theme)).exists(): |
lesson__theme=theme)).exists(): |
||||||
return True |
return True |
||||||
else: |
else: |
||||||
return False |
return False |
||||||
|
|
||||||
|
|
||||||
def get_status(theme, student): |
def get_status(theme, student): |
||||||
# 1) Читаемая тема |
# 1) Читаемая тема |
||||||
# 2) ДЗ на прохождении |
# 2) ДЗ на прохождении |
||||||
# 3) Укомплектовано |
# 3) Укомплектовано |
||||||
if student: |
if student: |
||||||
if LessonJ.objects.filter(student=student, lesson__in=Lesson.objects.filter(theme=theme), |
if LessonJ.objects.filter(student=student, lesson__in=Lesson.objects.filter(theme=theme), |
||||||
status='R').exists(): |
status='R').exists(): |
||||||
return 'R' |
return 'R' |
||||||
|
|
||||||
elif Lesson.objects.filter(free=True, theme=theme).exists() \ |
elif Lesson.objects.filter(free=True, theme=theme).exists() \ |
||||||
and not LessonJ.objects.filter(student=student, lesson__in=Lesson.objects.filter(theme=theme, |
and not LessonJ.objects.filter(student=student, lesson__in=Lesson.objects.filter(theme=theme, |
||||||
free=True)): |
free=True)): |
||||||
return 'R' |
return 'R' |
||||||
|
|
||||||
elif theme.homework_status(student) != 'B': |
elif theme.homework_status(student) != 'B': |
||||||
h_status = theme.homework_status(student) |
h_status = theme.homework_status(student) |
||||||
if h_status == 'F': |
if h_status == 'F': |
||||||
return 'F' |
return 'F' |
||||||
|
|
||||||
else: |
else: |
||||||
return 'R' |
return 'R' |
||||||
|
|
||||||
elif LessonJ.objects.filter(student=student, lesson__theme=theme, |
elif LessonJ.objects.filter(student=student, lesson__theme=theme, |
||||||
status='F').count() == Lesson.objects.filter(theme=theme).count(): |
status='F').count() == Lesson.objects.filter(theme=theme).count(): |
||||||
return 'F' |
return 'F' |
||||||
|
|
||||||
else: |
else: |
||||||
return 'N' |
return 'N' |
||||||
else: |
else: |
||||||
if theme.sort == 1 and Lesson.objects.filter(free=True, theme=theme).exists(): |
if theme.sort == 1 and Lesson.objects.filter(free=True, theme=theme).exists(): |
||||||
return 'R' |
return 'R' |
||||||
else: |
else: |
||||||
return 'N' |
return 'N' |
||||||
|
|
||||||
|
|
||||||
def get_theme_color(theme, student): |
def get_theme_color(theme, student): |
||||||
# Получить тип |
# Получить тип |
||||||
# Если тип премиум или пополнение |
# Если тип премиум или пополнение |
||||||
status = theme.get_status(student) |
status = theme.get_status(student) |
||||||
if status == 'F': |
if status == 'F': |
||||||
return 'b-success' |
return 'b-success' |
||||||
elif status == 'N': |
elif status == 'N': |
||||||
return 'b-default' |
return 'b-default' |
||||||
else: |
else: |
||||||
return 'b-info' |
return 'b-info' |
||||||
|
|
||||||
|
|
||||||
def get_theme_skills(__theme): |
def get_theme_skills(__theme): |
||||||
result = [] |
result = [] |
||||||
for i in SkillJ.objects.filter(lesson__in=__theme.get_lessons()): |
for i in SkillJ.objects.filter(lesson__in=__theme.get_lessons()): |
||||||
if i.skill not in result: |
if i.skill not in result: |
||||||
result.append(i.skill) |
result.append(i.skill) |
||||||
return result |
return result |
||||||
|
|
||||||
|
|
||||||
def have_skills(self): |
def have_skills(self): |
||||||
return SkillJ.objects.filter(lesson__in=self.get_lessons()).exists() |
return SkillJ.objects.filter(lesson__in=self.get_lessons()).exists() |
||||||
|
|
||||||
|
|
||||||
### Методы над уроком |
### Методы над уроком |
||||||
def get_lesson_description(lesson, student): |
def get_lesson_description(lesson, student): |
||||||
# 1 - id |
# 1 - id |
||||||
# 2 - course_id |
# 2 - course_id |
||||||
# 3 - title |
# 3 - title |
||||||
# 4 - status |
# 4 - status |
||||||
# 5 - free |
# 5 - free |
||||||
button = u'<li style="margin-bottom:5px;">' \ |
button = u'<li style="margin-bottom:5px;">' \ |
||||||
u'<a href="/courses/lesson/{0}" by_type="lesson" self_id="{0}" course_id="{1}" ' \ |
u'<a href="/courses/lesson/{0}" by_type="lesson" self_id="{0}" course_id="{1}" ' \ |
||||||
u'style="color:#333; border-bottom:1px dotted #333; color: #333;">{2}</a> ' \ |
u'style="color:#333; border-bottom:1px dotted #333; color: #333;">{2}</a> ' \ |
||||||
u'{3} ' \ |
u'{3} ' \ |
||||||
u'<span class="label label-success" style="margin-left: 10px;">{4}</span>' \ |
u'<span class="label label-success" style="margin-left: 10px;">{4}</span>' \ |
||||||
u'</li>' |
u'</li>' |
||||||
# 0 - title |
# 0 - title |
||||||
# 1 - status |
# 1 - status |
||||||
# 2 - free |
# 2 - free |
||||||
button2 = u'<li style="margin-bottom:5px;">' \ |
button2 = u'<li style="margin-bottom:5px;">' \ |
||||||
u'{0} ' \ |
u'{0} ' \ |
||||||
u'{1} ' \ |
u'{1} ' \ |
||||||
u'<span class="label label-success" style="margin-left: 10px;">{2}</span>' \ |
u'<span class="label label-success" style="margin-left: 10px;">{2}</span>' \ |
||||||
u'</li>' |
u'</li>' |
||||||
|
|
||||||
if student and student.is_authenticated() and student.is_admin: |
if student and student.is_authenticated() and student.is_admin: |
||||||
return button.format(lesson.id, lesson.course.id, |
return button.format(lesson.id, lesson.course.id, |
||||||
u'<b>ID: %s</b> %s' % (lesson.id, lesson.title) if student.is_admin else lesson.title, |
u'<b>ID: %s</b> %s' % (lesson.id, lesson.title) if student.is_admin else lesson.title, |
||||||
'<i class="glyphicon glyphicon-time"></i>', '') |
'<i class="glyphicon glyphicon-time"></i>', '') |
||||||
|
|
||||||
elif lesson.get_status(student) != 'N': |
elif lesson.get_status(student) != 'N': |
||||||
return button.format(lesson.id, lesson.course.id, lesson.title, lesson.get_status_html(student), '') |
return button.format(lesson.id, lesson.course.id, lesson.title, lesson.get_status_html(student), '') |
||||||
|
|
||||||
else: |
else: |
||||||
if lesson.sort == 1 and lesson.free: |
if lesson.sort == 1 and lesson.free: |
||||||
return button.format(lesson.id, lesson.course.id, lesson.title, '<i class="glyphicon glyphicon-time"></i>', |
return button.format(lesson.id, lesson.course.id, lesson.title, '<i class="glyphicon glyphicon-time"></i>', |
||||||
'') |
'') |
||||||
else: |
else: |
||||||
return button2.format(lesson.title, lesson.get_status_html(student), '') |
return button2.format(lesson.title, lesson.get_status_html(student), '') |
||||||
|
|
||||||
# if lesson.get_status(student) != 'N': |
# if lesson.get_status(student) != 'N': |
||||||
# return button.format(lesson.id, lesson.course.id, lesson.title, lesson.get_status_html(student), |
# return button.format(lesson.id, lesson.course.id, lesson.title, lesson.get_status_html(student), |
||||||
# u'Бесплатный урок' if lesson.free else '') |
# u'Бесплатный урок' if lesson.free else '') |
||||||
|
|
||||||
# else: |
# else: |
||||||
# if lesson.sort == 1 and lesson.free: |
# if lesson.sort == 1 and lesson.free: |
||||||
# return button.format(lesson.id, lesson.course.id, lesson.title, |
# return button.format(lesson.id, lesson.course.id, lesson.title, |
||||||
# '<i class="glyphicon glyphicon-time"></i>', |
# '<i class="glyphicon glyphicon-time"></i>', |
||||||
# u'Бесплатный урок' if lesson.free else '') |
# u'Бесплатный урок' if lesson.free else '') |
||||||
# else: |
# else: |
||||||
# return button2.format(lesson.title, lesson.get_status_html(student), |
# return button2.format(lesson.title, lesson.get_status_html(student), |
||||||
# u'Бесплатный урок' if lesson.free else '') |
# u'Бесплатный урок' if lesson.free else '') |
||||||
|
|
||||||
|
|
||||||
def get_no_saw_lessons_length(lesson): |
def get_no_saw_lessons_length(lesson): |
||||||
return lesson.comments.filter(saw=False).count() |
return lesson.comments.filter(saw=False).count() |
||||||
|
|
||||||
|
|
||||||
def get_status_html(lesson, student): |
def get_status_html(lesson, student): |
||||||
status = lesson.get_status(student) |
status = lesson.get_status(student) |
||||||
if status == 'N': |
if status == 'N': |
||||||
return u'<i class="glyphicon glyphicon-remove"></i>' |
return u'<i class="glyphicon glyphicon-remove"></i>' |
||||||
elif status == 'F': |
elif status == 'F': |
||||||
return u'<i class="glyphicon glyphicon-ok"></i>' |
return u'<i class="glyphicon glyphicon-ok"></i>' |
||||||
elif status == 'R': |
elif status == 'R': |
||||||
return u'<i class="glyphicon glyphicon-time"></i>' |
return u'<i class="glyphicon glyphicon-time"></i>' |
||||||
|
|
||||||
|
|
||||||
def get_lesson_skills(lesson): |
def get_lesson_skills(lesson): |
||||||
return SkillJ.objects.filter(lesson=lesson) |
return SkillJ.objects.filter(lesson=lesson) |
||||||
|
|
||||||
|
|
||||||
def get_comments_length(lesson): |
def get_comments_length(lesson): |
||||||
return lesson.comments.filter(public=True).count() |
return lesson.comments.filter(public=True).count() |
||||||
|
|
||||||
|
|
||||||
def get_lesson_status(lesson, student): |
def get_lesson_status(lesson, student): |
||||||
try: |
try: |
||||||
return LessonJ.objects.get(student=student, lesson=lesson).status |
return LessonJ.objects.get(student=student, lesson=lesson).status |
||||||
except LessonJ.DoesNotExist: |
except LessonJ.DoesNotExist: |
||||||
return 'N' |
return 'N' |
||||||
|
|
||||||
|
|
||||||
def get_status_name(lesson, student): |
def get_status_name(lesson, student): |
||||||
try: |
try: |
||||||
return LessonJ.objects.get(student=student, lesson=lesson).get_status_display() |
return LessonJ.objects.get(student=student, lesson=lesson).get_status_display() |
||||||
except LessonJ.DoesNotExist: |
except LessonJ.DoesNotExist: |
||||||
return u'Не доступно' |
return u'Не доступно' |
||||||
|
|
||||||
|
|
||||||
### Методы над ДЗ |
### Методы над ДЗ |
||||||
def get_homework_status(__homework, student): |
def get_homework_status(__homework, student): |
||||||
try: |
try: |
||||||
homework = HomeworkJ.objects.get(student=student, homework=__homework) |
homework = HomeworkJ.objects.get(student=student, homework=__homework) |
||||||
except HomeworkJ.DoesNotExist: |
except HomeworkJ.DoesNotExist: |
||||||
return 'B' |
return 'B' |
||||||
else: |
else: |
||||||
return homework.status |
return homework.status |
||||||
|
|
||||||
|
|
||||||
### Методы экзамена |
### Методы экзамена |
||||||
|
|
||||||
def get_exam_color(exam, student): |
def get_exam_color(exam, student): |
||||||
# Получить тип |
# Получить тип |
||||||
# Если тип премиум или пополнение |
# Если тип премиум или пополнение |
||||||
status = exam.get_status(student) |
status = exam.get_status(student) |
||||||
if status == 'P': |
if status == 'P': |
||||||
return 'b-info' |
return 'b-info' |
||||||
elif status == 'T': |
elif status == 'T': |
||||||
return 'b-primary' |
return 'b-primary' |
||||||
elif status == 'F': |
elif status == 'F': |
||||||
return 'b-success' |
return 'b-success' |
||||||
elif status == 'E': |
elif status == 'E': |
||||||
return 'b-danger' |
return 'b-danger' |
||||||
else: |
else: |
||||||
return 'b-default' |
return 'b-default' |
||||||
|
|
||||||
|
|||||||
@ -1,45 +1,45 @@ |
|||||||
from courses import views, api |
from courses import views, api |
||||||
from django.conf.urls import url |
from django.conf.urls import url |
||||||
|
|
||||||
urlpatterns = [ |
urlpatterns = [ |
||||||
url(r'^([0-9]{1,99})$', views.course), |
url(r'^([0-9]{1,99})$', views.course), |
||||||
url(r'^([0-9]{1,99})#\s+$', views.course), |
url(r'^([0-9]{1,99})#\s+$', views.course), |
||||||
url(r'lesson/([0-9]{1,99})$', views.lesson), |
url(r'lesson/([0-9]{1,99})$', views.lesson), |
||||||
url(r'homework/([0-9]{1,99})$', views.homework), |
url(r'homework/([0-9]{1,99})$', views.homework), |
||||||
url(r'exam/([0-9]{1,99})$', views.exam), |
url(r'exam/([0-9]{1,99})$', views.exam), |
||||||
url(r'read_lesson/$', api.read_lesson), |
url(r'read_lesson/$', api.read_lesson), |
||||||
url(r'load_lesson_comments$', api.load_lesson_comments), |
url(r'load_lesson_comments$', api.load_lesson_comments), |
||||||
url(r'load_homework_comments_for_teacher$', api.load_homework_comments_for_teacher), |
url(r'load_homework_comments_for_teacher$', api.load_homework_comments_for_teacher), |
||||||
url(r'load_exam_comments_for_teacher$', api.load_exam_comments_for_teacher), |
url(r'load_exam_comments_for_teacher$', api.load_exam_comments_for_teacher), |
||||||
url(r'load_homework_comments$', api.load_homework_comments), |
url(r'load_homework_comments$', api.load_homework_comments), |
||||||
url(r'load_exam_comments$', api.load_exam_comments), |
url(r'load_exam_comments$', api.load_exam_comments), |
||||||
url(r'get_achievement$', api.get_achievement), |
url(r'get_achievement$', api.get_achievement), |
||||||
url(r'close_achievement$', api.close_achievement), |
url(r'close_achievement$', api.close_achievement), |
||||||
url(r'delete_comment$', api.delete_comment), |
url(r'delete_comment$', api.delete_comment), |
||||||
url(r'sent_lesson_comment$', api.sent_lesson_comment), |
url(r'sent_lesson_comment$', api.sent_lesson_comment), |
||||||
url(r'get_homework_comments_length_for_teacher$', api.get_homework_comments_length_for_teacher), |
url(r'get_homework_comments_length_for_teacher$', api.get_homework_comments_length_for_teacher), |
||||||
url(r'get_exam_comments_length_for_teacher$', api.get_exam_comments_length_for_teacher), |
url(r'get_exam_comments_length_for_teacher$', api.get_exam_comments_length_for_teacher), |
||||||
url(r'get_homework_comments_length$', api.get_homework_comments_length), |
url(r'get_homework_comments_length$', api.get_homework_comments_length), |
||||||
url(r'get_exam_comments_length$', api.get_exam_comments_length), |
url(r'get_exam_comments_length$', api.get_exam_comments_length), |
||||||
url(r'sent_homework_comment$', api.sent_homework_comment), |
url(r'sent_homework_comment$', api.sent_homework_comment), |
||||||
url(r'sent_exam_comment$', api.sent_exam_comment), |
url(r'sent_exam_comment$', api.sent_exam_comment), |
||||||
url(r'get_lesson_comments_length$', api.get_lesson_comments_length), |
url(r'get_lesson_comments_length$', api.get_lesson_comments_length), |
||||||
url(r'get_lesson_context/$', api.get_lesson_context), |
url(r'get_lesson_context/$', api.get_lesson_context), |
||||||
url(r'send_accept_teach_comment$', api.send_accept_teach_comment), |
url(r'send_accept_teach_comment$', api.send_accept_teach_comment), |
||||||
url(r'send_cancel_teach_comment', api.send_cancel_teach_comment), |
url(r'send_cancel_teach_comment', api.send_cancel_teach_comment), |
||||||
url(r'send_exam_accept_teach_comment$', api.send_exam_accept_teach_comment), |
url(r'send_exam_accept_teach_comment$', api.send_exam_accept_teach_comment), |
||||||
url(r'send_exam_cancel_teach_comment', api.send_exam_cancel_teach_comment), |
url(r'send_exam_cancel_teach_comment', api.send_exam_cancel_teach_comment), |
||||||
url(r'get_next_button/$', api.get_next_button_ajax), |
url(r'get_next_button/$', api.get_next_button_ajax), |
||||||
url(r'by_course_data/$', api.by_course_data), |
url(r'by_course_data/$', api.by_course_data), |
||||||
url(r'get_homework_context/$', api.get_homework_context), |
url(r'get_homework_context/$', api.get_homework_context), |
||||||
url(r'load_comment/$', api.load_comment), |
url(r'load_comment/$', api.load_comment), |
||||||
url(r'sent_homework_up_teacher$', api.sent_homework_up_teacher), |
url(r'sent_homework_up_teacher$', api.sent_homework_up_teacher), |
||||||
url(r'sent_homework_down_teacher$', api.sent_homework_down_teacher), |
url(r'sent_homework_down_teacher$', api.sent_homework_down_teacher), |
||||||
url(r'sent_exam_up_teacher$', api.sent_exam_up_teacher), |
url(r'sent_exam_up_teacher$', api.sent_exam_up_teacher), |
||||||
url(r'sent_exam_down_teacher$', api.sent_exam_down_teacher), |
url(r'sent_exam_down_teacher$', api.sent_exam_down_teacher), |
||||||
url(r'get_process_vector$', api.get_process_vector), |
url(r'get_process_vector$', api.get_process_vector), |
||||||
url(r'get_comment_text/$', api.get_comment_text), |
url(r'get_comment_text/$', api.get_comment_text), |
||||||
url(r'sent_comment_response/$', api.sent_comment_response), |
url(r'sent_comment_response/$', api.sent_comment_response), |
||||||
url(r'achievements/$', views.achievements), |
url(r'achievements/$', views.achievements), |
||||||
url(r'^(?P<slug>.*)$', views.course), |
url(r'^(?P<slug>.*)$', views.course), |
||||||
] |
] |
||||||
|
|||||||
@ -1,254 +1,250 @@ |
|||||||
# coding=utf-8 |
# coding=utf-8 |
||||||
import datetime |
import datetime |
||||||
from django.http import Http404 |
from django.http import Http404 |
||||||
|
|
||||||
from finance.models import Bill |
from finance.models import Bill |
||||||
from lms.decors import response_decor |
from lms.decors import response_decor |
||||||
from lms.tools import user_fabric |
from lms.tools import user_fabric |
||||||
from courses.models import Course, Lesson, Homework, Exam, MaterialDirection, Achievements, Skills, SkillJ, CourseMap |
from courses.models import Course, Lesson, Homework, Exam, MaterialDirection, Achievements, Skills, SkillJ, CourseMap |
||||||
from journals.models import LessonJ, TeacherJ, HomeworkJ, check_journal, ExamJ, AchievementJ |
from journals.models import LessonJ, TeacherJ, HomeworkJ, check_journal, ExamJ, AchievementJ |
||||||
from finance.tools import system_check_bill |
from finance.tools import system_check_bill |
||||||
|
|
||||||
|
|
||||||
@response_decor(template='course.html', without_auth=True) |
@response_decor(template='course.html', without_auth=True) |
||||||
def course(request, slug): |
def course(request, slug): |
||||||
# Страница курса |
# Страница курса |
||||||
user = user_fabric(request.user) |
user = user_fabric(request.user) |
||||||
if not slug: return {'redirect': '/'} |
if not slug: return {'redirect': '/'} |
||||||
try: |
try: |
||||||
course = Course.objects.get(slug=slug) |
course = Course.objects.get(slug=slug) |
||||||
except Course.DoesNotExist: |
except Course.DoesNotExist: |
||||||
try: |
try: |
||||||
course = Course.objects.get(id=slug) |
course = Course.objects.get(id=slug) |
||||||
except ValueError: |
except ValueError: |
||||||
raise Http404 |
raise Http404 |
||||||
except Course.DoesNotExist: |
except Course.DoesNotExist: |
||||||
raise Http404 |
raise Http404 |
||||||
else: |
else: |
||||||
return {'redirect': course.get_absolute_url()} |
return {'redirect': course.get_absolute_url()} |
||||||
except Course.DoesNotExist: |
except Course.DoesNotExist: |
||||||
raise Http404 |
raise Http404 |
||||||
|
|
||||||
if not course.public and not (request.user.is_authenticated() and request.user.is_admin): |
if not course.public and not (request.user.is_authenticated() and request.user.is_admin): |
||||||
raise Http404 |
raise Http404 |
||||||
|
|
||||||
if course.hidden: |
if course.hidden: |
||||||
if not request.user.is_authenticated(): |
if not request.user.is_authenticated(): |
||||||
raise Http404 |
raise Http404 |
||||||
else: |
else: |
||||||
if not request.user.is_admin: |
if not request.user.is_admin: |
||||||
try: |
try: |
||||||
Bill.objects.get(service__course=course, user=request.user, status='F') |
Bill.objects.get(service__course=course, user=request.user, status='F') |
||||||
except Bill.DoesNotExist: |
except Bill.DoesNotExist: |
||||||
raise Http404 |
raise Http404 |
||||||
journal, created = TeacherJ.objects.get_or_create(course=course, student=user_fabric(request.user)) |
journal, created = TeacherJ.objects.get_or_create(course=course, student=user_fabric(request.user)) |
||||||
if created: |
if created: |
||||||
check_journal(journal) |
check_journal(journal) |
||||||
_map = CourseMap.objects.filter(course=course).order_by('sort').first() |
_map = CourseMap.objects.filter(course=course).order_by('sort').first() |
||||||
_j = _map.get_obj() |
_j = _map.get_obj() |
||||||
j = HomeworkJ.objects.get(material=_j, student=request.user) |
j = HomeworkJ.objects.get(material=_j, student=request.user) |
||||||
j.open_material() |
j.open_material() |
||||||
else: |
else: |
||||||
journal, created = TeacherJ.objects.get_or_create(course=course, student=user_fabric(request.user)) |
journal, created = TeacherJ.objects.get_or_create(course=course, student=user_fabric(request.user)) |
||||||
|
|
||||||
if user and not journal.start_date: |
if user and not journal.start_date: |
||||||
journal.start_date = datetime.datetime.now() |
journal.start_date = datetime.datetime.now() |
||||||
journal.save() |
journal.save() |
||||||
|
|
||||||
waiting_materials = [] |
waiting_materials = [] |
||||||
if journal.waiting.exists(): |
if journal.waiting.exists(): |
||||||
for n in journal.waiting.all(): |
for n in journal.waiting.all(): |
||||||
_obj = n.get_obj() |
_obj = n.get_obj() |
||||||
__type = n.get_type() |
__type = n.get_type() |
||||||
_type = None |
_type = None |
||||||
if __type == 'L': |
if __type == 'L': |
||||||
_type = 'lesson' |
_type = 'lesson' |
||||||
elif __type == 'H': |
elif __type == 'H': |
||||||
_type = 'homework' |
_type = 'homework' |
||||||
elif __type == 'E': |
elif __type == 'E': |
||||||
_type = 'exam' |
_type = 'exam' |
||||||
|
|
||||||
waiting_materials.append({'obj': _obj, 'type': _type}) |
waiting_materials.append({'obj': _obj, 'type': _type}) |
||||||
return { |
return {'course': journal.get_face(user_fabric(request.user)), 'user': user_fabric(request.user), 'waiting_materials': waiting_materials} |
||||||
'course': journal.get_face(user_fabric(request.user)), |
|
||||||
'user': user_fabric(request.user), |
|
||||||
'waiting_materials': waiting_materials |
@response_decor(template='lesson.html') |
||||||
} |
def lesson(request, lesson): |
||||||
|
# Открытие окна урока |
||||||
|
# TODO: Проверить все ссылки на ID Lesson |
||||||
@response_decor(template='lesson.html') |
try: |
||||||
def lesson(request, lesson): |
lesson = Lesson.objects.get(id=lesson) |
||||||
# Открытие окна урока |
lj = LessonJ.objects.get(material=lesson, student=request.user) |
||||||
# TODO: Проверить все ссылки на ID Lesson |
except Lesson.DoesNotExist: |
||||||
try: |
raise Http404 |
||||||
lesson = Lesson.objects.get(id=lesson) |
except LessonJ.DoesNotExist: |
||||||
lj = LessonJ.objects.get(material=lesson, student=request.user) |
j, c = TeacherJ.objects.get_or_create(student=request.user, course=lesson.course) |
||||||
except Lesson.DoesNotExist: |
check_journal(j) |
||||||
raise Http404 |
lj = LessonJ.objects.get(material=lesson, student=request.user) |
||||||
except LessonJ.DoesNotExist: |
|
||||||
j, c = TeacherJ.objects.get_or_create(student=request.user, course=lesson.course) |
waiting_materials = [] |
||||||
check_journal(j) |
if lj.parent.parent.waiting.exists(): |
||||||
lj = LessonJ.objects.get(material=lesson, student=request.user) |
for n in lj.parent.parent.waiting.all(): |
||||||
|
_obj = n.get_obj() |
||||||
waiting_materials = [] |
__type = n.get_type() |
||||||
if lj.parent.parent.waiting.exists(): |
_type = None |
||||||
for n in lj.parent.parent.waiting.all(): |
if __type == 'L': |
||||||
_obj = n.get_obj() |
_type = 'lesson' |
||||||
__type = n.get_type() |
elif __type == 'H': |
||||||
_type = None |
_type = 'homework' |
||||||
if __type == 'L': |
elif __type == 'E': |
||||||
_type = 'lesson' |
_type = 'exam' |
||||||
elif __type == 'H': |
|
||||||
_type = 'homework' |
waiting_materials.append({'obj': _obj, 'type': _type}) |
||||||
elif __type == 'E': |
|
||||||
_type = 'exam' |
if request.user.is_authenticated() and request.user.is_admin or request.user in lesson.course.teachers.all(): |
||||||
|
return {'lesson': lj.get_face(user_fabric(request.user)), |
||||||
waiting_materials.append({'obj': _obj, 'type': _type}) |
'course': {'head': lj.parent.parent.get_head_face(), |
||||||
|
'level': lj.parent.parent.course.get_level(), |
||||||
if request.user.is_authenticated() and request.user.is_admin or request.user in lesson.course.teachers.all(): |
'journal': lj.parent.parent.get_face(user_fabric(request.user))}, |
||||||
return {'lesson': lj.get_face(user_fabric(request.user)), |
'bought': True, 'accept': True, 'waiting_materials': waiting_materials} |
||||||
'course': {'head': lj.parent.parent.get_head_face(), |
|
||||||
'level': lj.parent.parent.course.get_level(), |
if not lesson.free and not system_check_bill(lesson.token, request.user, theme_type=lesson.theme._type): |
||||||
'journal': lj.parent.parent.get_face(user_fabric(request.user))}, |
return {'redirect': '/access/by_error/'} |
||||||
'bought': True, 'accept': True, 'waiting_materials': waiting_materials} |
else: |
||||||
|
if lj.get_status_flag() == 'N' and not lj.parent.parent.waiting.filter(token=lj.material.token).exists(): |
||||||
if not lesson.free and not system_check_bill(lesson.token, request.user, theme_type=lesson.theme._type): |
return {'redirect': '/access/auth_error/'} |
||||||
return {'redirect': '/access/by_error/'} |
else: |
||||||
else: |
result = False |
||||||
if lj.get_status_flag() == 'N' and not lj.parent.parent.waiting.filter(token=lj.material.token).exists(): |
if lj.get_status_flag() != 'N': |
||||||
return {'redirect': '/access/auth_error/'} |
result = True |
||||||
else: |
elif lj.parent.parent.waiting.filter(token=lj.material.token).exists(): |
||||||
result = False |
result = True |
||||||
if lj.get_status_flag() != 'N': |
lj.date = datetime.datetime.now() |
||||||
result = True |
lj.save() |
||||||
elif lj.parent.parent.waiting.filter(token=lj.material.token).exists(): |
if result: |
||||||
result = True |
return {'lesson': lj.get_face(user_fabric(request.user)), 'course': {'head': lj.parent.parent.get_head_face(), 'level': lj.parent.parent.course.get_level(), 'journal': lj.parent.parent.get_face(user_fabric(request.user))}, 'bought': True, 'accept': True, 'waiting_materials': waiting_materials} |
||||||
lj.date = datetime.datetime.now() |
|
||||||
lj.save() |
|
||||||
if result: |
@response_decor(template='homework.html') |
||||||
return {'lesson': lj.get_face(user_fabric(request.user)), 'course': {'head': lj.parent.parent.get_head_face(), 'level': lj.parent.parent.course.get_level(), 'journal': lj.parent.parent.get_face(user_fabric(request.user))}, 'bought': True, 'accept': True, 'waiting_materials': waiting_materials} |
def homework(request, homework): |
||||||
|
# Страница ДЗ |
||||||
|
# TODO: Проверить везде ссылки с ID ДЗ |
||||||
@response_decor(template='homework.html') |
try: |
||||||
def homework(request, homework): |
hj = HomeworkJ.objects.get(material=Homework.objects.get(id=homework), student=request.user) |
||||||
# Страница ДЗ |
except Homework.DoesNotExist: |
||||||
# TODO: Проверить везде ссылки с ID ДЗ |
raise Http404 |
||||||
try: |
except HomeworkJ.DoesNotExist: |
||||||
hj = HomeworkJ.objects.get(material=Homework.objects.get(id=homework), student=request.user) |
j, c = TeacherJ.objects.get_or_create(student=request.user, course=Homework.objects.get(id=homework).course) |
||||||
except Homework.DoesNotExist: |
check_journal(j) |
||||||
raise Http404 |
hj = HomeworkJ.objects.get(material=Homework.objects.get(id=homework), student=request.user) |
||||||
except HomeworkJ.DoesNotExist: |
|
||||||
j, c = TeacherJ.objects.get_or_create(student=request.user, course=Homework.objects.get(id=homework).course) |
waiting_materials = [] |
||||||
check_journal(j) |
if hj.parent.parent.waiting.exists(): |
||||||
hj = HomeworkJ.objects.get(material=Homework.objects.get(id=homework), student=request.user) |
for n in hj.parent.parent.waiting.all(): |
||||||
|
_obj = n.get_obj() |
||||||
waiting_materials = [] |
__type = n.get_type() |
||||||
if hj.parent.parent.waiting.exists(): |
_type = None |
||||||
for n in hj.parent.parent.waiting.all(): |
if __type == 'L': |
||||||
_obj = n.get_obj() |
_type = 'lesson' |
||||||
__type = n.get_type() |
elif __type == 'H': |
||||||
_type = None |
_type = 'homework' |
||||||
if __type == 'L': |
elif __type == 'E': |
||||||
_type = 'lesson' |
_type = 'exam' |
||||||
elif __type == 'H': |
|
||||||
_type = 'homework' |
waiting_materials.append({'obj': _obj, 'type': _type}) |
||||||
elif __type == 'E': |
|
||||||
_type = 'exam' |
if request.user.is_authenticated() and request.user.is_admin: |
||||||
|
return {'homework': hj.get_face(user_fabric(request.user)), |
||||||
waiting_materials.append({'obj': _obj, 'type': _type}) |
'course': {'head': hj.parent.parent.get_head_face(), |
||||||
|
'level': hj.parent.parent.course.get_level(), |
||||||
if request.user.is_authenticated() and request.user.is_admin: |
'journal': hj.parent.parent.get_face(user_fabric(request.user))}, |
||||||
return {'homework': hj.get_face(user_fabric(request.user)), |
'waiting_materials': waiting_materials} |
||||||
'course': {'head': hj.parent.parent.get_head_face(), |
|
||||||
'level': hj.parent.parent.course.get_level(), |
if not system_check_bill(hj.material.token, request.user, theme_type=hj.material.theme._type): |
||||||
'journal': hj.parent.parent.get_face(user_fabric(request.user))}, |
return {'redirect': '/access/by_error/'} |
||||||
'waiting_materials': waiting_materials} |
else: |
||||||
|
if hj.get_status_flag() == 'N' and not hj.parent.parent.waiting.filter(token=hj.material.token).exists(): |
||||||
if not system_check_bill(hj.material.token, request.user, theme_type=hj.material.theme._type): |
return {'redirect': '/access/auth_error/'} |
||||||
return {'redirect': '/access/by_error/'} |
else: |
||||||
else: |
result = False |
||||||
if hj.get_status_flag() == 'N' and not hj.parent.parent.waiting.filter(token=hj.material.token).exists(): |
if hj.get_status_flag() != 'N': |
||||||
return {'redirect': '/access/auth_error/'} |
result = True |
||||||
else: |
elif hj.parent.parent.waiting.filter(token=hj.material.token).exists(): |
||||||
result = False |
hj.date = datetime.datetime.now() |
||||||
if hj.get_status_flag() != 'N': |
hj.save() |
||||||
result = True |
result = True |
||||||
elif hj.parent.parent.waiting.filter(token=hj.material.token).exists(): |
|
||||||
hj.date = datetime.datetime.now() |
if result: |
||||||
hj.save() |
return {'homework': hj.get_face(user_fabric(request.user)), |
||||||
result = True |
'course': {'head': hj.parent.parent.get_head_face(), |
||||||
|
'level': hj.parent.parent.course.get_level(), 'journal': hj.parent.parent.get_face(user_fabric(request.user))}, |
||||||
if result: |
'waiting_materials': waiting_materials} |
||||||
return {'homework': hj.get_face(user_fabric(request.user)), |
|
||||||
'course': {'head': hj.parent.parent.get_head_face(), |
|
||||||
'level': hj.parent.parent.course.get_level(), 'journal': hj.parent.parent.get_face(user_fabric(request.user))}, |
@response_decor(template='exam.html') |
||||||
'waiting_materials': waiting_materials} |
def exam(request, exam): |
||||||
|
# Страница экзамена |
||||||
|
# TODO: проверить, чтобы это было ID экзамена |
||||||
@response_decor(template='exam.html') |
try: |
||||||
def exam(request, exam): |
exam = ExamJ.objects.get(material=Exam.objects.get(id=exam), student=request.user) |
||||||
# Страница экзамена |
except Exam.DoesNotExist: |
||||||
# TODO: проверить, чтобы это было ID экзамена |
raise Http404 |
||||||
try: |
except ExamJ.DoesNotExist: |
||||||
exam = ExamJ.objects.get(material=Exam.objects.get(id=exam), student=request.user) |
j, c = TeacherJ.objects.get_or_create(student=request.user, course=Exam.objects.get(id=exam).course) |
||||||
except Exam.DoesNotExist: |
check_journal(j) |
||||||
raise Http404 |
exam = ExamJ.objects.get(material=Exam.objects.get(id=exam), student=request.user) |
||||||
except ExamJ.DoesNotExist: |
|
||||||
j, c = TeacherJ.objects.get_or_create(student=request.user, course=Exam.objects.get(id=exam).course) |
waiting_materials = [] |
||||||
check_journal(j) |
if exam.parent.parent.waiting.all().exists(): |
||||||
exam = ExamJ.objects.get(material=Exam.objects.get(id=exam), student=request.user) |
for n in exam.parent.parent.waiting.all(): |
||||||
|
_obj = n.get_obj() |
||||||
waiting_materials = [] |
__type = n.get_type() |
||||||
if exam.parent.parent.waiting.all().exists(): |
_type = None |
||||||
for n in exam.parent.parent.waiting.all(): |
if __type == 'L': |
||||||
_obj = n.get_obj() |
_type = 'lesson' |
||||||
__type = n.get_type() |
elif __type == 'H': |
||||||
_type = None |
_type = 'homework' |
||||||
if __type == 'L': |
elif __type == 'E': |
||||||
_type = 'lesson' |
_type = 'exam' |
||||||
elif __type == 'H': |
|
||||||
_type = 'homework' |
waiting_materials.append({'obj': _obj, 'type': _type}) |
||||||
elif __type == 'E': |
|
||||||
_type = 'exam' |
if request.user.is_authenticated() and request.user.is_admin: |
||||||
|
return {'exam': exam.get_face(user_fabric(request.user)), |
||||||
waiting_materials.append({'obj': _obj, 'type': _type}) |
'course': {'head': exam.parent.parent.get_head_face(), 'level': exam.parent.parent.course.get_level()}, |
||||||
|
'waiting_materials': waiting_materials} |
||||||
if request.user.is_authenticated() and request.user.is_admin: |
|
||||||
return {'exam': exam.get_face(user_fabric(request.user)), |
if not system_check_bill(exam.material.token, request.user): |
||||||
'course': {'head': exam.parent.parent.get_head_face(), 'level': exam.parent.parent.course.get_level()}, |
return {'redirect': '/access/by_error/'} |
||||||
'waiting_materials': waiting_materials} |
else: |
||||||
|
if exam.get_status_flag() == 'N' and not exam.parent.parent.waiting.filter(token=exam.material.token).exists(): |
||||||
if not system_check_bill(exam.material.token, request.user): |
return {'redirect': '/access/auth_error/'} |
||||||
return {'redirect': '/access/by_error/'} |
else: |
||||||
else: |
result = False |
||||||
if exam.get_status_flag() == 'N' and not exam.parent.parent.waiting.filter(token=exam.material.token).exists(): |
if exam.get_status_flag() != 'N': |
||||||
return {'redirect': '/access/auth_error/'} |
result = True |
||||||
else: |
elif exam.parent.parent.waiting.filter(token=exam.material.token).exists(): |
||||||
result = False |
result = True |
||||||
if exam.get_status_flag() != 'N': |
exam.date = datetime.datetime.now() |
||||||
result = True |
exam.save() |
||||||
elif exam.parent.parent.waiting.filter(token=exam.material.token).exists(): |
|
||||||
result = True |
if result: |
||||||
exam.date = datetime.datetime.now() |
return {'exam': exam.get_face(user_fabric(request.user)), 'course': {'head': exam.parent.parent.get_head_face(), 'level': exam.parent.parent.course.get_level()}, 'waiting_materials': waiting_materials} |
||||||
exam.save() |
|
||||||
|
|
||||||
if result: |
@response_decor(template='all_achievements.html', without_auth=True) |
||||||
return {'exam': exam.get_face(user_fabric(request.user)), 'course': {'head': exam.parent.parent.get_head_face(), 'level': exam.parent.parent.course.get_level()}, 'waiting_materials': waiting_materials} |
def achievements(request): |
||||||
|
# Список ачивок и статус получения |
||||||
|
skills = {} |
||||||
@response_decor(template='all_achievements.html', without_auth=True) |
for course in Course.objects.all().order_by('sort'): |
||||||
def achievements(request): |
skills[(course.id, course.title)] = {} |
||||||
# Список ачивок и статус получения |
for skillj in SkillJ.objects.filter(lesson__course=course): |
||||||
skills = {} |
if not skills[(course.id, course.title)].get(skillj.skill.title): |
||||||
for course in Course.objects.all().order_by('sort'): |
skills[(course.id, course.title)][skillj.skill.title] = { |
||||||
skills[(course.id, course.title)] = {} |
'size': 0, |
||||||
for skillj in SkillJ.objects.filter(lesson__course=course): |
'icon': skillj.skill.mini_icon, |
||||||
if not skills[(course.id, course.title)].get(skillj.skill.title): |
'color': skillj.skill.color |
||||||
skills[(course.id, course.title)][skillj.skill.title] = { |
} |
||||||
'size': 0, |
skills[(course.id, course.title)][skillj.skill.title]['size'] += skillj.size |
||||||
'icon': skillj.skill.mini_icon, |
|
||||||
'color': skillj.skill.color |
return {'achievements': Achievements.objects.all(), 'skills': skills} |
||||||
} |
|
||||||
skills[(course.id, course.title)][skillj.skill.title]['size'] += skillj.size |
|
||||||
|
|
||||||
return {'achievements': Achievements.objects.all(), 'skills': skills} |
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -1,125 +1,125 @@ |
|||||||
# -*- 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 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 = [ |
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||||
('courses', '0001_initial'), |
('courses', '0001_initial'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.CreateModel( |
migrations.CreateModel( |
||||||
name='Bill', |
name='Bill', |
||||||
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')), |
||||||
('status', models.CharField(choices=[(b'W', '\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f'), (b'P', '\u041d\u0430 \u043e\u043f\u043b\u0430\u0442\u0435'), (b'F', '\u041e\u043f\u043b\u0430\u0447\u0435\u043d'), (b'C', '\u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d')], default=b'W', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')), |
('status', models.CharField(choices=[(b'W', '\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f'), (b'P', '\u041d\u0430 \u043e\u043f\u043b\u0430\u0442\u0435'), (b'F', '\u041e\u043f\u043b\u0430\u0447\u0435\u043d'), (b'C', '\u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d')], default=b'W', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')), |
||||||
('key', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447')), |
('key', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447')), |
||||||
('out_id', models.CharField(blank=True, default=b'', max_length=100, verbose_name='ID \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u043a\u0430\u0437\u0430')), |
('out_id', models.CharField(blank=True, default=b'', max_length=100, verbose_name='ID \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u043a\u0430\u0437\u0430')), |
||||||
('date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0430')), |
('date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0430')), |
||||||
('status_changed', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043c\u0435\u043d\u044b \u0441\u0442\u0430\u0442\u0443\u0441\u0430')), |
('status_changed', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043c\u0435\u043d\u044b \u0441\u0442\u0430\u0442\u0443\u0441\u0430')), |
||||||
('comment', models.TextField(blank=True, help_text='\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u0430')), |
('comment', models.TextField(blank=True, help_text='\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u0430')), |
||||||
('finish_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f')), |
('finish_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f')), |
||||||
('salt', models.CharField(blank=True, default=b'', max_length=100, verbose_name='\u0421\u043e\u043b\u044c')), |
('salt', models.CharField(blank=True, default=b'', max_length=100, verbose_name='\u0421\u043e\u043b\u044c')), |
||||||
('manager', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bill_manager', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u043e\u0434\u0430\u0432\u0435\u0446')), |
('manager', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bill_manager', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u043e\u0434\u0430\u0432\u0435\u0446')), |
||||||
], |
], |
||||||
options={ |
options={ |
||||||
'verbose_name': '\u0421\u0447\u0435\u0442', |
'verbose_name': '\u0421\u0447\u0435\u0442', |
||||||
'verbose_name_plural': '\u0421\u0447\u0435\u0442\u0430', |
'verbose_name_plural': '\u0421\u0447\u0435\u0442\u0430', |
||||||
}, |
}, |
||||||
), |
), |
||||||
migrations.CreateModel( |
migrations.CreateModel( |
||||||
name='Price', |
name='Price', |
||||||
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')), |
||||||
('m_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')), |
('m_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')), |
||||||
('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(default=b'', help_text='\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c', max_length=255, verbose_name='\u0423\u0441\u043b\u0443\u0433\u0430')), |
('title', models.CharField(default=b'', help_text='\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c', max_length=255, verbose_name='\u0423\u0441\u043b\u0443\u0433\u0430')), |
||||||
('cost', models.IntegerField(verbose_name='\u0426\u0435\u043d\u0430')), |
('cost', models.IntegerField(verbose_name='\u0426\u0435\u043d\u0430')), |
||||||
('description', models.TextField(help_text='\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u043c', verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435')), |
('description', models.TextField(help_text='\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u043c', verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435')), |
||||||
('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={ |
||||||
'verbose_name': '\u0423\u0441\u043b\u0443\u0433\u0430', |
'verbose_name': '\u0423\u0441\u043b\u0443\u0433\u0430', |
||||||
'verbose_name_plural': '\u0423\u0441\u043b\u0443\u0433\u0438', |
'verbose_name_plural': '\u0423\u0441\u043b\u0443\u0433\u0438', |
||||||
}, |
}, |
||||||
), |
), |
||||||
migrations.CreateModel( |
migrations.CreateModel( |
||||||
name='SelfBillHistory', |
name='SelfBillHistory', |
||||||
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')), |
||||||
('status', models.CharField(choices=[(b'O', '\u041e\u0436\u0438\u0434\u0430\u0435\u0442 \u043e\u043f\u043b\u0430\u0442\u044b'), (b'F', '\u041e\u043f\u043b\u0430\u0447\u0435\u043d'), (b'C', '\u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d')], default=b'O', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')), |
('status', models.CharField(choices=[(b'O', '\u041e\u0436\u0438\u0434\u0430\u0435\u0442 \u043e\u043f\u043b\u0430\u0442\u044b'), (b'F', '\u041e\u043f\u043b\u0430\u0447\u0435\u043d'), (b'C', '\u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d')], default=b'O', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')), |
||||||
('fio', models.CharField(max_length=255, verbose_name='\u0424\u0418\u041e')), |
('fio', models.CharField(max_length=255, verbose_name='\u0424\u0418\u041e')), |
||||||
('phone', models.CharField(blank=True, max_length=255, verbose_name='\u0422\u0435\u043b\u0435\u0444\u043e\u043d')), |
('phone', models.CharField(blank=True, max_length=255, verbose_name='\u0422\u0435\u043b\u0435\u0444\u043e\u043d')), |
||||||
('email', models.CharField(blank=True, max_length=255, verbose_name='Email')), |
('email', models.CharField(blank=True, max_length=255, verbose_name='Email')), |
||||||
('s_date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f')), |
('s_date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f')), |
||||||
('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u043f\u043b\u0430\u0442\u044b')), |
('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u043f\u043b\u0430\u0442\u044b')), |
||||||
('salt', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0421\u043e\u043b\u044c')), |
('salt', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0421\u043e\u043b\u044c')), |
||||||
('out_id', models.CharField(blank=True, default=b'', max_length=100, verbose_name='ID \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u043a\u0430\u0437\u0430')), |
('out_id', models.CharField(blank=True, default=b'', max_length=100, verbose_name='ID \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u043a\u0430\u0437\u0430')), |
||||||
('key', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447')), |
('key', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447')), |
||||||
('sent', models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e')), |
('sent', models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e')), |
||||||
], |
], |
||||||
options={ |
options={ |
||||||
'verbose_name': '\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', |
'verbose_name': '\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', |
||||||
'verbose_name_plural': '\u0418\u0441\u0442\u043e\u0440\u0438\u0438 \u043e\u043f\u043b\u0430\u0442\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0441\u0447\u0435\u0442\u043e\u0432', |
'verbose_name_plural': '\u0418\u0441\u0442\u043e\u0440\u0438\u0438 \u043e\u043f\u043b\u0430\u0442\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0441\u0447\u0435\u0442\u043e\u0432', |
||||||
}, |
}, |
||||||
), |
), |
||||||
migrations.CreateModel( |
migrations.CreateModel( |
||||||
name='SelfBillRequest', |
name='SelfBillRequest', |
||||||
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')), |
||||||
('name', models.CharField(max_length=255, verbose_name='\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u043b\u0443\u0433\u0438')), |
('name', models.CharField(max_length=255, verbose_name='\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u043b\u0443\u0433\u0438')), |
||||||
('sum', models.IntegerField(verbose_name='\u0421\u0443\u043c\u043c\u0430')), |
('sum', models.IntegerField(verbose_name='\u0421\u0443\u043c\u043c\u0430')), |
||||||
('key', models.CharField(blank=True, max_length=255, null=True, unique=True, verbose_name='\u041a\u043b\u044e\u0447')), |
('key', models.CharField(blank=True, max_length=255, null=True, unique=True, verbose_name='\u041a\u043b\u044e\u0447')), |
||||||
('url', models.URLField(blank=True, verbose_name='URL')), |
('url', models.URLField(blank=True, verbose_name='URL')), |
||||||
], |
], |
||||||
options={ |
options={ |
||||||
'verbose_name': '\u0428\u0430\u0431\u043b\u043e\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', |
'verbose_name': '\u0428\u0430\u0431\u043b\u043e\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', |
||||||
'verbose_name_plural': '\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', |
'verbose_name_plural': '\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', |
||||||
}, |
}, |
||||||
), |
), |
||||||
migrations.CreateModel( |
migrations.CreateModel( |
||||||
name='ServiceRequest', |
name='ServiceRequest', |
||||||
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')), |
||||||
('status', models.CharField(choices=[(b'S', '\u041d\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d'), (b'W', '\u0412 \u0440\u0430\u0431\u043e\u0442\u0435'), (b'F', '\u041f\u0440\u043e\u0434\u0430\u043d'), (b'B', '\u041d\u0435 \u043f\u0440\u043e\u0434\u0430\u043b')], default=b'S', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')), |
('status', models.CharField(choices=[(b'S', '\u041d\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d'), (b'W', '\u0412 \u0440\u0430\u0431\u043e\u0442\u0435'), (b'F', '\u041f\u0440\u043e\u0434\u0430\u043d'), (b'B', '\u041d\u0435 \u043f\u0440\u043e\u0434\u0430\u043b')], default=b'S', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')), |
||||||
('cancel_description', models.TextField(blank=True, default=b'', verbose_name='\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0442\u043a\u0430\u0437\u0430')), |
('cancel_description', models.TextField(blank=True, default=b'', verbose_name='\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0442\u043a\u0430\u0437\u0430')), |
||||||
('charge', models.TextField(blank=True, default=b'', verbose_name='\u041f\u043e\u0440\u0443\u0447\u0435\u043d\u0438\u0435')), |
('charge', models.TextField(blank=True, default=b'', verbose_name='\u041f\u043e\u0440\u0443\u0447\u0435\u043d\u0438\u0435')), |
||||||
('date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u0430\u0437\u0430')), |
('date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u0430\u0437\u0430')), |
||||||
('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0431\u0430\u0431\u043e\u0442\u043a\u0438')), |
('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0431\u0430\u0431\u043e\u0442\u043a\u0438')), |
||||||
('send', models.BooleanField(default=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e')), |
('send', models.BooleanField(default=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e')), |
||||||
('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')), |
||||||
('manager', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='manager_user', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u043e\u0434\u0430\u0432\u0435\u0446')), |
('manager', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='manager_user', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u043e\u0434\u0430\u0432\u0435\u0446')), |
||||||
('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student_user', to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), |
('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student_user', to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), |
||||||
], |
], |
||||||
options={ |
options={ |
||||||
'verbose_name': '\u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043a\u0443\u043f\u043a\u0443', |
'verbose_name': '\u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043a\u0443\u043f\u043a\u0443', |
||||||
'verbose_name_plural': '\u0417\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043f\u0440\u043e\u043a\u0443\u043f\u043a\u0438', |
'verbose_name_plural': '\u0417\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043f\u0440\u043e\u043a\u0443\u043f\u043a\u0438', |
||||||
}, |
}, |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='selfbillhistory', |
model_name='selfbillhistory', |
||||||
name='request', |
name='request', |
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.SelfBillRequest', verbose_name='\u0424\u043e\u0440\u043c\u0430 \u0441\u0447\u0435\u0442\u0430'), |
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.SelfBillRequest', verbose_name='\u0424\u043e\u0440\u043c\u0430 \u0441\u0447\u0435\u0442\u0430'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='service', |
name='service', |
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.Price', verbose_name='\u041e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0443\u0441\u043b\u0443\u0433\u0430'), |
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.Price', verbose_name='\u041e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0443\u0441\u043b\u0443\u0433\u0430'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='user', |
name='user', |
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bill_user', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a'), |
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bill_user', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,20 +1,20 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.2 on 2016-04-07 17:41 |
# Generated by Django 1.9.2 on 2016-04-07 17:41 |
||||||
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 = [ |
||||||
('finance', '0001_initial'), |
('finance', '0001_initial'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='description', |
name='description', |
||||||
field=models.TextField(blank=True, default=b'', help_text='\u041f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438', verbose_name='\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0437\u0430\u043c\u0435\u0442\u043a\u0430'), |
field=models.TextField(blank=True, default=b'', help_text='\u041f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438', verbose_name='\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0437\u0430\u043c\u0435\u0442\u043a\u0430'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,20 +1,20 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-14 16:52 |
# Generated by Django 1.9.5 on 2016-04-14 16:52 |
||||||
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 = [ |
||||||
('finance', '0002_bill_description'), |
('finance', '0002_bill_description'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='selfbillrequest', |
model_name='selfbillrequest', |
||||||
name='company', |
name='company', |
||||||
field=models.CharField(choices=[(b'lms', b'http://lms.ru/'), (b'skillbox', b'http://skill-box.ru/')], default=b'lms', max_length=255, verbose_name='\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f'), |
field=models.CharField(choices=[(b'lms', b'http://lms.ru/'), (b'skillbox', b'http://skill-box.ru/')], default=b'lms', max_length=255, verbose_name='\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,30 +1,30 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-14 17:00 |
# Generated by Django 1.9.5 on 2016-04-14 17:00 |
||||||
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 = [ |
||||||
('finance', '0003_selfbillrequest_company'), |
('finance', '0003_selfbillrequest_company'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='selfbillhistory', |
model_name='selfbillhistory', |
||||||
name='day_sent', |
name='day_sent', |
||||||
field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0434\u043d\u0435\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u044f'), |
field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0434\u043d\u0435\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u044f'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='selfbillhistory', |
model_name='selfbillhistory', |
||||||
name='month_sent', |
name='month_sent', |
||||||
field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043c\u0435\u0441\u044f\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u044f'), |
field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043c\u0435\u0441\u044f\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u044f'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='selfbillhistory', |
model_name='selfbillhistory', |
||||||
name='week_sent', |
name='week_sent', |
||||||
field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u044f'), |
field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u044f'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,28 +1,28 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-14 19:27 |
# Generated by Django 1.9.5 on 2016-04-14 19: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 = [ |
||||||
('finance', '0004_auto_20160414_1700'), |
('finance', '0004_auto_20160414_1700'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.CreateModel( |
migrations.CreateModel( |
||||||
name='SelfBillDesign', |
name='SelfBillDesign', |
||||||
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')), |
||||||
('name', models.CharField(max_length=255, verbose_name='\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438')), |
('name', models.CharField(max_length=255, verbose_name='\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438')), |
||||||
('logo', models.ImageField(upload_to=b'self', verbose_name='\u041b\u043e\u0433\u043e\u0442\u0438\u043f')), |
('logo', models.ImageField(upload_to=b'self', verbose_name='\u041b\u043e\u0433\u043e\u0442\u0438\u043f')), |
||||||
('background', models.CharField(max_length=255, verbose_name='\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430')), |
('background', models.CharField(max_length=255, verbose_name='\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430')), |
||||||
], |
], |
||||||
options={ |
options={ |
||||||
'verbose_name': '\u0414\u0438\u0437\u0430\u0439\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', |
'verbose_name': '\u0414\u0438\u0437\u0430\u0439\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', |
||||||
'verbose_name_plural': '\u0414\u0438\u0437\u0430\u0439\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', |
'verbose_name_plural': '\u0414\u0438\u0437\u0430\u0439\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', |
||||||
}, |
}, |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,25 +1,25 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-14 19:30 |
# Generated by Django 1.9.5 on 2016-04-14 19:30 |
||||||
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 = [ |
||||||
('finance', '0005_selfbilldesign'), |
('finance', '0005_selfbilldesign'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='selfbillrequest', |
model_name='selfbillrequest', |
||||||
name='company', |
name='company', |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='selfbillrequest', |
model_name='selfbillrequest', |
||||||
name='design', |
name='design', |
||||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='finance.SelfBillDesign', verbose_name='\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435'), |
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='finance.SelfBillDesign', verbose_name='\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,25 +1,25 @@ |
|||||||
# -*- 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 |
||||||
|
|
||||||
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 = [ |
||||||
('finance', '0006_auto_20160414_1930'), |
('finance', '0006_auto_20160414_1930'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AlterModelOptions( |
migrations.AlterModelOptions( |
||||||
name='selfbilldesign', |
name='selfbilldesign', |
||||||
options={'verbose_name': '\u0411\u0435\u043d\u0435\u0444\u0438\u0446\u0438\u0430\u0440 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', 'verbose_name_plural': '\u0411\u0435\u043d\u0435\u0444\u0438\u0446\u0438\u0430\u0440\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430'}, |
options={'verbose_name': '\u0411\u0435\u043d\u0435\u0444\u0438\u0446\u0438\u0430\u0440 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', 'verbose_name_plural': '\u0411\u0435\u043d\u0435\u0444\u0438\u0446\u0438\u0430\u0440\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430'}, |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='selfbillrequest', |
model_name='selfbillrequest', |
||||||
name='design', |
name='design', |
||||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='finance.SelfBillDesign', verbose_name='\u0411\u0435\u043d\u0435\u0444\u0438\u0446\u0438\u0430\u0440'), |
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='finance.SelfBillDesign', verbose_name='\u0411\u0435\u043d\u0435\u0444\u0438\u0446\u0438\u0430\u0440'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,22 +1,22 @@ |
|||||||
# -*- 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 |
||||||
|
|
||||||
from django.conf import settings |
from django.conf import settings |
||||||
from django.db import migrations, models |
from django.db import migrations, models |
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration): |
class Migration(migrations.Migration): |
||||||
|
|
||||||
dependencies = [ |
dependencies = [ |
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||||
('finance', '0007_auto_20160414_1941'), |
('finance', '0007_auto_20160414_1941'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='selfbilldesign', |
model_name='selfbilldesign', |
||||||
name='users', |
name='users', |
||||||
field=models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e \u043f\u043b\u0430\u0442\u0435\u0436\u0430\u0445'), |
field=models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e \u043f\u043b\u0430\u0442\u0435\u0436\u0430\u0445'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,20 +1,20 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-14 20:30 |
# Generated by Django 1.9.5 on 2016-04-14 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 = [ |
||||||
('finance', '0008_selfbilldesign_users'), |
('finance', '0008_selfbilldesign_users'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='selfbillhistory', |
model_name='selfbillhistory', |
||||||
name='new_sent', |
name='new_sent', |
||||||
field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0447\u0435\u0442\u0430'), |
field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0447\u0435\u0442\u0430'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,20 +1,20 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-04-28 14:15 |
# Generated by Django 1.9.5 on 2016-04-28 14:15 |
||||||
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 = [ |
||||||
('finance', '0009_selfbillhistory_new_sent'), |
('finance', '0009_selfbillhistory_new_sent'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='selfbilldesign', |
model_name='selfbilldesign', |
||||||
name='pay_id', |
name='pay_id', |
||||||
field=models.IntegerField(default=0, max_length=255, verbose_name='\u041a\u043b\u044e\u0447\u044c \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438'), |
field=models.IntegerField(default=0, max_length=255, verbose_name='\u041a\u043b\u044e\u0447\u044c \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,26 +1,26 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-05-05 17:48 |
# Generated by Django 1.9.5 on 2016-05-05 17:48 |
||||||
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', '0024_auto_20160505_1748'), |
('courses', '0024_auto_20160505_1748'), |
||||||
('finance', '0010_selfbilldesign_pay_id'), |
('finance', '0010_selfbilldesign_pay_id'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='included', |
name='included', |
||||||
field=models.ManyToManyField(null=True, to='courses.CourseMap', verbose_name='\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u044b'), |
field=models.ManyToManyField(null=True, to='courses.CourseMap', verbose_name='\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u044b'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='selfbilldesign', |
model_name='selfbilldesign', |
||||||
name='pay_id', |
name='pay_id', |
||||||
field=models.IntegerField(blank=True, default=0, help_text='ID \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 - \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f "1501".\u0415\u0441\u043b\u0438 \u0442\u0430\u043a \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e, \u0442\u043e \u044d\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438'), |
field=models.IntegerField(blank=True, default=0, help_text='ID \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 - \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f "1501".\u0415\u0441\u043b\u0438 \u0442\u0430\u043a \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e, \u0442\u043e \u044d\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,25 +1,25 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-05-05 20:09 |
# Generated by Django 1.9.5 on 2016-05-05 20:09 |
||||||
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 = [ |
||||||
('finance', '0011_auto_20160505_1748'), |
('finance', '0011_auto_20160505_1748'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='by_time', |
name='by_time', |
||||||
field=models.IntegerField(blank=True, default=0, help_text='\u041f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442', verbose_name='\u0414\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), |
field=models.IntegerField(blank=True, default=0, help_text='\u041f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442', verbose_name='\u0414\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='included', |
name='included', |
||||||
field=models.ManyToManyField(blank=True, help_text='\u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u0430', null=True, to='courses.CourseMap', verbose_name='\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u044b'), |
field=models.ManyToManyField(blank=True, help_text='\u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u0430', null=True, to='courses.CourseMap', verbose_name='\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u044b'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,20 +1,20 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-05-05 20:35 |
# Generated by Django 1.9.5 on 2016-05-05 20:35 |
||||||
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 = [ |
||||||
('finance', '0012_auto_20160505_2009'), |
('finance', '0012_auto_20160505_2009'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='by_time', |
name='by_time', |
||||||
field=models.IntegerField(blank=True, default=0, help_text='\u041f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442', null=True, verbose_name='\u0414\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), |
field=models.IntegerField(blank=True, default=0, help_text='\u041f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442', null=True, verbose_name='\u0414\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,20 +1,20 @@ |
|||||||
# -*- 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 |
||||||
|
|
||||||
from django.db import migrations, models |
from django.db import migrations, models |
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration): |
class Migration(migrations.Migration): |
||||||
|
|
||||||
dependencies = [ |
dependencies = [ |
||||||
('finance', '0013_auto_20160505_2035'), |
('finance', '0013_auto_20160505_2035'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='by_time', |
name='by_time', |
||||||
field=models.IntegerField(blank=True, default=0, help_text='\u041f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439.', null=True, verbose_name='\u0414\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), |
field=models.IntegerField(blank=True, default=0, help_text='\u041f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439.', null=True, verbose_name='\u0414\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,20 +1,20 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.5 on 2016-05-09 17:10 |
# Generated by Django 1.9.5 on 2016-05-09 17:10 |
||||||
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 = [ |
||||||
('finance', '0014_auto_20160506_1303'), |
('finance', '0014_auto_20160506_1303'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='key', |
name='key', |
||||||
field=models.CharField(blank=True, editable=False, max_length=255, null=True, verbose_name='\u041a\u043b\u044e\u0447\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), |
field=models.CharField(blank=True, editable=False, max_length=255, null=True, verbose_name='\u041a\u043b\u044e\u0447\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,25 +1,25 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.2 on 2016-05-24 12:55 |
# Generated by Django 1.9.2 on 2016-05-24 12:55 |
||||||
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 = [ |
||||||
('finance', '0015_price_key'), |
('finance', '0015_price_key'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='flex', |
name='flex', |
||||||
field=models.BooleanField(default=False, verbose_name='\u041e\u043f\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f'), |
field=models.BooleanField(default=False, verbose_name='\u041e\u043f\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='key', |
name='key', |
||||||
field=models.CharField(blank=True, editable=False, max_length=255, null=True, verbose_name='\u041a\u043b\u044e\u0447 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), |
field=models.CharField(blank=True, editable=False, max_length=255, null=True, verbose_name='\u041a\u043b\u044e\u0447 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,19 +1,19 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.2 on 2016-05-24 12:58 |
# Generated by Django 1.9.2 on 2016-05-24 12:58 |
||||||
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 = [ |
||||||
('finance', '0016_auto_20160524_1255'), |
('finance', '0016_auto_20160524_1255'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='flex', |
name='flex', |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,117 +1,117 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.2 on 2016-05-31 12:56 |
# Generated by Django 1.9.2 on 2016-05-31 12:56 |
||||||
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 = [ |
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||||
('finance', '0017_remove_price_flex'), |
('finance', '0017_remove_price_flex'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.CreateModel( |
migrations.CreateModel( |
||||||
name='Installment', |
name='Installment', |
||||||
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', models.IntegerField(verbose_name='\u041e\u0431\u0449\u0430\u044f \u0446\u0435\u043d\u0430')), |
('price', models.IntegerField(verbose_name='\u041e\u0431\u0449\u0430\u044f \u0446\u0435\u043d\u0430')), |
||||||
('first_price', models.IntegerField(default=0, verbose_name='\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u043b\u0430\u0442\u0435\u0436')), |
('first_price', models.IntegerField(default=0, verbose_name='\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u043b\u0430\u0442\u0435\u0436')), |
||||||
('period', models.IntegerField(default=5, verbose_name='\u041c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443')), |
('period', models.IntegerField(default=5, verbose_name='\u041c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443')), |
||||||
('date', models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f')), |
('date', models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f')), |
||||||
('f_date', models.DateField(blank=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f')), |
('f_date', models.DateField(blank=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f')), |
||||||
('rest', models.IntegerField(default=0, verbose_name='\u041e\u0441\u0442\u0430\u0442\u043e\u043a \u043f\u043e \u0437\u0430\u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438')), |
('rest', models.IntegerField(default=0, verbose_name='\u041e\u0441\u0442\u0430\u0442\u043e\u043a \u043f\u043e \u0437\u0430\u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438')), |
||||||
('wait', models.IntegerField(default=0, help_text='\u0427\u0435\u0440\u0435\u0437 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u043a\u0438', verbose_name='\u0414\u043d\u0435\u0439 \u0432 \u0437\u0430\u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438')), |
('wait', models.IntegerField(default=0, help_text='\u0427\u0435\u0440\u0435\u0437 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u043a\u0438', verbose_name='\u0414\u043d\u0435\u0439 \u0432 \u0437\u0430\u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438')), |
||||||
('expired', models.BooleanField(default=False, verbose_name='\u041f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043e')), |
('expired', models.BooleanField(default=False, verbose_name='\u041f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043e')), |
||||||
], |
], |
||||||
options={ |
options={ |
||||||
'verbose_name': '\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0430', |
'verbose_name': '\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0430', |
||||||
'verbose_name_plural': '\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0438', |
'verbose_name_plural': '\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0438', |
||||||
}, |
}, |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='selfbilldesign', |
model_name='selfbilldesign', |
||||||
name='users', |
name='users', |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='selfbillhistory', |
model_name='selfbillhistory', |
||||||
name='request', |
name='request', |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='selfbillrequest', |
model_name='selfbillrequest', |
||||||
name='design', |
name='design', |
||||||
), |
), |
||||||
migrations.AlterModelOptions( |
migrations.AlterModelOptions( |
||||||
name='price', |
name='price', |
||||||
options={'ordering': ['-id'], 'verbose_name': '\u0423\u0441\u043b\u0443\u0433\u0430', 'verbose_name_plural': '\u0423\u0441\u043b\u0443\u0433\u0438'}, |
options={'ordering': ['-id'], 'verbose_name': '\u0423\u0441\u043b\u0443\u0433\u0430', 'verbose_name_plural': '\u0423\u0441\u043b\u0443\u0433\u0438'}, |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='_method', |
name='_method', |
||||||
field=models.CharField(choices=[(b'H', '\u0412 \u0420\u0443\u0447\u043d\u0443\u044e'), (b'S', 'SimplePay'), (b'A1', '\u0410\u043b\u044c\u0444\u0430\u0411\u0430\u043d\u043a'), (b'A2', '\u0410\u043b\u044c\u0431\u0430\u0411\u0430\u043d\u043a c \u043f\u0440\u0435\u0434\u043e\u043f\u043b\u0430\u0442\u043e\u0439')], default=b'H', max_length=2, verbose_name='\u0421\u043f\u043e\u0441\u043e\u0431 \u043e\u043f\u043b\u0430\u0442\u044b'), |
field=models.CharField(choices=[(b'H', '\u0412 \u0420\u0443\u0447\u043d\u0443\u044e'), (b'S', 'SimplePay'), (b'A1', '\u0410\u043b\u044c\u0444\u0430\u0411\u0430\u043d\u043a'), (b'A2', '\u0410\u043b\u044c\u0431\u0430\u0411\u0430\u043d\u043a c \u043f\u0440\u0435\u0434\u043e\u043f\u043b\u0430\u0442\u043e\u0439')], default=b'H', max_length=2, verbose_name='\u0421\u043f\u043e\u0441\u043e\u0431 \u043e\u043f\u043b\u0430\u0442\u044b'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='_type', |
name='_type', |
||||||
field=models.CharField(choices=[(b'I', '\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0430'), (b'F', '\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u043f\u043b\u0430\u0442\u0435\u0436'), (b'S', '\u0423\u0441\u043b\u0443\u0433\u0430')], default=b'S', max_length=1, verbose_name='\u0422\u0438\u043f \u043f\u043b\u0430\u0442\u0435\u0436\u0430'), |
field=models.CharField(choices=[(b'I', '\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0430'), (b'F', '\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u043f\u043b\u0430\u0442\u0435\u0436'), (b'S', '\u0423\u0441\u043b\u0443\u0433\u0430')], default=b'S', max_length=1, verbose_name='\u0422\u0438\u043f \u043f\u043b\u0430\u0442\u0435\u0436\u0430'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='gift', |
name='gift', |
||||||
field=models.BooleanField(default=False, verbose_name='\u041f\u043e\u0434\u0430\u0440\u043e\u043a'), |
field=models.BooleanField(default=False, verbose_name='\u041f\u043e\u0434\u0430\u0440\u043e\u043a'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='price', |
name='price', |
||||||
field=models.CharField(default=0, max_length=255, verbose_name='\u0421\u0443\u043c\u043c\u0430'), |
field=models.CharField(default=0, max_length=255, verbose_name='\u0421\u0443\u043c\u043c\u0430'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='freepay', |
name='freepay', |
||||||
field=models.BooleanField(default=False, editable=False, verbose_name='\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0441\u0447\u0435\u0442'), |
field=models.BooleanField(default=False, editable=False, verbose_name='\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0441\u0447\u0435\u0442'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='course', |
name='course', |
||||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441'), |
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441'), |
||||||
), |
), |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='title', |
name='title', |
||||||
field=models.CharField(help_text='\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c', max_length=255, verbose_name='\u0423\u0441\u043b\u0443\u0433\u0430'), |
field=models.CharField(help_text='\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c', max_length=255, verbose_name='\u0423\u0441\u043b\u0443\u0433\u0430'), |
||||||
), |
), |
||||||
migrations.DeleteModel( |
migrations.DeleteModel( |
||||||
name='SelfBillDesign', |
name='SelfBillDesign', |
||||||
), |
), |
||||||
migrations.DeleteModel( |
migrations.DeleteModel( |
||||||
name='SelfBillHistory', |
name='SelfBillHistory', |
||||||
), |
), |
||||||
migrations.DeleteModel( |
migrations.DeleteModel( |
||||||
name='SelfBillRequest', |
name='SelfBillRequest', |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='installment', |
model_name='installment', |
||||||
name='initiative', |
name='initiative', |
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.Price', verbose_name='\u0418\u043d\u0438\u0430\u0446\u0438\u0430\u0442\u0438\u0432\u0430'), |
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.Price', verbose_name='\u0418\u043d\u0438\u0430\u0446\u0438\u0430\u0442\u0438\u0432\u0430'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='installment', |
model_name='installment', |
||||||
name='payments', |
name='payments', |
||||||
field=models.ManyToManyField(blank=True, null=True, related_name='bill_point', to='finance.Bill', verbose_name='\u041f\u043b\u0430\u0442\u0435\u0436\u0438'), |
field=models.ManyToManyField(blank=True, null=True, related_name='bill_point', to='finance.Bill', verbose_name='\u041f\u043b\u0430\u0442\u0435\u0436\u0438'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='installment', |
model_name='installment', |
||||||
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'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='installment', |
name='installment', |
||||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='installment_point', to='finance.Installment', verbose_name='\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0430'), |
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='installment_point', to='finance.Installment', verbose_name='\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0430'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,20 +1,20 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.2 on 2016-05-31 13:00 |
# Generated by Django 1.9.2 on 2016-05-31 13:00 |
||||||
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 = [ |
||||||
('finance', '0018_auto_20160531_1256'), |
('finance', '0018_auto_20160531_1256'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='url', |
name='url', |
||||||
field=models.URLField(blank=True, null=True, verbose_name='\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443'), |
field=models.URLField(blank=True, null=True, verbose_name='\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,20 +1,20 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.2 on 2016-05-31 13:03 |
# Generated by Django 1.9.2 on 2016-05-31 13:03 |
||||||
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 = [ |
||||||
('finance', '0019_price_url'), |
('finance', '0019_price_url'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.AlterField( |
migrations.AlterField( |
||||||
model_name='price', |
model_name='price', |
||||||
name='url', |
name='url', |
||||||
field=models.URLField(blank=True, editable=False, null=True, verbose_name='\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443'), |
field=models.URLField(blank=True, editable=False, null=True, verbose_name='\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,34 +1,34 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.2 on 2016-06-01 13:09 |
# Generated by Django 1.9.2 on 2016-06-01 13:09 |
||||||
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 = [ |
||||||
('finance', '0020_auto_20160531_1303'), |
('finance', '0020_auto_20160531_1303'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='key', |
name='key', |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='pay_key', |
name='pay_key', |
||||||
field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u043f\u043b\u0430\u0442\u0435\u0436\u0430'), |
field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u043f\u043b\u0430\u0442\u0435\u0436\u0430'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='result_key', |
name='result_key', |
||||||
field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430'), |
field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430'), |
||||||
), |
), |
||||||
migrations.AddField( |
migrations.AddField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='success_key', |
name='success_key', |
||||||
field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f'), |
field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f'), |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
@ -1,28 +1,28 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
# Generated by Django 1.9.2 on 2016-06-01 13:20 |
# Generated by Django 1.9.2 on 2016-06-01 13:20 |
||||||
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 = [ |
||||||
('finance', '0021_auto_20160601_1309'), |
('finance', '0021_auto_20160601_1309'), |
||||||
] |
] |
||||||
|
|
||||||
operations = [ |
operations = [ |
||||||
migrations.RenameField( |
migrations.RenameField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
old_name='pay_key', |
old_name='pay_key', |
||||||
new_name='key', |
new_name='key', |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='result_key', |
name='result_key', |
||||||
), |
), |
||||||
migrations.RemoveField( |
migrations.RemoveField( |
||||||
model_name='bill', |
model_name='bill', |
||||||
name='success_key', |
name='success_key', |
||||||
), |
), |
||||||
] |
] |
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue