def _check_postponement_conflict_on_entity_container_year(lcy, next_lcy): current_entities = entity_container_year.find_entities_grouped_by_linktype( lcy) next_year_entities = entity_container_year.find_entities_grouped_by_linktype( next_lcy) error_list = _check_if_all_entities_exist( next_lcy, list(next_year_entities.values())) entity_type_diff = filter( lambda type: _is_different_value(current_entities, next_year_entities, type), ENTITY_TYPE_LIST) for entity_type in entity_type_diff: current_entity = current_entities.get(entity_type) next_year_entity = next_year_entities.get(entity_type) error_list.append( _("The value of field '%(field)s' is different between year %(year)s - %(value)s " "and year %(next_year)s - %(next_value)s") % { 'field': _(entity_type.lower()), 'year': lcy.academic_year, 'value': current_entity.most_recent_acronym if current_entity else _('no_data'), 'next_year': next_lcy.academic_year, 'next_value': next_year_entity.most_recent_acronym if next_year_entity else _('no_data') }) return error_list
def copy_learning_unit_data(learning_unit_year): learning_container_year = learning_unit_year.learning_container_year entities_by_type = entity_container_year.find_entities_grouped_by_linktype( learning_container_year) learning_unit_year_values = _get_attributes_values( learning_unit_year, INITIAL_DATA_FIELDS['learning_unit_year']) learning_unit_year_values["credits"] = float( learning_unit_year.credits) if learning_unit_year.credits else None return { "learning_container_year": _get_attributes_values(learning_container_year, INITIAL_DATA_FIELDS['learning_container_year']), "learning_unit_year": learning_unit_year_values, "learning_unit": _get_attributes_values(learning_unit_year.learning_unit, INITIAL_DATA_FIELDS['learning_unit']), "entities": get_entities(entities_by_type), "learning_component_years": get_components_initial_data(learning_unit_year), "volumes": _get_volumes_for_initial(learning_unit_year) }
def _consolidate_modification_proposal_accepted(proposal): next_luy = proposal.learning_unit_year.get_learning_unit_next_year() if next_luy: fields_to_update = {} fields_to_update.update( model_to_dict( proposal.learning_unit_year, fields=proposal.initial_data["learning_unit_year"].keys(), exclude=("id", ))) fields_to_update.update( model_to_dict(proposal.learning_unit_year.learning_unit, fields=proposal.initial_data["learning_unit"].keys(), exclude=("id", ))) fields_to_update.update( model_to_dict( proposal.learning_unit_year.learning_container_year, fields=proposal.initial_data["learning_container_year"].keys(), exclude=("id", ))) fields_to_update_clean = {} for field_name, field_value in fields_to_update.items(): fields_to_update_clean[ field_name] = _clean_attribute_initial_value( field_name, field_value) entities_to_update = find_entities_grouped_by_linktype( proposal.learning_unit_year.learning_container_year) update_learning_unit_year_with_report( next_luy, fields_to_update_clean, entities_to_update, override_postponement_consistency=True) return {}
def _copy_learning_unit_data(learning_unit_year): learning_container_year = learning_unit_year.learning_container_year entities_by_type = entity_container_year.find_entities_grouped_by_linktype(learning_container_year) learning_container_year_values = _get_attributes_values(learning_container_year, ["id", "acronym", "title", "title_english", "container_type", "campus__id", "language__id", "in_charge"]) learning_unit_values = _get_attributes_values(learning_unit_year.learning_unit, ["id", "periodicity"]) learning_unit_year_values = _get_attributes_values(learning_unit_year, ["id", "acronym", "title", "title_english", "internship_subtype", "quadrimester"]) learning_unit_year_values["credits"] = float(learning_unit_year.credits) if learning_unit_year.credits else None initial_data = { "learning_container_year": learning_container_year_values, "learning_unit_year": learning_unit_year_values, "learning_unit": learning_unit_values, "entities": { REQUIREMENT_ENTITY: entities_by_type[REQUIREMENT_ENTITY].id if entities_by_type.get(REQUIREMENT_ENTITY) else None, ALLOCATION_ENTITY: entities_by_type[ALLOCATION_ENTITY].id if entities_by_type.get(ALLOCATION_ENTITY) else None, ADDITIONAL_REQUIREMENT_ENTITY_1: entities_by_type[ADDITIONAL_REQUIREMENT_ENTITY_1].id if entities_by_type.get(ADDITIONAL_REQUIREMENT_ENTITY_1) else None, ADDITIONAL_REQUIREMENT_ENTITY_2: entities_by_type[ADDITIONAL_REQUIREMENT_ENTITY_2].id if entities_by_type.get(ADDITIONAL_REQUIREMENT_ENTITY_2) else None } } return initial_data
def test_with_all_entities_set(self): today = datetime.date.today() entity_1 = EntityFactory(organization=OrganizationFactory(type=organization_type.MAIN)) additional_entity_version_1 = EntityVersionFactory(entity_type=entity_type.SCHOOL, start_date=today, end_date=today.replace(year=today.year + 1), entity=entity_1) entity_2 = EntityFactory(organization=OrganizationFactory(type=organization_type.MAIN)) additional_entity_version_2 = EntityVersionFactory(entity_type=entity_type.SCHOOL, start_date=today, end_date=today.replace(year=today.year + 1), entity=entity_2) self.form_data["allocation_entity"] = self.entity_version.id self.form_data["additional_entity_1"] = additional_entity_version_1.id self.form_data["additional_entity_2"] = additional_entity_version_2.id form = LearningUnitProposalModificationForm(self.form_data) form.save(self.learning_unit_year, self.person, PROPOSAL_TYPE, PROPOSAL_STATE) entities_by_type = \ entity_container_year.find_entities_grouped_by_linktype(self.learning_unit_year.learning_container_year) expected_entities = { entity_container_year_link_type.REQUIREMENT_ENTITY: self.entity_version.entity, entity_container_year_link_type.ALLOCATION_ENTITY: self.entity_version.entity, entity_container_year_link_type.ADDITIONAL_REQUIREMENT_ENTITY_1: additional_entity_version_1.entity, entity_container_year_link_type.ADDITIONAL_REQUIREMENT_ENTITY_2: additional_entity_version_2.entity } self.assertDictEqual(entities_by_type, expected_entities)
def _check_postponement_conflict_on_entity_container_year(lcy, next_lcy): current_entities = entity_container_year.find_entities_grouped_by_linktype(lcy) next_year_entities = entity_container_year.find_entities_grouped_by_linktype(next_lcy) error_list = _check_if_all_entities_exist(next_lcy, list(next_year_entities.values())) entity_type_diff = filter(lambda type: _is_different_value(current_entities, next_year_entities, type), ENTITY_TYPE_LIST) for entity_type in entity_type_diff: current_entity = current_entities.get(entity_type) next_year_entity = next_year_entities.get(entity_type) error_list.append(_("The value of field '%(field)s' is different between year %(year)s - %(value)s " "and year %(next_year)s - %(next_value)s") % { 'field': _(entity_type.lower()), 'year': lcy.academic_year, 'value': current_entity.most_recent_acronym if current_entity else _('No data'), 'next_year': next_lcy.academic_year, 'next_value': next_year_entity.most_recent_acronym if next_year_entity else _('No data') }) return error_list
def copy_learning_unit_data(learning_unit_year): learning_container_year = learning_unit_year.learning_container_year entities_by_type = entity_container_year.find_entities_grouped_by_linktype( learning_container_year) learning_container_year_values = _get_attributes_values( learning_container_year, INITIAL_DATA_FIELDS['learning_container_year']) learning_unit_values = _get_attributes_values( learning_unit_year.learning_unit, INITIAL_DATA_FIELDS['learning_unit']) learning_unit_year_values = _get_attributes_values( learning_unit_year, INITIAL_DATA_FIELDS['learning_unit_year']) learning_unit_year_values["credits"] = float( learning_unit_year.credits) if learning_unit_year.credits else None return get_initial_data(entities_by_type, learning_container_year_values, learning_unit_values, learning_unit_year_values)
def _copy_learning_unit_data(learning_unit_year): learning_container_year = learning_unit_year.learning_container_year entities_by_type = entity_container_year.find_entities_grouped_by_linktype(learning_container_year) learning_container_year_values = _get_attributes_values(learning_container_year, ["id", "acronym", "common_title", "common_title_english", "container_type", "campus__id", "language__id", "in_charge"]) learning_unit_values = _get_attributes_values(learning_unit_year.learning_unit, ["id", "periodicity"]) learning_unit_year_values = _get_attributes_values(learning_unit_year, ["id", "acronym", "specific_title", "specific_title_english", "internship_subtype", "quadrimester", "status"]) learning_unit_year_values["credits"] = float(learning_unit_year.credits) if learning_unit_year.credits else None return get_initial_data(entities_by_type, learning_container_year_values, learning_unit_values, learning_unit_year_values)
def test_find_entities_grouped_by_linktype(self): a_learning_container_year = LearningContainerYearFactory() requirement_entity = EntityFactory() EntityContainerYearFactory( learning_container_year=a_learning_container_year, entity=requirement_entity, type=entity_container_year_link_type.REQUIREMENT_ENTITY) allocation_entity = EntityFactory() EntityContainerYearFactory( learning_container_year=a_learning_container_year, entity=allocation_entity, type=entity_container_year_link_type.ALLOCATION_ENTITY) additional_requirement_entity_1 = EntityFactory() EntityContainerYearFactory( learning_container_year=a_learning_container_year, entity=additional_requirement_entity_1, type=entity_container_year_link_type. ADDITIONAL_REQUIREMENT_ENTITY_1) additional_requirement_entity_2 = EntityFactory() EntityContainerYearFactory( learning_container_year=a_learning_container_year, entity=additional_requirement_entity_2, type=entity_container_year_link_type. ADDITIONAL_REQUIREMENT_ENTITY_2) entities_by_linktype = entity_container_year.find_entities_grouped_by_linktype( a_learning_container_year) expected_result = { entity_container_year_link_type.REQUIREMENT_ENTITY: requirement_entity, entity_container_year_link_type.ALLOCATION_ENTITY: allocation_entity, entity_container_year_link_type.ADDITIONAL_REQUIREMENT_ENTITY_1: additional_requirement_entity_1, entity_container_year_link_type.ADDITIONAL_REQUIREMENT_ENTITY_2: additional_requirement_entity_2 } self.assertDictEqual(entities_by_linktype, expected_result)
def test_with_all_entities_set(self): today = datetime.date.today() entity_1 = EntityFactory(organization=OrganizationFactory( type=organization_type.MAIN)) additional_entity_version_1 = EntityVersionFactory( entity_type=entity_type.SCHOOL, start_date=today.replace(year=1900), end_date=today.replace(year=today.year + 1), entity=entity_1) entity_2 = EntityFactory(organization=OrganizationFactory( type=organization_type.MAIN)) additional_entity_version_2 = EntityVersionFactory( entity_type=entity_type.SCHOOL, start_date=today.replace(year=1900), end_date=today.replace(year=today.year + 1), entity=entity_2) self.form_data["allocation_entity-entity"] = self.entity_version.id self.form_data[ "additional_requirement_entity_1-entity"] = additional_entity_version_1.id self.form_data[ "additional_requirement_entity_2-entity"] = additional_entity_version_2.id form = ProposalBaseForm(self.form_data, self.person, self.learning_unit_year) self.assertTrue(form.is_valid(), form.errors) form.save() entities_by_type = \ entity_container_year.find_entities_grouped_by_linktype(self.learning_unit_year.learning_container_year) expected_entities = { entity_container_year_link_type.REQUIREMENT_ENTITY: self.entity_version.entity, entity_container_year_link_type.ALLOCATION_ENTITY: self.entity_version.entity, entity_container_year_link_type.ADDITIONAL_REQUIREMENT_ENTITY_1: additional_entity_version_1.entity, entity_container_year_link_type.ADDITIONAL_REQUIREMENT_ENTITY_2: additional_entity_version_2.entity } self.assertDictEqual(entities_by_type, expected_entities)