Ejemplo n.º 1
0
def search_scores_responsible(learning_unit_title, course_code, entities,
                              tutor, responsible):
    queryset = Attribution.objects.filter(
        learning_unit_year__academic_year=current_academic_year())
    if learning_unit_title:
        queryset = queryset.filter(
            learning_unit_year__title__icontains=learning_unit_title)
    if course_code:
        queryset = queryset.filter(
            learning_unit_year__acronym__icontains=course_code)
    if tutor and responsible:
        queryset = queryset \
            .filter(learning_unit_year__id__in=LearningUnitYear.objects
                    .filter(attribution__id__in=Attribution.objects
                            .filter(score_responsible=True, tutor__person__in=Person.objects
                                    .filter(Q(first_name__icontains=responsible) |
                                            Q(last_name__icontains=responsible))))) \
            .filter(tutor__person__in=Person.objects
                    .filter(Q(first_name__icontains=tutor) |
                            Q(last_name__icontains=tutor)))
    else:
        if tutor:
            queryset = queryset \
                .filter(tutor__person__in=Person.objects.filter(Q(first_name__icontains=tutor) |
                                                                Q(last_name__icontains=tutor)))
        if responsible:
            queryset = queryset \
                .filter(score_responsible=True, tutor__person__in=Person.objects
                        .filter(Q(first_name__icontains=responsible) |
                                Q(last_name__icontains=responsible)))
    if entities:
        entities_ids = [entity.id for entity in entities]
        l_container_year_ids = entity_container_year.search(link_type=entity_container_year_link_type.ALLOCATION_ENTITY,
                                                            entity_id=entities_ids)\
                                                    .values_list('learning_container_year_id', flat=True)
        queryset = queryset.filter(
            learning_unit_year__learning_container_year__id__in=
            l_container_year_ids)

    # Prefetch entity version
    queryset = queryset.prefetch_related(
        Prefetch(
            'learning_unit_year__learning_container_year__entitycontaineryear_set',
            queryset=entity_container_year.search(
                link_type=entity_container_year_link_type.ALLOCATION_ENTITY).
            prefetch_related(
                Prefetch('entity__entityversion_set',
                         to_attr='entity_versions')),
            to_attr='entities_containers_year'))
    return queryset.select_related('learning_unit_year')\
                   .distinct("learning_unit_year")
Ejemplo n.º 2
0
def create_partim(data_dict, new_learning_container_year):
    data = data_dict.get('data', None)
    new_learning_unit = data_dict.get('new_learning_unit', None)
    status = data_dict.get('status', None)
    academic_year = data_dict.get('academic_year', None)

    # Get all requirement entity containers [Min 1 - Max 3]
    requirement_entity_containers = list(
        entity_container_year.search(
            learning_container_year=new_learning_container_year,
            link_type=[
                entity_container_year_link_type.REQUIREMENT_ENTITY,
                entity_container_year_link_type.
                ADDITIONAL_REQUIREMENT_ENTITY_1,
                entity_container_year_link_type.ADDITIONAL_REQUIREMENT_ENTITY_2
            ]))

    return create_learning_unit_content({
        'academic_year': academic_year,
        'data': data,
        'new_learning_container_year': new_learning_container_year,
        'new_learning_unit': new_learning_unit,
        'requirement_entity_containers': requirement_entity_containers,
        'status': status
    })
Ejemplo n.º 3
0
def filter_by_entities(queryset, entities):
    entities_ids = [entity.id for entity in entities]
    l_container_year_ids = entity_container_year.search(link_type=entity_container_year_link_type.ALLOCATION_ENTITY,
                                                        entity_id=entities_ids) \
        .values_list('learning_container_year_id', flat=True)
    queryset = queryset.filter(learning_unit_year__learning_container_year__id__in=l_container_year_ids)
    return queryset
Ejemplo n.º 4
0
def filter_by_entities(queryset, entities):
    entities_ids = [entity.id for entity in entities]
    l_container_year_ids = entity_container_year.search(link_type=entity_container_year_link_type.ALLOCATION_ENTITY,
                                                        entity_id=entities_ids) \
        .values_list('learning_container_year_id', flat=True)
    queryset = queryset.filter(learning_unit_year__learning_container_year__id__in=l_container_year_ids)
    return queryset
Ejemplo n.º 5
0
def get_entity_by_type(luy, entity_type):
    try:
        entity_container_yr = mdl_entity_container_year.search(
            link_type=entity_type, learning_container_year=luy.learning_container_year
        ).get()
        return entity_container_yr.entity
    except (MultipleObjectsReturned, ObjectDoesNotExist):
        return None
Ejemplo n.º 6
0
def _prefetch_entity_version(queryset):
    return queryset.prefetch_related(
        Prefetch('learning_unit_year__learning_container_year__entitycontaineryear_set',
                 queryset=entity_container_year.search(link_type=entity_container_year_link_type.ALLOCATION_ENTITY)
                 .prefetch_related(
                     Prefetch('entity__entityversion_set', to_attr='entity_versions')
                 ), to_attr='entities_containers_year')
    )
Ejemplo n.º 7
0
def _prefetch_entity_version(queryset):
    return queryset.prefetch_related(
        Prefetch('learning_unit_year__learning_container_year__entitycontaineryear_set',
                 queryset=entity_container_year.search(link_type=entity_container_year_link_type.ALLOCATION_ENTITY)
                 .prefetch_related(
                     Prefetch('entity__entityversion_set', to_attr='entity_versions')
                 ), to_attr='entities_containers_year')
    )
