diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-05-25 16:06:30 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-05-25 16:06:30 +0200 |
commit | 6ca01e3dbea08b018b6f21ac2d149e101f91a9c4 (patch) | |
tree | 467b157dea9c9e228d048b50a17524f877bf29bc | |
parent | 07437a1b608b6dc9b508ae0a5e4b033431795745 (diff) | |
download | Ishtar-6ca01e3dbea08b018b6f21ac2d149e101f91a9c4.tar.bz2 Ishtar-6ca01e3dbea08b018b6f21ac2d149e101f91a9c4.zip |
Search finds - context records: add missing search criterias for datings
-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( |