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):
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'
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
}),
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)
# 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é.
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)
{% 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&id={{ object_id }}">Exporter chercheurs CSV</a></li>
+ <li><a href="../../chercheur/export?type=ods&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 %}
(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