From a5e2caf4380fa308a487c93046fcbfa01db31a34 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 4 Jul 2019 09:30:55 +0200 Subject: [PATCH] Consistently include other fees in percentual payment fee --- src/pretix/base/payment.py | 4 +--- src/pretix/base/services/cart.py | 9 +++++---- src/pretix/base/services/orders.py | 24 ++++++++++++++---------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/pretix/base/payment.py b/src/pretix/base/payment.py index d650c4b9a..fa1204523 100644 --- a/src/pretix/base/payment.py +++ b/src/pretix/base/payment.py @@ -249,9 +249,7 @@ class BasePaymentProvider: ('_fee_percent', forms.DecimalField( label=_('Additional fee'), - help_text=_('Percentage of the order total. Note that this percentage will currently only ' - 'be calculated on the summed price of sold tickets, not on other fees like e.g. shipping ' - 'fees, if there are any.'), + help_text=_('Percentage of the order total.'), localize=True, required=False, )), diff --git a/src/pretix/base/services/cart.py b/src/pretix/base/services/cart.py index cdb871860..6201a9749 100644 --- a/src/pretix/base/services/cart.py +++ b/src/pretix/base/services/cart.py @@ -938,6 +938,11 @@ def update_tax_rates(event: Event, cart_id: str, invoice_address: InvoiceAddress def get_fees(event, request, total, invoice_address, provider): fees = [] + for recv, resp in fee_calculation_for_cart.send(sender=event, request=request, invoice_address=invoice_address, + total=total): + fees += resp + + total = total + sum(f.value for f in fees) if provider and total != 0: provider = event.get_payment_providers().get(provider) if provider: @@ -963,10 +968,6 @@ def get_fees(event, request, total, invoice_address, provider): tax_rule=payment_fee_tax_rule )) - for recv, resp in fee_calculation_for_cart.send(sender=event, request=request, invoice_address=invoice_address, - total=total): - fees += resp - return fees diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 81a2cdcfa..f9fcef9b9 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -591,6 +591,12 @@ def _get_fees(positions: List[CartPosition], payment_provider: BasePaymentProvid meta_info: dict, event: Event): fees = [] total = sum([c.price for c in positions]) + + for recv, resp in order_fee_calculation.send(sender=event, invoice_address=address, total=total, + meta_info=meta_info, positions=positions): + fees += resp + + total += sum(f.value for f in fees) if payment_provider: payment_fee = payment_provider.calculate_fee(total) else: @@ -601,9 +607,6 @@ def _get_fees(positions: List[CartPosition], payment_provider: BasePaymentProvid internal_type=payment_provider.identifier) fees.append(pf) - for recv, resp in order_fee_calculation.send(sender=event, invoice_address=address, total=total, - meta_info=meta_info, positions=positions): - fees += resp return fees, pf @@ -1377,6 +1380,14 @@ class OrderChangeManager: pass split_order.total = sum([p.price for p in split_positions if not p.canceled]) + + for fee in self.order.fees.exclude(fee_type=OrderFee.FEE_TYPE_PAYMENT): + new_fee = modelcopy(fee) + new_fee.pk = None + new_fee.order = split_order + split_order.total += new_fee.value + new_fee.save() + if split_order.total != Decimal('0.00') and self.order.status != Order.STATUS_PAID: pp = self._get_payment_provider() if pp: @@ -1392,13 +1403,6 @@ class OrderChangeManager: fee.delete() split_order.total += fee.value - for fee in self.order.fees.exclude(fee_type=OrderFee.FEE_TYPE_PAYMENT): - new_fee = modelcopy(fee) - new_fee.pk = None - new_fee.order = split_order - split_order.total += new_fee.value - new_fee.save() - split_order.save() if split_order.status == Order.STATUS_PAID: