summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_finds/forms.py31
-rw-r--r--archaeological_finds/migrations/0138_donor_to_donors.py36
-rw-r--r--archaeological_finds/models_finds.py16
-rw-r--r--archaeological_finds/templates/ishtar/sheet_find.html4
-rw-r--r--archaeological_finds/templates/ishtar/sheet_museum_find.html4
5 files changed, 61 insertions, 30 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 6cbb950fb..31673014c 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -247,6 +247,7 @@ class BasicFindForm(MuseumForm, CustomForm, ManageOldType):
"technical_area",
"technical_processe",
"museum_former_collection",
+ "museum_donor",
"museum_inventory_marking_presence",
"museum_marking_type",
]
@@ -423,14 +424,9 @@ class BasicFindForm(MuseumForm, CustomForm, ManageOldType):
museum_entry_date = DateField(label=_("Museum entry date (exact or start)"), required=False)
museum_entry_date_end = DateField(label=_("Museum entry date (end)"), required=False)
museum_entry_date_comment = forms.CharField(label=_("Comment on museum entry date"), required=False)
- museum_donor = forms.IntegerField(
- widget=widgets.JQueryAutoComplete(
- reverse_lazy('autocomplete-biographicalnote'),
- associated_model=BiographicalNote,
- new=True),
- label=_("Donor, testator or vendor"),
- required=False
- )
+ museum_donor = widgets.Select2MultipleField(
+ model=BiographicalNote, label=_("Donors, testators or vendors"), required=False,
+ remote=True, new=True)
museum_collection = forms.ChoiceField(
label=_("Collection"), required=False, choices=[]
)
@@ -952,7 +948,7 @@ class QAFindFormMulti(MuseumForm, QAForm):
"qa_museum_owner_institution": Organization,
"qa_museum_assigned_institution": Organization,
"qa_museum_custodian_institution": Organization,
- "qa_museum_donor": BiographicalNote,
+ "qa_museum_donors": BiographicalNote,
"qa_museum_marking_type": models.MarkingType,
"qa_museum_inventory_marking_presence": models.InventoryMarkingPresence,
"qa_museum_collection": models.MuseumCollection,
@@ -981,7 +977,6 @@ class QAFindFormMulti(MuseumForm, QAForm):
"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",
@@ -997,7 +992,7 @@ class QAFindFormMulti(MuseumForm, QAForm):
"qa_museum_entry_mode_comment",
"qa_museum_entry_date",
"qa_museum_entry_date_end",
- "qa_museum_donor",
+ "qa_museum_donors",
"qa_museum_inventory_marking_presence",
"qa_museum_marking_type",
"qa_museum_collection",
@@ -1085,8 +1080,8 @@ class QAFindFormMulti(MuseumForm, QAForm):
label=_("Museum entry date (exact or start)"), required=False
)
qa_museum_entry_date_end = DateField(label=_("Museum entry date (end)"), required=False)
- qa_museum_donor = forms.IntegerField(
- label=_("Donor, testator or vendor"),
+ qa_museum_donors = forms.IntegerField(
+ label=_("Donors, testators or vendors"),
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-biographicalnote'),
associated_model=BiographicalNote),
@@ -1254,7 +1249,7 @@ class QAFindFormMulti(MuseumForm, QAForm):
return ""
return value
- def _get_qa_museum_donor(self, value):
+ def _get_qa_museum_donors(self, value):
return self._get_bio(value)
def _get_qa_museum_former_collections(self, value):
@@ -1680,7 +1675,7 @@ class FindSelect(MuseumForm, GeoItemSelect, PeriodSelect):
"museum_entry_date",
"museum_entry_date_end",
"museum_entry_date_comment",
- "museum_donor",
+ "museum_donors",
"museum_inventory_marking_presence",
"museum_marking_type",
"museum_collection",
@@ -1708,7 +1703,7 @@ class FindSelect(MuseumForm, GeoItemSelect, PeriodSelect):
"museum_entry_date",
"museum_entry_date_end",
"museum_entry_date_comment",
- "museum_donor",
+ "museum_donors",
"museum_inventory_marking_presence",
"museum_marking_type",
"museum_collection",
@@ -1965,8 +1960,8 @@ class FindSelect(MuseumForm, GeoItemSelect, PeriodSelect):
museum_entry_date = DateField(label=_("Museum - Entry date (exact or start)"))
museum_entry_date_end = DateField(label=_("Museum - Entry date end"))
museum_entry_date_comment = forms.CharField(label=_("Museum - Comment on entry date"))
- museum_donor = forms.IntegerField(
- label=_("Museum - Donor, testator or vendor"),
+ museum_donors = forms.IntegerField(
+ label=_("Museum - Donors, testators or vendors"),
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-biographicalnote'),
associated_model=BiographicalNote),
diff --git a/archaeological_finds/migrations/0138_donor_to_donors.py b/archaeological_finds/migrations/0138_donor_to_donors.py
new file mode 100644
index 000000000..24ecf65d1
--- /dev/null
+++ b/archaeological_finds/migrations/0138_donor_to_donors.py
@@ -0,0 +1,36 @@
+# Generated by Django 2.2.24 on 2025-08-25 10:14
+
+from django.db import migrations, models
+
+
+SQL_MIGRATE = """
+INSERT INTO archaeological_finds_find_museum_donors
+ (find_id, biographicalnote_id)
+ SELECT id, museum_donor_id FROM archaeological_finds_find
+ WHERE museum_donor_id IS NOT NULL;
+"""
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0263_media_exporter'),
+ ('archaeological_finds', '0137_data_migration_treatment_status_inputstatus'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='find',
+ name='museum_donors',
+ field=models.ManyToManyField(blank=True, related_name='finds_donors', to='ishtar_common.BiographicalNote', verbose_name='Donors, testators or vendors'),
+ ),
+ migrations.RunSQL(SQL_MIGRATE),
+ migrations.RemoveField(
+ model_name='find',
+ name='museum_donor',
+ ),
+ migrations.RemoveField(
+ model_name='historicalfind',
+ name='museum_donor',
+ ),
+ ]
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index bd0c42619..89bbf245f 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -1764,9 +1764,9 @@ class Find(
pgettext_lazy("key for text search", "museum-entry-date-comment"),
"museum_entry_date_comment__iexact"
),
- "museum_donor": SearchAltName(
- pgettext_lazy("key for text search", "museum-donor"),
- "museum_donor__denomination__iexact",
+ "museum_donors": SearchAltName(
+ pgettext_lazy("key for text search", "museum-donors"),
+ "museum_donors__denomination__iexact",
related_name="museum_donor"
),
"museum_inventory_marking_presence": SearchAltName(
@@ -1883,7 +1883,7 @@ class Find(
SearchVectorConfig("museum_depositor_inventory_number", "raw"),
SearchVectorConfig("museum_entry_mode_comment"),
SearchVectorConfig("museum_entry_date_comment", "local"),
- SearchVectorConfig("museum_donor__denomination"),
+ SearchVectorConfig("museum_donors__denomination"),
SearchVectorConfig("museum_collection__label"),
SearchVectorConfig("museum_former_collections__denomination"),
SearchVectorConfig("museum_inventory_transcript", "local"),
@@ -2274,10 +2274,10 @@ class Find(
museum_entry_date = models.DateField(_("Museum entry date (exact or start)"), blank=True, null=True)
museum_entry_date_end = models.DateField(_("Museum entry date (end)"), blank=True, null=True)
museum_entry_date_comment = models.TextField(_("Comment on museum entry date"), blank=True, default="")
- museum_donor = models.ForeignKey(
- BiographicalNote, blank=True, null=True, on_delete=models.SET_NULL,
- related_name='has_provided',
- verbose_name=_("Donor, testator or vendor"),
+ museum_donors = models.ManyToManyField(
+ BiographicalNote, blank=True,
+ related_name="finds_donors",
+ verbose_name=_("Donors, testators or vendors"),
)
museum_inventory_marking_presence = models.ManyToManyField(
InventoryMarkingPresence, blank=True,
diff --git a/archaeological_finds/templates/ishtar/sheet_find.html b/archaeological_finds/templates/ishtar/sheet_find.html
index 9b439825c..62cae08fb 100644
--- a/archaeological_finds/templates/ishtar/sheet_find.html
+++ b/archaeological_finds/templates/ishtar/sheet_find.html
@@ -228,11 +228,11 @@
{% trans "Museum entry date" as museum_entry_date_label %}
{% field_flex museum_entry_date_label item.museum_entry_date_label %}
{% field_flex "Comment on museum entry date" item.museum_entry_date_comment %}
- {% field_flex "Name of donor, testator or vendor" item.museum_donor %}
+ {% field_flex_detail_multiple _("Donors, testators or vendors") item.museum_donors %}
{% field_flex_multiple_obj "Presence of inventory marking" item "museum_inventory_marking_presence" %}
{% field_flex_multiple_obj "Type of marking" item "museum_marking_type" %}
{% field_flex "Collection" item.museum_collection %}
- {% field_flex_multiple_obj "Former collection" item "museum_former_collections" %}
+ {% field_flex_detail_multiple _("Former collection") item.museum_former_collections %}
{% field_flex "Inventory entry year" item.museum_inventory_entry_year %}
{% field_flex "Conformity with inventory" item.museum_inventory_conformity %}
{% field_flex "Comment on conformity" item.museum_conformity_comment %}
diff --git a/archaeological_finds/templates/ishtar/sheet_museum_find.html b/archaeological_finds/templates/ishtar/sheet_museum_find.html
index fb5e2adca..7ecc38050 100644
--- a/archaeological_finds/templates/ishtar/sheet_museum_find.html
+++ b/archaeological_finds/templates/ishtar/sheet_museum_find.html
@@ -147,7 +147,7 @@
{% field_flex "Complete museum ID" item.cache_complete_museum_id %}
{% field_flex "Comment on museum ID" item.museum_id_comment %}
{% field_flex "Collection" item.museum_collection %}
- {% field_flex_detail_multiple "Former collection" item.museum_former_collections %}
+ {% field_flex_detail_multiple _("Former collection") item.museum_former_collections %}
{% field_flex_detail "Owner institution" item.museum_owner_institution %}
{% field_flex_detail "Assigned institution" item.museum_assigned_institution %}
{% field_flex_detail "Custodian institution" item.museum_custodian_institution %}
@@ -157,7 +157,7 @@
{% trans "Museum entry date" as museum_entry_date_label %}
{% field_flex museum_entry_date_label item.museum_entry_date_label %}
{% field_flex "Comment on museum entry date" item.museum_entry_date_comment %}
- {% field_flex_detail "Donor, testator or vendor" item.museum_donor %}
+ {% field_flex_detail_multiple _("Donors, testators or vendors") item.museum_donors %}
{% field_flex_multiple_obj "Presence of inventory marking" item "museum_inventory_marking_presence" %}
{% field_flex_multiple_obj "Type of marking" item "museum_marking_type" %}
{% field_flex "Marking details" item.mark "<pre>" "</pre>" %}