Bank transfer: Find order codes even if there's a suffix behind them

This commit is contained in:
Raphael Michel
2021-01-14 16:19:01 +01:00
parent 32d32d68d9
commit 1d541df381

View File

@@ -4,6 +4,7 @@ from decimal import Decimal
import dateutil.parser import dateutil.parser
from celery.exceptions import MaxRetriesExceededError from celery.exceptions import MaxRetriesExceededError
from django.conf import settings
from django.db import transaction from django.db import transaction
from django.db.models import Max, Min, Q from django.db.models import Max, Min, Q
from django.db.models.functions import Length 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 @transaction.atomic
def _handle_transaction(trans: BankTransaction, matches: tuple, event: Event = None, organizer: Organizer = None): def _handle_transaction(trans: BankTransaction, matches: tuple, event: Event = None, organizer: Organizer = None):
orders = [] orders = []
if event: if event:
for slug, code in matches: for slug, code in matches:
try: order = _find_order_for_code(event.orders, code)
orders.append(event.orders.get(code=code)) if order:
except Order.DoesNotExist: orders.append(order)
normalized_code = Order.normalize_code(code, is_fallback=True)
try:
orders.append(event.orders.get(code=normalized_code))
except Order.DoesNotExist:
pass
else: else:
qs = Order.objects.filter(event__organizer=organizer) qs = Order.objects.filter(event__organizer=organizer)
for slug, code in matches: for slug, code in matches:
try: order = _find_order_for_code(qs.filter(event__slug__iexact=slug), code)
orders.append(qs.get(event__slug__iexact=slug, code=code)) if order:
except Order.DoesNotExist: orders.append(order)
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
if not orders: if not orders:
# No match # No match