diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2014-12-28 01:15:07 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2015-05-06 15:38:32 +0200 |
commit | 086cb36acde4343f5e4dc8dc18a70cdbd8512c33 (patch) | |
tree | cf7782840ce79aee720cf3b6c55571ab0b2e7c8e /archaeological_files_pdl/forms.py | |
parent | ee6a1eb3588da3c6c1c3f0e75691541cea2d37ab (diff) | |
download | Ishtar-086cb36acde4343f5e4dc8dc18a70cdbd8512c33.tar.bz2 Ishtar-086cb36acde4343f5e4dc8dc18a70cdbd8512c33.zip |
Work on dynamic (too much of ajax and JS...) person/organization widget
Diffstat (limited to 'archaeological_files_pdl/forms.py')
-rw-r--r-- | archaeological_files_pdl/forms.py | 89 |
1 files changed, 86 insertions, 3 deletions
diff --git a/archaeological_files_pdl/forms.py b/archaeological_files_pdl/forms.py index aedf60ba1..fc4efff73 100644 --- a/archaeological_files_pdl/forms.py +++ b/archaeological_files_pdl/forms.py @@ -23,11 +23,13 @@ from django import forms from django.core import validators from django.utils.translation import ugettext_lazy as _ -from ishtar_common.models import Person +from ishtar_common.models import Person, valid_id from archaeological_files import models -from ishtar_common.forms import get_now +from ishtar_common.forms import get_now, reverse_lazy from ishtar_common.forms_common import get_town_field +from archaeological_files.forms import GENERAL_CONTRACTOR, \ + RESPONSIBLE_PLANNING_SERVICE from ishtar_common import widgets @@ -65,7 +67,6 @@ class FileFormPreventiveType(forms.Form): default='NP') self.fields['permit_type'].help_text = models.PermitType.get_help() - class FileFormPlanning(forms.Form): form_label = _(u"Planning") associated_models = {'town':models.Town} @@ -87,3 +88,85 @@ class FileFormPlanning(forms.Form): label=_(u"Total developed surface (m²)"), required=False, validators=[validators.MinValueValidator(0), validators.MaxValueValidator(999999999)]) + +class FileFormGeneralContractor(forms.Form): + form_label = _(u"General contractor") + associated_models = {'general_contractor':models.Person} + + def __init__(self, *args, **kwargs): + + # get the status: natural person or corporation + DEFAULT_STATUS = 'natural' + current_status = '' + if 'data' in kwargs: + current_item_key = ((kwargs['prefix'] + '-') if kwargs.get('prefix')\ + else '') + 'general_contractor' + if kwargs['data'] and kwargs['data'].get(current_item_key): + model = self.associated_models['general_contractor'] + try: + item = model.objects.get(pk=kwargs['data'][current_item_key]) + current_status = 'natural' if item.is_natural() \ + 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 + + if status not in ('natural', 'corporation'): + status = DEFAULT_STATUS + super(FileFormGeneralContractor, self).__init__(*args, **kwargs) + + # distinct widget for natural and corporation + if status == 'natural': + self.fields['general_contractor'] = forms.IntegerField( + label=_(u"General contractor"), + widget=widgets.JQueryPersonOrganization( + reverse_lazy('autocomplete-person', + args=[GENERAL_CONTRACTOR.pk]), + reverse_lazy('person_create'), + model=Person, + limit={'person_types':[GENERAL_CONTRACTOR.pk], + 'attached_to__isnull':True}, + js_template='ishtar/blocks/JQueryNaturalPerson.js', + new=True), + validators=[valid_id(Person)]) + else: + self.fields['general_contractor'] = forms.IntegerField( + label=_(u"General contractor"), + widget=widgets.JQueryPersonOrganization( + reverse_lazy('autocomplete-person', + args=[GENERAL_CONTRACTOR.pk]), + reverse_lazy('organization_person_create'), + model=Person, + limit={'person_types':[GENERAL_CONTRACTOR.pk]}, + js_template='ishtar/blocks/JQueryCorporationPerson.js', + new=True), + validators=[valid_id(Person)]) + +class FileFormPlanningService(forms.Form): + form_label = _(u"Town planning service") + associated_models = {'responsible_planning_service':models.Person} + + def __init__(self, *args, **kwargs): + super(FileFormPlanningService, self).__init__(*args, **kwargs) + self.fields['responsible_planning_service'] = forms.IntegerField( + label=_(u"Responsible town planning service"), + widget=widgets.JQueryPersonOrganization( + reverse_lazy('autocomplete-person', + args=[RESPONSIBLE_PLANNING_SERVICE.pk]), + reverse_lazy('person_create'), + model=Person, + limit={'person_types':[RESPONSIBLE_PLANNING_SERVICE.pk]}, + new=True), + validators=[valid_id(Person)]) + |