Added invoice addresses

This commit is contained in:
Raphael Michel
2016-02-22 13:49:15 +01:00
parent f86fe99acb
commit 14e5134890
16 changed files with 763 additions and 276 deletions

View File

@@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-02-22 11:17
from __future__ import unicode_literals
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0007_auto_20160211_1710'),
]
operations = [
migrations.CreateModel(
name='InvoiceAddress',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('last_modified', models.DateTimeField(auto_now=True)),
('company', models.CharField(blank=True, max_length=255, verbose_name='Company name')),
('name', models.CharField(blank=True, max_length=255, verbose_name='Name')),
('street', models.TextField(verbose_name='Address')),
('zipcode', models.CharField(max_length=30, verbose_name='ZIP code')),
('city', models.CharField(max_length=255, verbose_name='City')),
('country', models.CharField(max_length=255, verbose_name='Country')),
('phone', models.CharField(blank=True, max_length=255, verbose_name='Phone number')),
('vat_id', models.CharField(blank=True, max_length=255, verbose_name='VAT ID')),
('order', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pretixbase.Order')),
],
),
]

View File

@@ -3,6 +3,7 @@ import string
from datetime import datetime
from decimal import Decimal
from django import forms
from django.db import models
from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _
@@ -461,3 +462,16 @@ class CartPosition(AbstractPosition):
if not self.tax_rate:
return Decimal('0.00')
return round_decimal(self.price * (1 - 100 / (100 + self.item.tax_rate)))
class InvoiceAddress(models.Model):
last_modified = models.DateTimeField(auto_now=True)
order = models.OneToOneField(Order, null=True, blank=True, related_name='invoice_address')
company = models.CharField(max_length=255, blank=True, verbose_name=_('Company name'))
name = models.CharField(max_length=255, verbose_name=_('Name'), blank=True)
street = models.TextField(verbose_name=_('Address'), blank=False)
zipcode = models.CharField(max_length=30, verbose_name=_('ZIP code'), blank=False)
city = models.CharField(max_length=255, verbose_name=_('City'), blank=False)
country = models.CharField(max_length=255, verbose_name=_('Country'), blank=False)
phone = models.CharField(max_length=255, blank=True, verbose_name=_('Phone number'))
vat_id = models.CharField(max_length=255, blank=True, verbose_name=_('VAT ID'))

View File

