mirror of
https://github.com/pretix/pretix.git
synced 2026-05-08 15:44:02 +00:00
Make validate_cart useful together with addons
This commit is contained in:
@@ -27,6 +27,8 @@ from pretix.presale.views.questions import QuestionsViewMixin
|
|||||||
|
|
||||||
|
|
||||||
class BaseCheckoutFlowStep:
|
class BaseCheckoutFlowStep:
|
||||||
|
requires_valid_cart = True
|
||||||
|
|
||||||
def __init__(self, event):
|
def __init__(self, event):
|
||||||
self.event = event
|
self.event = event
|
||||||
self.request = None
|
self.request = None
|
||||||
@@ -135,6 +137,7 @@ class AddOnsStep(CartMixin, AsyncAction, TemplateFlowStep):
|
|||||||
template_name = "pretixpresale/event/checkout_addons.html"
|
template_name = "pretixpresale/event/checkout_addons.html"
|
||||||
task = set_cart_addons
|
task = set_cart_addons
|
||||||
known_errortypes = ['CartError']
|
known_errortypes = ['CartError']
|
||||||
|
requires_valid_cart = False
|
||||||
|
|
||||||
def is_applicable(self, request):
|
def is_applicable(self, request):
|
||||||
return get_cart(request).filter(item__addons__isnull=False).exists()
|
return get_cart(request).filter(item__addons__isnull=False).exists()
|
||||||
|
|||||||
@@ -22,16 +22,22 @@ class CheckoutView(View):
|
|||||||
messages.error(request, _("Your cart is empty"))
|
messages.error(request, _("Your cart is empty"))
|
||||||
return redirect(eventreverse(self.request.event, 'presale:event.index'))
|
return redirect(eventreverse(self.request.event, 'presale:event.index'))
|
||||||
|
|
||||||
|
cart_error = None
|
||||||
try:
|
try:
|
||||||
validate_cart.send(sender=self.request.event, positions=cart_pos)
|
validate_cart.send(sender=self.request.event, positions=cart_pos)
|
||||||
except CartError as e:
|
except CartError as e:
|
||||||
messages.error(request, str(e))
|
cart_error = e
|
||||||
return redirect(eventreverse(self.request.event, 'presale:event.index'))
|
|
||||||
|
|
||||||
flow = get_checkout_flow(self.request.event)
|
flow = get_checkout_flow(self.request.event)
|
||||||
|
previous_step = None
|
||||||
for step in flow:
|
for step in flow:
|
||||||
if not step.is_applicable(request):
|
if not step.is_applicable(request):
|
||||||
continue
|
continue
|
||||||
|
if step.requires_valid_cart and cart_error:
|
||||||
|
messages.error(request, str(cart_error))
|
||||||
|
return redirect(previous_step.get_step_url() if previous_step
|
||||||
|
else eventreverse(self.request.event, 'presale:event.index'))
|
||||||
|
|
||||||
if 'step' not in kwargs:
|
if 'step' not in kwargs:
|
||||||
return redirect(step.get_step_url())
|
return redirect(step.get_step_url())
|
||||||
is_selected = (step.identifier == kwargs.get('step', ''))
|
is_selected = (step.identifier == kwargs.get('step', ''))
|
||||||
@@ -43,4 +49,6 @@ class CheckoutView(View):
|
|||||||
else:
|
else:
|
||||||
handler = self.http_method_not_allowed
|
handler = self.http_method_not_allowed
|
||||||
return handler(request)
|
return handler(request)
|
||||||
|
else:
|
||||||
|
previous_step = step
|
||||||
raise Http404()
|
raise Http404()
|
||||||
|
|||||||
Reference in New Issue
Block a user