From 9cd3e2d4945a5daff1ce8d36ad9073d8526dfa13 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 13 Sep 2017 16:42:00 +0200 Subject: [PATCH] Require payment even if total consists only of fees --- src/pretix/base/payment.py | 6 +++++- src/pretix/base/services/cart.py | 5 +---- src/pretix/presale/checkoutflow.py | 8 ++++++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/pretix/base/payment.py b/src/pretix/base/payment.py index 87e2b98904..04166c17b3 100644 --- a/src/pretix/base/payment.py +++ b/src/pretix/base/payment.py @@ -591,7 +591,11 @@ class FreeOrderProvider(BasePaymentProvider): messages.success(request, _('The order has been marked as refunded.')) def is_allowed(self, request: HttpRequest) -> bool: - return get_cart_total(request) == 0 + from .services.cart import get_fees + + total = get_cart_total(request) + total += sum([f.value for f in get_fees(self.event, request, total, None, None)]) + return total == 0 def order_change_allowed(self, order: Order) -> bool: return False diff --git a/src/pretix/base/services/cart.py b/src/pretix/base/services/cart.py index a66994345a..8dbfecd825 100644 --- a/src/pretix/base/services/cart.py +++ b/src/pretix/base/services/cart.py @@ -631,10 +631,7 @@ def update_tax_rates(event: Event, cart_id: str, invoice_address: InvoiceAddress def get_fees(event, request, total, invoice_address, provider): fees = [] - if total == 0: - return fees - - if provider: + if provider and total != 0: provider = event.get_payment_providers().get(provider) if provider: payment_fee = provider.calculate_fee(total) diff --git a/src/pretix/presale/checkoutflow.py b/src/pretix/presale/checkoutflow.py index 736bd492d5..b4cdb2f671 100644 --- a/src/pretix/presale/checkoutflow.py +++ b/src/pretix/presale/checkoutflow.py @@ -11,7 +11,9 @@ from django.views.generic.base import TemplateResponseMixin from pretix.base.models import Order from pretix.base.models.orders import InvoiceAddress -from pretix.base.services.cart import set_cart_addons, update_tax_rates +from pretix.base.services.cart import ( + get_fees, set_cart_addons, update_tax_rates, +) from pretix.base.services.orders import perform_order from pretix.multidomain.urlreverse import eventreverse from pretix.presale.forms.checkout import ( @@ -379,7 +381,9 @@ class PaymentStep(QuestionsViewMixin, CartMixin, TemplateFlowStep): @cached_property def _total_order_value(self): - return get_cart_total(self.request) + total = get_cart_total(self.request) + total += sum([f.value for f in get_fees(self.request.event, self.request, total, self.invoice_address, None)]) + return total @cached_property def provider_forms(self):