diff options
| -rw-r--r-- | archaeological_finds/admin.py | 7 | ||||
| -rw-r--r-- | archaeological_finds/forms.py | 38 | ||||
| -rw-r--r-- | archaeological_finds/migrations/0023_auto_20180413_1637.py | 103 | ||||
| -rw-r--r-- | archaeological_finds/models.py | 5 | ||||
| -rw-r--r-- | archaeological_finds/models_finds.py | 42 | ||||
| -rw-r--r-- | archaeological_finds/templates/ishtar/sheet_find.html | 7 | 
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 %} | 
