def test_find_by_tutor_with_none_argument(self):
     self.assertEquals(attribution.find_by_tutor(None), None)
Exemplo n.º 2
0
def find_for_score_encodings(session_exam_number,
                             learning_unit_year_id=None,
                             learning_unit_year_ids=None,
                             tutor=None,
                             offer_year_id=None,
                             offers_year=None,
                             with_justification_or_score_final=False,
                             with_justification_or_score_draft=False,
                             registration_id=None,
                             student_last_name=None,
                             student_first_name=None,
                             justification=None,
                             academic_year=None,
                             with_session_exam_deadline=True):
    """
    :param session_exam_number: Integer represents the number_session of the Session_exam (1,2,3,4 or 5). It's
                                a mandatory field to not confuse exam scores from different sessions.
    :param learning_unit_year_id: Filter OfferEnrollments by learning_unit_year.
    :param learning_unit_year_ids: Filter OfferEnrollments by a list of learning_unit_year.
    :param tutor: Filter OfferEnrollments by Tutor.
    :param offer_year_id: Filter OfferEnrollments by Offer year ids
    :param offers_year: Filter OfferEnrollments by OfferYear.
    :param with_justification_or_score_final: If True, only examEnrollments with a score_final or a justification_final
                                              are returned.
    :param with_justification_or_score_draft: If True, only examEnrollments with a score_draft or a justification_draft
                                              are returned.
    :return: All filtered examEnrollments.
    """
    if not academic_year:
        academic_year = academic_yr.current_academic_year()

    queryset = ExamEnrollment.objects.filter(
        session_exam__number_session=session_exam_number,
        learning_unit_enrollment__learning_unit_year__academic_year=
        academic_year,
        enrollment_state=enrollment_states.ENROLLED)
    if learning_unit_year_id:
        queryset = queryset.filter(
            learning_unit_enrollment__learning_unit_year_id=
            learning_unit_year_id)
    elif learning_unit_year_ids is not None:
        queryset = queryset.filter(
            learning_unit_enrollment__learning_unit_year_id__in=
            learning_unit_year_ids)

    if tutor:
        # Filter by Tutor is like filter by a list of learningUnits
        # It's not necessary to add a filter if learningUnitYear or learningUnitYearIds are already defined
        if not learning_unit_year_id and not learning_unit_year_ids:
            learning_unit_years = attribution.find_by_tutor(tutor)
            queryset = queryset.filter(
                learning_unit_enrollment__learning_unit_year_id__in=
                learning_unit_years)

    if offer_year_id:
        queryset = queryset.filter(
            learning_unit_enrollment__offer_enrollment__offer_year_id=
            offer_year_id)
    elif offers_year:
        queryset = queryset.filter(
            learning_unit_enrollment__offer_enrollment__offer_year_id__in=
            offers_year)

    if with_justification_or_score_final:
        queryset = queryset.exclude(score_final=None, justification_final=None)

    if with_justification_or_score_draft:
        queryset = queryset.exclude(score_draft=None, justification_draft=None)

    if registration_id:
        queryset = queryset.filter(
            learning_unit_enrollment__offer_enrollment__student__registration_id
            =registration_id)

    if justification:
        if justification == justification_types.SCORE_MISSING:
            # Show only empty values
            queryset = queryset.filter(justification_final__isnull=True,
                                       score_final__isnull=True)
        else:
            queryset = queryset.filter(justification_final=justification)

    if student_last_name:
        queryset = queryset.filter(
            learning_unit_enrollment__offer_enrollment__student__person__last_name__icontains
            =student_last_name)

    if student_first_name:
        queryset = queryset.filter(
            learning_unit_enrollment__offer_enrollment__student__person__first_name__icontains
            =student_first_name)

    if with_session_exam_deadline:
        queryset = queryset.prefetch_related(
            models.Prefetch(
                'learning_unit_enrollment__offer_enrollment__sessionexamdeadline_set',
                queryset=session_exam_deadline.filter_by_nb_session(
                    session_exam_number),
                to_attr="session_exam_deadlines"))

    return queryset.select_related('learning_unit_enrollment__offer_enrollment__offer_year') \
                   .select_related('session_exam')\
                   .select_related('learning_unit_enrollment__offer_enrollment__student__person')\
                   .select_related('learning_unit_enrollment__learning_unit_year')
