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_summary(ft)[0] 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/")