From abeddd360eab0672b414a9355941540d8ef115e4 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 29 Oct 2021 12:09:09 +0200 Subject: [PATCH] Invoices: Change expected behaviour for switches in numbering scheme --- src/pretix/base/models/_transactions.py | 2 +- src/pretix/base/models/invoices.py | 2 +- src/tests/base/test_invoices.py | 18 ++++++++++++------ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/pretix/base/models/_transactions.py b/src/pretix/base/models/_transactions.py index cc780d83ae..341e9724c2 100644 --- a/src/pretix/base/models/_transactions.py +++ b/src/pretix/base/models/_transactions.py @@ -36,7 +36,7 @@ from django.db import transaction dirty_transactions = threading.local() logger = logging.getLogger(__name__) -fail_loudly = os.getenv('PRETIX_DIRTY_TRANSACTIONS_QUIET', 'false') not in ('true', 'True', 'on', '1') +fail_loudly = os.getenv('PRETIX_DIRTY_TRANSACTIONS_QUIET', 'false' if settings.DEBUG else 'true') not in ('true', 'True', 'on', '1') class DirtyTransactionsForOrderException(Exception): diff --git a/src/pretix/base/models/invoices.py b/src/pretix/base/models/invoices.py index 54cf70fd7f..3cae1cb9a6 100644 --- a/src/pretix/base/models/invoices.py +++ b/src/pretix/base/models/invoices.py @@ -237,7 +237,7 @@ class Invoice(models.Model): def _get_invoice_number_from_order(self): return '{order}-{count}'.format( order=self.order.code, - count=Invoice.objects.filter(event=self.event, order=self.order).count() + 1, + count=Invoice.objects.filter(event=self.event, prefix=self.prefix, invoice_no__startswith=f"{self.order.code}-", order=self.order).count() + 1, ) def save(self, *args, **kwargs): diff --git a/src/tests/base/test_invoices.py b/src/tests/base/test_invoices.py index 85da6c2e83..69a23bcf5d 100644 --- a/src/tests/base/test_invoices.py +++ b/src/tests/base/test_invoices.py @@ -447,8 +447,8 @@ def test_invoice_numbers(env): # expected behaviour for switching between numbering formats or dealing with gaps assert inv1.invoice_no == '00001' assert inv2.invoice_no == '00002' - assert inv3.invoice_no == '{}-3'.format(order.code) - assert inv4.invoice_no == '{}-4'.format(order.code) + assert inv3.invoice_no == '{}-1'.format(order.code) + assert inv4.invoice_no == '{}-2'.format(order.code) assert inv5.invoice_no == '00003' assert inv6.invoice_no == '00004' assert inv7.invoice_no == '00005' @@ -465,10 +465,10 @@ def test_invoice_numbers(env): # test Invoice.number, too assert inv1.number == '{}-00001'.format(event.slug.upper()) - assert inv3.number == '{}-{}-3'.format(event.slug.upper(), order.code) + assert inv3.number == '{}-{}-1'.format(event.slug.upper(), order.code) assert invt1.number == '{}-TEST-00001'.format(event.slug.upper()) - assert invt2.number == '{}-TEST-{}-2'.format(event.slug.upper(), testorder.code) + assert invt2.number == '{}-TEST-{}-1'.format(event.slug.upper(), testorder.code) assert invt3.number == '{}-TEST-00002'.format(event.slug.upper()) @@ -513,8 +513,8 @@ def test_invoice_number_prefixes(env): event.settings.set('invoice_numbers_consecutive', False) event2.settings.set('invoice_numbers_consecutive', False) - assert generate_invoice(order).number == 'shared_{}-6'.format(order.code) - assert generate_invoice(order2).number == 'shared_{}-6'.format(order2.code) + assert generate_invoice(order).number == 'shared_{}-1'.format(order.code) + assert generate_invoice(order2).number == 'shared_{}-1'.format(order2.code) event2.settings.set('invoice_numbers_prefix', 'inv_') event2.settings.set('invoice_numbers_prefix_cancellations', 'crd_') @@ -524,6 +524,12 @@ def test_invoice_number_prefixes(env): assert i.number == 'inv_0001' assert generate_cancellation(i).number == 'crd_0001' + event2.settings.set('invoice_numbers_consecutive', False) + i = generate_invoice(order2) + assert i.number == f'inv_{order2.code}-1' + assert generate_cancellation(i).number == f'crd_{order2.code}-1' + + event2.settings.set('invoice_numbers_consecutive', True) event2.settings.set('invoice_numbers_prefix', 'inv_%Y%m%d_') i = generate_invoice(order2) assert i.number == 'inv_%s_0001' % now().date().strftime('%Y%m%d')