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.
 
 
 
 
 
 

109 lines
4.0 KiB

from django.shortcuts import render_to_response, redirect
import time, os, csv
from datetime import date
from django.http import HttpResponseForbidden
from lms.settings import MEDIA_ROOT
from django.contrib.auth import get_user_model
from courses.models import Course, CourseTheme
from journals.models import CourseThemeJ
def index_view(request):
if not request.user.is_authenticated():
return HttpResponseForbidden()
if not (
request.user.in_role == "M" or request.user.in_role == "S" or request.user.in_role == "A" or request.user.is_admin):
return HttpResponseForbidden()
start = request.GET.get('start', '')
end = request.GET.get('end', '')
path = MEDIA_ROOT + '/analytics/s' + start + 'e' + end + 'progress.csv'
try:
with open(path, newline='') as file:
reader = csv.reader(file, delimiter=',', quotechar='|')
max = 0
res = []
for row in reader:
max = max if max > len(row) else len(row)
res1 = []
for i in row:
k = i.split("$-$")
k = {'value': k[0], 'background': 'none'} if len(i.split("$-$")) == 1 else {'value': k[0],
'background': k[1]}
res1.append(k)
res.append(res1)
for i in res:
for j in range(max - len(i)):
i.append({'value': 0, 'background': 'none'})
first = ['Курсы']
for i in range(max - 1):
first.append("Тема " + str(i + 1))
except FileNotFoundError:
return redirect("/analytics/new/?start=" + start + "&end=" + end)
date_create = time.ctime(os.stat(path).st_atime)
return render_to_response('analytics.html',
{'body': res, 'header': first, 'date_create': date_create, 'start': start, 'end': end})
def new_view(request):
if not request.user.is_authenticated():
return HttpResponseForbidden()
if not (
request.user.in_role == "M" or request.user.in_role == "S" or request.user.in_role == "A" or request.user.is_admin):
return HttpResponseForbidden()
start = request.GET.get('start', '')
end = request.GET.get('end', '')
path = MEDIA_ROOT + '/analytics/s' + start + 'e' + end + 'progress.csv'
start_date = None
end_date = None
try:
start_date = date(*[int(i) for i in start.split('-')])
end_date = date(*[int(i) for i in end.split('-')])
except ValueError:
pass
if not check_date_validate(start_date, end_date):
return redirect("/analytics/")
try:
with open(path, 'w', newline='') as csvfile:
for course in Course.objects.order_by('sort'):
list = [course.title]
for i in CourseTheme.objects.filter(course=course):
kwargs = {
'material': i,
'success': True,
}
if end_date:
kwargs['student__last_time__lte'] = end_date
if start_date:
kwargs['student__last_time__gte'] = start_date
list.append(str(len(CourseThemeJ.objects.filter(**kwargs))) + (
"$-$yellow" if i._type == 'Ex' or i._type == 'M' else ""))
writercsv = csv.writer(csvfile, delimiter=',', quotechar='|')
writercsv.writerow(list)
except FileNotFoundError:
os.mkdir(MEDIA_ROOT + '/analytics')
redirect("/analytics/new/?start=" + start + "&end=" + end)
return redirect("/analytics/?start=" + start + "&end=" + end)
def check_date_validate(start=None, end=None):
if start:
if end:
return (start < end) and (end < date.today())
return start < date.today()
return end < date.today() if end else True