summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-02-23 18:43:16 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-02-26 15:20:16 +0100
commit729e62dc4706f70f14510ca89f2362ba600c5ad5 (patch)
tree5c4ecb657ca220194e1cad0897ed2d03c61bdbbf
parentd1890dc252f7f75c8b7dd5166e7fd145f7db5379 (diff)
downloadIshtar-729e62dc4706f70f14510ca89f2362ba600c5ad5.tar.bz2
Ishtar-729e62dc4706f70f14510ca89f2362ba600c5ad5.zip
✨ Find - museum fields: bulk update
-rw-r--r--archaeological_finds/forms.py143
-rw-r--r--archaeological_operations/forms.py6
-rw-r--r--ishtar_common/forms.py11
3 files changed, 148 insertions, 12 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 4c72646cc..13e1ec1f0 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -21,6 +21,7 @@
Finds forms definitions
"""
+from collections import OrderedDict
import logging
from django import forms
@@ -889,6 +890,10 @@ class QAFindFormMulti(QAForm):
"qa_alterations",
"qa_alteration_causes",
"qa_museum_collection_entry_mode",
+ "qa_museum_inventory_marking_presence",
+ "qa_museum_marking_type",
+ "qa_museum_collection",
+ "qa_museum_original_repro",
]
associated_models = {
"qa_material_types": models.MaterialType,
@@ -906,6 +911,14 @@ class QAFindFormMulti(QAForm):
"qa_conservatory_state": models.ConservatoryState,
"qa_treatment_emergency": models.TreatmentEmergencyType,
"qa_museum_collection_entry_mode": models.CollectionEntryModeType,
+ "qa_museum_owner_institution": Organization,
+ "qa_museum_custodian_institution": Organization,
+ "qa_museum_donor": BiographicalNote,
+ "qa_museum_marking_type": models.MarkingType,
+ "qa_museum_inventory_marking_presence": models.InventoryMarkingPresence,
+ "qa_museum_collection": models.MuseumCollection,
+ "qa_museum_original_repro": models.OriginalReproduction,
+ "qa_museum_former_collections": BiographicalNote,
}
MULTI = True
@@ -919,17 +932,37 @@ class QAFindFormMulti(QAForm):
"qa_treatment_emergency",
"qa_appraisal_date",
"qa_insurance_value", # 'qa_collection',
- "qa_museum_collection_entry_mode",
"qa_find_number",
"qa_min_number_of_individuals",
"qa_museum_inventory_quantity",
"qa_museum_observed_quantity",
+ "qa_museum_collection_entry_mode",
+ "qa_museum_owner_institution",
+ "qa_museum_custodian_institution",
+ "qa_museum_entry_date",
+ "qa_museum_entry_date_end",
+ "qa_museum_donor",
+ "qa_museum_collection",
+ "qa_museum_inventory_entry_year",
+ "qa_museum_original_repro",
]
PROFILE_FILTER = {
"museum": [
"qa_museum_collection_entry_mode",
"qa_museum_inventory_quantity",
"qa_museum_observed_quantity",
+ "qa_museum_owner_institution",
+ "qa_museum_custodian_institution",
+ "qa_museum_entry_mode_comment",
+ "qa_museum_entry_date",
+ "qa_museum_entry_date_end",
+ "qa_museum_donor",
+ "qa_museum_inventory_marking_presence",
+ "qa_museum_marking_type",
+ "qa_museum_collection",
+ "qa_museum_former_collections",
+ "qa_museum_inventory_entry_year",
+ "qa_museum_original_repro",
],
}
@@ -940,7 +973,7 @@ class QAFindFormMulti(QAForm):
"qa_checked_type": FormHeader(_("Sheet")),
"qa_period": FormHeader(_("Datation")),
"qa_conservatory_comment": FormHeader(_("Preservation")),
- "qa_museum_collection_entry_mode": FormHeader(_("Museum")),
+ "qa_museum_owner_institution": FormHeader(_("Museum")),
}
SINGLE_FIELDS = [
@@ -985,18 +1018,65 @@ class QAFindFormMulti(QAForm):
# associated_model=Warehouse),
# validators=[valid_id(Warehouse)], required=False)
+ ## Museum
+ qa_museum_owner_institution = forms.IntegerField(
+ label=_("Owner institution"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-organization'),
+ associated_model=Organization, new=True),
+ validators=[valid_id(Organization)], required=False)
+ qa_museum_custodian_institution = forms.IntegerField(
+ label=_("Custodian institution"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-organization'),
+ associated_model=Organization, new=True),
+ validators=[valid_id(Organization)], required=False)
+ qa_museum_collection_entry_mode = forms.ChoiceField(label=_("Collections entry mode"), required=False, choices=[])
+ qa_museum_entry_mode_comment = forms.CharField(
+ label=_("Comment on museum entry mode"), required=False, widget=forms.Textarea
+ )
+ qa_museum_entry_date = forms.DateField(
+ label=_("Museum entry date (exact or start)"), widget=DatePicker, required=False
+ )
+ qa_museum_entry_date_end = forms.DateField(
+ label=_("Museum entry date (end)"), widget=DatePicker, required=False
+ )
+ qa_museum_donor = forms.IntegerField(
+ label=_("Donor, testator or vendor"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-biographicalnote'),
+ associated_model=BiographicalNote),
+ validators=[valid_id(BiographicalNote)],
+ required=False
+ )
+ qa_museum_inventory_marking_presence = widgets.Select2MultipleField(
+ label=_("Presence of inventory marking"), required=False, choices=[]
+ )
+ qa_museum_marking_type = widgets.Select2MultipleField(
+ label=_("Type of marking"), required=False, choices=[]
+ )
+ qa_museum_collection = forms.ChoiceField(label=_("Collection"), required=False, choices=[])
+ qa_museum_former_collections = forms.IntegerField(
+ label=_("Former collections"), required=False,
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-biographicalnote')
+ ),
+ )
+ qa_museum_inventory_entry_year = forms.IntegerField(label=_("Inventory entry year"), required=False, max_value=32000)
+ qa_museum_original_repro = forms.ChoiceField(label=_("Original/reproduction"), required=False, choices=[])
+
qa_description = forms.CharField(
label=_("Description"), widget=forms.Textarea, required=False
)
- qa_material_types = widgets.Select2MultipleField(
- label=_("Material types"), required=False
- )
qa_find_number = forms.IntegerField(label=_("Number of remains"), required=False)
qa_min_number_of_individuals = forms.IntegerField(
label=_("Minimum number of individuals (MNI)"), required=False
)
qa_museum_inventory_quantity = forms.IntegerField(label=_("Inventory quantity"), required=False, max_value=32000)
qa_museum_observed_quantity = forms.IntegerField(label=_("Observed quantity"), required=False, max_value=32000)
+ qa_material_types = widgets.Select2MultipleField(
+ label=_("Material types"), required=False
+ )
qa_technical_processes = widgets.Select2MultipleField(
label=_("Technical processes"),
required=False,
@@ -1062,7 +1142,6 @@ class QAFindFormMulti(QAForm):
qa_conservatory_comment = forms.CharField(
label=_("Comment on conservatory"), required=False, widget=forms.Textarea
)
- qa_museum_collection_entry_mode = forms.ChoiceField(label=_("Collections entry mode"), required=False, choices=[])
TYPES = [
FieldType("qa_material_types", models.MaterialType, is_multiple=True),
@@ -1081,15 +1160,65 @@ class QAFindFormMulti(QAForm):
FieldType("qa_treatment_emergency", models.TreatmentEmergencyType),
FieldType("qa_period", Period, is_multiple=True),
FieldType("qa_museum_collection_entry_mode", models.CollectionEntryModeType),
+ FieldType("qa_museum_marking_type", models.MarkingType, is_multiple=True),
+ FieldType("qa_museum_inventory_marking_presence", models.InventoryMarkingPresence, is_multiple=True),
+ FieldType("qa_museum_collection", models.MuseumCollection),
+ FieldType("qa_museum_original_repro", models.OriginalReproduction),
+
]
def __init__(self, *args, **kwargs):
- super(QAFindFormMulti, self).__init__(*args, **kwargs)
+ super().__init__(*args, **kwargs)
if "qa_insurance_value" in self.fields:
self.fields["qa_insurance_value"].label = "{} ({})".format(
str(self.fields["qa_insurance_value"].label),
get_current_profile().currency,
)
+ if not get_current_profile().museum or "qa_mark" not in self.fields:
+ return
+ # reorder mark field
+ current_fields_keys = self.fields.keys()
+ previous_key = None
+ nok = True
+ for k in reversed(self.base_field_keys):
+ if k == "qa_museum_collection":
+ nok = False
+ continue
+ if nok:
+ continue
+ if k in current_fields_keys:
+ previous_key = k
+ break
+ fields = OrderedDict()
+ if not previous_key:
+ fields["qa_mark"] = self.fields["qa_mark"]
+ for k in current_fields_keys:
+ if k == "qa_mark":
+ continue
+ fields[k] = self.fields[k]
+ if k == previous_key:
+ fields["qa_mark"] = self.fields["qa_mark"]
+ self.fields = fields
+
+ def _get_qa_museum_owner_institution(self, value):
+ return self._get_organization(value)
+
+ def _get_qa_museum_custodian_institution(self, value):
+ return self._get_organization(value)
+
+
+ def _get_bio(self, value):
+ try:
+ value = BiographicalNote.objects.get(pk=value).denomination
+ except BiographicalNote.DoesNotExist:
+ return ""
+ return value
+
+ def _get_qa_museum_donor(self, value):
+ return self._get_bio(value)
+
+ def _get_qa_museum_former_collections(self, value):
+ return self._get_bio(value)
def _get_qa_ue(self, value):
try:
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index 98152f189..28ed5b899 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -1720,11 +1720,7 @@ class QAOperationFormMulti(QAForm):
return value
def _get_qa_operator(self, value):
- try:
- value = Organization.objects.get(pk=value).cached_label
- except Organization.DoesNotExist:
- return ""
- return value
+ return self._get_organization(value)
def _get_qa_finds_received(self, value):
return self._get_null_boolean_field(value)
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 3dffc77c4..c59978730 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -192,6 +192,10 @@ class CustomForm(BSForm):
except AttributeError:
pass
super().__init__(*args, **kwargs)
+ if hasattr(self, "fields"):
+ self.base_field_keys = self.fields.keys()
+ else:
+ self.base_field_keys = []
if not self._explicit_ordering:
self.custom_form_ordering()
@@ -1312,6 +1316,13 @@ class QAForm(CustomForm, ManageOldType):
return
setattr(item, key[3:], value)
+ def _get_organization(self, value):
+ try:
+ value = models.Organization.objects.get(pk=value).cached_label
+ except models.Organization.DoesNotExist:
+ return ""
+ return value
+
def save(self, items, user):
for item in items:
for base_key in self.cleaned_data: