Example #1
0
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/")
Example #2
0
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/")