Esempio n. 1
0
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
Esempio n. 2
0
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)
    }
Esempio n. 3
0
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 {}
Esempio n. 4
0
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
Esempio n. 5
0
    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)
Esempio n. 6
0
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
Esempio n. 7
0
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)
Esempio n. 8
0
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)
Esempio n. 9
0
    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)