Re-add secrets to OrderPositions

This commit is contained in:
Raphael Michel
2016-03-03 18:15:28 +01:00
parent 76ed6550f3
commit 5cdcc62d8a
5 changed files with 33 additions and 4 deletions
+1
View File
@@ -131,6 +131,7 @@ class JSONExporter(BaseExporter):
'variation': position.variation_id, 'variation': position.variation_id,
'price': position.price, 'price': position.price,
'attendee_name': position.attendee_name, 'attendee_name': position.attendee_name,
'secret': position.secret,
'answers': [ 'answers': [
{ {
'question': answer.question_id, 'question': answer.question_id,
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-03-03 17:13
from __future__ import unicode_literals
from django.db import migrations, models
import pretix.base.models.orders
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0009_auto_20160222_2002'),
]
operations = [
migrations.AddField(
model_name='orderposition',
name='secret',
field=models.CharField(default=pretix.base.models.orders.generate_position_secret, max_length=64),
),
]
+2 -2
View File
@@ -7,7 +7,7 @@ from .items import (
from .log import LogEntry from .log import LogEntry
from .orders import ( from .orders import (
AbstractPosition, CachedTicket, CartPosition, InvoiceAddress, Order, AbstractPosition, CachedTicket, CartPosition, InvoiceAddress, Order,
OrderPosition, QuestionAnswer, generate_secret, OrderPosition, QuestionAnswer, generate_position_secret, generate_secret,
) )
from .organizer import Organizer, OrganizerPermission, OrganizerSetting from .organizer import Organizer, OrganizerPermission, OrganizerSetting
from .vouchers import Voucher from .vouchers import Voucher
@@ -17,5 +17,5 @@ __all__ = [
'ItemCategory', 'Item', 'Property', 'PropertyValue', 'ItemVariation', 'VariationsField', 'Question', 'ItemCategory', 'Item', 'Property', 'PropertyValue', 'ItemVariation', 'VariationsField', 'Question',
'BaseRestriction', 'Quota', 'Order', 'CachedTicket', 'QuestionAnswer', 'AbstractPosition', 'OrderPosition', 'BaseRestriction', 'Quota', 'Order', 'CachedTicket', 'QuestionAnswer', 'AbstractPosition', 'OrderPosition',
'CartPosition', 'EventSetting', 'OrganizerSetting', 'EventLock', 'cachedfile_name', 'itempicture_upload_to', 'CartPosition', 'EventSetting', 'OrganizerSetting', 'EventLock', 'cachedfile_name', 'itempicture_upload_to',
'generate_secret', 'Voucher', 'LogEntry', 'InvoiceAddress' 'generate_secret', 'Voucher', 'LogEntry', 'InvoiceAddress', 'generate_position_secret'
] ]
+6
View File
@@ -19,6 +19,11 @@ def generate_secret():
return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(16)) return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(16))
def generate_position_secret():
# Exclude o,0,1,i,l to avoid confusion with bad fonts/printers
return ''.join(random.choice('abcdefghjkmnpqrstuvwxyz23456789') for _ in range(32))
class Order(LoggedModel): class Order(LoggedModel):
""" """
An order is created when a user clicks 'buy' on his cart. It holds An order is created when a user clicks 'buy' on his cart. It holds
@@ -371,6 +376,7 @@ class OrderPosition(AbstractPosition):
max_digits=10, decimal_places=2, max_digits=10, decimal_places=2,
verbose_name=_('Tax value') verbose_name=_('Tax value')
) )
secret = models.CharField(max_length=64, default=generate_position_secret)
class Meta: class Meta:
verbose_name = _("Order position") verbose_name = _("Order position")
@@ -69,7 +69,7 @@ class PdfTicketOutput(BaseTicketOutput):
qr_s = self.settings.get('qr_s', default=80, as_type=float) qr_s = self.settings.get('qr_s', default=80, as_type=float)
if qr_s: if qr_s:
reqs = qr_s * units.mm reqs = qr_s * units.mm
qrw = QrCodeWidget(op.id, barLevel='H') qrw = QrCodeWidget(op.secret, barLevel='H')
b = qrw.getBounds() b = qrw.getBounds()
w = b[2] - b[0] w = b[2] - b[0]
h = b[3] - b[1] h = b[3] - b[1]
@@ -84,7 +84,7 @@ class PdfTicketOutput(BaseTicketOutput):
p.setFont("Helvetica", code_s) p.setFont("Helvetica", code_s)
code_x = self.settings.get('code_x', default=15, as_type=float) code_x = self.settings.get('code_x', default=15, as_type=float)
code_y = self.settings.get('code_y', default=130, as_type=float) code_y = self.settings.get('code_y', default=130, as_type=float)
p.drawString(code_x * units.mm, code_y * units.mm, op.id) p.drawString(code_x * units.mm, code_y * units.mm, op.secret)
p.showPage() p.showPage()