Ejemplo n.º 8
0
def is_person_linked_to_entity_in_charge_of_learning_unit(
        a_person, a_learning_unit_year):
    entity_containers_year = entity_container_year.search(
        learning_container_year=a_learning_unit_year.learning_container_year,
        link_type=REQUIREMENT_ENTITY)

    return filter_by_attached_entities(a_person,
                                       entity_containers_year).exists()
Ejemplo n.º 9
0
def _duplicate_entity_container_year(new_lcy, new_academic_year):
    for entity_container_y in entity_container_year.search(learning_container_year=new_lcy.copied_from):
        entity_versions = EntityVersion.objects.entity(entity_container_y.entity)
        if not entity_versions.current(new_academic_year.end_date).exists():
            raise IntegrityError(
                _('The entity %(entity_acronym)s does not exist for the selected academic year %(academic_year)s') % {
                    'entity_acronym': entity_versions.last().acronym,
                    'academic_year': new_academic_year
                })
        update_related_object(entity_container_y, 'learning_container_year', new_lcy)
Ejemplo n.º 10
0
def _duplicate_entity_container_year(new_lcy, new_academic_year):
    for entity_container_y in entity_container_year.search(
            learning_container_year=new_lcy.copied_from):
        entity_versions = EntityVersion.objects.entity(
            entity_container_y.entity)
        if not entity_versions.current(new_academic_year.end_date).exists():
            raise IntegrityError(
                _('Entity_not_exist') % {
                    'entity_acronym': entity_versions.last().acronym,
                    'academic_year': new_academic_year
                })
        update_related_object(entity_container_y, 'learning_container_year',
                              new_lcy)
def get_with_context(**learning_unit_year_data):
    entity_container_prefetch = models.Prefetch(
        'learning_container_year__entitycontaineryear_set',
        queryset=entity_container_year.search(
            link_type=REQUIREMENT_ENTITIES
        ).prefetch_related(
            models.Prefetch('entity__entityversion_set', to_attr='entity_versions')
        ),
        to_attr='entity_containers_year'
    )

    learning_unit_years = learning_unit_year.search(**learning_unit_year_data) \
        .select_related('academic_year', 'learning_container_year') \
        .prefetch_related(entity_container_prefetch) \
        .prefetch_related(get_learning_component_prefetch()) \
        .order_by('academic_year__year', 'acronym')

    learning_unit_years = [append_latest_entities(luy) for luy in learning_unit_years]
    learning_unit_years = [append_components(luy) for luy in learning_unit_years]

    return learning_unit_years
Ejemplo n.º 12
0
def is_eligible_for_modification_proposal(learning_unit_year, a_person):
    proposal = proposal_learning_unit.find_by_learning_unit_year(
        learning_unit_year)
    current_year = current_academic_year().year
    entity_containers_year = search(
        learning_container_year=learning_unit_year.learning_container_year,
        link_type=entity_container_year_link_type.REQUIREMENT_ENTITY)

    if not filter_by_attached_entities(a_person,
                                       entity_containers_year).count():
        return False

    if learning_unit_year.academic_year.year < current_year:
        return False

    if learning_unit_year.subtype != learning_unit_year_subtypes.FULL:
        return False

    if proposal:
        return False

    return True
def get_with_context(**learning_unit_year_data):
    entity_container_prefetch = models.Prefetch(
        'learning_container_year__entitycontaineryear_set',
        queryset=entity_container_year.search(
            link_type=ENTITY_TYPES_VOLUME).prefetch_related(
                models.Prefetch('entity__entityversion_set',
                                to_attr='entity_versions')),
        to_attr='entity_containers_year')

    learning_component_prefetch = models.Prefetch(
        'learningunitcomponent_set',
        queryset=learning_unit_component.
        LearningUnitComponent.objects.all().order_by(
            'learning_component_year__type',
            'learning_component_year__acronym').select_related(
                'learning_component_year').prefetch_related(
                    models.Prefetch(
                        'learning_component_year__entitycomponentyear_set',
                        queryset=entity_component_year.EntityComponentYear.
                        objects.all().select_related('entity_container_year'),
                        to_attr='entity_components_year')),
        to_attr='learning_unit_components')

    learning_unit_years = learning_unit_year.search(**learning_unit_year_data) \
        .select_related('academic_year', 'learning_container_year') \
        .prefetch_related(entity_container_prefetch) \
        .prefetch_related(learning_component_prefetch) \
        .order_by('academic_year__year', 'acronym')

    learning_unit_years = [
        append_latest_entities(luy) for luy in learning_unit_years
    ]
    learning_unit_years = [
        _append_components(luy) for luy in learning_unit_years
    ]

    return learning_unit_years
Ejemplo n.º 14
0
 def allocation_entity(self):
     entity_container_yr = entity_container_year.search(
         link_type=entity_container_year_link_type.ALLOCATION_ENTITY,
         learning_container_year=self.learning_container_year).first()
     return entity_container_yr.entity if entity_container_yr else None
Ejemplo n.º 15
0
 def get_entity(self, entity_type):
     entity_container_yr = entity_container_year.search(
         link_type=entity_type,
         learning_container_year=self.learning_container_year).get()
     return entity_container_yr.entity if entity_container_yr else None