Adhésion: Assignation d'un statut par lot
authorPA Parent <paparent@paparent.me>
Wed, 3 Aug 2011 00:06:56 +0000 (20:06 -0400)
committerPA Parent <paparent@paparent.me>
Wed, 3 Aug 2011 00:06:56 +0000 (20:06 -0400)
auf_savoirs_en_partage/chercheurs/admin.py
auf_savoirs_en_partage/chercheurs/admin_views.py [new file with mode: 0644]
auf_savoirs_en_partage/chercheurs/forms.py
auf_savoirs_en_partage/urls.py

index 322b7db..a74456d 100644 (file)
@@ -201,6 +201,8 @@ class ChercheurGroupeAdmin(admin.ModelAdmin):
     alphabet_filter = 'chercheur__nom'
     DEFAULT_ALPHABET = ''
 
+    actions = ['assigner_cgstatut']
+
 
     def lookup_allowed(self, lookup, value):
         return lookup in ['chercheur__nom__istartswith'] or \
@@ -225,6 +227,11 @@ class ChercheurGroupeAdmin(admin.ModelAdmin):
 
         return super(ChercheurGroupeAdmin, self).has_change_permission(request, obj)
 
+    def assigner_cgstatut(self, request, queryset):
+        selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
+        return HttpResponseRedirect("/admin/assigner_%s?ids=%s" % ('cgstatut', ",".join(selected)))
+    assigner_cgstatut.short_description = u'Assigner un statut'
+
 class MemberInline(admin.TabularInline):
     model = ChercheurGroupe
 
diff --git a/auf_savoirs_en_partage/chercheurs/admin_views.py b/auf_savoirs_en_partage/chercheurs/admin_views.py
new file mode 100644 (file)
index 0000000..85b1d14
--- /dev/null
@@ -0,0 +1,43 @@
+# -*- encoding: utf-8 -*-
+from django.http import HttpResponseRedirect
+from django.core.urlresolvers import reverse as url
+from django.contrib.auth.decorators import login_required
+
+from django.template import Context, RequestContext
+from django.shortcuts import render_to_response
+
+from chercheurs.models import ChercheurGroupe
+from chercheurs.forms import CGStatutForm
+
+
+@login_required
+def assigner_cgstatut(request):
+    ids = request.GET.get("ids").split(",")
+    records = ChercheurGroupe.objects.in_bulk(ids)
+    if request.method == 'POST':
+        cgstatut_form = CGStatutForm(request.POST)
+
+        if cgstatut_form.is_valid():
+
+            statut = request.POST.get("statut")
+
+            # assigner le statut à chaque référence
+            for r in records.values():
+                r.statut = statut
+                r.save()
+
+            # retouner un status à l'utilisateur sur la liste des références
+            succes = u"Le statut a été assigné à %s références" % (len(ids),)
+            request.user.message_set.create(message=succes)
+            return HttpResponseRedirect('/admin/chercheurs/chercheurgroupe')
+    else:
+        cgstatut_form = CGStatutForm()
+
+    return render_to_response ("savoirs/assigner.html",
+            Context ({'records': records,
+                      'form': cgstatut_form,
+                      'titre': u"Assignation d'un statut par lots",
+                      'description': u"Sélectionner le statut qui sera associé :" ,
+                      }),
+                     context_instance = RequestContext(request))
+
index 0288a90..cc3d26d 100644 (file)
@@ -398,3 +398,9 @@ class MessageForm(forms.ModelForm):
     class Meta:
         model = Message
         exclude = ('chercheur', 'groupe')
+
+# Admin views
+
+class CGStatutForm(forms.Form):
+    statut = forms.ChoiceField(choices=CG_STATUT_CHOICES)
+
index 8c91ecf..d5ac3ae 100644 (file)
@@ -124,6 +124,7 @@ urlpatterns = sep_patterns + patterns(
     (r'^admin/assigner_pays', 'savoirs.admin_views.assigner_pays'),
     (r'^admin/assigner_thematiques', 'savoirs.admin_views.assigner_thematiques'),
     (r'^admin/assigner_categorie', 'savoirs.admin_views.assigner_categorie'),
+    (r'^admin/assigner_cgstatut', 'chercheurs.admin_views.assigner_cgstatut'),
     (r'^admin/(?P<app_name>[^/]*)/(?P<model_name>[^/]*)/assigner_regions', 'savoirs.admin_views.assigner_regions', {}, 'assigner_regions'),
     (r'^admin/(?P<app_name>[^/]*)/(?P<model_name>[^/]*)/assigner_disciplines', 'savoirs.admin_views.assigner_disciplines', {}, 'assigner_disciplines'),
     (r'^admin/(.*)', admin.site.root),