@@ -10,6 +10,7 @@ from pretix.base.i18n import LazyDate, LazyNumber
from pretix.base.models import (
CartPosition, Event, EventLock, Order, OrderPosition, Quota, User,
)
from pretix.base.models.orders import InvoiceAddress
from pretix.base.payment import BasePaymentProvider
from pretix.base.services.mail import mail
from pretix.base.signals import (
@@ -216,7 +217,7 @@ def _create_order(event: Event, email: str, positions: List[CartPosition], dt: d
def _perform_order(event: str, payment_provider: str, position_ids: List[str],
email: str, locale: str):
email: str, locale: str, address: int):
event = Event.objects.get(id=event)
responses = register_payment_providers.send(event)
pprov = None
@@ -237,6 +238,18 @@ def _perform_order(event: str, payment_provider: str, position_ids: List[str],
order = _create_order(event, email, positions, dt, pprov,
locale=locale)
if address is not None:
try:
addr = InvoiceAddress.objects.get(
pk=address
)
if addr.order is not None:
addr.pk = None
addr.order = order
addr.save()
except InvoiceAddress.DoesNotExist:
pass
mail(
order.email, _('Your order: %(code)s') % {'code': order.code},
event.settings.mail_text_order_placed,
@@ -257,9 +270,9 @@ def _perform_order(event: str, payment_provider: str, position_ids: List[str],
def perform_order(event: str, payment_provider: str, positions: List[str],
email: str=None, locale: str=None):
email: str=None, locale: str=None, address: int=None):
try:
return _perform_order(event, payment_provider, positions, email, locale)
return _perform_order(event, payment_provider, positions, email, locale, address)
except EventLock.LockTimeoutException:
# Is raised when there are too many threads asking for event locks and we were
# unable to get one
@@ -271,9 +284,9 @@ if settings.HAS_CELERY:
@app.task(bind=True, max_retries=5, default_retry_delay=2)
def perform_order_task(self, event: str, payment_provider: str, positions: List[str],
email: str=None, locale: str=None):
email: str=None, locale: str=None, address: int=None):
try:
return _perform_order(event, payment_provider, positions, email, locale)
return _perform_order(event, payment_provider, positions, email, locale, address)
except EventLock.LockTimeoutException:
self.retry(exc=OrderError(error_messages['busy']))

View File

@@ -25,6 +25,18 @@ DEFAULTS = {
'default': 'False',
'type': bool
},
'invoice_address_asked': {
'default': 'True',
'type': bool,
},
'invoice_address_required': {
'default': 'False',
'type': bool,
},
'invoice_address_vatid': {
'default': 'False',
'type': bool,
},
'reservation_time': {
'default': '30',
'type': int

View File

@@ -130,6 +130,19 @@ class EventSettingsForm(SettingsForm):
help_text=_("Require customers to fill in the names of all attendees."),
required=False
)
invoice_address_asked = forms.BooleanField(
label=_("Ask for invoice address"),
required=False
)
invoice_address_required = forms.BooleanField(
label=_("Require invoice address"),
required=False
)
invoice_address_vatid = forms.BooleanField(
label=_("Ask for VAT ID"),
help_text=_("Does only work if an invoice address is asked for. VAT ID is not required."),
required=False
)
max_items_per_order = forms.IntegerField(
min_value=1,
label=_("Maximum number of items per order")

View File

@@ -41,6 +41,9 @@
{% bootstrap_field sform.max_items_per_order layout="horizontal" %}
{% bootstrap_field sform.attendee_names_asked layout="horizontal" %}
{% bootstrap_field sform.attendee_names_required layout="horizontal" %}
{% bootstrap_field sform.invoice_address_asked layout="horizontal" %}
{% bootstrap_field sform.invoice_address_required layout="horizontal" %}
{% bootstrap_field sform.invoice_address_vatid layout="horizontal" %}
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -176,4 +176,33 @@
{% endif %}
</div>
</div>
{% if request.event.settings.invoice_address_asked %}
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">
{% trans "Invoice information" %}
</h3>
</div>
<div class="panel-body">
<dl class="dl-horizontal">
<dt>{% trans "Company" %}</dt>
<dd>{{ order.invoice_address.company }}</dd>
<dt>{% trans "Name" %}</dt>
<dd>{{ order.invoice_address.name }}</dd>
<dt>{% trans "Address" %}</dt>
<dd>{{ order.invoice_address.street|linebreaksbr }}</dd>
<dt>{% trans "ZIP code and city" %}</dt>
<dd>{{ order.invoice_address.zipcode }} {{ addr.city }}</dd>
<dt>{% trans "Country" %}</dt>
<dd>{{ order.invoice_address.country }}</dd>
<dt>{% trans "Phone" %}</dt>
<dd>{{ order.invoice_address.phone }}</dd>
{% if request.event.settings.invoice_address_vatid %}
<dt>{% trans "VAT ID" %}</dt>
<dd>{{ order.invoice_address.vat_id }}</dd>
{% endif %}
</dl>
</div>
</div>
{% endif %}
{% endblock %}

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-02-20 14:56+0000\n"
"PO-Revision-Date: 2016-02-20 15:57+0100\n"
"POT-Creation-Date: 2016-02-22 12:43+0000\n"
"PO-Revision-Date: 2016-02-22 13:45+0100\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: Raphael Michel <michel@rami.io>\n"
"Language: de\n"
@@ -27,13 +27,13 @@ msgid "enabled"
msgstr "aktiviert"
#: pretix/base/forms/auth.py:13 pretix/base/forms/auth.py:140
#: pretix/base/models/auth.py:63 pretix/base/models/orders.py:94
#: pretix/presale/forms/checkout.py:8
#: pretix/base/models/auth.py:63 pretix/base/models/orders.py:95
#: pretix/presale/forms/checkout.py:10
msgid "E-mail"
msgstr "E-Mail"
#: pretix/base/forms/auth.py:14 pretix/base/forms/auth.py:77
#: pretix/base/forms/auth.py:113 pretix/control/forms/event.py:239
#: pretix/base/forms/auth.py:113 pretix/control/forms/event.py:252
msgid "Password"
msgstr "Passwort"
@@ -149,7 +149,10 @@ msgid "%(family)s, %(given)s"
msgstr "%(family)s, %(given)s"
#: pretix/base/models/event.py:53 pretix/base/models/items.py:417
#: pretix/base/models/organizer.py:25
#: pretix/base/models/orders.py:471 pretix/base/models/organizer.py:25
#: pretix/control/templates/pretixcontrol/order/index.html:190
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:77
#: pretix/presale/templates/pretixpresale/event/order.html:113
#: pretix/presale/templates/pretixpresale/organizers/index.html:21
msgid "Name"
msgstr "Name"
@@ -220,8 +223,8 @@ msgid "Plugins"
msgstr "Erweiterungen"
#: pretix/base/models/event.py:96 pretix/base/models/items.py:109
#: pretix/base/models/items.py:413 pretix/base/models/orders.py:89
#: pretix/base/models/orders.py:432 pretix/base/models/vouchers.py:25
#: pretix/base/models/items.py:413 pretix/base/models/orders.py:90
#: pretix/base/models/orders.py:433 pretix/base/models/vouchers.py:25
msgid "Event"
msgstr "Veranstaltung"
@@ -438,7 +441,7 @@ msgstr "Gesamtanzahl"
msgid "Leave empty for an unlimited number of tickets."
msgstr "Leer lassen für unbegrenzt viele Tickets."
#: pretix/base/models/items.py:426 pretix/base/models/orders.py:293
#: pretix/base/models/items.py:426 pretix/base/models/orders.py:294
msgid "Item"
msgstr "Produkt"
@@ -460,152 +463,189 @@ msgstr "Kontingent"
msgid "Quotas"
msgstr "Kontingente"
#: pretix/base/models/orders.py:71
#: pretix/base/models/orders.py:72
msgid "pending"
msgstr "ausstehend"
#: pretix/base/models/orders.py:72
#: pretix/base/models/orders.py:73
msgid "paid"
msgstr "bezahlt"
#: pretix/base/models/orders.py:73
#: pretix/base/models/orders.py:74
msgid "expired"
msgstr "abgelaufen"
#: pretix/base/models/orders.py:74
#: pretix/base/models/orders.py:75
msgid "cancelled"
msgstr "storniert"
#: pretix/base/models/orders.py:75
#: pretix/base/models/orders.py:76
msgid "refunded"
msgstr "erstattet"
#: pretix/base/models/orders.py:80
#: pretix/base/models/orders.py:81
#: pretix/control/templates/pretixcontrol/order/index.html:58
#: pretix/control/templates/pretixcontrol/orders/index.html:10
#: pretix/control/templates/pretixcontrol/orders/index.html:42
msgid "Order code"
msgstr "Bestellnummer"
#: pretix/base/models/orders.py:85
#: pretix/base/models/orders.py:86
#: pretix/control/templates/pretixcontrol/orders/index.html:46
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_confirm.html:18
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:31
msgid "Status"
msgstr "Status"
#: pretix/base/models/orders.py:98
#: pretix/base/models/orders.py:99
msgid "Locale"
msgstr "Sprache"
#: pretix/base/models/orders.py:102 pretix/base/models/orders.py:439
#: pretix/base/models/orders.py:103 pretix/base/models/orders.py:440
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:17
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_confirm.html:13
#: pretix/presale/templates/pretixpresale/organizers/index.html:22
msgid "Date"
msgstr "Datum"
#: pretix/base/models/orders.py:105 pretix/base/models/orders.py:443
#: pretix/base/models/orders.py:106 pretix/base/models/orders.py:444
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form.html:23
msgid "Expiration date"
msgstr "Ablaufdatum"
#: pretix/base/models/orders.py:108
#: pretix/base/models/orders.py:109
#: pretix/control/templates/pretixcontrol/order/index.html:63
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/control.html:11
msgid "Payment date"
msgstr "Zahlungsdatum"
#: pretix/base/models/orders.py:114
#: pretix/base/models/orders.py:115
msgid "Payment provider"
msgstr "Zahlungsmethode"
#: pretix/base/models/orders.py:118
#: pretix/base/models/orders.py:119
#: pretix/control/templates/pretixcontrol/order/index.html:140
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:75
msgid "Payment method fee"
msgstr "Gebühr für gewählte Zahlungsmethode"
#: pretix/base/models/orders.py:121
#: pretix/base/models/orders.py:122
#: pretix/control/templates/pretixcontrol/order/index.html:162
msgid "Payment information"
msgstr "Zahlungsinformationen"
#: pretix/base/models/orders.py:125
#: pretix/base/models/orders.py:126
msgid "Payment state was manually modified"
msgstr "Der Bestellungsstatus wurde manuell verändert"
#: pretix/base/models/orders.py:130
#: pretix/base/models/orders.py:131
msgid "Total amount"
msgstr "Gesamtbetrag"
#: pretix/base/models/orders.py:134 pretix/base/models/orders.py:361
#: pretix/base/models/orders.py:135 pretix/base/models/orders.py:362
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_confirm.html:17
msgid "Order"
msgstr "Bestellung"
#: pretix/base/models/orders.py:135
#: pretix/base/models/orders.py:136
#: pretix/control/templates/pretixcontrol/event/base.html:101
#: pretix/control/templates/pretixcontrol/orders/index.html:3
#: pretix/control/templates/pretixcontrol/orders/index.html:5
msgid "Orders"
msgstr "Bestellungen"
#: pretix/base/models/orders.py:184
#: pretix/base/models/orders.py:185
msgid "The payment is too late to be accepted."
msgstr "Die Zahlung kommt zu spät, um akzeptiert werden zu können."
#: pretix/base/models/orders.py:199
#: pretix/base/models/orders.py:200
msgid "Some of the ordered products were no longer available."
msgstr "Einige der ausgewählten Produkte sind nicht mehr verfügbar."
#: pretix/base/models/orders.py:299
#: pretix/base/models/orders.py:300
msgid "Variation"
msgstr "Variante"
#: pretix/base/models/orders.py:304
#: pretix/base/models/orders.py:305
msgid "Price"
msgstr "Preis"
#: pretix/base/models/orders.py:308
#: pretix/base/models/orders.py:309
#: pretix/control/templates/pretixcontrol/order/index.html:106
#: pretix/presale/forms/checkout.py:36
#: pretix/presale/forms/checkout.py:65
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:16
msgid "Attendee name"
msgstr "Name des Teilnehmers"
#: pretix/base/models/orders.py:310
#: pretix/base/models/orders.py:311
msgid "Empty, if this product is not an admission ticket"
msgstr "Leer, wenn dies kein Eintrittsticket ist"
#: pretix/base/models/orders.py:367
#: pretix/base/models/orders.py:368
msgid "Tax rate"
msgstr "Steuersatz"
#: pretix/base/models/orders.py:371
#: pretix/base/models/orders.py:372
msgid "Tax value"
msgstr "Steuer"
#: pretix/base/models/orders.py:375
#: pretix/base/models/orders.py:376
msgid "Order position"
msgstr "Bestelltes Produkt"
#: pretix/base/models/orders.py:376
#: pretix/base/models/orders.py:377
msgid "Order positions"
msgstr "Bestellzeile"
#: pretix/base/models/orders.py:436
#: pretix/base/models/orders.py:437
msgid "Cart ID (e.g. session key)"
msgstr "Warenkorb-ID (z.B. Session-ID)"
#: pretix/base/models/orders.py:447
#: pretix/base/models/orders.py:448
msgid "Cart position"
msgstr "Produkt im Warenkorb"
#: pretix/base/models/orders.py:448
#: pretix/base/models/orders.py:449
msgid "Cart positions"
msgstr "Produkte im Warenkorb"
#: pretix/base/models/orders.py:470
msgid "Company name"
msgstr "Firmenname"
#: pretix/base/models/orders.py:472
#: pretix/control/templates/pretixcontrol/order/index.html:192
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:79
#: pretix/presale/templates/pretixpresale/event/order.html:115
msgid "Address"
msgstr "Adresse"
#: pretix/base/models/orders.py:473
msgid "ZIP code"
msgstr "Postleitzahl"
#: pretix/base/models/orders.py:474
msgid "City"
msgstr "Ort"
#: pretix/base/models/orders.py:475
#: pretix/control/templates/pretixcontrol/order/index.html:196
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:83
#: pretix/presale/templates/pretixpresale/event/order.html:119
msgid "Country"
msgstr "Land"
#: pretix/base/models/orders.py:476
msgid "Phone number"
msgstr "Telefonnummer"
#: pretix/base/models/orders.py:477
#: pretix/control/templates/pretixcontrol/order/index.html:201
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:88
#: pretix/presale/templates/pretixpresale/event/order.html:124
msgid "VAT ID"
msgstr "USt-ID"
#: pretix/base/models/organizer.py:43
#: pretix/control/templates/pretixcontrol/events/index.html:20
#: pretix/control/templates/pretixcontrol/organizers/detail.html:4
@@ -753,7 +793,7 @@ msgstr "Kostenlos"
msgid "The order has been marked as refunded."
msgstr "Die Bestellung wurde als zurückerstattet markiert."
#: pretix/base/services/cart.py:20 pretix/base/services/orders.py:29
#: pretix/base/services/cart.py:20 pretix/base/services/orders.py:30
msgid ""
"We were not able to process your request completely as the server was too "
"busy. Please try again."
@@ -769,7 +809,7 @@ msgstr "Sie haben keine Produkte ausgewählt."
msgid "You selected a product which is not available for sale."
msgstr "Sie haben ein Produkt ausgewählt, das nicht zum Verkauf steht."
#: pretix/base/services/cart.py:24 pretix/base/services/orders.py:21
#: pretix/base/services/cart.py:24 pretix/base/services/orders.py:22
msgid ""
"Some of the products you selected were no longer available. Please see below "
"for details."
@@ -777,7 +817,7 @@ msgstr ""
"Einige der ausgewählten Produkte waren zwischenzeitlich nicht mehr "
"verfügbar, bitte überprüfen Sie Ihren Warenkorb."
#: pretix/base/services/cart.py:26 pretix/base/services/orders.py:23
#: pretix/base/services/cart.py:26 pretix/base/services/orders.py:24
msgid ""
"Some of the products you selected were no longer available in the quantity "
"you selected. Please see below for details."
@@ -785,7 +825,7 @@ msgstr ""
"Einige der ausgewählten Produkte waren zwischenzeitlich nicht mehr in der "
"gewünschten Anzahl verfügbar, bitte überprüfen Sie Ihren Warenkorb."
#: pretix/base/services/cart.py:28 pretix/base/services/orders.py:27
#: pretix/base/services/cart.py:28 pretix/base/services/orders.py:28
#, python-format
msgid "You cannot select more than %s items per order"
msgstr "Sie können nicht mehr als %s Produkte pro Bestellung auswählen"
@@ -819,7 +859,7 @@ msgstr ""
"Sie erhalten diese E-Mail, weil Sie eine Bestellung für die Veranstaltung %s "
"getätigt haben."
#: pretix/base/services/orders.py:25
#: pretix/base/services/orders.py:26
msgid ""
"The price of some of the items in your cart has changed in the meantime. "
"Please see below for details."
@@ -827,26 +867,26 @@ msgstr ""
"Der Preis einiger Produkte in Ihrem Warenkorb hat sich zwischenzeitlich "
"geändert."
#: pretix/base/services/orders.py:28
#: pretix/base/services/orders.py:29
msgid "An internal error occured, please try again."
msgstr "Ein interner Fehler ist aufgetreten, bitte erneut versuchen."
#: pretix/base/services/orders.py:31
#: pretix/base/services/orders.py:32
msgid "A voucher you tried to use already has been used."
msgstr ""
"Ein Gutscheincode, den Sie verwenden wollten, wurde zwischenzeitlich bereits "
"eingelöst."
#: pretix/base/services/orders.py:32
#: pretix/base/services/orders.py:33
msgid "A voucher you tried to use has expired."
msgstr "Ein Gutscheincode, den Sie verwenden wollten, ist abgelaufen."
#: pretix/base/services/orders.py:76
#: pretix/base/services/orders.py:77
#, python-format
msgid "Payment received for your order: %(code)s"
msgstr "Zahlung erhalten für die Bestellung: %(code)s"
#: pretix/base/services/orders.py:241 pretix/control/views/orders.py:208
#: pretix/base/services/orders.py:254 pretix/control/views/orders.py:208
#: pretix/presale/templates/pretixpresale/event/order.html:21
#, python-format
msgid "Your order: %(code)s"
@@ -860,7 +900,7 @@ msgstr "Unkategorisiert"
msgid "Payment method fees"
msgstr "Zahlungsgebühren"
#: pretix/base/settings.py:102
#: pretix/base/settings.py:114
#, python-brace-format
msgid ""
"Hello,\n"
@@ -886,7 +926,7 @@ msgstr ""
"Viele Grüße,\n"
"Das {event} Team"
#: pretix/base/settings.py:115
#: pretix/base/settings.py:127
#, python-brace-format
msgid ""
"Hello,\n"
@@ -915,7 +955,7 @@ msgstr ""
"Viele Grüße,\n"
"Das {event}s Team"
#: pretix/base/settings.py:130
#: pretix/base/settings.py:142
#, python-brace-format
msgid ""
"Hello,\n"
@@ -1194,56 +1234,75 @@ msgstr "Namen des Teilnehmer erfordern"
msgid "Require customers to fill in the names of all attendees."
msgstr "Erfordere die Eingabe aller Teilnehmer-Namen."
#: pretix/control/forms/event.py:135
#: pretix/control/forms/event.py:134
msgid "Ask for invoice address"
msgstr "Rechnungsadresse erfragen"
#: pretix/control/forms/event.py:138
msgid "Require invoice address"
msgstr "Rechnungsadresse erforderlich"
#: pretix/control/forms/event.py:142
msgid "Ask for VAT ID"
msgstr "Nach USt-ID fragen"
#: pretix/control/forms/event.py:143
msgid ""
"Does only work if an invoice address is asked for. VAT ID is not required."
msgstr ""
"Funktioniert nur, wenn nach einer Rechnungsadresse gefragt wird. Die USt-ID-"
"Eingabe ist freiwillig."
#: pretix/control/forms/event.py:148
msgid "Maximum number of items per order"
msgstr "Maximale Anzahl Produkte pro Bestellung"
#: pretix/control/forms/event.py:139
#: pretix/control/forms/event.py:152
msgid "Reservation period"
msgstr "Reservierungszeitraum"
#: pretix/control/forms/event.py:140
#: pretix/control/forms/event.py:153
msgid ""
"The number of minutes the items in a user's card are reserved for this user."
msgstr ""
"Die Dauer in Minuten, die Produkte im Warenkorb eines Benutzers reserviert "
"werden."
#: pretix/control/forms/event.py:143
#: pretix/control/forms/event.py:156
msgid "Imprint URL"
msgstr "Impressum (URL)"
#: pretix/control/forms/event.py:147
#: pretix/control/forms/event.py:160
msgid "Contact address"
msgstr "Kontakt-E-Mail"
#: pretix/control/forms/event.py:149
#: pretix/control/forms/event.py:162
msgid "Public email address for contacting the organizer"
msgstr "Öffentliche E-Mail-Adresse zur Kontaktierung des Veranstalters"
#: pretix/control/forms/event.py:156
#: pretix/control/forms/event.py:169
msgid ""
"Your default locale must also be enebled for your event (see box above)."
msgstr ""
"Die Standardsprache muss eine der aktivierten Sprachen sein (siehe weiter "
"oben)."
#: pretix/control/forms/event.py:160
#: pretix/control/forms/event.py:173
msgid ""
"You cannot require specifying attendee names if you do not ask for them."
msgstr ""
"Sie können die Angabe von Teilnehmernamen nur erfordern, wenn Sie auch nach "
"Namen fragen."
#: pretix/control/forms/event.py:189 pretix/control/forms/event.py:283
#: pretix/control/forms/event.py:202 pretix/control/forms/event.py:296
msgid "This field is required."
msgstr "Dieses Feld ist erforderlich."
#: pretix/control/forms/event.py:194
#: pretix/control/forms/event.py:207
msgid "Subject prefix"
msgstr "Betreffs-Prefix"
#: pretix/control/forms/event.py:195
#: pretix/control/forms/event.py:208
msgid ""
"This will be prepended to the subject of all outgoing emails. This could be "
"a short form of your event name."
@@ -1251,19 +1310,19 @@ msgstr ""
"Dies wird jedem E-Mail-Betreff vorangestellt und könnten z.B. eine Kurzform "
"Ihres Veranstaltungsnamens enthalten."
#: pretix/control/forms/event.py:200
#: pretix/control/forms/event.py:213
msgid "Sender address"
msgstr "Absender-Adresse"
#: pretix/control/forms/event.py:201
#: pretix/control/forms/event.py:214
msgid "Sender address for outgoing e-mails"
msgstr "Absender-Adresse für ausgehende E-Mails"
#: pretix/control/forms/event.py:204
#: pretix/control/forms/event.py:217
msgid "Placed order"
msgstr "Getätigte Bestellung"
#: pretix/control/forms/event.py:207
#: pretix/control/forms/event.py:220
#, python-brace-format
msgid ""
"Available placeholders: {event}, {total}, {currency}, {date}, {paymentinfo}, "
@@ -1272,25 +1331,25 @@ msgstr ""
"Verfügbare Platzhalter: {event}, {total}, {currency}, {date}, {paymentinfo}, "
"{url}"
#: pretix/control/forms/event.py:210
#: pretix/control/forms/event.py:223
msgid "Paid order"
msgstr "Bezahlt Bestellung"
#: pretix/control/forms/event.py:213 pretix/control/forms/event.py:219
#: pretix/control/forms/event.py:226 pretix/control/forms/event.py:232
#, python-brace-format
msgid "Available placeholders: {event}, {url}"
msgstr "Verfügbare Platzhalter: {event}, {url}"
#: pretix/control/forms/event.py:216
#: pretix/control/forms/event.py:229
#: pretix/control/templates/pretixcontrol/order/index.html:76
msgid "Resend link"
msgstr "Link erneut senden"
#: pretix/control/forms/event.py:222
#: pretix/control/forms/event.py:235
msgid "Use custom SMTP server"
msgstr "Eigenen SMTP-Server verwenden"
#: pretix/control/forms/event.py:223
#: pretix/control/forms/event.py:236
msgid ""
"All mail related to your event will be sent over the smtp server specified "
"by you."
@@ -1298,49 +1357,49 @@ msgstr ""
"Alle E-Mails bezüglich Ihrer Veranstaltung werden über den von Ihnen "
"angegebenen SMTP-Server versendet."
#: pretix/control/forms/event.py:227
#: pretix/control/forms/event.py:240
msgid "Hostname"
msgstr "Hostname"
#: pretix/control/forms/event.py:231
#: pretix/control/forms/event.py:244
msgid "Port"
msgstr "Port"
#: pretix/control/forms/event.py:235
#: pretix/control/forms/event.py:248
msgid "Username"
msgstr "Benutzername"
#: pretix/control/forms/event.py:244
#: pretix/control/forms/event.py:257
msgid "Use STARTTLS"
msgstr "STARTTLS verwenden"
#: pretix/control/forms/event.py:245
#: pretix/control/forms/event.py:258
msgid "Commonly enabled on port 587."
msgstr "Meistens auf Port 587 verfügbar."
#: pretix/control/forms/event.py:249
#: pretix/control/forms/event.py:262
msgid "Use SSL"
msgstr "SSL verwenden"
#: pretix/control/forms/event.py:250
#: pretix/control/forms/event.py:263
msgid "Commonly enabled on port 465."
msgstr "Meistens auf Port 465 verfügbar."
#: pretix/control/forms/event.py:257
#: pretix/control/forms/event.py:270
msgid "Use feature"
msgstr "Funktion benutzen"
#: pretix/control/forms/event.py:258
#: pretix/control/forms/event.py:271
msgid "Use pretix to generate tickets for the user to download and print out."
msgstr ""
"Wenn diese Funktion aktiviert ist, generiert pretix Tickets, die der "
"Benutzer herunterladen und ausdrucken kann."
#: pretix/control/forms/event.py:262
#: pretix/control/forms/event.py:275
msgid "Download date"
msgstr "Download-Datum"
#: pretix/control/forms/event.py:263
#: pretix/control/forms/event.py:276
msgid "Ticket download will be offered after this date."
msgstr "Der Ticket-Download wird zu diesem Zeitpunkt freigeschaltet."
@@ -1414,7 +1473,7 @@ msgstr "Neues Passwort setzen"
#: pretix/control/templates/pretixcontrol/event/mail.html:30
#: pretix/control/templates/pretixcontrol/event/payment.html:31
#: pretix/control/templates/pretixcontrol/event/permissions.html:56
#: pretix/control/templates/pretixcontrol/event/settings.html:47
#: pretix/control/templates/pretixcontrol/event/settings.html:50
#: pretix/control/templates/pretixcontrol/event/tickets.html:36
#: pretix/control/templates/pretixcontrol/events/create.html:30
#: pretix/control/templates/pretixcontrol/item/index.html:28
@@ -1492,9 +1551,9 @@ msgid "General"
msgstr "Allgemeines"
#: pretix/control/templates/pretixcontrol/event/base.html:30
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:52
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:51
#: pretix/presale/templates/pretixpresale/event/order.html:31
#: pretix/presale/templates/pretixpresale/event/order.html:111
#: pretix/presale/templates/pretixpresale/event/order.html:148
msgid "Payment"
msgstr "Zahlung"
@@ -1959,7 +2018,7 @@ msgstr "Verbleibende Kapazität"
#: pretix/control/templates/pretixcontrol/order/cancel.html:4
#: pretix/control/templates/pretixcontrol/order/cancel.html:8
#: pretix/control/templates/pretixcontrol/order/index.html:28
#: pretix/presale/templates/pretixpresale/event/order.html:101
#: pretix/presale/templates/pretixpresale/event/order.html:138
#: pretix/presale/templates/pretixpresale/event/order_cancel.html:4
msgid "Cancel order"
msgstr "Stornieren"
@@ -2063,6 +2122,32 @@ msgstr "Der Status dieser Bestellung wurde manuell verändert."
msgid "The payment has to be completed before %(date)s."
msgstr "Die Zahlung muss bis zum %(date)s abgeschlossen sein."
#: pretix/control/templates/pretixcontrol/order/index.html:183
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:70
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:30
#: pretix/presale/templates/pretixpresale/event/order.html:106
#: pretix/presale/templates/pretixpresale/event/order_modify.html:19
msgid "Invoice information"
msgstr "Rechnungsinformationen"
#: pretix/control/templates/pretixcontrol/order/index.html:188
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:75
#: pretix/presale/templates/pretixpresale/event/order.html:111
msgid "Company"
msgstr "Firma"
#: pretix/control/templates/pretixcontrol/order/index.html:194
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:81
#: pretix/presale/templates/pretixpresale/event/order.html:117
msgid "ZIP code and city"
msgstr "PLZ und Ort"
#: pretix/control/templates/pretixcontrol/order/index.html:198
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:85
#: pretix/presale/templates/pretixpresale/event/order.html:121
msgid "Phone"
msgstr "Telefon"
#: pretix/control/templates/pretixcontrol/order/refund.html:10
msgid "Do you really want to refund this order? You cannot revert this action."
msgstr ""
@@ -2374,11 +2459,11 @@ msgstr "Die Bestellung wurde storniert."
msgid "The order has been marked as not paid."
msgstr "Die Bestellung wurde als unbezahlt markiert."
#: pretix/control/views/orders.py:236 pretix/presale/views/order.py:279
#: pretix/control/views/orders.py:236 pretix/presale/views/order.py:296
msgid "You requested an invalid ticket output type."
msgstr "Sie haben einen ungültigen Ausgabetyp gewählt."
#: pretix/control/views/orders.py:239 pretix/presale/views/order.py:284
#: pretix/control/views/orders.py:239 pretix/presale/views/order.py:301
msgid "Order is not paid."
msgstr "Bestellung ist nicht bezahlt."
@@ -2557,7 +2642,7 @@ msgstr ""
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:11
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:43
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:56
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:72
#: pretix/presale/templates/pretixpresale/event/order_pay.html:26
msgid "Continue"
msgstr "Fortfahren"
@@ -3274,28 +3359,36 @@ msgstr "Veranstaltungsname-y-Position (mm)"
msgid "Event name size (mm)"
msgstr "Veranstaltungsname-Größe (mm)"
#: pretix/presale/checkoutflow.py:147 pretix/presale/views/order.py:217
#: pretix/presale/checkoutflow.py:166 pretix/presale/views/order.py:232
msgid ""
"We had difficulties processing your input. Please review the errors below."
msgstr "Wir hatten Schwierigkeiten, Ihre Eingabe zu verarbeiten."
#: pretix/presale/checkoutflow.py:158 pretix/presale/checkoutflow.py:163
#: pretix/presale/checkoutflow.py:181 pretix/presale/checkoutflow.py:186
msgid "Please enter a valid e-mail address."
msgstr "Bitte geben Sie eine gültige E-Mail-Adresse ein."
#: pretix/presale/checkoutflow.py:173 pretix/presale/checkoutflow.py:178
#: pretix/presale/checkoutflow.py:196 pretix/presale/checkoutflow.py:201
msgid "Please fill in answers to all required questions."
msgstr "Bitte füllen Sie Antworten zu allen benötigten Fragen ein."
#: pretix/presale/checkoutflow.py:229
#: pretix/presale/checkoutflow.py:253
msgid "Please select a payment method."
msgstr "Bitte wählen Sie eine Zahlungsmethode aus."
#: pretix/presale/checkoutflow.py:250 pretix/presale/checkoutflow.py:256
#: pretix/presale/views/order.py:154 pretix/presale/views/order.py:184
#: pretix/presale/checkoutflow.py:274 pretix/presale/checkoutflow.py:280
#: pretix/presale/views/order.py:156 pretix/presale/views/order.py:186
msgid "The payment information you entered was incomplete."
msgstr "Die eingegebenen Zahlungsinformationen sind unvollständig."
#: pretix/presale/forms/checkout.py:19
msgid "Street and Number"
msgstr "Straße und Hausnummer"
#: pretix/presale/forms/checkout.py:37
msgid "You need to provide either a company name or your name."
msgstr "Sie müssen entweder einen Firmennamen oder Ihren Namen eingeben."
#: pretix/presale/middleware.py:25
msgid "The selected event was not found."
msgstr "Die ausgewählte Veranstaltung wurde nicht gefunden."
@@ -3332,8 +3425,9 @@ msgstr ""
"Bestellung."
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:17
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:47
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:65
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:46
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:66
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:102
msgid "Modify"
msgstr "Bearbeiten"
@@ -3355,22 +3449,22 @@ msgstr ""
msgid "The items in your cart are no longer reserved for you."
msgstr "Die Produkte in Ihrem Warenkorb sind nicht mehr für Sie reserviert."
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:69
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:106
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:15
msgid "Contact information"
msgstr "Kontaktinformationen"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:74
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:111
msgid "E-mail address"
msgstr "E-Mail-Adresse"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:84
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:122
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:38
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:51
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:67
msgid "Go back"
msgstr "Zurück"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:89
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:127
msgid "Place binding order"
msgstr "Zahlungspflichtig bestellen"
@@ -3489,6 +3583,7 @@ msgid "You will be able to download your tickets here on %(date)s."
msgstr "Sie können Ihre Tickets hier ab %(date)s herunterladen."
#: pretix/presale/templates/pretixpresale/event/order.html:82
#: pretix/presale/templates/pretixpresale/event/order.html:101
msgid "Change details"
msgstr "Details bearbeiten"
@@ -3506,11 +3601,11 @@ msgstr "Bestellung bearbeiten"
msgid "Modify order: %(code)s"
msgstr "Bestellung bearbeiten: %(code)s"
#: pretix/presale/templates/pretixpresale/event/order_modify.html:40
#: pretix/presale/templates/pretixpresale/event/order_modify.html:56
msgid "Revert changes"
msgstr "Zurücksetzen"
#: pretix/presale/templates/pretixpresale/event/order_modify.html:45
#: pretix/presale/templates/pretixpresale/event/order_modify.html:61
msgid "Save changes"
msgstr "Änderungen speichern"
@@ -3594,27 +3689,27 @@ msgstr "Die gewählten Produkte wurden Ihrem Warenkorb hinzugefügt."
msgid "Your cart is empty"
msgstr "Ihr Warenkorb ist leer."
#: pretix/presale/views/order.py:53 pretix/presale/views/order.py:105
#: pretix/presale/views/order.py:147 pretix/presale/views/order.py:180
#: pretix/presale/views/order.py:229 pretix/presale/views/order.py:249
#: pretix/presale/views/order.py:282
#: pretix/presale/views/order.py:55 pretix/presale/views/order.py:107
#: pretix/presale/views/order.py:149 pretix/presale/views/order.py:182
#: pretix/presale/views/order.py:245 pretix/presale/views/order.py:266
#: pretix/presale/views/order.py:299
msgid "Unknown order code or not authorized to access this order."
msgstr ""
"Unbekannte Bestellnummer oder Bestellung gehört einem anderen Benutzer."
#: pretix/presale/views/order.py:109 pretix/presale/views/order.py:149
#: pretix/presale/views/order.py:111 pretix/presale/views/order.py:151
msgid "The payment for this order cannot be continued."
msgstr "Diese Bestellung kann nicht mehr bezahlt werden."
#: pretix/presale/views/order.py:231
#: pretix/presale/views/order.py:247
msgid "You cannot modify this order"
msgstr "Sie können diese Bestellung nicht bearbeiten"
#: pretix/presale/views/order.py:251
#: pretix/presale/views/order.py:268
msgid "You cannot cancel this order"
msgstr "Sie können diese Bestellung nicht stornieren"
#: pretix/presale/views/order.py:289
#: pretix/presale/views/order.py:306
msgid "Ticket download is not (yet) enabled."
msgstr "Der Ticket-Download ist (noch) nicht freigeschaltet."
@@ -3732,9 +3827,6 @@ msgstr "Deutsch (Du)"
#~ msgid "Deselect all"
#~ msgstr "Keine auswählen"
#~ msgid "Require e-mail adresses"
#~ msgstr "E-Mail-Adresse erfordern"
#~ msgid "Require all customers to provide an e-mail address."
#~ msgstr "Erfordere eine E-Mail-Adresse von allen Käufern."

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-02-20 14:56+0000\n"
"PO-Revision-Date: 2016-02-20 15:57+0100\n"
"POT-Creation-Date: 2016-02-22 12:43+0000\n"
"PO-Revision-Date: 2016-02-22 13:44+0100\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: Raphael Michel <michel@rami.io>\n"
"Language: de\n"
@@ -27,13 +27,13 @@ msgid "enabled"
msgstr "aktiviert"
#: pretix/base/forms/auth.py:13 pretix/base/forms/auth.py:140
#: pretix/base/models/auth.py:63 pretix/base/models/orders.py:94
#: pretix/presale/forms/checkout.py:8
#: pretix/base/models/auth.py:63 pretix/base/models/orders.py:95
#: pretix/presale/forms/checkout.py:10
msgid "E-mail"
msgstr "E-Mail"
#: pretix/base/forms/auth.py:14 pretix/base/forms/auth.py:77
#: pretix/base/forms/auth.py:113 pretix/control/forms/event.py:239
#: pretix/base/forms/auth.py:113 pretix/control/forms/event.py:252
msgid "Password"
msgstr "Passwort"
@@ -149,7 +149,10 @@ msgid "%(family)s, %(given)s"
msgstr "%(family)s, %(given)s"
#: pretix/base/models/event.py:53 pretix/base/models/items.py:417
#: pretix/base/models/organizer.py:25
#: pretix/base/models/orders.py:471 pretix/base/models/organizer.py:25
#: pretix/control/templates/pretixcontrol/order/index.html:190
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:77
#: pretix/presale/templates/pretixpresale/event/order.html:113
#: pretix/presale/templates/pretixpresale/organizers/index.html:21
msgid "Name"
msgstr "Name"
@@ -220,8 +223,8 @@ msgid "Plugins"
msgstr "Erweiterungen"
#: pretix/base/models/event.py:96 pretix/base/models/items.py:109
#: pretix/base/models/items.py:413 pretix/base/models/orders.py:89
#: pretix/base/models/orders.py:432 pretix/base/models/vouchers.py:25
#: pretix/base/models/items.py:413 pretix/base/models/orders.py:90
#: pretix/base/models/orders.py:433 pretix/base/models/vouchers.py:25
msgid "Event"
msgstr "Veranstaltung"
@@ -438,7 +441,7 @@ msgstr "Gesamtanzahl"
msgid "Leave empty for an unlimited number of tickets."
msgstr "Leer lassen für unbegrenzt viele Tickets."
#: pretix/base/models/items.py:426 pretix/base/models/orders.py:293
#: pretix/base/models/items.py:426 pretix/base/models/orders.py:294
msgid "Item"
msgstr "Produkt"
@@ -460,152 +463,189 @@ msgstr "Kontingent"
msgid "Quotas"
msgstr "Kontingente"
#: pretix/base/models/orders.py:71
#: pretix/base/models/orders.py:72
msgid "pending"
msgstr "ausstehend"
#: pretix/base/models/orders.py:72
#: pretix/base/models/orders.py:73
msgid "paid"
msgstr "bezahlt"
#: pretix/base/models/orders.py:73
#: pretix/base/models/orders.py:74
msgid "expired"
msgstr "abgelaufen"
#: pretix/base/models/orders.py:74
#: pretix/base/models/orders.py:75
msgid "cancelled"
msgstr "storniert"
#: pretix/base/models/orders.py:75
#: pretix/base/models/orders.py:76
msgid "refunded"
msgstr "erstattet"
#: pretix/base/models/orders.py:80
#: pretix/base/models/orders.py:81
#: pretix/control/templates/pretixcontrol/order/index.html:58
#: pretix/control/templates/pretixcontrol/orders/index.html:10
#: pretix/control/templates/pretixcontrol/orders/index.html:42
msgid "Order code"
msgstr "Bestellnummer"
#: pretix/base/models/orders.py:85
#: pretix/base/models/orders.py:86
#: pretix/control/templates/pretixcontrol/orders/index.html:46
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_confirm.html:18
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:31
msgid "Status"
msgstr "Status"
#: pretix/base/models/orders.py:98
#: pretix/base/models/orders.py:99
msgid "Locale"
msgstr "Sprache"
#: pretix/base/models/orders.py:102 pretix/base/models/orders.py:439
#: pretix/base/models/orders.py:103 pretix/base/models/orders.py:440
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:17
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_confirm.html:13
#: pretix/presale/templates/pretixpresale/organizers/index.html:22
msgid "Date"
msgstr "Datum"
#: pretix/base/models/orders.py:105 pretix/base/models/orders.py:443
#: pretix/base/models/orders.py:106 pretix/base/models/orders.py:444
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form.html:23
msgid "Expiration date"
msgstr "Ablaufdatum"
#: pretix/base/models/orders.py:108
#: pretix/base/models/orders.py:109
#: pretix/control/templates/pretixcontrol/order/index.html:63
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/control.html:11
msgid "Payment date"
msgstr "Zahlungsdatum"
#: pretix/base/models/orders.py:114
#: pretix/base/models/orders.py:115
msgid "Payment provider"
msgstr "Zahlungsmethode"
#: pretix/base/models/orders.py:118
#: pretix/base/models/orders.py:119
#: pretix/control/templates/pretixcontrol/order/index.html:140
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:75
msgid "Payment method fee"
msgstr "Gebühr für gewählte Zahlungsmethode"
#: pretix/base/models/orders.py:121
#: pretix/base/models/orders.py:122
#: pretix/control/templates/pretixcontrol/order/index.html:162
msgid "Payment information"
msgstr "Zahlungsinformationen"
#: pretix/base/models/orders.py:125
#: pretix/base/models/orders.py:126
msgid "Payment state was manually modified"
msgstr "Der Bestellungsstatus wurde manuell verändert"
#: pretix/base/models/orders.py:130
#: pretix/base/models/orders.py:131
msgid "Total amount"
msgstr "Gesamtbetrag"
#: pretix/base/models/orders.py:134 pretix/base/models/orders.py:361
#: pretix/base/models/orders.py:135 pretix/base/models/orders.py:362
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_confirm.html:17
msgid "Order"
msgstr "Bestellung"
#: pretix/base/models/orders.py:135
#: pretix/base/models/orders.py:136
#: pretix/control/templates/pretixcontrol/event/base.html:101
#: pretix/control/templates/pretixcontrol/orders/index.html:3
#: pretix/control/templates/pretixcontrol/orders/index.html:5
msgid "Orders"
msgstr "Bestellungen"
#: pretix/base/models/orders.py:184
#: pretix/base/models/orders.py:185
msgid "The payment is too late to be accepted."
msgstr "Die Zahlung kommt zu spät, um akzeptiert werden zu können."
#: pretix/base/models/orders.py:199
#: pretix/base/models/orders.py:200
msgid "Some of the ordered products were no longer available."
msgstr "Einige der ausgewählten Produkte sind nicht mehr verfügbar."
#: pretix/base/models/orders.py:299
#: pretix/base/models/orders.py:300
msgid "Variation"
msgstr "Variante"
#: pretix/base/models/orders.py:304
#: pretix/base/models/orders.py:305
msgid "Price"
msgstr "Preis"
#: pretix/base/models/orders.py:308
#: pretix/base/models/orders.py:309
#: pretix/control/templates/pretixcontrol/order/index.html:106
#: pretix/presale/forms/checkout.py:36
#: pretix/presale/forms/checkout.py:65
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:16
msgid "Attendee name"
msgstr "Name des Teilnehmers"
#: pretix/base/models/orders.py:310
#: pretix/base/models/orders.py:311
msgid "Empty, if this product is not an admission ticket"
msgstr "Leer, wenn dies kein Eintrittsticket ist"
#: pretix/base/models/orders.py:367
#: pretix/base/models/orders.py:368
msgid "Tax rate"
msgstr "Steuersatz"
#: pretix/base/models/orders.py:371
#: pretix/base/models/orders.py:372
msgid "Tax value"
msgstr "Steuer"
#: pretix/base/models/orders.py:375
#: pretix/base/models/orders.py:376
msgid "Order position"
msgstr "Bestelltes Produkt"
#: pretix/base/models/orders.py:376
#: pretix/base/models/orders.py:377
msgid "Order positions"
msgstr "Bestellzeile"
#: pretix/base/models/orders.py:436
#: pretix/base/models/orders.py:437
msgid "Cart ID (e.g. session key)"
msgstr "Warenkorb-ID (z.B. Session-ID)"
#: pretix/base/models/orders.py:447
#: pretix/base/models/orders.py:448
msgid "Cart position"
msgstr "Produkt im Warenkorb"
#: pretix/base/models/orders.py:448
#: pretix/base/models/orders.py:449
msgid "Cart positions"
msgstr "Produkte im Warenkorb"
#: pretix/base/models/orders.py:470
msgid "Company name"
msgstr "Firmenname"
#: pretix/base/models/orders.py:472
#: pretix/control/templates/pretixcontrol/order/index.html:192
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:79
#: pretix/presale/templates/pretixpresale/event/order.html:115
msgid "Address"
msgstr "Adresse"
#: pretix/base/models/orders.py:473
msgid "ZIP code"
msgstr "Postleitzahl"
#: pretix/base/models/orders.py:474
msgid "City"
msgstr "Ort"
#: pretix/base/models/orders.py:475
#: pretix/control/templates/pretixcontrol/order/index.html:196
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:83
#: pretix/presale/templates/pretixpresale/event/order.html:119
msgid "Country"
msgstr "Land"
#: pretix/base/models/orders.py:476
msgid "Phone number"
msgstr "Telefonnummer"
#: pretix/base/models/orders.py:477
#: pretix/control/templates/pretixcontrol/order/index.html:201
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:88
#: pretix/presale/templates/pretixpresale/event/order.html:124
msgid "VAT ID"
msgstr "USt-ID"
#: pretix/base/models/organizer.py:43
#: pretix/control/templates/pretixcontrol/events/index.html:20
#: pretix/control/templates/pretixcontrol/organizers/detail.html:4
@@ -753,7 +793,7 @@ msgstr "Kostenlos"
msgid "The order has been marked as refunded."
msgstr "Die Bestellung wurde als zurückerstattet markiert."
#: pretix/base/services/cart.py:20 pretix/base/services/orders.py:29
#: pretix/base/services/cart.py:20 pretix/base/services/orders.py:30
msgid ""
"We were not able to process your request completely as the server was too "
"busy. Please try again."
@@ -769,7 +809,7 @@ msgstr "Du hast keine Produkte ausgewählt."
msgid "You selected a product which is not available for sale."
msgstr "Du hsat ein Produkt ausgewählt, das nicht zum Verkauf steht."
#: pretix/base/services/cart.py:24 pretix/base/services/orders.py:21
#: pretix/base/services/cart.py:24 pretix/base/services/orders.py:22
msgid ""
"Some of the products you selected were no longer available. Please see below "
"for details."
@@ -777,7 +817,7 @@ msgstr ""
"Einige der ausgewählten Produkte waren zwischenzeitlich nicht mehr "
"verfügbar, bitte überprüfe deinen Warenkorb."
#: pretix/base/services/cart.py:26 pretix/base/services/orders.py:23
#: pretix/base/services/cart.py:26 pretix/base/services/orders.py:24
msgid ""
"Some of the products you selected were no longer available in the quantity "
"you selected. Please see below for details."
@@ -785,7 +825,7 @@ msgstr ""
"Einige der ausgewählten Produkte waren zwischenzeitlich nicht mehr in der "
"gewünschten Anzahl verfügbar, bitte überprüfe deinen Warenkorb."
#: pretix/base/services/cart.py:28 pretix/base/services/orders.py:27
#: pretix/base/services/cart.py:28 pretix/base/services/orders.py:28
#, python-format
msgid "You cannot select more than %s items per order"
msgstr "Du kannst nicht mehr als %s Produkte pro Bestellung auswählen"
@@ -819,7 +859,7 @@ msgstr ""
"Du erhältst diese E-Mail, weil du eine Bestellung für die Veranstaltung %s "
"getätigt hast."
#: pretix/base/services/orders.py:25
#: pretix/base/services/orders.py:26
msgid ""
"The price of some of the items in your cart has changed in the meantime. "
"Please see below for details."
@@ -827,26 +867,26 @@ msgstr ""
"Der Preis einiger Produkte in deinem Warenkorb hat sich zwischenzeitlich "
"geändert."
#: pretix/base/services/orders.py:28
#: pretix/base/services/orders.py:29
msgid "An internal error occured, please try again."
msgstr "Ein interner Fehler ist aufgetreten, bitte erneut versuchen."
#: pretix/base/services/orders.py:31
#: pretix/base/services/orders.py:32
msgid "A voucher you tried to use already has been used."
msgstr ""
"Ein Gutscheincode, den du verwenden wolltest, wurde zwischenzeitlich bereits "
"eingelöst."
#: pretix/base/services/orders.py:32
#: pretix/base/services/orders.py:33
msgid "A voucher you tried to use has expired."
msgstr "Ein Gutscheincode, den du verwenden wolltest, ist abgelaufen."
#: pretix/base/services/orders.py:76
#: pretix/base/services/orders.py:77
#, python-format
msgid "Payment received for your order: %(code)s"
msgstr "Zahlung erhalten für die Bestellung: %(code)s"
#: pretix/base/services/orders.py:241 pretix/control/views/orders.py:208
#: pretix/base/services/orders.py:254 pretix/control/views/orders.py:208
#: pretix/presale/templates/pretixpresale/event/order.html:21
#, python-format
msgid "Your order: %(code)s"
@@ -860,7 +900,7 @@ msgstr "Unkategorisiert"
msgid "Payment method fees"
msgstr "Zahlungsgebühren"
#: pretix/base/settings.py:102
#: pretix/base/settings.py:114
#, python-brace-format
msgid ""
"Hello,\n"
@@ -886,7 +926,7 @@ msgstr ""
"Viele Grüße,\n"
"Das {event} Team"
#: pretix/base/settings.py:115
#: pretix/base/settings.py:127
#, python-brace-format
msgid ""
"Hello,\n"
@@ -914,7 +954,7 @@ msgstr ""
"Viele Grüße,\n"
"Das {event} Team"
#: pretix/base/settings.py:130
#: pretix/base/settings.py:142
#, python-brace-format
msgid ""
"Hello,\n"
@@ -1191,56 +1231,75 @@ msgstr "Namen des Teilnehmer erfordern"
msgid "Require customers to fill in the names of all attendees."
msgstr "Erfordere die Eingabe aller Teilnehmer-Namen."
#: pretix/control/forms/event.py:135
#: pretix/control/forms/event.py:134
msgid "Ask for invoice address"
msgstr "Rechnungsadresse erfragen"
#: pretix/control/forms/event.py:138
msgid "Require invoice address"
msgstr "Rechnungsadresse erforderlich"
#: pretix/control/forms/event.py:142
msgid "Ask for VAT ID"
msgstr "Nach USt-ID fragen"
#: pretix/control/forms/event.py:143
msgid ""
"Does only work if an invoice address is asked for. VAT ID is not required."
msgstr ""
"Funktioniert nur, wenn nach einer Rechnungsadresse gefragt wird. Die USt-ID-"
"Eingabe ist freiwillig."
#: pretix/control/forms/event.py:148
msgid "Maximum number of items per order"
msgstr "Maximale Anzahl Produkte pro Bestellung"
#: pretix/control/forms/event.py:139
#: pretix/control/forms/event.py:152
msgid "Reservation period"
msgstr "Reservierungszeitraum"
#: pretix/control/forms/event.py:140
#: pretix/control/forms/event.py:153
msgid ""
"The number of minutes the items in a user's card are reserved for this user."
msgstr ""
"Die Dauer in Minuten, die Produkte im Warenkorb eines Benutzers reserviert "
"werden."
#: pretix/control/forms/event.py:143
#: pretix/control/forms/event.py:156
msgid "Imprint URL"
msgstr "Impressum (URL)"
#: pretix/control/forms/event.py:147
#: pretix/control/forms/event.py:160
msgid "Contact address"
msgstr "Kontakt-E-Mail"
#: pretix/control/forms/event.py:149
#: pretix/control/forms/event.py:162
msgid "Public email address for contacting the organizer"
msgstr "Öffentliche E-Mail-Adresse zur Kontaktierung des Veranstalters"
#: pretix/control/forms/event.py:156
#: pretix/control/forms/event.py:169
msgid ""
"Your default locale must also be enebled for your event (see box above)."
msgstr ""
"Die Standardsprache muss eine der aktivierten Sprachen sein (siehe weiter "
"oben)."
#: pretix/control/forms/event.py:160
#: pretix/control/forms/event.py:173
msgid ""
"You cannot require specifying attendee names if you do not ask for them."
msgstr ""
"Du kannst die Angabe von Teilnehmernamen nur erfordern, wenn auch nach Namen "
"gefragt wird."
#: pretix/control/forms/event.py:189 pretix/control/forms/event.py:283
#: pretix/control/forms/event.py:202 pretix/control/forms/event.py:296
msgid "This field is required."
msgstr "Dieses Feld ist erforderlich."
#: pretix/control/forms/event.py:194
#: pretix/control/forms/event.py:207
msgid "Subject prefix"
msgstr "Betreffs-Prefix"
#: pretix/control/forms/event.py:195
#: pretix/control/forms/event.py:208
msgid ""
"This will be prepended to the subject of all outgoing emails. This could be "
"a short form of your event name."
@@ -1248,19 +1307,19 @@ msgstr ""
"Dies wird jedem E-Mail-Betreff vorangestellt und könnten z.B. eine Kurzform "
"Ihres Veranstaltungsnamens enthalten."
#: pretix/control/forms/event.py:200
#: pretix/control/forms/event.py:213
msgid "Sender address"
msgstr "Absender-Adresse"
#: pretix/control/forms/event.py:201
#: pretix/control/forms/event.py:214
msgid "Sender address for outgoing e-mails"
msgstr "Absender-Adresse für ausgehende E-Mails"
#: pretix/control/forms/event.py:204
#: pretix/control/forms/event.py:217
msgid "Placed order"
msgstr "Getätigte Bestellung"
#: pretix/control/forms/event.py:207
#: pretix/control/forms/event.py:220
#, python-brace-format
msgid ""
"Available placeholders: {event}, {total}, {currency}, {date}, {paymentinfo}, "
@@ -1269,25 +1328,25 @@ msgstr ""
"Verfügbare Platzhalter: {event}, {total}, {currency}, {date}, {paymentinfo}, "
"{url}"
#: pretix/control/forms/event.py:210
#: pretix/control/forms/event.py:223
msgid "Paid order"
msgstr "Bezahlt Bestellung"
#: pretix/control/forms/event.py:213 pretix/control/forms/event.py:219
#: pretix/control/forms/event.py:226 pretix/control/forms/event.py:232
#, python-brace-format
msgid "Available placeholders: {event}, {url}"
msgstr "Verfügbare Platzhalter: {event}, {url}"
#: pretix/control/forms/event.py:216
#: pretix/control/forms/event.py:229
#: pretix/control/templates/pretixcontrol/order/index.html:76
msgid "Resend link"
msgstr "Link erneut senden"
#: pretix/control/forms/event.py:222
#: pretix/control/forms/event.py:235
msgid "Use custom SMTP server"
msgstr "Eigenen SMTP-Server verwenden"
#: pretix/control/forms/event.py:223
#: pretix/control/forms/event.py:236
msgid ""
"All mail related to your event will be sent over the smtp server specified "
"by you."
@@ -1295,49 +1354,49 @@ msgstr ""
"Alle E-Mails bezüglich deiner Veranstaltung werden über den von dir "
"angegebenen SMTP-Server versendet."
#: pretix/control/forms/event.py:227
#: pretix/control/forms/event.py:240
msgid "Hostname"
msgstr "Hostname"
#: pretix/control/forms/event.py:231
#: pretix/control/forms/event.py:244
msgid "Port"
msgstr "Port"
#: pretix/control/forms/event.py:235
#: pretix/control/forms/event.py:248
msgid "Username"
msgstr "Benutzername"
#: pretix/control/forms/event.py:244
#: pretix/control/forms/event.py:257
msgid "Use STARTTLS"
msgstr "STARTTLS verwenden"
#: pretix/control/forms/event.py:245
#: pretix/control/forms/event.py:258
msgid "Commonly enabled on port 587."
msgstr "Meistens auf Port 587 verfügbar."
#: pretix/control/forms/event.py:249
#: pretix/control/forms/event.py:262
msgid "Use SSL"
msgstr "SSL verwenden"
#: pretix/control/forms/event.py:250
#: pretix/control/forms/event.py:263
msgid "Commonly enabled on port 465."
msgstr "Meistens auf Port 465 verfügbar."
#: pretix/control/forms/event.py:257
#: pretix/control/forms/event.py:270
msgid "Use feature"
msgstr "Funktion benutzen"
#: pretix/control/forms/event.py:258
#: pretix/control/forms/event.py:271
msgid "Use pretix to generate tickets for the user to download and print out."
msgstr ""
"Wenn diese Funktion aktiviert ist, generiert pretix Tickets, die der "
"Benutzer herunterladen und ausdrucken kann."
#: pretix/control/forms/event.py:262
#: pretix/control/forms/event.py:275
msgid "Download date"
msgstr "Download-Datum"
#: pretix/control/forms/event.py:263
#: pretix/control/forms/event.py:276
msgid "Ticket download will be offered after this date."
msgstr "Der Ticket-Download wird zu diesem Zeitpunkt freigeschaltet."
@@ -1408,7 +1467,7 @@ msgstr "Neues Passwort setzen"
#: pretix/control/templates/pretixcontrol/event/mail.html:30
#: pretix/control/templates/pretixcontrol/event/payment.html:31
#: pretix/control/templates/pretixcontrol/event/permissions.html:56
#: pretix/control/templates/pretixcontrol/event/settings.html:47
#: pretix/control/templates/pretixcontrol/event/settings.html:50
#: pretix/control/templates/pretixcontrol/event/tickets.html:36
#: pretix/control/templates/pretixcontrol/events/create.html:30
#: pretix/control/templates/pretixcontrol/item/index.html:28
@@ -1486,9 +1545,9 @@ msgid "General"
msgstr "Allgemeines"
#: pretix/control/templates/pretixcontrol/event/base.html:30
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:52
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:51
#: pretix/presale/templates/pretixpresale/event/order.html:31
#: pretix/presale/templates/pretixpresale/event/order.html:111
#: pretix/presale/templates/pretixpresale/event/order.html:148
msgid "Payment"
msgstr "Zahlung"
@@ -1952,7 +2011,7 @@ msgstr "Verbleibende Kapazität"
#: pretix/control/templates/pretixcontrol/order/cancel.html:4
#: pretix/control/templates/pretixcontrol/order/cancel.html:8
#: pretix/control/templates/pretixcontrol/order/index.html:28
#: pretix/presale/templates/pretixpresale/event/order.html:101
#: pretix/presale/templates/pretixpresale/event/order.html:138
#: pretix/presale/templates/pretixpresale/event/order_cancel.html:4
msgid "Cancel order"
msgstr "Stornieren"
@@ -2056,6 +2115,32 @@ msgstr "Der Status dieser Bestellung wurde manuell verändert."
msgid "The payment has to be completed before %(date)s."
msgstr "Die Zahlung muss bis zum %(date)s abgeschlossen sein."
#: pretix/control/templates/pretixcontrol/order/index.html:183
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:70
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:30
#: pretix/presale/templates/pretixpresale/event/order.html:106
#: pretix/presale/templates/pretixpresale/event/order_modify.html:19
msgid "Invoice information"
msgstr "Rechnungsinformationen"
#: pretix/control/templates/pretixcontrol/order/index.html:188
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:75
#: pretix/presale/templates/pretixpresale/event/order.html:111
msgid "Company"
msgstr "Firma"
#: pretix/control/templates/pretixcontrol/order/index.html:194
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:81
#: pretix/presale/templates/pretixpresale/event/order.html:117
msgid "ZIP code and city"
msgstr "PLZ und Ort"
#: pretix/control/templates/pretixcontrol/order/index.html:198
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:85
#: pretix/presale/templates/pretixpresale/event/order.html:121
msgid "Phone"
msgstr "Telefon"
#: pretix/control/templates/pretixcontrol/order/refund.html:10
msgid "Do you really want to refund this order? You cannot revert this action."
msgstr ""
@@ -2367,11 +2452,11 @@ msgstr "Die Bestellung wurde storniert."
msgid "The order has been marked as not paid."
msgstr "Die Bestellung wurde als unbezahlt markiert."
#: pretix/control/views/orders.py:236 pretix/presale/views/order.py:279
#: pretix/control/views/orders.py:236 pretix/presale/views/order.py:296
msgid "You requested an invalid ticket output type."
msgstr "Du hast einen ungültigen Ausgabetyp gewählt."
#: pretix/control/views/orders.py:239 pretix/presale/views/order.py:284
#: pretix/control/views/orders.py:239 pretix/presale/views/order.py:301
msgid "Order is not paid."
msgstr "Bestellung ist nicht bezahlt."
@@ -2548,7 +2633,7 @@ msgstr ""
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:11
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:43
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:56
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:72
#: pretix/presale/templates/pretixpresale/event/order_pay.html:26
msgid "Continue"
msgstr "Fortfahren"
@@ -3264,28 +3349,36 @@ msgstr "Veranstaltungsname-y-Position (mm)"
msgid "Event name size (mm)"
msgstr "Veranstaltungsname-Größe (mm)"
#: pretix/presale/checkoutflow.py:147 pretix/presale/views/order.py:217
#: pretix/presale/checkoutflow.py:166 pretix/presale/views/order.py:232
msgid ""
"We had difficulties processing your input. Please review the errors below."
msgstr "Wir hatten Schwierigkeiten, deine Eingabe zu verarbeiten."
#: pretix/presale/checkoutflow.py:158 pretix/presale/checkoutflow.py:163
#: pretix/presale/checkoutflow.py:181 pretix/presale/checkoutflow.py:186
msgid "Please enter a valid e-mail address."
msgstr "Bitte gib eine gültige E-Mail-Adresse ein."
#: pretix/presale/checkoutflow.py:173 pretix/presale/checkoutflow.py:178
#: pretix/presale/checkoutflow.py:196 pretix/presale/checkoutflow.py:201
msgid "Please fill in answers to all required questions."
msgstr "Bitte fülle Antworten zu allen benötigten Fragen ein."
#: pretix/presale/checkoutflow.py:229
#: pretix/presale/checkoutflow.py:253
msgid "Please select a payment method."
msgstr "Bitte wähle eine Zahlungsmethode aus."
#: pretix/presale/checkoutflow.py:250 pretix/presale/checkoutflow.py:256
#: pretix/presale/views/order.py:154 pretix/presale/views/order.py:184
#: pretix/presale/checkoutflow.py:274 pretix/presale/checkoutflow.py:280
#: pretix/presale/views/order.py:156 pretix/presale/views/order.py:186
msgid "The payment information you entered was incomplete."
msgstr "Die eingegebenen Zahlungsinformationen sind unvollständig."
#: pretix/presale/forms/checkout.py:19
msgid "Street and Number"
msgstr "Straße und Hausnummer"
#: pretix/presale/forms/checkout.py:37
msgid "You need to provide either a company name or your name."
msgstr "Du musst entweder einen Firmennamen oder deinen Namen eingeben."
#: pretix/presale/middleware.py:25
msgid "The selected event was not found."
msgstr "Die ausgewählte Veranstaltung wurde nicht gefunden."
@@ -3321,8 +3414,9 @@ msgstr ""
"Bitte überprüfe die untenstehenden Details und bestätige deine Bestellung."
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:17
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:47
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:65
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:46
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:66
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:102
msgid "Modify"
msgstr "Bearbeiten"
@@ -3344,22 +3438,22 @@ msgstr ""
msgid "The items in your cart are no longer reserved for you."
msgstr "Die Produkte in deinem Warenkorb sind nicht mehr für dich reserviert."
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:69
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:106
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:15
msgid "Contact information"
msgstr "Kontaktinformationen"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:74
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:111
msgid "E-mail address"
msgstr "E-Mail-Adresse"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:84
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:122
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:38
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:51
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:67
msgid "Go back"
msgstr "Zurück"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:89
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:127
msgid "Place binding order"
msgstr "Zahlungspflichtig bestellen"
@@ -3479,6 +3573,7 @@ msgid "You will be able to download your tickets here on %(date)s."
msgstr "Du kannst deine Tickets hier ab %(date)s herunterladen."
#: pretix/presale/templates/pretixpresale/event/order.html:82
#: pretix/presale/templates/pretixpresale/event/order.html:101
msgid "Change details"
msgstr "Details bearbeiten"
@@ -3496,11 +3591,11 @@ msgstr "Bestellung bearbeiten"
msgid "Modify order: %(code)s"
msgstr "Bestellung bearbeiten: %(code)s"
#: pretix/presale/templates/pretixpresale/event/order_modify.html:40
#: pretix/presale/templates/pretixpresale/event/order_modify.html:56
msgid "Revert changes"
msgstr "Zurücksetzen"
#: pretix/presale/templates/pretixpresale/event/order_modify.html:45
#: pretix/presale/templates/pretixpresale/event/order_modify.html:61
msgid "Save changes"
msgstr "Änderungen speichern"
@@ -3584,27 +3679,27 @@ msgstr "Die gewählten Produkte wurden deinem Warenkorb hinzugefügt."
msgid "Your cart is empty"
msgstr "Dein Warenkorb ist leer."
#: pretix/presale/views/order.py:53 pretix/presale/views/order.py:105
#: pretix/presale/views/order.py:147 pretix/presale/views/order.py:180
#: pretix/presale/views/order.py:229 pretix/presale/views/order.py:249
#: pretix/presale/views/order.py:282
#: pretix/presale/views/order.py:55 pretix/presale/views/order.py:107
#: pretix/presale/views/order.py:149 pretix/presale/views/order.py:182
#: pretix/presale/views/order.py:245 pretix/presale/views/order.py:266
#: pretix/presale/views/order.py:299
msgid "Unknown order code or not authorized to access this order."
msgstr ""
"Unbekannte Bestellnummer oder Bestellung gehört einem anderen Benutzer."
#: pretix/presale/views/order.py:109 pretix/presale/views/order.py:149
#: pretix/presale/views/order.py:111 pretix/presale/views/order.py:151
msgid "The payment for this order cannot be continued."
msgstr "Diese Bestellung kann nicht mehr bezahlt werden."
#: pretix/presale/views/order.py:231
#: pretix/presale/views/order.py:247
msgid "You cannot modify this order"
msgstr "Sie können diese Bestellung nicht bearbeiten"
#: pretix/presale/views/order.py:251
#: pretix/presale/views/order.py:268
msgid "You cannot cancel this order"
msgstr "Sie können diese Bestellung nicht stornieren"
#: pretix/presale/views/order.py:289
#: pretix/presale/views/order.py:306
msgid "Ticket download is not (yet) enabled."
msgstr "Der Ticket-Download ist (noch) nicht freigeschaltet."
@@ -3722,9 +3817,6 @@ msgstr "Deutsch (Du)"
#~ msgid "Deselect all"
#~ msgstr "Keine auswählen"
#~ msgid "Require e-mail adresses"
#~ msgstr "E-Mail-Adresse erfordern"
#~ msgid "Require all customers to provide an e-mail address."
#~ msgstr "Erfordere eine E-Mail-Adresse von allen Käufern."

View File

@@ -11,10 +11,11 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic.base import TemplateResponseMixin
from pretix.base.models import CartPosition, Order
from pretix.base.models.orders import InvoiceAddress
from pretix.base.services.orders import OrderError, perform_order
from pretix.base.signals import register_payment_providers
from pretix.multidomain.urlreverse import eventreverse
from pretix.presale.forms.checkout import ContactForm
from pretix.presale.forms.checkout import ContactForm, InvoiceAddressForm
from pretix.presale.signals import checkout_flow_steps
from pretix.presale.views import CartMixin
from pretix.presale.views.async import AsyncAction
@@ -139,14 +140,36 @@ class QuestionsStep(QuestionsViewMixin, CartMixin, TemplateFlowStep):
'email': self.request.session.get('email', '')
})
@cached_property
def invoice_address(self):
try:
return InvoiceAddress.objects.get(
pk=self.request.session.get('invoice_address'),
order__isnull=True
)
except InvoiceAddress.DoesNotExist:
return InvoiceAddress()
@cached_property
def invoice_form(self):
return InvoiceAddressForm(data=self.request.POST if self.request.method == "POST" else None,
event=self.request.event,
instance=self.invoice_address)
def post(self, request):
self.request = request
failed = not self.save() or not self.contact_form.is_valid()
if request.event.settings.invoice_address_asked:
failed = failed or not self.invoice_form.is_valid()
if failed:
messages.error(request,
_("We had difficulties processing your input. Please review the errors below."))
return self.render()
request.session['email'] = self.contact_form.cleaned_data['email']
if request.event.settings.invoice_address_asked:
addr = self.invoice_form.save()
request.session['invoice_address'] = addr.pk
return redirect(self.get_next_url(request))
def is_completed(self, request, warn=False):
@@ -183,6 +206,7 @@ class QuestionsStep(QuestionsViewMixin, CartMixin, TemplateFlowStep):
ctx = super().get_context_data(**kwargs)
ctx['forms'] = self.forms
ctx['contact_form'] = self.contact_form
ctx['invoice_form'] = self.invoice_form
return ctx
@@ -282,6 +306,7 @@ class ConfirmStep(CartMixin, AsyncAction, TemplateFlowStep):
ctx['cart'] = self.get_cart(answers=True)
ctx['payment'] = self.payment_provider.checkout_confirm_render(self.request)
ctx['payment_provider'] = self.payment_provider
ctx['addr'] = self.invoice_address
return ctx
@cached_property
@@ -292,6 +317,16 @@ class ConfirmStep(CartMixin, AsyncAction, TemplateFlowStep):
if provider.identifier == self.request.session['payment']:
return provider
@cached_property
def invoice_address(self):
try:
return InvoiceAddress.objects.get(
pk=self.request.session.get('invoice_address'),
order__isnull=True
)
except InvoiceAddress.DoesNotExist:
return InvoiceAddress()
def get(self, request):
self.request = request
if 'async_id' in request.GET and settings.HAS_CELERY:
@@ -302,7 +337,7 @@ class ConfirmStep(CartMixin, AsyncAction, TemplateFlowStep):
self.request = request
return self.do(self.request.event.id, self.payment_provider.identifier,
[p.id for p in self.positions], request.session.get('email'),
translation.get_language())
translation.get_language(), self.invoice_address.pk)
def get_success_message(self, value):
return None

