diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index d8a6f98c37..88d48756a4 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -541,7 +541,7 @@ class Order(LockModel, LoggedModel): fee += self.event.settings.cancel_allow_user_paid_keep_percentage / Decimal('100.0') * (self.total - fee) if self.event.settings.cancel_allow_user_paid_keep: fee += self.event.settings.cancel_allow_user_paid_keep - return round_decimal(fee, self.event.currency) + return round_decimal(min(fee, self.total), self.event.currency) @property @scopes_disabled() diff --git a/src/tests/base/test_models.py b/src/tests/base/test_models.py index 35c8a7a5e2..25bb7e114e 100644 --- a/src/tests/base/test_models.py +++ b/src/tests/base/test_models.py @@ -1417,6 +1417,10 @@ class OrderTestCase(BaseQuotaTestCase): self.order = Order.objects.get(pk=self.order.pk) assert self.order.user_cancel_fee == Decimal('9.10') + self.event.settings.cancel_allow_user_paid_keep = Decimal('100.00') + self.order = Order.objects.get(pk=self.order.pk) + assert self.order.user_cancel_fee == Decimal('48.00') + @classscope(attr='o') def test_paid_order_underpaid(self): self.order.status = Order.STATUS_PAID