Example #1
0
def course_create(request, semester_id):
    semester = get_object_or_404(Semester, id=semester_id)
    raise_permission_denied_if_archived(semester)

    course = Course(semester=semester)
    InlineContributionFormset = inlineformset_factory(
        Course,
        Contribution,
        formset=ContributionFormSet,
        form=ContributionForm,
        extra=1)

    form = CourseForm(request.POST or None, instance=course)
    formset = InlineContributionFormset(request.POST or None,
                                        instance=course,
                                        form_kwargs={'course': course})

    if form.is_valid() and formset.is_valid():
        form.save(user=request.user)
        formset.save()

        messages.success(request, _("Successfully created course."))
        return redirect('staff:semester_view', semester_id)
    else:
        return render(
            request, "staff_course_form.html",
            dict(semester=semester, form=form, formset=formset, staff=True))
Example #2
0
def helper_course_edit(request, semester, course):
    InlineContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=ContributionForm, extra=1)

    form = CourseForm(request.POST or None, instance=course)
    formset = InlineContributionFormset(request.POST or None, instance=course, form_kwargs={'course': course})
    editable = course.can_staff_edit

    operation = request.POST.get('operation')

    if form.is_valid() and formset.is_valid():
        if operation not in ('save', 'approve'):
            raise SuspiciousOperation("Invalid POST operation")

        if not course.can_staff_edit or course.is_archived:
            raise SuspiciousOperation("Modifying this course is not allowed.")

        if course.state in ['evaluated', 'reviewed'] and course.is_in_evaluation_period():
            course.reopen_evaluation()
        form.save(user=request.user)
        formset.save()

        if operation == 'approve':
            # approve course
            course.staff_approve()
            course.save()
            messages.success(request, _("Successfully updated and approved course."))
        else:
            messages.success(request, _("Successfully updated course."))

        return custom_redirect('staff:semester_view', semester.id)
    else:
        sort_formset(request, formset)
        template_data = dict(semester=semester, form=form, formset=formset, staff=True, state=course.state, editable=editable)
        return render(request, "staff_course_form.html", template_data)
Example #3
0
    def test_voter_cannot_be_removed_from_course(self):
        student = mommy.make(UserProfile)
        course = mommy.make(Course, degrees=[mommy.make(Degree)], participants=[student], voters=[student])
        course.general_contribution.questionnaires.set([mommy.make(Questionnaire)])

        form_data = get_form_data_from_instance(CourseForm, course)
        form_data["participants"] = []
        form = CourseForm(form_data, instance=course)

        self.assertFalse(form.is_valid())
        self.assertIn('participants', form.errors)
        self.assertIn("Participants who already voted for the course can't be removed", form.errors['participants'][0])
Example #4
0
    def helper_test_course_form_same_name(self, CourseFormClass):
        courses = Course.objects.all()

        form_data = get_form_data_from_instance(CourseForm, courses[0])
        form_data["vote_start_date"] = "02/1/2098" # needed to fix the form
        form_data["vote_end_date"] = "02/1/2099" # needed to fix the form

        form = CourseForm(form_data, instance=courses[0])
        self.assertTrue(form.is_valid())
        form_data['name_de'] = courses[1].name_de
        form = CourseForm(form_data, instance=courses[0])
        self.assertFalse(form.is_valid())
Example #5
0
    def test_uniqueness_constraint_error_shown(self):
        """
            Tests whether errors being caused by a uniqueness constraint are shown in the form
        """
        courses = baker.make(Course, semester=baker.make(Semester), responsibles=[baker.make(UserProfile)], degrees=[baker.make(Degree)], _quantity=2)

        form_data = get_form_data_from_instance(CourseForm, courses[1])
        form_data["name_de"] = courses[0].name_de
        form = CourseForm(form_data, instance=courses[1])

        self.assertFalse(form.is_valid())
        self.assertIn('name_de', form.errors)
        self.assertEqual(form.errors['name_de'], ['Course with this Semester and Name (german) already exists.'])
