diff options
| 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 |
| commit | 205ad98138447af4b86cd11d38c3c382ea1656cd (patch) | |
| tree | 221ada912a6f6f74cfd4699b30bd0a2488b4a586 | |
| parent | 986d6c2c372df1bf1962533e4a24080da4d79c8a (diff) | |
| download | Ishtar-205ad98138447af4b86cd11d38c3c382ea1656cd.tar.bz2 Ishtar-205ad98138447af4b86cd11d38c3c382ea1656cd.zip | |
♻ refactor dating fields searches
| -rw-r--r-- | archaeological_context_records/forms.py | 45 | ||||
| -rw-r--r-- | archaeological_context_records/models.py | 10 | ||||
| -rw-r--r-- | archaeological_finds/forms.py | 6 | ||||
| -rw-r--r-- | archaeological_finds/models_finds.py | 5 | ||||
| -rw-r--r-- | ishtar_common/forms.py | 41 | ||||
| -rw-r--r-- | ishtar_common/models.py | 29 |
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="") |
