summaryrefslogtreecommitdiff
path: root/archaeological_files_pdl/forms.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-12-16 12:58:03 +0100
committerÉtienne Loks <etienne.loks@proxience.com>2015-12-16 12:58:03 +0100
commit19fcd922361b045894c0eeb56e095d785299909e (patch)
tree8349ee892781008e16401bacb4561f1dc14222bd /archaeological_files_pdl/forms.py
parent0bdb5d0ea73746ba44c5dac9132d130df771eba2 (diff)
downloadIshtar-19fcd922361b045894c0eeb56e095d785299909e.tar.bz2
Ishtar-19fcd922361b045894c0eeb56e095d785299909e.zip
Work on land-planner
Diffstat (limited to 'archaeological_files_pdl/forms.py')
-rw-r--r--archaeological_files_pdl/forms.py119
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"