Permet d'exporter la liste de chercheur via un groupe
authorPA Parent <paparent@paparent.me>
Tue, 30 Aug 2011 17:11:22 +0000 (13:11 -0400)
committerPA Parent <paparent@paparent.me>
Tue, 30 Aug 2011 17:11:22 +0000 (13:11 -0400)
auf_savoirs_en_partage/chercheurs/admin.py
auf_savoirs_en_partage/chercheurs/admin_views.py
auf_savoirs_en_partage/chercheurs/utils.py
auf_savoirs_en_partage/templates/admin/chercheurs/groupe_change_form.html
auf_savoirs_en_partage/urls.py

index 8997974..db56e07 100644 (file)
@@ -5,12 +5,11 @@ from django.contrib import admin
 from django.core.urlresolvers import reverse as url
 from django.forms.models import BaseInlineFormSet
 from django.http import HttpResponseRedirect
-from django.utils.encoding import smart_str
-from django_exportateur.exportateur import exportateur
 
 from chercheurs.models import Chercheur, ChercheurVoir, Publication, \
                               GroupeChercheur, DomaineRecherche, \
-                              AdhesionGroupe, ChercheurQuerySet, These
+                              AdhesionGroupe, ChercheurQuerySet
+from chercheurs.utils import export
 from savoirs.models import Search
 
 class ChercheurAdmin(admin.ModelAdmin):
@@ -59,79 +58,13 @@ class ChercheurAdmin(admin.ModelAdmin):
         except Chercheur.DoesNotExist:
             return None
 
-    def export(self, queryset, type):
-        if queryset.count() == 0:
-            return None
-        obj = queryset[0]
-        headers = ['Nom', 'Prénom', 'Genre', 'Courriel', 'Téléphone', 'Adresse postale',
-                   'Statut', 'Diplôme', 'Établissement', 'Pays', 'Domaines de recherche',
-                   'Thèse', 'Directeur', 'Discipline', 'Thèmes de recherche', 'Équipe de recherche', 'Mots-clés',
-                   'Site web', 'Blog', 'Réseau social',
-                   'Membre instance AUF', "Sollicité par l'OIF", 'Membre société francophone',
-                   'Membre instance réseau institutionnel AUF', 'Expertises', 'Solliciter pour expertises',
-                   'Publications']
-        data = []
-        for c in queryset:
-            row = []
-            row.append(c.nom)
-            row.append(c.prenom)
-            row.append(c.get_genre_display())
-            row.append(c.courriel)
-            row.append(c.telephone)
-            row.append(c.adresse_postale)
-            row.append(c.get_statut_display())
-            row.append(c.diplome)
-            row.append(c.nom_etablissement)
-            row.append(c.pays)
-            row.append(', '.join(g.nom for g in c.groupes.all()))
-            try:
-                t = c.these
-                row.append('%s, %s, %s, %s pages.' % (t.titre, t.etablissement, t.annee, t.nb_pages))
-                row.append(t.directeur)
-            except These.DoesNotExist:
-                row.append('')
-                row.append('')
-            row.append(c.discipline.nom if c.discipline else '')
-            row.append(c.theme_recherche)
-            row.append(c.equipe_recherche)
-            row.append(c.mots_cles)
-            row.append(c.url_site_web)
-            row.append(c.url_blog)
-            row.append(c.url_reseau_social)
-            if c.membre_instance_auf:
-                row.append(', '.join([c.membre_instance_auf_nom, c.membre_instance_auf_fonction, c.membre_instance_auf_dates]))
-            else:
-                row.append('')
-            if c.expert_oif:
-                row.append(', '.join([c.expert_oif_details, c.expert_oif_dates]))
-            else:
-                row.append('')
-            if c.membre_association_francophone:
-                row.append(c.membre_association_francophone_details)
-            else:
-                row.append('')
-            if c.membre_reseau_institutionnel:
-                row.append(', '.join([c.membre_reseau_institutionnel_nom, c.membre_reseau_institutionnel_fonction, c.membre_reseau_institutionnel_dates]))
-            else:
-                row.append('')
-            row.append('; '.join(', '.join([e.nom, e.date, e.organisme_demandeur]) for e in c.expertises.all()))
-            if c.expertises_auf is None:
-                row.append('')
-            else:
-                row.append('Oui' if c.expertises_auf else 'Non')
-            row.append('; '.join(p.publication_affichage if p.publication_affichage else
-                                 '%s, %s, %s, %s, %s, %s, %s pages.' % 
-                                 (p.auteurs, p.titre, p.revue, p.annee, p.editeur, p.lieu_edition, p.nb_pages)
-                                 for p in c.publications.all()))
-            data.append([smart_str(x) if x else '' for x in row])
-        return exportateur(headers, data, type, filename='chercheurs.%s' % type)
 
     def export_as_csv(self, request, queryset):
-        return self.export(queryset, 'csv')
+        return export(queryset, 'csv')
     export_as_csv.short_description = 'Export CSV'
 
     def export_as_ods(self, request, queryset):
-        return self.export(queryset, 'ods')
+        return export(queryset, 'ods')
     export_as_ods.short_description = 'Export ODS'
 
 
index ac16fbc..5608636 100644 (file)
@@ -6,8 +6,9 @@ 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 AdhesionGroupe
+from chercheurs.models import AdhesionGroupe, Groupe
 from chercheurs.forms import CGStatutForm
