mirror of
https://github.com/pretix/pretix.git
synced 2026-05-10 16:04:02 +00:00
Bank transfer: Find order codes even if there's a suffix behind them
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user