def students(request): try: studentGroup = Group.objects.get(name='student') students = studentGroup.user_set.all() stats = [] start = None end = None page = None pagesize = 10 if request.method == 'GET': form = SearchTest(request.GET) if form.is_valid(): names = form.cleaned_data['name'].split() if len(names) > 0: students = students.filter(Q(first_name__icontains = names[0]) | Q(last_name__icontains = names[0])) if len(names) > 1: students = students.filter(Q(first_name__icontains = names[1]) | Q(last_name__icontains = names[1])) start = form.cleaned_data['start'] end = form.cleaned_data['end'] page = form.cleaned_data['page'] try: pagesize = int(form.cleaned_data['pagesize']) except ValueError: if form.cleaned_data['pagesize'] ==u'': pagesize = 10 else: pagesize = 100000 page = 1 else: form = SearchTest() ts = TestSession.objects.filter(student__in=students, answer__isnull=False).distinct() if start: ts = ts.filter(testDate__gte = start) if end: ts = ts.filter(testDate__lte = end) if ts.count() > 0: stats = list(ts.order_by('student','testDate')) paginator = Paginator(stats, pagesize) if page is None: page = "" try: stats = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. stats = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. stats = paginator.page(paginator.num_pages) params = get_params(request, {'stats' : stats, 'form' : form}) return render_to_response("students.html", params, context_instance=RequestContext(request)) except ValueError: return redirect("/chapter/")
def tests(request): try: stats = {} finalTests = TestSession.objects.filter(final = True).exclude(total = None) if request.method == 'GET': form = SearchTest(request.GET) if form.is_valid(): names = form.cleaned_data['name'].split() if len(names) > 0: finalTests = finalTests.filter(Q(student__first_name__icontains = names[0]) | Q(student__last_name__icontains = names[0])) if len(names) > 1: finalTests = finalTests.filter(Q(student__first_name__icontains = names[1]) | Q(student__last_name__icontains = names[1])) start = form.cleaned_data['start'] end = form.cleaned_data['end'] if start: finalTests = finalTests.filter(testDate__gte = start) if end: finalTests = finalTests.filter(testDate__lte = end) if finalTests.count() > 0: finalTests = finalTests.order_by('student', 'testDate') else: form = SearchTest() chapters = Chapter.objects.filter(active = True) if finalTests.count() > 0: for chapter in chapters: try: forChapter = stats[chapter] except KeyError: forChapter = [] stats[chapter] = forChapter for ft in finalTests: if chapter_id_for_test_session(ft) == chapter.id: testAggregate = get_test_session_data(ft) taskResults = [] for ta in testAggregate: taskResults.append(len(ta.actual) == 0) forChapter.append([ft, taskResults]) params = get_params(request, {'stats' : stats, 'form' : form}) return render_to_response("tests.html", params, context_instance=RequestContext(request)) except ValueError: return redirect("/chapter/")