+from chercheurs.utils import export as real_export
 
 
 @login_required
@@ -41,3 +42,11 @@ def assigner_cgstatut(request):
                       }),
                      context_instance = RequestContext(request))
 
+@login_required
+def export(request):
+    type = request.GET['type']
+    id = request.GET['id']
+
+    queryset = Groupe.objects.get(pk=id).membres.all()
+
+    return real_export(queryset, type)
index 149c076..b8adaa9 100644 (file)
@@ -1,8 +1,12 @@
 # coding: utf-8
 
 import re
+from django.utils.encoding import smart_str
 from django.contrib.auth.models import User
 
+from django_exportateur.exportateur import exportateur
+
+
 def get_django_user_for_email(email):
     """Retourne un utilisateur Django avec le courriel donné.
 
@@ -27,3 +31,72 @@ def get_django_user_for_email(email):
         user = User.objects.create_user(username, email)
         user.save()
     return user
+
+def export(queryset, type):
+    from chercheurs.models import These
+
+    if queryset.count() == 0:
+        return None
+    obj = queryset[0]
+    headers = ['Nom', 'Prénom', 'Genre', 'Courriel', 'Téléphone', 'Adresse postale',
+               'Statut', 'Diplôme', 'Établissement', 'Pays', 'Domaines de recherche',
+               'Thèse', 'Directeur', 'Discipline', 'Thèmes de recherche', 'Équipe de recherche', 'Mots-clés',
+               'Site web', 'Blog', 'Réseau social',
+               'Membre instance AUF', "Sollicité par l'OIF", 'Membre société francophone',
+               'Membre instance réseau institutionnel AUF', 'Expertises', 'Solliciter pour expertises',
+               'Publications']
+    data = []
+    for c in queryset:
+        row = []
+        row.append(c.nom)
+        row.append(c.prenom)
+        row.append(c.get_genre_display())
+        row.append(c.courriel)
+        row.append(c.telephone)
+        row.append(c.adresse_postale)
+        row.append(c.get_statut_display())
+        row.append(c.diplome)
+        row.append(c.nom_etablissement)
+        row.append(c.pays)
+        row.append(', '.join(g.nom for g in c.groupes.all()))
+        try:
+            t = c.these
+            row.append('%s, %s, %s, %s pages.' % (t.titre, t.etablissement, t.annee, t.nb_pages))
+            row.append(t.directeur)
+        except These.DoesNotExist:
+            row.append('')
+            row.append('')
+        row.append(c.discipline.nom if c.discipline else '')
+        row.append(c.theme_recherche)
+        row.append(c.equipe_recherche)
+        row.append(c.mots_cles)
+        row.append(c.url_site_web)
+        row.append(c.url_blog)
+        row.append(c.url_reseau_social)
+        if c.membre_instance_auf:
+            row.append(', '.join([c.membre_instance_auf_nom, c.membre_instance_auf_fonction, c.membre_instance_auf_dates]))
+        else:
+            row.append('')
+        if c.expert_oif:
+            row.append(', '.join([c.expert_oif_details, c.expert_oif_dates]))
+        else:
+            row.append('')
+        if c.membre_association_francophone:
+            row.append(c.membre_association_francophone_details)
+        else:
+            row.append('')
+        if c.membre_reseau_institutionnel:
+            row.append(', '.join([c.membre_reseau_institutionnel_nom, c.membre_reseau_institutionnel_fonction, c.membre_reseau_institutionnel_dates]))
+        else:
+            row.append('')
+        row.append('; '.join(', '.join([e.nom, e.date, e.organisme_demandeur]) for e in c.expertises.all()))
+        if c.expertises_auf is None:
+            row.append('')
+        else:
+            row.append('Oui' if c.expertises_auf else 'Non')
+        row.append('; '.join(p.publication_affichage if p.publication_affichage else
+                             '%s, %s, %s, %s, %s, %s, %s pages.' %
+                             (p.auteurs, p.titre, p.revue, p.annee, p.editeur, p.lieu_edition, p.nb_pages)
+                             for p in c.publications.all()))
+        data.append([smart_str(x) if x else '' for x in row])
+    return exportateur(headers, data, type, filename='chercheurs.%s' % type)
index 32043a8..e23731a 100644 (file)
@@ -1,4 +1,18 @@
 {% extends "admin/change_form.html" %}
+{% load i18n %}
+
+{% block object-tools %}
+{% if change %}
+{% if not is_popup %}
+<ul class="object-tools">
+       <li><a href="../../chercheur/export?type=csv&amp;id={{ object_id }}">Exporter chercheurs CSV</a></li>
+       <li><a href="../../chercheur/export?type=ods&amp;id={{ object_id }}">Exporter chercheurs ODS</a></li>
+       <li><a href="history/" class="historylink">{% trans "History" %}</a></li>
+       {% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
+</ul>
+{% endif %}
+{% endif %}
+{% endblock %}
 
 {% block after_related_objects %}
 
index d5ac3ae..b1f4d17 100644 (file)
@@ -127,6 +127,7 @@ urlpatterns = sep_patterns + patterns(
     (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/chercheurs/chercheur/export', 'chercheurs.admin_views.export'),
     (r'^admin/(.*)', admin.site.root),
 
     # stats