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 | 95f3bdd01e9adfe9e69da5a61ddb788f54d3a1e3 (patch) | |
tree | 467b157dea9c9e228d048b50a17524f877bf29bc /archaeological_context_records | |
parent | ba056933f0f33d03729b0bb445f073d693e305e1 (diff) | |
download | Ishtar-95f3bdd01e9adfe9e69da5a61ddb788f54d3a1e3.tar.bz2 Ishtar-95f3bdd01e9adfe9e69da5a61ddb788f54d3a1e3.zip |
Search finds - context records: add missing search criterias for datings
Diffstat (limited to 'archaeological_context_records')
-rw-r--r-- | archaeological_context_records/forms.py | 56 | ||||
-rw-r--r-- | archaeological_context_records/models.py | 35 |
2 files changed, 87 insertions, 4 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 = [ |