From 5e6b99120c38cd14a707c6d839a17630f5829fea Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 31 Jan 2025 19:27:23 +0100 Subject: [PATCH 1/2] Allow setting due amount according to current payments --- pretix_zugferd/invoice.py | 14 ++++++++++++++ tests/conftest.py | 2 +- tests/results/paid.xml | 3 ++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pretix_zugferd/invoice.py b/pretix_zugferd/invoice.py index 0b9e541..fe90e64 100644 --- a/pretix_zugferd/invoice.py +++ b/pretix_zugferd/invoice.py @@ -19,6 +19,7 @@ from drafthorse.models.tradelines import LineItem from drafthorse.pdf import attach_xml from pretix.base.invoice import ClassicInvoiceRenderer, Modern1Renderer +from pretix.base.models import Order from pretix.base.models.tax import EU_COUNTRIES from reportlab.lib.units import mm from reportlab.pdfgen.canvas import Canvas @@ -370,6 +371,19 @@ def _zugferd_generate_document(self, invoice): doc.trade.settlement.monetary_summation.tax_total = (taxtotal, cc) doc.trade.settlement.monetary_summation.grand_total = total doc.trade.settlement.monetary_summation.due_amount = total + + if not self.invoice.is_cancellation: + payment_refund_sum = self.invoice.order.payment_refund_sum + if payment_refund_sum and ( + self.invoice.event.settings.invoice_show_payments + or self.invoice.order.status == Order.STATUS_PAID + ): + doc.trade.settlement.monetary_summation.prepaid_total = ( + payment_refund_sum + ) + doc.trade.settlement.monetary_summation.due_amount = ( + total - payment_refund_sum + ) return doc def _on_first_page(self, canvas: Canvas, doc): diff --git a/tests/conftest.py b/tests/conftest.py index 788bbc6..accb9d3 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -87,7 +87,7 @@ def order(event, organizer, item): sales_channel=event.organizer.sales_channels.get(identifier="web"), datetime=datetime(2024, 12, 1, 10, 0, 0, tzinfo=UTC), expires=datetime(2024, 12, 10, 10, 0, 0, tzinfo=UTC), - total=Decimal("100.00"), + total=Decimal("23.00"), locale="en", ) OrderPosition.objects.create( diff --git a/tests/results/paid.xml b/tests/results/paid.xml index 26aa85b..6d8ce5f 100644 --- a/tests/results/paid.xml +++ b/tests/results/paid.xml @@ -139,7 +139,8 @@ Attendee: Peter 19.33 3.67 23.00 - 23.00 + 23.00 + 0.00 From 448121daef2f27218698a6862ede3d1f3d8861f6 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 6 Feb 2025 16:44:12 +0100 Subject: [PATCH 2/2] No negative amounts --- pretix_zugferd/invoice.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pretix_zugferd/invoice.py b/pretix_zugferd/invoice.py index fe90e64..369a54d 100644 --- a/pretix_zugferd/invoice.py +++ b/pretix_zugferd/invoice.py @@ -378,11 +378,11 @@ def _zugferd_generate_document(self, invoice): self.invoice.event.settings.invoice_show_payments or self.invoice.order.status == Order.STATUS_PAID ): - doc.trade.settlement.monetary_summation.prepaid_total = ( - payment_refund_sum + doc.trade.settlement.monetary_summation.prepaid_total = min( + payment_refund_sum, total ) - doc.trade.settlement.monetary_summation.due_amount = ( - total - payment_refund_sum + doc.trade.settlement.monetary_summation.due_amount = min( + total - payment_refund_sum, Decimal("0.00") ) return doc