diff --git a/src/pretix/presale/static/pretixpresale/less/event.less b/src/pretix/presale/static/pretixpresale/less/event.less
index a6560c3293..19f97f1f31 100644
--- a/src/pretix/presale/static/pretixpresale/less/event.less
+++ b/src/pretix/presale/static/pretixpresale/less/event.less
@@ -44,6 +44,9 @@
border-top: 1px solid @table-border-color;
}
}
+.panel-primary .panel-heading a {
+ color: white;
+}
.checkout-button-row {
padding: 15px 0;
}
diff --git a/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html b/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html
new file mode 100644
index 0000000000..0e78521d65
--- /dev/null
+++ b/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html
@@ -0,0 +1,46 @@
+{% extends "pretixpresale/event/base.html" %}
+{% load i18n %}
+{% load bootstrap3 %}
+{% block title %}{% trans "Confirm order" %}{% endblock %}
+{% block content %}
+
{% trans "Total" %}
diff --git a/src/pretix/presale/urls.py b/src/pretix/presale/urls.py
index 761943d2f0..4eeb6236a6 100644
--- a/src/pretix/presale/urls.py
+++ b/src/pretix/presale/urls.py
@@ -16,6 +16,8 @@ urlpatterns = patterns(
url(r'^checkout$', pretix.presale.views.checkout.CheckoutStart.as_view(), name='event.checkout.start'),
url(r'^checkout/payment$', pretix.presale.views.checkout.PaymentDetails.as_view(),
name='event.checkout.payment'),
+ url(r'^checkout/confirm$', pretix.presale.views.checkout.OrderConfirm.as_view(),
+ name='event.checkout.confirm'),
url(r'^login$', pretix.presale.views.event.EventLogin.as_view(), name='event.checkout.login'),
)
)),
diff --git a/src/pretix/presale/views/__init__.py b/src/pretix/presale/views/__init__.py
index 5066000531..25157302d8 100644
--- a/src/pretix/presale/views/__init__.py
+++ b/src/pretix/presale/views/__init__.py
@@ -8,6 +8,7 @@ from django.db.models import Q
from django.utils.timezone import now
from pretix.base.models import CartPosition
+from pretix.base.signals import register_payment_providers
class EventLoginRequiredMixin:
@@ -59,10 +60,21 @@ class CartDisplayMixin:
group.total = group.count * group.price
positions.append(group)
+ total = sum(p.total for p in positions)
+
+ payment_fee = 0
+ if 'payment' in self.request.session:
+ responses = register_payment_providers.send(self.request.event)
+ for receiver, response in responses:
+ provider = response(self.request.event)
+ if provider.identifier == self.request.session['payment']:
+ payment_fee = provider.calculate_fee(total)
+
return {
'positions': positions,
'raw': cartpos,
- 'total': sum(p.total for p in positions),
+ 'total': total + payment_fee,
+ 'payment_fee': payment_fee,
'minutes_left': (
max(min(p.expires for p in positions) - now(), timedelta()).seconds // 60
if positions else 0
diff --git a/src/pretix/presale/views/checkout.py b/src/pretix/presale/views/checkout.py
index e396981725..c18d3e2dc5 100644
--- a/src/pretix/presale/views/checkout.py
+++ b/src/pretix/presale/views/checkout.py
@@ -76,7 +76,7 @@ class QuestionsForm(forms.Form):
self.fields['question_%s' % q.identity] = field
-class CheckoutStart(EventViewMixin, CartDisplayMixin, EventLoginRequiredMixin, TemplateView):
+class CheckoutStart(EventViewMixin, EventLoginRequiredMixin, TemplateView):
template_name = "pretixpresale/event/checkout_questions.html"
def get_success_url(self):
@@ -183,11 +183,11 @@ class CheckoutStart(EventViewMixin, CartDisplayMixin, EventLoginRequiredMixin, T
return ctx
-class PaymentDetails(EventViewMixin, CartDisplayMixin, EventLoginRequiredMixin, TemplateView):
+class PaymentDetails(EventViewMixin, EventLoginRequiredMixin, TemplateView):
template_name = "pretixpresale/event/checkout_payment.html"
def get_success_url(self):
- return reverse('presale:event.index', kwargs={
+ return reverse('presale:event.checkout.confirm', kwargs={
'event': self.request.event.slug,
'organizer': self.request.event.organizer.slug,
})
@@ -229,6 +229,7 @@ class PaymentDetails(EventViewMixin, CartDisplayMixin, EventLoginRequiredMixin,
def post(self, request, *args, **kwargs):
for p in self.provider_forms:
if p['provider'].identifier == request.POST.get('payment', ''):
+ request.session['payment'] = p['provider'].identifier
total = self._total_order_value + p['provider'].calculate_fee(self._total_order_value)
resp = p['provider'].checkout_prepare(request, total)
if isinstance(resp, HttpResponse):
@@ -242,3 +243,12 @@ class PaymentDetails(EventViewMixin, CartDisplayMixin, EventLoginRequiredMixin,
ctx = super().get_context_data(**kwargs)
ctx['providers'] = self.provider_forms
return ctx
+
+
+class OrderConfirm(EventViewMixin, CartDisplayMixin, EventLoginRequiredMixin, TemplateView):
+ template_name = "pretixpresale/event/checkout_confirm.html"
+
+ def get_context_data(self, **kwargs):
+ ctx = super().get_context_data(**kwargs)
+ ctx['cart'] = self.get_cart()
+ return ctx