diff --git a/vendor/symposion/symposion/speakers/views.py b/vendor/symposion/symposion/speakers/views.py index eea2df05cfbf4176d23817f962baffa4aee2aef5..ada4b8a703ae27a04dca71aba908294d6f1963df 100644 --- a/vendor/symposion/symposion/speakers/views.py +++ b/vendor/symposion/symposion/speakers/views.py @@ -1,5 +1,10 @@ +import csv +import datetime + +from django.contrib.auth.decorators import user_passes_test from django.core.exceptions import ObjectDoesNotExist -from django.http import Http404 +from django.db import connection +from django.http import Http404, HttpResponse from django.shortcuts import render, redirect, get_object_or_404 from django.views.decorators.clickjacking import xframe_options_exempt @@ -135,3 +140,28 @@ def speaker_profile(request, pk): "speaker": speaker, "presentations": presentations, }) + + +@login_required +@user_passes_test(lambda u: u.is_staff) +def speaker_track_report(request): + query = """ + SELECT speaker.name speaker, email, telephone, kind.name track, title + FROM symposion_proposals_proposalbase + INNER JOIN symposion_speakers_speaker speaker ON speaker_id = speaker.id + INNER JOIN symposion_proposals_proposalkind kind ON kind_id = kind.id + INNER JOIN auth_user ON user_id = auth_user.id + ORDER BY speaker.name, title, track + """ + response = HttpResponse(content_type='text/csv') + filename = 'speaker_track_report-{}.csv'.format( + datetime.datetime.now().strftime('%Y-%m-%d'), + ) + response['Content-Disposition'] = f'attachment; filename={filename}' + writer = csv.writer(response) + with connection.cursor() as cursor: + cursor.execute(query) + writer.writerow([i[0] for i in cursor.description]) + for row in cursor.fetchall(): + writer.writerow(row) + return response