Merge branch 'feature-statystics' into 'develop'

Feature statystics

See merge request !49
remotes/origin/pm_task_31703
Andrey 9 years ago
commit 8fe3db08d3
  1. 7
      analytics/urls.py
  2. 109
      analytics/views.py
  3. 2
      lms/settings.py
  4. 1
      lms/urls.py
  5. 7
      templates/index_menu.html

@ -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

@ -180,5 +180,5 @@ REDACTOR_OPTIONS = {'lang': 'ru'}
REDACTOR_UPLOAD = 'uploads/'
RAVEN_CONFIG = {
'dsn': 'http://56855e5263f04dbda3e97fb9c950cb45:02ceda8b67bc45fb800754958bca7883@s.codemy.ru/2'
'dsn': 'http://caaea487274f4e23a9107862484c79f3:3d463ad4717942508536f7a659921950@sentry.skillbox.ru/3'
}

@ -30,6 +30,7 @@ urlpatterns = [
url(r'^forum/', include('management.forum_urls')),
url(r'^service/', include('service.urls')),
url(r'^redactor/', include('redactor.urls')),
url(r'^analytics/', include('analytics.urls')),
#url(r'^jet/', include('jet.urls', 'jet')),
#url(r'^jet/dashboard/', include('jet.dashboard.urls', 'jet-dashboard')),
url(r'^admin/', include(admin.site.urls)),

@ -100,6 +100,13 @@
<span>Отчеты</span>
</a>
</li>
<li style="z-index: 1;">
<a href="/analytics/">
<i class="glyphicon glyphicon-list-alt"></i>
<span>Аналитика</span>
</a>
</li>
{% endif %}
<!--
<div style="text-align: center; width:200px;">

Loading…
Cancel
Save