diff options
Diffstat (limited to 'chimere/admin.py')
| -rw-r--r-- | chimere/admin.py | 66 | 
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  | 
