New feature: qr-code for system url on participants password pdf.
(Note: New dependency! Run 'pip install qrcode') Fixed pep8 issues. Create qr-code image for system url one time only. New feature: qr-code for system url on participants password pdf. (Note: New dependency! Run 'pip install qrcode') Fixed pep8 issues. Create qr-code image for system url one time only. Print qrcode image from StringIO stream. Adapted table stylesheet for better integration of reportlab's Image object. Fixed pep8 issue. Made qrcode import as optional feature. Fixed pep8 issue.
This commit is contained in:
parent
f5e6f736dc
commit
71ac7a1cdb
@ -10,13 +10,21 @@
|
|||||||
:license: GNU GPL, see LICENSE for more details.
|
:license: GNU GPL, see LICENSE for more details.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
import qrcode
|
||||||
|
except ImportError:
|
||||||
|
draw_qrcode = False
|
||||||
|
else:
|
||||||
|
draw_qrcode = True
|
||||||
|
|
||||||
|
from cStringIO import StringIO
|
||||||
from urllib import urlencode
|
from urllib import urlencode
|
||||||
from urlparse import parse_qs
|
from urlparse import parse_qs
|
||||||
|
|
||||||
from reportlab.lib import colors
|
from reportlab.lib import colors
|
||||||
from reportlab.lib.units import cm
|
from reportlab.lib.units import cm
|
||||||
from reportlab.platypus import (
|
from reportlab.platypus import (
|
||||||
SimpleDocTemplate, Paragraph, LongTable, Spacer, Table, TableStyle)
|
SimpleDocTemplate, Paragraph, LongTable, Spacer, Table, TableStyle, Image)
|
||||||
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
@ -229,13 +237,21 @@ class ParticipantsPasswordsPDF(PDFView):
|
|||||||
sort = 'first_name'
|
sort = 'first_name'
|
||||||
else:
|
else:
|
||||||
sort = 'last_name'
|
sort = 'last_name'
|
||||||
|
# create qrcode image object from system url
|
||||||
|
if draw_qrcode:
|
||||||
|
qrcode_img = qrcode.make(participant_pdf_system_url)
|
||||||
|
img_stream = StringIO()
|
||||||
|
qrcode_img.save(img_stream, 'PNG')
|
||||||
|
img_stream.seek(0)
|
||||||
|
size = 2*cm
|
||||||
|
I = Image(img_stream, width=size, height=size)
|
||||||
for user in User.objects.all().order_by(sort):
|
for user in User.objects.all().order_by(sort):
|
||||||
cell = []
|
cell = []
|
||||||
cell.append(Spacer(0, 0.8 * cm))
|
cell.append(Spacer(0, 0.8 * cm))
|
||||||
cell.append(Paragraph(_("Account for OpenSlides"),
|
cell.append(Paragraph(_("Account for OpenSlides"),
|
||||||
stylesheet['Ballot_title']))
|
stylesheet['Password_title']))
|
||||||
cell.append(Paragraph(_("for %s") % (user),
|
cell.append(Paragraph(_("for %s") % (user),
|
||||||
stylesheet['Ballot_subtitle']))
|
stylesheet['Password_subtitle']))
|
||||||
cell.append(Spacer(0, 0.5 * cm))
|
cell.append(Spacer(0, 0.5 * cm))
|
||||||
cell.append(Paragraph(_("User: %s") % (user.username),
|
cell.append(Paragraph(_("User: %s") % (user.username),
|
||||||
stylesheet['Monotype']))
|
stylesheet['Monotype']))
|
||||||
@ -243,12 +259,10 @@ class ParticipantsPasswordsPDF(PDFView):
|
|||||||
Paragraph(
|
Paragraph(
|
||||||
_("Password: %s")
|
_("Password: %s")
|
||||||
% (user.default_password), stylesheet['Monotype']))
|
% (user.default_password), stylesheet['Monotype']))
|
||||||
cell.append(Spacer(0, 0.5 * cm))
|
|
||||||
cell.append(
|
cell.append(
|
||||||
Paragraph(
|
Paragraph(participant_pdf_system_url, stylesheet['Monotype']))
|
||||||
_("URL: %s") % (participant_pdf_system_url),
|
if draw_qrcode:
|
||||||
stylesheet['Ballot_option']))
|
cell.append(I)
|
||||||
cell.append(Spacer(0, 0.5 * cm))
|
|
||||||
cell2 = []
|
cell2 = []
|
||||||
cell2.append(Spacer(0, 0.8 * cm))
|
cell2.append(Spacer(0, 0.8 * cm))
|
||||||
if participant_pdf_welcometext is not None:
|
if participant_pdf_welcometext is not None:
|
||||||
@ -264,6 +278,7 @@ class ParticipantsPasswordsPDF(PDFView):
|
|||||||
# build table
|
# build table
|
||||||
t = Table(data, 10.5 * cm, 7.42 * cm)
|
t = Table(data, 10.5 * cm, 7.42 * cm)
|
||||||
t.setStyle(TableStyle([
|
t.setStyle(TableStyle([
|
||||||
|
('LEFTPADDING', (0, 0), (0, -1), 30),
|
||||||
('LINEBELOW', (0, 0), (-1, 0), 0.25, colors.grey),
|
('LINEBELOW', (0, 0), (-1, 0), 0.25, colors.grey),
|
||||||
('LINEBELOW', (0, 1), (-1, 1), 0.25, colors.grey),
|
('LINEBELOW', (0, 1), (-1, 1), 0.25, colors.grey),
|
||||||
('LINEBELOW', (0, 1), (-1, -1), 0.25, colors.grey),
|
('LINEBELOW', (0, 1), (-1, -1), 0.25, colors.grey),
|
||||||
|
@ -147,13 +147,6 @@ stylesheet.add(ParagraphStyle(name='Ballot_option',
|
|||||||
leading=24,
|
leading=24,
|
||||||
leftIndent=30),
|
leftIndent=30),
|
||||||
)
|
)
|
||||||
stylesheet.add(ParagraphStyle(name='Monotype',
|
|
||||||
parent=stylesheet['Normal'],
|
|
||||||
fontName='Courier',
|
|
||||||
fontSize=12,
|
|
||||||
leading=24,
|
|
||||||
leftIndent=30),
|
|
||||||
)
|
|
||||||
stylesheet.add(ParagraphStyle(name='Ballot_option_name',
|
stylesheet.add(ParagraphStyle(name='Ballot_option_name',
|
||||||
parent=stylesheet['Normal'],
|
parent=stylesheet['Normal'],
|
||||||
fontSize=12,
|
fontSize=12,
|
||||||
@ -179,6 +172,22 @@ stylesheet.add(ParagraphStyle(name='Ballot_option_group_right',
|
|||||||
leading=16,
|
leading=16,
|
||||||
leftIndent=49),
|
leftIndent=49),
|
||||||
)
|
)
|
||||||
|
# Password paper stylesheets
|
||||||
|
stylesheet.add(ParagraphStyle(name='Password_title',
|
||||||
|
parent=stylesheet['Ballot_title'],
|
||||||
|
leftIndent=0),
|
||||||
|
)
|
||||||
|
stylesheet.add(ParagraphStyle(name='Password_subtitle',
|
||||||
|
parent=stylesheet['Ballot_subtitle'],
|
||||||
|
leftIndent=0),
|
||||||
|
)
|
||||||
|
stylesheet.add(ParagraphStyle(name='Monotype',
|
||||||
|
parent=stylesheet['Normal'],
|
||||||
|
fontName='Courier',
|
||||||
|
fontSize=12,
|
||||||
|
leading=24,
|
||||||
|
leftIndent=0),
|
||||||
|
)
|
||||||
stylesheet.add(ParagraphStyle(name='Badge_title',
|
stylesheet.add(ParagraphStyle(name='Badge_title',
|
||||||
parent=stylesheet['Bold'],
|
parent=stylesheet['Bold'],
|
||||||
fontSize=16,
|
fontSize=16,
|
||||||
|
@ -6,3 +6,5 @@ coverage==3.6
|
|||||||
django-discover-runner==0.3
|
django-discover-runner==0.3
|
||||||
pep8==1.4.4
|
pep8==1.4.4
|
||||||
tornado==2.4.1
|
tornado==2.4.1
|
||||||
|
qrcode==2.5.1
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user