summaryrefslogtreecommitdiff
path: root/archaeological_operations
diff options
context:
space:
mode:
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
commitb6464968770440dc73816c857b064bc9f7af2fd4 (patch)
treea970e10861234de83f8dbe104a86a8323f7fa787 /archaeological_operations
parent13de6e74c2b4ad9757a211080c35bbd44961653f (diff)
downloadIshtar-b6464968770440dc73816c857b064bc9f7af2fd4.tar.bz2
Ishtar-b6464968770440dc73816c857b064bc9f7af2fd4.zip
Manage history for sites
Diffstat (limited to 'archaeological_operations')
-rw-r--r--archaeological_operations/migrations/0037_auto_20180903_1015.py75
-rw-r--r--archaeological_operations/models.py10
-rw-r--r--archaeological_operations/templates/ishtar/sheet_site.html4
-rw-r--r--archaeological_operations/urls.py4
-rw-r--r--archaeological_operations/views.py1
5 files changed, 89 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)],