Exemple #1
0
 def get_queryset(self):
     country = self.forwarded.get('country', None)
     if country and country == "all":
         qs = find_all_current_entities_version().order_by('acronym')
     elif country:
         qs = find_all_current_entities_version().filter(entity__country__id=country).order_by('acronym')
     else:
         qs = find_pedagogical_entities_version()
     if self.q:
         qs = qs.filter(acronym__icontains=self.q).order_by('acronym')
     return qs
Exemple #2
0
 def get_queryset(self):
     country = self.forwarded.get('country', None)
     qs = find_additional_requirement_entities_choices()
     if country:
         qs = qs.exclude(entity__organization__type=MAIN).order_by('title')
         if country != "all":
             qs = qs.filter(entity__country_id=country)
     else:
         qs = find_pedagogical_entities_version().order_by('acronym')
     if self.q:
         qs = qs.filter(Q(title__icontains=self.q) | Q(acronym__icontains=self.q))
     return qs
Exemple #3
0
class ProposalLearningUnitForm(forms.ModelForm):
    entity = EntitiesVersionChoiceField(
        queryset=find_pedagogical_entities_version())

    def __init__(self, data, person, *args, initial=None, **kwargs):
        super().__init__(data, *args, initial=initial, **kwargs)
        self.fields[
            'entity'].queryset = person.find_main_entities_version.filter(
                Q(entity_type=FACULTY)
                | Q(acronym="ILV"))

        if initial:
            for key, value in initial.items():
                setattr(self.instance, key, value)

        if hasattr(self.instance, 'entity'):
            self.initial['entity'] = get_last_version(self.instance.entity)

        self.person = person
        if self.person.is_central_manager:
            self.enable_field('state')
        else:
            self.disable_field('state')
        self.disable_field('type')

    def disable_field(self, field):
        self.fields[field].disabled = True
        self.fields[field].required = False

    def enable_field(self, field):
        self.fields[field].disabled = False
        self.fields[field].required = True

    class Meta:
        model = ProposalLearningUnit
        fields = ['entity', 'folder_id', 'state', 'type']
        widgets = {
            'folder_id': forms.TextInput(),
        }

    def save(self, commit=True):
        if hasattr(self.instance, 'learning_unit_year'):
            # When we save a creation_proposal, we do not need to save the initial_data
            if self.instance.type != ProposalType.CREATION.name and not self.instance.initial_data:
                self.instance.initial_data = copy_learning_unit_data(
                    get_by_id(self.instance.learning_unit_year.id))
        return super().save(commit)
Exemple #4
0
class EntityContainerYearModelForm(forms.ModelForm):
    entity = EntitiesVersionChoiceField(queryset=find_pedagogical_entities_version())
    entity_type = ''

    def __init__(self, *args, **kwargs):
        self.person = kwargs.pop('person')

        super().__init__(*args, prefix=self.entity_type.lower(), **kwargs)

        self.fields['entity'].label = _(self.entity_type.lower())
        self.instance.type = self.entity_type

        if hasattr(self.instance, 'entity'):
            self.initial['entity'] = get_last_version(self.instance.entity).pk

    class Meta:
        model = EntityContainerYear
        fields = ['entity']

    def pre_save(self, learning_container_year):
        self.instance.learning_container_year = learning_container_year

    def save(self, commit=True):
        if hasattr(self.instance, 'entity'):
            return super().save(commit)
        elif self.instance.pk:
            # if the instance has no entity, it must be deleted
            self.instance.delete()

    @property
    def entity_version(self):
        return self.fields["entity"].entity_version

    def post_clean(self, start_date):
        entity = self.cleaned_data.get('entity')
        if not entity:
            return
Exemple #5
0
 def find_main_entities_version(self):
     return find_pedagogical_entities_version().filter(entity__in=self.linked_entities)
Exemple #6
0
 def find_main_entities_version(self):
     return find_pedagogical_entities_version().filter(
         entity__in=self.linked_entities)
