summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-04-13 17:11:50 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-04-13 17:13:06 +0200
commit96422251b70120d5299b264397166e160f2fb180 (patch)
tree938b4e94156cc9fe39fa7e7218b66aeafe709214
parent6c1bdfa9c4def194a608deaccae259125c3b175d (diff)
downloadIshtar-96422251b70120d5299b264397166e160f2fb180.tar.bz2
Ishtar-96422251b70120d5299b264397166e160f2fb180.zip
Finds - fields: add clutter dimensions and material, object type quality types
-rw-r--r--archaeological_finds/admin.py7
-rw-r--r--archaeological_finds/forms.py38
-rw-r--r--archaeological_finds/migrations/0023_auto_20180413_1637.py103
-rw-r--r--archaeological_finds/models.py5
-rw-r--r--archaeological_finds/models_finds.py42
-rw-r--r--archaeological_finds/templates/ishtar/sheet_find.html7
6 files changed, 192 insertions, 10 deletions
diff --git a/archaeological_finds/admin.py b/archaeological_finds/admin.py
index 91cbbada7..970cd8845 100644
--- a/archaeological_finds/admin.py
+++ b/archaeological_finds/admin.py
@@ -170,6 +170,7 @@ class MaterialTypeAdmin(HierarchicalTypeAdmin):
list_display = HierarchicalTypeAdmin.list_display + ['recommendation']
search_fields = ('label', 'parent__label', 'comment',)
+
admin_site.register(models.MaterialType, MaterialTypeAdmin)
@@ -180,6 +181,8 @@ class TreatmentTypeAdmin(GeneralTypeAdmin):
list_display = HierarchicalTypeAdmin.list_display + [
'order', 'virtual', 'upstream_is_many', 'downstream_is_many']
model = models.TreatmentType
+
+
admin_site.register(models.TreatmentType, TreatmentTypeAdmin)
general_models = [
@@ -187,7 +190,9 @@ general_models = [
models.IntegrityType,
models.TreatmentFileType, models.TreatmentState,
models.BatchType, models.AlterationCauseType, models.AlterationType,
- models.TreatmentEmergencyType
+ models.TreatmentEmergencyType, models.ObjectTypeQualityType,
+ models.MaterialTypeQualityType
]
+
for model in general_models:
admin_site.register(model, GeneralTypeAdmin)
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 15d86f91f..ac58780f0 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -135,12 +135,15 @@ class FindForm(CustomForm, ManageOldType):
form_slug = "find-020-general"
base_models = ['get_first_base_find', 'object_type', 'material_type',
'communicabilitie']
- associated_models = {'material_type': models.MaterialType,
- 'object_type': models.ObjectType,
- 'communicabilitie': models.CommunicabilityType,
- 'get_first_base_find__batch': models.BatchType,
- 'get_first_base_find__spatial_reference_system':
- SpatialReferenceSystem}
+ associated_models = {
+ 'material_type': models.MaterialType,
+ 'object_type': models.ObjectType,
+ 'communicabilitie': models.CommunicabilityType,
+ 'get_first_base_find__batch': models.BatchType,
+ 'get_first_base_find__spatial_reference_system': SpatialReferenceSystem,
+ 'material_type_quality': models.MaterialTypeQualityType,
+ 'object_type_quality': models.ObjectTypeQualityType
+ }
HEADERS = {}
HEADERS['label'] = FormHeader(_(u"Identification"))
@@ -171,9 +174,13 @@ class FindForm(CustomForm, ManageOldType):
material_type = widgets.Select2MultipleField(
label=_(u"Material types"), required=False
)
+ material_type_quality = forms.ChoiceField(
+ label=_(u"Material type quality"), required=False, choices=[])
object_type = widgets.Select2MultipleField(
label=_(u"Object types"), required=False,
)
+ object_type_quality = forms.ChoiceField(
+ label=_(u"Object type quality"), required=False, choices=[])
find_number = forms.IntegerField(label=_(u"Find number"), required=False)
min_number_of_individuals = forms.IntegerField(
label=_(u"Minimum number of individuals (MNI)"), required=False)
@@ -203,6 +210,12 @@ class FindForm(CustomForm, ManageOldType):
thickness = FloatField(label=_(u"Thickness (cm)"), required=False)
volume = FloatField(label=_(u"Volume (l)"), required=False)
weight = FloatField(label=_(u"Weight (g)"), required=False)
+ clutter_long_side = FloatField(
+ label=_(u"Clutter long side (cm)"), required=False)
+ clutter_short_side = FloatField(
+ label=_(u"Clutter short side (cm)"), required=False)
+ clutter_height = FloatField(
+ label=_(u"Clutter height (cm)"), required=False)
dimensions_comment = forms.CharField(
label=_(u"Dimensions comment"), required=False, widget=forms.Textarea)
@@ -232,7 +245,9 @@ class FindForm(CustomForm, ManageOldType):
TYPES = [
FieldType('material_type', models.MaterialType, is_multiple=True),
+ FieldType('material_type_quality', models.MaterialTypeQualityType),
FieldType('object_type', models.ObjectType, is_multiple=True),
+ FieldType('object_type_quality', models.ObjectTypeQualityType),
FieldType('communicabilitie', models.CommunicabilityType,
is_multiple=True),
FieldType('get_first_base_find__batch', models.BatchType),
@@ -273,6 +288,17 @@ class FindForm(CustomForm, ManageOldType):
unicode(_(u"Discovery date: TAQ date must be older than TPQ "
u"date.")))
+ clutter_long_side = self.cleaned_data.get('clutter_long_side', None)
+ clutter_short_side = self.cleaned_data.get('clutter_short_side', None)
+
+ if clutter_long_side and clutter_short_side and \
+ clutter_short_side > clutter_long_side:
+ raise forms.ValidationError(
+ unicode(_(
+ u"Clutter: short side cannot be bigger than the long side."
+ ))
+ )
+
if not get_current_profile().mapping:
return self.cleaned_data
x = self.cleaned_data.get('get_first_base_find__x', None)
diff --git a/archaeological_finds/migrations/0023_auto_20180413_1637.py b/archaeological_finds/migrations/0023_auto_20180413_1637.py
new file mode 100644
index 000000000..9d5172a1e
--- /dev/null
+++ b/archaeological_finds/migrations/0023_auto_20180413_1637.py
@@ -0,0 +1,103 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.10 on 2018-04-13 16:37
+from __future__ import unicode_literals
+
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+import ishtar_common.models
+import re
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('archaeological_finds', '0022_auto_20180413_1147'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='MaterialTypeQualityType',
+ 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, null=True, verbose_name='Comment')),
+ ('available', models.BooleanField(default=True, verbose_name='Available')),
+ ('order', models.IntegerField(default=10, verbose_name='Order')),
+ ],
+ options={
+ 'ordering': ('order',),
+ 'verbose_name': 'Material type quality type',
+ 'verbose_name_plural': 'Material type quality types',
+ },
+ bases=(ishtar_common.models.Cached, models.Model),
+ ),
+ migrations.CreateModel(
+ name='ObjectTypeQualityType',
+ 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, null=True, verbose_name='Comment')),
+ ('available', models.BooleanField(default=True, verbose_name='Available')),
+ ('order', models.IntegerField(default=10, verbose_name='Order')),
+ ],
+ options={
+ 'ordering': ('order',),
+ 'verbose_name': 'Object type quality type',
+ 'verbose_name_plural': 'Object type quality types',
+ },
+ bases=(ishtar_common.models.Cached, models.Model),
+ ),
+ migrations.AddField(
+ model_name='find',
+ name='clutter_height',
+ field=models.FloatField(blank=True, null=True, verbose_name='Clutter - height (cm)'),
+ ),
+ migrations.AddField(
+ model_name='find',
+ name='clutter_long_side',
+ field=models.FloatField(blank=True, null=True, verbose_name='Clutter - long side (cm)'),
+ ),
+ migrations.AddField(
+ model_name='find',
+ name='clutter_short_side',
+ field=models.FloatField(blank=True, null=True, verbose_name='Clutter - short side (cm)'),
+ ),
+ migrations.AddField(
+ model_name='historicalfind',
+ name='clutter_height',
+ field=models.FloatField(blank=True, null=True, verbose_name='Clutter - height (cm)'),
+ ),
+ migrations.AddField(
+ model_name='historicalfind',
+ name='clutter_long_side',
+ field=models.FloatField(blank=True, null=True, verbose_name='Clutter - long side (cm)'),
+ ),
+ migrations.AddField(
+ model_name='historicalfind',
+ name='clutter_short_side',
+ field=models.FloatField(blank=True, null=True, verbose_name='Clutter - short side (cm)'),
+ ),
+ migrations.AddField(
+ model_name='find',
+ name='material_type_quality',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='finds', to='archaeological_finds.MaterialTypeQualityType', verbose_name='Material type quality'),
+ ),
+ migrations.AddField(
+ model_name='find',
+ name='object_type_quality',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='finds', to='archaeological_finds.ObjectTypeQualityType', verbose_name='Object type quality'),
+ ),
+ migrations.AddField(
+ model_name='historicalfind',
+ name='material_type_quality',
+ field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.MaterialTypeQualityType'),
+ ),
+ migrations.AddField(
+ model_name='historicalfind',
+ name='object_type_quality',
+ field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.ObjectTypeQualityType'),
+ ),
+ ]
diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py
index a0f387620..774b3c98b 100644
--- a/archaeological_finds/models.py
+++ b/archaeological_finds/models.py
@@ -3,7 +3,7 @@ from archaeological_finds.models_finds import MaterialType, ConservatoryState,\
FindBasket, Find, FindSource, Property, CHECK_CHOICES, BatchType, \
BFBulkView, FBulkView, FirstBaseFindView, AlterationType, \
AlterationCauseType, TreatmentEmergencyType, TreatmentType, \
- CommunicabilityType
+ CommunicabilityType, MaterialTypeQualityType, ObjectTypeQualityType
from archaeological_finds.models_treatments import Treatment, \
AbsFindTreatments, FindUpstreamTreatments, FindDownstreamTreatments, \
FindTreatments, TreatmentSource, TreatmentFile, TreatmentFileType, \
@@ -18,4 +18,5 @@ __all__ = ['MaterialType', 'ConservatoryState',
'Treatment', 'AbsFindTreatments', 'FindUpstreamTreatments',
'FindDownstreamTreatments', 'FindTreatments', 'TreatmentSource',
'TreatmentFile', 'TreatmentFileType', 'TreatmentFileSource',
- 'CommunicabilityType']
+ 'CommunicabilityType', 'MaterialTypeQualityType',
+ 'ObjectTypeQualityType']
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index ecb4d049b..31ec20785 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -58,6 +58,19 @@ post_save.connect(post_save_cache, sender=MaterialType)
post_delete.connect(post_save_cache, sender=MaterialType)
+class MaterialTypeQualityType(GeneralType):
+ order = models.IntegerField(_(u"Order"), default=10)
+
+ class Meta:
+ verbose_name = _(u"Material type quality type")
+ verbose_name_plural = _(u"Material type quality types")
+ ordering = ('order',)
+
+
+post_save.connect(post_save_cache, sender=MaterialTypeQualityType)
+post_delete.connect(post_save_cache, sender=MaterialTypeQualityType)
+
+
class ConservatoryState(HierarchicalType):
class Meta:
verbose_name = _(u"Conservatory state")
@@ -140,6 +153,19 @@ post_save.connect(post_save_cache, sender=ObjectType)
post_delete.connect(post_save_cache, sender=ObjectType)
+class ObjectTypeQualityType(GeneralType):
+ order = models.IntegerField(_(u"Order"), default=10)
+
+ class Meta:
+ verbose_name = _(u"Object type quality type")
+ verbose_name_plural = _(u"Object type quality types")
+ ordering = ('order',)
+
+
+post_save.connect(post_save_cache, sender=ObjectTypeQualityType)
+post_delete.connect(post_save_cache, sender=ObjectTypeQualityType)
+
+
class AlterationType(HierarchicalType):
class Meta:
verbose_name = _(u"Alteration type")
@@ -701,6 +727,11 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
MaterialType, verbose_name=_(u"Material types"), related_name='finds',
blank=True
)
+ material_type_quality = models.ForeignKey(
+ MaterialTypeQualityType,
+ verbose_name=_(u"Material type quality"), related_name='finds',
+ blank=True, null=True
+ )
volume = models.FloatField(_(u"Volume (l)"), blank=True, null=True)
weight = models.FloatField(_(u"Weight"), blank=True, null=True)
weight_unit = models.CharField(_(u"Weight unit"), max_length=4,
@@ -725,6 +756,11 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
ObjectType, verbose_name=_(u"Object types"), related_name='find',
blank=True
)
+ object_type_quality = models.ForeignKey(
+ ObjectTypeQualityType,
+ verbose_name=_(u"Object type quality"), related_name='finds',
+ blank=True, null=True
+ )
integrities = models.ManyToManyField(
IntegrityType, verbose_name=_(u"Integrity / interest"),
related_name='find', blank=True)
@@ -741,6 +777,12 @@ class Find(BulkUpdatedItem, ValueGetter, BaseHistorizedItem, ImageModel,
height = models.FloatField(_(u"Height (cm)"), blank=True, null=True)
diameter = models.FloatField(_(u"Diameter (cm)"), blank=True, null=True)
thickness = models.FloatField(_(u"Thickness (cm)"), blank=True, null=True)
+ clutter_long_side = models.FloatField(
+ _(u"Clutter - long side (cm)"), blank=True, null=True)
+ clutter_short_side = models.FloatField(
+ _(u"Clutter - short side (cm)"), blank=True, null=True)
+ clutter_height = models.FloatField(
+ _(u"Clutter - height (cm)"), blank=True, null=True)
dimensions_comment = models.TextField(_(u"Dimensions comment"),
blank=True, null=True)
mark = models.TextField(_(u"Mark"), blank=True, null=True)
diff --git a/archaeological_finds/templates/ishtar/sheet_find.html b/archaeological_finds/templates/ishtar/sheet_find.html
index 5062963ba..af7997e67 100644
--- a/archaeological_finds/templates/ishtar/sheet_find.html
+++ b/archaeological_finds/templates/ishtar/sheet_find.html
@@ -53,7 +53,9 @@
{% field_flex_full "Description" item.description "<pre>" "</pre>" %}
{% field_flex "Is complete?" item.is_complete %}
{% field_flex_multiple "Material types" item.material_types %}
+ {% field_flex "Material type quality" item.material_type_quality %}
{% field_flex_multiple "Object types" item.object_types %}
+ {% field_flex "Object type quality" item.object_type_quality %}
{% field_flex "Find number" item.find_number %}
{% field_flex "Minimum number of individuals (MNI)" item.min_number_of_individuals %}
{% field_flex_full "Decoration" item.decoration "<pre>" "</pre>" %}
@@ -63,7 +65,7 @@
{% field_flex_full "Comment" item.comment "<pre>" "</pre>" %}
</div>
-{% 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 %}
+{% 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 %}
@@ -74,6 +76,9 @@
{% 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>" %}
</div>
{% endif %}