Feature statystics See merge request !49remotes/origin/pm_task_31703
commit
8fe3db08d3
5 changed files with 125 additions and 1 deletions
@ -0,0 +1,7 @@ |
|||||||
|
from django.conf.urls import url |
||||||
|
from .views import index_view, new_view |
||||||
|
|
||||||
|
urlpatterns = [ |
||||||
|
url(r'^$', index_view), |
||||||
|
url(r'^new/$', new_view), |
||||||
|
] |
||||||
@ -0,0 +1,109 @@ |
|||||||
|
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 |
||||||
Loading…
Reference in new issue