forked from CGM_Public/pretix_original
Order search: Extend zfill() for invoice numbers beyond 5 digits
This commit is contained in:
@@ -148,9 +148,13 @@ with scopes_disabled():
|
||||
else:
|
||||
code = Q(code__icontains=Order.normalize_code(u))
|
||||
|
||||
invoice_nos = {u, u.upper()}
|
||||
if u.isdigit():
|
||||
for i in range(2, 12):
|
||||
invoice_nos.add(u.zfill(i))
|
||||
|
||||
matching_invoices = Invoice.objects.filter(
|
||||
Q(invoice_no__iexact=u)
|
||||
| Q(invoice_no__iexact=u.zfill(5))
|
||||
Q(invoice_no__in=invoice_nos)
|
||||
| Q(full_invoice_no__iexact=u)
|
||||
).values_list('order_id', flat=True)
|
||||
|
||||
|
||||
@@ -594,6 +594,7 @@ DEFAULTS = {
|
||||
'form_kwargs': dict(
|
||||
label=_("Minimum length of invoice number after prefix"),
|
||||
help_text=_("The part of your invoice number after your prefix will be filled up with leading zeros up to this length, e.g. INV-001 or INV-00001."),
|
||||
max_value=12,
|
||||
required=True,
|
||||
)
|
||||
},
|
||||
|
||||
@@ -256,9 +256,13 @@ class OrderFilterForm(FilterForm):
|
||||
else:
|
||||
code = Q(code__icontains=Order.normalize_code(u))
|
||||
|
||||
invoice_nos = {u, u.upper()}
|
||||
if u.isdigit():
|
||||
for i in range(2, 12):
|
||||
invoice_nos.add(u.zfill(i))
|
||||
|
||||
matching_invoices = Invoice.objects.filter(
|
||||
Q(invoice_no__iexact=u)
|
||||
| Q(invoice_no__iexact=u.zfill(5))
|
||||
Q(invoice_no__in=invoice_nos)
|
||||
| Q(full_invoice_no__iexact=u)
|
||||
).values_list('order_id', flat=True)
|
||||
matching_positions = OrderPosition.objects.filter(
|
||||
@@ -1004,9 +1008,13 @@ class OrderPaymentSearchFilterForm(forms.Form):
|
||||
if fdata.get('query'):
|
||||
u = fdata.get('query')
|
||||
|
||||
invoice_nos = {u, u.upper()}
|
||||
if u.isdigit():
|
||||
for i in range(2, 12):
|
||||
invoice_nos.add(u.zfill(i))
|
||||
|
||||
matching_invoices = Invoice.objects.filter(
|
||||
Q(invoice_no__iexact=u)
|
||||
| Q(invoice_no__iexact=u.zfill(5))
|
||||
Q(invoice_no__in=invoice_nos)
|
||||
| Q(full_invoice_no__iexact=u)
|
||||
).values_list('order_id', flat=True)
|
||||
|
||||
|
||||
@@ -46,7 +46,6 @@ from django import forms
|
||||
from django.contrib import messages
|
||||
from django.db import transaction
|
||||
from django.db.models import Count, Q, QuerySet
|
||||
from django.db.models.functions import Concat
|
||||
from django.http import FileResponse, JsonResponse
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.urls import reverse
|
||||
@@ -247,16 +246,24 @@ class ActionView(View):
|
||||
& Q(code__icontains=Order.normalize_code(u.split("-")[1])))
|
||||
else:
|
||||
code = Q(code__icontains=Order.normalize_code(u))
|
||||
qs = self.order_qs().order_by('pk').annotate(inr=Concat('invoices__prefix', 'invoices__invoice_no')).filter(
|
||||
|
||||
invoice_nos = {u, u.upper()}
|
||||
if u.isdigit():
|
||||
if hasattr(request, 'event'):
|
||||
invoice_nos.add(u.zfill(request.event.invoice_numbers_counter_length))
|
||||
else:
|
||||
for i in range(2, 12):
|
||||
invoice_nos.add(u.zfill(i))
|
||||
|
||||
qs = self.order_qs().order_by('pk').filter(
|
||||
code
|
||||
| Q(email__icontains=u)
|
||||
| Q(all_positions__attendee_name_cached__icontains=u)
|
||||
| Q(all_positions__attendee_email__icontains=u)
|
||||
| Q(invoice_address__name_cached__icontains=u)
|
||||
| Q(invoice_address__company__icontains=u)
|
||||
| Q(invoices__invoice_no=u)
|
||||
| Q(invoices__invoice_no=u.zfill(5))
|
||||
| Q(inr=u)
|
||||
| Q(invoices__invoice_no__in=invoice_nos)
|
||||
| Q(invoices__full_invoice_no=u)
|
||||
).select_related('event').annotate(pcnt=Count('invoices')).distinct()
|
||||
# Yep, we wouldn't need to count the invoices here. However, having this Count() statement in there
|
||||
# tricks Django into generating a GROUP BY clause that it otherwise wouldn't and that is required to
|
||||
|
||||
Reference in New Issue
Block a user