forked from CGM_Public/pretix_original
Order codes: Remove character '8' from charset
This commit is contained in:
@@ -615,21 +615,26 @@ class Order(LockModel, LoggedModel):
|
|||||||
return proposals
|
return proposals
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def normalize_code(code):
|
def normalize_code(code, is_fallback=False):
|
||||||
tr = str.maketrans({
|
d = {
|
||||||
'2': 'Z',
|
'2': 'Z',
|
||||||
'4': 'A',
|
'4': 'A',
|
||||||
'5': 'S',
|
'5': 'S',
|
||||||
'6': 'G',
|
'6': 'G',
|
||||||
})
|
}
|
||||||
|
if is_fallback:
|
||||||
|
d['8'] = 'B'
|
||||||
|
# 8 has been removed from the character set only in 2021, which means there are a lot of order codes
|
||||||
|
# with an 8 in it around. We only want to replace this when this is used in a fallback.
|
||||||
|
tr = str.maketrans(d)
|
||||||
return code.upper().translate(tr)
|
return code.upper().translate(tr)
|
||||||
|
|
||||||
def assign_code(self):
|
def assign_code(self):
|
||||||
# This omits some character pairs completely because they are hard to read even on screens (1/I and O/0)
|
# This omits some character pairs completely because they are hard to read even on screens (1/I and O/0)
|
||||||
# and includes only one of two characters for some pairs because they are sometimes hard to distinguish in
|
# and includes only one of two characters for some pairs because they are sometimes hard to distinguish in
|
||||||
# handwriting (2/Z, 4/A, 5/S, 6/G). This allows for better detection e.g. in incoming wire transfers that
|
# handwriting (2/Z, 4/A, 5/S, 6/G, 8/B). This allows for better detection e.g. in incoming wire transfers that
|
||||||
# might include OCR'd handwritten text
|
# might include OCR'd handwritten text
|
||||||
charset = list('ABCDEFGHJKLMNPQRSTUVWXYZ3789')
|
charset = list('ABCDEFGHJKLMNPQRSTUVWXYZ379')
|
||||||
iteration = 0
|
iteration = 0
|
||||||
length = settings.ENTROPY['order_code']
|
length = settings.ENTROPY['order_code']
|
||||||
while True:
|
while True:
|
||||||
|
|||||||
@@ -1974,7 +1974,7 @@ class OrderGo(EventPermissionRequiredMixin, View):
|
|||||||
try:
|
try:
|
||||||
return Order.objects.get(code=code, event=self.request.event)
|
return Order.objects.get(code=code, event=self.request.event)
|
||||||
except Order.DoesNotExist:
|
except Order.DoesNotExist:
|
||||||
return Order.objects.get(code=Order.normalize_code(code), event=self.request.event)
|
return Order.objects.get(code=Order.normalize_code(code, is_fallback=True), event=self.request.event)
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
code = request.GET.get("code", "").upper().strip()
|
code = request.GET.get("code", "").upper().strip()
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ def _handle_transaction(trans: BankTransaction, matches: tuple, event: Event = N
|
|||||||
try:
|
try:
|
||||||
orders.append(event.orders.get(code=code))
|
orders.append(event.orders.get(code=code))
|
||||||
except Order.DoesNotExist:
|
except Order.DoesNotExist:
|
||||||
normalized_code = Order.normalize_code(code)
|
normalized_code = Order.normalize_code(code, is_fallback=True)
|
||||||
try:
|
try:
|
||||||
orders.append(event.orders.get(code=normalized_code))
|
orders.append(event.orders.get(code=normalized_code))
|
||||||
except Order.DoesNotExist:
|
except Order.DoesNotExist:
|
||||||
@@ -83,7 +83,7 @@ def _handle_transaction(trans: BankTransaction, matches: tuple, event: Event = N
|
|||||||
try:
|
try:
|
||||||
orders.append(qs.get(event__slug__iexact=slug, code=code))
|
orders.append(qs.get(event__slug__iexact=slug, code=code))
|
||||||
except Order.DoesNotExist:
|
except Order.DoesNotExist:
|
||||||
normalized_code = Order.normalize_code(code)
|
normalized_code = Order.normalize_code(code, is_fallback=True)
|
||||||
try:
|
try:
|
||||||
orders.append(qs.get(event__slug__iexact=slug, code=normalized_code))
|
orders.append(qs.get(event__slug__iexact=slug, code=normalized_code))
|
||||||
except Order.DoesNotExist:
|
except Order.DoesNotExist:
|
||||||
|
|||||||
Reference in New Issue
Block a user