Refs #928 -- Allow to regenerate secrets of specific tickets

This commit is contained in:
Raphael Michel
2018-05-31 12:55:06 +02:00
parent 31380bbef2
commit bbb78aa5e6
5 changed files with 27 additions and 0 deletions

View File

@@ -689,6 +689,7 @@ class OrderChangeManager:
CancelOperation = namedtuple('CancelOperation', ('position',))
AddOperation = namedtuple('AddOperation', ('item', 'variation', 'price', 'addon_to', 'subevent'))
SplitOperation = namedtuple('SplitOperation', ('position',))
RegenerateSecretOperation = namedtuple('RegenerateSecretOperation', ('position',))
def __init__(self, order: Order, user, notify=True):
self.order = order
@@ -744,6 +745,9 @@ class OrderChangeManager:
self._quotadiff.subtract(position.quotas)
self._operations.append(self.SubeventOperation(position, subevent, price))
def regenerate_secret(self, position: OrderPosition):
self._operations.append(self.RegenerateSecretOperation(position))
def change_price(self, position: OrderPosition, price: Decimal):
price = position.item.tax(price)
@@ -950,6 +954,15 @@ class OrderChangeManager:
})
elif isinstance(op, self.SplitOperation):
split_positions.append(op.position)
elif isinstance(op, self.RegenerateSecretOperation):
op.position.secret = generate_position_secret()
op.position.save()
CachedTicket.objects.filter(order_position__order=self.order).delete()
CachedCombinedTicket.objects.filter(order=self.order).delete()
self.order.log_action('pretix.event.order.changed.secret', user=self.user, data={
'position': op.position.pk,
'positionid': op.position.positionid,
})
if split_positions:
self.split_order = self._create_split_order(split_positions)

View File

@@ -206,6 +206,7 @@ class OrderPositionChangeForm(forms.Form):
('subevent', 'Change event date'),
('cancel', 'Remove product'),
('split', 'Split into new order'),
('secret', 'Regenerate secret'),
)
)

View File

@@ -82,6 +82,10 @@ def _display_order_changed(event: Event, logentry: LogEntry):
item=item,
price=money_filter(Decimal(data['price']), event.currency),
)
elif logentry.action_type == 'pretix.event.order.changed.secret':
return text + ' ' + _('A new secret has been generated for position #{posid}.').format(
posid=data.get('positionid', '?'),
)
elif logentry.action_type == 'pretix.event.order.changed.split':
old_item = str(event.items.get(pk=data['old_item']))
if data['old_variation']:

View File

@@ -131,6 +131,13 @@
{% trans "Split into new order" %}
</label>
</div>
<div class="radio">
<label>
<input name="{{ position.form.prefix }}-operation" type="radio" value="secret"
{% if position.form.operation.value == "secret" %}checked="checked"{% endif %}>
{% trans "Generate a new secret" %}
</label>
</div>
<div class="radio">
<label>
<input name="{{ position.form.prefix }}-operation" type="radio" value="cancel"

View File

@@ -631,6 +631,8 @@ class OrderChange(OrderView):
ocm.cancel(p)
elif p.form.cleaned_data['operation'] == 'split':
ocm.split(p)
elif p.form.cleaned_data['operation'] == 'secret':
ocm.regenerate_secret(p)
except OrderError as e:
p.custom_error = str(e)