summaryrefslogtreecommitdiff
path: root/chimere/admin.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-12-13 16:08:19 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-12-13 16:08:19 +0100
commit51f788fd4e81186be2f7b7b4459d3d90a7b47bf2 (patch)
tree232659156f76ff7664139d963dac8d8c68e1d43f /chimere/admin.py
parent70811d699e68c075ed3cae543cbb8b695d386730 (diff)
parent3aaae876d73a9c16d2961bea9ae2012ae0bc5b0e (diff)
downloadChimère-51f788fd4e81186be2f7b7b4459d3d90a7b47bf2.tar.bz2
Chimère-51f788fd4e81186be2f7b7b4459d3d90a7b47bf2.zip
Merge branch 'master' into saclay
Conflicts: chimere/admin.py chimere/locale/fr/LC_MESSAGES/django.po chimere/tests.py chimere/utils.py
Diffstat (limited to 'chimere/admin.py')
-rw-r--r--chimere/admin.py66
1 files changed, 48 insertions, 18 deletions
diff --git a/chimere/admin.py b/chimere/admin.py
index 833ba9d..3c24de0 100644
--- a/chimere/admin.py
+++ b/chimere/admin.py
@@ -95,39 +95,44 @@ def export_to_csv(modeladmin, request, queryset):
export_to_csv.short_description = _(u"Export to CSV")
def managed_modified(modeladmin, request, queryset):
+ # not very clean... There is must be a better way to do that
+ redirect_url = request.get_full_path().split('admin_modification')[0]
if queryset.count() != 1:
messages.error(request, _(u"Only one item can be managed at a "
u"time."))
- return HttpResponseRedirect(request.get_full_path())
+ return HttpResponseRedirect(redirect_url)
item = queryset.all()[0]
- if not item.status == 'M':
+ if not item.ref_item or item.ref_item == item:
try:
- item = modeladmin.model.objects.get(ref_item=item, status='M')
+ item = modeladmin.model.objects.get(ref_item=item)
except ObjectDoesNotExist:
messages.error(request, _(u"No modified item associated "
u"to the selected item."))
- return HttpResponseRedirect(request.get_full_path())
+ return HttpResponseRedirect(redirect_url)
item_ref = item.ref_item
if request.POST.get('rapprochement'):
couple = [(item, item_ref)]
if hasattr(item, 'associated_marker'):
couple.append((item.associated_marker.all()[0],
item_ref.associated_marker.all()[0]))
- updated_keys = dict(request.POST)
+ updated = dict(request.POST)
# clean
for k in ('action', 'rapprochement', 'index', '_selected_action'):
- if k in updated_keys:
- updated_keys.pop(k)
+ if k in updated:
+ updated.pop(k)
for idx, cpl in enumerate(couple):
it, it_ref = cpl
# don't copy geometry of associated items
if idx:
for k in ('route', 'point'):
- if k in updated_keys:
- updated_keys.pop(k)
+ if k in updated:
+ updated.pop(k)
+ updated_keys = updated.keys()
+ if it.status == 'I':
+ updated_keys.append('import_version')
for k in updated_keys:
- if not request.POST[k]:
+ if k != 'import_version' and not request.POST[k]:
continue
if hasattr(it_ref, k):
c_value = getattr(it_ref, k)
@@ -149,7 +154,7 @@ def managed_modified(modeladmin, request, queryset):
it.delete()
item.delete()
messages.success(request, _(u"Modified item traited."))
- return HttpResponseRedirect(request.get_full_path())
+ return HttpResponseRedirect(redirect_url)
return render_to_response('admin/chimere/managed_modified.html',
{'item':item, 'item_ref':item_ref},
context_instance=RequestContext(request))
@@ -181,7 +186,7 @@ class MarkerAdmin(admin.ModelAdmin):
exclude = ['submiter_session_key', 'import_key', 'import_version',
'available_date', 'ref_item']
readonly_fields = ['submiter_email', 'submiter_comment', 'import_source',
- 'submiter_name', 'ref_item', 'modified_since_import']
+ 'submiter_name', 'ref_item', 'modified_since_import', 'route']
form = MarkerAdminForm
fieldsets = ((None, {
'fields': ['point', 'name', 'status', 'categories',
@@ -194,10 +199,10 @@ class MarkerAdmin(admin.ModelAdmin):
}),
(_(u"Import"), {
'classes':('collapse',),
- 'fields': ('modified_since_import', 'import_source',
- 'origin', 'license')
+ 'fields': ('not_for_osm', 'modified_since_import',
+ 'import_source', 'origin', 'license')
}),
- (_(u"Advanced options"), {
+ (_(u"Associated items"), {
'classes':('collapse',),
'fields': ('ref_item', 'route',)
}),
@@ -229,7 +234,24 @@ class MarkerAdmin(admin.ModelAdmin):
qs = qs.order_by(*ordering)
return qs.distinct()
-class RouteAdmin(admin.ModelAdmin):
+ def admin_modification(self, request, item_id):
+ '''
+ Redirect to the marker modification form
+ '''
+ return managed_modified(self, request,
+ Marker.objects.filter(pk=item_id))
+ def get_urls(self):
+ from django.conf.urls.defaults import *
+ urls = super(MarkerAdmin, self).get_urls()
+ my_urls = patterns('',
+ url(r'^admin_modification/(?P<item_id>\d+)/$',
+ self.admin_site.admin_view(self.admin_modification),
+ name='admin-modification'),
+ )
+ return my_urls + urls
+
+
+class RouteAdmin(MarkerAdmin):
"""
Specialized the Route field.
"""
@@ -238,7 +260,7 @@ class RouteAdmin(admin.ModelAdmin):
list_filter = ('status', 'categories')
exclude = ['height', 'width']
form = RouteAdminForm
- readonly_fields = ('associated_file',)
+ readonly_fields = ('associated_file', 'ref_item', 'has_associated_marker')
actions = [validate, disable, managed_modified, export_to_kml,
export_to_shapefile, export_to_csv]
fieldsets = ((None, {
@@ -255,12 +277,13 @@ class RouteAdmin(admin.ModelAdmin):
'fields': ('modified_since_import', 'import_source',
'origin', 'license')
}),
- (_(u"Advanced options"), {
+ (_(u"Associated items"), {
'classes':('collapse',),
'fields': ('ref_item', 'associated_file',
'has_associated_marker')
}),
)
+ inlines = []
def queryset(self, request):
qs = self.model._default_manager.get_query_set()
@@ -275,6 +298,13 @@ class RouteAdmin(admin.ModelAdmin):
qs = qs.order_by(*ordering)
return qs
+ def admin_modification(self, request, item_id):
+ '''
+ Redirect to the route modification form
+ '''
+ return managed_modified(self, request,
+ Route.objects.filter(pk=item_id))
+
class LayerInline(admin.TabularInline):
model = AreaLayers
extra = 1