mirror of
https://github.com/pretix/pretix.git
synced 2026-05-08 15:44:02 +00:00
* Vendor vue.js * Refactor item_group_by_category to support vouchers * Widget: Show product list * Widget: free prices * Widget: pictures and loading indicator * Widget: First iframe steps * Widget: Do not rerender iframe * Widget: Error handling * Improve widget * Widget: localization tech * Fix invoice style * Voucher attribute and waiting list * Add some iframe chrome * First step to namespaced carts * More isolation steps * More cart isolation things * More cart isolation things * Mobile stuff * Show cart on checkout pages * PayPal and Stripe support * Enable downloads * Locale handling * change text "save URL to this exact page" * Widget: voucher redemption * Widget: CSS * CSS: Responsive * Widget: CSS improvements * Widget: Add embedding code generator * Widget: Error messages and SSL check * First tests * Widget: tests * Don't use IDs in widgets * Widget: static files caching
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from django.contrib import messages
|
||||
from django.http import Http404
|
||||
from django.shortcuts import redirect
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.views.generic import View
|
||||
|
||||
@@ -8,21 +9,31 @@ from pretix.base.services.cart import CartError
|
||||
from pretix.base.signals import validate_cart
|
||||
from pretix.multidomain.urlreverse import eventreverse
|
||||
from pretix.presale.checkoutflow import get_checkout_flow
|
||||
from pretix.presale.views import get_cart
|
||||
from pretix.presale.views import (
|
||||
allow_frame_if_namespaced, get_cart, iframe_entry_view_wrapper,
|
||||
)
|
||||
|
||||
|
||||
@method_decorator(allow_frame_if_namespaced, 'dispatch')
|
||||
@method_decorator(iframe_entry_view_wrapper, 'dispatch')
|
||||
class CheckoutView(View):
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
|
||||
def get_index_url(self, request):
|
||||
kwargs = {}
|
||||
if 'cart_namespace' in self.kwargs:
|
||||
kwargs['cart_namespace'] = self.kwargs['cart_namespace']
|
||||
return eventreverse(self.request.event, 'presale:event.index', kwargs=kwargs)
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
self.request = request
|
||||
|
||||
if not get_cart(request) and "async_id" not in request.GET:
|
||||
messages.error(request, _("Your cart is empty"))
|
||||
return redirect(eventreverse(self.request.event, 'presale:event.index'))
|
||||
return redirect(self.get_index_url(self.request))
|
||||
|
||||
if not request.event.presale_is_running:
|
||||
messages.error(request, _("The presale for this event is over or has not yet started."))
|
||||
return redirect(eventreverse(self.request.event, 'presale:event.index'))
|
||||
return redirect(self.get_index_url(self.request))
|
||||
|
||||
cart_error = None
|
||||
try:
|
||||
@@ -37,14 +48,14 @@ class CheckoutView(View):
|
||||
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'))
|
||||
return redirect(previous_step.get_step_url(request) if previous_step
|
||||
else self.get_index_url(request))
|
||||
|
||||
if 'step' not in kwargs:
|
||||
return redirect(step.get_step_url())
|
||||
return redirect(step.get_step_url(request))
|
||||
is_selected = (step.identifier == kwargs.get('step', ''))
|
||||
if "async_id" not in request.GET and not is_selected and not step.is_completed(request, warn=not is_selected):
|
||||
return redirect(step.get_step_url())
|
||||
return redirect(step.get_step_url(request))
|
||||
if is_selected:
|
||||
if request.method.lower() in self.http_method_names:
|
||||
handler = getattr(step, request.method.lower(), self.http_method_not_allowed)
|
||||
|
||||
Reference in New Issue
Block a user