diff options
Diffstat (limited to 'archaeological_operations/forms.py')
| -rw-r--r-- | archaeological_operations/forms.py | 70 | 
1 files changed, 58 insertions, 12 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index f5f0fea99..72834d8f0 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -1,6 +1,6 @@  #!/usr/bin/env python  # -*- coding: utf-8 -*- -# Copyright (C) 2010-2012  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2010-2013  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet>  # This program is free software: you can redistribute it and/or modify  # it under the terms of the GNU Affero General Public License as @@ -35,26 +35,37 @@ from django.utils.translation import ugettext_lazy as _  from ishtar_common.models import valid_id, PersonType, Person, Town  from archaeological_files.models import File  import models +from widgets import ParcelWidget  from ishtar_common import widgets -from ishtar_common.forms import FinalForm, FormSet, ClosingDateFormSelection, \ -     formset_factory, get_now, reverse_lazy, get_form_selection +from ishtar_common.forms import BaseFormSet, FinalForm, FormSet, \ +    ClosingDateFormSelection, formset_factory, get_now, reverse_lazy, \ +    get_form_selection, TableSelect  from ishtar_common.forms_common import TownForm, TownFormSet, TownFormset, \       AuthorFormset, SourceForm, SourceSelect, \       SourceDeletionForm, get_town_field +class ParcelField(forms.MultiValueField): +    def __init__(self, *args, **kwargs): +        if 'widget' not in kwargs: +            self.widget = ParcelWidget() +        return super(ParcelField, self).__init__(*args, **kwargs) + +    def compress(data_list): +        return u"-".join(data_list) +  class ParcelForm(forms.Form):      form_label = _("Parcels")      base_model = 'parcel'      associated_models = {'parcel':models.Parcel, 'town':models.Town}      town = forms.ChoiceField(label=_("Town"), choices=(), required=False,                               validators=[valid_id(models.Town)]) +    year = forms.IntegerField(label=_("Year"), required=False, +                           validators=[validators.MinValueValidator(1900), +                                       validators.MaxValueValidator(2100)])      section = forms.CharField(label=_(u"Section"), required=False,                               validators=[validators.MaxLengthValidator(4)])      parcel_number = forms.CharField(label=_(u"Parcel number"), required=False,                               validators=[validators.MaxLengthValidator(6)]) -    year = forms.IntegerField(label=_("Year"), required=False, -                           validators=[validators.MinValueValidator(1900), -                                       validators.MaxValueValidator(2100)])      def __init__(self, *args, **kwargs):          towns = None          if 'data' in kwargs and 'TOWNS' in kwargs['data']: @@ -74,9 +85,11 @@ class ParcelForm(forms.Form):          """Check required fields"""          if any(self.errors):              return -        if not self.cleaned_data or DELETION_FIELD_NAME in self.cleaned_data \ -           and self.cleaned_data[DELETION_FIELD_NAME]: +        if not self.cleaned_data or (DELETION_FIELD_NAME in self.cleaned_data \ +           and self.cleaned_data[DELETION_FIELD_NAME]):              return +        if not self.cleaned_data.get('parcel_number'): +            return {}          for key in ('town', 'parcel_number', 'section'):              if not key in self.cleaned_data or not self.cleaned_data[key]:                  raise forms.ValidationError(_(u"Town section and parcel number " @@ -84,23 +97,49 @@ class ParcelForm(forms.Form):          return self.cleaned_data  class ParcelFormSet(FormSet): +    def add_fields(self, form, index): +        super(FormSet, self).add_fields(form, index) +      def clean(self):          """Checks that no parcels are duplicated.""" -        return self.check_duplicate(('town', 'parcel_number', 'year'), -                                    _(u"There are identical parcels.")) +        return self.check_duplicate(('town', 'section', +                                     'parcel_number', 'year'), +                                     _(u"There are identical parcels."))  ParcelFormSet = formset_factory(ParcelForm, can_delete=True,                                  formset=ParcelFormSet)  ParcelFormSet.form_label = _(u"Parcels") -class OperationSelect(forms.Form): +class OperationSelect(TableSelect):      common_name = forms.CharField(label=_(u"Name"), max_length=30) +    if settings.COUNTRY == 'fr': +        code_patriarche = forms.IntegerField( +         widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \ +                     'autocomplete-patriarche/'), +         label="Code PATRIARCHE")      towns = get_town_field()      operation_type = forms.ChoiceField(label=_(u"Operation type"),                                         choices=[]) +    in_charge = forms.IntegerField( +        widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person', +          args=["_".join( +         [unicode(PersonType.objects.get(txt_idx='head_scientist').pk), +          unicode(PersonType.objects.get(txt_idx='sra_agent').pk)])]), +        associated_model=Person, new=True), label=_(u"In charge"))      remains = forms.ChoiceField(label=_(u"Remains"),                                  choices=models.RemainType.get_types()) +    periods = forms.ChoiceField(label=_(u"Periods"), +                                choices=models.Period.get_types())      year = forms.IntegerField(label=_("Year")) +    start_before = forms.DateField(label=_(u"Started before"), +                                   widget=widgets.JQueryDate) +    start_after = forms.DateField(label=_(u"Started after"), +                                  widget=widgets.JQueryDate) +    end_before = forms.DateField(label=_(u"Ended before"), +                                 widget=widgets.JQueryDate) +    end_after = forms.DateField(label=_(u"Ended after"), +                                widget=widgets.JQueryDate) +    parcel = ParcelField(label=_("Parcel (section/number)"))      end_date = forms.NullBooleanField(label=_(u"Is open?"))      def __init__(self, *args, **kwargs): @@ -108,6 +147,13 @@ class OperationSelect(forms.Form):          self.fields['operation_type'].choices = models.OperationType.get_types()          self.fields['operation_type'].help_text = models.OperationType.get_help() +    def get_input_ids(self): +        ids = super(OperationSelect, self).get_input_ids() +        ids.pop(ids.index('parcel')) +        ids.append('parcel_0') +        ids.append('parcel_1') +        return ids +  class OperationFormSelection(forms.Form):      form_label = _(u"Operation search")      associated_models = {'pk':models.Operation} @@ -406,7 +452,7 @@ OperationSourceFormSelection = get_form_selection(  # Administrative act management for operations #  ################################################ -class AdministrativeActOpeSelect(forms.Form): +class AdministrativeActOpeSelect(TableSelect):      operation__towns = get_town_field()      act_type = forms.ChoiceField(label=_("Act type"), choices=[])  | 
