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_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/")