Esempio n. 1
0
def create_scantron(request):
    user = request.user
    if not user.is_superuser:
        return HttpResponseRedirect(reverse(permission_denied))
    from glml.web.forms import ScantronForm
    from glml.utils import get_working_year

    working_year = get_working_year(request)
    current_year = Year.get_current_year()
    if working_year != current_year:
        request.session["working_year"] = current_year
        working_year = get_working_year(request)
        add_message(request, u"You may not create a Scantron for a past season.")
    if request.method == "POST":
        form = ScantronForm(working_year, request.POST)
        if form.is_valid():
            test_date = form.cleaned_data["test_date"]
            student_id = form.cleaned_data["student_id"]
            test = Test.objects.create(test_date=test_date, student_id=student_id, score=0)
            i = 1
            while i < len(request.POST) - 1:
                q = Question.objects.create(number=i, test=test, answer=request.POST[unicode(i)])
                i += 1
            test.rescore()
            return HttpResponseRedirect(reverse(home))
        else:
            rows = [[(j, request.POST[unicode(j)]) for j in range(i, i + 6)] for i in range(1, 24, 6)]
    else:
        form = ScantronForm(working_year)
        rows = [[(j, "") for j in range(i, i + 6)] for i in range(1, 24, 6)]
    return render_to_response(
        "web/create_scantron.html", {"form": form, "rows": rows, "choices": [""] + ANSWERS}, RequestContext(request)
    )
Esempio n. 2
0
def upload(request):
    user = request.user
    if not user.is_superuser:
        return HttpResponseRedirect(reverse(permission_denied))
    from glml.web.forms import UploadForm

    if request.method == "POST":
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            TestDate.import_test(form.cleaned_data)
            from glml.utils import date_string, email

            message = u"The results from the test on %s" % date_string(form.cleaned_data["date"])
            from django.conf import settings

            message += u" are now on the website (%s)." % settings.URL
            message += u"\n\n--\n%s\nGLML Administrator" % user.get_full_name()
            email(user, "GLML", message)
            message = u"The upload was completed successfully"
            message += u" and all coaches have been notified via email."
            add_message(request, message)
            return HttpResponseRedirect(reverse(home))
    else:
        form = UploadForm()
    from glml.utils import get_working_year

    working_year = get_working_year(request)
    if working_year == Year.get_current_year():
        test_dates = TestDate.objects.filter(year=working_year)
    else:
        test_dates = TestDate.objects.none()
    return render_to_response("web/upload.html", {"form": form, "test_dates": test_dates}, RequestContext(request))
Esempio n. 3
0
def home(request, year=None, month=None, day=None):
    from glml.utils import get_working_year

    working_year = get_working_year(request)
    if year and month and day:
        from datetime import datetime

        try:
            date = datetime(int(year), int(month), int(day))
        except ValueError:
            from django.http import Http404

            raise Http404
        test_date = get_object_or_404(TestDate, date=date)
        if test_date.year != working_year:
            return HttpResponseRedirect(reverse(home))
    else:
        test_date = None
    data = []
    for district in District.objects.filter(year__id=working_year.id).exclude(glml_id=ANSWER_STUDENT_ID[0]):
        data.append(
            {
                "district": district,
                "schools": district.get_top_schools(test_date),
                "students": district.get_top_students(test_date),
            }
        )
    return render_to_response(
        "web/home.html",
        {"test_date": test_date, "test_dates": working_year.testdate_set.all(), "data": data},
        RequestContext(request),
    )
Esempio n. 4
0
def year_context_processor(request):
    current_year = Year.get_current_year()
    working_year = get_working_year(request)
    year_selector_form = YearSelectorForm(initial={'selected_year':
                                                   working_year.id})
    context = {'year_selector_form': year_selector_form,
               'current_year': current_year,
               'working_year': working_year}
    return context
