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=[]) |
