From a0a35a4b351917ef18346dc63b08f9a54d347014 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Thu, 19 Oct 2017 09:29:08 +0200 Subject: [PATCH] Add export admin action for candidates --- candidats/admin.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/candidats/admin.py b/candidats/admin.py index 0485ca0..4f687e2 100644 --- a/candidats/admin.py +++ b/candidats/admin.py @@ -1,7 +1,39 @@ +from collections import OrderedDict + from django import forms from django.contrib import admin +from django.db.models import BooleanField -from .models import Candidate +from stages.exports import OpenXMLExport +from .models import Candidate, GENDER_CHOICES + + +def export_candidates(modeladmin, request, queryset): + """ + Export all candidates fields. + """ + export_fields = OrderedDict( + [(f.verbose_name, f.name) for f in Candidate._meta.get_fields() if f.name != 'ID'] + ) + boolean_fields = [f.name for f in Candidate._meta.get_fields() if isinstance(f, BooleanField)] + export_fields['Employeur'] = 'corporation__name' + export_fields['Employeur_localite'] = 'corporation__city' + export_fields['FEE/FPP'] = 'instructor__last_name' + + export = OpenXMLExport('Exportation') + export.write_line(export_fields.keys(), bold=True) + for cand in queryset.values_list(*export_fields.values()): + values = [] + for value, field_name in zip(cand, export_fields.values()): + if field_name == 'gender': + value = dict(GENDER_CHOICES)[value] + if field_name in boolean_fields: + value = 'Oui' if value else '' + values.append(value) + export.write_line(values) + return export.get_http_response('candidats_export') + +export_candidates.short_description = "Exporter les candidats sélectionnés" class CandidateAdminForm(forms.ModelForm): @@ -19,6 +51,7 @@ class CandidateAdmin(admin.ModelAdmin): list_display = ('last_name', 'first_name', 'section', 'confirm_email') list_filter = ('section', 'option') readonly_fields = ('total_result_points', 'total_result_mark', 'date_confirmation_mail') + actions = [export_candidates] fieldsets = ( (None, { 'fields': (('first_name', 'last_name', 'gender'),