summaryrefslogtreecommitdiff
path: root/chimere
diff options
context:
space:
mode:
Diffstat (limited to 'chimere')
-rw-r--r--chimere/admin.py46
-rw-r--r--chimere/forms.py6
-rw-r--r--chimere/templates/chimere/detail.html4
-rw-r--r--chimere/tests.py34
4 files changed, 80 insertions, 10 deletions
diff --git a/chimere/admin.py b/chimere/admin.py
index 7663bd5..4f7a49d 100644
--- a/chimere/admin.py
+++ b/chimere/admin.py
@@ -24,12 +24,13 @@ import datetime
from django import forms
from django.conf import settings
-from django.contrib import admin
+from django.contrib import admin, messages
+from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Q
-from django.http import HttpResponse
+from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response
+from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _
-
try:
from chimere import tasks
except ImportError:
@@ -87,6 +88,42 @@ def export_to_csv(modeladmin, request, queryset):
return response
export_to_csv.short_description = _(u"Export to CSV")
+def managed_modified(modeladmin, request, queryset):
+ if queryset.count() != 1:
+ messages.error(request, _(u"Only one item can be managed at a "
+ u"time."))
+ return HttpResponseRedirect(request.get_full_path())
+
+ marker = queryset.all()[0]
+ if not marker.status == 'M':
+ try:
+ marker = Marker.objects.get(ref_item=marker, status='M')
+ except ObjectDoesNotExist:
+ messages.error(request, _(u"No modified item associated "
+ u"to the selected marker."))
+ return HttpResponseRedirect(request.get_full_path())
+ marker_ref = marker.ref_item
+ if request.POST.get('rapprochement'):
+ for k in request.POST:
+ if not request.POST[k]:
+ continue
+ if hasattr(marker_ref, k):
+ setattr(marker_ref, k, getattr(marker, k))
+ marker_ref.save()
+ elif k.startswith('property_'):
+ try:
+ pm = PropertyModel.get(pk=int(k[len('property_'):]))
+ marker_ref.setProperty(pm, marker.getProperty(pm))
+ except (ValueError, ObjectDoesNotExist):
+ pass
+ marker.delete()
+ messages.success(request, _(u"Modified item traited."))
+ return HttpResponseRedirect(request.get_full_path())
+ return render_to_response('admin/managed_modified_marker.html',
+ {'marker':marker, 'marker_ref':marker_ref},
+ context_instance=RequestContext(request))
+
+
class PictureInline(admin.TabularInline):
model = PictureFile
extra = 1
@@ -108,7 +145,8 @@ class MarkerAdmin(admin.ModelAdmin):
search_fields = ("name",)
list_display = ('name', 'status')
list_filter = ('status', 'categories')
- actions = [validate, export_to_kml, export_to_shapefile, export_to_csv]
+ actions = [validate, export_to_kml, export_to_shapefile, export_to_csv,
+ managed_modified]
exclude = ['submiter_session_key', 'import_key', 'import_version',
'available_date']
readonly_fields = ['submiter_email', 'submiter_comment', 'import_source',
diff --git a/chimere/forms.py b/chimere/forms.py
index 1d37b56..4e834d0 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -203,7 +203,7 @@ class MarkerAdminFormBase(forms.ModelForm):
Custom save method in order to manage associated properties
"""
new_marker = super(MarkerAdminFormBase, self).save(*args, **keys)
- if 'status' not in self.cleaned_data:
+ if 'status' not in self.cleaned_data and not new_marker.status:
new_marker.status = 'S'
if new_marker.status == 'A':
tz = UTC()
@@ -276,8 +276,8 @@ class RouteAdminForm(forms.ModelForm):
Custom save method in order to manage associated properties
"""
new_route = super(RouteAdminForm, self).save(*args, **keys)
- if 'status' not in self.cleaned_data:
- new_route.status = 'S'
+ if 'status' not in self.cleaned_data and not new_route.status:
+ new_marker.status = 'S'
new_route.save()
return new_route
diff --git a/chimere/templates/chimere/detail.html b/chimere/templates/chimere/detail.html
index 3c43f42..33ddfd1 100644
--- a/chimere/templates/chimere/detail.html
+++ b/chimere/templates/chimere/detail.html
@@ -28,11 +28,9 @@
<a href='#' class='show_gallery_link'>{% trans "Show multimedia gallery" %}</a>
{% endif %}
</div>
- {% comment %}
<a href='{% if marker.route %}{% url chimere:editroute-item area_name_slash|default_if_none:"" marker.route.pk "" %}{%else%}{% url chimere:edit-item area_name_slash|default_if_none:"" marker.pk "" %}{%endif%}'>
- {% trans "Submit a modification" %}
+ {% trans "Submit an amendment" %}
</a>
- {% endcomment %}
{% if moderator_emails %}
<a href="mailto:?from={{moderator_emails}}&subject={% trans "Propose amendment" %}&body={% trans "I would like to propose an amendment for this item:"%} {{share_url}}">
{% trans "Propose amendment" %}
diff --git a/chimere/tests.py b/chimere/tests.py
index ccbbfb5..63eb28f 100644
--- a/chimere/tests.py
+++ b/chimere/tests.py
@@ -8,10 +8,15 @@ test_path = os.path.abspath(__file__)
test_dir_path = os.path.dirname(test_path) + os.sep
from django.conf import settings
+from django.contrib.auth.models import User
+from django.contrib.gis.geos import GEOSGeometry
+from django.contrib.messages.storage.fallback import FallbackStorage
from django.core.urlresolvers import reverse
from django.template import Context
from django.test import TestCase
+from django.test.client import Client
+from chimere.admin import managed_modified, MarkerAdmin
from chimere.models import Area, Icon, Importer, Category, SubCategory, Marker,\
Route, News
from chimere.forms import MarkerForm, AreaAdminForm
@@ -264,3 +269,32 @@ class NewsTest(TestCase):
self.assertEqual(len(context['news_lst']), 2)
context = display_news(Context({'area_name':'area-2'}))
self.assertEqual(len(context['news_lst']), 1)
+
+class RapprochementTest(TestCase):
+ def setUp(self):
+ self.areas = areas_setup()
+ self.markers = marker_setup()
+ self.adminuser = User.objects.create_superuser('admin',
+ 'admin@test.com',
+ 'pass')
+ self.client.login(username='admin', password='pass')
+
+ def test_managed_modified(self):
+ ref_marker = self.markers[0]
+ new_vals = {'name':"Marker 1 - modified",
+ 'point':GEOSGeometry('SRID=4326;POINT(-4 48)')}
+ values = {'status':'M', 'ref_item':ref_marker}
+ values.update(new_vals)
+ modified_marker = Marker.objects.create(**values)
+ modified_marker.categories.add(ref_marker.categories.all()[0])
+ response = self.client.post('/admin/chimere/marker/',
+ data={'action':['managed_modified'],
+ 'index':0, 'rapprochement':1,
+ 'name':1, 'point':1,
+ '_selected_action':[unicode(ref_marker.pk)]
+ })
+ ref_marker = Marker.objects.get(pk=ref_marker.pk)
+ self.assertEqual(Marker.objects.filter(ref_item=ref_marker,
+ status='M').count(), 0)
+ for k in new_vals:
+ self.assertEqual(getattr(ref_marker, k), new_vals[k])