summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2026-04-01 15:58:39 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2026-04-02 13:30:50 +0200
commit205ad98138447af4b86cd11d38c3c382ea1656cd (patch)
tree221ada912a6f6f74cfd4699b30bd0a2488b4a586
parent986d6c2c372df1bf1962533e4a24080da4d79c8a (diff)
downloadIshtar-205ad98138447af4b86cd11d38c3c382ea1656cd.tar.bz2
Ishtar-205ad98138447af4b86cd11d38c3c382ea1656cd.zip
♻ refactor dating fields searches
-rw-r--r--archaeological_context_records/forms.py45
-rw-r--r--archaeological_context_records/models.py10
-rw-r--r--archaeological_finds/forms.py6
-rw-r--r--archaeological_finds/models_finds.py5
-rw-r--r--ishtar_common/forms.py41
-rw-r--r--ishtar_common/models.py29
6 files changed, 84 insertions, 52 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py
index 93ff65c25..0e5b752eb 100644
--- a/archaeological_context_records/forms.py
+++ b/archaeological_context_records/forms.py
@@ -20,7 +20,6 @@
"""
Context records forms definitions
"""
-from collections import OrderedDict
from copy import copy
from itertools import groupby
@@ -54,6 +53,7 @@ from ishtar_common.forms import (
MultiSearchForm,
LockForm,
GeoItemSelect,
+ DatingSelect,
QAForm,
)
from ishtar_common.forms_common import get_town_field
@@ -90,46 +90,7 @@ class OperationFormSelection(CustomForm, forms.Form):
)
-class PeriodSelect(forms.Form):
- datings__period = forms.ChoiceField(label=_("Dating - period"), choices=[])
- datings__precise_dating = forms.CharField(label=_("Dating - precise"))
- datings__start_date = forms.IntegerField(label=_("Dating - start date"))
- datings__end_date = forms.IntegerField(label=_("Dating - end date"))
- 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",
- "datings__end_date",
- "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:
- if period_key not in self.fields:
- continue
- fields[period_key] = self.fields[period_key]
- if period_key in self.fields:
- fields[period_key] = self.fields[period_key]
- self.fields = fields
-
-
-class RecordSelect(GeoItemSelect, PeriodSelect):
+class RecordSelect(GeoItemSelect, DatingSelect):
_model = models.ContextRecord
form_admin_name = _("Context record - 001 - Search")
form_slug = "contextrecord-001-search"
@@ -192,7 +153,7 @@ class RecordSelect(GeoItemSelect, PeriodSelect):
colors = forms.ChoiceField(label=_("Colors"), choices=[])
details_on_color = forms.CharField(label=_("Details on color"))
- TYPES = PeriodSelect.TYPES + [
+ TYPES = DatingSelect.TYPES + [
FieldType('area', Area),
FieldType("periods", Period),
FieldType('cultural_attributions', models.CulturalAttributionType),
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index d1b1fb147..6b6f0f039 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -440,8 +440,9 @@ class ContextRecord(
"documents__associated_file__isnull",
"documents__associated_url__isnull",
]
- NUMBER_FIELDS = ["operation__year", "operation__operation_code", "datings__start_date",
- "datings__end_date"] + GeographicSubTownItem.NUMBER_FIELDS
+ NUMBER_FIELDS = [
+ "operation__year", "operation__operation_code"
+ ] + GeographicSubTownItem.NUMBER_FIELDS + BaseDating.NUMBER_FIELDS
RELATION_TYPES_PREFIX = {
"ope_relation_types": "operation__",
@@ -486,9 +487,9 @@ class ContextRecord(
pgettext_lazy("key for text search", "operation-relation-type"),
"ope_relation_types",
),
- "datings__period": SearchAltName(
+ "period": SearchAltName(
pgettext_lazy("key for text search", "period"),
- "datings__period__label__iexact",
+ "periods__label__iexact",
),
"unit": SearchAltName(
pgettext_lazy("key for text search", "unit-type"), "unit__label__iexact"
@@ -573,6 +574,7 @@ class ContextRecord(
ALT_NAMES.update(Dating.ASSOCIATED_ALT_NAMES)
ALT_NAMES.update(GeoItem.ALT_NAMES)
ALT_NAMES.update(Imported.ALT_NAMES)
+ ALT_NAMES.update(BaseDating.ALT_NAMES)
DEFAULT_SEARCH_FORM = ("archaeological_context_records.forms", "RecordSelect")
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index d4f954d59..727657fc2 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -92,7 +92,7 @@ from ishtar_common.forms import (
GeoItemSelect,
)
from ishtar_common.forms_common import get_town_field
-from archaeological_context_records.forms import PeriodSelect
+from archaeological_context_records.forms import DatingSelect
from ishtar_common.models import (
Area,
@@ -1616,7 +1616,7 @@ class DateForm(ManageOldType, forms.Form):
]
-class FindSelect(MuseumForm, GeoItemSelect, PeriodSelect):
+class FindSelect(MuseumForm, GeoItemSelect, DatingSelect):
_model = models.Find
form_admin_name = _("Find - 001 - Search")
form_slug = "find-001-search"
@@ -2017,7 +2017,7 @@ class FindSelect(MuseumForm, GeoItemSelect, PeriodSelect):
museum_allocation_date = DateField(label=_("Museum - Date of allocation"))
museum_purchase_price = forms.CharField(label=_("Museum - Purchase price"))
- TYPES = PeriodSelect.TYPES + [
+ TYPES = DatingSelect.TYPES + [
FieldType("periods", Period),
FieldType("conservatory_states", models.ConservatoryState),
FieldType("base_finds__batch", models.BatchType),
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index b57002532..5f26fc443 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -1407,15 +1407,13 @@ class Find(
"weight",
"find_number",
"min_number_of_individuals",
- "datings__start_date",
- "datings__end_date",
"clutter_long_side",
"clutter_short_side",
"clutter_height",
"museum_inventory_entry_year",
"museum_inventory_quantity",
"museum_observed_quantity",
- ] + GeographicSubTownItem.NUMBER_FIELDS
+ ] + GeographicSubTownItem.NUMBER_FIELDS + BaseDating.NUMBER_FIELDS
BASE_REQUEST = {"downstream_treatment__isnull": True}
EXTRA_REQUEST_KEYS = {
"all_base_finds__context_record": "base_finds__context_record__context_record_tree_parent__cr_parent_id",
@@ -1924,6 +1922,7 @@ class Find(
ALT_NAMES.update(Dating.ASSOCIATED_ALT_NAMES)
ALT_NAMES.update(GeoItem.ALT_NAMES_FOR_FIND())
ALT_NAMES.update(Imported.ALT_NAMES)
+ ALT_NAMES.update(BaseDating.ALT_NAMES)
DEFAULT_SEARCH_FORM = ("archaeological_finds.forms", "FindSelect")
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 416a1a9ec..87d498596 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -1571,6 +1571,47 @@ class GeoItemSelect(DocumentItemSelect): # all geo item can have documents
] + DocumentItemSelect.TYPES
+class DatingSelect(forms.Form):
+ datings__period = forms.ChoiceField(label=_("Dating - period"), choices=[])
+ datings__precise_dating = forms.CharField(label=_("Dating - precise"))
+ datings__start_date = forms.IntegerField(label=_("Dating - start date"))
+ datings__end_date = forms.IntegerField(label=_("Dating - end date"))
+ datings__dating_type = forms.ChoiceField(
+ label=_("Dating - dating type"), choices=[]
+ )
+ datings__quality = forms.ChoiceField(label=_("Dating - dating quality"), choices=[])
+ TYPES = [
+ FieldType("datings__period", ("archaeological_operations", "Period")),
+ FieldType("datings__dating_type",
+ ("archaeological_context_records", "DatingType")),
+ FieldType("datings__quality",
+ ("archaeological_context_records", "DatingQuality")),
+ ]
+ PERIOD_FIELDS = [
+ "datings__period",
+ "datings__precise_dating",
+ "datings__start_date",
+ "datings__end_date",
+ "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:
+ if period_key not in self.fields:
+ continue
+ fields[period_key] = self.fields[period_key]
+ if period_key in self.fields:
+ fields[period_key] = self.fields[period_key]
+ self.fields = fields
+
+
class QADating(ManageOldType, forms.Form):
form_label = _("Dating")
associated_models = {
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index d9923b04d..5b06baba2 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -6284,6 +6284,35 @@ class BaseDating(models.Model, SerializeItem):
SERIALIZE_EXCLUDE = ["find", "context_record", "archaeological_site"]
CURRENT_MODEL = None
CURRENT_MODEL_ATTR = None
+
+ ALT_NAMES = {
+ "datings__period": SearchAltName(
+ pgettext_lazy("key for text search", "dating-period"),
+ "datings__period__label__iexact",
+ ),
+ "datings__precise_dating": SearchAltName(
+ pgettext_lazy("key for text search", "dating-precision"),
+ "datings__precise_dating__iexact",
+ ),
+ "datings__start_date": SearchAltName(
+ pgettext_lazy("key for text search", "dating-start"),
+ "datings__start_date",
+ ),
+ "datings__end_date": SearchAltName(
+ pgettext_lazy("key for text search", "dating-end"),
+ "datings__end_date",
+ ),
+ "datings__dating_type": SearchAltName(
+ pgettext_lazy("key for text search", "dating-type"),
+ "datings__dating_type__label__iexact",
+ ),
+ "datings__quality": SearchAltName(
+ pgettext_lazy("key for text search", "dating-quality"),
+ "datings__quality__label__iexact",
+ ),
+ }
+ NUMBER_FIELDS = ["datings__start_date", "datings__end_date"]
+
uuid = models.UUIDField(default=uuid.uuid4)
reference = models.TextField(_("Reference"), blank=True, default="")
external_id = models.TextField(_("External ID"), blank=True, default="")