def test_student_exceeds_the_35_limit(self):
        """Bolek will try to sign up to "Gotowanie" and "Szydełkowanie" before
        35 points limit abolition. He should be successful with "Gotowanie",
        which costs exactly 35 ECTS, but not with the second enrollment.
        """
        with patch(RECORDS_DATETIME, mock_datetime(2011, 10, 1, 12)):
            self.assertTrue(
                Record.enqueue_student(self.bolek, self.cooking_lecture_group))
        self.assertTrue(
            Record.objects.filter(student=self.bolek,
                                  group=self.cooking_lecture_group,
                                  status=RecordStatus.ENROLLED).exists())
        self.assertEqual(
            Record.student_points_in_semester(self.bolek, self.semester), 35)

        with patch(RECORDS_DATETIME, mock_datetime(2011, 10, 1, 12, 5)):
            # He should be able to join the queue.
            self.assertTrue(
                Record.enqueue_student(self.bolek,
                                       self.knitting_lecture_group))
        # His enrollment with "Gotowanie" should still exist.
        self.assertTrue(
            Record.objects.filter(student=self.bolek,
                                  group=self.cooking_lecture_group,
                                  status=RecordStatus.ENROLLED).exists())
        # His record with "Szydełkowanie" should be removed.
        self.assertFalse(
            Record.objects.filter(student=self.bolek,
                                  group=self.knitting_lecture_group,
                                  status=RecordStatus.ENROLLED).exists())
        self.assertTrue(
            Record.objects.filter(student=self.bolek,
                                  group=self.knitting_lecture_group,
                                  status=RecordStatus.REMOVED).exists())
        self.assertEqual(
            Record.student_points_in_semester(self.bolek, self.semester), 35)
Beispiel #2
0
def my_profile(request):
    """User profile page.

    The profile page displays user settings (e-mail address, notifications). If
    he is a student, his opening times will be displayed. If the user is an
    employee, the page allows him to modify his public information (office,
    consultations).
    """
    semester = Semester.objects.get_next()

    data = {
        'semester': semester,
    }

    if BaseUser.is_employee(request.user):
        data.update({
            'consultations': request.user.employee.consultations,
            'room': request.user.employee.room,
            'homepage': request.user.employee.homepage,
            'title': request.user.employee.title,
        })

    if semester and BaseUser.is_student(request.user):
        student: Student = request.user.student
        groups_opening_times = GroupOpeningTimes.objects.filter(
            student_id=student.pk,
            group__course__semester_id=semester.pk).select_related(
                'group', 'group__course', 'group__teacher',
                'group__teacher__user').prefetch_related(
                    'group__term', 'group__term__classrooms')
        groups_times = []
        got: GroupOpeningTimes
        for got in groups_opening_times:
            group: Group = got.group
            group.opening_time = got.time
            groups_times.append(group)
        t0_time_obj = T0Times.objects.filter(student_id=student.pk,
                                             semester_id=semester.pk)
        try:
            t0_time = t0_time_obj.get().time
        except T0Times.DoesNotExist:
            t0_time = None
        grade_info = StudentGraded.objects.filter(
            student=student).select_related('semester').order_by(
                '-semester__records_opening')
        semesters_participated_in_grade = [x.semester for x in grade_info]
        current_semester_ects = Record.student_points_in_semester(
            student, semester)
        data.update({
            't0_time': t0_time,
            'groups_times': groups_times,
            'semesters_participated_in_grade': semesters_participated_in_grade,
            'current_semester_ects': current_semester_ects,
        })

    notifications_form = create_form(request)
    data.update({
        'form': notifications_form,
    })

    return render(request, 'users/my_profile.html', data)