diff --git a/src/pretix/base/services/invoices.py b/src/pretix/base/services/invoices.py index de4416e727..f153654c3b 100644 --- a/src/pretix/base/services/invoices.py +++ b/src/pretix/base/services/invoices.py @@ -191,6 +191,10 @@ def generate_invoice(order: Order): ) invoice = build_invoice(invoice) invoice_pdf(invoice.pk) + + if order.status in (Order.STATUS_CANCELED, Order.STATUS_REFUNDED): + generate_cancellation(invoice) + return invoice diff --git a/src/pretix/control/templates/pretixcontrol/order/index.html b/src/pretix/control/templates/pretixcontrol/order/index.html index 0ac8f1e8ea..66e9adb2e4 100644 --- a/src/pretix/control/templates/pretixcontrol/order/index.html +++ b/src/pretix/control/templates/pretixcontrol/order/index.html @@ -131,7 +131,11 @@ action="{% url "control:event.order.reissueinvoice" event=request.event.slug organizer=request.event.organizer.slug code=order.code id=i.pk %}"> {% csrf_token %} {% endif %} diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index ed5dee2a2e..2281b927b0 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -366,8 +366,11 @@ class OrderInvoiceReissue(OrderView): if inv.canceled: messages.error(self.request, _('The invoice has already been canceled.')) else: - generate_cancellation(inv) - inv = generate_invoice(self.order) + c = generate_cancellation(inv) + if self.order.status not in (Order.STATUS_CANCELED, Order.STATUS_REFUNDED): + inv = generate_invoice(self.order) + else: + inv = c self.order.log_action('pretix.event.order.invoice.reissued', user=self.request.user, data={ 'invoice': inv.pk })