diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-09-03 12:41:59 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-09-03 12:41:59 +0200 |
commit | 9554264a2acccf88ee89cb89f20eb7bce967a561 (patch) | |
tree | a970e10861234de83f8dbe104a86a8323f7fa787 | |
parent | ba05d1376890231994a6eb4d904083359282c726 (diff) | |
download | Ishtar-9554264a2acccf88ee89cb89f20eb7bce967a561.tar.bz2 Ishtar-9554264a2acccf88ee89cb89f20eb7bce967a561.zip |
Manage history for sites
-rw-r--r-- | archaeological_operations/migrations/0037_auto_20180903_1015.py | 75 | ||||
-rw-r--r-- | archaeological_operations/models.py | 10 | ||||
-rw-r--r-- | archaeological_operations/templates/ishtar/sheet_site.html | 4 | ||||
-rw-r--r-- | archaeological_operations/urls.py | 4 | ||||
-rw-r--r-- | archaeological_operations/views.py | 1 | ||||
-rw-r--r-- | ishtar_common/migrations/0070_profiletypesummary.py | 27 |
6 files changed, 116 insertions, 5 deletions
diff --git a/archaeological_operations/migrations/0037_auto_20180903_1015.py b/archaeological_operations/migrations/0037_auto_20180903_1015.py new file mode 100644 index 000000000..b86a88c0a --- /dev/null +++ b/archaeological_operations/migrations/0037_auto_20180903_1015.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-09-03 10:15 +from __future__ import unicode_literals + +from django.conf import settings +import django.contrib.gis.db.models.fields +import django.contrib.postgres.fields.jsonb +import django.contrib.postgres.search +from django.db import migrations, models +import django.db.models.deletion + + +def create_history(apps, schema_editor): + Site = apps.get_model('archaeological_operations', 'ArchaeologicalSite') + if not Site.objects.count(): + return + # living dangerously... + from archaeological_operations.models import ArchaeologicalSite + for site in ArchaeologicalSite.objects.all(): + site.save() + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('archaeological_operations', '0036_auto_20180809_1242'), + ] + + operations = [ + migrations.CreateModel( + name='HistoricalArchaeologicalSite', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, db_index=True, default={})), + ('search_vector', django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto filled at save', null=True, verbose_name='Search vector')), + ('reference', models.CharField(db_index=True, max_length=200, verbose_name='Reference')), + ('name', models.CharField(blank=True, max_length=200, null=True, verbose_name='Name')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('locality_ngi', models.TextField(blank=True, null=True, verbose_name='National Geographic Institute locality')), + ('locality_cadastral', models.TextField(blank=True, null=True, verbose_name='Cadastral locality')), + ('shipwreck_name', models.TextField(blank=True, null=True, verbose_name='Shipwreck name')), + ('oceanographic_service_localisation', models.TextField(blank=True, null=True, verbose_name='Oceanographic service localisation')), + ('shipwreck_code', models.TextField(blank=True, null=True, verbose_name='Shipwreck code')), + ('sinking_date', models.DateField(blank=True, null=True, verbose_name='Sinking date')), + ('discovery_area', models.TextField(blank=True, null=True, verbose_name='Discovery area')), + ('point', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point')), + ('multi_polygon', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon')), + ('cached_label', models.TextField(blank=True, db_index=True, null=True, verbose_name='Cached name')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ('history_creator', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('history_modifier', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), + ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ('top_operation', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_operations.Operation')), + ], + options={ + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + 'verbose_name': 'historical Archaeological site', + }, + ), + migrations.AddField( + model_name='archaeologicalsite', + name='multi_polygon', + field=django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='point', + field=django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point'), + ), + migrations.RunPython(create_history), + ] diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 34e2e4716..42f1775df 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -98,7 +98,8 @@ post_save.connect(post_save_cache, sender=RecordQualityType) post_delete.connect(post_save_cache, sender=RecordQualityType) -class ArchaeologicalSite(BaseHistorizedItem): +class ArchaeologicalSite(BaseHistorizedItem, OwnPerms, ValueGetter, + ShortMenuItem): SHOW_URL = 'show-site' TABLE_COLS = ['reference', 'name', 'towns_label', 'periods', 'remains'] SLUG = 'site' @@ -216,12 +217,19 @@ class ArchaeologicalSite(BaseHistorizedItem): discovery_area = models.TextField( _(u"Discovery area"), null=True, blank=True) + # gis + point = models.PointField(_(u"Point"), blank=True, null=True) + multi_polygon = models.MultiPolygonField(_(u"Multi polygon"), blank=True, + null=True) + documents = models.ManyToManyField( Document, related_name="sites", verbose_name=_(u"Documents"), blank=True) cached_label = models.TextField(_(u"Cached name"), null=True, blank=True, db_index=True) + history = HistoricalRecords() + class Meta: verbose_name = _(u"Archaeological site") verbose_name_plural = _(u"Archaeological sites") diff --git a/archaeological_operations/templates/ishtar/sheet_site.html b/archaeological_operations/templates/ishtar/sheet_site.html index a69609f90..8473e8675 100644 --- a/archaeological_operations/templates/ishtar/sheet_site.html +++ b/archaeological_operations/templates/ishtar/sheet_site.html @@ -4,11 +4,7 @@ {% block head_title %}<strong>{{SITE_LABEL}}</strong> - {{item}}{% endblock %} {% block toolbar %} -{%comment%} {% window_nav item window_id 'show-site' 'site_modify' 'show-historized-site' 'revert-site' previous next 1 %} -{%endcomment%} - -{% window_nav item window_id 'show-site' 'site_modify' %} {% endblock %} {% block content %} diff --git a/archaeological_operations/urls.py b/archaeological_operations/urls.py index 759bcc88d..d4fcd578a 100644 --- a/archaeological_operations/urls.py +++ b/archaeological_operations/urls.py @@ -132,8 +132,12 @@ urlpatterns = [ views.get_site, name='get-site'), url(r'get-site-full/(?P<type>.+)?$', views.get_site, name='get-site-full', kwargs={'full': True}), + url(r'revert-site/(?P<pk>.+)/(?P<date>.+)$', + views.revert_site, name='revert-site'), url(r'show-site(?:/(?P<pk>.+))?/(?P<type>.+)?$', views.show_site, name=models.ArchaeologicalSite.SHOW_URL), + url(r'show-historized-site/(?P<pk>.+)?/(?P<date>.+)?$', + views.show_site, name='show-historized-site'), url(r'site_search/(?P<step>.+)?$', check_rights(['view_archaeologicalsite', 'view_own_archaeologicalsite'])( diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index 10e60c2bb..858043c82 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -350,6 +350,7 @@ show_site = show_item( models.ArchaeologicalSite, 'site', extra_dct=site_extra_context ) +revert_site = revert_item(models.ArchaeologicalSite) site_search_wizard = SiteSearch.as_view( [('general-site_search', SiteFormSelection)], diff --git a/ishtar_common/migrations/0070_profiletypesummary.py b/ishtar_common/migrations/0070_profiletypesummary.py new file mode 100644 index 000000000..c7b165dc9 --- /dev/null +++ b/ishtar_common/migrations/0070_profiletypesummary.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-09-03 10:15 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0069_userprofile_show_field_number'), + ] + + operations = [ + migrations.CreateModel( + name='ProfileTypeSummary', + fields=[ + ], + options={ + 'verbose_name': 'Profile type summary', + 'proxy': True, + 'verbose_name_plural': 'Profile types summary', + 'indexes': [], + }, + bases=('ishtar_common.profiletype',), + ), + ] |