diff options
Diffstat (limited to 'archaeological_files_pdl/forms.py')
| -rw-r--r-- | archaeological_files_pdl/forms.py | 208 | 
1 files changed, 202 insertions, 6 deletions
| diff --git a/archaeological_files_pdl/forms.py b/archaeological_files_pdl/forms.py index 87221f24c..53d473b96 100644 --- a/archaeological_files_pdl/forms.py +++ b/archaeological_files_pdl/forms.py @@ -21,20 +21,22 @@ import datetime  from django import forms  from django.core import validators +from django.utils.safestring import mark_safe  from django.utils.translation import ugettext_lazy as _ -from ishtar_common.models import Person +from ishtar_common.models import Person, PersonType, 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_advanced_town_field +from archaeological_files.forms import GENERAL_CONTRACTOR, \ +                                       RESPONSIBLE_PLANNING_SERVICE  from ishtar_common import widgets  class FileFormGeneral(forms.Form):      form_label = _("General") -    associated_models = {'in_charge':Person, -                         'related_file':models.File, -                         'file_type':models.FileType} +    associated_models = {'file_type':models.FileType}      file_type = forms.ChoiceField(label=_("File type"), choices=[])      year = forms.IntegerField(label=_("Year"),                                initial=lambda:datetime.datetime.now().year, @@ -43,9 +45,203 @@ class FileFormGeneral(forms.Form):      creation_date = forms.DateField(label=_(u"Creation date"),                                      initial=get_now, widget=widgets.JQueryDate)      reception_date = forms.DateField(label=_(u"Reception date"), -                                    initial=get_now, widget=widgets.JQueryDate) +                                     widget=widgets.JQueryDate)      def __init__(self, *args, **kwargs):          super(FileFormGeneral, self).__init__(*args, **kwargs)          self.fields['file_type'].choices = models.FileType.get_types()          self.fields['file_type'].help_text = models.FileType.get_help() + +class FileFormPreventiveType(forms.Form): +    form_label = u"Saisine" +    associated_models = {'saisine_type':models.SaisineType, +                         'permit_type':models.PermitType} +    permit_type = forms.ChoiceField(label=_(u"Permit type"), required=False, +                                    choices=[]) +    saisine_type = forms.ChoiceField(label=_(u"Saisine type"), +                                     choices=[]) +    def __init__(self, *args, **kwargs): +        super(FileFormPreventiveType, self).__init__(*args, **kwargs) +        self.fields['saisine_type'].choices = models.SaisineType.get_types() +        self.fields['saisine_type'].help_text = models.SaisineType.get_help() +        self.fields['permit_type'].choices = models.PermitType.get_types( +                                                              default='NP') +        self.fields['permit_type'].help_text = models.PermitType.get_help() + +class FileFormPlanning(forms.Form): +    form_label = _(u"Planning") +    associated_models = {'main_town':models.Town} +    name = forms.CharField(label=_(u"Planning name"), required=False, +                           max_length=100) +    main_town = get_advanced_town_field(required=True) +    locality = forms.CharField(label=_(u"Locality"), max_length=100, +                               required=False) +    address = forms.CharField(label=_(u"Address (number/street)"), +                              widget=forms.Textarea( +                                    attrs={"placeholder":_(u"Number/street")}), +                              required=False, +                              ) +    postal_code = forms.CharField(label=_(u"Postal code"), max_length=10, +                                  required=False) +    total_surface = forms.IntegerField(required=False, +                           widget=widgets.AreaWidget, +                           label=_(u"Total surface (m²)"), +                           validators=[validators.MinValueValidator(0), +                                       validators.MaxValueValidator(999999999)]) +    total_developed_surface = forms.IntegerField(widget=widgets.AreaWidget, +           label=_(u"Total developed surface (m²)"), +           required=False, validators=[validators.MinValueValidator(0), +                                       validators.MaxValueValidator(999999999)]) + +class FileFormResearchAddress(forms.Form): +    form_label = _(u"Address") +    associated_models = {'main_town':models.Town} +    main_town = get_advanced_town_field(required=True) +    locality = forms.CharField(label=_(u"Locality"), max_length=100, +                               required=False) +    address = forms.CharField(label=_(u"Address (number/street)"), +                              widget=forms.Textarea( +                                    attrs={"placeholder":_(u"Number/street")}), +                              required=False, +                              ) +    postal_code = forms.CharField(label=_(u"Postal code"), max_length=10, +                                  required=False) + +class PersonOrgaForm(forms.Form): +    PERSON_FIELD = 'TO BE DEFINED' +    ORGA_FIELD = 'TO BE DEFINED' +    PERSON_TYPE = GENERAL_CONTRACTOR + +    def _media(self): +        if self.status == 'corporation': +            return forms.Media(js=('pdl/JQueryCorporation.js',)) +    media = property(_media) + +    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 '') + self.PERSON_FIELD +            if kwargs['data'] and kwargs['data'].get(current_item_key): +                model = self.associated_models[self.PERSON_FIELD] +                try: +                    item = model.objects.get(pk=kwargs['data'][current_item_key]) +                    current_status = 'natural' +                except (model.DoesNotExist, ValueError): +                    pass +            current_item_key = ((kwargs['prefix'] + '-') if kwargs.get('prefix')\ +                                         else '') + self.ORGA_FIELD +            if kwargs['data'] and kwargs['data'].get(current_item_key): +                current_status = 'corporation' + +        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.fields[self.ORGA_FIELD].label, +             required=False, +             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)]) + +class FileFormGeneralContractor(PersonOrgaForm): +    form_label = _(u"General contractor") +    associated_models = {'general_contractor':models.Person} +    raw_general_contractor = forms.CharField(label=_(u"General contractor"), +                                            required=False, max_length=200) +    PERSON_FIELD = 'general_contractor' +    ORGA_FIELD = 'raw_general_contractor' +    PERSON_TYPE = GENERAL_CONTRACTOR + +class FileFormPlanningService(PersonOrgaForm): +    form_label = _(u"Town planning service") +    associated_models = {'responsible_town_planning_service':models.Person} + +    reference_number = forms.IntegerField(label=_(u"File reference"), +                                          required=False) +    raw_town_planning_service = forms.CharField( +            label=_(u"Responsible town planning service"), required=False, +            max_length=200) +    PERSON_FIELD = 'responsible_town_planning_service' +    ORGA_FIELD = 'raw_town_planning_service' +    PERSON_TYPE = RESPONSIBLE_PLANNING_SERVICE + +    def __init__(self, *args, **kwargs): +        super(FileFormPlanningService, self).__init__(*args, **kwargs) +        self.fields.keyOrder = [] +        if self.ORGA_FIELD in self.fields: +            self.fields.keyOrder.append(self.ORGA_FIELD) +        elif self.PERSON_FIELD in self.fields: +            self.fields.keyOrder.append(self.PERSON_FIELD) +        self.fields.keyOrder.append('reference_number') + +class FileFormInstruction(forms.Form): +    form_label = u"Instruction SRA" +    associated_models = {'in_charge':models.Person} +    in_charge = forms.IntegerField(label=_("Person in charge"), +        widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person', +          args=[PersonType.objects.get(txt_idx='sra_agent').pk]), +        limit={'person_types':[PersonType.objects.get(txt_idx='sra_agent').pk]}, +        associated_model=Person, new=True), +        validators=[valid_id(Person)]) +    related_file = forms.IntegerField(label=_("Related file"), required=False, +         widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-file'), +                                           associated_model=models.File), +         validators=[valid_id(models.File)]) +    comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, +                              required=False) +    instruction_deadline = forms.DateField(widget=widgets.JQueryDate, +                                           required=False) +    year = forms.IntegerField(label=_("Year"), +                              validators=[validators.MinValueValidator(1900), +                                          validators.MaxValueValidator(2100)]) +    numeric_reference = forms.IntegerField(label=_("Numeric reference"), +                                           required=False) +    end_date = forms.DateField(initial=get_now, widget=widgets.JQueryDate, +                               required=False) + +    def __init__(self, *args, **kwargs): +        c_year = datetime.date.today().year +        if 'year' in kwargs: +            c_year = kwargs.pop('year') +        super(FileFormInstruction, self).__init__(*args, **kwargs) +        self.fields['year'].initial = c_year +        self.fields['year'].widget.attrs.update({'readonly':'readonly'}) +        c_num, lasts = 0, "" +        q = models.File.objects.filter(numeric_reference__isnull=False, +                        year=c_year).order_by('-numeric_reference') +        if q.count(): +            num = q.all()[0].numeric_reference +            lasts = u"SRA %s-%d" % (unicode(c_year), num) +        lbl = self.fields['numeric_reference'].label +        if lasts: +            lbl += u"<br/>(dernière entrée : %s)" % lasts +        self.fields['numeric_reference'].label = mark_safe(lbl) +        self.fields['numeric_reference'].initial = c_num + 1 | 
