From 1a1afcddc6f8ca10625d251602e0db1282d6ed81 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 4 May 2020 17:29:29 +0200 Subject: [PATCH] Self-service canellations with custom fee: More tolerant decimal parsing --- src/pretix/presale/views/order.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/pretix/presale/views/order.py b/src/pretix/presale/views/order.py index b2f654f6e..ee6489756 100644 --- a/src/pretix/presale/views/order.py +++ b/src/pretix/presale/views/order.py @@ -1,8 +1,10 @@ import inspect import mimetypes import os +import re from decimal import Decimal +from django import forms from django.conf import settings from django.contrib import messages from django.core.files import File @@ -764,7 +766,15 @@ class OrderCancelDo(EventViewMixin, OrderDetailMixin, AsyncAction, View): fee = self.order.user_cancel_fee if 'cancel_fee' in request.POST and self.request.event.settings.cancel_allow_user_paid_adjust_fees: fee = fee or Decimal('0.00') - custom_fee = Decimal(request.POST.get('cancel_fee')) + fee_in = re.sub('[^0-9.,]', '', request.POST.get('cancel_fee')) + try: + custom_fee = forms.DecimalField(localize=True).to_python(fee_in) + except: + try: + custom_fee = Decimal(fee_in) + except: + messages.error(request, _('You chose an invalid cancellation fee.')) + return redirect(self.get_order_url()) if fee <= custom_fee <= self.order.payment_refund_sum: fee = custom_fee else: