summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_context_records/forms.py56
-rw-r--r--archaeological_context_records/models.py35
-rw-r--r--archaeological_finds/forms.py10
-rw-r--r--archaeological_finds/models_finds.py5
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(