From 1d541df381652a7406605e75a61f4656e04d6e83 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 14 Jan 2021 16:19:01 +0100 Subject: [PATCH] Bank transfer: Find order codes even if there's a suffix behind them --- src/pretix/plugins/banktransfer/tasks.py | 37 ++++++++++++++---------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/pretix/plugins/banktransfer/tasks.py b/src/pretix/plugins/banktransfer/tasks.py index a61189ea5..908d3dbc4 100644 --- a/src/pretix/plugins/banktransfer/tasks.py +++ b/src/pretix/plugins/banktransfer/tasks.py @@ -4,6 +4,7 @@ from decimal import Decimal import dateutil.parser from celery.exceptions import MaxRetriesExceededError +from django.conf import settings from django.db import transaction from django.db.models import Max, Min, Q from django.db.models.functions import Length @@ -63,30 +64,34 @@ def cancel_old_payments(order): ) +def _find_order_for_code(base_qs, code): + try_codes = [ + code, + Order.normalize_code(code, is_fallback=True), + code[:settings.ENTROPY['order_code']], + Order.normalize_code(code[:settings.ENTROPY['order_code']], is_fallback=True) + ] + for c in try_codes: + try: + return base_qs.get(code=c) + except Order.DoesNotExist: + pass + + @transaction.atomic def _handle_transaction(trans: BankTransaction, matches: tuple, event: Event = None, organizer: Organizer = None): orders = [] if event: for slug, code in matches: - try: - orders.append(event.orders.get(code=code)) - except Order.DoesNotExist: - normalized_code = Order.normalize_code(code, is_fallback=True) - try: - orders.append(event.orders.get(code=normalized_code)) - except Order.DoesNotExist: - pass + order = _find_order_for_code(event.orders, code) + if order: + orders.append(order) else: qs = Order.objects.filter(event__organizer=organizer) for slug, code in matches: - try: - orders.append(qs.get(event__slug__iexact=slug, code=code)) - except Order.DoesNotExist: - normalized_code = Order.normalize_code(code, is_fallback=True) - try: - orders.append(qs.get(event__slug__iexact=slug, code=normalized_code)) - except Order.DoesNotExist: - pass + order = _find_order_for_code(qs.filter(event__slug__iexact=slug), code) + if order: + orders.append(order) if not orders: # No match