summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-23 15:37:41 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-23 15:43:41 +0200
commit8b3e8a9e57da557595cfe0cba63428601f131d93 (patch)
tree855bfac09cba06f88a9313a71337da0ed91e064e
parent78e232902e214ef0eee1521b2c76057b3b53df32 (diff)
downloadIshtar-8b3e8a9e57da557595cfe0cba63428601f131d93.tar.bz2
Ishtar-8b3e8a9e57da557595cfe0cba63428601f131d93.zip
Finds: add cultural attributions
-rw-r--r--archaeological_finds/forms.py43
-rw-r--r--archaeological_finds/migrations/0077_find_cultural_attributions.py21
-rw-r--r--archaeological_finds/models_finds.py12
-rw-r--r--archaeological_finds/templates/ishtar/sheet_find.html9
-rw-r--r--archaeological_operations/models.py2
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'
),
}