diff options
| 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 |
| commit | a20e6f427edfaf3ae8b8f020957134fa4a2d577d (patch) | |
| tree | c7784b19b02793147b11b4236853456293c1b9df | |
| parent | c9db6e5bdb9182cd2d38c1daf1096350cf13a4a7 (diff) | |
| download | Ishtar-a20e6f427edfaf3ae8b8f020957134fa4a2d577d.tar.bz2 Ishtar-a20e6f427edfaf3ae8b8f020957134fa4a2d577d.zip | |
✨ finds - workshop, movement, style fields: model, admin, forms, views, sheet (refs #6725)
| -rw-r--r-- | archaeological_finds/admin.py | 8 | ||||
| -rw-r--r-- | archaeological_finds/forms.py | 24 | ||||
| -rw-r--r-- | archaeological_finds/migrations/0154_workshop_movement_styles.py | 40 | ||||
| -rw-r--r-- | archaeological_finds/migrations/0155_data_migration.json | 24 | ||||
| -rw-r--r-- | archaeological_finds/migrations/0155_data_migration_workshop_movement_style.py | 26 | ||||
| -rw-r--r-- | archaeological_finds/models.py | 2 | ||||
| -rw-r--r-- | archaeological_finds/models_finds.py | 30 | ||||
| -rw-r--r-- | archaeological_finds/templates/ishtar/sheet_find.html | 135 | ||||
| -rw-r--r-- | archaeological_finds/templates/ishtar/sheet_museum_find.html | 135 | ||||
| -rw-r--r-- | archaeological_finds/urls.py | 49 | ||||
| -rw-r--r-- | archaeological_finds/views.py | 2 | ||||
| -rw-r--r-- | ishtar_common/views_item.py | 1 |
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, |
