+ {% for code_info in payment_qr_codes %}
+
+ {% endfor %}
+
+
+ {% trans "Scan the QR code with your banking app" %}
+
+
+ {% for code_info in payment_qr_codes %}
+ {% if code_info.id == "qrbill" %}
+
+ {% endif %}
+ {% endfor %}
+{% endif %}
\ No newline at end of file
diff --git a/src/tests/helpers/test_payment.py b/src/tests/helpers/test_payment.py
new file mode 100644
index 0000000000..82ab754d69
--- /dev/null
+++ b/src/tests/helpers/test_payment.py
@@ -0,0 +1,141 @@
+#
+# This file is part of pretix (Community Edition).
+#
+# Copyright (C) 2014-2020 Raphael Michel and contributors
+# Copyright (C) 2020-today pretix GmbH and contributors
+#
+# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
+# Public License as published by the Free Software Foundation in version 3 of the License.
+#
+# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
+# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
+# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
+# this file, see .
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
+# .
+#
+from datetime import timedelta
+from decimal import Decimal
+
+import pytest
+from django.utils.timezone import now
+
+from pretix.base.models import Event, Organizer
+from pretix.helpers.payment import generate_payment_qr_codes
+
+
+@pytest.fixture
+def env():
+ o = Organizer.objects.create(name='Verein für Testzwecke e.V.', slug='testverein')
+ event = Event.objects.create(
+ organizer=o, name='Testveranstaltung', slug='testveranst',
+ date_from=now() + timedelta(days=10),
+ live=True, is_public=False, currency='EUR',
+ )
+ event.settings.invoice_address_from = 'Verein für Testzwecke e.V.'
+ event.settings.invoice_address_from_zipcode = '1234'
+ event.settings.invoice_address_from_city = 'Testhausen'
+ event.settings.invoice_address_from_country = 'CH'
+
+ return o, event
+
+
+@pytest.mark.django_db
+def test_payment_qr_codes_euro(env):
+ o, event = env
+ codes = generate_payment_qr_codes(
+ event=event,
+ code='TESTVERANST-12345',
+ amount=Decimal('123.00'),
+ bank_details_sepa_bic='BYLADEM1MIL',
+ bank_details_sepa_iban='DE37796500000069799047',
+ bank_details_sepa_name='Verein für Testzwecke e.V.',
+ )
+ assert len(codes) == 2
+ assert codes[0]['label'] == 'EPC-QR'
+ assert codes[0]['qr_data'] == '''BCD
+002
+2
+SCT
+BYLADEM1MIL
+Verein fur Testzwecke e.V.
+DE37796500000069799047
+EUR123.00
+
+
+TESTVERANST-12345
+
+'''
+
+ assert codes[1]['label'] == 'BezahlCode'
+ assert codes[1]['qr_data'] == ('bank://singlepaymentsepa?name=Verein%20f%C3%BCr%20Testzwecke%20e.V.&iban=DE37796500000069799047'
+ '&bic=BYLADEM1MIL&amount=123%2C00&reason=TESTVERANST-12345¤cy=EUR')
+
+
+@pytest.mark.django_db
+def test_payment_qr_codes_swiss(env):
+ o, event = env
+ codes = generate_payment_qr_codes(
+ event=event,
+ code='TESTVERANST-12345',
+ amount=Decimal('123.00'),
+ bank_details_sepa_bic='TESTCHXXXXX',
+ bank_details_sepa_iban='CH6389144757654882127',
+ bank_details_sepa_name='Verein für Testzwecke e.V.',
+ )
+ assert codes[0]['label'] == 'QR-bill'
+ assert codes[0]['qr_data'] == "\r\n".join([
+ "SPC",
+ "0200",
+ "1",
+ "CH6389144757654882127",
+ "K",
+ "Verein fur Testzwecke e.V.",
+ "Verein fur Testzwecke e.V.",
+ "1234 Testhausen",
+ "",
+ "",
+ "CH",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "123.00",
+ "EUR",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "NON",
+ "",
+ "TESTVERANST-12345",
+ "EPD",
+ ])
+
+
+@pytest.mark.django_db
+def test_payment_qr_codes_spayd(env):
+ o, event = env
+ codes = generate_payment_qr_codes(
+ event=event,
+ code='TESTVERANST-12345',
+ amount=Decimal('123.00'),
+ bank_details_sepa_bic='TESTCZXXXXX',
+ bank_details_sepa_iban='CZ7450513769129174398769',
+ bank_details_sepa_name='Verein für Testzwecke e.V.',
+ )
+ assert len(codes) == 2
+ assert codes[0]['label'] == 'SPAYD'
+ assert codes[0]['qr_data'] == 'SPD*1.0*ACC:CZ7450513769129174398769*AM:123.00*CC:EUR*MSG:TESTVERANST-12345'
+ assert codes[1]['label'] == 'EPC-QR'