diff options
-rw-r--r-- | archaeological_finds/forms.py | 43 | ||||
-rw-r--r-- | archaeological_finds/migrations/0077_find_cultural_attributions.py | 21 | ||||
-rw-r--r-- | archaeological_finds/models_finds.py | 12 | ||||
-rw-r--r-- | archaeological_finds/templates/ishtar/sheet_find.html | 9 | ||||
-rw-r--r-- | archaeological_operations/models.py | 2 |
5 files changed, 66 insertions, 21 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 929f1bade..156132c27 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -31,6 +31,7 @@ from django.forms.formsets import formset_factory from django.utils.translation import ugettext_lazy as _ from . import models +from archaeological_operations.models import CulturalAttributionType from archaeological_context_records.models import DatingType, DatingQuality, \ ContextRecord, RelationType as CRRelationType, Dating from archaeological_finds.forms_treatments import TreatmentSelect, \ @@ -127,17 +128,19 @@ class RecordFormSelection(CustomForm, forms.Form): cr.operation.pk) -class BaseFindForm(CustomForm, ManageOldType): +class BasicFindForm(CustomForm, ManageOldType): """ - Base find form with no field related to base_find + Basic find form with no field related to base_find """ file_upload = True form_label = _("Find") form_admin_name = _(u"Simple find - 020 - General") form_slug = "simplefind-020-general" - base_models = ['object_type', 'material_type', 'communicabilitie'] + base_models = ['object_type', 'material_type', 'communicabilitie', + 'cultural_attribution'] associated_models = { 'material_type': models.MaterialType, + 'cultural_attribution': CulturalAttributionType, 'object_type': models.ObjectType, 'communicabilitie': models.CommunicabilityType, 'material_type_quality': models.MaterialTypeQualityType, @@ -150,7 +153,8 @@ class BaseFindForm(CustomForm, ManageOldType): 'material_type', 'material_type_quality', 'material_comment', 'object_type', 'object_type_quality', 'find_number', 'min_number_of_individuals', 'inscription', 'decoration', - 'manufacturing_place', 'communicabilitie', 'comment', 'dating_comment', + 'manufacturing_place', 'communicabilitie', 'comment', + 'cultural_attribution', 'dating_comment', 'length', 'width', 'height', 'thickness', 'diameter', 'circumference', 'volume', 'weight', 'clutter_long_side', 'clutter_short_side', 'clutter_height', 'dimensions_comment', 'checked_type', 'check_date' @@ -202,6 +206,9 @@ class BaseFindForm(CustomForm, ManageOldType): ) comment = forms.CharField(label=_(u"Comment"), required=False, widget=forms.Textarea) + cultural_attribution = widgets.Select2MultipleField( + label=_("Cultural attribution"), required=False, + ) dating_comment = forms.CharField( label=_(u"Comment on dating"), required=False, widget=forms.Textarea) @@ -242,6 +249,8 @@ class BaseFindForm(CustomForm, ManageOldType): TYPES = [ FieldType('material_type', models.MaterialType, is_multiple=True, extra_args={"full_hierarchy": True}), + FieldType('cultural_attribution', CulturalAttributionType, + is_multiple=True), FieldType('material_type_quality', models.MaterialTypeQualityType), FieldType('object_type', models.ObjectType, is_multiple=True, extra_args={"full_hierarchy": True}), @@ -253,7 +262,7 @@ class BaseFindForm(CustomForm, ManageOldType): def __init__(self, *args, **kwargs): context_record = kwargs.pop('context_record') - super(BaseFindForm, self).__init__(*args, **kwargs) + super(BasicFindForm, self).__init__(*args, **kwargs) if not context_record or \ not context_record.operation.operation_type.judiciary: self.fields.pop('seal_number') @@ -272,13 +281,13 @@ class BaseFindForm(CustomForm, ManageOldType): return self.cleaned_data -class FindForm(BaseFindForm): +class FindForm(BasicFindForm): file_upload = True form_label = _("Find") form_admin_name = _(u"Find - 020 - General") form_slug = "find-020-general" - base_models = ['get_first_base_find'] + BaseFindForm.base_models - associated_models = BaseFindForm.associated_models.copy() + base_models = ['get_first_base_find'] + BasicFindForm.base_models + associated_models = BasicFindForm.associated_models.copy() associated_models.update({ 'get_first_base_find__batch': models.BatchType, 'get_first_base_find__spatial_reference_system': SpatialReferenceSystem, @@ -293,6 +302,7 @@ class FindForm(BaseFindForm): 'material_comment', 'object_type', 'object_type_quality', 'find_number', 'min_number_of_individuals', 'inscription', 'manufacturing_place', 'communicabilitie', 'comment', + 'cultural_attribution', 'dating_comment', 'length', 'width', 'height', 'thickness', 'diameter', 'circumference', 'volume', 'weight', 'clutter_long_side', 'clutter_short_side', @@ -305,7 +315,7 @@ class FindForm(BaseFindForm): 'check_date', ] - HEADERS = BaseFindForm.HEADERS.copy() + HEADERS = BasicFindForm.HEADERS.copy() get_first_base_find__excavation_id = forms.CharField( label=_(u"Excavation ID"), required=False) @@ -336,7 +346,7 @@ class FindForm(BaseFindForm): required=False, max_length=120 ) - TYPES = BaseFindForm.TYPES + [ + TYPES = BasicFindForm.TYPES + [ FieldType('get_first_base_find__batch', models.BatchType), FieldType('get_first_base_find__spatial_reference_system', SpatialReferenceSystem), @@ -395,7 +405,7 @@ class FindForm(BaseFindForm): return self.cleaned_data -class SimpleFindForm(BaseFindForm): +class SimpleFindForm(BasicFindForm): def __init__(self, *args, **kwargs): self.base_finds = kwargs.pop('base_finds') super(SimpleFindForm, self).__init__(*args, **kwargs) @@ -454,7 +464,7 @@ class ResultingFindForm(CustomForm, ManageOldType): label=_(u"Communicability"), required=False ) resulting_comment = forms.CharField(label=_(u"Comment"), required=False, - widget=forms.Textarea) + widget=forms.Textarea) resulting_dating_comment = forms.CharField( label=_(u"Comment on dating"), required=False, widget=forms.Textarea) @@ -463,8 +473,8 @@ class ResultingFindForm(CustomForm, ManageOldType): resulting_width = FloatField(label=_(u"Width (cm)"), required=False) resulting_height = FloatField(label=_(u"Height (cm)"), required=False) resulting_diameter = FloatField(label=_(u"Diameter (cm)"), required=False) - resulting_circumference = FloatField(label=_(u"Circumference (cm)"), - required=False) + resulting_circumference = FloatField(label=_(u"Circumference (cm)"), + required=False) resulting_thickness = FloatField(label=_(u"Thickness (cm)"), required=False) resulting_volume = FloatField(label=_(u"Volume (l)"), required=False) resulting_weight = FloatField(label=_(u"Weight (g)"), required=False) @@ -1042,6 +1052,8 @@ class FindSelect(HistorySelect): communicabilities = forms.ChoiceField(label=_(u"Communicability")) comment = forms.CharField(label=_(u"Comment")) + cultural_attributions = forms.ChoiceField( + label=_("Cultural attribution"), choices=[], required=False) datings__period = forms.ChoiceField(label=_(u"Period"), choices=[]) dating_comment = forms.CharField(label=_(u"Comment on dating")) @@ -1147,8 +1159,6 @@ class FindSelect(HistorySelect): label=_(u"Appraisal date after"), widget=DatePicker) appraisal_date__before = forms.DateField( label=_(u"Appraisal date before"), widget=DatePicker) - conservatory_comment = forms.CharField( - label=_(u"Conservatory comment")) documents__image__isnull = forms.NullBooleanField(label=_(u"Has an image?")) loan = forms.NullBooleanField(label=_(u"Loan?")) @@ -1173,6 +1183,7 @@ class FindSelect(HistorySelect): FieldType('alterations', models.AlterationType), FieldType('alteration_causes', models.AlterationCauseType), FieldType('treatment_emergency', models.TreatmentEmergencyType), + FieldType('cultural_attributions', CulturalAttributionType), ] SITE_KEYS = { "archaeological_sites": "attached-to-operation", diff --git a/archaeological_finds/migrations/0077_find_cultural_attributions.py b/archaeological_finds/migrations/0077_find_cultural_attributions.py new file mode 100644 index 000000000..d774a66e8 --- /dev/null +++ b/archaeological_finds/migrations/0077_find_cultural_attributions.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2019-09-23 15:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_operations', '0070_auto_20190923_1408'), + ('archaeological_finds', '0076_treatmentfile_change_txt_idx'), + ] + + operations = [ + migrations.AddField( + model_name='find', + name='cultural_attributions', + field=models.ManyToManyField(blank=True, to='archaeological_operations.CulturalAttributionType', verbose_name='Cultural attribution'), + ), + ] diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 89b52977f..fc8483329 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -47,7 +47,8 @@ from ishtar_common.models import Document, GeneralType, \ SearchAltName, QRCodeItem, SearchVectorConfig, DocumentItem -from archaeological_operations.models import AdministrativeAct, Operation +from archaeological_operations.models import AdministrativeAct, Operation, \ + CulturalAttributionType from archaeological_context_records.models import ContextRecord, Dating from archaeological_warehouse.models import Warehouse @@ -1352,6 +1353,10 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, SearchAltName( pgettext_lazy("key for text search", "appraisal-date-after"), 'appraisal_date__gte'), + 'cultural_attributions': SearchAltName( + pgettext_lazy("key for text search", "cultural-attribution"), + 'cultural_attributions__label__iexact' + ), } ALT_NAMES.update(BaseHistorizedItem.ALT_NAMES) @@ -1451,7 +1456,7 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, HISTORICAL_M2M = [ 'material_types', 'datings', 'object_types', 'integrities', 'remarkabilities', 'communicabilities', 'preservation_to_considers', - 'alterations', 'alteration_causes' + 'alterations', 'alteration_causes', "cultural_attributions" ] GET_VALUES_EXTRA_TYPES = ( 'material_types', 'object_types', 'integrities', @@ -1508,6 +1513,9 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem, verbose_name=_(u"Downstream treatment"), on_delete=models.SET_NULL) datings = models.ManyToManyField(Dating, verbose_name=_(u"Dating"), related_name='find') + cultural_attributions = models.ManyToManyField( + CulturalAttributionType, verbose_name=_("Cultural attribution"), + blank=True) container = models.ForeignKey( "archaeological_warehouse.Container", verbose_name=_("Container"), blank=True, null=True, related_name='finds', on_delete=models.SET_NULL) diff --git a/archaeological_finds/templates/ishtar/sheet_find.html b/archaeological_finds/templates/ishtar/sheet_find.html index f1a1affb6..ab82eb6d9 100644 --- a/archaeological_finds/templates/ishtar/sheet_find.html +++ b/archaeological_finds/templates/ishtar/sheet_find.html @@ -23,7 +23,7 @@ {% with non_modif_treatments_count=item.non_modif_treatments_count %} {% with associated_treatment_files_count=item.associated_treatment_files_count %} -{% with display_datings=item.integrities.count|or_:item.remarkabilities.count|or_:item.conservatory_state|or_:item.conservatory_comment|or_:item.alterations.count|or_:item.alteration_causes.count|or_:item.preservation_to_considers.count|or_:item.appraisal_date|or_:item.treatment_emergency|or_:item.insurance_value|or_:item.estimated_value|or_:m2m_listing_datings|or_:item.dating_comment %} +{% with display_datings=item.integrities.count|or_:item.remarkabilities.count|or_:item.conservatory_state|or_:item.conservatory_comment|or_:item.alterations.count|or_:item.alteration_causes.count|or_:item.preservation_to_considers.count|or_:item.appraisal_date|or_:item.treatment_emergency|or_:item.insurance_value|or_:item.estimated_value|or_:m2m_listing_datings|or_:item.dating_comment|or_:item.cultural_attributions.count %} {% with display_warehouse_treatments=item.container|or_:item.container_ref|or_:item.upstream_treatment|or_:item.downstream_treatment|or_:non_modif_treatments_count|or_:associated_treatment_files_count %} {% with can_view_documents=permission_view_own_document|or_:permission_view_document %} {% with display_documents=can_view_documents|and_:item.documents.count %} @@ -206,8 +206,13 @@ </div> {% endif %} - {% if m2m_listing_datings or item.dating_comment %} + {% if m2m_listing_datings or item.dating_comment or item.cultural_attributions.count %} <h3>{% trans "Dating" %}</h3> + {% if item.cultural_attributions.count %} + <div class='row'> + {% field_flex_multiple_obj "Cultural attributions" item 'cultural_attributions' %} + </div> + {% endif %} <table id='{{window_id}}-datings' class="table table-striped"> <tr> <th>{% trans "Period" %}</th> diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index d452bbb39..19e528de1 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -253,7 +253,7 @@ class ArchaeologicalSite(DocumentItem, BaseHistorizedItem, QRCodeItem, 'affmar_number__iexact' ), 'cultural_attributions': SearchAltName( - pgettext_lazy("key for text search", "cultural-attribution'"), + pgettext_lazy("key for text search", "cultural-attribution"), 'cultural_attributions__label__iexact' ), } |