# 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