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