from django.conf import settings
import csv
+import io
import json
from collections import OrderedDict
from .jinjapdf import render_jinja_ticket, render_jinja_badges
from .util import send_conference_mail, get_conference_or_404, send_conference_notification
-from .models import Conference, ConferenceSeries
+from .models import Conference, ConferenceSeries, ConferenceSession
from .models import ConferenceRegistration
from .models import Speaker
from .models import PrepaidBatch
return sponsorclaimsfile(conference, subrequest.lstrip('/'))
else:
return _structured_tokendata(sponsorclaimsdata(conference), dataformat)
+ elif datatype == 'sessions':
+ sessiondata(conference, writer)
else:
raise Http404()
return writer.response
+def csvembed(iter):
+ f = io.StringIO()
+ writer = csv.writer(f, lineterminator='', delimiter=';')
+ writer.writerow(iter)
+ return f.getvalue()
+
+
+def sessiondata(conference, writer):
+ result = []
+ status_filter = []
+ sessions = ConferenceSession.objects.filter(conference=conference)
+ header = ['id', 'title', 'shorttitle', 'abstract', 'status', 'speaker', 'company',
+ 'email', 'track', 'starttime', 'endtime', 'recordingconsent', 'room', 'submissionnote']
+ writer.columns(header)
+ writer.grouping = False
+ for s in sessions:
+ speaker_names = csvembed(map(lambda spk: spk.name, s.speaker.all()))
+ speaker_emails = csvembed(map(lambda spk: spk.email, s.speaker.all()))
+ speaker_companies = csvembed(map(lambda spk: spk.company, s.speaker.all()))
+ row = [
+ s.id,
+ s.title,
+ s.shorttitle,
+ s.abstract,
+ s.status_string,
+ speaker_names,
+ speaker_companies,
+ speaker_emails,
+ None if s.track is None else s.track.trackname,
+ s.starttime,
+ s.endtime,
+ s.recordingconsent,
+ None if s.room is None else s.room.roomname,
+ s.submissionnote,
+ ]
+ result.append(row)
+ writer.write_rows(result)
+
+
def registration_dashboard_send_email(request, urlname):
conference = get_authenticated_conference(request, urlname)
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('token', models.CharField(max_length=200)),
('description', models.TextField()),
- ('permissions', postgresqleu.util.forms.ChoiceArrayField(base_field=models.CharField(max_length=32, choices=[('regtypes', 'Registration types and counters'), ('discounts', 'Discount codes'), ('discountspublic', 'Public discount codes'), ('vouchers', 'Voucher codes'), ('sponsors', 'Sponsors and counts'), ('addopts', 'Additional options and counts'), ('schedule', 'Schedule JSON'), ('sponsorlevels', 'Sponsor level metadata'), ('sponsorclaims', 'Sponsor claimed benefits')]), size=None)),
+ ('permissions', postgresqleu.util.forms.ChoiceArrayField(base_field=models.CharField(max_length=32, choices=[('regtypes', 'Registration types and counters'), ('discounts', 'Discount codes'), ('discountspublic', 'Public discount codes'), ('vouchers', 'Voucher codes'), ('sponsors', 'Sponsors and counts'), ('addopts', 'Additional options and counts'), ('schedule', 'Schedule JSON'), ('sponsorlevels', 'Sponsor level metadata'), ('sponsorclaims', 'Sponsor claimed benefits'), ('sessions', 'Sessions')]), size=None)),
('conference', models.ForeignKey(to='confreg.Conference', on_delete=models.CASCADE)),
],
),