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")
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 })
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
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
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
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') )
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') )
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()
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)
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
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
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
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