diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-23 14:43:48 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-23 14:43:48 +0200 |
commit | 78e232902e214ef0eee1521b2c76057b3b53df32 (patch) | |
tree | 2abd184b08e73352ccb9ddb078b1d48122b5e472 | |
parent | 18f5651ca2025a658397ba70acc24b42ebacd12d (diff) | |
download | Ishtar-78e232902e214ef0eee1521b2c76057b3b53df32.tar.bz2 Ishtar-78e232902e214ef0eee1521b2c76057b3b53df32.zip |
Hide parcel field for UE QA - Add cultural atribution for sites
-rw-r--r-- | archaeological_context_records/forms.py | 13 | ||||
-rw-r--r-- | archaeological_finds/admin.py | 7 | ||||
-rw-r--r-- | archaeological_operations/admin.py | 16 | ||||
-rw-r--r-- | archaeological_operations/forms.py | 22 | ||||
-rw-r--r-- | archaeological_operations/lookups.py | 9 | ||||
-rw-r--r-- | archaeological_operations/migrations/0070_auto_20190923_1408.py | 42 | ||||
-rw-r--r-- | archaeological_operations/models.py | 21 | ||||
-rw-r--r-- | archaeological_operations/templates/ishtar/sheet_site.html | 1 | ||||
-rw-r--r-- | ishtar_common/admin.py | 4 |
9 files changed, 118 insertions, 17 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py index 72877c2e2..5d98b9718 100644 --- a/archaeological_context_records/forms.py +++ b/archaeological_context_records/forms.py @@ -445,6 +445,8 @@ class QAOperationCR(IshtarForm): if self.profil.parcel_mandatory: self.fields['parcel'].required = True self.fields.pop('town') + else: + self.fields.pop("parcel") if not self.items: return @@ -456,10 +458,11 @@ class QAOperationCR(IshtarForm): (site.pk, str(site)) for site in operation.archaeological_sites.all() ] - self.fields['parcel'].choices += [('', '--')] + [ - (str(parcel.pk), u"{} - {}".format(parcel.short_label, parcel.town)) - for parcel in operation.parcels.all() - ] + if self.profil.parcel_mandatory: + self.fields['parcel'].choices += [('', '--')] + [ + (str(parcel.pk), u"{} - {}".format(parcel.short_label, + parcel.town)) + for parcel in operation.parcels.all()] def save(self, items): operation = items[0] @@ -473,7 +476,5 @@ class QAOperationCR(IshtarForm): if self.profil.parcel_mandatory: data["parcel_id"] = self.cleaned_data['parcel'] else: - if self.cleaned_data.get('parcel', None): - data["parcel_id"] = self.cleaned_data['parcel'] data["town_id"] = self.cleaned_data['town'] models.ContextRecord.objects.create(**data) diff --git a/archaeological_finds/admin.py b/archaeological_finds/admin.py index 2adc22f75..c1659a495 100644 --- a/archaeological_finds/admin.py +++ b/archaeological_finds/admin.py @@ -27,7 +27,8 @@ from django.contrib.gis.forms import PointField, MultiPolygonField, \ from django.utils.translation import ugettext_lazy as _ from ishtar_common.apps import admin_site -from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin +from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin, \ + HierarchicalTypeAdmin from . import models @@ -164,10 +165,6 @@ class TreatmentFileAdmin(HistorizedObjectAdmin): admin_site.register(models.TreatmentFile, TreatmentFileAdmin) -class HierarchicalTypeAdmin(GeneralTypeAdmin): - list_display = ['label', 'txt_idx', 'parent', 'available', 'comment'] - - class ObjectTypeAdmin(HierarchicalTypeAdmin): model = models.ObjectType form = make_ajax_form(model, { diff --git a/archaeological_operations/admin.py b/archaeological_operations/admin.py index b6300cdf2..0aec94249 100644 --- a/archaeological_operations/admin.py +++ b/archaeological_operations/admin.py @@ -28,7 +28,8 @@ from django.contrib.gis.forms import PointField, MultiPolygonField, OSMWidget from django.utils.translation import ugettext_lazy as _ from ishtar_common.apps import admin_site -from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin +from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin, \ + HierarchicalTypeAdmin from . import models @@ -206,6 +207,19 @@ class ParcelOwnerAdmin(HistorizedObjectAdmin): admin_site.register(models.ParcelOwner, ParcelOwnerAdmin) +class CulturalAttributionTypeAdmin(HierarchicalTypeAdmin): + list_display = HierarchicalTypeAdmin.list_display + search_fields = ('label', 'parent__label', ) + model = models.CulturalAttributionType + form = make_ajax_form(model, { + 'parent': 'cultural_attribution_type', + }) + + +admin_site.register(models.CulturalAttributionType, + CulturalAttributionTypeAdmin) + + general_models = [models.RemainType] for model in general_models: admin_site.register(model, GeneralTypeAdmin) diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index a03513861..4ea0847bf 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -1216,6 +1216,7 @@ class PeriodForm(CustomForm, ManageOldType, forms.Form): class ArchaeologicalSiteForm(ManageOldType): associated_models = {'period': models.Period, 'remain': models.RemainType, + 'cultural_attribution': models.CulturalAttributionType, 'spatial_reference_system': SpatialReferenceSystem} HEADERS = {} reference = forms.CharField(label=_(u"Reference"), max_length=200) @@ -1226,6 +1227,10 @@ class ArchaeologicalSiteForm(ManageOldType): remains = forms.MultipleChoiceField( label=_("Remains"), choices=[], widget=widgets.Select2Multiple, required=False) + cultural_attributions = forms.MultipleChoiceField( + label=_("Cultural attributions"), choices=[], + widget=widgets.Select2Multiple, + required=False) HEADERS['x'] = FormHeader(_(u"Coordinates")) x = forms.FloatField(label=_(u"X"), required=False) estimated_error_x = forms.FloatField(label=_(u"Estimated error for X"), @@ -1253,6 +1258,8 @@ class ArchaeologicalSiteForm(ManageOldType): TYPES = [ FieldType('periods', models.Period, True), FieldType('remains', models.RemainType, True), + FieldType('cultural_attributions', models.CulturalAttributionType, + True), FieldType('spatial_reference_system', SpatialReferenceSystem), ] @@ -1296,11 +1303,14 @@ class ArchaeologicalSiteForm(ManageOldType): periods = dct.pop('periods') remains = dct.pop('remains') + cultural_attributions = dct.pop('cultural_attributions') item = models.ArchaeologicalSite.objects.create(**dct) for period in periods: item.periods.add(period) for remain in remains: item.remains.add(remain) + for cultural_attribution in cultural_attributions: + item.cultural_attributions.add(cultural_attribution) return item @@ -1366,6 +1376,8 @@ class SiteSelect(HistorySelect): name = forms.CharField(label=_(u"Name"), max_length=200, required=False) periods = forms.ChoiceField(label=_(u"Periods"), choices=[], required=False) remains = forms.ChoiceField(label=_(u"Remains"), choices=[], required=False) + cultural_attributions = forms.ChoiceField( + label=_("Cultural attribution"), choices=[], required=False) towns = get_town_field() towns__areas = forms.ChoiceField(label=_("Areas"), choices=[]) comment = forms.CharField(label=_(u"Comment"), max_length=200, @@ -1409,6 +1421,7 @@ class SiteSelect(HistorySelect): TYPES = [ FieldType('periods', models.Period), FieldType('remains', models.RemainType), + FieldType('cultural_attributions', models.CulturalAttributionType), FieldType('towns__areas', Area), ] @@ -1467,8 +1480,9 @@ class SiteForm(CustomForm, ManageOldType): form_slug = u"archaeological_site-010-general" associated_models = {'period': models.Period, 'remain': models.RemainType, 'spatial_reference_system': SpatialReferenceSystem, + 'cultural_attribution': models.CulturalAttributionType, 'collaborator': Person} - base_models = ["period", "remain", "collaborator"] + base_models = ["period", "remain", "collaborator", "cultural_attribution"] pk = forms.IntegerField(required=False, widget=forms.HiddenInput) reference = forms.CharField(label=_(u"Reference"), max_length=200) @@ -1479,6 +1493,10 @@ class SiteForm(CustomForm, ManageOldType): remain = forms.MultipleChoiceField( label=_("Remains"), choices=[], widget=widgets.Select2Multiple, required=False) + cultural_attribution = forms.MultipleChoiceField( + label=_("Cultural attributions"), choices=[], + widget=widgets.Select2Multiple, + required=False) collaborator = widgets.Select2MultipleField( model=Person, label=_("Collaborators"), required=False, remote=True) comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, @@ -1519,6 +1537,8 @@ class SiteForm(CustomForm, ManageOldType): TYPES = [ FieldType('period', models.Period, True), FieldType('remain', models.RemainType, True), + FieldType('cultural_attribution', + models.CulturalAttributionType, True), FieldType('spatial_reference_system', SpatialReferenceSystem), ] diff --git a/archaeological_operations/lookups.py b/archaeological_operations/lookups.py index 8329da709..2d70029ce 100644 --- a/archaeological_operations/lookups.py +++ b/archaeological_operations/lookups.py @@ -1,13 +1,13 @@ from ajax_select import register -from ishtar_common.lookups import LookupChannel +from ishtar_common.lookups import LookupChannel, TypeLookupChannel from django.db.models import Q from django.utils.encoding import force_text from django.utils.html import escape from archaeological_operations.models import Operation, ArchaeologicalSite, \ - Parcel + Parcel, CulturalAttributionType @register('operation') @@ -76,3 +76,8 @@ class ParcelLookup(LookupChannel): def format_item_display(self, item): return u"<span class='ajax-label'>%s</span>" % item.long_label() + + +@register("cultural_attribution_type") +class CulturalAttributionTypeLookup(TypeLookupChannel): + model = CulturalAttributionType diff --git a/archaeological_operations/migrations/0070_auto_20190923_1408.py b/archaeological_operations/migrations/0070_auto_20190923_1408.py new file mode 100644 index 000000000..13e1ac7d4 --- /dev/null +++ b/archaeological_operations/migrations/0070_auto_20190923_1408.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2019-09-23 14:08 +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_operations', '0069_auto_20190918_1520'), + ] + + operations = [ + migrations.CreateModel( + name='CulturalAttributionType', + 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', 32), "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(verbose_name='Order')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_operations.CulturalAttributionType', verbose_name='Parent')), + ], + options={ + 'ordering': ('order',), + 'verbose_name_plural': 'Cultural attribution types', + 'verbose_name': 'Cultural attribution type', + }, + bases=(ishtar_common.models.Cached, models.Model), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='cultural_attributions', + field=models.ManyToManyField(blank=True, to='archaeological_operations.CulturalAttributionType', verbose_name='Cultural attribution'), + ), + ] diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 55594bcd9..d452bbb39 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -41,7 +41,8 @@ from ishtar_common.models import BaseHistorizedItem, Dashboard, \ post_delete_record_relation, post_save_cache, RelationItem, \ ShortMenuItem, SourceType, Town, ValueGetter, get_current_profile, \ document_attached_changed, HistoryModel, SearchAltName, \ - GeoItem, QRCodeItem, SearchVectorConfig, DocumentItem, QuickAction, MainItem + GeoItem, QRCodeItem, SearchVectorConfig, DocumentItem, QuickAction, \ + MainItem, HierarchicalType from ishtar_common.model_managers import UUIDModelManager from ishtar_common.utils import cached_label_changed, \ force_cached_label_changed, mode, m2m_historization_changed, post_save_geo @@ -106,6 +107,15 @@ class RecordQualityType(GeneralType): ordering = ('order',) +class CulturalAttributionType(HierarchicalType): + order = models.IntegerField(_("Order")) + + class Meta: + verbose_name = _("Cultural attribution type") + verbose_name_plural = _("Cultural attribution types") + ordering = ('order',) + + post_save.connect(post_save_cache, sender=RecordQualityType) post_delete.connect(post_save_cache, sender=RecordQualityType) @@ -242,6 +252,10 @@ class ArchaeologicalSite(DocumentItem, BaseHistorizedItem, QRCodeItem, pgettext_lazy("key for text search", "numero-affmar"), 'affmar_number__iexact' ), + 'cultural_attributions': SearchAltName( + pgettext_lazy("key for text search", "cultural-attribution'"), + 'cultural_attributions__label__iexact' + ), } ALT_NAMES.update(BaseHistorizedItem.ALT_NAMES) @@ -252,7 +266,7 @@ class ArchaeologicalSite(DocumentItem, BaseHistorizedItem, QRCodeItem, RELATIVE_SESSION_NAMES = [ ('operation', 'operations__pk'), ] - HISTORICAL_M2M = ['periods', 'remains', 'towns'] + HISTORICAL_M2M = ['periods', 'remains', 'towns', 'cultural_attributions'] CACHED_LABELS = ['cached_label', 'cached_towns_label', 'cached_periods', 'cached_remains'] DOWN_MODEL_UPDATE = ["context_records"] @@ -275,6 +289,9 @@ class ArchaeologicalSite(DocumentItem, BaseHistorizedItem, QRCodeItem, blank=True) remains = models.ManyToManyField("RemainType", verbose_name=_(u'Remains'), blank=True) + cultural_attributions = models.ManyToManyField( + "CulturalAttributionType", verbose_name=_("Cultural attribution"), + blank=True) towns = models.ManyToManyField(Town, verbose_name=_("Towns"), related_name='sites', blank=True) comment = models.TextField(_("Comment"), null=True, blank=True) diff --git a/archaeological_operations/templates/ishtar/sheet_site.html b/archaeological_operations/templates/ishtar/sheet_site.html index 7b88ff630..91e6e7307 100644 --- a/archaeological_operations/templates/ishtar/sheet_site.html +++ b/archaeological_operations/templates/ishtar/sheet_site.html @@ -36,6 +36,7 @@ {% include "ishtar/blocks/sheet_creation_section.html" %} {% field_flex_multiple_obj "Periods" item 'periods' %} {% field_flex_multiple_obj "Remains" item 'remains' %} + {% field_flex_multiple_obj "Cultural attributions" item 'cultural_attributions' %} {% field_flex_multiple "Collaborators" item.collaborators %} {% field_flex_full "Comment" item.comment "<pre>" "</pre>" %} </div> diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 98f7c2663..3f1acaab5 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -803,6 +803,10 @@ class GeneralTypeAdmin(ImportActionAdmin): request, object_id, form_url, extra_context) +class HierarchicalTypeAdmin(GeneralTypeAdmin): + list_display = ['label', 'txt_idx', 'parent', 'available', 'comment'] + + general_models = [models.OrganizationType, models.SourceType, models.AuthorType, models.TitleType, models.Format, models.SupportType, models.PersonType, models.LicenseType] |