Esempio n. 5
0
def student_view(request, id=None):
    from glml.utils import get_school, get_working_year

    school = get_school(request)
    working_year = get_working_year(request)
    if not school:
        add_message(request, u"Please select a school first.")
        return HttpResponseRedirect(reverse(home))
    try:
        school_id = school.schoolid_set.get(district__year__id=working_year.id)
    except SchoolID.DoesNotExist:
        return HttpResponseRedirect(reverse(school_view))
    if id:
        student_id = get_object_or_404(StudentID, id=id)
        student = student_id.student
        if not student.coached_by(request.user):
            return HttpResponseRedirect(reverse(permission_denied))
        request.session["school"] = student_id.school_id.school
        request.session["working_year"] = student_id.school_id.district.year
        if student_id.school_id.district.year != Year.get_current_year():
            student_id = None
    else:
        if working_year != Year.get_current_year():
            add_message(request, u"You may not add a student to a past season.")
            return HttpResponseRedirect(reverse(school_view))
        student_id = True
        student = None
    from glml.web.forms import StudentForm

    if request.method == "POST":
        form = StudentForm(student_id, request.POST, instance=student)
        if form.is_valid():
            students = Student.objects.filter(
                first_name=form.cleaned_data["first_name"], last_name=form.cleaned_data["last_name"]
            )
            if not students:
                student = form.save()
            else:
                student = students[0]
            if student:
                if "grade" in form.cleaned_data:
                    grade = form.cleaned_data["grade"]
                    if not isinstance(student_id, StudentID):
                        student_id, created = StudentID.objects.get_or_create(
                            student=student, school_id=school_id, grade=grade
                        )
                    else:
                        student_id.grade = grade
                        student_id.save()
                return HttpResponseRedirect(reverse(school_view))
    else:
        form = StudentForm(student_id, instance=student)
    return render_to_response(
        "web/student.html", {"student_id": student_id, "student": student, "form": form}, RequestContext(request)
    )
Esempio n. 6
0
def delete_tests(request, id):
    if not request.user.is_superuser:
        return HttpResponseRedirect(reverse(permission_denied))
    test_date = get_object_or_404(TestDate, id=id)
    from glml.utils import get_working_year

    working_year = get_working_year(request)
    if test_date.year != Year.get_current_year():
        add_message(request, u"You may not delete tests from a past season.")
        return HttpResponseRedirect(reverse(upload))
    if request.method == "POST":
        if "yes" in request.POST:
            test_date.delete()
            add_message(request, u"All tests from %s have been successfully deleted." % test_date.date_string())
        return HttpResponseRedirect(reverse(upload))
    return render_to_response("web/delete_tests.html", {"test_date": test_date}, RequestContext(request))
Esempio n. 7
0
def school_view(request):
    from glml.utils import get_school, get_working_year

    school = get_school(request)
    working_year = get_working_year(request)
    if not school:
        add_message(request, u"Please select a school first.")
        return HttpResponseRedirect(reverse(home))
    try:
        school_id = school.schoolid_set.get(district__year__id=working_year.id)
    except SchoolID.DoesNotExist:
        school_id = None
    if allow(request):
        if school_id:
            student_ids = school_id.studentid_set.all()
        else:
            student_ids = None
        try:
            import_year = Year.objects.get(start=working_year.start - 1)
            import_school_id = school.schoolid_set.get(district__year__id=import_year.id)
        except (Year.DoesNotExist, SchoolID.DoesNotExist):
            can_import = False
        else:
            can_import = True
        if student_ids:
            test_dates = TestDate.objects.filter(year=working_year)
            students = []
            for student_id in student_ids:
                tests = []
                for test_date in test_dates:
                    if test_date.test_set.filter(student_id=student_id):
                        tests.append(test_date.test_set.get(student_id=student_id))
                    else:
                        tests.append(None)
                students.append({"student_id": student_id, "tests": tests})
        else:
            test_dates = None
            students = None
        return render_to_response(
            "web/school.html",
            {"school_id": school_id, "test_dates": test_dates, "students": students, "can_import": can_import},
            RequestContext(request),
        )
    return HttpResponseRedirect(reverse(permission_denied))