Example #6
0
    def test_uniqueness_constraint_error_shown(self):
        """
            Tests whether errors being caused by a uniqueness constraint are shown in the form
        """
        courses = mommy.make(Course, semester=mommy.make(Semester), responsibles=[mommy.make(UserProfile)], degrees=[mommy.make(Degree)], _quantity=2)

        form_data = get_form_data_from_instance(CourseForm, courses[1])
        form_data["name_de"] = courses[0].name_de
        form = CourseForm(form_data, instance=courses[1])

        self.assertFalse(form.is_valid())
        self.assertIn('name_de', form.errors)
        self.assertEqual(form.errors['name_de'], ['Course with this Semester and Name (german) already exists.'])
Example #7
0
    def test_course_form_same_name(self):
        """
            Test whether giving a course the same name as another course
            in the same semester in the course edit form is invalid.
        """
        courses = mommy.make(Course, semester=mommy.make(Semester), responsibles=[mommy.make(UserProfile)], degrees=[mommy.make(Degree)], _quantity=2)

        form_data = get_form_data_from_instance(CourseForm, courses[0])
        form = CourseForm(form_data, instance=courses[0])
        self.assertTrue(form.is_valid())
        form_data['name_de'] = courses[1].name_de
        form = CourseForm(form_data, instance=courses[0])
        self.assertFalse(form.is_valid())
Example #8
0
    def test_uniqueness_constraint_error_shown(self):
        """
            Tests whether errors being caused by a uniqueness constraint are shown in the form
        """
        semester = mommy.make(Semester)
        course1 = mommy.make(Course, semester=semester)
        course2 = mommy.make(Course, semester=semester)

        form_data = get_form_data_from_instance(CourseForm, course2)
        form_data["name_de"] = course1.name_de
        form = CourseForm(form_data, instance=course2)

        self.assertFalse(form.is_valid())
        self.assertIn('name_de', form.errors)
        self.assertEqual(form.errors['name_de'], ['Course with this Semester and Name (german) already exists.'])
Example #9
0
    def test_uniqueness_constraint_error_shown(self):
        """
            Tests whether errors being caused by a uniqueness constraint are shown in the form
        """
        semester = mommy.make(Semester)
        course1 = mommy.make(Course, semester=semester)
        course2 = mommy.make(Course, semester=semester)

        form_data = get_form_data_from_instance(CourseForm, course2)
        form_data["name_de"] = course1.name_de
        form = CourseForm(form_data, instance=course2)

        self.assertFalse(form.is_valid())
        self.assertIn('name_de', form.errors)
        self.assertEqual(form.errors['name_de'], ['Course with this Semester and Name (german) already exists.'])
Example #10
0
 def test_that_proxy_user_can_be_responsible(self):
     course = mommy.make(Course,
                         semester=mommy.make(Semester),
                         degrees=[mommy.make(Degree)])
     proxy = mommy.make(UserProfile, is_proxy_user=True, is_active=True)
     form = CourseForm(instance=course)
     self.assertIn(proxy, form.fields['responsibles'].queryset)
Example #11
0
def course_create(request, semester_id):
    semester = get_object_or_404(Semester, id=semester_id)
    course = Course(semester=semester)
    ContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=ContributionForm, extra=1, exclude=('course',))

    form = CourseForm(request.POST or None, instance=course)
    formset = ContributionFormset(request.POST or None, instance=course)

    if form.is_valid() and formset.is_valid():
        form.save(user=request.user)
        formset.save()

        messages.success(request, _("Successfully created course."))
        return redirect('evap.staff.views.semester_view', semester_id)
    else:
        return render(request, "staff_course_form.html", dict(semester=semester, form=form, formset=formset))
Example #12
0
def course_create(request, semester_id):
    semester = get_object_or_404(Semester, id=semester_id)
    raise_permission_denied_if_archived(semester)

    course = Course(semester=semester)
    InlineContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=ContributionForm, extra=1)

    form = CourseForm(request.POST or None, instance=course)
    formset = InlineContributionFormset(request.POST or None, instance=course, form_kwargs={'course': course})

    if form.is_valid() and formset.is_valid():
        form.save(user=request.user)
        formset.save()

        messages.success(request, _("Successfully created course."))
        return redirect('staff:semester_view', semester_id)
    else:
        return render(request, "staff_course_form.html", dict(semester=semester, form=form, formset=formset, staff=True, editable=True, state=""))
