diff options
| -rw-r--r-- | archaeological_context_records/forms.py | 56 | ||||
| -rw-r--r-- | archaeological_context_records/models.py | 35 | ||||
| -rw-r--r-- | archaeological_finds/forms.py | 10 | ||||
| -rw-r--r-- | archaeological_finds/models_finds.py | 5 | 
4 files changed, 94 insertions, 12 deletions
| diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py index 5ed9935e9..91c2fdf63 100644 --- a/archaeological_context_records/forms.py +++ b/archaeological_context_records/forms.py @@ -20,6 +20,7 @@  """  Context records forms definitions  """ +from collections import OrderedDict  from itertools import groupby  from django import forms @@ -60,7 +61,50 @@ class OperationFormSelection(CustomForm, forms.Form):          validators=[valid_id(Operation)]) -class RecordSelect(DocumentItemSelect): +class PeriodSelect(forms.Form): +    datings__period = forms.ChoiceField(label=_("Dating - period"), +                                        choices=[]) +    datings__precise_dating = forms.CharField( +        label=_("Dating - precise")) +    datings__start_date__before = forms.IntegerField( +        label=_("Dating - start date before")) +    datings__start_date__after = forms.IntegerField( +        label=_("Dating - start date after")) +    datings__end_date__before = forms.IntegerField( +        label=_("Dating - end date before")) +    datings__end_date__after = forms.IntegerField( +        label=_("Dating - end date after")) +    datings__dating_type = forms.ChoiceField(label=_("Dating - dating type"), +                                             choices=[]) +    datings__quality = forms.ChoiceField(label=_("Dating - dating quality"), +                                         choices=[]) +    TYPES = [ +        FieldType('datings__period', Period), +        FieldType('datings__dating_type', models.DatingType), +        FieldType('datings__quality', models.DatingQuality), +    ] +    PERIOD_FIELDS = ["datings__period", +                     "datings__precise_dating", +                     "datings__start_date__before", +                     "datings__start_date__after", +                     "datings__end_date__before", +                     "datings__end_date__after", +                     "datings__dating_type", +                     "datings__quality"] + +    def _reorder_period_fields(self, insert_period_after): +        fields = OrderedDict() +        for key in self.fields: +            if key in self.PERIOD_FIELDS: +                continue +            fields[key] = self.fields[key] +            if key == insert_period_after: +                for period_key in self.PERIOD_FIELDS: +                    fields[period_key] = self.fields[period_key] +        self.fields = fields + + +class RecordSelect(DocumentItemSelect, PeriodSelect):      _model = models.ContextRecord      form_admin_name = _(u"Context record - 001 - Search")      form_slug = "contextrecord-001-search" @@ -87,20 +131,22 @@ class RecordSelect(DocumentItemSelect):          validators=[valid_id(ArchaeologicalSite)])      ope_relation_types = forms.ChoiceField(          label=_(u"Search within related operations"), choices=[]) -    datings__period = forms.ChoiceField(label=_(u"Period"), choices=[])      unit = forms.ChoiceField(label=_(u"Unit type"), choices=[])      parcel = forms.CharField(label=_(u"Parcel"))      cr_relation_types = forms.ChoiceField(          label=_(u"Search within relations"), choices=[]) -    TYPES = [ -        FieldType('datings__period', Period), +    TYPES = PeriodSelect.TYPES + [          FieldType('unit', models.Unit),          FieldType('cr_relation_types', models.RelationType),          FieldType('ope_relation_types', OpeRelationType),      ]      SITE_KEYS = {"archaeological_site": None} +    def __init__(self, *args, **kwargs): +        super(RecordSelect, self).__init__(*args, **kwargs) +        self._reorder_period_fields("unit") +      def get_input_ids(self):          ids = super(RecordSelect, self).get_input_ids()          if 'cr_relation_types' in ids: @@ -337,6 +383,8 @@ class DatingForm(ManageOldType, forms.Form):      quality = forms.ChoiceField(label=_("Quality"), required=False, choices=[])      dating_type = forms.ChoiceField(label=_("Dating type"), required=False,                                      choices=[]) +    precise_dating = forms.CharField(label=_("Precise dating"), +                                     required=False)      TYPES = [          FieldType('dating_type', models.DatingType), diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index 4b25366f0..6bf8bc6be 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.py @@ -82,6 +82,40 @@ class Dating(models.Model):      precise_dating = models.TextField(_("Precise dating"), blank=True,                                        null=True)      objects = UUIDModelManager() +    ASSOCIATED_ALT_NAMES = { +        'datings__period': SearchAltName( +            pgettext_lazy("key for text search", "datings-period"), +            'datings__period__label__iexact' +        ), +        "datings__precise_dating": SearchAltName( +            pgettext_lazy("key for text search", "datings-precise"), +            'datings__precise_dating__iexact' +        ), +        "datings__start_date__before": SearchAltName( +            pgettext_lazy("key for text search", "datings-start-before"), +            'datings__start_date__lte' +        ), +        "datings__start_date__after": SearchAltName( +            pgettext_lazy("key for text search", "datings-start-after"), +            'datings__start_date__gte' +        ), +        "datings__end_date__before": SearchAltName( +            pgettext_lazy("key for text search", "datings-end-before"), +            'datings__end_date__lte' +        ), +        "datings__end_date__after": SearchAltName( +            pgettext_lazy("key for text search", "datings-end-after"), +            'datings__end_date__gte' +        ), +        "datings__dating_type": SearchAltName( +            pgettext_lazy("key for text search", "datings-type"), +            'datings__dating_type__label__iexact' +        ), +        "datings__quality": SearchAltName( +            pgettext_lazy("key for text search", "datings-quality"), +            'datings__quality__label__iexact' +        ) +    }      class Meta:          verbose_name = _("Dating") @@ -424,6 +458,7 @@ class ContextRecord(BulkUpdatedItem, DocumentItem, BaseHistorizedItem,      }      ALT_NAMES.update(BaseHistorizedItem.ALT_NAMES)      ALT_NAMES.update(DocumentItem.ALT_NAMES) +    ALT_NAMES.update(Dating.ASSOCIATED_ALT_NAMES)      PARENT_ONLY_SEARCH_VECTORS = ["operation", "archaeological_site", "parcel"]      BASE_SEARCH_VECTORS = [ diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 7cbbca81c..504998528 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -53,11 +53,14 @@ from archaeological_operations.widgets import OAWidget  from archaeological_warehouse.models import Warehouse  from bootstrap_datepicker.widgets import DatePicker  from ishtar_common import widgets +  from ishtar_common.forms import CustomForm, CustomFormSearch, FormSet, \      FloatField, reverse_lazy, TableSelect, get_now, FinalForm, \      ManageOldType, FieldType, IshtarForm, FormHeader, QAForm, \      MultiSearchForm, LockForm, DocumentItemSelect  from ishtar_common.forms_common import get_town_field +from archaeological_context_records.forms import PeriodSelect +  from ishtar_common.models import valid_id, valid_ids, get_current_profile, \      SpatialReferenceSystem, Area, OperationType, IshtarUser  from ishtar_common.utils import convert_coordinates_to_point @@ -908,7 +911,7 @@ DatingFormSet.form_admin_name = _(u"Find - 040 - Dating")  DatingFormSet.form_slug = "find-040-dating" -class FindSelect(DocumentItemSelect): +class FindSelect(DocumentItemSelect, PeriodSelect):      _model = models.Find      form_admin_name = _("Find - 001 - Search")      form_slug = "find-001-search" @@ -1076,7 +1079,6 @@ class FindSelect(DocumentItemSelect):      cultural_attributions = forms.ChoiceField(          label=_("Cultural attribution"), choices=[], required=False) -    datings__period = forms.ChoiceField(label=_(u"Period"), choices=[])      dating_comment = forms.CharField(label=_(u"Comment on dating"))      length__higher = FloatField(label=_(u"Length - higher than (cm)"), @@ -1187,8 +1189,7 @@ class FindSelect(DocumentItemSelect):          label=_(u"Treatment file end date before"), widget=DatePicker      ) -    TYPES = [ -        FieldType('datings__period', Period), +    TYPES = PeriodSelect.TYPES + [          FieldType('conservatory_state', models.ConservatoryState),          FieldType('base_finds__batch', models.BatchType),          FieldType('preservation_to_considers', models.TreatmentType), @@ -1221,6 +1222,7 @@ class FindSelect(DocumentItemSelect):          if 'cr_relation_types' in self.fields:              self.fields['cr_relation_types'].choices = CRRelationType.get_types(                  ) +        self._reorder_period_fields("cultural_attributions")      def get_input_ids(self):          ids = super(FindSelect, self).get_input_ids() diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 68a7bfe51..51df74c20 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -1004,10 +1004,6 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem,                  pgettext_lazy("key for text search",                                "context-record-relation-type"),                  'cr_relation_types'), -        'datings__period': -            SearchAltName( -                pgettext_lazy("key for text search", "period"), -                'datings__period__label__iexact'),          'material_types':              SearchAltName(                  pgettext_lazy("key for text search", "material"), @@ -1363,6 +1359,7 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem,      }      ALT_NAMES.update(BaseHistorizedItem.ALT_NAMES)      ALT_NAMES.update(DocumentItem.ALT_NAMES) +    ALT_NAMES.update(Dating.ASSOCIATED_ALT_NAMES)      DYNAMIC_REQUESTS = {          'current_division': DynamicRequest( | 