Esempio n. 8
0
def import_students(request):
    if not allow(request):
        return HttpResponseRedirect(reverse(permission_denied))
    from glml.utils import get_school, get_working_year

    school = get_school(request)
    working_year = get_working_year(request)
    if not school:
        add_message(request, u"Please select a school first.")
        return HttpResponseRedirect(reverse(home))
    if working_year != Year.get_current_year():
        add_message(request, u"You may not import students into a past season.")
        return HttpResponseRedirect(reverse(school_view))
    try:
        import_year = Year.objects.get(start=working_year.start - 1)
        import_school_id = school.schoolid_set.get(district__year__id=import_year.id)
    except (Year.DoesNotExist, SchoolID.DoesNotExist):
        add_message(request, u"There is no previous year to import students from.")
        return HttpResponseRedirect(reverse(school_view))
    try:
        school_id = school.schoolid_set.get(district__year__id=working_year.id)
    except SchoolID.DoesNotExist:
        return HttpResponseRedirect(reverse(school_view))
    students = [
        {"name": student_id.student.name(), "grade": student_id.grade + 1, "id": student_id.student.id}
        for student_id in import_school_id.studentid_set.exclude(grade=12)
    ]
    if not students:
        add_message(request, u"There are no students from the previous year to import.")
        return HttpResponseRedirect(reverse(school_view))
    if request.method == "POST":
        for student_id_number in request.POST:
            if request.POST[student_id_number] == "on":
                student = get_object_or_404(Student, id=student_id_number)
                grade = int(request.POST["%s_grade" % student_id_number])
                if not StudentID.objects.filter(student=student, school_id=school_id):
                    StudentID.objects.create(student=student, grade=grade, school_id=school_id)
                else:
                    student_id = StudentID.objects.get(student=student, school_id=school_id)
                    student_id.grade = grade
                    student_id.save()
        return HttpResponseRedirect(reverse(school_view))
    return render_to_response("web/import.html", {"students": students}, RequestContext(request))
Esempio n. 9
0
def compare(request, id):
    test_date = get_object_or_404(TestDate, id=id)
    from glml.utils import get_school, get_working_year

    school = get_school(request)
    working_year = get_working_year(request)
    if working_year != test_date.year:
        return HttpResponseRedirect(reverse(school_view))
    try:
        school_id = school.schoolid_set.get(district__year__id=working_year.id)
    except SchoolID.DoesNotExist:
        return HttpResponseRedirect(reverse(school_view))
    tests = test_date.test_set.filter(student_id__school_id__id=school_id.id).order_by("student_id")
    tests = [test.compare_mapping() for test in tests]
    key = test_date.get_key().compare_mapping()
    numbers = key["questions"].keys()
    numbers.sort()
    return render_to_response(
        "web/compare.html",
        {"test_date": test_date, "numbers": numbers, "key": key, "tests": tests},
        RequestContext(request),
    )
Esempio n. 10
0
def login(request):
    if request.user.is_authenticated():
        add_message(request, "You are already logged in.")
        return HttpResponseRedirect(reverse(home))
    from django.contrib.auth import REDIRECT_FIELD_NAME
    from glml.web.forms import LoginForm

    if request.method == "POST":
        form = LoginForm(request.POST)
        if request.session.test_cookie_worked():
            no_cookies = False
            if form.is_valid():
                if REDIRECT_FIELD_NAME in request.session:
                    redirect_to = request.session[REDIRECT_FIELD_NAME]
                    del request.session[REDIRECT_FIELD_NAME]
                else:
                    redirect_to = ""
                if not redirect_to or "://" in redirect_to or " " in redirect_to:
                    redirect_to = reverse(home)
                from django.contrib.auth import login

                login(request, form.cleaned_data["user"])
                request.session.delete_test_cookie()
                from glml.utils import get_school, get_working_year, set_up

                set_up()
                request.session["school"] = get_school(request)
                request.session["working_year"] = get_working_year(request)
                return HttpResponseRedirect(redirect_to)
        else:
            no_cookies = True
    else:
        request.session[REDIRECT_FIELD_NAME] = request.REQUEST.get(REDIRECT_FIELD_NAME, "")
        form = LoginForm()
        no_cookies = False
    request.session.set_test_cookie()
    return render_to_response("web/login.html", {"form": form, "no_cookies": no_cookies}, RequestContext(request))