summaryrefslogtreecommitdiff
path: root/archaeological_context_records
diff options
context:
space:
mode:
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
commit95f3bdd01e9adfe9e69da5a61ddb788f54d3a1e3 (patch)
tree467b157dea9c9e228d048b50a17524f877bf29bc /archaeological_context_records
parentba056933f0f33d03729b0bb445f073d693e305e1 (diff)
downloadIshtar-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.py56
-rw-r--r--archaeological_context_records/models.py35
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 = [