Example #13
0
def helper_course_edit(request, semester, course):
    InlineContributionFormset = inlineformset_factory(
        Course,
        Contribution,
        formset=ContributionFormSet,
        form=ContributionForm,
        extra=1)

    form = CourseForm(request.POST or None, instance=course)
    formset = InlineContributionFormset(request.POST or None,
                                        instance=course,
                                        form_kwargs={'course': course})

    operation = request.POST.get('operation')

    if form.is_valid() and formset.is_valid():
        if operation not in ('save', 'approve'):
            raise SuspiciousOperation("Invalid POST operation")
        if course.state in ['evaluated', 'reviewed'
                            ] and course.is_in_evaluation_period:
            course.reopen_evaluation()
        form.save(user=request.user)
        formset.save()

        if operation == 'approve':
            # approve course
            course.staff_approve()
            course.save()
            messages.success(request,
                             _("Successfully updated and approved course."))
        else:
            messages.success(request, _("Successfully updated course."))

        return custom_redirect('staff:semester_view', semester.id)
    else:
        sort_formset(request, formset)
        template_data = dict(semester=semester,
                             course=course,
                             form=form,
                             formset=formset,
                             staff=True)
        return render(request, "staff_course_form.html", template_data)
Example #14
0
def helper_course_edit(request, semester, course):
    InlineContributionFormset = inlineformset_factory(
        Course, Contribution, formset=ContributionFormSet, form=ContributionForm, extra=1, exclude=("course",)
    )

    form = CourseForm(request.POST or None, instance=course)
    formset = InlineContributionFormset(
        request.POST or None, instance=course, queryset=course.contributions.exclude(contributor=None)
    )

    if form.is_valid() and formset.is_valid():
        if course.state in ["evaluated", "reviewed"] and course.is_in_evaluation_period:
            course.reopen_evaluation()
        form.save(user=request.user)
        formset.save()

        messages.success(request, _("Successfully updated course."))
        return custom_redirect("staff:semester_view", semester.id)
    else:
        sort_formset(request, formset)
        template_data = dict(semester=semester, course=course, form=form, formset=formset, staff=True)
        return render(request, "staff_course_form.html", template_data)
Example #15
0
def course_edit(request, semester_id, course_id):
    semester = get_object_or_404(Semester, id=semester_id)
    course = get_object_or_404(Course, id=course_id)
    ContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=ContributionForm, extra=1, exclude=('course',))

    # check course state
    if not course.can_staff_edit():
        messages.warning(request, _("Editing not possible in current state."))
        return redirect('evap.staff.views.semester_view', semester_id)

    form = CourseForm(request.POST or None, instance=course)
    formset = ContributionFormset(request.POST or None, instance=course, queryset=course.contributions.exclude(contributor=None))

    if form.is_valid() and formset.is_valid():
        form.save(user=request.user)
        formset.save()

        messages.success(request, _("Successfully updated course."))
        return custom_redirect('evap.staff.views.semester_view', semester_id, tab=get_tab(request))
    else:
        template_data = dict(semester=semester, course=course, form=form, formset=formset, staff=True)
        return render(request, "staff_course_form.html", template_data)
Example #16
0
    def test_course_form_same_name(self):
        """
            Test whether giving a course the same name as another course
            in the same semester in the course edit form is invalid.
        """
        courses = baker.make(Course, semester=baker.make(Semester), responsibles=[baker.make(UserProfile)], degrees=[baker.make(Degree)], _quantity=2)

        form_data = get_form_data_from_instance(CourseForm, courses[0])
        form = CourseForm(form_data, instance=courses[0])
        self.assertTrue(form.is_valid())
        form_data['name_de'] = courses[1].name_de
        form = CourseForm(form_data, instance=courses[0])
        self.assertFalse(form.is_valid())
Example #17
0
 def test_staff_can_select_proxy_user(self):
     proxy_user = mommy.make(UserProfile, is_proxy_user=True)
     course = mommy.make(Course, semester=mommy.make(Semester))
     form = CourseForm(instance=course)
     self.assertIn(proxy_user, form.fields['responsibles'].queryset)