diff options
Diffstat (limited to 'archaeological_finds/forms.py')
-rw-r--r-- | archaeological_finds/forms.py | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 9441e6899..d05b67470 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -43,6 +43,7 @@ from ishtar_common.forms import FormSet, FloatField, \ ManageOldType from ishtar_common.forms_common import get_town_field, SourceSelect +from ishtar_common.utils import convert_coordinates_to_point from ishtar_common import widgets from archaeological_operations.widgets import OAWidget @@ -157,10 +158,21 @@ class FindForm(ManageOldType, forms.Form): remarkabilitie = forms.MultipleChoiceField( label=_(u"Remarkability"), choices=[], widget=widgets.CheckboxSelectMultiple, required=False) - topographic_reference_point = forms.CharField( + get_first_base_find__topographic_localisation = forms.CharField( label=_(u"Point of topographic reference"), - required=False, max_length=20 + required=False, max_length=120 ) + get_first_base_find__x = forms.FloatField(label=_(u"X"), required=False) + get_first_base_find__estimated_error_x = \ + forms.FloatField(label=_(u"Estimated error for X"), required=False) + get_first_base_find__y = forms.FloatField(label=_(u"Y"), required=False) + get_first_base_find__estimated_error_y = \ + forms.FloatField(label=_(u"Estimated error for Y"), required=False) + get_first_base_find__z = forms.FloatField(label=_(u"Z"), required=False) + get_first_base_find__estimated_error_z = \ + forms.FloatField(label=_(u"Estimated error for Z"), required=False) + get_first_base_find__spatial_reference_system = \ + forms.FloatField(label=_(u"Spatial Reference System"), required=False) length = FloatField(label=_(u"Length (cm)"), required=False) width = FloatField(label=_(u"Width (cm)"), required=False) height = FloatField(label=_(u"Height (cm)"), required=False) @@ -192,6 +204,14 @@ class FindForm(ManageOldType, forms.Form): def __init__(self, *args, **kwargs): super(FindForm, self).__init__(*args, **kwargs) + if not get_current_profile().mapping: + for k in ['get_first_base_find__x', 'get_first_base_find__y', + 'get_first_base_find__z', + 'get_first_base_find__estimated_error_x', + 'get_first_base_find__estimated_error_y', + 'get_first_base_find__estimated_error_z', + 'get_first_base_find__spatial_reference_system',]: + self.fields.pop(k) self.fields['checked'].choices = models.CHECK_CHOICES self.fields['material_type'].help_text = models.MaterialType.get_help() self.fields['conservatory_state'].choices = \ @@ -221,6 +241,28 @@ class FindForm(ManageOldType, forms.Form): unicode(self.fields['estimated_value'].label), get_current_profile().currency) + def clean(self): + if not get_current_profile().mapping: + return self.cleaned_data + x = self.cleaned_data.get('get_first_base_find__x', None) + y = self.cleaned_data.get('get_first_base_find__y', None) + s = 'get_first_base_find__get_first_base_find__spatial_reference_system' + srs = self.cleaned_data.get(s, None) + if x and y and not srs: + raise forms.ValidationError( + _(u"You should at least provide X, Y and the spatial " + u"reference system used.")) + if x and y and srs: + try: + convert_coordinates_to_point( + x, y, self.cleaned_data.get('get_first_base_find__z', None), + srs.srid) + except forms.ValidationError as e: + raise forms.ValidationError( + unicode(_(u"Coordinates are not relevant for the spatial " + u"reference system used: {}.")).format(e)) + return self.cleaned_data + class DateForm(ManageOldType, forms.Form): form_label = _("Dating") |