summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2026-04-24 18:10:29 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2026-04-26 17:43:38 +0200
commita20e6f427edfaf3ae8b8f020957134fa4a2d577d (patch)
treec7784b19b02793147b11b4236853456293c1b9df
parentc9db6e5bdb9182cd2d38c1daf1096350cf13a4a7 (diff)
downloadIshtar-a20e6f427edfaf3ae8b8f020957134fa4a2d577d.tar.bz2
Ishtar-a20e6f427edfaf3ae8b8f020957134fa4a2d577d.zip
✨ finds - workshop, movement, style fields: model, admin, forms, views, sheet (refs #6725)
-rw-r--r--archaeological_finds/admin.py8
-rw-r--r--archaeological_finds/forms.py24
-rw-r--r--archaeological_finds/migrations/0154_workshop_movement_styles.py40
-rw-r--r--archaeological_finds/migrations/0155_data_migration.json24
-rw-r--r--archaeological_finds/migrations/0155_data_migration_workshop_movement_style.py26
-rw-r--r--archaeological_finds/models.py2
-rw-r--r--archaeological_finds/models_finds.py30
-rw-r--r--archaeological_finds/templates/ishtar/sheet_find.html135
-rw-r--r--archaeological_finds/templates/ishtar/sheet_museum_find.html135
-rw-r--r--archaeological_finds/urls.py49
-rw-r--r--archaeological_finds/views.py2
-rw-r--r--ishtar_common/views_item.py1
12 files changed, 314 insertions, 162 deletions
diff --git a/archaeological_finds/admin.py b/archaeological_finds/admin.py
index c764cf66d..ffff0adc2 100644
--- a/archaeological_finds/admin.py
+++ b/archaeological_finds/admin.py
@@ -276,11 +276,13 @@ class RecommendedTreatmentTypeAdmin(GeneralTypeAdmin):
general_models = [
models.AlterationCauseType, models.AlterationType, models.BatchType,
models.CollectionEntryModeType, models.IconographicPatternType, models.IntegrityType,
- models.InventoryConformity, models.InventoryMarkingPresence, models.ListedBuildingProtectionNature,
- models.MarkingType, models.MaterialTypeQualityType, models.MuseumCollection,
+ models.InventoryConformity, models.InventoryMarkingPresence,
+ models.ListedBuildingProtectionNature, models.MarkingType,
+ models.MaterialTypeQualityType, models.MuseumCollection,
models.ObjectTypeQualityType, models.OriginalReproduction, models.RemarkabilityType,
models.TreatmentEmergencyType, models.DiscoveryMethod, models.ExhibitionType,
- models.OwnershipStatus, models.FollowUpActionType, models.StatementConditionType
+ models.OwnershipStatus, models.FollowUpActionType, models.StatementConditionType,
+ models.WorkshopMovementStyleType
]
for model in general_models:
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 6ea406b9e..6659da821 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -253,6 +253,7 @@ class BasicFindForm(MuseumForm, CustomForm, ManageOldType):
"museum_inventory_marking_presence",
"museum_marking_type",
"museum_collection",
+ "workshop_movement_style",
]
associated_models = {
"actor": QualifiedBiographicalNote,
@@ -269,6 +270,7 @@ class BasicFindForm(MuseumForm, CustomForm, ManageOldType):
"object_type_quality": models.ObjectTypeQualityType,
"checked_type": models.CheckedType,
"iconographic_pattern": models.IconographicPatternType,
+ "workshop_movement_style": models.WorkshopMovementStyleType,
"listed_building_protection_nature": models.ListedBuildingProtectionNature,
"museum_collection_entry_mode": models.CollectionEntryModeType,
"museum_inventory_marking_presence": models.InventoryMarkingPresence,
@@ -318,6 +320,7 @@ class BasicFindForm(MuseumForm, CustomForm, ManageOldType):
"museum_purchase_price",
"iconographic_pattern",
"iconography_notes",
+ "workshop_movement_style",
"description",
"public_description",
"get_first_base_find__discovery_method",
@@ -450,7 +453,8 @@ class BasicFindForm(MuseumForm, CustomForm, ManageOldType):
museum_collection = widgets.Select2MultipleField(
model=models.MuseumCollection, label=_("Collections"), required=False)
museum_former_collection = widgets.Select2MultipleField(
- model=BiographicalNote, label=_("Former collections"), required=False, remote=True, new=True)
+ model=BiographicalNote, label=_("Former collections"), required=False,
+ remote=True, new=True)
museum_inventory_entry_year = forms.IntegerField(
label=_("Inventory entry year"), required=False, min_value=0, max_value=2100
)
@@ -463,7 +467,8 @@ class BasicFindForm(MuseumForm, CustomForm, ManageOldType):
museum_original_repro = forms.ChoiceField(
label=_("Original/reproduction"), required=False, choices=[]
)
- museum_allocation_date = DateField(label=_("Date of museum allocation"), required=False)
+ museum_allocation_date = DateField(label=_("Date of museum allocation"),
+ required=False)
museum_purchase_price = forms.CharField(label=_("Purchase price"), required=False)
iconographic_pattern = widgets.Select2MultipleField(
label=_("Iconographic patterns"), required=False,
@@ -471,6 +476,9 @@ class BasicFindForm(MuseumForm, CustomForm, ManageOldType):
iconography_notes = forms.CharField(
label=_("Iconography notes"), widget=forms.Textarea, required=False
)
+ workshop_movement_style = widgets.Select2MultipleField(
+ label=_("Workshop, movement, style"), required=False,
+ )
HEADERS["museum_inventory_transcript"] = FormHeader(_("Description"))
museum_inventory_transcript = forms.CharField(
@@ -642,6 +650,8 @@ class BasicFindForm(MuseumForm, CustomForm, ManageOldType):
FieldType("checked_type", models.CheckedType, is_multiple=True),
FieldType("iconographic_pattern", models.IconographicPatternType,
is_multiple=True),
+ FieldType("workshop_movement_style", models.WorkshopMovementStyleType,
+ is_multiple=True),
FieldType("listed_building_protection_nature",
models.ListedBuildingProtectionNature),
FieldType("museum_collection_entry_mode", models.CollectionEntryModeType),
@@ -737,6 +747,7 @@ class FindForm(BasicFindForm):
"museum_purchase_price",
"iconographic_pattern",
"iconography_notes",
+ "workshop_movement_style",
"museum_allocation_date",
"museum_inventory_transcript",
"description",
@@ -2093,6 +2104,13 @@ class FindSelect(MuseumForm, GeoItemSelect, DatingSelect):
),
)
iconography_notes = forms.CharField(label=_("Iconography notes"))
+ workshop_movement_styles = forms.IntegerField(
+ label=_("Workshop, movement, style"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy("autocomplete-workshopmovementstyle"),
+ associated_model=models.WorkshopMovementStyleType,
+ ),
+ )
museum_inventory_marking_presence = forms.ChoiceField(
label=_("Museum - Presence of inventory marking"), choices=[]
)
@@ -2110,7 +2128,7 @@ class FindSelect(MuseumForm, GeoItemSelect, DatingSelect):
reverse_lazy('autocomplete-biographicalnote'),
associated_model=BiographicalNote),
validators=[valid_id(BiographicalNote)])
- museum_inventory_entry_year= forms.IntegerField(
+ museum_inventory_entry_year = forms.IntegerField(
label=_("Museum - Inventory entry year")
)
museum_inventory_conformity = forms.ChoiceField(
diff --git a/archaeological_finds/migrations/0154_workshop_movement_styles.py b/archaeological_finds/migrations/0154_workshop_movement_styles.py
new file mode 100644
index 000000000..bfda4ef6e
--- /dev/null
+++ b/archaeological_finds/migrations/0154_workshop_movement_styles.py
@@ -0,0 +1,40 @@
+# Generated by Django 4.2.19 on 2026-04-24 15:43
+
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+import ishtar_common.models_common
+import re
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('archaeological_finds', '0153_data_migration_find_listed_building_icono_patterns'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='WorkshopMovementStyleType',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('label', models.TextField(verbose_name='Label')),
+ ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID')),
+ ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
+ ('available', models.BooleanField(default=True, verbose_name='Available')),
+ ('order', models.IntegerField(default=10, verbose_name='Order')),
+ ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.workshopmovementstyletype', verbose_name='Parent')),
+ ],
+ options={
+ 'verbose_name': 'Workshop, movement, style type',
+ 'verbose_name_plural': 'Workshop, movement, style types',
+ 'ordering': ('order', 'label'),
+ },
+ bases=(ishtar_common.models_common.Cached, models.Model),
+ ),
+ migrations.AddField(
+ model_name='find',
+ name='workshop_movement_styles',
+ field=models.ManyToManyField(blank=True, related_name='finds', to='archaeological_finds.workshopmovementstyletype', verbose_name='Workshop, movement, style'),
+ ),
+ ]
diff --git a/archaeological_finds/migrations/0155_data_migration.json b/archaeological_finds/migrations/0155_data_migration.json
new file mode 100644
index 000000000..70a2acf89
--- /dev/null
+++ b/archaeological_finds/migrations/0155_data_migration.json
@@ -0,0 +1,24 @@
+[
+ {
+ "model": "archaeological_finds.workshopmovementstyletype",
+ "fields": {
+ "label": "Atelier, mouvement, style 1",
+ "txt_idx": "atelier-mouvement-style-1",
+ "comment": "",
+ "available": true,
+ "order": 10,
+ "parent": null
+ }
+ },
+ {
+ "model": "archaeological_finds.workshopmovementstyletype",
+ "fields": {
+ "label": "Atelier, mouvement, style 2",
+ "txt_idx": "atelier-mouvement-style-2",
+ "comment": "",
+ "available": true,
+ "order": 20,
+ "parent": null
+ }
+ }
+] \ No newline at end of file
diff --git a/archaeological_finds/migrations/0155_data_migration_workshop_movement_style.py b/archaeological_finds/migrations/0155_data_migration_workshop_movement_style.py
new file mode 100644
index 000000000..cfeb639a1
--- /dev/null
+++ b/archaeological_finds/migrations/0155_data_migration_workshop_movement_style.py
@@ -0,0 +1,26 @@
+# Generated by Django 2.2.24 on 2024-02-10 12:07
+
+import os
+
+from django.db import migrations
+from django.core.management import call_command
+
+
+def load_data(apps, __):
+ WorkshopMovementStyleType = apps.get_model("archaeological_finds",
+ "WorkshopMovementStyleType")
+ if not WorkshopMovementStyleType.objects.count():
+ json_path = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-1] + [
+ "0155_data_migration.json"])
+ call_command("loaddata", json_path)
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('archaeological_finds', '0154_workshop_movement_styles'),
+ ]
+
+ operations = [
+ migrations.RunPython(load_data)
+ ]
diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py
index 3b02d751e..12e6a05cb 100644
--- a/archaeological_finds/models.py
+++ b/archaeological_finds/models.py
@@ -40,6 +40,7 @@ from archaeological_finds.models_finds import (
TechnicalProcessType,
TreatmentEmergencyType,
TreatmentType,
+ WorkshopMovementStyleType,
)
from archaeological_finds.models_treatments import (
AbsFindTreatments,
@@ -118,4 +119,5 @@ __all__ = [
"TreatmentStatus",
"TreatmentState",
"TreatmentType",
+ "WorkshopMovementStyleType",
]
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index f7cd67968..9db0dae2a 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -141,6 +141,21 @@ post_save.connect(post_save_cache, sender=IconographicPatternType)
post_delete.connect(post_save_cache, sender=IconographicPatternType)
+class WorkshopMovementStyleType(OrderedHierarchicalType):
+ class Meta:
+ verbose_name = _("Workshop, movement, style type")
+ verbose_name_plural = _("Workshop, movement, style types")
+ ordering = (
+ "order",
+ "label",
+ )
+ ADMIN_SECTION = _("Finds")
+
+
+post_save.connect(post_save_cache, sender=WorkshopMovementStyleType)
+post_delete.connect(post_save_cache, sender=WorkshopMovementStyleType)
+
+
class ListedBuildingProtectionNature(OrderedHierarchicalType):
class Meta:
verbose_name = _("Listed building protection nature")
@@ -1379,6 +1394,7 @@ class Find(
("material_types__label", _("Material type")),
("object_types__label", _("Object type")),
("iconographic_patterns__label", _("Iconographic patterns")),
+ ("workshop_movement_styles__label", _("Workshop, movement, style")),
("recommended_treatments__label", _("Recommended treatments")),
("conservatory_states__label", _("Conservatory states")),
("integrities__label", _("Integrity")),
@@ -1576,6 +1592,11 @@ class Find(
pgettext_lazy("key for text search", "iconography-notes"),
"iconography_notes__iexact",
),
+ "workshop_movement_styles": SearchAltName(
+ pgettext_lazy("key for text search", "workshop-movement-style"),
+ "workshop_movement_styles__label__iexact",
+ related_name="workshop_movement_styles",
+ ),
"actors": SearchAltName(
pgettext_lazy("key for text search", "actors"),
"actors__cached_label__iexact"
@@ -2071,6 +2092,7 @@ class Find(
SearchVectorConfig("integrities__label", "raw"),
SearchVectorConfig("material_types__label", "local"),
SearchVectorConfig("iconographic_patterns__label", "local"),
+ SearchVectorConfig("workshop_movement_styles__label", "local"),
SearchVectorConfig("object_types__label", "raw"),
SearchVectorConfig("remarkabilities__label", "raw"),
SearchVectorConfig("technical_processes__label", "raw"),
@@ -2174,6 +2196,7 @@ class Find(
HISTORICAL_M2M = [
"material_types",
"iconographic_patterns",
+ "workshop_movement_styles",
"technical_processes",
"periods",
"datings",
@@ -2203,6 +2226,7 @@ class Find(
"functional_areas",
"material_types",
"iconographic_patterns",
+ "workshop_movement_styles",
"integrities",
"recommended_treatments",
"museum_former_collections",
@@ -2279,6 +2303,12 @@ class Find(
)
iconography_notes = models.TextField(_("Notes on iconography"), blank=True,
default="")
+ workshop_movement_styles = models.ManyToManyField(
+ WorkshopMovementStyleType,
+ verbose_name=_("Workshop, movement, style"),
+ related_name="finds",
+ blank=True,
+ )
manufacturing_place = models.TextField(
_("Manufacturing place"), blank=True, default=""
)
diff --git a/archaeological_finds/templates/ishtar/sheet_find.html b/archaeological_finds/templates/ishtar/sheet_find.html
index b3663bbbc..df2d68da0 100644
--- a/archaeological_finds/templates/ishtar/sheet_find.html
+++ b/archaeological_finds/templates/ishtar/sheet_find.html
@@ -123,44 +123,44 @@
</div>
<div class='row'>
- {% field_flex "Denomination" item.denomination %}
+ {% field_flex _("Denomination") item.denomination %}
{% field_flex _("Title") item.title %}
- {% field_flex "Complete museum ID" item.cache_complete_museum_id %}
- {% field_flex "Free ID" item.label %}
- {% field_flex "Previous ID" item.previous_id %}
- {% field_flex "Excavation ID" item.excavation_ids %}
- {% field_flex "Laboratory ID" item.laboratory_id %}
- {% field_flex "Seal number" item.seal_number %}
+ {% field_flex _("Complete museum ID") item.cache_complete_museum_id %}
+ {% field_flex _("Free ID") item.label %}
+ {% field_flex _("Previous ID") item.previous_id %}
+ {% field_flex _("Excavation ID") item.excavation_ids %}
+ {% field_flex _("Laboratory ID") item.laboratory_id %}
+ {% field_flex _("Seal number") item.seal_number %}
{# no index admin #}
</div>
<h3>{% trans "Description" %}</h3>
<div class='row'>
- {% field_flex_full "Description" item.description "<pre>" "</pre>" %}
- {% field_flex_full "Public description" item.public_description "<pre>" "</pre>" %}
- {% field_flex "Is complete?" item.is_complete %}
- {% with material=item.get_hierarchical_material_types %}{% if material %}
+ {% field_flex_full _("Description") item.description "<pre>" "</pre>" %}
+ {% field_flex_full _("Public description") item.public_description "<pre>" "</pre>" %}
+ {% field_flex _("Is complete?") item.is_complete %}
{% field_flex_detail_multiple _("Actors") item.actors %}
- {% field_flex "Material types" material %}{% else %}
- {% field_flex_multiple_obj "Material types" item 'material_types' %}
+ {% with material=item.get_hierarchical_material_types %}{% if material %}
+ {% field_flex _("Material types") material %}{% else %}
+ {% field_flex_multiple_obj _("Material types") item 'material_types' %}
{% endif %}{% endwith %}
- {% field_flex "Material type quality" item.material_type_quality %}
- {% field_flex_multiple_obj "Technical processes" item 'technical_processes' %}
- {% field_flex_full "Comment on the material" item.material_comment "<pre>" "</pre>" %}
- {% field_flex_multiple_obj "Object types" item 'object_types' %}
- {% field_flex "Object type quality" item.object_type_quality %}
- {% field_flex_multiple_obj "Functional areas" item 'functional_areas' %}
- {% field_flex_multiple_obj "Technical areas" item 'technical_areas' %}
- {% field_flex "Number of remains" item.find_number %}
- {% field_flex "Minimum number of individuals (MNI)" item.min_number_of_individuals %}
- {% field_flex "Inventory quantity" item.museum_inventory_quantity %}
- {% field_flex "Observed quantity" item.museum_observed_quantity %}
- {% field_flex_full "Comment on quantity" item.quantity_comment "<pre>" "</pre>" %}
- {% field_flex_full "Decoration" item.decoration "<pre>" "</pre>" %}
- {% field_flex_full "Inscription" item.inscription "<pre>" "</pre>" %}
- {% field_flex "Manufacturing place" item.manufacturing_place %}
- {% field_flex_multiple_obj "Cultural attributions" item 'cultural_attributions' %}
- {% field_flex_multiple_obj "Communicability" item 'communicabilities' %}
+ {% field_flex _("Material type quality") item.material_type_quality %}
+ {% field_flex_multiple_obj _("Technical processes") item 'technical_processes' %}
+ {% field_flex_full _("Comment on the material") item.material_comment "<pre>" "</pre>" %}
+ {% field_flex_multiple_obj _("Object types") item 'object_types' %}
+ {% field_flex _("Object type quality") item.object_type_quality %}
+ {% field_flex_multiple_obj _("Functional areas") item 'functional_areas' %}
+ {% field_flex_multiple_obj _("Technical areas") item 'technical_areas' %}
+ {% field_flex _("Number of remains") item.find_number %}
+ {% field_flex _("Minimum number of individuals (MNI)") item.min_number_of_individuals %}
+ {% field_flex _("Inventory quantity") item.museum_inventory_quantity %}
+ {% field_flex _("Observed quantity") item.museum_observed_quantity %}
+ {% field_flex_full _("Comment on quantity") item.quantity_comment "<pre>" "</pre>" %}
+ {% field_flex_full _("Decoration") item.decoration "<pre>" "</pre>" %}
+ {% field_flex_full _("Inscription") item.inscription "<pre>" "</pre>" %}
+ {% field_flex _("Manufacturing place") item.manufacturing_place %}
+ {% field_flex_multiple_obj _("Cultural attributions") item 'cultural_attributions' %}
+ {% field_flex_multiple_obj _("Communicability") item 'communicabilities' %}
{% field_flex_full _("General comment") item.comment "<pre>" "</pre>" %}
</div>
@@ -185,52 +185,53 @@
{% if item.has_museum_section %}
<h3>{% trans "Museum / legal status" %}</h3>
<div class='row'>
- {% field_flex "Complete museum ID" item.cache_complete_museum_id %}
- {% field_flex "Comment on museum ID" item.museum_id_comment %}
+ {% field_flex _("Complete museum ID") item.cache_complete_museum_id %}
+ {% field_flex _("Comment on museum ID") item.museum_id_comment %}
{% field_flex_multiple_obj _("Collections") item "museum_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 %}
- {% field_flex "Depositor inventory number" item.museum_depositor_inventory_number %}
- {% field_flex "Collections entry mode" item.museum_collection_entry_mode %}
- {% field_flex "Comment on museum entry mode" item.museum_entry_mode_comment %}
+ {% 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 %}
+ {% field_flex _("Depositor inventory number") item.museum_depositor_inventory_number %}
+ {% field_flex _("Collections entry mode") item.museum_collection_entry_mode %}
+ {% field_flex _("Comment on museum entry mode") item.museum_entry_mode_comment %}
{% 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 _("Comment on museum entry date") item.museum_entry_date_comment %}
{% field_flex_detail_multiple _("Donors, testators or vendors") item.museum_donors %}
{% field_flex_multiple_obj _("Iconographic patterns") item 'iconographic_patterns' %}
{% field_flex_full _("Notes on iconography") item.iconography_notes "<pre>" "</pre>" %}
- {% 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_multiple_obj _("Workshop, movement, style") item 'workshop_movement_styles' %}
+ {% 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 _("Transcription of the marking") item.mark_text %}
- {% field_flex "Marking details" item.mark "<pre>" "</pre>" %}
- {% field_flex "Conformity with inventory" item.museum_inventory_conformity %}
- {% field_flex "Comment on conformity" item.museum_conformity_comment %}
- {% field_flex "Inventory entry year" item.museum_inventory_entry_year %}
- {% field_flex_full "Inventory transcript" item.museum_inventory_transcript %}
- {% field_flex "Original/reproduction" item.museum_original_repro %}
- {% field_flex "Date of museum allocation" item.museum_allocation_date|date:"SHORT_DATE_FORMAT" %}
- {% field_flex "Purchase price" item.museum_purchase_price %}
+ {% field_flex _("Marking details") item.mark "<pre>" "</pre>" %}
+ {% field_flex _("Conformity with inventory") item.museum_inventory_conformity %}
+ {% field_flex _("Comment on conformity") item.museum_conformity_comment %}
+ {% field_flex _("Inventory entry year") item.museum_inventory_entry_year %}
+ {% field_flex_full _("Inventory transcript") item.museum_inventory_transcript %}
+ {% field_flex _("Original/reproduction") item.museum_original_repro %}
+ {% field_flex _("Date of museum allocation") item.museum_allocation_date|date:"SHORT_DATE_FORMAT" %}
+ {% field_flex _("Purchase price") item.museum_purchase_price %}
</div>
{% endif %}
{% if item.length or item.width or item.height or item.diameter or item.thickness or item.volume or item.weight_string or item.dimensions_comment or item.clutter_long_side or item.clutter_short_side or item.clutter_height %}
<h3>{% trans "Dimensions" %}</h3>
<div class='row'>
- {% field_flex "Length (cm)" item.length %}
- {% field_flex "Width (cm)" item.width %}
- {% field_flex "Height (cm)" item.height %}
- {% field_flex "Thickness (cm)" item.thickness %}
- {% field_flex "Diameter (cm)" item.diameter %}
- {% field_flex "Circumference (cm)" item.circumference %}
- {% field_flex "Volume (l)" item.volume %}
+ {% field_flex _("Length (cm)") item.length %}
+ {% field_flex _("Width (cm)") item.width %}
+ {% field_flex _("Height (cm)") item.height %}
+ {% field_flex _("Thickness (cm)") item.thickness %}
+ {% field_flex _("Diameter (cm)") item.diameter %}
+ {% field_flex _("Circumference (cm)") item.circumference %}
+ {% field_flex _("Volume (l)") item.volume %}
{% trans "Weight (g)" as weight_label %}
{% field_flex weight_label item.weight_string %}
- {% field_flex "Clutter long side (cm)" item.clutter_long_side %}
- {% field_flex "Clutter short side (cm)" item.clutter_short_side %}
- {% field_flex "Clutter height (cm)" item.clutter_height %}
- {% field_flex_full "Dimensions comment" item.dimensions_comment "<pre>" "</pre>" %}
+ {% field_flex _("Clutter long side (cm)") item.clutter_long_side %}
+ {% field_flex _("Clutter short side (cm)") item.clutter_short_side %}
+ {% field_flex _("Clutter height (cm)") item.clutter_height %}
+ {% field_flex_full _("Dimensions comment") item.dimensions_comment "<pre>" "</pre>" %}
</div>
{% endif %}
{% if has_image %}
@@ -244,7 +245,7 @@
{% trans "Checked" as checked_label %}
{% field_flex checked_label item.checked_type %}
{% with item.check_date|date:"SHORT_DATE_FORMAT" as check_date %}
- {% if check_date %}{% field_flex "Check date" check_date %}{% endif %}
+ {% if check_date %}{% field_flex _("Check date") check_date %}{% endif %}
{% endwith %}
{% include "ishtar/blocks/sheet_creation_section.html" %}
</div>
@@ -309,12 +310,12 @@
<h3>{% trans "Periods / Datings" %}</h3>
<div class='row'>
{% field_flex_multiple_obj _("Periods") item 'periods' %}
- {% field_flex_multiple_obj "Cultural attributions" item 'cultural_attributions' %}
- {% field_flex "TAQ" item.taq %}
- {% field_flex "Estimated TAQ" item.taq_estimated %}
- {% field_flex "TPQ" item.tpq %}
- {% field_flex "Estimated TPQ" item.tpq_estimated %}
- {% field_flex_full "Comment on datings" item.dating_comment "<pre>" "</pre>" has_image %}
+ {% field_flex_multiple_obj _("Cultural attributions") item 'cultural_attributions' %}
+ {% field_flex _("TAQ") item.taq %}
+ {% field_flex _("Estimated TAQ") item.taq_estimated %}
+ {% field_flex _("TPQ") item.tpq %}
+ {% field_flex _("Estimated TPQ") item.tpq_estimated %}
+ {% field_flex_full _("Comment on datings") item.dating_comment "<pre>" "</pre>" has_image %}
</div>
{% with url_dating="find-dating" %}
{% include "ishtar/blocks/sheet_dating_list.html" %}
diff --git a/archaeological_finds/templates/ishtar/sheet_museum_find.html b/archaeological_finds/templates/ishtar/sheet_museum_find.html
index b97143e15..f5b56e9d6 100644
--- a/archaeological_finds/templates/ishtar/sheet_museum_find.html
+++ b/archaeological_finds/templates/ishtar/sheet_museum_find.html
@@ -123,44 +123,44 @@
</div>
<div class='row'>
- {% field_flex "Denomination" item.denomination %}
+ {% field_flex _("Denomination") item.denomination %}
{% field_flex _("Title") item.title %}
- {% field_flex "Complete museum ID" item.cache_complete_museum_id %}
- {% field_flex "Free ID" item.label %}
- {% field_flex "Previous ID" item.previous_id %}
- {% field_flex "Excavation ID" item.excavation_ids %}
- {% field_flex "Laboratory ID" item.laboratory_id %}
- {% field_flex "Seal number" item.seal_number %}
+ {% field_flex _("Complete museum ID") item.cache_complete_museum_id %}
+ {% field_flex _("Free ID") item.label %}
+ {% field_flex _("Previous ID") item.previous_id %}
+ {% field_flex _("Excavation ID") item.excavation_ids %}
+ {% field_flex _("Laboratory ID") item.laboratory_id %}
+ {% field_flex _("Seal number") item.seal_number %}
{# no index admin #}
</div>
<h3>{% trans "Description" %}</h3>
<div class='row'>
- {% field_flex_full "Description" item.description "<pre>" "</pre>" %}
- {% field_flex_full "Public description" item.public_description "<pre>" "</pre>" %}
- {% field_flex "Is complete?" item.is_complete %}
- {% with material=item.get_hierarchical_material_types %}{% if material %}
+ {% field_flex_full _("Description") item.description "<pre>" "</pre>" %}
+ {% field_flex_full _("Public description") item.public_description "<pre>" "</pre>" %}
+ {% field_flex _("Is complete?") item.is_complete %}
{% field_flex_detail_multiple _("Actors") item.actors %}
- {% field_flex "Material types" material %}{% else %}
- {% field_flex_multiple_obj "Material types" item 'material_types' %}
+ {% with material=item.get_hierarchical_material_types %}{% if material %}
+ {% field_flex _("Material types") material %}{% else %}
+ {% field_flex_multiple_obj _("Material types") item 'material_types' %}
{% endif %}{% endwith %}
- {% field_flex "Material type quality" item.material_type_quality %}
- {% field_flex_multiple_obj "Technical processes" item 'technical_processes' %}
- {% field_flex_full "Comment on the material" item.material_comment "<pre>" "</pre>" %}
- {% field_flex_multiple_obj "Object types" item 'object_types' %}
- {% field_flex "Object type quality" item.object_type_quality %}
- {% field_flex_multiple_obj "Functional areas" item 'functional_areas' %}
- {% field_flex_multiple_obj "Technical areas" item 'technical_areas' %}
- {% field_flex "Number of remains" item.find_number %}
- {% field_flex "Minimum number of individuals (MNI)" item.min_number_of_individuals %}
- {% field_flex "Inventory quantity" item.museum_inventory_quantity %}
- {% field_flex "Observed quantity" item.museum_observed_quantity %}
- {% field_flex_full "Comment on quantity" item.quantity_comment "<pre>" "</pre>" %}
- {% field_flex_full "Decoration" item.decoration "<pre>" "</pre>" %}
- {% field_flex_full "Inscription" item.inscription "<pre>" "</pre>" %}
- {% field_flex "Manufacturing place" item.manufacturing_place %}
- {% field_flex_multiple_obj "Cultural attributions" item 'cultural_attributions' %}
- {% field_flex_multiple_obj "Communicability" item 'communicabilities' %}
+ {% field_flex _("Material type quality") item.material_type_quality %}
+ {% field_flex_multiple_obj _("Technical processes") item 'technical_processes' %}
+ {% field_flex_full _("Comment on the material") item.material_comment "<pre>" "</pre>" %}
+ {% field_flex_multiple_obj _("Object types") item 'object_types' %}
+ {% field_flex _("Object type quality") item.object_type_quality %}
+ {% field_flex_multiple_obj _("Functional areas") item 'functional_areas' %}
+ {% field_flex_multiple_obj _("Technical areas") item 'technical_areas' %}
+ {% field_flex _("Number of remains") item.find_number %}
+ {% field_flex _("Minimum number of individuals (MNI)") item.min_number_of_individuals %}
+ {% field_flex _("Inventory quantity") item.museum_inventory_quantity %}
+ {% field_flex _("Observed quantity") item.museum_observed_quantity %}
+ {% field_flex_full _("Comment on quantity") item.quantity_comment "<pre>" "</pre>" %}
+ {% field_flex_full _("Decoration") item.decoration "<pre>" "</pre>" %}
+ {% field_flex_full _("Inscription") item.inscription "<pre>" "</pre>" %}
+ {% field_flex _("Manufacturing place") item.manufacturing_place %}
+ {% field_flex_multiple_obj _("Cultural attributions") item 'cultural_attributions' %}
+ {% field_flex_multiple_obj _("Communicability") item 'communicabilities' %}
{% field_flex_full _("General comment") item.comment "<pre>" "</pre>" %}
</div>
@@ -185,52 +185,53 @@
{% if item.has_museum_section %}
<h3>{% trans "Museum / legal status" %}</h3>
<div class='row'>
- {% field_flex "Complete museum ID" item.cache_complete_museum_id %}
- {% field_flex "Comment on museum ID" item.museum_id_comment %}
+ {% field_flex _("Complete museum ID") item.cache_complete_museum_id %}
+ {% field_flex _("Comment on museum ID") item.museum_id_comment %}
{% field_flex_multiple_obj _("Collections") item "museum_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 %}
- {% field_flex "Depositor inventory number" item.museum_depositor_inventory_number %}
- {% field_flex "Collections entry mode" item.museum_collection_entry_mode %}
- {% field_flex "Comment on museum entry mode" item.museum_entry_mode_comment %}
+ {% 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 %}
+ {% field_flex _("Depositor inventory number") item.museum_depositor_inventory_number %}
+ {% field_flex _("Collections entry mode") item.museum_collection_entry_mode %}
+ {% field_flex _("Comment on museum entry mode") item.museum_entry_mode_comment %}
{% 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 _("Comment on museum entry date") item.museum_entry_date_comment %}
{% field_flex_detail_multiple _("Donors, testators or vendors") item.museum_donors %}
{% field_flex_multiple_obj _("Iconographic patterns") item 'iconographic_patterns' %}
{% field_flex_full _("Notes on iconography") item.iconography_notes "<pre>" "</pre>" %}
- {% 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_multiple_obj _("Workshop, movement, style") item 'workshop_movement_styles' %}
+ {% 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 _("Transcription of the marking") item.mark_text %}
- {% field_flex "Marking details" item.mark "<pre>" "</pre>" %}
- {% field_flex "Conformity with inventory" item.museum_inventory_conformity %}
- {% field_flex "Comment on conformity" item.museum_conformity_comment %}
- {% field_flex "Inventory entry year" item.museum_inventory_entry_year %}
- {% field_flex_full "Inventory transcript" item.museum_inventory_transcript %}
- {% field_flex "Original/reproduction" item.museum_original_repro %}
- {% field_flex "Date of museum allocation" item.museum_allocation_date|date:"SHORT_DATE_FORMAT" %}
- {% field_flex "Purchase price" item.museum_purchase_price %}
+ {% field_flex _("Marking details") item.mark "<pre>" "</pre>" %}
+ {% field_flex _("Conformity with inventory") item.museum_inventory_conformity %}
+ {% field_flex _("Comment on conformity") item.museum_conformity_comment %}
+ {% field_flex _("Inventory entry year") item.museum_inventory_entry_year %}
+ {% field_flex_full _("Inventory transcript") item.museum_inventory_transcript %}
+ {% field_flex _("Original/reproduction") item.museum_original_repro %}
+ {% field_flex _("Date of museum allocation") item.museum_allocation_date|date:"SHORT_DATE_FORMAT" %}
+ {% field_flex _("Purchase price") item.museum_purchase_price %}
</div>
{% endif %}
{% if item.length or item.width or item.height or item.diameter or item.thickness or item.volume or item.weight_string or item.dimensions_comment or item.clutter_long_side or item.clutter_short_side or item.clutter_height %}
<h3>{% trans "Dimensions" %}</h3>
<div class='row'>
- {% field_flex "Length (cm)" item.length %}
- {% field_flex "Width (cm)" item.width %}
- {% field_flex "Height (cm)" item.height %}
- {% field_flex "Thickness (cm)" item.thickness %}
- {% field_flex "Diameter (cm)" item.diameter %}
- {% field_flex "Circumference (cm)" item.circumference %}
- {% field_flex "Volume (l)" item.volume %}
+ {% field_flex _("Length (cm)") item.length %}
+ {% field_flex _("Width (cm)") item.width %}
+ {% field_flex _("Height (cm)") item.height %}
+ {% field_flex _("Thickness (cm)") item.thickness %}
+ {% field_flex _("Diameter (cm)") item.diameter %}
+ {% field_flex _("Circumference (cm)") item.circumference %}
+ {% field_flex _("Volume (l)") item.volume %}
{% trans "Weight (g)" as weight_label %}
{% field_flex weight_label item.weight_string %}
- {% field_flex "Clutter long side (cm)" item.clutter_long_side %}
- {% field_flex "Clutter short side (cm)" item.clutter_short_side %}
- {% field_flex "Clutter height (cm)" item.clutter_height %}
- {% field_flex_full "Dimensions comment" item.dimensions_comment "<pre>" "</pre>" %}
+ {% field_flex _("Clutter long side (cm)") item.clutter_long_side %}
+ {% field_flex _("Clutter short side (cm)") item.clutter_short_side %}
+ {% field_flex _("Clutter height (cm)") item.clutter_height %}
+ {% field_flex_full _("Dimensions comment") item.dimensions_comment "<pre>" "</pre>" %}
</div>
{% endif %}
{% if has_image %}
@@ -244,7 +245,7 @@
{% trans "Checked" as checked_label %}
{% field_flex checked_label item.checked_type %}
{% with item.check_date|date:"SHORT_DATE_FORMAT" as check_date %}
- {% if check_date %}{% field_flex "Check date" check_date %}{% endif %}
+ {% if check_date %}{% field_flex _("Check date") check_date %}{% endif %}
{% endwith %}
{% include "ishtar/blocks/sheet_creation_section.html" %}
</div>
@@ -309,12 +310,12 @@
<h3>{% trans "Periods / Datings" %}</h3>
<div class='row'>
{% field_flex_multiple_obj _("Periods") item 'periods' %}
- {% field_flex_multiple_obj "Cultural attributions" item 'cultural_attributions' %}
- {% field_flex "TAQ" item.taq %}
- {% field_flex "Estimated TAQ" item.taq_estimated %}
- {% field_flex "TPQ" item.tpq %}
- {% field_flex "Estimated TPQ" item.tpq_estimated %}
- {% field_flex_full "Comment on datings" item.dating_comment "<pre>" "</pre>" has_image %}
+ {% field_flex_multiple_obj _("Cultural attributions") item 'cultural_attributions' %}
+ {% field_flex _("TAQ") item.taq %}
+ {% field_flex _("Estimated TAQ") item.taq_estimated %}
+ {% field_flex _("TPQ") item.tpq %}
+ {% field_flex _("Estimated TPQ") item.tpq_estimated %}
+ {% field_flex_full _("Comment on datings") item.dating_comment "<pre>" "</pre>" has_image %}
</div>
{% with url_dating="find-dating" %}
{% include "ishtar/blocks/sheet_dating_list.html" %}
diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py
index b9ed7a9a4..60c6e566e 100644
--- a/archaeological_finds/urls.py
+++ b/archaeological_finds/urls.py
@@ -603,58 +603,63 @@ urlpatterns = [
views.get_downstreamtreatment,
name="get-downstreamtreatment",
),
- re_path(
- r"autocomplete-objecttype/$",
+ path(
+ "autocomplete-objecttype/",
views.autocomplete_objecttype,
name="autocomplete-objecttype",
),
- re_path(
- r"autocomplete-functionalarea/$",
+ path(
+ "autocomplete-functionalarea/",
views.autocomplete_functionalarea,
name="autocomplete-functionalarea",
),
- re_path(
- r"autocomplete-technicalarea/$",
+ path(
+ "autocomplete-technicalarea/",
views.autocomplete_technicalarea,
name="autocomplete-technicalarea",
),
- re_path(
- r"autocomplete-technicalprocess/$",
+ path(
+ "autocomplete-technicalprocess/",
views.autocomplete_technicalprocess,
name="autocomplete-technicalprocess",
),
- re_path(
- r"autocomplete-materialtype/$",
+ path(
+ "autocomplete-materialtype/",
views.autocomplete_materialtype,
name="autocomplete-materialtype",
),
- re_path(
- r"autocomplete-iconographicpattern/$",
+ path(
+ "autocomplete-iconographicpattern/",
views.autocomplete_iconographicpattern,
name="autocomplete-iconographicpattern",
),
- re_path(
- r"autocomplete-treatmenttype/$",
+ path(
+ "autocomplete-treatmenttype/",
views.autocomplete_treatmenttype,
name="autocomplete-treatmenttype",
),
- re_path(
- r"autocomplete-integritytype/$",
+ path(
+ "autocomplete-integritytype/",
views.autocomplete_integritytype,
name="autocomplete-integritytype",
),
- re_path(
- r"autocomplete-treatmentfile/$",
+ path(
+ "autocomplete-treatmentfile/",
views.autocomplete_treatmentfile,
name="autocomplete-treatmentfile",
),
- re_path(
- r"autocomplete-exhibition/$",
+ path(
+ "autocomplete-workshopmovementstyle/",
+ views.autocomplete_workshopmovementstyle,
+ name="autocomplete-workshopmovementstyle",
+ ),
+ path(
+ "autocomplete-exhibition/",
views.autocomplete_exhibition,
name="autocomplete-exhibition",
),
- re_path(
- r"autocomplete-statementcondition/$",
+ path(
+ "autocomplete-statementcondition/",
views.autocomplete_statementcondition,
name="autocomplete-statementcondition",
),
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py
index 3ce2a466f..929d57962 100644
--- a/archaeological_finds/views.py
+++ b/archaeological_finds/views.py
@@ -548,6 +548,8 @@ autocomplete_materialtype = get_autocomplete_generic(models.MaterialType)
autocomplete_technicalarea = get_autocomplete_generic(models.TechnicalAreaType)
autocomplete_technicalprocess = get_autocomplete_generic(models.TechnicalProcessType)
autocomplete_treatmenttype = get_autocomplete_generic(models.TreatmentType)
+autocomplete_workshopmovementstyle = get_autocomplete_generic(
+ models.WorkshopMovementStyleType)
find_modify_relations = get_relation_modify(
models.Find, models.FindRecordRelations,
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index df0d7f2ef..ada8420be 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -101,6 +101,7 @@ LIST_FIELDS = { # key: hierarchic depth
"identifications": HIERARCHIC_LEVELS,
"material_types": HIERARCHIC_LEVELS,
"iconographic_patterns": HIERARCHIC_LEVELS,
+ "workshop_movement_styles": HIERARCHIC_LEVELS,
"material_type": HIERARCHIC_LEVELS,
"object_types": HIERARCHIC_LEVELS,
"period": HIERARCHIC_LEVELS,