View File

@@ -1,13 +1,42 @@
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
from pretix.base.models import Question
from pretix.base.models.orders import InvoiceAddress
class ContactForm(forms.Form):
email = forms.EmailField(label=_('E-mail'))
class InvoiceAddressForm(forms.ModelForm):
class Meta:
model = InvoiceAddress
fields = ('company', 'name', 'street', 'zipcode', 'city', 'country', 'phone', 'vat_id')
widgets = {
'street': forms.Textarea(attrs={'rows': 2, 'placeholder': _('Street and Number')}),
}
def __init__(self, *args, **kwargs):
self.event = event = kwargs.pop('event')
super().__init__(*args, **kwargs)
if not event.settings.invoice_address_vatid:
del self.fields['vat_id']
if not event.settings.invoice_address_required:
for k, f in self.fields.items():
f.required = False
f.widget.is_required = False
if 'required' in f.widget.attrs:
del f.widget.attrs['required']
def clean(self):
data = self.cleaned_data
if not data['name'] and not data['company'] and self.event.settings.invoice_address_required:
raise ValidationError(_('You need to provide either a company name or your name.'))
class QuestionsForm(forms.Form):
"""
This form class is responsible for asking order-related questions. This includes

View File

@@ -37,26 +37,63 @@
</div>
</div>
</div>
<div class="row-fluid">
<div class="panel panel-primary">
<div class="panel-heading">
{% if payment_provider.identifier != "free" %}
<div class="pull-right">
<a href="{% eventurl request.event "presale:event.checkout" step="payment" %}">
<span class="fa fa-edit"></span>
{% trans "Modify" %}
</a>
</div>
{% endif %}
<h3 class="panel-title">
{% trans "Payment" %}
</h3>
</div>
<div class="panel-body">
{{ payment }}
</div>
<div class="panel panel-primary">
<div class="panel-heading">
{% if payment_provider.identifier != "free" %}
<div class="pull-right">
<a href="{% eventurl request.event "presale:event.checkout" step="payment" %}">
<span class="fa fa-edit"></span>
{% trans "Modify" %}
</a>
</div>
{% endif %}
<h3 class="panel-title">
{% trans "Payment" %}
</h3>
</div>
<div class="row-fluid">
<div class="panel-body">
{{ payment }}
</div>
</div>
<div class="row">
{% if request.event.settings.invoice_address_asked %}
<div class="col-md-6 col-xs-12">
<div class="panel panel-primary panel-contact">
<div class="panel-heading">
<div class="pull-right">
<a href="{% eventurl request.event "presale:event.checkout" step="questions" %}">
<span class="fa fa-edit"></span>
{% trans "Modify" %}
</a>
</div>
<h3 class="panel-title">
{% trans "Invoice information" %}
</h3>
</div>
<div class="panel-body">
<dl class="dl-horizontal">
<dt>{% trans "Company" %}</dt>
<dd>{{ addr.company }}</dd>
<dt>{% trans "Name" %}</dt>
<dd>{{ addr.name }}</dd>
<dt>{% trans "Address" %}</dt>
<dd>{{ addr.street|linebreaksbr }}</dd>
<dt>{% trans "ZIP code and city" %}</dt>
<dd>{{ addr.zipcode }} {{ addr.city }}</dd>
<dt>{% trans "Country" %}</dt>
<dd>{{ addr.country }}</dd>
<dt>{% trans "Phone" %}</dt>
<dd>{{ addr.phone }}</dd>
{% if request.event.settings.invoice_address_vatid %}
<dt>{% trans "VAT ID" %}</dt>
<dd>{{ addr.vat_id }}</dd>
{% endif %}
</dl>
</div>
</div>
</div>
{% endif %}
<div class="{% if request.event.settings.invoice_address_asked %}col-md-6{% endif %} col-xs-12">
<div class="panel panel-primary panel-contact">
<div class="panel-heading">
<div class="pull-right">
@@ -77,20 +114,20 @@
</div>
</div>
</div>
<div class="row checkout-button-row">
<div class="col-md-4">
<a class="btn btn-block btn-default btn-lg"
href="{{ prev_url }}">
{% trans "Go back" %}
</a>
</div>
<div class="col-md-4 col-md-offset-4">
<button class="btn btn-block btn-primary btn-lg" type="submit">
{% trans "Place binding order" %}
</button>
</div>
<div class="clearfix"></div>
</div>
<div class="row checkout-button-row clearfix">
<div class="col-md-4">
<a class="btn btn-block btn-default btn-lg"
href="{{ prev_url }}">
{% trans "Go back" %}
</a>
</div>
<div class="col-md-4 col-md-offset-4">
<button class="btn btn-block btn-primary btn-lg" type="submit">
{% trans "Place binding order" %}
</button>
</div>
<div class="clearfix"></div>
</div>
</form>
{% endblock %}

View File

@@ -22,6 +22,22 @@
</div>
</div>
</div>
{% if event.settings.invoice_address_asked %}
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" href="#invoice" data-parent="#questions_accordion">
<strong>{% trans "Invoice information" %}</strong>
</a>
</h4>
</div>
<div id="invoice" class="panel-collapse collapsed in">
<div class="panel-body">
{% bootstrap_form invoice_form layout="horizontal" %}
</div>
</div>
</div>
{% endif %}
{% for form in forms %}
<div class="panel panel-default">
<div class="panel-heading">

View File

@@ -91,6 +91,43 @@
{% include "pretixpresale/event/fragment_cart.html" with cart=cart event=request.event editable=False %}
</div>
</div>
{% if request.event.settings.invoice_address_asked %}
<div class="panel panel-primary">
<div class="panel-heading">
{% if order.can_modify_answers %}
<div class="pull-right">
<a href="{% eventurl event "presale:event.order.modify" secret=order.secret order=order.code %}">
<span class="fa fa-edit"></span>
{% trans "Change details" %}
</a>
</div>
{% endif %}
<h3 class="panel-title">
{% trans "Invoice information" %}
</h3>
</div>
<div class="panel-body">
<dl class="dl-horizontal">
<dt>{% trans "Company" %}</dt>
<dd>{{ order.invoice_address.company }}</dd>
<dt>{% trans "Name" %}</dt>
<dd>{{ order.invoice_address.name }}</dd>
<dt>{% trans "Address" %}</dt>
<dd>{{ order.invoice_address.street|linebreaksbr }}</dd>
<dt>{% trans "ZIP code and city" %}</dt>
<dd>{{ order.invoice_address.zipcode }} {{ addr.city }}</dd>
<dt>{% trans "Country" %}</dt>
<dd>{{ order.invoice_address.country }}</dd>
<dt>{% trans "Phone" %}</dt>
<dd>{{ order.invoice_address.phone }}</dd>
{% if request.event.settings.invoice_address_vatid %}
<dt>{% trans "VAT ID" %}</dt>
<dd>{{ order.invoice_address.vat_id }}</dd>
{% endif %}
</dl>
</div>
</div>
{% endif %}
{% if order.status == "n" %}
<div class="row">
<div class="col-md-12 text-right">

View File

@@ -11,6 +11,22 @@
<form class="form-horizontal" method="post">
{% csrf_token %}
<div class="panel-group" id="questions_accordion">
{% if event.settings.invoice_address_asked %}
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" href="#invoice" data-parent="#questions_accordion">
<strong>{% trans "Invoice information" %}</strong>
</a>
</h4>
</div>
<div id="invoice" class="panel-collapse collapsed in">
<div class="panel-body">
{% bootstrap_form invoice_form layout="horizontal" %}
</div>
</div>
</div>
{% endif %}
{% for form in forms %}
<div class="panel panel-default">
<div class="panel-heading">

View File

@@ -10,12 +10,14 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic import TemplateView, View
from pretix.base.models import CachedFile, CachedTicket, Order, OrderPosition
from pretix.base.models.orders import InvoiceAddress
from pretix.base.services.orders import cancel_order
from pretix.base.services.tickets import generate
from pretix.base.signals import (
register_payment_providers, register_ticket_outputs,
)
from pretix.multidomain.urlreverse import eventreverse
from pretix.presale.forms.checkout import InvoiceAddressForm
from pretix.presale.views import CartMixin, EventViewMixin
from pretix.presale.views.questions import QuestionsViewMixin
@@ -210,12 +212,26 @@ class OrderModify(EventViewMixin, OrderDetailMixin, QuestionsViewMixin, Template
'item__questions', 'answers'
))
@cached_property
def invoice_address(self):
if self.order.invoice_address:
return self.order.invoice_address
else:
return InvoiceAddress(order=self.order)
@cached_property
def invoice_form(self):
return InvoiceAddressForm(data=self.request.POST if self.request.method == "POST" else None,
event=self.request.event,
instance=self.invoice_address)
def post(self, request, *args, **kwargs):
failed = not self.save()
failed = not self.save() or not self.invoice_form.is_valid()
if failed:
messages.error(self.request,
_("We had difficulties processing your input. Please review the errors below."))
return self.get(request, *args, **kwargs)
self.invoice_form.save()
self.order.log_action('pretix.event.order.modified')
return redirect(self.get_order_url())
@@ -236,6 +252,7 @@ class OrderModify(EventViewMixin, OrderDetailMixin, QuestionsViewMixin, Template
ctx = super().get_context_data(**kwargs)
ctx['order'] = self.order
ctx['forms'] = self.forms
ctx['invoice_form'] = self.invoice_form
return ctx