feat(emargement): ajoute un export csv

pull/52/head
François Poulain 2021-04-17 18:16:53 +02:00 commité par Cliss XXI - dev
Parent 9c2f306c7a
révision 0209ad9aa4
2 fichiers modifiés avec 48 ajouts et 2 suppressions

Voir le fichier

@ -1,8 +1,10 @@
import csv
import datetime
from django.conf import settings
from django.core.exceptions import PermissionDenied, ValidationError
from django.db.models import Q
from django.http import HttpResponse
from django.shortcuts import redirect
from django.urls import reverse, reverse_lazy
from django.views.generic import FormView, RedirectView, detail
@ -596,10 +598,54 @@ class ImportConfirm(AdminMixin, FormInvalidMixin, FormView):
return "L'import n'a pas été poursuivi du fait d'erreurs."
class ScrutinAttendees(detail.DetailView):
class ScrutinAttendees(AdminMixin, detail.DetailView):
model = models.Scrutin
template_name = 'modeladmin/index_attendees.html'
def dispatch(self, request, *args, **kwargs):
self.is_csv_export = self.request.GET.get('action') == 'CSV'
return super().dispatch(request, *args, **kwargs)
def get_csv_filename(self):
""" Returns the filename for the generated CSV file """
return 'export-{}.csv'.format(
datetime.datetime.today().strftime('%Y-%m-%d')
)
def get_csv_response(self, context):
""" Returns a CSV response """
filename = self.get_csv_filename()
response = HttpResponse(content_type='text/csv; charset=utf-8')
response['Content-Disposition'] = 'attachment;filename={}'.format(
filename
)
writer = csv.writer(response)
attendees = self.object.get_attendees()
writer.writerow(
attendees['basic_fields']
+ ['email']
+ list(attendees['extended_fields'])
)
for pouvoir in attendees['emargement']:
data_row = (
[getattr(pouvoir, f) for f in attendees['basic_fields']]
+ [", ".join(pouvoir.courriels_list())]
+ [
pouvoir.champ_perso.filter(intitule=f).first().contenu
or ""
for f in attendees['extended_fields']
if pouvoir.champ_perso.filter(intitule=f).exists()
]
)
writer.writerow(data_row)
return response
def render_to_response(self, context, **response_kwargs):
if self.is_csv_export:
return self.get_csv_response(context)
return super().render_to_response(context, **response_kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['attendees'] = self.object.get_attendees()

Voir le fichier

@ -82,7 +82,7 @@
</table>
</div>
{% else %}
<p class="no-results-message">Il n'y a pas encore de répondant à ce scrutin.</p>
<p class="no-results-message">Il n'y a pas encore de répondant à ce scrutin.</p>
{% endif %}
</div>
{% endblock %}