summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_finds/forms.py191
-rw-r--r--archaeological_finds/migrations/0115_auto_20240209_1745.py (renamed from archaeological_finds/migrations/0115_auto_20240208_1636.py)11
-rw-r--r--archaeological_finds/models_finds.py10
-rw-r--r--ishtar_common/admin.py1
-rw-r--r--ishtar_common/migrations/0236_auto_20240209_1558.py (renamed from ishtar_common/migrations/0236_auto_20240208_1635.py)14
-rw-r--r--ishtar_common/models.py8
6 files changed, 209 insertions, 26 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 381541614..27c306e30 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -94,17 +94,16 @@ 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,
+ get_current_profile,
IshtarUser,
+ OperationType,
+ Organization,
Person,
person_type_pks_lazy,
+ valid_id,
+ valid_ids,
)
-from ishtar_common.utils import convert_coordinates_to_point
__all__ = [
"TreatmentSelect",
@@ -230,16 +229,46 @@ class BasicFindForm(CustomForm, ManageOldType):
"material_type_quality": models.MaterialTypeQualityType,
"object_type_quality": models.ObjectTypeQualityType,
"checked_type": models.CheckedType,
+ "museum_collection_entry_mode": models.CollectionEntryModeType,
+ "museum_inventory_marking_presence": models.InventoryMarkingPresence,
+ "museum_marking_type": models.MarkingType,
+ "museum_collection": models.MuseumCollection,
+ "museum_inventory_conformity": models.InventoryConformity,
+ "museum_original_repro": models.OriginalReproduction,
#'collection': Warehouse,
}
field_order = [
+ "museum_id_prefix",
+ "museum_id",
+ "museum_id_suffix",
"label",
"denomination",
+ "museum_id_comment",
"previous_id",
- "museum_id",
"laboratory_id",
"seal_number",
"mark",
+ "museum_inventory_marking_presence",
+ "museum_marking_type",
+ "museum_marking_comment",
+ "museum_owner_institution",
+ "museum_custodian_institution",
+ "museum_depositor_inventory_number",
+ "museum_collection_entry_mode",
+ "museum_entry_mode_comment",
+ "museum_entry_date",
+ "museum_entry_date_end",
+ "museum_entry_date_comment",
+ "museum_donor",
+ "museum_collection",
+ "museum_former_collection",
+ "museum_inventory_entry_year",
+ "museum_inventory_conformity",
+ "museum_non_conformity_comment",
+ "museum_inventory_transcript",
+ "museum_original_repro",
+ "museum_allocation_date",
+ "museum_purchase_price",
"description",
"public_description",
"is_complete",
@@ -276,26 +305,110 @@ class BasicFindForm(CustomForm, ManageOldType):
"checked_type",
"check_date",
]
+ PROFILE_FILTER = {
+ "museum": [
+ "museum_id_prefix",
+ "museum_id",
+ "museum_id_suffix",
+ "museum_id_comment",
+ "museum_owner_institution",
+ "museum_custodian_institution",
+ "museum_depositor_inventory_number",
+ "museum_collection_entry_mode",
+ "museum_entry_mode_comment",
+ "museum_entry_date",
+ "museum_entry_date_end",
+ "museum_entry_date_comment",
+ "museum_donor",
+ "museum_inventory_marking_presence",
+ "museum_marking_type",
+ "museum_marking_comment",
+ "museum_collection",
+ "museum_former_collection",
+ "museum_inventory_entry_year",
+ "museum_inventory_conformity",
+ "museum_non_conformity_comment",
+ "museum_inventory_transcript",
+ "museum_original_repro",
+ "museum_allocation_date",
+ "museum_purchase_price",
+ ],
+ }
HEADERS = {}
- HEADERS["label"] = FormHeader(_("Identification"))
-
+ HEADERS["museum_id_prefix"] = FormHeader(_("Museum identification"))
label = forms.CharField(
label=_("Free ID"), validators=[validators.MaxLengthValidator(60)]
)
+ museum_id_prefix = forms.CharField(label=_("Museum ID prefix"), required=False)
+ museum_id = forms.CharField(label=_("Museum ID"), required=False)
+ museum_id_suffix = forms.CharField(label=_("Museum ID suffix"), required=False)
+ museum_id_comment = forms.CharField(label=_("Comment on museum ID"), widget=forms.Textarea, required=False)
+ HEADERS["label"] = FormHeader(_("Identification"))
denomination = forms.CharField(label=_("Denomination"), required=False)
previous_id = forms.CharField(label=_("Previous ID"), required=False)
- museum_id = forms.CharField(label=_("Museum ID"), required=False)
laboratory_id = forms.CharField(label=_("Laboratory ID"), required=False)
seal_number = forms.CharField(label=_("Seal number"), required=False)
mark = forms.CharField(label=_("Mark"), required=False)
+ museum_inventory_marking_presence = widgets.Select2MultipleField(
+ label=_("Presence of inventory marking"), required=False
+ )
+ museum_marking_type = widgets.Select2MultipleField(
+ label=_("Type of marking"), required=False
+ )
+ museum_marking_comment = forms.CharField(
+ label=_("Comment on marking"), widget=forms.Textarea, required=False
+ )
# collection = forms.IntegerField(
# label=_("Collection (warehouse)"),
# widget=widgets.JQueryAutoComplete(
# reverse_lazy('autocomplete-warehouse'),
# associated_model=Warehouse, new=True),
# validators=[valid_id(Warehouse)], required=False)
+ HEADERS["museum_owner_institution"] = FormHeader(_("Museum"))
+ museum_owner_institution = widgets.ModelJQueryAutocompleteField(
+ model=Organization, label=_("Owner institution"), new=True, required=False
+ )
+ museum_custodian_institution = widgets.ModelJQueryAutocompleteField(
+ model=Organization, label=_("Custodian institution"), new=True, required=False
+ )
+ museum_depositor_inventory_number = forms.CharField(label=_("Depositor inventory number"), required=False)
+ museum_collection_entry_mode = forms.ChoiceField(
+ label=_("Collections entry mode"), required=False, choices=[]
+ )
+ museum_entry_mode_comment = forms.CharField(label=_("Comment on museum entry mode"), widget=forms.Textarea, required=False)
+ museum_entry_date = forms.DateField(
+ label=_("Museum entry date (exact or start)"), widget=DatePicker, required=False
+ )
+ museum_entry_date_end = forms.DateField(
+ label=_("Museum entry date (end)"), widget=DatePicker, required=False
+ )
+ museum_entry_date_comment = forms.CharField(label=_("Comment on museum entry date"), required=False)
+ #museum_donor =
+ museum_collection = forms.ChoiceField(
+ label=_("Collection"), required=False, choices=[]
+ )
+ # museum_former_collection =
+ museum_inventory_entry_year = forms.IntegerField(
+ label=_("Inventory entry year"), required=False, min_value=0, max_value=2100
+ )
+ museum_inventory_conformity = forms.ChoiceField(
+ label=_("Conformity with inventory"), required=False, choices=[]
+ )
+ museum_non_conformity_comment = forms.CharField(
+ label=_("Comment of non-conformity"), widget=forms.Textarea, required=False
+ )
+ museum_original_repro = forms.ChoiceField(
+ label=_("Original/reproduction"), required=False, choices=[]
+ )
+ museum_allocation_date = forms.DateField(
+ label=_("Date of museum allocation"), widget=DatePicker, required=False
+ )
+ museum_purchase_price = forms.CharField(label=_("Purchase price"), required=False)
- HEADERS["description"] = FormHeader(_("Description"))
+ HEADERS["museum_inventory_transcript"] = FormHeader(_("Description"))
+ museum_inventory_transcript = forms.CharField(
+ label=_("Inventory transcript"), widget=forms.Textarea, required=False
+ )
description = forms.CharField(
label=_("Description"), widget=forms.Textarea, required=False
)
@@ -431,6 +544,12 @@ class BasicFindForm(CustomForm, ManageOldType):
FieldType("technical_processe", models.TechnicalProcessType, is_multiple=True),
FieldType("communicabilitie", models.CommunicabilityType, is_multiple=True),
FieldType("checked_type", models.CheckedType, is_multiple=True),
+ FieldType("museum_collection_entry_mode", models.CollectionEntryModeType),
+ FieldType("museum_inventory_marking_presence", models.InventoryMarkingPresence, is_multiple=True),
+ FieldType("museum_marking_type", models.MarkingType, is_multiple=True),
+ FieldType("museum_collection", models.MuseumCollection),
+ FieldType("museum_inventory_conformity", models.InventoryConformity),
+ FieldType("museum_original_repro", models.OriginalReproduction),
]
def __init__(self, *args, **kwargs):
@@ -439,6 +558,17 @@ class BasicFindForm(CustomForm, ManageOldType):
if not context_record or not context_record.operation.operation_type.judiciary:
self._remove_fields(("seal_number",))
+ def get_headers(self):
+ if self._headers:
+ return self._headers
+ self._headers = self.HEADERS.copy()
+ profile = get_current_profile()
+ if not profile.museum:
+ if "museum_inventory_transcript" in self._headers:
+ self._headers.pop("museum_inventory_transcript")
+ self._headers["description"] = FormHeader(_("Description"))
+ return self._headers
+
def clean(self):
clutter_long_side = self.cleaned_data.get("clutter_long_side", None)
clutter_short_side = self.cleaned_data.get("clutter_short_side", None)
@@ -467,14 +597,38 @@ class FindForm(BasicFindForm):
}
)
field_order = [
+ "museum_id_prefix",
+ "museum_id",
+ "museum_id_suffix",
+ "museum_id_comment",
"label",
"denomination",
"previous_id",
"get_first_base_find__excavation_id",
- "museum_id",
"laboratory_id",
"seal_number",
"mark",
+ "museum_inventory_marking_presence",
+ "museum_marking_type",
+ "museum_marking_comment",
+ "museum_owner_institution",
+ "museum_custodian_institution",
+ "museum_depositor_inventory_number",
+ "museum_collection_entry_mode",
+ "museum_entry_mode_comment",
+ "museum_entry_date",
+ "museum_entry_date_end",
+ "museum_entry_date_comment",
+ "museum_donor",
+ "museum_collection",
+ "museum_former_collection",
+ "museum_inventory_entry_year",
+ "museum_inventory_conformity",
+ "museum_non_conformity_comment",
+ "museum_original_repro",
+ "museum_allocation_date",
+ "museum_purchase_price",
+ "museum_inventory_transcript",
"description",
"public_description",
"get_first_base_find__discovery_date",
@@ -753,7 +907,9 @@ class QAFindFormMulti(QAForm):
"qa_label",
"qa_previous_id",
"qa_get_first_base_find__excavation_id",
+ "qa_museum_id_prefix",
"qa_museum_id",
+ "qa_museum_id_suffix",
"qa_laboratory_id",
"qa_seal_number",
"qa_mark",
@@ -777,7 +933,9 @@ class QAFindFormMulti(QAForm):
qa_get_first_base_find__excavation_id = forms.CharField(
label=_("Excavation ID"), required=False
)
+ qa_museum_id_prefix = forms.CharField(label=_("Museum ID prefix"), required=False)
qa_museum_id = forms.CharField(label=_("Museum inventory number"), required=False)
+ qa_museum_id_suffix = forms.CharField(label=_("Museum ID suffix"), required=False)
qa_laboratory_id = forms.CharField(label=_("Laboratory ID"), required=False)
qa_seal_number = forms.CharField(label=_("Seal number"), required=False)
qa_mark = forms.CharField(label=_("Mark"), required=False)
@@ -1294,6 +1452,12 @@ class FindSelect(GeoItemSelect, PeriodSelect):
),
),
]
+ PROFILE_FILTER = {
+ "museum": [
+ "museum_id",
+ "cache_complete_museum_id",
+ ],
+ }
search_vector = forms.CharField(
label=_("Full text search"),
@@ -1301,10 +1465,11 @@ class FindSelect(GeoItemSelect, PeriodSelect):
)
label = forms.CharField(label=_("Free ID"))
denomination = forms.CharField(label=_("Denomination"))
+ museum_id = forms.CharField(label=_("Museum ID"))
+ cache_complete_museum_id = forms.CharField(label=_("Complete museum ID"))
previous_id = forms.CharField(label=_("Previous ID"))
base_finds__excavation_id = forms.CharField(label=_("Excavation ID"))
seal_number = forms.CharField(label=_("Seal number"))
- museum_id = forms.CharField(label=_("Museum inventory number"))
laboratory_id = forms.CharField(label=_("Laboratory ID"))
mark = forms.CharField(label=_("Mark"))
diff --git a/archaeological_finds/migrations/0115_auto_20240208_1636.py b/archaeological_finds/migrations/0115_auto_20240209_1745.py
index 3c39093a6..4bb67727b 100644
--- a/archaeological_finds/migrations/0115_auto_20240208_1636.py
+++ b/archaeological_finds/migrations/0115_auto_20240209_1745.py
@@ -1,4 +1,4 @@
-# Generated by Django 2.2.24 on 2024-02-08 16:36
+# Generated by Django 2.2.24 on 2024-02-09 17:45
import django.core.validators
from django.db import migrations, models
@@ -10,7 +10,7 @@ import re
class Migration(migrations.Migration):
dependencies = [
- ('ishtar_common', '0236_auto_20240208_1635'),
+ ('ishtar_common', '0236_auto_20240209_1558'),
('archaeological_finds', '0114_auto_20231115_1617'),
]
@@ -148,7 +148,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='find',
name='museum_former_collection',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.BiographicalNote', verbose_name='Former collection'),
+ field=models.ManyToManyField(blank=True, related_name='finds_former_collections', to='ishtar_common.BiographicalNote', verbose_name='Former collection'),
),
migrations.AddField(
model_name='find',
@@ -247,11 +247,6 @@ class Migration(migrations.Migration):
),
migrations.AddField(
model_name='historicalfind',
- name='museum_former_collection',
- field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.BiographicalNote', verbose_name='Former collection'),
- ),
- migrations.AddField(
- model_name='historicalfind',
name='museum_id_comment',
field=models.TextField(blank=True, default='', verbose_name='Comment on museum ID'),
),
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 371b5b64c..32003a9c2 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -1413,6 +1413,9 @@ class Find(
"museum_id": SearchAltName(
pgettext_lazy("key for text search", "museum-id"), "museum_id__iexact"
),
+ "cache_complete_museum_id": SearchAltName(
+ pgettext_lazy("key for text search", "complete-museum-id"), "cache_complete_museum_id__iexact"
+ ),
"laboratory_id": SearchAltName(
pgettext_lazy("key for text search", "laboratory-id"),
"laboratory_id__iexact",
@@ -2046,8 +2049,9 @@ class Find(
related_name='current_collection_of',
verbose_name=_("Collection"),
)
- museum_former_collection = models.ForeignKey(
- BiographicalNote, blank=True, null=True, on_delete=models.SET_NULL,
+ museum_former_collection = models.ManyToManyField(
+ BiographicalNote, blank=True,
+ related_name="finds_former_collections",
verbose_name=_("Former collection"),
)
museum_inventory_entry_year = models.PositiveIntegerField(
@@ -2812,7 +2816,7 @@ class Find(
return self.cache_complete_museum_id
def _generate_cache_complete_museum_id(self):
- return get_generated_id("find_complete_museum_id", self) or ""
+ return get_generated_id("museum_complete_identifier", self) or ""
def _generate_cached_periods(self):
return " & ".join([dating.period.label for dating in self.datings.all()])
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index e5cb1b67b..7cd336ebf 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -623,6 +623,7 @@ class IshtarSiteProfileAdmin(admin.ModelAdmin):
"find_index",
"find_custom_index",
"find_cached_label",
+ "museum_complete_identifier",
"container_external_id",
"container_complete_identifier",
"container_custom_index",
diff --git a/ishtar_common/migrations/0236_auto_20240208_1635.py b/ishtar_common/migrations/0236_auto_20240209_1558.py
index 48b1060d6..6fd6014fe 100644
--- a/ishtar_common/migrations/0236_auto_20240208_1635.py
+++ b/ishtar_common/migrations/0236_auto_20240209_1558.py
@@ -1,4 +1,4 @@
-# Generated by Django 2.2.24 on 2024-02-08 16:35
+# Generated by Django 2.2.24 on 2024-02-09 15:58
import django.core.validators
from django.db import migrations, models
@@ -27,7 +27,7 @@ class Migration(migrations.Migration):
options={
'verbose_name': 'Shooting angle',
'verbose_name_plural': 'Shooting angles',
- 'ordering': ('label',),
+ 'ordering': ('order', 'label'),
},
bases=(ishtar_common.models_common.Cached, models.Model),
),
@@ -61,6 +61,16 @@ class Migration(migrations.Migration):
field=models.TextField(blank=True, default='', verbose_name='Museofile id'),
),
migrations.AddField(
+ model_name='ishtarsiteprofile',
+ name='museum',
+ field=models.BooleanField(default=False, help_text='Need finds module', verbose_name='Museum module'),
+ ),
+ migrations.AddField(
+ model_name='ishtarsiteprofile',
+ name='museum_complete_identifier',
+ field=models.TextField(default='{{museum_id_prefix}}.{{museum_id}}.{{museum_id_suffix}}', help_text='Formula to manage cached label. If not set a default formula is used.', verbose_name='Find - Complete museum ID'),
+ ),
+ migrations.AddField(
model_name='licensetype',
name='order',
field=models.IntegerField(default=10, verbose_name='Order'),
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index ebba1c034..5858fdb78 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -1130,6 +1130,7 @@ class IshtarSiteProfile(models.Model, Cached):
)
preservation = models.BooleanField(_("Preservation module"), default=False)
mapping = models.BooleanField(_("Mapping module"), default=False)
+ museum = models.BooleanField(_("Museum module"), default=False, help_text=_("Need finds module"))
point_precision = models.IntegerField(
_("Point precision (search and sheets)"),
null=True,
@@ -1382,6 +1383,13 @@ class IshtarSiteProfile(models.Model, Cached):
"Formula to manage cached label. If not set a default formula is used."
),
)
+ museum_complete_identifier = models.TextField(
+ _("Find - Complete museum ID"),
+ default="{{museum_id_prefix}}.{{museum_id}}.{{museum_id_suffix}}",
+ help_text=_(
+ "Formula to manage cached label. If not set a default formula is used."
+ ),
+ )
container_external_id = models.TextField(
_("Container external id"),
default="{parent_external_id}-{container_type__txt_idx}-" "{reference}",