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:
|
else:
|
||||||
code = Q(code__icontains=Order.normalize_code(u))
|
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(
|
matching_invoices = Invoice.objects.filter(
|
||||||
Q(invoice_no__iexact=u)
|
Q(invoice_no__in=invoice_nos)
|
||||||
| Q(invoice_no__iexact=u.zfill(5))
|
|
||||||
| Q(full_invoice_no__iexact=u)
|
| Q(full_invoice_no__iexact=u)
|
||||||
).values_list('order_id', flat=True)
|
).values_list('order_id', flat=True)
|
||||||
|
|
||||||
|
|||||||
@@ -594,6 +594,7 @@ DEFAULTS = {
|
|||||||
'form_kwargs': dict(
|
'form_kwargs': dict(
|
||||||
label=_("Minimum length of invoice number after prefix"),
|
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."),
|
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,
|
required=True,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -256,9 +256,13 @@ class OrderFilterForm(FilterForm):
|
|||||||
else:
|
else:
|
||||||
code = Q(code__icontains=Order.normalize_code(u))
|
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(
|
matching_invoices = Invoice.objects.filter(
|
||||||
Q(invoice_no__iexact=u)
|
Q(invoice_no__in=invoice_nos)
|
||||||
| Q(invoice_no__iexact=u.zfill(5))
|
|
||||||
| Q(full_invoice_no__iexact=u)
|
| Q(full_invoice_no__iexact=u)
|
||||||
).values_list('order_id', flat=True)
|
).values_list('order_id', flat=True)
|
||||||
matching_positions = OrderPosition.objects.filter(
|
matching_positions = OrderPosition.objects.filter(
|
||||||
@@ -1004,9 +1008,13 @@ class OrderPaymentSearchFilterForm(forms.Form):
|
|||||||
if fdata.get('query'):
|
if fdata.get('query'):
|
||||||
u = 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(
|
matching_invoices = Invoice.objects.filter(
|
||||||
Q(invoice_no__iexact=u)
|
Q(invoice_no__in=invoice_nos)
|
||||||
| Q(invoice_no__iexact=u.zfill(5))
|
|
||||||
| Q(full_invoice_no__iexact=u)
|
| Q(full_invoice_no__iexact=u)
|
||||||
).values_list('order_id', flat=True)
|
).values_list('order_id', flat=True)
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ from django import forms
|
|||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Count, Q, QuerySet
|
from django.db.models import Count, Q, QuerySet
|
||||||
from django.db.models.functions import Concat
|
|
||||||
from django.http import FileResponse, JsonResponse
|
from django.http import FileResponse, JsonResponse
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
@@ -247,16 +246,24 @@ class ActionView(View):
|
|||||||
& Q(code__icontains=Order.normalize_code(u.split("-")[1])))
|
& Q(code__icontains=Order.normalize_code(u.split("-")[1])))
|
||||||
else:
|
else:
|
||||||
code = Q(code__icontains=Order.normalize_code(u))
|
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
|
code
|
||||||
| Q(email__icontains=u)
|
| Q(email__icontains=u)
|
||||||
| Q(all_positions__attendee_name_cached__icontains=u)
|
| Q(all_positions__attendee_name_cached__icontains=u)
|
||||||
| Q(all_positions__attendee_email__icontains=u)
|
| Q(all_positions__attendee_email__icontains=u)
|
||||||
| Q(invoice_address__name_cached__icontains=u)
|
| Q(invoice_address__name_cached__icontains=u)
|
||||||
| Q(invoice_address__company__icontains=u)
|
| Q(invoice_address__company__icontains=u)
|
||||||
| Q(invoices__invoice_no=u)
|
| Q(invoices__invoice_no__in=invoice_nos)
|
||||||
| Q(invoices__invoice_no=u.zfill(5))
|
| Q(invoices__full_invoice_no=u)
|
||||||
| Q(inr=u)
|
|
||||||
).select_related('event').annotate(pcnt=Count('invoices')).distinct()
|
).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
|
# 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
|
# 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