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, Publication, Groupe, ChercheurGroupe, ChercheurQuerySet
+from chercheurs.models import Chercheur, Publication, Groupe, ChercheurGroupe, ChercheurQuerySet, These
class ChercheurAdmin(admin.ModelAdmin):
list_filter = ['genre']
list_per_page = 25
- actions = ('remove_from_group',)
+ actions = ('remove_from_group', 'export_as_ods', 'export_as_csv')
search_fields = ('nom', 'prenom')
def lookup_allowed(self, lookup):
def queryset(self, request):
return ChercheurAdminQuerySet(Chercheur)
+ 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', 'Groupe 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.groupe_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')
+ export_as_csv.short_description = 'Export CSV'
+
+ def export_as_ods(self, request, queryset):
+ return self.export(queryset, 'ods')
+ export_as_ods.short_description = 'Export ODS'
+
class ChercheurAdminQuerySet(ChercheurQuerySet):
def filter(self, *args, **kwargs):