You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

162 lines
9.6 KiB

# coding=utf-8
import datetime
from django.http import Http404
from lms.decors import response_decor
from lms.tools import user_fabric, out_date_format
from courses.models import Course, Lesson, MaterialDirection
from journals.models import TeacherJ, HomeworkTry, check_journal
from access.models import User
from finance.models import Bill
from courses.templates import comment_fabric
from library.models import Article
from management.reports import get_now_success_hw, get_second_success_hw
from django.http import HttpResponse
def sortByTimeStamp(inputStr):
return inputStr['sort']
@response_decor(template='test.html')
def test(request):
return {}
@response_decor(template='access_error.html', without_auth=True)
def access_error(request):
# Страница заблокированного доступа
return {}
@response_decor(template='index.html', without_auth=True)
def index(request):
if request.user.is_authenticated() and request.user.in_role in ['M', 'S']:
return {'redirect': '/access/profile'}
journals = []
for course in Course.objects.all() if request.user.is_authenticated() and request.user.is_admin else Course.objects.filter(public=True):
do = True
if course.hidden:
if not request.user.is_authenticated():
do = False
else:
if not request.user.is_admin:
try:
Bill.objects.get(service__course=course, user=request.user, status='F')
except Bill.DoesNotExist:
do = False
if do:
journal, created = TeacherJ.objects.get_or_create(course=course, student=user_fabric(request.user))
if not journal.full and Bill.objects.filter(user=user_fabric(request.user), service__course=course, status='F').exists():
if not journal.start_date:
journal.start_date = datetime.datetime.now()
journal.save()
check_journal(journal)
journals.append(journal.get_head_face())
return {'courses': journals,
'directions': ({'count': i.count(), 'title': i.title, 'color': i.color} for i in MaterialDirection.objects.all() if i.count() != 0),
'bought': Bill.objects.filter(user=request.user, status='F').exists() if request.user.is_authenticated() else False}
@response_decor(template='test.html', without_auth=True)
def test(request):
return {}
@response_decor(template='all_comments.html', without_auth=False)
def all_comments(request):
if request.user.in_role not in ['U']:
tmp = {}
tmp2 = {}
sor = []
sor2 = []
result = []
result2 = []
course_filter = {'public': True}
if request.user.in_role == 'T':
course_filter['teachers'] = request.user
for course in Course.objects.filter(**course_filter):
for lesson in Lesson.objects.filter(course=course):
for c in lesson.comments.filter(closed=False).order_by('date'):
if not c.owner.is_admin:
tmp[c.id] = {'lesson': lesson, 'course': course, 'theme': lesson.theme, 'comment': comment_fabric(c, __type='L', __user=request.user)}
sor.append(c.id)
sor.sort(reverse=True)
for i in sor:
result.append(tmp[i])
for article in Article.objects.filter(public=True):
for c in article.comments.filter(closed=False).order_by('date'):
if not c.owner.is_admin:
tmp2[c.id] = {'article': article, 'comment': comment_fabric(c, __type='L', __user=request.user)}
sor2.append(c.id)
sor2.sort(reverse=True)
for i in sor2:
result2.append(tmp2[i])
return {'lessons': result, 'article': result2, 'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw()}
raise Http404
@response_decor(template='500.html', without_auth=True)
def e500(request):
return {}
@response_decor(template='404.html', without_auth=True)
def e404(request):
return {}
@response_decor(template='reports.html', without_auth=False)
def reports(request):
if request.user.in_role not in ['U', 'T', 'M']:
c = {}
for course in Course.objects.filter(public=True):
s_date = datetime.datetime.now() - datetime.timedelta(days=7)
c[course.id] = {
'title': course.get_title(),
'students': len(set(HomeworkTry.objects.filter(date__gte=s_date, material__course=course).exclude(f_date=None).values_list('student__id', flat=True))),
'success': HomeworkTry.objects.filter(date__gte=s_date, material__course=course, success=True).exclude(f_date=None).count(),
'process': HomeworkTry.objects.filter(date__gte=s_date, material__course=course, f_date=None).count(),
'expired': HomeworkTry.objects.filter(date__gte=s_date, material__course=course, expired=True).exclude(f_date=None).count(),
'date': out_date_format(s_date, no_time=True)
}
return {'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw(), 'courses': c, 'users': {'all': User.objects.all().count(),
'no_active': {'int': User.objects.filter(is_active=False).exclude(reg_status='4').count(), 'proc': User.objects.filter(is_active=False).exclude(reg_status='4').count()/(User.objects.all().count()/100)},
'bought': {'all': {'int': User.objects.filter(customer=True).count(), 'proc': User.objects.filter(customer=True).count()/(User.objects.all().count()/100)},
'day': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=1)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=1)).count()/(User.objects.filter(customer=True).count()/100)},
'three': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=3)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=3)).count()/(User.objects.filter(customer=True).count()/100)},
'week': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=1)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=1)).count()/(User.objects.filter(customer=True).count()/100)},
'month': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=4)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=4)).count()/(User.objects.filter(customer=True).count()/100)}}}}
raise Http404
@response_decor(template='new_reports.html', without_auth=False)
def new_reports(request):
if request.user.in_role == 'T':
return {'redirect': '/all_comments/'}
courses = {}
for c in Course.objects.filter(public=True):
courses[c.id] = c.get_title()
return {'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw(), 'courses': courses, 'users': {'all': User.objects.all().count(),
'no_active': {'int': User.objects.filter(is_active=False).exclude(reg_status='4').count(), 'proc': User.objects.filter(is_active=False).exclude(reg_status='4').count()/(User.objects.all().count()/100)},
'bought': {'all': {'int': User.objects.filter(customer=True).count(), 'proc': User.objects.filter(customer=True).count()/(User.objects.all().count()/100)},
'day': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=1)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=1)).count()/(User.objects.filter(customer=True).count()/100)},
'three': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=3)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=3)).count()/(User.objects.filter(customer=True).count()/100)},
'week': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=1)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=1)).count()/(User.objects.filter(customer=True).count()/100)},
'month': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=4)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=4)).count()/(User.objects.filter(customer=True).count()/100)}}}}
@response_decor(template='contacts.html', without_auth=True)
def contacts(request):
return {}
def show_oferta(request):
with open('oferta.pdf', 'rb') as pdf:
response = HttpResponse(pdf.read(), content_type='application/pdf')
response['Content-Disposition'] = 'filename=oferta.pdf'
return response