Exemple #7
0
class LearningContainerYearModelForm(forms.ModelForm):
    # TODO :: Refactor code redundant code below for entity fields (requirement - allocation - additionnals)
    requirement_entity = EntitiesVersionChoiceField(
        widget=autocomplete.ModelSelect2(
            url='entity_requirement_autocomplete',
            attrs={
                'id':
                'id_requirement_entity',
                'data-html':
                True,
                'onchange':
                ('updateAdditionalEntityEditability(this.value, "id_additional_requirement_entity_1", false);'
                 'updateAdditionalEntityEditability(this.value, "id_additional_entity_1_country", false);'
                 'updateAdditionalEntityEditability(this.value, "id_additional_requirement_entity_2", true);'
                 'updateAdditionalEntityEditability(this.value, "id_additional_entity_2_country", true);'
                 ),
            },
            forward=['country_requirement_entity']),
        queryset=find_pedagogical_entities_version(),
        label=_('Requirement entity'))

    country_requirement_entity = CountryEntityField()

    allocation_entity = EntitiesVersionChoiceField(
        widget=autocomplete.ModelSelect2(url='allocation_entity_autocomplete',
                                         attrs={
                                             'id': 'allocation_entity',
                                             'data-html': True,
                                         },
                                         forward=['country_allocation_entity'
                                                  ]),
        queryset=find_pedagogical_entities_version(),
        label=_('Allocation entity'))

    country_allocation_entity = CountryEntityField()

    additional_entity_1 = EntitiesVersionChoiceField(
        required=False,
        widget=autocomplete.ModelSelect2(
            url='additional_entity_1_autocomplete',
            attrs={
                'id':
                'id_additional_requirement_entity_1',
                'data-html':
                True,
                'onchange':
                ('updateAdditionalEntityEditability(this.value, "id_additional_requirement_entity_2", false);'
                 'updateAdditionalEntityEditability(this.value, "id_additional_entity_2_country", false);'
                 'updateAdditionalEntityEditability(this.value, '
                 '"id_component-0-repartition_volume_additional_entity_1",'
                 ' false);'
                 'updateAdditionalEntityEditability(this.value, '
                 '"id_component-1-repartition_volume_additional_entity_1",'
                 ' false);'
                 'updateAdditionalEntityEditability(this.value,'
                 ' "id_component-0-repartition_volume_additional_entity_2",'
                 ' true);'
                 'updateAdditionalEntityEditability(this.value,'
                 ' "id_component-1-repartition_volume_additional_entity_2",'
                 ' true);'),
            },
            forward=['country_additional_entity_1']),
        queryset=find_additional_requirement_entities_choices(),
        label=_('Additional requirement entity 1'))

    country_additional_entity_1 = CountryEntityField(
        widget_attrs={'id': 'id_additional_entity_1_country'})

    additional_entity_2 = EntitiesVersionChoiceField(
        required=False,
        widget=autocomplete.ModelSelect2(
            url='additional_entity_2_autocomplete',
            attrs={
                'id':
                'id_additional_requirement_entity_2',
                'data-html':
                True,
                'onchange':
                ('updateAdditionalEntityEditability(this.value,'
                 ' "id_component-0-repartition_volume_additional_entity_2", false);'
                 'updateAdditionalEntityEditability(this.value,'
                 ' "id_component-1-repartition_volume_additional_entity_2", false);'
                 ),
            },
            forward=['country_additional_entity_2']),
        queryset=find_additional_requirement_entities_choices(),
        label=_('Additional requirement entity 2'))

    country_additional_entity_2 = CountryEntityField(
        widget_attrs={'id': 'id_additional_entity_2_country'})

    def __init__(self, *args, **kwargs):
        self.person = kwargs.pop('person')
        self.proposal = kwargs.pop('proposal', False)
        self.is_create_form = kwargs['instance'] is None
        super().__init__(*args, **kwargs)
        self.fields[
            'requirement_entity'].queryset = self.person.find_main_entities_version
        self.prepare_fields()

        if self.instance.requirement_entity:
            self.initial['requirement_entity'] = get_last_version(
                self.instance.requirement_entity).pk

        if self.instance.allocation_entity:
            self.initial['allocation_entity'] = get_last_version(
                self.instance.allocation_entity).pk

        if self.instance.additional_entity_1:
            self.initial['additional_entity_1'] = get_last_version(
                self.instance.additional_entity_1).pk

        if self.instance.additional_entity_2:
            self.initial['additional_entity_2'] = get_last_version(
                self.instance.additional_entity_2).pk

    def prepare_fields(self):
        self.fields['container_type'].widget.attrs = {
            'onchange': 'showInternshipSubtype()'
        }

        # Limit types for faculty_manager only if simple creation of learning_unit
        if self.person.is_faculty_manager and not self.proposal and self.is_create_form:
            self.fields[
                "container_type"].choices = _create_faculty_learning_container_type_list(
                )
        else:
            self.fields[
                "container_type"].choices = _create_learning_container_year_type_list(
                )

    def save(self, **kwargs):
        self.instance.learning_container = kwargs.pop('learning_container')
        self.instance.acronym = kwargs.pop('acronym')
        self.instance.academic_year = kwargs.pop('academic_year')
        self._reset_repartition_volumes_if_entity_removed()
        return super().save(**kwargs)

    def _reset_repartition_volumes_if_entity_removed(self):
        """In case an Entity was removed from container, need to reset repartition volume of this entity to None."""
        for entity_link_type in REQUIREMENT_ENTITIES:
            entity_container_attr = self.instance.get_attrs_by_entity_container_type(
            )[entity_link_type]
            entity = getattr(self.instance, entity_container_attr, None)
            if entity_container_attr in self.changed_data and not entity:
                repartition_attr_by_type = LearningComponentYear.repartition_volume_attrs_by_entity_container_type(
                )
                attr_name = repartition_attr_by_type[entity_link_type]
                qs = LearningComponentYear.objects.filter(
                    learning_unit_year__learning_container_year=self.instance)
                qs.update(**{attr_name: None})

    class Meta:
        model = LearningContainerYear
        fields = (
            'container_type',
            'common_title',
            'common_title_english',
            'type_declaration_vacant',
            'team',
            'is_vacant',
            'requirement_entity',
            'allocation_entity',
            'additional_entity_1',
            'additional_entity_2',
        )

    def post_clean(self, specific_title):
        if not self.instance.common_title and not specific_title:
            self.add_error(
                "common_title",
                _("You must either set the common title or the specific title")
            )

        return not self.errors

    @cached_property
    def additionnal_entity_version_1(self):
        return self.fields["additional_entity_1"].entity_version

    @cached_property
    def additionnal_entity_version_2(self):
        return self.fields["additional_entity_2"].entity_version
Exemple #8
0
 def __init__(self, queryset, *args, **kwargs):
     queryset = find_pedagogical_entities_version()
     super(MainEntitiesVersionChoiceField,
           self).__init__(queryset, *args, **kwargs)
Exemple #9
0
 def __init__(self, queryset, *args, **kwargs):
     queryset = find_pedagogical_entities_version()
     super(MainEntitiesVersionChoiceField, self).__init__(queryset, *args, **kwargs)