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.
154 lines
9.3 KiB
154 lines
9.3 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
|
|
|
|
|
|
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 {}
|
|
|