summaryrefslogtreecommitdiff
path: root/archaeological_files_pdl/forms.py
diff options
context:
space:
mode:
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
commit086cb36acde4343f5e4dc8dc18a70cdbd8512c33 (patch)
treecf7782840ce79aee720cf3b6c55571ab0b2e7c8e /archaeological_files_pdl/forms.py
parentee6a1eb3588da3c6c1c3f0e75691541cea2d37ab (diff)
downloadIshtar-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.py89
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)])
+