Add report for reviewing speakers/talks across all tracks
This commit is contained in:
parent
c56b15f279
commit
1fccc11354
2 changed files with 34 additions and 2 deletions
4
vendor/symposion/symposion/speakers/urls.py
vendored
4
vendor/symposion/symposion/speakers/urls.py
vendored
|
@ -5,7 +5,8 @@ from .views import (
|
||||||
speaker_create_token,
|
speaker_create_token,
|
||||||
speaker_edit,
|
speaker_edit,
|
||||||
speaker_profile,
|
speaker_profile,
|
||||||
speaker_create_staff
|
speaker_create_staff,
|
||||||
|
speaker_track_report,
|
||||||
)
|
)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
@ -14,4 +15,5 @@ urlpatterns = [
|
||||||
url(r"^edit/(?:(?P<pk>\d+)/)?$", speaker_edit, name="speaker_edit"),
|
url(r"^edit/(?:(?P<pk>\d+)/)?$", speaker_edit, name="speaker_edit"),
|
||||||
url(r"^profile/(?P<pk>\d+)/$", speaker_profile, name="speaker_profile"),
|
url(r"^profile/(?P<pk>\d+)/$", speaker_profile, name="speaker_profile"),
|
||||||
url(r"^staff/create/(\d+)/$", speaker_create_staff, name="speaker_create_staff"),
|
url(r"^staff/create/(\d+)/$", speaker_create_staff, name="speaker_create_staff"),
|
||||||
|
url(r"^track-report/$", speaker_track_report, name="speaker_track_report"),
|
||||||
]
|
]
|
||||||
|
|
32
vendor/symposion/symposion/speakers/views.py
vendored
32
vendor/symposion/symposion/speakers/views.py
vendored
|
@ -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.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.shortcuts import render, redirect, get_object_or_404
|
||||||
from django.views.decorators.clickjacking import xframe_options_exempt
|
from django.views.decorators.clickjacking import xframe_options_exempt
|
||||||
|
|
||||||
|
@ -135,3 +140,28 @@ def speaker_profile(request, pk):
|
||||||
"speaker": speaker,
|
"speaker": speaker,
|
||||||
"presentations": presentations,
|
"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
|
||||||
|
|
Loading…
Reference in a new issue