Exemplo n.º 3
0
def find_for_score_encodings(session_exam_number,
                             learning_unit_year_id=None,
                             learning_unit_year_ids=None,
                             tutor=None,
                             offer_year_id=None,
                             offers_year=None,
                             with_justification_or_score_final=False,
                             with_justification_or_score_draft=False,
                             registration_id=None,
                             student_last_name=None,
                             student_first_name=None,
                             justification=None,
                             academic_year=None,
                             with_session_exam_deadline=True,
                             only_enrolled=False):
    """
    :param session_exam_number: Integer represents the number_session of the Session_exam (1,2,3,4 or 5). It's
                                a mandatory field to not confuse exam scores from different sessions.
    :param learning_unit_year_id: Filter OfferEnrollments by learning_unit_year.
    :param learning_unit_year_ids: Filter OfferEnrollments by a list of learning_unit_year.
    :param tutor: Filter OfferEnrollments by Tutor.
    :param offer_year_id: Filter OfferEnrollments by Offer year ids
    :param offers_year: Filter OfferEnrollments by OfferYear.
    :param with_justification_or_score_final: If True, only examEnrollments with a score_final or a justification_final
                                              are returned.
    :param with_justification_or_score_draft: If True, only examEnrollments with a score_draft or a justification_draft
                                              are returned.
    :return: All filtered examEnrollments.
    """
    if not academic_year:
        academic_year = academic_yr.current_academic_year()

    queryset = ExamEnrollment.objects.filter(
        session_exam__number_session=session_exam_number,
        learning_unit_enrollment__learning_unit_year__academic_year=academic_year
    )
    if only_enrolled:
        queryset = queryset.filter(enrollment_state=enrollment_states.ENROLLED)

    if learning_unit_year_id:
        queryset = queryset.filter(learning_unit_enrollment__learning_unit_year_id=learning_unit_year_id)
    elif learning_unit_year_ids is not None:
        queryset = queryset.filter(learning_unit_enrollment__learning_unit_year_id__in=learning_unit_year_ids)

    if tutor:
        # Filter by Tutor is like filter by a list of learningUnits
        # It's not necessary to add a filter if learningUnitYear or learningUnitYearIds are already defined
        if not learning_unit_year_id and not learning_unit_year_ids:
            learning_unit_years = attribution.find_by_tutor(tutor)
            queryset = queryset.filter(learning_unit_enrollment__learning_unit_year_id__in=learning_unit_years)

    if offer_year_id:
        queryset = queryset.filter(learning_unit_enrollment__offer_enrollment__offer_year_id=offer_year_id)
    elif offers_year:
        queryset = queryset.filter(learning_unit_enrollment__offer_enrollment__offer_year_id__in=offers_year)

    if with_justification_or_score_final:
        queryset = queryset.exclude(score_final=None, justification_final=None)

    if with_justification_or_score_draft:
        queryset = queryset.exclude(score_draft=None, justification_draft=None)

    if registration_id:
        queryset = queryset.filter(learning_unit_enrollment__offer_enrollment__student__registration_id=registration_id)

    if justification:
        if justification == justification_types.SCORE_MISSING:
            # Show only empty values
            queryset = queryset.filter(justification_final__isnull=True,
                                       score_final__isnull=True)
        else:
            queryset = queryset.filter(justification_final=justification)

    if student_last_name:
        queryset = queryset.filter(
            learning_unit_enrollment__offer_enrollment__student__person__last_name__icontains=student_last_name)

    if student_first_name:
        queryset = queryset.filter(
            learning_unit_enrollment__offer_enrollment__student__person__first_name__icontains=student_first_name)

    if with_session_exam_deadline:
        queryset = queryset.prefetch_related(
            models.Prefetch('learning_unit_enrollment__offer_enrollment__sessionexamdeadline_set',
                            queryset=session_exam_deadline.filter_by_nb_session(session_exam_number),
                            to_attr="session_exam_deadlines")
        )

    return queryset.select_related('learning_unit_enrollment__offer_enrollment__offer_year') \
        .select_related('session_exam') \
        .select_related('learning_unit_enrollment__offer_enrollment__student__person') \
        .select_related('learning_unit_enrollment__learning_unit_year')