diff options
-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" |