diff options
Diffstat (limited to 'archaeological_files_pdl/forms.py')
| -rw-r--r-- | archaeological_files_pdl/forms.py | 119 | 
1 files changed, 110 insertions, 9 deletions
| diff --git a/archaeological_files_pdl/forms.py b/archaeological_files_pdl/forms.py index f9b8b2484..3ae35d065 100644 --- a/archaeological_files_pdl/forms.py +++ b/archaeological_files_pdl/forms.py @@ -229,6 +229,35 @@ class FileFormGeneralContractor(PersonOrgaForm):      form_label = _(u"General contractor")      associated_models = {'general_contractor': models.Person,                           'corporation_general_contractor': models.Organization} +    corporation_general_contractor = forms.IntegerField( +        label=_("General contractor"), +        required=False, +        widget=widgets.JQueryPersonOrganization( +            reverse_lazy('autocomplete-organization', +                         args=[GENERAL_CONTRACTOR_ORGA.pk]), +            reverse_lazy('organization_create'), +            model=models.Organization, +            limit={ +                'organization_type': [GENERAL_CONTRACTOR_ORGA.pk] +            }, +            js_template='ishtar/blocks/JQueryCorporationPerson.js', +            new=True), +        validators=[valid_id(models.Organization)] +    ) +    general_contractor = forms.IntegerField( +        label=_(u"In charge"), +        required=False, +        widget=widgets.JQueryAutoComplete( +            reverse_lazy('autocomplete-person', +                         args=[GENERAL_CONTRACTOR.pk]), +            associated_model=Person, +            limit={'person_types': [GENERAL_CONTRACTOR.pk]}, +            dynamic_limit=['general_contractor'], +            url_new='new-person-noorga', +            new=True), +        validators=[valid_id(Person)] +    ) +      PERSON_FIELD = 'general_contractor'      PERSON_TYPE = GENERAL_CONTRACTOR      PERSON_LABEL = _(u"General contractor") @@ -236,11 +265,87 @@ class FileFormGeneralContractor(PersonOrgaForm):      ORGA_TYPE = GENERAL_CONTRACTOR_ORGA      ORGA_LABEL = _(u"General contractor") -    # default initialisation before dynamic -    general_contractor = forms.IntegerField( -        label=" ", widget=forms.HiddenInput, required=False) -    corporation_general_contractor = forms.IntegerField( -        label=" ", widget=forms.HiddenInput, required=False) +    def __init__(self, *args, **kwargs): +        # get the status: natural person or corporation +        DEFAULT_STATUS = 'natural' +        current_status = '' +        if 'data' in kwargs: +            # the order is important: PERSON can have an ORGA +            for field in [self.ORGA_FIELD, self.PERSON_FIELD]: +                current_item_key = ( +                    (kwargs['prefix'] + '-') +                    if kwargs.get('prefix') else '') + field +                if kwargs['data'] and kwargs['data'].get(current_item_key): +                    model = self.associated_models[field] +                    try: +                        model.objects.get( +                            pk=kwargs['data'][current_item_key]) +                        current_status = 'natural' \ +                            if field == self.PERSON_FIELD else 'corporation' +                    except (model.DoesNotExist, ValueError): +                        pass +        initial = kwargs.get("initial", {}) +        if not current_status: +            # the order is important: PERSON can have an ORGA +            for field in [self.ORGA_FIELD, self.PERSON_FIELD]: +                value = initial.get(field) +                model = self.associated_models[field] +                try: +                    model.objects.get(pk=value) +                    current_status = 'natural' if field == self.PERSON_FIELD \ +                        else 'corporation' +                except (model.DoesNotExist, ValueError): +                    pass +        status = '' +        if 'status' in kwargs: +            status = kwargs.pop('status') +            if current_status != status: +                if kwargs.get('data'): +                    # status is different from the existing - clear fields +                    kwargs.pop('data') +        elif current_status: +            status = current_status +        else: +            status = DEFAULT_STATUS + +        self.status = status + +        if status not in ('natural', 'corporation'): +            status = DEFAULT_STATUS + +        super(PersonOrgaForm, self).__init__(*args, **kwargs) + +        # distinct widget for natural and corporation +        if status == 'natural': +            self.fields[self.PERSON_FIELD] = forms.IntegerField( +                label=self.PERSON_LABEL, +                required=False, +                initial=initial.get(self.PERSON_FIELD, None), +                widget=widgets.JQueryPersonOrganization( +                    reverse_lazy('autocomplete-person', +                                 args=[self.PERSON_TYPE.pk]), +                    reverse_lazy('person_create'), +                    model=Person, +                    limit={'person_types': [self.PERSON_TYPE.pk], +                           'attached_to__isnull': True}, +                    js_template='ishtar/blocks/JQueryNaturalPerson.js', +                    new=True), +                validators=[valid_id(Person)]) +        """ +        else: +            self.fields[self.ORGA_FIELD] = forms.IntegerField( +                label=self.ORGA_LABEL, +                required=False, +                initial=initial.get(self.ORGA_FIELD, None), +                widget=widgets.JQueryPersonOrganization( +                    reverse_lazy('autocomplete-organization', +                                 args=[self.ORGA_TYPE.pk]), +                    reverse_lazy('organization_create'), +                    model=models.Organization, +                    limit={'organization_type': [self.ORGA_TYPE.pk]}, +                    js_template='ishtar/blocks/JQueryCorporationPerson.js', +                    new=True), +                validators=[valid_id(models.Organization)])"""  class FileFormPlanningService(forms.Form): @@ -279,10 +384,6 @@ class FileFormPlanningService(forms.Form):          validators=[valid_id(Person)]      ) -    def is_valid(self, *args, **kwargs): -        c = super(FileFormPlanningService, self).is_valid(*args, **kwargs) -        return c -  class FileFormInstruction(forms.Form):      form_label = u"Instruction SRA" | 
