diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 5bd7647acb..ea1094ed75 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -1609,6 +1609,7 @@ class OrderChangeManager: override_tax_rate=new_rate) self._totaldiff += new_tax.gross - pos.price self._operations.append(self.PriceOperation(pos, new_tax, new_tax.gross - pos.price)) + self._invoice_dirty = True def cancel_fee(self, fee: OrderFee): self._totaldiff -= fee.value diff --git a/src/tests/base/test_orders.py b/src/tests/base/test_orders.py index c57da62fa6..f4c346accd 100644 --- a/src/tests/base/test_orders.py +++ b/src/tests/base/test_orders.py @@ -1735,6 +1735,20 @@ class OrderChangeManagerTests(TestCase): self.ocm.commit() assert self.order.invoices.count() == 3 + @classscope(attr='o') + def test_reissue_invoice_after_tax_change(self): + generate_invoice(self.order) + self.tr7.rate = Decimal('18.00') + self.tr7.save() + assert self.order.invoices.count() == 1 + self.ocm.recalculate_taxes(keep='gross') + print(self.ocm._operations) + self.ocm.commit() + self.order.refresh_from_db() + assert self.order.invoices.count() == 3 + new_inv = self.order.invoices.get(is_cancellation=False, refered__isnull=True) + assert new_inv.lines.first().tax_rate == Decimal('18.00') + @classscope(attr='o') def test_no_new_invoice_for_free_order(self): generate_invoice(self.order)