Self-service canellations with custom fee: More tolerant decimal parsing

This commit is contained in:
Raphael Michel
2020-05-04 17:29:29 +02:00
parent 219c82b028
commit 1a1afcddc6

View File

@@ -1,8 +1,10 @@
import inspect import inspect
import mimetypes import mimetypes
import os import os
import re
from decimal import Decimal from decimal import Decimal
from django import forms
from django.conf import settings from django.conf import settings
from django.contrib import messages from django.contrib import messages
from django.core.files import File from django.core.files import File
@@ -764,7 +766,15 @@ class OrderCancelDo(EventViewMixin, OrderDetailMixin, AsyncAction, View):
fee = self.order.user_cancel_fee fee = self.order.user_cancel_fee
if 'cancel_fee' in request.POST and self.request.event.settings.cancel_allow_user_paid_adjust_fees: if 'cancel_fee' in request.POST and self.request.event.settings.cancel_allow_user_paid_adjust_fees:
fee = fee or Decimal('0.00') 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: if fee <= custom_fee <= self.order.payment_refund_sum:
fee = custom_fee fee = custom_fee
else: else: