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.
93 lines
3.3 KiB
93 lines
3.3 KiB
from django.shortcuts import render_to_response, redirect
|
|
import time, os, csv
|
|
from datetime import date
|
|
|
|
from lms.settings import MEDIA_ROOT
|
|
|
|
from courses.models import Course, CourseTheme
|
|
from journals.models import CourseThemeJ
|
|
|
|
|
|
def index_view(request):
|
|
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):
|
|
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)
|
|
return redirect("/analytics/?start=" + start + "&end=" + end)
|
|
|
|
except FileNotFoundError:
|
|
os.makedirs(MEDIA_ROOT + '/analytics')
|
|
return redirect("/analytics/new/?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
|
|
|