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 | 3b557c928dc57942d4e9496b7730504bc44ad1eb (patch) | |
| tree | cf7782840ce79aee720cf3b6c55571ab0b2e7c8e /archaeological_files_pdl/forms.py | |
| parent | 16fbb32b8ba00325a7b813825f288cb097699c98 (diff) | |
| download | Ishtar-3b557c928dc57942d4e9496b7730504bc44ad1eb.tar.bz2 Ishtar-3b557c928dc57942d4e9496b7730504bc44ad1eb.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)]) + | 
