diff --git a/vendor/symposion/symposion/speakers/urls.py b/vendor/symposion/symposion/speakers/urls.py index a3cf7e2c9f0397cf0ad0aa07f2bc6f22678e7895..8425f78ae3fb0da1eac8a05fb00aaa7b97d844be 100644 --- a/vendor/symposion/symposion/speakers/urls.py +++ b/vendor/symposion/symposion/speakers/urls.py @@ -5,7 +5,8 @@ from .views import ( speaker_create_token, speaker_edit, speaker_profile, - speaker_create_staff + speaker_create_staff, + speaker_track_report, ) urlpatterns = [ @@ -14,4 +15,5 @@ urlpatterns = [ url(r"^edit/(?:(?P\d+)/)?$", speaker_edit, name="speaker_edit"), url(r"^profile/(?P\d+)/$", speaker_profile, name="speaker_profile"), url(r"^staff/create/(\d+)/$", speaker_create_staff, name="speaker_create_staff"), + url(r"^track-report/$", speaker_track_report, name="speaker_track_report"), ] 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