diff --git a/.clabot b/.clabot index f011f8e9e8..b83e106f28 100644 --- a/.clabot +++ b/.clabot @@ -1,5 +1,5 @@ { "contributors": "https://crm.rami.io/cla/check/?project=pretix&checkContributor=", - "message": "Hey there! :) Thank you very much for offering a contribution to pretix! For legal reasons, we need you to sign a Contributor License Agreement in order to be able to merge the code. Sorry for the hassle :( Please download the agreement from https://pretix.eu/about/en/cla and send a signed copy to support@pretix.eu. Feel free to also contact us there or via comments here if you have any questions!", + "message": "Hey there! :) Thank you very much for offering a contribution to pretix! For legal reasons, we need you to sign a Contributor License Agreement in order to be able to merge the code. Sorry for the hassle :( Please download the agreement from https://pretix.eu/about/en/cla and send a signed copy to support@pretix.eu. Feel free to also contact us there or via comments here if you have any questions!\n\nFeel free to ignore me on documentation changes, translations, and trivial PRs like typo fixes (and similar single-line changes) – we can merge these without a CLA as well.", "label": "cla-signed" } diff --git a/doc/development/api/plugins.rst b/doc/development/api/plugins.rst index 181feadd7d..fe2287eeea 100644 --- a/doc/development/api/plugins.rst +++ b/doc/development/api/plugins.rst @@ -84,6 +84,8 @@ A working example would be: restricted = False description = _("This plugin allows you to receive payments via PayPal") compatibility = "pretix>=2.7.0" + settings_links = [] + navigation_links = [] default_app_config = 'pretix_paypal.PaypalApp' @@ -185,6 +187,28 @@ your Django app label. with checking that the calling user is logged in, has appropriate permissions, etc. We plan on providing native support for this in a later version. +To make your plugin views easily discoverable, you can specify links for "Go to" +and "Settings" buttons next to your entry on the plugin page. These links should be +added to the ``navigation_links`` and ``settings_links``, respectively, in the +``PretixPluginMeta`` class. + +Each array entry consists of a tuple ``(label, urlname, kwargs)``. For the label, +either a string or a tuple of strings can be specified. In the latter case, the provided +strings will be merged with a separator indicating they are successive navigation steps +the user would need to take to reach the page via the regular menu +(e.g. "Payment > Bank transfer" as below). + +.. code-block:: python + + settings_links = [ + ((_("Payment"), _("Bank transfer")), "control:event.settings.payment.provider", {"provider": "banktransfer"}), + ] + navigation_links = [ + ((_("Bank transfer"), _("Import bank data")), "plugins:banktransfer:import", {}), + ((_("Bank transfer"), _("Export refunds")), "plugins:banktransfer:refunds.list", {}), + ] + + .. _Django app: https://docs.djangoproject.com/en/3.0/ref/applications/ .. _signal dispatcher: https://docs.djangoproject.com/en/3.0/topics/signals/ .. _namespace packages: https://legacy.python.org/dev/peps/pep-0420/ diff --git a/pyproject.toml b/pyproject.toml index 188d9c11a0..a99ea20ac9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ dependencies = [ "css-inline==0.14.*", "defusedcsv>=1.1.0", "Django[argon2]==4.2.*,>=4.2.15", - "django-bootstrap3==24.3", + "django-bootstrap3==25.1", "django-compressor==4.5.1", "django-countries==7.6.*", "django-filter==25.1", @@ -61,7 +61,7 @@ dependencies = [ "importlib_metadata==8.*", # Polyfill, we can probably drop this once we require Python 3.10+ "isoweek", "jsonschema", - "kombu==5.4.*", + "kombu==5.5.*", "libsass==0.23.*", "lxml", "markdown==3.7", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3. @@ -73,15 +73,15 @@ dependencies = [ "paypalrestsdk==1.13.*", "paypal-checkout-serversdk==1.0.*", "PyJWT==2.10.*", - "phonenumberslite==8.13.*", + "phonenumberslite==9.0.*", "Pillow==11.1.*", "pretix-plugin-build", - "protobuf==5.29.*", + "protobuf==6.30.*", "psycopg2-binary", "pycountry", "pycparser==2.22", - "pycryptodome==3.21.*", - "pypdf==5.1.*", + "pycryptodome==3.22.*", + "pypdf==5.4.*", "python-bidi==0.6.*", # Support for Arabic in reportlab "python-dateutil==2.9.*", "pytz", @@ -91,7 +91,7 @@ dependencies = [ "redis==5.2.*", "reportlab==4.3.*", "requests==2.31.*", - "sentry-sdk==2.22.*", + "sentry-sdk==2.24.*", "sepaxml==2.6.*", "stripe==7.9.*", "text-unidecode==1.*", diff --git a/src/pretix/__init__.py b/src/pretix/__init__.py index fae2d9ba2c..69fc637da1 100644 --- a/src/pretix/__init__.py +++ b/src/pretix/__init__.py @@ -19,4 +19,4 @@ # You should have received a copy of the GNU Affero General Public License along with this program. If not, see # . # -__version__ = "2025.2.0" +__version__ = "2025.3.0" diff --git a/src/pretix/_base_settings.py b/src/pretix/_base_settings.py index a1288c6ccf..6341f880ce 100644 --- a/src/pretix/_base_settings.py +++ b/src/pretix/_base_settings.py @@ -259,7 +259,7 @@ COMPRESS_FILTERS = { CURRENCIES = [ c for c in currencies if c.alpha_3 not in { - 'XAG', 'XAU', 'XBA', 'XBB', 'XBC', 'XBD', 'XDR', 'XPD', 'XPT', 'XSU', 'XTS', 'XUA', + 'USN', 'XAG', 'XAU', 'XBA', 'XBB', 'XBC', 'XBD', 'XDR', 'XPD', 'XPT', 'XSU', 'XTS', 'XUA', } ] CURRENCY_PLACES = { diff --git a/src/pretix/api/serializers/__init__.py b/src/pretix/api/serializers/__init__.py index f6651425a8..76933c4e6c 100644 --- a/src/pretix/api/serializers/__init__.py +++ b/src/pretix/api/serializers/__init__.py @@ -81,6 +81,13 @@ class SalesChannelMigrationMixin: def to_internal_value(self, data): if "sales_channels" in data: + if data["sales_channels"] is None: + raise ValidationError({ + "sales_channels": [ + "The legacy attribute 'sales_channels' cannot be set to None, it must be a list." + ] + }) + prefetch_related_objects([self.organizer], "sales_channels") all_channels = { s.identifier for s in @@ -89,7 +96,7 @@ class SalesChannelMigrationMixin: if data.get("all_sales_channels") and set(data["sales_channels"]) != all_channels: raise ValidationError({ - "limit_sales_channels": [ + "all_sales_channels": [ "If 'all_sales_channels' is set, the legacy attribute 'sales_channels' must not be set or set to " "the list of all sales channels." ] @@ -109,6 +116,7 @@ class SalesChannelMigrationMixin: else: data["all_sales_channels"] = False data["limit_sales_channels"] = data["sales_channels"] + del data["sales_channels"] if data.get("all_sales_channels"): diff --git a/src/pretix/api/serializers/cart.py b/src/pretix/api/serializers/cart.py index ecf6b07549..38d0646842 100644 --- a/src/pretix/api/serializers/cart.py +++ b/src/pretix/api/serializers/cart.py @@ -176,7 +176,7 @@ class BaseCartPositionCreateSerializer(I18nAwareModelSerializer): def create(self, validated_data): validated_data.pop('_quotas') - answers_data = validated_data.pop('answers') + answers_data = validated_data.pop('answers', []) attendee_name = validated_data.pop('attendee_name', '') if attendee_name and not validated_data.get('attendee_name_parts'): diff --git a/src/pretix/api/views/checkin.py b/src/pretix/api/views/checkin.py index 82f0eac191..311a6bd602 100644 --- a/src/pretix/api/views/checkin.py +++ b/src/pretix/api/views/checkin.py @@ -165,6 +165,7 @@ class CheckinListViewSet(viewsets.ModelViewSet): if not serializer.validated_data.get('position'): kwargs['position'] = OrderPosition.all.filter( + order__event=self.request.event, secret=serializer.validated_data['raw_barcode'] ).first() diff --git a/src/pretix/base/forms/questions.py b/src/pretix/base/forms/questions.py index aee2ada677..f223ee952a 100644 --- a/src/pretix/base/forms/questions.py +++ b/src/pretix/base/forms/questions.py @@ -83,8 +83,8 @@ from pretix.base.services.tax import ( VATIDFinalError, VATIDTemporaryError, validate_vat_id, ) from pretix.base.settings import ( - COUNTRIES_WITH_STATE_IN_ADDRESS, PERSON_NAME_SALUTATIONS, - PERSON_NAME_SCHEMES, PERSON_NAME_TITLE_GROUPS, + COUNTRIES_WITH_STATE_IN_ADDRESS, COUNTRY_STATE_LABEL, + PERSON_NAME_SALUTATIONS, PERSON_NAME_SCHEMES, PERSON_NAME_TITLE_GROUPS, ) from pretix.base.templatetags.rich_text import rich_text from pretix.base.timemachine import time_machine_now @@ -721,7 +721,7 @@ class BaseQuestionsForm(forms.Form): 'data-country-information-url': reverse('js_helpers.states'), }), ) - c = [('', pgettext_lazy('address', 'Select state'))] + c = [('', '---')] fprefix = str(self.prefix) + '-' if self.prefix is not None and self.prefix != '-' else '' cc = None state = None @@ -1079,7 +1079,7 @@ class BaseInvoiceAddressForm(forms.ModelForm): self.fields['country'].choices = CachedCountries() self.fields['country'].widget.attrs['data-country-information-url'] = reverse('js_helpers.states') - c = [('', pgettext_lazy('address', 'Select state'))] + c = [('', '---')] fprefix = self.prefix + '-' if self.prefix else '' cc = None if fprefix + 'country' in self.data: @@ -1088,16 +1088,19 @@ class BaseInvoiceAddressForm(forms.ModelForm): cc = str(self.initial['country']) elif self.instance and self.instance.country: cc = str(self.instance.country) + state_label = pgettext_lazy('address', 'State') if cc and cc in COUNTRIES_WITH_STATE_IN_ADDRESS: types, form = COUNTRIES_WITH_STATE_IN_ADDRESS[cc] statelist = [s for s in pycountry.subdivisions.get(country_code=cc) if s.type in types] c += sorted([(s.code[3:], s.name) for s in statelist], key=lambda s: s[1]) + if cc in COUNTRY_STATE_LABEL: + state_label = COUNTRY_STATE_LABEL[cc] elif fprefix + 'state' in self.data: self.data = self.data.copy() del self.data[fprefix + 'state'] self.fields['state'] = forms.ChoiceField( - label=pgettext_lazy('address', 'State'), + label=state_label, required=False, choices=c, widget=forms.Select(attrs={ diff --git a/src/pretix/base/migrations/0278_login_source_add_unique_together.py b/src/pretix/base/migrations/0278_login_source_add_unique_together.py new file mode 100644 index 0000000000..028c358843 --- /dev/null +++ b/src/pretix/base/migrations/0278_login_source_add_unique_together.py @@ -0,0 +1,41 @@ +# Generated by Django 4.2.16 on 2025-02-28 13:25 + +from django.db import migrations, models + + +def remove_duplicates(apps, schema_editor): + UserKnownLoginSource = apps.get_model("pretixbase", "UserKnownLoginSource") + unique_fields = ["user", "agent_type", "device_type", "os_type", "country"] + + duplicates = ( + UserKnownLoginSource.objects + .values(*unique_fields) + .order_by() + .annotate(latest_id=models.Max('id'), count=models.Count('id')) + .filter(count__gt=1) + ) + + for duplicate in duplicates: + ( + UserKnownLoginSource.objects + .filter(**{x: duplicate[x] for x in unique_fields}) + .exclude(id=duplicate["latest_id"]) + .delete() + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ("pretixbase", "0277_customerssoclient_require_pkce_and_more"), + ] + + operations = [ + migrations.RunPython(remove_duplicates, migrations.RunPython.noop), + migrations.AlterUniqueTogether( + name="userknownloginsource", + unique_together={ + ("user", "agent_type", "device_type", "os_type", "country") + }, + ), + ] diff --git a/src/pretix/base/models/auth.py b/src/pretix/base/models/auth.py index 297316e942..27e0ee6961 100644 --- a/src/pretix/base/models/auth.py +++ b/src/pretix/base/models/auth.py @@ -602,6 +602,9 @@ class UserKnownLoginSource(models.Model): country = FastCountryField(null=True, blank=True) last_seen = models.DateTimeField() + class Meta: + unique_together = ('user', 'agent_type', 'device_type', 'os_type', 'country') + class StaffSession(models.Model): user = models.ForeignKey('User', on_delete=models.PROTECT) diff --git a/src/pretix/base/models/event.py b/src/pretix/base/models/event.py index 3de4f68bc5..db687f2483 100644 --- a/src/pretix/base/models/event.py +++ b/src/pretix/base/models/event.py @@ -60,6 +60,7 @@ from django.urls import reverse from django.utils.crypto import get_random_string from django.utils.formats import date_format from django.utils.functional import cached_property +from django.utils.html import format_html from django.utils.timezone import make_aware, now from django.utils.translation import gettext, gettext_lazy as _ from django_scopes import ScopedManager, scopes_disabled @@ -171,7 +172,7 @@ class EventMixin: self.date_to.astimezone(tz), ("D" if short else "l") ) - def get_date_range_display(self, tz=None, force_show_end=False, as_html=False) -> str: + def get_date_range_display(self, tz=None, force_show_end=False, as_html=False, try_to_show_times=False) -> str: """ Returns a formatted string containing the start date and the end date of the event with respect to the current locale and to the ``show_date_to`` @@ -180,36 +181,48 @@ class EventMixin: tz = tz or self.timezone if (not self.settings.show_date_to and not force_show_end) or not self.date_to: df, dt = self.date_from, self.date_from + show_times = try_to_show_times else: df, dt = self.date_from, self.date_to - return daterange(df.astimezone(tz), dt.astimezone(tz), as_html) + show_times = try_to_show_times and self.settings.show_times and ( + # Show times if start and end are on the same day ("08:00-10:00") + dt.astimezone(tz).date() == df.astimezone(tz).date() or + # Show times if start and end are on consecutive days and less than 24h ("23:00-03:00") + (dt.astimezone(tz).date() == df.astimezone(tz).date() + timedelta(days=1) and + dt.astimezone(tz).time() < df.astimezone(tz).time()) + ) + d = daterange(df.astimezone(tz), dt.astimezone(tz), as_html) + + if show_times: + if (not self.settings.show_date_to and not force_show_end) or not self.date_to: + time_str = _date(self.date_from.astimezone(tz), "TIME_FORMAT") + else: + time_str = '{}–{}'.format( + _date(self.date_from.astimezone(tz), "TIME_FORMAT"), + _date(self.date_to.astimezone(tz), "TIME_FORMAT"), + ) + + if as_html: + d = format_html( + d + ' ', + self.date_from.isoformat(), + str(self.timezone), + time_str, + ) + else: + d = d + ' ' + time_str + + return d + + def get_date_range_display_with_times(self) -> str: # Helper for usage from templates + return self.get_date_range_display(try_to_show_times=True) + + def get_date_range_display_with_times_as_html(self) -> str: # Helper for usage from templates + return self.get_date_range_display(try_to_show_times=True, as_html=True) def get_date_range_display_as_html(self, tz=None, force_show_end=False) -> str: return self.get_date_range_display(tz, force_show_end, as_html=True) - def get_time_range_display(self, tz=None, force_show_end=False) -> str: - """ - Returns a formatted string containing the start time and sometimes the end time - of the event with respect to the current locale and to the ``show_date_to`` - setting. Dates are not shown. This is usually used in combination with get_date_range_display - """ - tz = tz or self.timezone - - show_date_to = self.date_to and (self.settings.show_date_to or force_show_end) and ( - # Show date to if start and end are on the same day ("08:00-10:00") - self.date_to.astimezone(tz).date() == self.date_from.astimezone(tz).date() or - # Show date to if start and end are on consecutive days and less than 24h ("23:00-03:00") - (self.date_to.astimezone(tz).date() == self.date_from.astimezone(tz).date() + timedelta(days=1) and - self.date_to.astimezone(tz).time() < self.date_from.astimezone(tz).time()) - # Do not show end time if this is a 5-day event because there's no way to make it understandable - ) - if show_date_to: - return '{} – {}'.format( - _date(self.date_from.astimezone(tz), "TIME_FORMAT"), - _date(self.date_to.astimezone(tz), "TIME_FORMAT"), - ) - return _date(self.date_from.astimezone(tz), "TIME_FORMAT") - @property def timezone(self): return pytz_deprecation_shim.timezone(self.settings.timezone) diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index 8854151403..7ac8beff17 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -1199,6 +1199,8 @@ class Order(LockModel, LoggedModel): 'invoices': [i.pk for i in invoices] if invoices else [], 'attach_tickets': attach_tickets, 'attach_ical': attach_ical, + 'attach_other_files': attach_other_files, + 'attach_cached_files': [cf.filename for cf in attach_cached_files] if attach_cached_files else [], } ) @@ -2857,6 +2859,8 @@ class OrderPosition(AbstractPosition): 'invoices': [i.pk for i in invoices] if invoices else [], 'attach_tickets': attach_tickets, 'attach_ical': attach_ical, + 'attach_other_files': attach_other_files, + 'attach_cached_files': [], } ) diff --git a/src/pretix/base/models/waitinglist.py b/src/pretix/base/models/waitinglist.py index df5d979922..2b9b48df75 100644 --- a/src/pretix/base/models/waitinglist.py +++ b/src/pretix/base/models/waitinglist.py @@ -286,6 +286,8 @@ class WaitingListEntry(LoggedModel): 'subject': subject, 'message': email_content, 'recipient': recipient, + 'attach_other_files': attach_other_files, + 'attach_cached_files': [cf.filename for cf in attach_cached_files] if attach_cached_files else [], } ) diff --git a/src/pretix/base/payment.py b/src/pretix/base/payment.py index 69bea13597..02dc95991b 100644 --- a/src/pretix/base/payment.py +++ b/src/pretix/base/payment.py @@ -330,18 +330,18 @@ class BasePaymentProvider: label=_('Enable payment method'), required=False, )), - ('_availability_date', - RelativeDateField( - label=_('Available until'), - help_text=_('Users will not be able to choose this payment provider after the given date.'), - required=False, - )), ('_availability_start', RelativeDateField( label=_('Available from'), help_text=_('Users will not be able to choose this payment provider before the given date.'), required=False, )), + ('_availability_date', + RelativeDateField( + label=_('Available until'), + help_text=_('Users will not be able to choose this payment provider after the given date.'), + required=False, + )), ('_total_min', forms.DecimalField( label=_('Minimum order total'), @@ -1308,6 +1308,9 @@ class OffsettingProvider(BasePaymentProvider): def payment_control_render(self, request: HttpRequest, payment: OrderPayment) -> str: return _('Balanced against orders: %s' % ', '.join(payment.info_data['orders'])) + def refund_control_render(self, request: HttpRequest, payment: OrderPayment) -> str: + return self.payment_control_render(request, payment) + class GiftCardPayment(BasePaymentProvider): identifier = "giftcard" diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index 29154dfe76..9faa33722b 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -2108,7 +2108,7 @@ DEFAULTS = { 'form_class': I18nFormField, 'form_kwargs': dict( label=_("Event description"), - widget=I18nMarkdownTextarea, + widget=I18nTextarea, help_text=_( "You can use this to share information with your attendees, such as travel information or the link to a digital event. " "If you keep it empty, we will put a link to the event shop, the admission time, and your organizer name in there. " @@ -2987,7 +2987,7 @@ Your {organizer} team""")) # noqa: W291 help_text=_('This picture will be used as a preview if you post links to your ticket shop on social media. ' 'Facebook advises to use a picture size of 1200 x 630 pixels, however some platforms like ' 'WhatsApp and Reddit only show a square preview, so we recommend to make sure it still looks good ' - 'only the center square is shown. If you do not fill this, we will use the logo given above.') + 'if only the center square is shown. If you do not fill this, we will use the logo given above.') ), 'serializer_class': UploadedFileField, 'serializer_kwargs': dict( @@ -3291,6 +3291,8 @@ Your {organizer} team""")) # noqa: W291 label=_('Validity of gift card codes in years'), help_text=_('If you set a number here, gift cards will by default expire at the end of the year after this ' 'many years. If you keep it empty, gift cards do not have an explicit expiry date.'), + min_value=0, + max_value=99, ) }, 'cookie_consent': { @@ -3710,6 +3712,14 @@ COUNTRIES_WITH_STATE_IN_ADDRESS = { 'MY': (['State', 'Federal territory'], 'long'), 'MX': (['State', 'Federal district'], 'short'), 'US': (['State', 'Outlying area', 'District'], 'short'), + 'IT': (['Province', 'Free municipal consortium', 'Metropolitan city', 'Autonomous province', + 'Free municipal consortium', 'Decentralized regional entity'], 'short'), +} +COUNTRY_STATE_LABEL = { + # Countries in which the "State" field should not be called "State" + 'CA': pgettext_lazy('address', 'Province'), + 'JP': pgettext_lazy('address', 'Prefecture'), + 'IT': pgettext_lazy('address', 'Province'), } settings_hierarkey = Hierarkey(attribute_name='settings') diff --git a/src/pretix/base/templates/400_hostname.html b/src/pretix/base/templates/400_hostname.html index 881d0582c5..1d061d79b5 100644 --- a/src/pretix/base/templates/400_hostname.html +++ b/src/pretix/base/templates/400_hostname.html @@ -28,7 +28,7 @@ Host: {{ request.headers.Host }} {% if xfh %}
- X-Forwarded-For: {{ xfh }} + X-Forwarded-Host: {{ xfh }} {% if not settings.USE_X_FORWARDED_HOST %}({% trans "ignored" %}){% endif %} {% endif %} diff --git a/src/pretix/base/templates/pretixbase/email/order_details.html b/src/pretix/base/templates/pretixbase/email/order_details.html index 2ec01146ee..77f5f556c5 100644 --- a/src/pretix/base/templates/pretixbase/email/order_details.html +++ b/src/pretix/base/templates/pretixbase/email/order_details.html @@ -15,10 +15,7 @@ {{ event.name }}
{% if event.has_subevents and ev.name|upper != event.name|upper %}{{ ev.name }}
{% endif %} - {{ ev.get_date_range_display }} - {% if event.settings.show_times %} - {{ ev.date_from|date:"TIME_FORMAT" }} - {% endif %} + {{ ev.get_date_range_display_with_times }} @@ -107,10 +104,7 @@ {% if groupkey.2.name|upper != event.name|upper %} {{ groupkey.2.name }} · {% endif %} - {{ groupkey.2.get_date_range_display }} - {% if event.settings.show_times %} - {{ groupkey.2.date_from|date:"TIME_FORMAT" }} - {% endif %} + {{ groupkey.2.get_date_range_display_with_times }} {% if groupkey.2.location %}
{{ groupkey.2.location|oneline }} diff --git a/src/pretix/base/views/js_helpers.py b/src/pretix/base/views/js_helpers.py index be180e9cd5..303578ec78 100644 --- a/src/pretix/base/views/js_helpers.py +++ b/src/pretix/base/views/js_helpers.py @@ -21,12 +21,15 @@ # import pycountry from django.http import JsonResponse +from django.utils.translation import pgettext from pretix.base.addressvalidation import ( COUNTRIES_WITH_STREET_ZIPCODE_AND_CITY_REQUIRED, ) from pretix.base.models.tax import VAT_ID_COUNTRIES -from pretix.base.settings import COUNTRIES_WITH_STATE_IN_ADDRESS +from pretix.base.settings import ( + COUNTRIES_WITH_STATE_IN_ADDRESS, COUNTRY_STATE_LABEL, +) def states(request): @@ -35,7 +38,11 @@ def states(request): 'street': {'required': True}, 'zipcode': {'required': cc in COUNTRIES_WITH_STREET_ZIPCODE_AND_CITY_REQUIRED}, 'city': {'required': cc in COUNTRIES_WITH_STREET_ZIPCODE_AND_CITY_REQUIRED}, - 'state': {'visible': cc in COUNTRIES_WITH_STATE_IN_ADDRESS, 'required': cc in COUNTRIES_WITH_STATE_IN_ADDRESS}, + 'state': { + 'visible': cc in COUNTRIES_WITH_STATE_IN_ADDRESS, + 'required': cc in COUNTRIES_WITH_STATE_IN_ADDRESS, + 'label': COUNTRY_STATE_LABEL.get(cc, pgettext('address', 'State')), + }, 'vat_id': {'visible': cc in VAT_ID_COUNTRIES, 'required': False}, } if cc not in COUNTRIES_WITH_STATE_IN_ADDRESS: diff --git a/src/pretix/control/context.py b/src/pretix/control/context.py index 3cdfc1b0bf..cde58295af 100644 --- a/src/pretix/control/context.py +++ b/src/pretix/control/context.py @@ -43,7 +43,7 @@ from django.utils.translation import get_language from django_scopes import scope from pretix.base.models.auth import StaffSession -from pretix.base.settings import GlobalSettingsObject +from pretix.base.settings import COUNTRY_STATE_LABEL, GlobalSettingsObject from pretix.control.navigation import ( get_event_navigation, get_global_navigation, get_organizer_navigation, ) @@ -81,13 +81,13 @@ def _default_context(request): 'DEBUG': settings.DEBUG, } _html_head = [] - if hasattr(request, 'event') and request.user.is_authenticated: + if getattr(request, 'event', None) and request.user.is_authenticated: for receiver, response in html_head.send(request.event, request=request): _html_head.append(response) ctx['html_head'] = "".join(_html_head) _js_payment_weekdays_disabled = '[]' - if getattr(request, 'event', None) and hasattr(request, 'organizer') and request.user.is_authenticated: + if getattr(request, 'event', None) and getattr(request, 'organizer', None) and request.user.is_authenticated: ctx['nav_items'] = get_event_navigation(request) if request.event.settings.get('payment_term_weekdays'): @@ -140,6 +140,7 @@ def _default_context(request): ctx['js_time_format'] = get_javascript_format('TIME_INPUT_FORMATS') ctx['js_locale'] = get_moment_locale() ctx['select2locale'] = get_language()[:2] + ctx['COUNTRY_STATE_LABEL'] = COUNTRY_STATE_LABEL ctx['warning_update_available'] = False ctx['warning_update_check_active'] = False diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index 98ba32d7af..f947638161 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -1475,7 +1475,9 @@ class CountriesAndEUAndStates(CountriesAndEU): def __iter__(self): for country_code, country_name in super().__iter__(): yield country_code, country_name - if country_code in COUNTRIES_WITH_STATE_IN_ADDRESS: + if country_code in COUNTRIES_WITH_STATE_IN_ADDRESS and country_code not in {"IT"}: + # Special case for Italy: Provinces are used in addresses, but are too low-level to + # have influence on taxes, so we avoid the bloat in the list of selectable countries. types, form = COUNTRIES_WITH_STATE_IN_ADDRESS[country_code] yield from sorted(((state.code, country_name + " - " + state.name) for state in pycountry.subdivisions.get(country_code=country_code) diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index 44b63a82d6..14a0439b5f 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -70,6 +70,7 @@ from pretix.helpers.database import ( ) from pretix.helpers.dicts import move_to_end from pretix.helpers.i18n import get_format_without_seconds, i18ncomp +from pretix.helpers.models import flatten_choices PAYMENT_PROVIDERS = [] @@ -177,10 +178,10 @@ class FilterForm(forms.Form): elif isinstance(v, Model): val = '"' + str(v) + '"' elif isinstance(f, forms.MultipleChoiceField): - valdict = dict(f.choices) + valdict = dict(flatten_choices(f.choices)) val = ' or '.join([str(valdict.get(m)) for m in v]) elif isinstance(f, forms.ChoiceField): - val = str(dict(f.choices).get(v)) + val = str(dict(flatten_choices(f.choices)).get(v)) elif isinstance(v, datetime): val = date_format(v, 'SHORT_DATETIME_FORMAT') elif isinstance(v, Decimal): @@ -196,7 +197,6 @@ class OrderFilterForm(FilterForm): label=_('Search for…'), widget=forms.TextInput(attrs={ 'placeholder': _('Search for…'), - 'autofocus': 'autofocus' }), required=False ) @@ -270,6 +270,7 @@ class OrderFilterForm(FilterForm): matching_positions = OrderPosition.objects.filter( Q( Q(attendee_name_cached__icontains=u) | Q(attendee_email__icontains=u) + | Q(company__icontains=u) | Q(secret__istartswith=u) | Q(pseudonymization_id__istartswith=u) ) @@ -849,12 +850,18 @@ class EventOrderExpertFilterForm(EventOrderFilterForm): ).distinct() for q in self.event.questions.all(): if fdata.get(f'question_{q.pk}'): - if q.type == Question.TYPE_BOOLEAN: + if q.type in (Question.TYPE_BOOLEAN, Question.TYPE_NUMBER): answers = QuestionAnswer.objects.filter( question_id=q.pk, orderposition__order_id=OuterRef('pk'), answer__exact=fdata.get(f'question_{q.pk}') ) + elif q.type in (Question.TYPE_DATE, Question.TYPE_TIME, Question.TYPE_DATETIME): + answers = QuestionAnswer.objects.filter( + question_id=q.pk, + orderposition__order_id=OuterRef('pk'), + answer__exact=str(fdata.get(f'question_{q.pk}')) + ) elif q.type in (Question.TYPE_CHOICE, Question.TYPE_CHOICE_MULTIPLE): answers = QuestionAnswer.objects.filter( question_id=q.pk, @@ -980,7 +987,6 @@ class OrderPaymentSearchFilterForm(forms.Form): label=_('Search for…'), widget=forms.TextInput(attrs={ 'placeholder': _('Search for…'), - 'autofocus': 'autofocus' }), required=False, ) @@ -1242,7 +1248,6 @@ class SubEventFilterForm(FilterForm): label=_('Event name'), widget=forms.TextInput(attrs={ 'placeholder': _('Event name'), - 'autofocus': 'autofocus' }), required=False ) @@ -1375,7 +1380,6 @@ class OrganizerFilterForm(FilterForm): label=_('Organizer name'), widget=forms.TextInput(attrs={ 'placeholder': _('Organizer name'), - 'autofocus': 'autofocus' }), required=False ) @@ -1433,7 +1437,6 @@ class GiftCardFilterForm(FilterForm): label=_('Search query'), widget=forms.TextInput(attrs={ 'placeholder': _('Search query'), - 'autofocus': 'autofocus' }), required=False ) @@ -1485,7 +1488,6 @@ class CustomerFilterForm(FilterForm): label=_('Search query'), widget=forms.TextInput(attrs={ 'placeholder': _('Search query'), - 'autofocus': 'autofocus' }), required=False ) @@ -1558,7 +1560,6 @@ class ReusableMediaFilterForm(FilterForm): label=_('Search query'), widget=forms.TextInput(attrs={ 'placeholder': _('Search query'), - 'autofocus': 'autofocus' }), required=False ) @@ -1613,7 +1614,6 @@ class TeamFilterForm(FilterForm): label=_('Search query'), widget=forms.TextInput(attrs={ 'placeholder': _('Search query'), - 'autofocus': 'autofocus' }), required=False ) @@ -1695,7 +1695,6 @@ class EventFilterForm(FilterForm): label=_('Event name'), widget=forms.TextInput(attrs={ 'placeholder': _('Event name'), - 'autofocus': 'autofocus' }), required=False ) @@ -1878,7 +1877,6 @@ class CheckinListAttendeeFilterForm(FilterForm): label=_('Search attendee…'), widget=forms.TextInput(attrs={ 'placeholder': _('Search attendee…'), - 'autofocus': 'autofocus' }), required=False ) @@ -2027,7 +2025,6 @@ class UserFilterForm(FilterForm): label=_('Search query'), widget=forms.TextInput(attrs={ 'placeholder': _('Search query'), - 'autofocus': 'autofocus' }), required=False ) @@ -2119,7 +2116,6 @@ class VoucherFilterForm(FilterForm): label=_('Search voucher'), widget=forms.TextInput(attrs={ 'placeholder': _('Search voucher'), - 'autofocus': 'autofocus' }), required=False ) @@ -2597,7 +2593,6 @@ class DeviceFilterForm(FilterForm): label=_('Search query'), widget=forms.TextInput(attrs={ 'placeholder': _('Search query'), - 'autofocus': 'autofocus' }), required=False ) diff --git a/src/pretix/control/forms/mailsetup.py b/src/pretix/control/forms/mailsetup.py index d3c0e91c17..bece8832fb 100644 --- a/src/pretix/control/forms/mailsetup.py +++ b/src/pretix/control/forms/mailsetup.py @@ -25,6 +25,8 @@ import socket from django import forms from django.conf import settings from django.core.exceptions import ValidationError +from django.core.validators import RegexValidator +from django.utils.text import format_lazy from django.utils.translation import gettext_lazy as _ from pretix.base.forms import SecretKeySettingsField, SettingsForm @@ -54,6 +56,15 @@ class SMTPMailForm(SettingsForm): smtp_password = SecretKeySettingsField( label=_("Password"), required=False, + validators=[RegexValidator( + r"^[A-Za-z0-9!\"#$%&'()*+,./:;<=>?@\^_`{}|~-]+$", + message=format_lazy( + _("The password contains characters not supported by our email system. Please only use characters " + "A-Z, a-z, 0-9, and common special characters ({characters})."), + + characters=r'!"#$%%&\'()*+,-./:;<=>?@\^_`{}|~' + ) + )] ) smtp_use_tls = forms.BooleanField( label=_("Use STARTTLS"), diff --git a/src/pretix/control/forms/orders.py b/src/pretix/control/forms/orders.py index f5be0b529d..77625386fe 100644 --- a/src/pretix/control/forms/orders.py +++ b/src/pretix/control/forms/orders.py @@ -33,6 +33,7 @@ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under the License. +import os.path from datetime import date, datetime, time from decimal import Decimal @@ -68,6 +69,7 @@ from pretix.base.services.placeholders import FormPlaceholderMixin from pretix.base.services.pricing import get_price from pretix.control.forms import SplitDateTimeField from pretix.control.forms.widgets import Select2 +from pretix.helpers.hierarkey import clean_filename from pretix.helpers.money import change_decimal_field @@ -723,6 +725,9 @@ class OrderMailForm(forms.Form): help_text=_("Will be ignored if tickets exceed a given size limit to ensure email deliverability."), required=False ) + attach_new_order = forms.BooleanField( + required=False + ) attach_invoices = forms.ModelMultipleChoiceField( label=_("Attach invoices"), widget=forms.CheckboxSelectMultiple, @@ -759,6 +764,12 @@ class OrderMailForm(forms.Form): self.fields['attach_invoices'].queryset = order.invoices.all() self._set_field_placeholders('message', ['event', 'order']) self._set_field_placeholders('subject', ['event', 'order']) + if order.event.settings.mail_attachment_new_order: + self.fields['attach_new_order'].label = _('Attach {file}').format( + file=clean_filename(os.path.basename(order.event.settings.mail_attachment_new_order.name)) + ) + else: + del self.fields['attach_new_order'] class OrderPositionMailForm(OrderMailForm): diff --git a/src/pretix/control/logdisplay.py b/src/pretix/control/logdisplay.py index 6e1086021d..7005579dc7 100644 --- a/src/pretix/control/logdisplay.py +++ b/src/pretix/control/logdisplay.py @@ -43,7 +43,6 @@ from django.dispatch import receiver from django.urls import reverse from django.utils.formats import date_format from django.utils.html import escape, format_html -from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _, pgettext_lazy from i18nfield.strings import LazyI18nString @@ -286,7 +285,7 @@ class OrderChangedSplit(OrderChangeLogEntryType): _('Position #{posid} ({old_item}, {old_price}) split into new order: {order}'), old_item=escape(old_item), posid=data.get('positionid', '?'), - order=format_html(mark_safe('{}'), url, data['new_order']), + order=format_html('{}', url, data['new_order']), old_price=money_filter(Decimal(data['old_price']), event.currency), ) @@ -303,7 +302,7 @@ class OrderChangedSplitFrom(OrderLogEntryType): }) return format_html( _('This order has been created by splitting the order {order}'), - order=format_html(mark_safe('{}'), url, data['original_order']), + order=format_html('{}', url, data['original_order']), ) diff --git a/src/pretix/control/navigation.py b/src/pretix/control/navigation.py index c081961aa6..bfd5aef7c0 100644 --- a/src/pretix/control/navigation.py +++ b/src/pretix/control/navigation.py @@ -59,7 +59,7 @@ def get_event_navigation(request: HttpRequest): 'event': request.event.slug, 'organizer': request.event.organizer.slug, }), - 'active': url.url_name == 'event.settings.payment', + 'active': url.url_name in ('event.settings.payment', 'event.settings.payment.provider'), }, { 'label': _('Plugins'), diff --git a/src/pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html b/src/pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html index 475fbc2201..8d930241fb 100644 --- a/src/pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html +++ b/src/pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html @@ -13,7 +13,7 @@ {% endfor %}

{% blocktrans trimmed count count=cnt %} - Are you sure you want to permanently delete the check-ins of one ticket. + Are you sure you want to permanently delete the check-ins of one ticket? {% plural %} Are you sure you want to permanently delete the check-ins of {{ count }} tickets? {% endblocktrans %} diff --git a/src/pretix/control/templates/pretixcontrol/checkin/index.html b/src/pretix/control/templates/pretixcontrol/checkin/index.html index d22e2339e6..652a8819b0 100644 --- a/src/pretix/control/templates/pretixcontrol/checkin/index.html +++ b/src/pretix/control/templates/pretixcontrol/checkin/index.html @@ -148,7 +148,7 @@ {{ e.item }}{% if e.variation %} – {{ e.variation }}{% endif %} {% if request.event.has_subevents and not checkinlist.subevent %} - {{ e.subevent.name }} – {{ e.subevent.get_date_range_display }} {{ e.subevent.date_from|date:"TIME_FORMAT" }} + {{ e.subevent.name }} – {{ e.subevent.get_date_range_display_with_times }} {% endif %} {% if seats %} diff --git a/src/pretix/control/templates/pretixcontrol/checkin/lists.html b/src/pretix/control/templates/pretixcontrol/checkin/lists.html index e131f7fdb0..4a96b051ff 100644 --- a/src/pretix/control/templates/pretixcontrol/checkin/lists.html +++ b/src/pretix/control/templates/pretixcontrol/checkin/lists.html @@ -127,8 +127,7 @@ {% if request.event.has_subevents %} {% if cl.subevent %} - {{ cl.subevent.name }} – {{ cl.subevent.get_date_range_display }} - {{ cl.subevent.date_from|date:"TIME_FORMAT" }} + {{ cl.subevent.name }} – {{ cl.subevent.get_date_range_display_with_times }} {% else %} diff --git a/src/pretix/control/templates/pretixcontrol/event/fragment_plugin_description.html b/src/pretix/control/templates/pretixcontrol/event/fragment_plugin_description.html index 588e872766..fa370d7c1f 100644 --- a/src/pretix/control/templates/pretixcontrol/event/fragment_plugin_description.html +++ b/src/pretix/control/templates/pretixcontrol/event/fragment_plugin_description.html @@ -7,7 +7,7 @@ {% endblocktrans %}

{% endif %} {% endif %} -

{{ plugin.description|safe }}

+

{{ plugin.description|safe }}

{% if plugin.restricted and plugin.module not in request.event.settings.allowed_restricted_plugins %}

diff --git a/src/pretix/control/templates/pretixcontrol/event/payment.html b/src/pretix/control/templates/pretixcontrol/event/payment.html index 1583ff9d6c..bf481901c4 100644 --- a/src/pretix/control/templates/pretixcontrol/event/payment.html +++ b/src/pretix/control/templates/pretixcontrol/event/payment.html @@ -48,19 +48,19 @@ - {% empty %} + {% endfor %} - + +
{% url "control:event.settings.plugins" event=request.event.slug organizer=request.organizer.slug as plugin_settings_url %} - {% blocktrans trimmed with plugin_settings_href='href="'|add:plugin_settings_url|add:'"'|safe %} - There are no payment providers available. Please go to the - plugin settings and activate one or more payment plugins. - {% endblocktrans %} + + {% trans "Enable additional payment plugins" %} + - {% endfor %} +

{% trans "Deadlines" %} diff --git a/src/pretix/control/templates/pretixcontrol/event/plugins.html b/src/pretix/control/templates/pretixcontrol/event/plugins.html index 5575abc89f..6b32d6a57f 100644 --- a/src/pretix/control/templates/pretixcontrol/event/plugins.html +++ b/src/pretix/control/templates/pretixcontrol/event/plugins.html @@ -10,20 +10,40 @@ software functionality, connect your event to third-party services, or apply other forms of customizations. {% endblocktrans %}

+ {% if "success" in request.GET %} +
+ {% trans "Your changes have been saved." %} +
+ {% endif %} +
+
+

+
+
+

+ + +

+
+
{% csrf_token %} - {% if "success" in request.GET %} -
- {% trans "Your changes have been saved." %} +
+
+ + {% trans "Search results" %}
- {% endif %} -
+
+
+
+
+
{% for cat, catlabel, plist, has_pictures in plugins %} -
+
{{ catlabel }}
- {% for plugin in plist %} -
+ {% for plugin, is_active, settings_links, navigation_links in plist %} +
{% if plugin.featured %}
@@ -49,8 +69,8 @@ {% if show_meta %} {{ plugin.version }} {% endif %} - {% if plugin.module in plugins_active %} - + {% if is_active %} + {% trans "Active" %} @@ -66,8 +86,32 @@
{% trans "Not available" %}
- {% elif plugin.module in plugins_active %} + {% elif is_active %}
+ {% if navigation_links %} +
+ + +
+ {% endif %} + {% if settings_links %} +
+ + +
+ {% endif %}
@@ -86,6 +130,7 @@
{% endfor %} -
+
+ {% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/items/quotas.html b/src/pretix/control/templates/pretixcontrol/items/quotas.html index f77996662b..c6509296fa 100644 --- a/src/pretix/control/templates/pretixcontrol/items/quotas.html +++ b/src/pretix/control/templates/pretixcontrol/items/quotas.html @@ -85,7 +85,7 @@ {% if request.event.has_subevents %} - {{ q.subevent.name }} – {{ q.subevent.get_date_range_display }} {{ q.subevent.date_from|date:"TIME_FORMAT" }} + {{ q.subevent.name }} – {{ q.subevent.get_date_range_display_with_times }} {% endif %} {% if q.size == None %}Unlimited{% else %}{{ q.size }}{% endif %} diff --git a/src/pretix/control/templates/pretixcontrol/order/index.html b/src/pretix/control/templates/pretixcontrol/order/index.html index af221e38e0..ad5ae66c00 100644 --- a/src/pretix/control/templates/pretixcontrol/order/index.html +++ b/src/pretix/control/templates/pretixcontrol/order/index.html @@ -9,6 +9,7 @@ {% load eventsignal %} {% load l10n %} {% load phone_format %} +{% load getitem %} {% block title %} {% blocktrans trimmed with code=order.code %} Order details: {{ code }} @@ -397,7 +398,7 @@ {% elif c.auto_checked_in %} {% else %} - + {% endif %} {% endfor %} {% endif %} @@ -428,11 +429,7 @@ {% endif %} {% if line.subevent %}
- {{ line.subevent.name }} · {{ line.subevent.get_date_range_display }} - {% if event.settings.show_times %} - - {{ line.subevent.date_from|date:"TIME_FORMAT" }} - {% endif %} + {{ line.subevent.name }} · {{ line.subevent.get_date_range_display_with_times }} {% endif %} {% if line.used_membership %}
@@ -560,8 +557,8 @@ {% if line.street or line.zipcode or line.city or line.country %} {{ line.street|default_if_none:""|linebreaksbr }}
{{ line.zipcode|default_if_none:"" }} {{ line.city|default_if_none:"" }}
+ {% if line.state %}{{ line.state_for_address }}
{% endif %} {{ line.country.name|default_if_none:"" }} - {% if line.state %}
{{ line.state }}{% endif %} {% else %} {% trans "not answered" %} {% endif %} @@ -959,7 +956,7 @@
{% trans "Country" %}
{{ order.invoice_address.country.name|default:order.invoice_address.country_old }}
{% if order.invoice_address.state %} -
{% trans "State" context "address" %}
+
{% trans "State" context "address" as state_label %}{{ COUNTRY_STATE_LABEL|getitem:order.invoice_address.country.code|default:state_label }}
{{ order.invoice_address.state_name }}
{% endif %} {% if request.event.settings.invoice_address_vatid %} diff --git a/src/pretix/control/templates/pretixcontrol/order/mail_history.html b/src/pretix/control/templates/pretixcontrol/order/mail_history.html index e3f72f5437..85d85693f0 100644 --- a/src/pretix/control/templates/pretixcontrol/order/mail_history.html +++ b/src/pretix/control/templates/pretixcontrol/order/mail_history.html @@ -51,6 +51,44 @@ {{ log.parsed_data.subject }}

{{ log.parsed_data.message }}
+
    + {% comment %} + {# Unfortunately, we do not have reliable info whether tickets were attached. #} + {% if log.parsed_data.attach_tickets %} +
  • {% trans "Tickets" %}
  • + {% endif %} + {% endcomment %} + {% if log.parsed_data.attach_ical %} +
  • {% trans "Calendar invite" %}
  • + {% endif %} + {% if log.parsed_data.invoices %} + {% for i in log.parsed_invoices %} +
  • + + + {% if i.is_cancellation %}{% trans "Cancellation" context "invoice" %}{% else %}{% trans "Invoice" %}{% endif %} + {{ i.number }} + +
  • + {% endfor %} + {% endif %} + {% if log.parsed_data.attach_other_files %} + {% for f in log.parsed_other_files %} +
  • + + {{ f }} +
  • + {% endfor %} + {% endif %} + {% if log.parsed_data.attach_cached_files %} + {% for f in log.parsed_data.attach_cached_files %} +
  • + + {{ f }} +
  • + {% endfor %} + {% endif %} +
{% endif %} {% endfor %} diff --git a/src/pretix/control/templates/pretixcontrol/order/sendmail.html b/src/pretix/control/templates/pretixcontrol/order/sendmail.html index 5681c1cd3c..42d3d693ca 100644 --- a/src/pretix/control/templates/pretixcontrol/order/sendmail.html +++ b/src/pretix/control/templates/pretixcontrol/order/sendmail.html @@ -19,6 +19,9 @@ {% bootstrap_field form.subject layout='horizontal' %} {% bootstrap_field form.message layout='horizontal' %} {% bootstrap_field form.attach_tickets layout='horizontal' %} + {% if form.attach_new_order %} + {% bootstrap_field form.attach_new_order layout='horizontal' %} + {% endif %} {% if form.attach_invoices %} {% bootstrap_field form.attach_invoices layout='horizontal' %} {% endif %} diff --git a/src/pretix/control/templates/pretixcontrol/orders/index.html b/src/pretix/control/templates/pretixcontrol/orders/index.html index cc1319f0a9..f1cf150748 100644 --- a/src/pretix/control/templates/pretixcontrol/orders/index.html +++ b/src/pretix/control/templates/pretixcontrol/orders/index.html @@ -44,8 +44,7 @@

- + diff --git a/src/pretix/control/templates/pretixcontrol/orders/search.html b/src/pretix/control/templates/pretixcontrol/orders/search.html index 2905bfef04..047c835d78 100644 --- a/src/pretix/control/templates/pretixcontrol/orders/search.html +++ b/src/pretix/control/templates/pretixcontrol/orders/search.html @@ -7,7 +7,8 @@ {% block title %}{% trans "Order search" %}{% endblock %} {% block content %}

{% trans "Order search" %}

- + + {% csrf_token %} {% for f in forms %} {% bootstrap_form_errors f layout='control' %} {% for field in f %} diff --git a/src/pretix/control/templates/pretixcontrol/vouchers/index.html b/src/pretix/control/templates/pretixcontrol/vouchers/index.html index 0620162146..befc9f0575 100644 --- a/src/pretix/control/templates/pretixcontrol/vouchers/index.html +++ b/src/pretix/control/templates/pretixcontrol/vouchers/index.html @@ -15,7 +15,7 @@

- + @@ -188,10 +188,7 @@ {% if request.event.has_subevents %} - {{ v.subevent.name }} – {{ v.subevent.get_date_range_display }} - {% if request.event.settings.show_times %} - {{ v.subevent.date_from|date:"TIME_FORMAT" }} - {% endif %} + {{ v.subevent.name }} – {{ v.subevent.get_date_range_display_with_times }} {% endif %} diff --git a/src/pretix/control/views/event.py b/src/pretix/control/views/event.py index 3ee6a14a0d..4667a6b96f 100644 --- a/src/pretix/control/views/event.py +++ b/src/pretix/control/views/event.py @@ -34,6 +34,7 @@ # License for the specific language governing permissions and limitations under the License. import json +import logging import operator import re from collections import OrderedDict @@ -62,8 +63,9 @@ from django.http import ( from django.shortcuts import get_object_or_404, redirect from django.urls import reverse from django.utils.functional import cached_property -from django.utils.html import conditional_escape +from django.utils.html import conditional_escape, format_html from django.utils.http import url_has_allowed_host_and_scheme +from django.utils.safestring import mark_safe from django.utils.timezone import now from django.utils.translation import gettext, gettext_lazy as _, gettext_noop from django.views.generic import FormView, ListView @@ -109,6 +111,8 @@ from ...helpers.format import ( from ..logdisplay import OVERVIEW_BANLIST from . import CreateView, PaginationMixin, UpdateView +logger = logging.getLogger(__name__) + class EventSettingsViewMixin: def get_context_data(self, **kwargs): @@ -339,12 +343,29 @@ class EventPlugins(EventSettingsViewMixin, EventPermissionRequiredMixin, Templat def get_object(self, queryset=None) -> Event: return self.request.event - def get_context_data(self, *args, **kwargs) -> dict: + def available_plugins(self, event): from pretix.base.plugins import get_all_plugins + return (p for p in get_all_plugins(event) if not p.name.startswith('.') + and getattr(p, 'visible', True)) + + def prepare_links(self, pluginmeta, key): + links = getattr(pluginmeta, key, []) + try: + return [ + ( + reverse(urlname, kwargs={"organizer": self.request.organizer.slug, "event": self.request.event.slug, **kwargs}), + " > ".join(map(str, linktext)) if isinstance(linktext, tuple) else linktext, + ) for linktext, urlname, kwargs in links + ] + except: + logger.exception('Failed to resolve settings links.') + return [] + + def get_context_data(self, *args, **kwargs) -> dict: context = super().get_context_data(*args, **kwargs) - plugins = [p for p in get_all_plugins(self.object) if not p.name.startswith('.') - and getattr(p, 'visible', True)] + plugins = list(self.available_plugins(self.object)) + order = [ 'FEATURE', 'PAYMENT', @@ -375,12 +396,18 @@ class EventPlugins(EventSettingsViewMixin, EventPermissionRequiredMixin, Templat ) plugins_grouped = [(c, list(plist)) for c, plist in plugins_grouped] + active_plugins = self.object.get_plugins() + + def plugin_details(plugin): + is_active = plugin.module in active_plugins + settings_links = self.prepare_links(plugin, 'settings_links') if is_active else None + navigation_links = self.prepare_links(plugin, 'navigation_links') if is_active else None + return (plugin, is_active, settings_links, navigation_links) context['plugins'] = sorted([ - (c, labels.get(c, c), plist, any(getattr(p, 'picture', None) for p in plist)) + (c, labels.get(c, c), map(plugin_details, plist), any(getattr(p, 'picture', None) for p in plist)) for c, plist in plugins_grouped ], key=lambda c: (order.index(c[0]), c[1]) if c[0] in order else (999, str(c[1]))) - context['plugins_active'] = self.object.get_plugins() context['show_meta'] = settings.PRETIX_PLUGINS_SHOW_META return context @@ -390,13 +417,10 @@ class EventPlugins(EventSettingsViewMixin, EventPermissionRequiredMixin, Templat return self.render_to_response(context) def post(self, request, *args, **kwargs): - from pretix.base.plugins import get_all_plugins - self.object = self.get_object() plugins_available = { - p.module: p for p in get_all_plugins(self.object) - if not p.name.startswith('.') and getattr(p, 'visible', True) + p.module: p for p in self.available_plugins(self.object) } with transaction.atomic(): @@ -404,19 +428,38 @@ class EventPlugins(EventSettingsViewMixin, EventPermissionRequiredMixin, Templat if key.startswith("plugin:"): module = key.split(":")[1] if value == "enable" and module in plugins_available: - if getattr(plugins_available[module], 'restricted', False): + pluginmeta = plugins_available[module] + if getattr(pluginmeta, 'restricted', False): if module not in request.event.settings.allowed_restricted_plugins: continue self.request.event.log_action('pretix.event.plugins.enabled', user=self.request.user, data={'plugin': module}) self.object.enable_plugin(module, allow_restricted=request.event.settings.allowed_restricted_plugins) + + links = self.prepare_links(pluginmeta, 'settings_links') + if links: + info = [ + '

', + format_html(_('The plugin {} is now active, you can configure it here:'), + format_html("{}", pluginmeta.name)), + '

', + ] + [ + format_html('{} ', url, text) + for url, text in links + ] + ['

'] + else: + info = [ + format_html(_('The plugin {} is now active.'), + format_html("{}", pluginmeta.name)), + ] + messages.success(self.request, mark_safe("".join(info))) else: self.request.event.log_action('pretix.event.plugins.disabled', user=self.request.user, data={'plugin': module}) self.object.disable_plugin(module) + messages.success(self.request, _('The plugin has been disabled.')) self.object.save() - messages.success(self.request, _('Your changes have been saved.')) return redirect(self.get_success_url()) def get_success_url(self) -> str: diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index 82bd4ca600..cca5fef1f4 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -135,6 +135,7 @@ from pretix.control.views import PaginationMixin from pretix.helpers import OF_SELF from pretix.helpers.compat import CompatDeleteView from pretix.helpers.format import SafeFormatter, format_map +from pretix.helpers.hierarkey import clean_filename from pretix.helpers.safedownload import check_token from pretix.presale.signals import question_form_fields @@ -171,6 +172,26 @@ class OrderSearch(OrderSearchMixin, EventPermissionRequiredMixin, TemplateView): ctx['forms'] = self.get_forms() return ctx + def post(self, request, *args, **kwargs): + all_valid = True + for f in self.get_forms(): + if not f.is_valid(): + all_valid = False + + if all_valid: + data = request.POST.copy() + data.pop('csrfmiddlewaretoken', None) + return redirect(reverse( + "control:event.orders", + kwargs={ + "event": request.event.slug, + "organizer": request.event.organizer.slug, + } + ) + '?' + data.urlencode()) + else: + messages.error(request, _("We could not process your input. See below for details.")) + return self.get(request, *args, **kwargs) + class BaseOrderBulkActionView(OrderSearchMixin, EventPermissionRequiredMixin, AsyncFormView): template_name = 'pretixcontrol/orders/bulk_action.html' @@ -2364,6 +2385,9 @@ class OrderSendMail(EventPermissionRequiredMixin, OrderViewMixin, FormView): self.request.user, auto_email=False, attach_tickets=form.cleaned_data.get('attach_tickets', False), invoices=form.cleaned_data.get('attach_invoices', []), + attach_other_files=[a for a in [ + self.request.event.settings.get('mail_attachment_new_order', as_type=str, default='')[len('file://'):] + ] if a] if form.cleaned_data.get('attach_new_order', False) else [], ) messages.success(self.request, _('Your message has been queued and will be sent to {}.'.format(order.email))) @@ -2432,6 +2456,9 @@ class OrderPositionSendMail(OrderSendMail): 'pretix.event.order.position.email.custom_sent', self.request.user, attach_tickets=form.cleaned_data.get('attach_tickets', False), + attach_other_files=[a for a in [ + self.request.event.settings.get('mail_attachment_new_order', as_type=str, default='')[len('file://'):] + ] if a] if form.cleaned_data.get('attach_new_order', False) else [], ) messages.success(self.request, _('Your message has been queued and will be sent to {}.'.format(position.attendee_email))) @@ -2461,6 +2488,23 @@ class OrderEmailHistory(EventPermissionRequiredMixin, OrderViewMixin, ListView): ) return qs + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + for l in ctx["logs"]: + invoice_ids = l.parsed_data.get("invoices") + if invoice_ids: + if type(invoice_ids) is int: + invoice_ids = [invoice_ids] + l.parsed_invoices = Invoice.objects.filter( + event=self.request.event, + pk__in=invoice_ids, + ) + if l.parsed_data.get("attach_other_files"): + l.parsed_other_files = [ + clean_filename(os.path.basename(f)) for f in l.parsed_data["attach_other_files"] + ] + return ctx + class AnswerDownload(EventPermissionRequiredMixin, OrderViewMixin, ListView): permission = 'can_view_orders' diff --git a/src/pretix/control/views/pdf.py b/src/pretix/control/views/pdf.py index ce7de7ce77..a83a29efbd 100644 --- a/src/pretix/control/views/pdf.py +++ b/src/pretix/control/views/pdf.py @@ -104,9 +104,26 @@ class BaseEditorView(EventPermissionRequiredMixin, TemplateView): scheme = PERSON_NAME_SCHEMES[self.request.event.settings.name_scheme] sample = {k: str(v) for k, v in scheme['sample'].items()} - p = order.positions.create(item=item, attendee_name_parts=sample, price=item.default_price) - order.positions.create(item=item2, attendee_name_parts=sample, price=item.default_price, addon_to=p) - order.positions.create(item=item2, attendee_name_parts=sample, price=item.default_price, addon_to=p) + p = order.positions.create( + item=item, + attendee_name_parts=sample, + company=_("Sample company"), + price=item.default_price + ) + order.positions.create( + item=item2, + attendee_name_parts=sample, + company=_("Sample company"), + price=item.default_price, + addon_to=p + ) + order.positions.create( + item=item2, + attendee_name_parts=sample, + company=_("Sample company"), + price=item.default_price, + addon_to=p + ) InvoiceAddress.objects.create(order=order, name_parts=sample, company=_("Sample company")) return p diff --git a/src/pretix/helpers/models.py b/src/pretix/helpers/models.py index 7d7449193c..0896cd9f4f 100644 --- a/src/pretix/helpers/models.py +++ b/src/pretix/helpers/models.py @@ -44,3 +44,13 @@ def modelcopy(obj: models.Model, **kwargs): else: setattr(n, f.name, copy.deepcopy(val)) return n + + +# django 5 contains this in django.utils.choices.flatten_choices +def flatten_choices(choices): + """Flatten choices by removing nested values.""" + for value_or_group, label_or_nested in choices or (): + if isinstance(label_or_nested, (list, tuple)): + yield from label_or_nested + else: + yield value_or_group, label_or_nested diff --git a/src/pretix/locale/ang/LC_MESSAGES/django.po b/src/pretix/locale/ang/LC_MESSAGES/django.po index 326caf4671..08693664ae 100644 --- a/src/pretix/locale/ang/LC_MESSAGES/django.po +++ b/src/pretix/locale/ang/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-25 10:10+0000\n" +"POT-Creation-Date: 2025-03-25 15:44+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -211,13 +211,13 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1077 #: pretix/base/modelimport_orders.py:602 #: pretix/base/modelimport_vouchers.py:326 pretix/base/models/orders.py:272 -#: pretix/base/models/vouchers.py:292 pretix/control/forms/filter.py:556 -#: pretix/control/templates/pretixcontrol/order/index.html:904 +#: pretix/base/models/vouchers.py:292 pretix/control/forms/filter.py:557 +#: pretix/control/templates/pretixcontrol/order/index.html:901 #: pretix/control/templates/pretixcontrol/organizers/webhooks.html:38 #: pretix/control/templates/pretixcontrol/user/staff_session_list.html:21 #: pretix/control/views/vouchers.py:121 #: pretix/plugins/banktransfer/refund_export.py:46 -#: pretix/plugins/checkinlists/exporters.py:521 +#: pretix/plugins/checkinlists/exporters.py:523 msgid "Comment" msgstr "" @@ -225,14 +225,14 @@ msgstr "" msgid "The product \"{}\" is not assigned to a quota." msgstr "" -#: pretix/api/serializers/checkin.py:65 pretix/base/models/event.py:1667 +#: pretix/api/serializers/checkin.py:65 pretix/base/models/event.py:1680 #: pretix/base/models/items.py:1916 pretix/base/models/items.py:2174 msgid "One or more items do not belong to this event." msgstr "" #: pretix/api/serializers/checkin.py:69 pretix/api/serializers/checkin.py:72 #: pretix/base/models/items.py:2185 pretix/base/models/items.py:2188 -#: pretix/base/models/waitinglist.py:305 pretix/base/models/waitinglist.py:308 +#: pretix/base/models/waitinglist.py:307 pretix/base/models/waitinglist.py:310 msgid "The subevent does not belong to this event." msgstr "" @@ -330,7 +330,7 @@ msgid "\"{input}\" is not a valid choice." msgstr "" #: pretix/api/serializers/order.py:1374 pretix/api/views/cart.py:224 -#: pretix/base/services/orders.py:1530 +#: pretix/base/services/orders.py:1532 #, python-brace-format msgid "The selected seat \"{seat}\" is not available." msgstr "" @@ -376,34 +376,34 @@ msgid "" "The specified voucher has already been used the maximum number of times." msgstr "" -#: pretix/api/views/checkin.py:610 pretix/api/views/checkin.py:617 +#: pretix/api/views/checkin.py:611 pretix/api/views/checkin.py:618 msgid "Medium connected to other event" msgstr "" -#: pretix/api/views/oauth.py:107 pretix/control/logdisplay.py:693 +#: pretix/api/views/oauth.py:107 pretix/control/logdisplay.py:692 #, python-brace-format msgid "" "The application \"{application_name}\" has been authorized to access your " "account." msgstr "" -#: pretix/api/views/order.py:607 pretix/control/views/orders.py:1588 +#: pretix/api/views/order.py:608 pretix/control/views/orders.py:1609 #: pretix/presale/views/order.py:731 pretix/presale/views/order.py:804 msgid "You cannot generate an invoice for this order." msgstr "" -#: pretix/api/views/order.py:612 pretix/control/views/orders.py:1590 +#: pretix/api/views/order.py:613 pretix/control/views/orders.py:1611 #: pretix/presale/views/order.py:733 pretix/presale/views/order.py:806 msgid "An invoice for this order already exists." msgstr "" -#: pretix/api/views/order.py:638 pretix/control/views/orders.py:1716 +#: pretix/api/views/order.py:639 pretix/control/views/orders.py:1737 #: pretix/control/views/users.py:145 msgid "There was an error sending the mail. Please try again later." msgstr "" -#: pretix/api/views/order.py:718 pretix/base/services/cart.py:215 -#: pretix/base/services/orders.py:186 pretix/presale/views/order.py:788 +#: pretix/api/views/order.py:719 pretix/base/services/cart.py:215 +#: pretix/base/services/orders.py:187 pretix/presale/views/order.py:788 msgid "One of the selected products is not available in the selected country." msgstr "" @@ -422,7 +422,7 @@ msgstr "" #: pretix/api/webhooks.py:249 pretix/base/models/checkin.py:354 #: pretix/base/notifications.py:251 #: pretix/control/templates/pretixcontrol/event/mail.html:114 -#: pretix/control/views/orders.py:1549 +#: pretix/control/views/orders.py:1570 msgid "Order canceled" msgstr "" @@ -578,11 +578,11 @@ msgstr "" #: pretix/base/addressvalidation.py:100 pretix/base/addressvalidation.py:103 #: pretix/base/addressvalidation.py:108 pretix/base/forms/questions.py:960 -#: pretix/base/forms/questions.py:991 pretix/base/forms/questions.py:1177 +#: pretix/base/forms/questions.py:991 pretix/base/forms/questions.py:1180 #: pretix/base/payment.py:97 pretix/control/forms/event.py:796 #: pretix/control/forms/event.py:802 pretix/control/forms/event.py:846 -#: pretix/control/forms/event.py:1443 pretix/control/forms/mailsetup.py:76 -#: pretix/control/forms/mailsetup.py:118 +#: pretix/control/forms/event.py:1443 pretix/control/forms/mailsetup.py:87 +#: pretix/control/forms/mailsetup.py:129 #: pretix/plugins/banktransfer/payment.py:673 #: pretix/plugins/banktransfer/payment.py:679 #: pretix/presale/forms/customer.py:140 @@ -617,19 +617,19 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/customer.html:49 #: pretix/control/templates/pretixcontrol/organizers/customers.html:59 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:161 -#: pretix/plugins/checkinlists/exporters.py:505 +#: pretix/plugins/checkinlists/exporters.py:507 #: pretix/presale/checkoutflow.py:1532 pretix/presale/forms/checkout.py:57 #: pretix/presale/forms/customer.py:56 pretix/presale/forms/customer.py:131 #: pretix/presale/forms/customer.py:286 pretix/presale/forms/customer.py:332 #: pretix/presale/forms/customer.py:375 pretix/presale/forms/user.py:40 #: pretix/presale/templates/pretixpresale/event/checkout_customer.html:30 -#: pretix/presale/templates/pretixpresale/event/order.html:299 +#: pretix/presale/templates/pretixpresale/event/order.html:300 msgid "Email" msgstr "" #: pretix/base/auth.py:157 pretix/base/forms/auth.py:164 -#: pretix/base/forms/auth.py:218 pretix/base/models/auth.py:672 -#: pretix/base/models/customers.py:96 pretix/control/forms/mailsetup.py:55 +#: pretix/base/forms/auth.py:218 pretix/base/models/auth.py:675 +#: pretix/base/models/customers.py:96 pretix/control/forms/mailsetup.py:57 #: pretix/presale/forms/customer.py:60 pretix/presale/forms/customer.py:290 msgid "Password" msgstr "" @@ -729,7 +729,7 @@ msgstr "" #: pretix/base/email.py:203 pretix/base/exporters/items.py:157 #: pretix/base/exporters/items.py:205 pretix/control/views/main.py:322 -#: pretix/plugins/badges/apps.py:47 pretix/plugins/badges/models.py:48 +#: pretix/plugins/badges/apps.py:50 pretix/plugins/badges/models.py:48 #: pretix/plugins/badges/templates/pretixplugins/badges/index.html:35 #: pretix/plugins/badges/templates/pretixplugins/badges/index.html:55 #: pretix/plugins/ticketoutputpdf/models.py:328 @@ -797,14 +797,14 @@ msgstr "" #: pretix/base/exporters/answers.py:76 pretix/base/exporters/orderlist.py:583 #: pretix/base/exporters/orderlist.py:898 #: pretix/base/exporters/orderlist.py:1138 pretix/base/models/checkin.py:58 -#: pretix/base/models/items.py:2038 pretix/base/models/orders.py:1483 -#: pretix/base/models/orders.py:2995 pretix/base/models/vouchers.py:187 -#: pretix/base/models/waitinglist.py:61 pretix/control/forms/event.py:1606 -#: pretix/control/forms/filter.py:424 pretix/control/forms/filter.py:1903 -#: pretix/control/forms/filter.py:2127 pretix/control/forms/filter.py:2242 -#: pretix/control/forms/filter.py:2324 pretix/control/forms/filter.py:2541 -#: pretix/control/forms/item.py:327 pretix/control/forms/orders.py:346 -#: pretix/control/forms/orders.py:398 pretix/control/forms/orders.py:828 +#: pretix/base/models/items.py:2038 pretix/base/models/orders.py:1485 +#: pretix/base/models/orders.py:2999 pretix/base/models/vouchers.py:187 +#: pretix/base/models/waitinglist.py:61 pretix/control/forms/event.py:1608 +#: pretix/control/forms/filter.py:425 pretix/control/forms/filter.py:1901 +#: pretix/control/forms/filter.py:2123 pretix/control/forms/filter.py:2238 +#: pretix/control/forms/filter.py:2320 pretix/control/forms/filter.py:2537 +#: pretix/control/forms/item.py:327 pretix/control/forms/orders.py:348 +#: pretix/control/forms/orders.py:400 pretix/control/forms/orders.py:839 #: pretix/control/forms/vouchers.py:118 #: pretix/control/templates/pretixcontrol/checkin/lists.html:99 #: pretix/control/templates/pretixcontrol/items/quotas.html:51 @@ -816,8 +816,8 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/index.html:140 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:167 #: pretix/control/views/waitinglist.py:318 -#: pretix/plugins/checkinlists/exporters.py:509 -#: pretix/plugins/checkinlists/exporters.py:698 +#: pretix/plugins/checkinlists/exporters.py:511 +#: pretix/plugins/checkinlists/exporters.py:700 #: pretix/plugins/sendmail/forms.py:137 pretix/plugins/sendmail/forms.py:282 #: pretix/plugins/sendmail/forms.py:363 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_inspect.html:32 @@ -829,14 +829,14 @@ msgid "Date" msgstr "" #: pretix/base/exporters/answers.py:79 pretix/base/exporters/answers.py:88 -#: pretix/control/forms/checkin.py:83 pretix/control/forms/event.py:1607 -#: pretix/control/forms/filter.py:427 pretix/control/forms/filter.py:454 -#: pretix/control/forms/filter.py:1906 pretix/control/forms/filter.py:1939 -#: pretix/control/forms/filter.py:2130 pretix/control/forms/filter.py:2150 -#: pretix/control/forms/filter.py:2245 pretix/control/forms/filter.py:2261 -#: pretix/control/forms/filter.py:2327 pretix/control/forms/filter.py:2362 -#: pretix/control/forms/filter.py:2544 pretix/control/forms/filter.py:2559 -#: pretix/control/forms/orders.py:830 pretix/control/forms/orders.py:992 +#: pretix/control/forms/checkin.py:83 pretix/control/forms/event.py:1609 +#: pretix/control/forms/filter.py:428 pretix/control/forms/filter.py:455 +#: pretix/control/forms/filter.py:1904 pretix/control/forms/filter.py:1937 +#: pretix/control/forms/filter.py:2126 pretix/control/forms/filter.py:2146 +#: pretix/control/forms/filter.py:2241 pretix/control/forms/filter.py:2257 +#: pretix/control/forms/filter.py:2323 pretix/control/forms/filter.py:2358 +#: pretix/control/forms/filter.py:2540 pretix/control/forms/filter.py:2555 +#: pretix/control/forms/orders.py:841 pretix/control/forms/orders.py:1003 #: pretix/control/templates/pretixcontrol/event/fragment_subevent_choice_simple.html:5 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:67 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:129 @@ -888,19 +888,19 @@ msgstr "" #: pretix/base/models/customers.py:396 pretix/base/models/items.py:1658 #: pretix/base/models/orders.py:250 pretix/base/models/waitinglist.py:80 #: pretix/base/pdf.py:320 -#: pretix/control/templates/pretixcontrol/order/index.html:256 +#: pretix/control/templates/pretixcontrol/order/index.html:257 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:163 #: pretix/control/views/waitinglist.py:314 -#: pretix/plugins/checkinlists/exporters.py:506 +#: pretix/plugins/checkinlists/exporters.py:508 #: pretix/presale/checkoutflow.py:1538 pretix/presale/forms/checkout.py:84 #: pretix/presale/forms/waitinglist.py:78 -#: pretix/presale/templates/pretixpresale/event/order.html:303 +#: pretix/presale/templates/pretixpresale/event/order.html:304 msgid "Phone number" msgstr "" #: pretix/base/exporters/customers.py:69 pretix/base/models/auth.py:246 -#: pretix/base/models/customers.py:97 pretix/base/models/orders.py:3263 -#: pretix/base/settings.py:3599 pretix/base/settings.py:3611 +#: pretix/base/models/customers.py:97 pretix/base/models/orders.py:3267 +#: pretix/base/settings.py:3601 pretix/base/settings.py:3613 #: pretix/control/templates/pretixcontrol/users/index.html:47 msgid "Full name" msgstr "" @@ -908,22 +908,22 @@ msgstr "" #: pretix/base/exporters/customers.py:74 pretix/base/exporters/invoices.py:206 #: pretix/base/exporters/invoices.py:214 pretix/base/exporters/invoices.py:332 #: pretix/base/exporters/invoices.py:340 pretix/base/exporters/orderlist.py:262 -#: pretix/base/exporters/waitinglist.py:108 pretix/base/forms/questions.py:1138 +#: pretix/base/exporters/waitinglist.py:108 pretix/base/forms/questions.py:1141 #: pretix/base/models/devices.py:65 pretix/base/models/devices.py:127 -#: pretix/base/models/event.py:1469 pretix/base/models/event.py:1711 +#: pretix/base/models/event.py:1482 pretix/base/models/event.py:1724 #: pretix/base/models/items.py:2042 pretix/base/models/items.py:2215 #: pretix/base/models/memberships.py:41 pretix/base/models/organizer.py:75 #: pretix/base/models/organizer.py:535 pretix/base/models/seating.py:85 #: pretix/base/models/waitinglist.py:69 pretix/base/settings.py:3226 -#: pretix/base/settings.py:3236 pretix/base/settings.py:3588 -#: pretix/control/forms/filter.py:624 pretix/control/forms/item.py:439 +#: pretix/base/settings.py:3236 pretix/base/settings.py:3590 +#: pretix/control/forms/filter.py:625 pretix/control/forms/item.py:439 #: pretix/control/forms/organizer.py:913 #: pretix/control/templates/pretixcontrol/checkin/index.html:109 #: pretix/control/templates/pretixcontrol/checkin/lists.html:92 #: pretix/control/templates/pretixcontrol/event/tax_index.html:26 #: pretix/control/templates/pretixcontrol/oauth/app_list.html:12 #: pretix/control/templates/pretixcontrol/oauth/authorized.html:17 -#: pretix/control/templates/pretixcontrol/order/index.html:953 +#: pretix/control/templates/pretixcontrol/order/index.html:950 #: pretix/control/templates/pretixcontrol/organizers/customer.html:58 #: pretix/control/templates/pretixcontrol/organizers/customers.html:62 #: pretix/control/templates/pretixcontrol/organizers/devices.html:77 @@ -935,17 +935,17 @@ msgstr "" #: pretix/control/templates/pretixcontrol/waitinglist/index.html:159 #: pretix/control/views/waitinglist.py:314 pretix/plugins/badges/models.py:53 #: pretix/plugins/badges/templates/pretixplugins/badges/index.html:34 -#: pretix/plugins/checkinlists/exporters.py:373 -#: pretix/plugins/checkinlists/exporters.py:758 +#: pretix/plugins/checkinlists/exporters.py:375 +#: pretix/plugins/checkinlists/exporters.py:760 #: pretix/plugins/reports/exporters.py:885 #: pretix/plugins/ticketoutputpdf/models.py:333 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:32 #: pretix/presale/forms/customer.py:167 pretix/presale/forms/customer.py:468 #: pretix/presale/forms/waitinglist.py:66 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:86 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:138 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:87 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:139 #: pretix/presale/templates/pretixpresale/event/checkout_customer.html:34 -#: pretix/presale/templates/pretixpresale/event/order.html:311 +#: pretix/presale/templates/pretixpresale/event/order.html:312 msgid "Name" msgstr "" @@ -970,7 +970,7 @@ msgstr "" #: pretix/base/exporters/customers.py:81 pretix/base/exporters/invoices.py:205 #: pretix/base/exporters/waitinglist.py:118 pretix/base/models/auth.py:258 #: pretix/base/models/customers.py:106 pretix/base/models/exports.py:54 -#: pretix/control/forms/event.py:1612 pretix/control/forms/exports.py:49 +#: pretix/control/forms/event.py:1614 pretix/control/forms/exports.py:49 #: pretix/control/forms/exports.py:88 pretix/control/views/waitinglist.py:315 msgid "Language" msgstr "" @@ -1007,19 +1007,19 @@ msgstr "" #: pretix/base/exporters/orderlist.py:797 #: pretix/base/exporters/orderlist.py:1381 #: pretix/base/exporters/reusablemedia.py:63 pretix/base/modelimport.py:187 -#: pretix/base/modelimport.py:194 pretix/base/models/orders.py:1399 -#: pretix/control/forms/filter.py:171 pretix/control/forms/filter.py:519 -#: pretix/control/forms/filter.py:706 pretix/control/forms/item.py:608 +#: pretix/base/modelimport.py:194 pretix/base/models/orders.py:1401 +#: pretix/control/forms/filter.py:172 pretix/control/forms/filter.py:520 +#: pretix/control/forms/filter.py:707 pretix/control/forms/item.py:608 #: pretix/control/forms/subevents.py:119 pretix/control/views/item.py:721 #: pretix/control/views/vouchers.py:139 pretix/control/views/vouchers.py:140 -#: pretix/plugins/checkinlists/exporters.py:598 -#: pretix/plugins/checkinlists/exporters.py:601 -#: pretix/plugins/checkinlists/exporters.py:628 -#: pretix/plugins/checkinlists/exporters.py:644 -#: pretix/plugins/checkinlists/exporters.py:713 -#: pretix/plugins/checkinlists/exporters.py:814 -#: pretix/plugins/checkinlists/exporters.py:815 +#: pretix/plugins/checkinlists/exporters.py:600 +#: pretix/plugins/checkinlists/exporters.py:603 +#: pretix/plugins/checkinlists/exporters.py:630 +#: pretix/plugins/checkinlists/exporters.py:646 +#: pretix/plugins/checkinlists/exporters.py:715 #: pretix/plugins/checkinlists/exporters.py:816 +#: pretix/plugins/checkinlists/exporters.py:817 +#: pretix/plugins/checkinlists/exporters.py:818 msgid "Yes" msgstr "" @@ -1031,18 +1031,18 @@ msgstr "" #: pretix/base/exporters/orderlist.py:797 #: pretix/base/exporters/orderlist.py:1381 #: pretix/base/exporters/reusablemedia.py:63 pretix/base/modelimport.py:186 -#: pretix/base/modelimport.py:196 pretix/base/models/orders.py:1401 -#: pretix/control/forms/filter.py:171 pretix/control/forms/filter.py:520 -#: pretix/control/forms/filter.py:707 pretix/control/forms/item.py:609 +#: pretix/base/modelimport.py:196 pretix/base/models/orders.py:1403 +#: pretix/control/forms/filter.py:172 pretix/control/forms/filter.py:521 +#: pretix/control/forms/filter.py:708 pretix/control/forms/item.py:609 #: pretix/control/forms/subevents.py:120 pretix/control/views/item.py:721 #: pretix/control/views/vouchers.py:139 pretix/control/views/vouchers.py:140 -#: pretix/plugins/checkinlists/exporters.py:598 -#: pretix/plugins/checkinlists/exporters.py:601 -#: pretix/plugins/checkinlists/exporters.py:628 -#: pretix/plugins/checkinlists/exporters.py:713 -#: pretix/plugins/checkinlists/exporters.py:814 -#: pretix/plugins/checkinlists/exporters.py:815 +#: pretix/plugins/checkinlists/exporters.py:600 +#: pretix/plugins/checkinlists/exporters.py:603 +#: pretix/plugins/checkinlists/exporters.py:630 +#: pretix/plugins/checkinlists/exporters.py:715 #: pretix/plugins/checkinlists/exporters.py:816 +#: pretix/plugins/checkinlists/exporters.py:817 +#: pretix/plugins/checkinlists/exporters.py:818 msgid "No" msgstr "" @@ -1067,7 +1067,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:837 #: pretix/base/exporters/orderlist.py:1191 #: pretix/plugins/checkinlists/exporters.py:88 -#: pretix/plugins/checkinlists/exporters.py:856 +#: pretix/plugins/checkinlists/exporters.py:858 #: pretix/plugins/reports/accountingreport.py:74 #: pretix/plugins/reports/exporters.py:461 #: pretix/plugins/reports/exporters.py:698 @@ -1099,26 +1099,26 @@ msgstr "" #: pretix/base/exporters/events.py:57 pretix/base/exporters/orderlist.py:261 #: pretix/base/exporters/orderlist.py:441 #: pretix/base/exporters/orderlist.py:573 -#: pretix/base/exporters/waitinglist.py:114 pretix/base/models/event.py:559 -#: pretix/base/pdf.py:224 pretix/control/forms/filter.py:1242 -#: pretix/control/forms/filter.py:1244 pretix/control/forms/filter.py:1695 +#: pretix/base/exporters/waitinglist.py:114 pretix/base/models/event.py:572 +#: pretix/base/pdf.py:224 pretix/control/forms/filter.py:1248 +#: pretix/control/forms/filter.py:1250 pretix/control/forms/filter.py:1695 #: pretix/control/forms/filter.py:1697 #: pretix/control/templates/pretixcontrol/events/index.html:68 #: pretix/control/templates/pretixcontrol/organizers/detail.html:64 msgid "Event name" msgstr "" -#: pretix/base/exporters/events.py:58 pretix/base/models/event.py:575 +#: pretix/base/exporters/events.py:58 pretix/base/models/event.py:588 #: pretix/base/models/organizer.py:91 #: pretix/control/templates/pretixcontrol/organizers/index.html:47 msgid "Short form" msgstr "" -#: pretix/base/exporters/events.py:59 pretix/base/models/event.py:577 +#: pretix/base/exporters/events.py:59 pretix/base/models/event.py:590 msgid "Shop is live" msgstr "" -#: pretix/base/exporters/events.py:60 pretix/base/models/event.py:579 +#: pretix/base/exporters/events.py:60 pretix/base/models/event.py:592 msgid "Event currency" msgstr "" @@ -1127,61 +1127,61 @@ msgstr "" msgid "Timezone" msgstr "" -#: pretix/base/exporters/events.py:62 pretix/base/models/event.py:582 -#: pretix/base/models/event.py:1471 pretix/base/settings.py:3224 +#: pretix/base/exporters/events.py:62 pretix/base/models/event.py:595 +#: pretix/base/models/event.py:1484 pretix/base/settings.py:3224 #: pretix/base/settings.py:3234 pretix/control/forms/subevents.py:480 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:268 msgid "Event start time" msgstr "" -#: pretix/base/exporters/events.py:63 pretix/base/models/event.py:584 -#: pretix/base/models/event.py:1473 pretix/base/pdf.py:286 +#: pretix/base/exporters/events.py:63 pretix/base/models/event.py:597 +#: pretix/base/models/event.py:1486 pretix/base/pdf.py:286 #: pretix/control/forms/subevents.py:485 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:270 msgid "Event end time" msgstr "" -#: pretix/base/exporters/events.py:64 pretix/base/models/event.py:586 -#: pretix/base/models/event.py:1475 pretix/control/forms/subevents.py:490 +#: pretix/base/exporters/events.py:64 pretix/base/models/event.py:599 +#: pretix/base/models/event.py:1488 pretix/control/forms/subevents.py:490 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:274 msgid "Admission time" msgstr "" -#: pretix/base/exporters/events.py:65 pretix/base/models/event.py:598 -#: pretix/base/models/event.py:1484 pretix/control/forms/subevents.py:93 +#: pretix/base/exporters/events.py:65 pretix/base/models/event.py:611 +#: pretix/base/models/event.py:1497 pretix/control/forms/subevents.py:93 msgid "Start of presale" msgstr "" -#: pretix/base/exporters/events.py:66 pretix/base/models/event.py:592 -#: pretix/base/models/event.py:1478 pretix/control/forms/subevents.py:99 +#: pretix/base/exporters/events.py:66 pretix/base/models/event.py:605 +#: pretix/base/models/event.py:1491 pretix/control/forms/subevents.py:99 msgid "End of presale" msgstr "" #: pretix/base/exporters/events.py:67 pretix/base/exporters/invoices.py:351 -#: pretix/base/models/event.py:604 pretix/base/models/event.py:1490 +#: pretix/base/models/event.py:617 pretix/base/models/event.py:1503 msgid "Location" msgstr "" -#: pretix/base/exporters/events.py:68 pretix/base/models/event.py:607 -#: pretix/base/models/event.py:1493 +#: pretix/base/exporters/events.py:68 pretix/base/models/event.py:620 +#: pretix/base/models/event.py:1506 msgid "Latitude" msgstr "" -#: pretix/base/exporters/events.py:69 pretix/base/models/event.py:615 -#: pretix/base/models/event.py:1501 +#: pretix/base/exporters/events.py:69 pretix/base/models/event.py:628 +#: pretix/base/models/event.py:1514 msgid "Longitude" msgstr "" -#: pretix/base/exporters/events.py:70 pretix/base/models/event.py:627 -#: pretix/base/models/event.py:1516 +#: pretix/base/exporters/events.py:70 pretix/base/models/event.py:640 +#: pretix/base/models/event.py:1529 #: pretix/control/templates/pretixcontrol/event/index.html:128 -#: pretix/control/templates/pretixcontrol/order/index.html:997 +#: pretix/control/templates/pretixcontrol/order/index.html:994 msgid "Internal comment" msgstr "" -#: pretix/base/exporters/invoices.py:82 pretix/base/models/orders.py:1751 -#: pretix/base/models/orders.py:2160 pretix/control/forms/filter.py:204 -#: pretix/control/forms/filter.py:1018 pretix/control/forms/filter.py:2282 +#: pretix/base/exporters/invoices.py:82 pretix/base/models/orders.py:1753 +#: pretix/base/models/orders.py:2162 pretix/control/forms/filter.py:204 +#: pretix/control/forms/filter.py:1024 pretix/control/forms/filter.py:2278 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:9 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:14 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:44 @@ -1195,8 +1195,8 @@ msgid "Payment provider" msgstr "" #: pretix/base/exporters/invoices.py:84 pretix/base/exporters/invoices.py:86 -#: pretix/control/forms/filter.py:206 pretix/control/forms/filter.py:1020 -#: pretix/control/forms/filter.py:2284 +#: pretix/control/forms/filter.py:206 pretix/control/forms/filter.py:1026 +#: pretix/control/forms/filter.py:2280 msgid "All payment providers" msgstr "" @@ -1227,11 +1227,11 @@ msgid "" msgstr "" #: pretix/base/exporters/invoices.py:191 pretix/base/shredder.py:576 -#: pretix/control/templates/pretixcontrol/order/index.html:267 -#: pretix/control/templates/pretixcontrol/order/index.html:340 +#: pretix/control/templates/pretixcontrol/order/index.html:268 +#: pretix/control/templates/pretixcontrol/order/index.html:341 #: pretix/control/templates/pretixcontrol/organizers/edit.html:294 -#: pretix/presale/templates/pretixpresale/event/order.html:235 -#: pretix/presale/templates/pretixpresale/event/order.html:256 +#: pretix/presale/templates/pretixpresale/event/order.html:236 +#: pretix/presale/templates/pretixpresale/event/order.html:257 msgid "Invoices" msgstr "" @@ -1248,12 +1248,12 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1259 #: pretix/base/exporters/waitinglist.py:107 pretix/base/forms/widgets.py:213 #: pretix/base/models/items.py:1654 pretix/base/models/orders.py:259 -#: pretix/base/models/orders.py:2970 pretix/base/models/orders.py:3090 +#: pretix/base/models/orders.py:2974 pretix/base/models/orders.py:3094 #: pretix/control/templates/pretixcontrol/order/transactions.html:19 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:72 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:17 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:11 -#: pretix/plugins/checkinlists/exporters.py:750 +#: pretix/plugins/checkinlists/exporters.py:752 #: pretix/presale/templates/pretixpresale/event/fragment_giftcard_history.html:6 msgid "Date" msgstr "" @@ -1265,11 +1265,11 @@ msgstr "" #: pretix/base/exporters/orderlist.py:879 pretix/base/models/orders.py:210 #: pretix/base/notifications.py:199 pretix/base/pdf.py:103 #: pretix/control/templates/pretixcontrol/checkin/index.html:95 -#: pretix/control/templates/pretixcontrol/order/index.html:180 +#: pretix/control/templates/pretixcontrol/order/index.html:181 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:116 #: pretix/control/templates/pretixcontrol/orders/bulk_action.html:22 #: pretix/control/templates/pretixcontrol/orders/index.html:47 -#: pretix/control/templates/pretixcontrol/orders/index.html:132 +#: pretix/control/templates/pretixcontrol/orders/index.html:131 #: pretix/control/templates/pretixcontrol/organizers/customer.html:204 #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:41 #: pretix/control/templates/pretixcontrol/search/orders.html:48 @@ -1277,8 +1277,8 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:29 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:41 #: pretix/plugins/checkinlists/exporters.py:121 -#: pretix/plugins/checkinlists/exporters.py:490 -#: pretix/plugins/checkinlists/exporters.py:754 +#: pretix/plugins/checkinlists/exporters.py:492 +#: pretix/plugins/checkinlists/exporters.py:756 #: pretix/plugins/reports/exporters.py:561 #: pretix/plugins/reports/exporters.py:884 #: pretix/plugins/ticketoutputpdf/exporters.py:96 @@ -1288,7 +1288,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:202 pretix/base/exporters/invoices.py:329 #: pretix/base/forms/auth.py:160 pretix/base/modelimport_orders.py:59 #: pretix/base/models/customers.py:395 pretix/base/models/waitinglist.py:76 -#: pretix/control/forms/filter.py:552 +#: pretix/control/forms/filter.py:553 #: pretix/control/templates/pretixcontrol/users/index.html:42 #: pretix/control/views/waitinglist.py:314 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:134 @@ -1318,14 +1318,14 @@ msgstr "" #: pretix/base/exporters/orderlist.py:462 #: pretix/base/exporters/orderlist.py:604 pretix/base/forms/questions.py:686 #: pretix/base/modelimport_orders.py:206 pretix/base/modelimport_orders.py:352 -#: pretix/base/models/customers.py:311 pretix/base/models/orders.py:1537 -#: pretix/base/models/orders.py:3265 pretix/control/forms/filter.py:628 -#: pretix/control/forms/filter.py:659 -#: pretix/control/templates/pretixcontrol/order/index.html:955 -#: pretix/plugins/checkinlists/exporters.py:532 +#: pretix/base/models/customers.py:311 pretix/base/models/orders.py:1539 +#: pretix/base/models/orders.py:3269 pretix/control/forms/filter.py:629 +#: pretix/control/forms/filter.py:660 +#: pretix/control/templates/pretixcontrol/order/index.html:952 +#: pretix/plugins/checkinlists/exporters.py:534 #: pretix/plugins/reports/exporters.py:840 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:88 -#: pretix/presale/templates/pretixpresale/event/order.html:315 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:89 +#: pretix/presale/templates/pretixpresale/event/order.html:316 msgid "Address" msgstr "" @@ -1335,11 +1335,11 @@ msgstr "" #: pretix/base/exporters/orderlist.py:462 #: pretix/base/exporters/orderlist.py:605 pretix/base/forms/questions.py:697 #: pretix/base/modelimport_orders.py:217 pretix/base/modelimport_orders.py:363 -#: pretix/base/models/customers.py:312 pretix/base/models/orders.py:1538 -#: pretix/base/models/orders.py:3266 pretix/base/settings.py:1123 -#: pretix/control/forms/filter.py:632 pretix/control/forms/filter.py:663 +#: pretix/base/models/customers.py:312 pretix/base/models/orders.py:1540 +#: pretix/base/models/orders.py:3270 pretix/base/settings.py:1123 +#: pretix/control/forms/filter.py:633 pretix/control/forms/filter.py:664 #: pretix/control/views/item.py:481 -#: pretix/plugins/checkinlists/exporters.py:533 +#: pretix/plugins/checkinlists/exporters.py:535 #: pretix/plugins/reports/exporters.py:841 msgid "ZIP code" msgstr "" @@ -1350,11 +1350,11 @@ msgstr "" #: pretix/base/exporters/orderlist.py:462 #: pretix/base/exporters/orderlist.py:606 pretix/base/forms/questions.py:705 #: pretix/base/modelimport_orders.py:228 pretix/base/modelimport_orders.py:374 -#: pretix/base/models/customers.py:313 pretix/base/models/orders.py:1539 -#: pretix/base/models/orders.py:3267 pretix/base/settings.py:1135 -#: pretix/control/forms/filter.py:637 pretix/control/forms/filter.py:668 +#: pretix/base/models/customers.py:313 pretix/base/models/orders.py:1541 +#: pretix/base/models/orders.py:3271 pretix/base/settings.py:1135 +#: pretix/control/forms/filter.py:638 pretix/control/forms/filter.py:669 #: pretix/control/views/item.py:491 -#: pretix/plugins/checkinlists/exporters.py:534 +#: pretix/plugins/checkinlists/exporters.py:536 #: pretix/plugins/reports/exporters.py:842 msgid "City" msgstr "" @@ -1365,18 +1365,18 @@ msgstr "" #: pretix/base/exporters/orderlist.py:462 #: pretix/base/exporters/orderlist.py:607 pretix/base/forms/questions.py:717 #: pretix/base/modelimport_orders.py:244 pretix/base/modelimport_orders.py:390 -#: pretix/base/models/customers.py:314 pretix/base/models/orders.py:1540 -#: pretix/base/models/orders.py:3268 pretix/base/models/orders.py:3269 -#: pretix/base/settings.py:1144 pretix/control/forms/filter.py:642 -#: pretix/control/forms/filter.py:673 -#: pretix/control/templates/pretixcontrol/order/index.html:959 +#: pretix/base/models/customers.py:314 pretix/base/models/orders.py:1542 +#: pretix/base/models/orders.py:3272 pretix/base/models/orders.py:3273 +#: pretix/base/settings.py:1144 pretix/control/forms/filter.py:643 +#: pretix/control/forms/filter.py:674 +#: pretix/control/templates/pretixcontrol/order/index.html:956 #: pretix/control/views/item.py:501 -#: pretix/plugins/checkinlists/exporters.py:535 +#: pretix/plugins/checkinlists/exporters.py:537 #: pretix/plugins/reports/exporters.py:792 #: pretix/plugins/reports/exporters.py:837 #: pretix/plugins/reports/exporters.py:886 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:92 -#: pretix/presale/templates/pretixpresale/event/order.html:319 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:93 +#: pretix/presale/templates/pretixpresale/event/order.html:320 msgid "Country" msgstr "" @@ -1389,12 +1389,12 @@ msgstr "" #: pretix/base/exporters/orderlist.py:270 #: pretix/base/exporters/orderlist.py:462 #: pretix/base/exporters/orderlist.py:653 pretix/base/modelimport_orders.py:288 -#: pretix/base/models/orders.py:3272 -#: pretix/control/templates/pretixcontrol/order/index.html:966 +#: pretix/base/models/orders.py:3276 +#: pretix/control/templates/pretixcontrol/order/index.html:963 #: pretix/plugins/reports/exporters.py:844 #: pretix/plugins/reports/exporters.py:886 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:99 -#: pretix/presale/templates/pretixpresale/event/order.html:326 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:100 +#: pretix/presale/templates/pretixpresale/event/order.html:327 msgid "VAT ID" msgstr "" @@ -1417,14 +1417,14 @@ msgstr "" #: pretix/base/exporters/orderlist.py:603 #: pretix/base/exporters/orderlist.py:643 pretix/base/forms/questions.py:678 #: pretix/base/modelimport_orders.py:176 pretix/base/modelimport_orders.py:341 -#: pretix/control/forms/filter.py:620 pretix/control/forms/filter.py:655 -#: pretix/control/templates/pretixcontrol/order/index.html:951 +#: pretix/control/forms/filter.py:621 pretix/control/forms/filter.py:656 +#: pretix/control/templates/pretixcontrol/order/index.html:948 #: pretix/control/views/item.py:459 -#: pretix/plugins/checkinlists/exporters.py:516 +#: pretix/plugins/checkinlists/exporters.py:518 #: pretix/plugins/reports/exporters.py:839 #: pretix/plugins/reports/exporters.py:885 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:83 -#: pretix/presale/templates/pretixpresale/event/order.html:307 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:84 +#: pretix/presale/templates/pretixpresale/event/order.html:308 msgid "Company" msgstr "" @@ -1436,33 +1436,33 @@ msgstr "" #: pretix/base/exporters/orderlist.py:269 #: pretix/base/exporters/orderlist.py:462 #: pretix/base/exporters/orderlist.py:608 pretix/base/forms/questions.py:742 -#: pretix/base/forms/questions.py:1100 pretix/base/modelimport_orders.py:263 -#: pretix/base/models/customers.py:315 pretix/base/models/orders.py:1541 -#: pretix/base/models/orders.py:3271 -#: pretix/control/templates/pretixcontrol/order/index.html:962 -#: pretix/plugins/checkinlists/exporters.py:536 +#: pretix/base/forms/questions.py:1091 pretix/base/modelimport_orders.py:263 +#: pretix/base/models/customers.py:315 pretix/base/models/orders.py:1543 +#: pretix/base/models/orders.py:3275 pretix/base/views/js_helpers.py:44 +#: pretix/control/templates/pretixcontrol/order/index.html:959 +#: pretix/plugins/checkinlists/exporters.py:538 #: pretix/plugins/reports/exporters.py:843 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:95 -#: pretix/presale/templates/pretixpresale/event/order.html:322 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:96 +#: pretix/presale/templates/pretixpresale/event/order.html:323 msgctxt "address" msgid "State" msgstr "" #: pretix/base/exporters/invoices.py:221 pretix/base/exporters/invoices.py:347 -#: pretix/base/models/orders.py:3281 pretix/base/models/orders.py:3316 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:103 +#: pretix/base/models/orders.py:3285 pretix/base/models/orders.py:3320 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:104 msgid "Beneficiary" msgstr "" #: pretix/base/exporters/invoices.py:222 pretix/base/exporters/invoices.py:348 -#: pretix/base/modelimport_orders.py:299 pretix/base/models/orders.py:3276 -#: pretix/control/templates/pretixcontrol/order/index.html:986 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:111 +#: pretix/base/modelimport_orders.py:299 pretix/base/models/orders.py:3280 +#: pretix/control/templates/pretixcontrol/order/index.html:983 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:112 msgid "Internal reference" msgstr "" #: pretix/base/exporters/invoices.py:223 pretix/base/models/tax.py:162 -#: pretix/control/forms/event.py:1502 +#: pretix/control/forms/event.py:1504 msgid "Reverse charge" msgstr "" @@ -1491,7 +1491,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:466 #: pretix/base/exporters/orderlist.py:661 #: pretix/control/templates/pretixcontrol/event/payment.html:11 -#: pretix/control/views/event.py:358 +#: pretix/control/views/event.py:379 msgid "Payment providers" msgstr "" @@ -1500,8 +1500,9 @@ msgid "Cancellation" msgstr "" #: pretix/base/exporters/invoices.py:285 pretix/base/exporters/invoices.py:388 -#: pretix/control/templates/pretixcontrol/order/index.html:271 -#: pretix/presale/templates/pretixpresale/event/order.html:243 +#: pretix/control/templates/pretixcontrol/order/index.html:272 +#: pretix/control/templates/pretixcontrol/order/mail_history.html:66 +#: pretix/presale/templates/pretixpresale/event/order.html:244 msgid "Invoice" msgstr "" @@ -1515,7 +1516,7 @@ msgstr "" msgid "Description" msgstr "" -#: pretix/base/exporters/invoices.py:321 pretix/control/forms/orders.py:341 +#: pretix/base/exporters/invoices.py:321 pretix/control/forms/orders.py:343 msgid "Gross price" msgstr "" @@ -1525,16 +1526,16 @@ msgstr "" #: pretix/base/exporters/invoices.py:323 pretix/base/exporters/orderlist.py:453 #: pretix/base/exporters/orderlist.py:594 -#: pretix/base/exporters/orderlist.py:904 pretix/base/models/orders.py:2324 -#: pretix/base/models/orders.py:2496 pretix/base/models/orders.py:3016 +#: pretix/base/exporters/orderlist.py:904 pretix/base/models/orders.py:2326 +#: pretix/base/models/orders.py:2498 pretix/base/models/orders.py:3020 msgid "Tax value" msgstr "" #: pretix/base/exporters/invoices.py:324 pretix/base/exporters/orderlist.py:451 #: pretix/base/exporters/orderlist.py:592 -#: pretix/base/exporters/orderlist.py:901 pretix/base/models/orders.py:2311 -#: pretix/base/models/orders.py:2483 pretix/base/models/orders.py:3003 -#: pretix/base/models/orders.py:3100 pretix/base/models/tax.py:348 +#: pretix/base/exporters/orderlist.py:901 pretix/base/models/orders.py:2313 +#: pretix/base/models/orders.py:2485 pretix/base/models/orders.py:3007 +#: pretix/base/models/orders.py:3104 pretix/base/models/tax.py:348 #: pretix/control/templates/pretixcontrol/order/transactions.html:21 #: pretix/plugins/reports/accountingreport.py:315 #: pretix/plugins/reports/exporters.py:793 @@ -1598,19 +1599,20 @@ msgstr "" #: pretix/base/exporters/items.py:68 pretix/base/exporters/orderlist.py:589 #: pretix/base/exporters/orderlist.py:893 #: pretix/base/exporters/waitinglist.py:112 pretix/base/models/items.py:1147 -#: pretix/base/models/orders.py:1493 pretix/base/models/orders.py:2988 -#: pretix/plugins/checkinlists/exporters.py:693 +#: pretix/base/models/orders.py:1495 pretix/base/models/orders.py:2992 +#: pretix/plugins/checkinlists/exporters.py:695 msgid "Variation" msgstr "" #: pretix/base/exporters/items.py:71 pretix/base/exporters/reusablemedia.py:48 #: pretix/base/models/customers.py:57 pretix/base/models/customers.py:403 -#: pretix/base/models/discount.py:58 pretix/base/models/event.py:1460 +#: pretix/base/models/discount.py:58 pretix/base/models/event.py:1473 #: pretix/base/models/items.py:489 pretix/base/models/items.py:1151 #: pretix/base/models/media.py:77 pretix/base/settings.py:203 #: pretix/base/settings.py:238 pretix/base/settings.py:269 -#: pretix/control/forms/filter.py:1195 pretix/control/forms/filter.py:2012 -#: pretix/control/templates/pretixcontrol/event/plugins.html:55 +#: pretix/control/forms/filter.py:1201 pretix/control/forms/filter.py:2010 +#: pretix/control/templates/pretixcontrol/event/plugins.html:25 +#: pretix/control/templates/pretixcontrol/event/plugins.html:75 #: pretix/control/templates/pretixcontrol/users/index.html:51 msgid "Active" msgstr "" @@ -1654,7 +1656,7 @@ msgstr "" #: pretix/base/exporters/items.py:79 pretix/base/exporters/orderlist.py:1135 #: pretix/base/exporters/waitinglist.py:41 pretix/base/shredder.py:367 -#: pretix/control/forms/event.py:1682 pretix/control/navigation.py:237 +#: pretix/control/forms/event.py:1684 pretix/control/navigation.py:237 #: pretix/control/templates/pretixcontrol/event/settings.html:351 #: pretix/control/templates/pretixcontrol/orders/cancel.html:62 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:6 @@ -1678,7 +1680,7 @@ msgstr "" #: pretix/base/exporters/items.py:80 pretix/base/models/discount.py:80 #: pretix/base/models/items.py:224 pretix/base/models/items.py:280 #: pretix/base/models/items.py:562 pretix/base/models/items.py:1204 -#: pretix/base/payment.py:341 pretix/control/forms/subevents.py:320 +#: pretix/base/payment.py:335 pretix/control/forms/subevents.py:320 #: pretix/control/forms/subevents.py:342 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:506 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:171 @@ -1689,7 +1691,7 @@ msgstr "" #: pretix/base/exporters/items.py:81 pretix/base/models/discount.py:85 #: pretix/base/models/items.py:229 pretix/base/models/items.py:285 #: pretix/base/models/items.py:572 pretix/base/models/items.py:1214 -#: pretix/base/payment.py:335 pretix/control/forms/subevents.py:325 +#: pretix/base/payment.py:341 pretix/control/forms/subevents.py:325 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:511 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:176 #: pretix/control/templates/pretixcontrol/subevents/detail.html:154 @@ -1729,14 +1731,14 @@ msgstr "" #: pretix/base/exporters/items.py:89 pretix/base/exporters/orderlist.py:282 #: pretix/base/modelimport_orders.py:610 pretix/base/models/items.py:656 #: pretix/base/models/items.py:1241 pretix/base/models/orders.py:282 -#: pretix/plugins/checkinlists/exporters.py:520 +#: pretix/plugins/checkinlists/exporters.py:522 msgid "Requires special attention" msgstr "" #: pretix/base/exporters/items.py:90 pretix/base/exporters/orderlist.py:283 #: pretix/base/modelimport_orders.py:618 pretix/base/models/items.py:663 #: pretix/base/models/items.py:1248 pretix/base/models/orders.py:289 -#: pretix/plugins/checkinlists/exporters.py:522 +#: pretix/plugins/checkinlists/exporters.py:524 msgid "Check-in text" msgstr "" @@ -1800,13 +1802,13 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/customer.html:198 #: pretix/plugins/reports/accountingreport.py:670 #: pretix/plugins/reports/accountingreport.py:862 -#: pretix/plugins/reports/exporters.py:657 +#: pretix/plugins/reports/exporters.py:657 pretix/plugins/statistics/apps.py:39 #: pretix/presale/templates/pretixpresale/organizers/customer_orders.html:13 #: pretix/presale/views/customer.py:360 msgid "Orders" msgstr "" -#: pretix/base/exporters/orderlist.py:101 pretix/base/models/orders.py:2545 +#: pretix/base/exporters/orderlist.py:101 pretix/base/models/orders.py:2547 #: pretix/base/notifications.py:205 msgid "Order positions" msgstr "" @@ -1852,7 +1854,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:876 #: pretix/base/exporters/orderlist.py:1076 #: pretix/base/exporters/orderlist.py:1259 -#: pretix/base/exporters/waitinglist.py:113 pretix/control/forms/event.py:1658 +#: pretix/base/exporters/waitinglist.py:113 pretix/control/forms/event.py:1660 #: pretix/control/forms/organizer.py:116 msgid "Event slug" msgstr "" @@ -1873,18 +1875,18 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1312 #: pretix/base/exporters/waitinglist.py:120 #: pretix/base/exporters/waitinglist.py:168 pretix/base/models/orders.py:216 -#: pretix/control/forms/filter.py:1013 pretix/control/forms/filter.py:1192 -#: pretix/control/forms/filter.py:1422 pretix/control/forms/filter.py:1493 -#: pretix/control/forms/filter.py:1566 pretix/control/forms/filter.py:1667 -#: pretix/control/forms/filter.py:2009 pretix/control/forms/filter.py:2090 -#: pretix/control/forms/filter.py:2372 +#: pretix/control/forms/filter.py:1019 pretix/control/forms/filter.py:1198 +#: pretix/control/forms/filter.py:1426 pretix/control/forms/filter.py:1495 +#: pretix/control/forms/filter.py:1567 pretix/control/forms/filter.py:1667 +#: pretix/control/forms/filter.py:2007 pretix/control/forms/filter.py:2087 +#: pretix/control/forms/filter.py:2368 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:52 #: pretix/control/templates/pretixcontrol/checkin/index.html:112 #: pretix/control/templates/pretixcontrol/events/index.html:90 -#: pretix/control/templates/pretixcontrol/order/index.html:749 -#: pretix/control/templates/pretixcontrol/order/index.html:845 +#: pretix/control/templates/pretixcontrol/order/index.html:746 +#: pretix/control/templates/pretixcontrol/order/index.html:842 #: pretix/control/templates/pretixcontrol/orders/bulk_action.html:26 -#: pretix/control/templates/pretixcontrol/orders/index.html:152 +#: pretix/control/templates/pretixcontrol/orders/index.html:151 #: pretix/control/templates/pretixcontrol/orders/refunds.html:65 #: pretix/control/templates/pretixcontrol/organizers/customer.html:39 #: pretix/control/templates/pretixcontrol/organizers/customer.html:209 @@ -1910,16 +1912,16 @@ msgstr "" #: pretix/base/exporters/orderlist.py:446 #: pretix/base/exporters/orderlist.py:579 #: pretix/base/exporters/orderlist.py:880 pretix/base/notifications.py:203 -#: pretix/control/forms/filter.py:2333 -#: pretix/control/templates/pretixcontrol/order/index.html:182 +#: pretix/control/forms/filter.py:2329 +#: pretix/control/templates/pretixcontrol/order/index.html:183 #: pretix/control/templates/pretixcontrol/orders/bulk_action.html:24 -#: pretix/control/templates/pretixcontrol/orders/index.html:141 +#: pretix/control/templates/pretixcontrol/orders/index.html:140 #: pretix/control/templates/pretixcontrol/organizers/customer.html:206 #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:45 #: pretix/control/templates/pretixcontrol/search/orders.html:57 #: pretix/plugins/badges/exporters.py:498 #: pretix/plugins/checkinlists/exporters.py:122 -#: pretix/plugins/checkinlists/exporters.py:518 +#: pretix/plugins/checkinlists/exporters.py:520 #: pretix/plugins/reports/exporters.py:498 #: pretix/plugins/reports/exporters.py:561 #: pretix/plugins/reports/exporters.py:680 @@ -1932,7 +1934,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:447 #: pretix/base/exporters/orderlist.py:580 #: pretix/base/exporters/orderlist.py:881 -#: pretix/plugins/checkinlists/exporters.py:519 +#: pretix/plugins/checkinlists/exporters.py:521 msgid "Order time" msgstr "" @@ -1950,7 +1952,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:270 #: pretix/base/exporters/orderlist.py:657 pretix/base/modelimport_orders.py:472 -#: pretix/control/templates/pretixcontrol/order/index.html:192 +#: pretix/control/templates/pretixcontrol/order/index.html:193 #: pretix/control/templates/pretixcontrol/pdf/index.html:232 msgid "Order locale" msgstr "" @@ -1976,8 +1978,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:281 #: pretix/base/exporters/orderlist.py:656 pretix/base/modelimport_orders.py:540 -#: pretix/control/forms/filter.py:584 -#: pretix/control/templates/pretixcontrol/order/index.html:189 +#: pretix/control/forms/filter.py:585 +#: pretix/control/templates/pretixcontrol/order/index.html:190 msgid "Sales channel" msgstr "" @@ -1988,7 +1990,7 @@ msgid "Follow-up date" msgstr "" #: pretix/base/exporters/orderlist.py:286 -#: pretix/control/templates/pretixcontrol/orders/index.html:151 +#: pretix/control/templates/pretixcontrol/orders/index.html:150 #: pretix/control/templates/pretixcontrol/organizers/customer.html:208 #: pretix/presale/templates/pretixpresale/organizers/customer_orders.html:51 msgid "Positions" @@ -1996,7 +1998,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:287 #: pretix/base/exporters/orderlist.py:658 pretix/base/models/orders.py:321 -#: pretix/control/forms/filter.py:566 +#: pretix/control/forms/filter.py:567 msgid "Email address verified" msgstr "" @@ -2019,16 +2021,16 @@ msgstr "" #: pretix/base/exporters/orderlist.py:450 #: pretix/base/exporters/orderlist.py:591 #: pretix/base/exporters/orderlist.py:900 pretix/base/modelimport_orders.py:431 -#: pretix/base/models/orders.py:1498 pretix/base/models/orders.py:2999 -#: pretix/base/pdf.py:158 pretix/control/forms/orders.py:625 +#: pretix/base/models/orders.py:1500 pretix/base/models/orders.py:3003 +#: pretix/base/pdf.py:158 pretix/control/forms/orders.py:627 #: pretix/control/templates/pretixcontrol/item/index.html:146 #: pretix/control/templates/pretixcontrol/order/change.html:194 #: pretix/control/templates/pretixcontrol/order/change.html:418 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:496 #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:161 #: pretix/control/templates/pretixcontrol/subevents/detail.html:139 -#: pretix/plugins/checkinlists/exporters.py:374 -#: pretix/plugins/checkinlists/exporters.py:497 +#: pretix/plugins/checkinlists/exporters.py:376 +#: pretix/plugins/checkinlists/exporters.py:499 #: pretix/plugins/reports/accountingreport.py:314 msgid "Price" msgstr "" @@ -2056,7 +2058,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:575 #: pretix/base/exporters/orderlist.py:887 -#: pretix/plugins/checkinlists/exporters.py:755 +#: pretix/plugins/checkinlists/exporters.py:757 msgid "Position ID" msgstr "" @@ -2066,15 +2068,15 @@ msgstr "" #: pretix/base/forms/questions.py:641 pretix/base/models/memberships.py:145 #: pretix/control/forms/rrule.py:49 #: pretix/control/templates/pretixcontrol/events/index.html:78 -#: pretix/control/templates/pretixcontrol/order/index.html:746 -#: pretix/control/templates/pretixcontrol/order/index.html:840 +#: pretix/control/templates/pretixcontrol/order/index.html:743 +#: pretix/control/templates/pretixcontrol/order/index.html:837 #: pretix/control/templates/pretixcontrol/orders/refunds.html:55 #: pretix/control/templates/pretixcontrol/organizers/detail.html:66 #: pretix/control/templates/pretixcontrol/search/payments.html:83 #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:19 #: pretix/control/templates/pretixcontrol/user/staff_session_list.html:18 -#: pretix/plugins/checkinlists/exporters.py:510 -#: pretix/plugins/checkinlists/exporters.py:699 +#: pretix/plugins/checkinlists/exporters.py:512 +#: pretix/plugins/checkinlists/exporters.py:701 msgid "Start date" msgstr "" @@ -2086,8 +2088,8 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/detail.html:68 #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:21 #: pretix/control/templates/pretixcontrol/user/staff_session_list.html:20 -#: pretix/plugins/checkinlists/exporters.py:511 -#: pretix/plugins/checkinlists/exporters.py:700 +#: pretix/plugins/checkinlists/exporters.py:513 +#: pretix/plugins/checkinlists/exporters.py:702 msgid "End date" msgstr "" @@ -2095,8 +2097,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:891 pretix/base/modelimport_orders.py:109 #: pretix/base/modelimport_vouchers.py:174 pretix/base/models/items.py:794 #: pretix/base/models/vouchers.py:250 pretix/base/models/waitinglist.py:91 -#: pretix/control/forms/filter.py:2133 pretix/control/forms/filter.py:2388 -#: pretix/control/forms/orders.py:321 pretix/control/forms/vouchers.py:67 +#: pretix/control/forms/filter.py:2129 pretix/control/forms/filter.py:2384 +#: pretix/control/forms/orders.py:323 pretix/control/forms/vouchers.py:67 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:66 #: pretix/control/templates/pretixcontrol/item/base.html:3 #: pretix/control/templates/pretixcontrol/order/change.html:139 @@ -2106,10 +2108,10 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/index.html:134 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:165 #: pretix/control/views/vouchers.py:119 pretix/control/views/waitinglist.py:314 -#: pretix/plugins/checkinlists/exporters.py:374 -#: pretix/plugins/checkinlists/exporters.py:497 -#: pretix/plugins/checkinlists/exporters.py:692 -#: pretix/plugins/checkinlists/exporters.py:757 +#: pretix/plugins/checkinlists/exporters.py:376 +#: pretix/plugins/checkinlists/exporters.py:499 +#: pretix/plugins/checkinlists/exporters.py:694 +#: pretix/plugins/checkinlists/exporters.py:759 #: pretix/plugins/reports/accountingreport.py:270 #: pretix/plugins/reports/exporters.py:375 #: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:100 @@ -2122,29 +2124,29 @@ msgstr "" #: pretix/base/exporters/orderlist.py:595 #: pretix/base/exporters/orderlist.py:600 pretix/base/forms/questions.py:661 #: pretix/base/modelimport_orders.py:313 pretix/base/models/customers.py:300 -#: pretix/base/models/orders.py:1502 pretix/base/pdf.py:172 -#: pretix/control/forms/filter.py:647 pretix/control/forms/organizer.py:982 -#: pretix/control/templates/pretixcontrol/order/index.html:520 +#: pretix/base/models/orders.py:1504 pretix/base/pdf.py:172 +#: pretix/control/forms/filter.py:648 pretix/control/forms/organizer.py:982 +#: pretix/control/templates/pretixcontrol/order/index.html:517 #: pretix/control/templates/pretixcontrol/organizers/customer.html:120 #: pretix/control/views/item.py:435 pretix/plugins/badges/exporters.py:495 #: pretix/plugins/checkinlists/exporters.py:120 -#: pretix/plugins/checkinlists/exporters.py:491 +#: pretix/plugins/checkinlists/exporters.py:493 #: pretix/plugins/ticketoutputpdf/exporters.py:94 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:166 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:169 -#: pretix/presale/templates/pretixpresale/event/fragment_change_form.html:42 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:161 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:164 +#: pretix/presale/templates/pretixpresale/event/fragment_change_form.html:38 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:50 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:37 msgid "Attendee name" msgstr "" #: pretix/base/exporters/orderlist.py:602 pretix/base/forms/questions.py:667 -#: pretix/base/models/customers.py:307 pretix/base/models/orders.py:1510 +#: pretix/base/models/customers.py:307 pretix/base/models/orders.py:1512 #: pretix/base/pdf.py:214 -#: pretix/control/templates/pretixcontrol/order/index.html:525 +#: pretix/control/templates/pretixcontrol/order/index.html:522 #: pretix/control/views/item.py:447 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:176 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:179 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:171 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:174 msgid "Attendee email" msgstr "" @@ -2160,63 +2162,63 @@ msgstr "" msgid "Pseudonymization ID" msgstr "" -#: pretix/base/exporters/orderlist.py:611 pretix/control/forms/filter.py:677 +#: pretix/base/exporters/orderlist.py:611 pretix/control/forms/filter.py:678 #: pretix/control/templates/pretixcontrol/order/change.html:280 msgid "Ticket secret" msgstr "" #: pretix/base/exporters/orderlist.py:612 pretix/base/modelimport_orders.py:570 #: pretix/base/modelimport_vouchers.py:272 -#: pretix/plugins/checkinlists/exporters.py:523 +#: pretix/plugins/checkinlists/exporters.py:525 msgid "Seat ID" msgstr "" #: pretix/base/exporters/orderlist.py:613 -#: pretix/plugins/checkinlists/exporters.py:524 +#: pretix/plugins/checkinlists/exporters.py:526 msgid "Seat name" msgstr "" #: pretix/base/exporters/orderlist.py:614 -#: pretix/plugins/checkinlists/exporters.py:525 +#: pretix/plugins/checkinlists/exporters.py:527 msgid "Seat zone" msgstr "" #: pretix/base/exporters/orderlist.py:615 -#: pretix/plugins/checkinlists/exporters.py:526 +#: pretix/plugins/checkinlists/exporters.py:528 msgid "Seat row" msgstr "" #: pretix/base/exporters/orderlist.py:616 -#: pretix/plugins/checkinlists/exporters.py:527 +#: pretix/plugins/checkinlists/exporters.py:529 msgid "Seat number" msgstr "" #: pretix/base/exporters/orderlist.py:617 #: pretix/control/templates/pretixcontrol/order/change.html:224 -#: pretix/plugins/checkinlists/exporters.py:426 -#: pretix/plugins/checkinlists/exporters.py:528 +#: pretix/plugins/checkinlists/exporters.py:428 +#: pretix/plugins/checkinlists/exporters.py:530 #: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:108 #: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:110 msgid "Blocked" msgstr "" #: pretix/base/exporters/orderlist.py:618 pretix/base/modelimport_orders.py:500 -#: pretix/base/models/orders.py:2512 +#: pretix/base/models/orders.py:2514 #: pretix/control/templates/pretixcontrol/organizers/customer.html:117 -#: pretix/plugins/checkinlists/exporters.py:529 -#: pretix/plugins/checkinlists/exporters.py:702 +#: pretix/plugins/checkinlists/exporters.py:531 +#: pretix/plugins/checkinlists/exporters.py:704 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:46 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:55 msgid "Valid from" msgstr "" #: pretix/base/exporters/orderlist.py:619 pretix/base/modelimport_orders.py:508 -#: pretix/base/modelimport_vouchers.py:111 pretix/base/models/orders.py:2517 +#: pretix/base/modelimport_vouchers.py:111 pretix/base/models/orders.py:2519 #: pretix/base/models/vouchers.py:221 #: pretix/control/templates/pretixcontrol/organizers/customer.html:118 #: pretix/control/views/vouchers.py:119 -#: pretix/plugins/checkinlists/exporters.py:530 -#: pretix/plugins/checkinlists/exporters.py:703 +#: pretix/plugins/checkinlists/exporters.py:532 +#: pretix/plugins/checkinlists/exporters.py:705 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:48 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:61 msgid "Valid until" @@ -2276,11 +2278,11 @@ msgstr "" msgid "Only include transactions created within this date range." msgstr "" -#: pretix/base/exporters/orderlist.py:875 pretix/base/models/event.py:654 +#: pretix/base/exporters/orderlist.py:875 pretix/base/models/event.py:667 #: pretix/base/models/items.py:468 pretix/base/models/items.py:2031 -#: pretix/base/models/orders.py:233 pretix/base/models/orders.py:3082 +#: pretix/base/models/orders.py:233 pretix/base/models/orders.py:3086 #: pretix/base/models/vouchers.py:181 pretix/base/models/waitinglist.py:55 -#: pretix/base/notifications.py:187 pretix/control/forms/filter.py:988 +#: pretix/base/notifications.py:187 pretix/control/forms/filter.py:994 #: pretix/control/templates/pretixcontrol/organizers/customer.html:205 #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:42 #: pretix/control/templates/pretixcontrol/search/orders.html:51 @@ -2396,14 +2398,14 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1076 #: pretix/base/exporters/orderlist.py:1217 #: pretix/base/exporters/orderlist.py:1259 pretix/base/models/orders.py:331 -#: pretix/base/models/orders.py:1738 pretix/base/models/orders.py:2141 -#: pretix/base/models/orders.py:2300 pretix/base/models/orders.py:2472 -#: pretix/base/models/orders.py:2961 +#: pretix/base/models/orders.py:1740 pretix/base/models/orders.py:2143 +#: pretix/base/models/orders.py:2302 pretix/base/models/orders.py:2474 +#: pretix/base/models/orders.py:2965 #: pretix/control/templates/pretixcontrol/organizers/customer.html:119 #: pretix/control/templates/pretixcontrol/search/payments.html:78 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:15 -#: pretix/plugins/checkinlists/exporters.py:372 -#: pretix/presale/templates/pretixpresale/event/order.html:66 +#: pretix/plugins/checkinlists/exporters.py:374 +#: pretix/presale/templates/pretixpresale/event/order.html:67 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:70 #: pretix/presale/templates/pretixpresale/organizers/customer_orders.html:23 msgid "Order" @@ -2425,7 +2427,7 @@ msgid "Creation date" msgstr "" #: pretix/base/exporters/orderlist.py:1076 -#: pretix/control/templates/pretixcontrol/order/index.html:841 +#: pretix/control/templates/pretixcontrol/order/index.html:838 msgid "Completion date" msgstr "" @@ -2435,11 +2437,11 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1077 #: pretix/base/exporters/orderlist.py:1215 -#: pretix/base/exporters/orderlist.py:1259 pretix/base/models/orders.py:1734 -#: pretix/base/models/orders.py:2137 pretix/control/forms/filter.py:1045 -#: pretix/control/forms/filter.py:1048 -#: pretix/control/templates/pretixcontrol/order/index.html:750 -#: pretix/control/templates/pretixcontrol/order/index.html:846 +#: pretix/base/exporters/orderlist.py:1259 pretix/base/models/orders.py:1736 +#: pretix/base/models/orders.py:2139 pretix/control/forms/filter.py:1051 +#: pretix/control/forms/filter.py:1054 +#: pretix/control/templates/pretixcontrol/order/index.html:747 +#: pretix/control/templates/pretixcontrol/order/index.html:843 #: pretix/control/templates/pretixcontrol/orders/refunds.html:70 #: pretix/control/templates/pretixcontrol/search/payments.html:98 #: pretix/plugins/banktransfer/payment.py:464 @@ -2453,8 +2455,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1077 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:102 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:115 -#: pretix/control/templates/pretixcontrol/order/index.html:748 -#: pretix/control/templates/pretixcontrol/order/index.html:843 +#: pretix/control/templates/pretixcontrol/order/index.html:745 +#: pretix/control/templates/pretixcontrol/order/index.html:840 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:85 #: pretix/plugins/reports/accountingreport.py:495 #: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:29 @@ -2541,10 +2543,10 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1355 pretix/base/models/giftcards.py:89 #: pretix/control/templates/pretixcontrol/giftcards/checkout.html:5 #: pretix/control/templates/pretixcontrol/giftcards/payment.html:4 -#: pretix/control/templates/pretixcontrol/order/index.html:512 +#: pretix/control/templates/pretixcontrol/order/index.html:509 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:28 #: pretix/control/templates/pretixcontrol/organizers/giftcards.html:56 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:156 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:151 msgid "Gift card code" msgstr "" @@ -2552,14 +2554,14 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1302 #: pretix/base/exporters/orderlist.py:1305 #: pretix/base/models/memberships.py:120 pretix/control/forms/filter.py:244 -#: pretix/control/forms/filter.py:1413 pretix/control/forms/filter.py:1416 +#: pretix/control/forms/filter.py:1417 pretix/control/forms/filter.py:1420 #: pretix/control/templates/pretixcontrol/event/live.html:75 msgid "Test mode" msgstr "" #: pretix/base/exporters/orderlist.py:1218 pretix/base/models/organizer.py:96 #: pretix/control/forms/event.py:110 pretix/control/forms/event.py:116 -#: pretix/control/forms/filter.py:881 pretix/control/forms/filter.py:1000 +#: pretix/control/forms/filter.py:888 pretix/control/forms/filter.py:1006 #: pretix/control/forms/filter.py:1682 #: pretix/control/templates/pretixcontrol/email_setup.html:6 #: pretix/control/templates/pretixcontrol/email_setup_simple.html:6 @@ -2576,9 +2578,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1225 pretix/base/invoice.py:573 #: pretix/control/templates/pretixcontrol/base.html:280 #: pretix/control/templates/pretixcontrol/checkin/index.html:145 -#: pretix/control/templates/pretixcontrol/order/index.html:24 +#: pretix/control/templates/pretixcontrol/order/index.html:25 #: pretix/control/templates/pretixcontrol/orders/bulk_action.html:38 -#: pretix/control/templates/pretixcontrol/orders/index.html:190 +#: pretix/control/templates/pretixcontrol/orders/index.html:189 #: pretix/control/templates/pretixcontrol/orders/refunds.html:86 #: pretix/control/templates/pretixcontrol/organizers/customer.html:133 #: pretix/control/templates/pretixcontrol/organizers/customer.html:222 @@ -2592,7 +2594,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/search/payments.html:119 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:67 #: pretix/presale/forms/checkout.py:259 -#: pretix/presale/templates/pretixpresale/event/order.html:68 +#: pretix/presale/templates/pretixpresale/event/order.html:69 #: pretix/presale/templates/pretixpresale/event/position.html:14 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:20 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:84 @@ -2635,15 +2637,16 @@ msgid "Defaults to the time of report." msgstr "" #: pretix/base/exporters/orderlist.py:1304 -#: pretix/base/exporters/orderlist.py:1314 pretix/control/forms/filter.py:518 -#: pretix/control/forms/filter.py:1194 pretix/control/forms/filter.py:1415 -#: pretix/control/forms/filter.py:1424 pretix/control/forms/filter.py:1496 -#: pretix/control/forms/filter.py:1506 pretix/control/forms/filter.py:1569 -#: pretix/control/forms/filter.py:2011 pretix/control/forms/filter.py:2020 -#: pretix/control/forms/filter.py:2092 pretix/control/forms/filter.py:2105 -#: pretix/control/forms/filter.py:2613 pretix/control/forms/filter.py:2632 -#: pretix/control/templates/pretixcontrol/checkin/lists.html:135 -#: pretix/control/templates/pretixcontrol/checkin/lists.html:141 +#: pretix/base/exporters/orderlist.py:1314 pretix/control/forms/filter.py:519 +#: pretix/control/forms/filter.py:1200 pretix/control/forms/filter.py:1419 +#: pretix/control/forms/filter.py:1428 pretix/control/forms/filter.py:1498 +#: pretix/control/forms/filter.py:1508 pretix/control/forms/filter.py:1570 +#: pretix/control/forms/filter.py:2009 pretix/control/forms/filter.py:2018 +#: pretix/control/forms/filter.py:2089 pretix/control/forms/filter.py:2102 +#: pretix/control/forms/filter.py:2608 pretix/control/forms/filter.py:2627 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:134 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:140 +#: pretix/control/templates/pretixcontrol/event/plugins.html:24 #: pretix/control/templates/pretixcontrol/items/discounts.html:113 #: pretix/control/templates/pretixcontrol/organizers/devices.html:147 #: pretix/control/templates/pretixcontrol/organizers/teams.html:61 @@ -2656,25 +2659,25 @@ msgstr "" msgid "All" msgstr "" -#: pretix/base/exporters/orderlist.py:1306 pretix/control/forms/filter.py:1417 +#: pretix/base/exporters/orderlist.py:1306 pretix/control/forms/filter.py:1421 msgid "Live" msgstr "" -#: pretix/base/exporters/orderlist.py:1315 pretix/control/forms/filter.py:1425 +#: pretix/base/exporters/orderlist.py:1315 pretix/control/forms/filter.py:1429 #: pretix/control/templates/pretixcontrol/pdf/index.html:252 msgid "Empty" msgstr "" -#: pretix/base/exporters/orderlist.py:1316 pretix/control/forms/filter.py:1426 +#: pretix/base/exporters/orderlist.py:1316 pretix/control/forms/filter.py:1430 msgid "Valid and with value" msgstr "" -#: pretix/base/exporters/orderlist.py:1317 pretix/control/forms/filter.py:1427 +#: pretix/base/exporters/orderlist.py:1317 pretix/control/forms/filter.py:1431 msgid "Expired and with value" msgstr "" #: pretix/base/exporters/orderlist.py:1318 pretix/control/forms/filter.py:227 -#: pretix/control/forms/filter.py:1428 pretix/control/forms/filter.py:2097 +#: pretix/control/forms/filter.py:1432 pretix/control/forms/filter.py:2094 #: pretix/control/templates/pretixcontrol/items/question.html:31 #: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:37 #: pretix/control/templates/pretixcontrol/orders/overview.html:78 @@ -2690,12 +2693,12 @@ msgstr "" #: pretix/base/exporters/orderlist.py:1358 #: pretix/base/modelimport_orders.py:516 pretix/base/models/giftcards.py:102 -#: pretix/control/templates/pretixcontrol/order/index.html:202 +#: pretix/control/templates/pretixcontrol/order/index.html:203 #: pretix/control/templates/pretixcontrol/organizers/giftcards.html:62 msgid "Expiry date" msgstr "" -#: pretix/base/exporters/orderlist.py:1359 pretix/control/forms/orders.py:881 +#: pretix/base/exporters/orderlist.py:1359 pretix/control/forms/orders.py:892 msgid "Special terms and conditions" msgstr "" @@ -2749,15 +2752,15 @@ msgid "Identifier" msgstr "" #: pretix/base/exporters/reusablemedia.py:49 pretix/base/models/media.py:81 -#: pretix/base/models/orders.py:265 pretix/base/models/orders.py:3094 -#: pretix/control/forms/orders.py:76 +#: pretix/base/models/orders.py:265 pretix/base/models/orders.py:3098 +#: pretix/control/forms/orders.py:78 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:138 msgid "Expiration date" msgstr "" #: pretix/base/exporters/reusablemedia.py:50 pretix/base/models/media.py:90 -#: pretix/control/templates/pretixcontrol/order/index.html:215 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:132 +#: pretix/control/templates/pretixcontrol/order/index.html:216 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:133 msgid "Customer account" msgstr "" @@ -2814,7 +2817,7 @@ msgid "Voucher expired" msgstr "" #: pretix/base/exporters/waitinglist.py:111 pretix/base/pdf.py:121 -#: pretix/control/forms/event.py:1764 +#: pretix/control/forms/event.py:1766 #: pretix/control/templates/pretixcontrol/items/index.html:38 msgid "Product name" msgstr "" @@ -2836,7 +2839,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/index.html:18 #: pretix/control/templates/pretixcontrol/vouchers/index.html:114 #: pretix/control/views/vouchers.py:119 pretix/control/views/waitinglist.py:314 -#: pretix/plugins/checkinlists/exporters.py:517 +#: pretix/plugins/checkinlists/exporters.py:519 #: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:74 #: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:76 #: pretix/presale/templates/pretixpresale/event/fragment_voucher_form.html:12 @@ -2940,11 +2943,6 @@ msgstr "" msgid "Street and Number" msgstr "" -#: pretix/base/forms/questions.py:724 pretix/base/forms/questions.py:1082 -msgctxt "address" -msgid "Select state" -msgstr "" - #: pretix/base/forms/questions.py:1068 msgid "" "Optional, but depending on the country you reside in we might need to charge " @@ -2961,11 +2959,11 @@ msgid "" "invoice depending on your and the seller’s country of residence." msgstr "" -#: pretix/base/forms/questions.py:1173 +#: pretix/base/forms/questions.py:1176 msgid "You need to provide a company name." msgstr "" -#: pretix/base/forms/questions.py:1175 +#: pretix/base/forms/questions.py:1178 msgid "You need to provide your name." msgstr "" @@ -3039,7 +3037,7 @@ msgid "" "\"{{\" and \"}}\"." msgstr "" -#: pretix/base/forms/validators.py:72 pretix/control/views/event.py:761 +#: pretix/base/forms/validators.py:72 pretix/control/views/event.py:804 #, python-format msgid "Invalid placeholder: {%(value)s}" msgstr "" @@ -3055,7 +3053,7 @@ msgid "Available placeholders: {list}" msgstr "" #: pretix/base/forms/widgets.py:214 pretix/base/models/items.py:1655 -#: pretix/base/reldate.py:216 pretix/plugins/checkinlists/exporters.py:751 +#: pretix/base/reldate.py:216 pretix/plugins/checkinlists/exporters.py:753 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_create.html:40 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_update.html:54 msgid "Time" @@ -3171,8 +3169,9 @@ msgid "Invoice" msgstr "" #: pretix/base/invoice.py:659 -#: pretix/control/templates/pretixcontrol/order/index.html:271 -#: pretix/presale/templates/pretixpresale/event/order.html:243 +#: pretix/control/templates/pretixcontrol/order/index.html:272 +#: pretix/control/templates/pretixcontrol/order/mail_history.html:66 +#: pretix/presale/templates/pretixpresale/event/order.html:244 msgctxt "invoice" msgid "Cancellation" msgstr "" @@ -3392,9 +3391,9 @@ msgstr "" msgid "Could not parse {value} as a date and time." msgstr "" -#: pretix/base/modelimport.py:232 pretix/control/views/orders.py:1162 -#: pretix/control/views/orders.py:1191 pretix/control/views/orders.py:1235 -#: pretix/control/views/orders.py:1270 pretix/control/views/orders.py:1293 +#: pretix/base/modelimport.py:232 pretix/control/views/orders.py:1183 +#: pretix/control/views/orders.py:1212 pretix/control/views/orders.py:1256 +#: pretix/control/views/orders.py:1291 pretix/control/views/orders.py:1314 msgid "You entered an invalid number." msgstr "" @@ -3453,10 +3452,10 @@ msgstr "" #: pretix/base/modelimport_orders.py:206 pretix/base/modelimport_orders.py:217 #: pretix/base/modelimport_orders.py:228 pretix/base/modelimport_orders.py:244 #: pretix/base/modelimport_orders.py:263 pretix/base/modelimport_orders.py:288 -#: pretix/base/modelimport_orders.py:299 pretix/control/forms/filter.py:620 -#: pretix/control/forms/filter.py:624 pretix/control/forms/filter.py:628 -#: pretix/control/forms/filter.py:632 pretix/control/forms/filter.py:637 -#: pretix/control/forms/filter.py:642 +#: pretix/base/modelimport_orders.py:299 pretix/control/forms/filter.py:621 +#: pretix/control/forms/filter.py:625 pretix/control/forms/filter.py:629 +#: pretix/control/forms/filter.py:633 pretix/control/forms/filter.py:638 +#: pretix/control/forms/filter.py:643 msgid "Invoice address" msgstr "" @@ -3472,19 +3471,19 @@ msgstr "" msgid "Please enter a valid state." msgstr "" -#: pretix/base/modelimport_orders.py:325 pretix/control/forms/filter.py:651 +#: pretix/base/modelimport_orders.py:325 pretix/control/forms/filter.py:652 msgid "Attendee email address" msgstr "" #: pretix/base/modelimport_orders.py:341 pretix/base/modelimport_orders.py:352 #: pretix/base/modelimport_orders.py:363 pretix/base/modelimport_orders.py:374 #: pretix/base/modelimport_orders.py:390 pretix/base/modelimport_orders.py:409 -#: pretix/control/forms/filter.py:655 pretix/control/forms/filter.py:659 -#: pretix/control/forms/filter.py:663 pretix/control/forms/filter.py:668 -#: pretix/control/forms/filter.py:673 -#: pretix/control/templates/pretixcontrol/order/index.html:557 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:197 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:200 +#: pretix/control/forms/filter.py:656 pretix/control/forms/filter.py:660 +#: pretix/control/forms/filter.py:664 pretix/control/forms/filter.py:669 +#: pretix/control/forms/filter.py:674 +#: pretix/control/templates/pretixcontrol/order/index.html:554 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:192 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:195 msgid "Attendee address" msgstr "" @@ -3498,7 +3497,7 @@ msgstr "" #: pretix/base/modelimport_orders.py:450 #: pretix/control/templates/pretixcontrol/checkin/index.html:111 -#: pretix/control/templates/pretixcontrol/order/index.html:497 +#: pretix/control/templates/pretixcontrol/order/index.html:494 msgid "Ticket code" msgstr "" @@ -3558,7 +3557,7 @@ msgid "Ambiguous option selected." msgstr "" #: pretix/base/modelimport_orders.py:698 pretix/base/models/orders.py:239 -#: pretix/control/forms/orders.py:694 pretix/control/forms/organizer.py:840 +#: pretix/control/forms/orders.py:696 pretix/control/forms/organizer.py:840 msgid "Customer" msgstr "" @@ -3589,7 +3588,7 @@ msgid "Maximum discount budget" msgstr "" #: pretix/base/modelimport_vouchers.py:119 pretix/base/models/vouchers.py:225 -#: pretix/control/forms/filter.py:2106 +#: pretix/control/forms/filter.py:2103 msgid "Reserve ticket from quota" msgstr "" @@ -3693,7 +3692,7 @@ msgstr "" #: pretix/base/models/auth.py:283 #: pretix/control/templates/pretixcontrol/orders/bulk_action.html:23 -#: pretix/control/templates/pretixcontrol/orders/index.html:136 +#: pretix/control/templates/pretixcontrol/orders/index.html:135 #: pretix/control/templates/pretixcontrol/search/orders.html:54 #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:23 #: pretix/control/templates/pretixcontrol/user/staff_session_list.html:15 @@ -3723,7 +3722,7 @@ msgid "All products (including newly created ones)" msgstr "" #: pretix/base/models/checkin.py:56 pretix/plugins/badges/exporters.py:436 -#: pretix/plugins/checkinlists/exporters.py:842 +#: pretix/plugins/checkinlists/exporters.py:844 msgid "Limit to products" msgstr "" @@ -3881,8 +3880,8 @@ msgid "" "underscores. It must start and end with a letter or number." msgstr "" -#: pretix/base/models/customers.py:195 pretix/control/forms/filter.py:1498 -#: pretix/control/forms/filter.py:1571 +#: pretix/base/models/customers.py:195 pretix/control/forms/filter.py:1500 +#: pretix/control/forms/filter.py:1572 #: pretix/control/templates/pretixcontrol/organizers/customer.html:42 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:56 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:135 @@ -3890,13 +3889,13 @@ msgstr "" msgid "disabled" msgstr "" -#: pretix/base/models/customers.py:310 pretix/base/models/orders.py:1536 -#: pretix/base/models/orders.py:3262 pretix/base/settings.py:1111 +#: pretix/base/models/customers.py:310 pretix/base/models/orders.py:1538 +#: pretix/base/models/orders.py:3266 pretix/base/settings.py:1111 msgid "Company name" msgstr "" -#: pretix/base/models/customers.py:314 pretix/base/models/orders.py:1540 -#: pretix/base/models/orders.py:3269 pretix/base/settings.py:82 +#: pretix/base/models/customers.py:314 pretix/base/models/orders.py:1542 +#: pretix/base/models/orders.py:3273 pretix/base/settings.py:82 #: pretix/plugins/stripe/payment.py:272 msgid "Select country" msgstr "" @@ -3958,11 +3957,11 @@ msgid "This identifier is already used for a different question." msgstr "" #: pretix/base/models/devices.py:113 pretix/control/forms/checkin.py:196 -#: pretix/control/forms/checkin.py:217 pretix/control/forms/filter.py:2398 -#: pretix/control/forms/filter.py:2445 pretix/control/forms/filter.py:2606 +#: pretix/control/forms/checkin.py:217 pretix/control/forms/filter.py:2394 +#: pretix/control/forms/filter.py:2441 pretix/control/forms/filter.py:2601 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:67 #: pretix/control/templates/pretixcontrol/organizers/gates.html:16 -#: pretix/plugins/checkinlists/exporters.py:763 +#: pretix/plugins/checkinlists/exporters.py:765 msgid "Gate" msgstr "" @@ -4115,15 +4114,15 @@ msgid "" "is only valid for bookings of different dates." msgstr "" -#: pretix/base/models/event.py:87 +#: pretix/base/models/event.py:88 msgid "The end of the presale period has to be later than its start." msgstr "" -#: pretix/base/models/event.py:89 +#: pretix/base/models/event.py:90 msgid "The end of the event has to be later than its start." msgstr "" -#: pretix/base/models/event.py:564 +#: pretix/base/models/event.py:577 msgid "" "Should be short, only contain lowercase letters, numbers, dots, and dashes, " "and must be unique among your events. We recommend some kind of abbreviation " @@ -4132,37 +4131,37 @@ msgid "" "codes, invoice numbers, and bank transfer references." msgstr "" -#: pretix/base/models/event.py:571 pretix/base/models/organizer.py:87 +#: pretix/base/models/event.py:584 pretix/base/models/organizer.py:87 msgid "The slug may only contain letters, numbers, dots and dashes." msgstr "" -#: pretix/base/models/event.py:588 pretix/base/models/event.py:1464 +#: pretix/base/models/event.py:601 pretix/base/models/event.py:1477 msgid "Show in lists" msgstr "" -#: pretix/base/models/event.py:589 +#: pretix/base/models/event.py:602 msgid "" "If selected, this event will show up publicly on the list of events for your " "organizer account." msgstr "" -#: pretix/base/models/event.py:593 pretix/base/models/event.py:1479 +#: pretix/base/models/event.py:606 pretix/base/models/event.py:1492 #: pretix/control/forms/subevents.py:100 msgid "" "Optional. No products will be sold after this date. If you do not set this " "value, the presale will end after the end date of your event." msgstr "" -#: pretix/base/models/event.py:599 pretix/base/models/event.py:1485 +#: pretix/base/models/event.py:612 pretix/base/models/event.py:1498 #: pretix/control/forms/subevents.py:94 msgid "Optional. No products will be sold before this date." msgstr "" -#: pretix/base/models/event.py:624 pretix/control/navigation.py:65 +#: pretix/base/models/event.py:637 pretix/control/navigation.py:65 msgid "Plugins" msgstr "" -#: pretix/base/models/event.py:631 pretix/base/pdf.py:229 +#: pretix/base/models/event.py:644 pretix/base/pdf.py:229 #: pretix/control/forms/event.py:273 pretix/control/forms/filter.py:1677 #: pretix/control/templates/pretixcontrol/event/index.html:13 #: pretix/control/views/dashboards.py:543 @@ -4172,20 +4171,20 @@ msgstr "" msgid "Event series" msgstr "" -#: pretix/base/models/event.py:635 pretix/base/models/event.py:1513 +#: pretix/base/models/event.py:648 pretix/base/models/event.py:1526 msgid "Seating plan" msgstr "" -#: pretix/base/models/event.py:642 pretix/base/models/items.py:675 +#: pretix/base/models/event.py:655 pretix/base/models/items.py:675 msgid "Sell on all sales channels" msgstr "" -#: pretix/base/models/event.py:647 pretix/base/models/items.py:680 +#: pretix/base/models/event.py:660 pretix/base/models/items.py:680 #: pretix/base/models/items.py:1229 pretix/base/payment.py:417 msgid "Restrict to specific sales channels" msgstr "" -#: pretix/base/models/event.py:655 pretix/control/navigation.py:344 +#: pretix/base/models/event.py:668 pretix/control/navigation.py:344 #: pretix/control/navigation.py:470 #: pretix/control/templates/pretixcontrol/events/index.html:5 #: pretix/control/templates/pretixcontrol/events/index.html:7 @@ -4198,144 +4197,144 @@ msgstr "" msgid "Events" msgstr "" -#: pretix/base/models/event.py:1292 +#: pretix/base/models/event.py:1305 msgid "" "You have configured at least one paid product but have not enabled any " "payment methods." msgstr "" -#: pretix/base/models/event.py:1295 +#: pretix/base/models/event.py:1308 msgid "" "You have configured at least one paid product but have not configured a " "currency." msgstr "" -#: pretix/base/models/event.py:1298 +#: pretix/base/models/event.py:1311 msgid "You need to configure at least one quota to sell anything." msgstr "" -#: pretix/base/models/event.py:1303 +#: pretix/base/models/event.py:1316 #, python-brace-format msgid "You need to fill the meta parameter \"{property}\"." msgstr "" -#: pretix/base/models/event.py:1410 +#: pretix/base/models/event.py:1423 msgid "" "Once created an event cannot change between an series and a single event." msgstr "" -#: pretix/base/models/event.py:1416 +#: pretix/base/models/event.py:1429 msgid "The event slug cannot be changed." msgstr "" -#: pretix/base/models/event.py:1419 +#: pretix/base/models/event.py:1432 msgid "This slug has already been used for a different event." msgstr "" -#: pretix/base/models/event.py:1425 +#: pretix/base/models/event.py:1438 msgid "The event cannot end before it starts." msgstr "" -#: pretix/base/models/event.py:1431 +#: pretix/base/models/event.py:1444 msgid "The event's presale cannot end before it starts." msgstr "" -#: pretix/base/models/event.py:1461 +#: pretix/base/models/event.py:1474 msgid "" "Only with this checkbox enabled, this date is visible in the frontend to " "users." msgstr "" -#: pretix/base/models/event.py:1465 +#: pretix/base/models/event.py:1478 msgid "" "If selected, this event will show up publicly on the list of dates for your " "event." msgstr "" -#: pretix/base/models/event.py:1510 pretix/base/settings.py:3025 +#: pretix/base/models/event.py:1523 pretix/base/settings.py:3025 msgid "Frontpage text" msgstr "" -#: pretix/base/models/event.py:1527 +#: pretix/base/models/event.py:1540 msgid "Date in event series" msgstr "" -#: pretix/base/models/event.py:1528 +#: pretix/base/models/event.py:1541 msgid "Dates in event series" msgstr "" -#: pretix/base/models/event.py:1673 +#: pretix/base/models/event.py:1686 msgid "One or more variations do not belong to this event." msgstr "" -#: pretix/base/models/event.py:1703 pretix/base/models/items.py:2207 +#: pretix/base/models/event.py:1716 pretix/base/models/items.py:2207 msgid "Can not contain spaces or special characters except underscores" msgstr "" -#: pretix/base/models/event.py:1708 pretix/base/models/items.py:2212 +#: pretix/base/models/event.py:1721 pretix/base/models/items.py:2212 msgid "The property name may only contain letters, numbers and underscores." msgstr "" -#: pretix/base/models/event.py:1713 +#: pretix/base/models/event.py:1726 msgid "Default value" msgstr "" -#: pretix/base/models/event.py:1715 +#: pretix/base/models/event.py:1728 #: pretix/control/templates/pretixcontrol/organizers/properties.html:50 msgid "Can only be changed by organizer-level administrators" msgstr "" -#: pretix/base/models/event.py:1717 +#: pretix/base/models/event.py:1730 msgid "Required for events" msgstr "" -#: pretix/base/models/event.py:1718 +#: pretix/base/models/event.py:1731 msgid "" "If checked, an event can only be taken live if the property is set. In event " "series, its always optional to set a value for individual dates" msgstr "" -#: pretix/base/models/event.py:1724 pretix/base/models/items.py:2224 +#: pretix/base/models/event.py:1737 pretix/base/models/items.py:2224 msgid "Valid values" msgstr "" -#: pretix/base/models/event.py:1727 +#: pretix/base/models/event.py:1740 #: pretix/control/templates/pretixcontrol/organizers/properties.html:45 msgid "Show filter option to customers" msgstr "" -#: pretix/base/models/event.py:1728 +#: pretix/base/models/event.py:1741 msgid "" "This field will be shown to filter events in the public event list and " "calendar." msgstr "" -#: pretix/base/models/event.py:1731 pretix/control/forms/organizer.py:269 +#: pretix/base/models/event.py:1744 pretix/control/forms/organizer.py:269 #: pretix/control/forms/organizer.py:273 msgid "Public name" msgstr "" -#: pretix/base/models/event.py:1735 +#: pretix/base/models/event.py:1748 #: pretix/control/templates/pretixcontrol/organizers/properties.html:40 msgid "Can be used for filtering" msgstr "" -#: pretix/base/models/event.py:1736 +#: pretix/base/models/event.py:1749 msgid "" "This field will be shown to filter events or reports in the backend, and it " "can also be used for hidden filter parameters in the frontend (e.g. using " "the widget)." msgstr "" -#: pretix/base/models/event.py:1746 +#: pretix/base/models/event.py:1759 msgid "A property can either be required or have a default value, not both." msgstr "" -#: pretix/base/models/event.py:1826 pretix/base/models/organizer.py:516 +#: pretix/base/models/event.py:1839 pretix/base/models/organizer.py:516 msgid "Link text" msgstr "" -#: pretix/base/models/event.py:1829 pretix/base/models/organizer.py:519 +#: pretix/base/models/event.py:1842 pretix/base/models/organizer.py:519 msgid "Link URL" msgstr "" @@ -4363,8 +4362,8 @@ msgstr "" #: pretix/base/models/exports.py:74 pretix/control/forms/event.py:1099 #: pretix/control/forms/event.py:1173 pretix/control/forms/event.py:1183 -#: pretix/control/forms/event.py:1193 pretix/control/forms/orders.py:718 -#: pretix/control/forms/orders.py:931 pretix/control/forms/orders.py:958 +#: pretix/control/forms/event.py:1193 pretix/control/forms/orders.py:720 +#: pretix/control/forms/orders.py:942 pretix/control/forms/orders.py:969 #: pretix/control/forms/organizer.py:600 pretix/control/forms/organizer.py:610 #: pretix/control/forms/organizer.py:620 pretix/control/forms/vouchers.py:273 #: pretix/plugins/sendmail/forms.py:57 pretix/plugins/sendmail/forms.py:73 @@ -4372,9 +4371,9 @@ msgstr "" msgid "Subject" msgstr "" -#: pretix/base/models/exports.py:78 pretix/control/forms/orders.py:754 -#: pretix/control/forms/orders.py:771 pretix/control/forms/orders.py:939 -#: pretix/control/forms/orders.py:966 pretix/control/forms/vouchers.py:279 +#: pretix/base/models/exports.py:78 pretix/control/forms/orders.py:759 +#: pretix/control/forms/orders.py:782 pretix/control/forms/orders.py:950 +#: pretix/control/forms/orders.py:977 pretix/control/forms/vouchers.py:279 #: pretix/plugins/sendmail/forms.py:58 pretix/plugins/sendmail/forms.py:78 #: pretix/plugins/sendmail/models.py:249 msgid "Message" @@ -4612,7 +4611,7 @@ msgid "This will only work if waiting lists are enabled for this event." msgstr "" #: pretix/base/models/items.py:548 pretix/base/settings.py:1355 -#: pretix/control/forms/event.py:1677 +#: pretix/control/forms/event.py:1679 msgid "Show number of tickets left" msgstr "" @@ -4842,7 +4841,7 @@ msgid "" msgstr "" #: pretix/base/models/items.py:795 pretix/base/models/items.py:1701 -#: pretix/control/forms/filter.py:420 pretix/control/forms/filter.py:1897 +#: pretix/control/forms/filter.py:421 pretix/control/forms/filter.py:1895 #: pretix/control/forms/item.py:272 pretix/control/navigation.py:138 #: pretix/control/navigation.py:147 #: pretix/control/templates/pretixcontrol/checkin/lists.html:104 @@ -5219,7 +5218,7 @@ msgstr "" msgid "Question options" msgstr "" -#: pretix/base/models/items.py:2045 pretix/control/forms/event.py:1711 +#: pretix/base/models/items.py:2045 pretix/control/forms/event.py:1713 #: pretix/control/templates/pretixcontrol/items/quotas.html:56 msgid "Total capacity" msgstr "" @@ -5228,8 +5227,8 @@ msgstr "" msgid "Leave empty for an unlimited number of tickets." msgstr "" -#: pretix/base/models/items.py:2051 pretix/base/models/orders.py:1487 -#: pretix/base/models/orders.py:2982 +#: pretix/base/models/items.py:2051 pretix/base/models/orders.py:1489 +#: pretix/base/models/orders.py:2986 #: pretix/control/templates/pretixcontrol/checkin/index.html:97 msgid "Item" msgstr "" @@ -5296,7 +5295,7 @@ msgid "" "list." msgstr "" -#: pretix/base/models/items.py:2183 pretix/base/models/waitinglist.py:303 +#: pretix/base/models/items.py:2183 pretix/base/models/waitinglist.py:305 msgid "Subevent cannot be null for event series." msgstr "" @@ -5371,17 +5370,17 @@ msgstr "" msgid "paid" msgstr "" -#: pretix/base/models/orders.py:204 pretix/control/forms/filter.py:1572 +#: pretix/base/models/orders.py:204 pretix/control/forms/filter.py:1573 #: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:37 msgid "expired" msgstr "" -#: pretix/base/models/orders.py:254 pretix/control/forms/filter.py:560 +#: pretix/base/models/orders.py:254 pretix/control/forms/filter.py:561 #: pretix/control/templates/pretixcontrol/organizers/customer.html:64 msgid "Locale" msgstr "" -#: pretix/base/models/orders.py:269 pretix/control/forms/filter.py:571 +#: pretix/base/models/orders.py:269 pretix/control/forms/filter.py:572 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:57 msgid "Total amount" msgstr "" @@ -5410,7 +5409,7 @@ msgid "" "scanned." msgstr "" -#: pretix/base/models/orders.py:301 pretix/base/models/orders.py:1524 +#: pretix/base/models/orders.py:301 pretix/base/models/orders.py:1526 msgid "Meta information" msgstr "" @@ -5468,147 +5467,147 @@ msgstr "" msgid "The voucher \"{voucher}\" has been used in the meantime." msgstr "" -#: pretix/base/models/orders.py:1403 +#: pretix/base/models/orders.py:1405 msgid "" msgstr "" -#: pretix/base/models/orders.py:1504 pretix/base/models/orders.py:1512 +#: pretix/base/models/orders.py:1506 pretix/base/models/orders.py:1514 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1721 -msgctxt "payment_state" -msgid "created" -msgstr "" - -#: pretix/base/models/orders.py:1722 -msgctxt "payment_state" -msgid "pending" -msgstr "" - #: pretix/base/models/orders.py:1723 msgctxt "payment_state" -msgid "confirmed" +msgid "created" msgstr "" #: pretix/base/models/orders.py:1724 msgctxt "payment_state" -msgid "canceled" +msgid "pending" msgstr "" #: pretix/base/models/orders.py:1725 msgctxt "payment_state" -msgid "failed" +msgid "confirmed" msgstr "" #: pretix/base/models/orders.py:1726 msgctxt "payment_state" +msgid "canceled" +msgstr "" + +#: pretix/base/models/orders.py:1727 +msgctxt "payment_state" +msgid "failed" +msgstr "" + +#: pretix/base/models/orders.py:1728 +msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1754 pretix/base/models/orders.py:2168 +#: pretix/base/models/orders.py:1756 pretix/base/models/orders.py:2170 #: pretix/base/shredder.py:629 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:2109 +#: pretix/base/models/orders.py:2111 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:2110 +#: pretix/base/models/orders.py:2112 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:2111 +#: pretix/base/models/orders.py:2113 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:2112 +#: pretix/base/models/orders.py:2114 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:2113 +#: pretix/base/models/orders.py:2115 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:2115 +#: pretix/base/models/orders.py:2117 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:2123 +#: pretix/base/models/orders.py:2125 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:2124 +#: pretix/base/models/orders.py:2126 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:2125 +#: pretix/base/models/orders.py:2127 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:2163 +#: pretix/base/models/orders.py:2165 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:198 msgid "Refund reason" msgstr "" -#: pretix/base/models/orders.py:2164 +#: pretix/base/models/orders.py:2166 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:199 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:201 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:2284 +#: pretix/base/models/orders.py:2286 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:2285 +#: pretix/base/models/orders.py:2287 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:2286 +#: pretix/base/models/orders.py:2288 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:2287 -#: pretix/control/templates/pretixcontrol/order/index.html:156 +#: pretix/base/models/orders.py:2289 +#: pretix/control/templates/pretixcontrol/order/index.html:157 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:2288 +#: pretix/base/models/orders.py:2290 msgid "Insurance fee" msgstr "" -#: pretix/base/models/orders.py:2289 +#: pretix/base/models/orders.py:2291 msgid "Late fee" msgstr "" -#: pretix/base/models/orders.py:2290 +#: pretix/base/models/orders.py:2292 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:2291 pretix/base/payment.py:1317 +#: pretix/base/models/orders.py:2293 pretix/base/payment.py:1317 #: pretix/base/payment.py:1321 pretix/base/settings.py:991 #: pretix/control/forms/organizer.py:826 #: pretix/control/templates/pretixcontrol/items/index.html:106 -#: pretix/control/templates/pretixcontrol/order/index.html:151 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:387 +#: pretix/control/templates/pretixcontrol/order/index.html:152 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:382 #: pretix/presale/templates/pretixpresale/event/order_giftcard.html:7 #: pretix/presale/templates/pretixpresale/event/position_giftcard.html:7 msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:2296 +#: pretix/base/models/orders.py:2298 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:74 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:115 #: pretix/control/views/vouchers.py:120 @@ -5616,48 +5615,48 @@ msgstr "" msgid "Value" msgstr "" -#: pretix/base/models/orders.py:2544 +#: pretix/base/models/orders.py:2546 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:3087 +#: pretix/base/models/orders.py:3091 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:3124 +#: pretix/base/models/orders.py:3128 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:3125 +#: pretix/base/models/orders.py:3129 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:3261 +#: pretix/base/models/orders.py:3265 msgid "Business customer" msgstr "" -#: pretix/base/models/orders.py:3277 +#: pretix/base/models/orders.py:3281 msgid "This reference will be printed on your invoice for your convenience." msgstr "" -#: pretix/base/models/orders.py:3461 +#: pretix/base/models/orders.py:3465 #: pretix/plugins/badges/templates/pretixplugins/badges/control_order_position_buttons.html:9 msgid "Badge" msgstr "" -#: pretix/base/models/orders.py:3462 pretix/base/pdf.py:1113 +#: pretix/base/models/orders.py:3466 pretix/base/pdf.py:1113 #: pretix/control/forms/organizer.py:777 pretix/control/forms/organizer.py:813 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:66 #: pretix/plugins/ticketoutputpdf/ticketoutput.py:113 msgid "Ticket" msgstr "" -#: pretix/base/models/orders.py:3463 +#: pretix/base/models/orders.py:3467 msgid "Certificate" msgstr "" -#: pretix/base/models/orders.py:3464 pretix/control/views/event.py:369 -#: pretix/control/views/event.py:374 +#: pretix/base/models/orders.py:3468 pretix/control/views/event.py:390 +#: pretix/control/views/event.py:395 msgid "Other" msgstr "" @@ -5969,7 +5968,7 @@ msgstr "" msgid "Should be short, e.g. \"VAT\"" msgstr "" -#: pretix/base/models/tax.py:330 pretix/control/forms/event.py:1509 +#: pretix/base/models/tax.py:330 pretix/control/forms/event.py:1511 #: pretix/control/templates/pretixcontrol/order/transactions.html:22 msgid "Tax code" msgstr "" @@ -6029,12 +6028,12 @@ msgstr "" msgid "You need to set your home country to use the reverse charge feature." msgstr "" -#: pretix/base/models/tax.py:416 pretix/control/forms/event.py:1556 +#: pretix/base/models/tax.py:416 pretix/control/forms/event.py:1558 msgid "" "A combination of this tax code with a non-zero tax rate does not make sense." msgstr "" -#: pretix/base/models/tax.py:421 pretix/control/forms/event.py:1560 +#: pretix/base/models/tax.py:421 pretix/control/forms/event.py:1562 msgid "" "A combination of this tax code with a zero tax rate does not make sense." msgstr "" @@ -6276,15 +6275,15 @@ msgstr "" msgid "Automatically created from waiting list entry for {email}" msgstr "" -#: pretix/base/models/waitinglist.py:295 +#: pretix/base/models/waitinglist.py:297 msgid "The selected item does not belong to this event." msgstr "" -#: pretix/base/models/waitinglist.py:297 +#: pretix/base/models/waitinglist.py:299 msgid "Please select a specific variation of this product." msgstr "" -#: pretix/base/models/waitinglist.py:315 +#: pretix/base/models/waitinglist.py:317 msgid "" "You are already on this waiting list! We will notify you as soon as we have " "a ticket available for you." @@ -6299,9 +6298,9 @@ msgid "Dates" msgstr "" #: pretix/base/notifications.py:200 -#: pretix/control/templates/pretixcontrol/order/index.html:684 +#: pretix/control/templates/pretixcontrol/order/index.html:681 #: pretix/plugins/reports/accountingreport.py:317 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:438 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:433 msgid "Net total" msgstr "" @@ -6320,7 +6319,7 @@ msgstr "" #: pretix/base/notifications.py:223 pretix/base/services/placeholders.py:384 #: pretix/base/services/placeholders.py:393 -#: pretix/base/templates/pretixbase/email/order_details.html:147 +#: pretix/base/templates/pretixbase/email/order_details.html:141 msgid "View order details" msgstr "" @@ -6403,7 +6402,7 @@ msgid "Google Pay" msgstr "" #: pretix/base/payment.py:256 -#: pretix/presale/templates/pretixpresale/event/order.html:115 +#: pretix/presale/templates/pretixpresale/event/order.html:116 msgid "Pay now" msgstr "" @@ -6413,12 +6412,12 @@ msgstr "" #: pretix/base/payment.py:336 msgid "" -"Users will not be able to choose this payment provider after the given date." +"Users will not be able to choose this payment provider before the given date." msgstr "" #: pretix/base/payment.py:342 msgid "" -"Users will not be able to choose this payment provider before the given date." +"Users will not be able to choose this payment provider after the given date." msgstr "" #: pretix/base/payment.py:347 @@ -6555,6 +6554,7 @@ msgstr "" #: pretix/base/payment.py:1162 pretix/base/payment.py:1181 #: pretix/plugins/manualpayment/apps.py:30 #: pretix/plugins/manualpayment/apps.py:33 +#: pretix/plugins/manualpayment/apps.py:39 msgid "Manual payment" msgstr "" @@ -6614,7 +6614,7 @@ msgstr "" msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1280 pretix/control/views/orders.py:1244 +#: pretix/base/payment.py:1280 pretix/control/views/orders.py:1265 msgid "You entered an order that could not be found." msgstr "" @@ -6701,7 +6701,7 @@ msgid "Order code and position number" msgstr "" #: pretix/base/pdf.py:122 pretix/base/services/tickets.py:101 -#: pretix/control/views/event.py:798 pretix/control/views/pdf.py:94 +#: pretix/control/views/event.py:841 pretix/control/views/pdf.py:94 msgid "Sample product" msgstr "" @@ -6718,7 +6718,7 @@ msgid "Product description" msgstr "" #: pretix/base/pdf.py:132 pretix/base/services/tickets.py:102 -#: pretix/control/views/event.py:799 pretix/control/views/pdf.py:95 +#: pretix/control/views/event.py:842 pretix/control/views/pdf.py:95 msgid "Sample product description" msgstr "" @@ -6755,21 +6755,23 @@ msgstr "" #: pretix/base/services/placeholders.py:571 #: pretix/base/services/placeholders.py:653 #: pretix/base/services/placeholders.py:669 -#: pretix/base/services/placeholders.py:678 pretix/control/views/event.py:800 +#: pretix/base/services/placeholders.py:678 pretix/control/views/event.py:843 msgid "John Doe" msgstr "" #: pretix/base/pdf.py:177 -#: pretix/control/templates/pretixcontrol/order/index.html:549 +#: pretix/control/templates/pretixcontrol/order/index.html:546 #: pretix/plugins/badges/exporters.py:496 #: pretix/plugins/ticketoutputpdf/exporters.py:95 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:186 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:189 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:181 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:184 msgid "Attendee company" msgstr "" #: pretix/base/pdf.py:178 pretix/base/pdf.py:336 -#: pretix/base/services/tickets.py:119 pretix/control/views/pdf.py:111 +#: pretix/base/services/tickets.py:119 pretix/control/views/pdf.py:110 +#: pretix/control/views/pdf.py:116 pretix/control/views/pdf.py:123 +#: pretix/control/views/pdf.py:128 msgid "Sample company" msgstr "" @@ -6857,7 +6859,7 @@ msgid "Event begin weekday" msgstr "" #: pretix/base/pdf.py:266 pretix/base/pdf.py:295 -#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1234 +#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1240 msgid "Friday" msgstr "" @@ -6941,8 +6943,8 @@ msgid "" "2x Add-on 2" msgstr "" -#: pretix/base/pdf.py:372 pretix/control/forms/filter.py:1375 -#: pretix/control/forms/filter.py:1377 +#: pretix/base/pdf.py:372 pretix/control/forms/filter.py:1380 +#: pretix/control/forms/filter.py:1382 #: pretix/control/templates/pretixcontrol/organizers/index.html:42 msgid "Organizer name" msgstr "" @@ -7024,7 +7026,7 @@ msgid "Ground floor, Row 3, Seat 4" msgstr "" #: pretix/base/pdf.py:491 pretix/base/pdf.py:497 -#: pretix/control/forms/orders.py:330 +#: pretix/control/forms/orders.py:332 msgid "General admission" msgstr "" @@ -7081,7 +7083,7 @@ msgstr "" #: pretix/base/pdf.py:655 pretix/base/pdf.py:662 #: pretix/plugins/badges/exporters.py:501 #: pretix/plugins/checkinlists/exporters.py:124 -#: pretix/plugins/checkinlists/exporters.py:495 +#: pretix/plugins/checkinlists/exporters.py:497 #: pretix/plugins/ticketoutputpdf/exporters.py:99 #, python-brace-format msgid "Attendee name: {part}" @@ -7160,13 +7162,13 @@ msgid "Event canceled" msgstr "" #: pretix/base/services/cart.py:101 pretix/base/services/modelimport.py:194 -#: pretix/base/services/orders.py:150 +#: pretix/base/services/orders.py:151 msgid "" "We were not able to process your request completely as the server was too " "busy. Please try again." msgstr "" -#: pretix/base/services/cart.py:104 pretix/presale/views/cart.py:260 +#: pretix/base/services/cart.py:104 pretix/presale/views/cart.py:262 msgid "You did not select any products." msgstr "" @@ -7179,7 +7181,7 @@ msgctxt "subevent" msgid "No date was specified." msgstr "" -#: pretix/base/services/cart.py:107 pretix/base/services/orders.py:187 +#: pretix/base/services/cart.py:107 pretix/base/services/orders.py:188 msgid "You selected a product which is not available for sale." msgstr "" @@ -7217,7 +7219,7 @@ msgid_plural "You cannot select more than %s items per order." msgstr[0] "" msgstr[1] "" -#: pretix/base/services/cart.py:130 pretix/base/services/orders.py:1539 +#: pretix/base/services/cart.py:130 pretix/base/services/orders.py:1541 #, python-format msgid "You cannot select more than %(max)s item of the product %(product)s." msgid_plural "" @@ -7225,7 +7227,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: pretix/base/services/cart.py:135 pretix/base/services/orders.py:1544 +#: pretix/base/services/cart.py:135 pretix/base/services/orders.py:1546 #, python-format msgid "You need to select at least %(min)s item of the product %(product)s." msgid_plural "" @@ -7244,7 +7246,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: pretix/base/services/cart.py:144 pretix/base/services/orders.py:153 +#: pretix/base/services/cart.py:144 pretix/base/services/orders.py:154 #: pretix/presale/templates/pretixpresale/event/index.html:167 #: pretix/presale/views/waiting.py:145 pretix/presale/views/widget.py:763 msgid "The booking period for this event has not yet started." @@ -7266,7 +7268,7 @@ msgid "" "positions have been removed from your cart." msgstr "" -#: pretix/base/services/cart.py:151 pretix/base/services/orders.py:181 +#: pretix/base/services/cart.py:151 pretix/base/services/orders.py:182 msgid "" "The booking period for one of the events in your cart has ended. The " "affected positions have been removed from your cart." @@ -7284,7 +7286,7 @@ msgstr "" msgid "This voucher code is not known in our database." msgstr "" -#: pretix/base/services/cart.py:157 pretix/base/services/orders.py:156 +#: pretix/base/services/cart.py:157 pretix/base/services/orders.py:157 #, python-format msgid "" "The voucher code \"%(voucher)s\" can only be used if you select at least " @@ -7376,15 +7378,15 @@ msgctxt "subevent" msgid "The selected event date is not active." msgstr "" -#: pretix/base/services/cart.py:194 pretix/base/services/orders.py:188 +#: pretix/base/services/cart.py:194 pretix/base/services/orders.py:189 msgid "You can not select an add-on for the selected product." msgstr "" -#: pretix/base/services/cart.py:195 pretix/base/services/orders.py:189 +#: pretix/base/services/cart.py:195 pretix/base/services/orders.py:190 msgid "You can not select two variations of the same add-on product." msgstr "" -#: pretix/base/services/cart.py:197 pretix/base/services/orders.py:191 +#: pretix/base/services/cart.py:197 pretix/base/services/orders.py:192 #, python-format msgid "" "You can select at most %(max)s add-on from the category %(cat)s for the " @@ -7395,7 +7397,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: pretix/base/services/cart.py:202 pretix/base/services/orders.py:196 +#: pretix/base/services/cart.py:202 pretix/base/services/orders.py:197 #, python-format msgid "" "You need to select at least %(min)s add-on from the category %(cat)s for the " @@ -7406,7 +7408,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: pretix/base/services/cart.py:206 pretix/base/services/orders.py:200 +#: pretix/base/services/cart.py:206 pretix/base/services/orders.py:201 #, python-format msgid "" "You can select every add-on from the category %(cat)s for the product " @@ -7522,27 +7524,27 @@ msgstr "" msgid "week day" msgstr "" -#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1230 +#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1236 msgid "Monday" msgstr "" -#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1231 +#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1237 msgid "Tuesday" msgstr "" -#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1232 +#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1238 msgid "Wednesday" msgstr "" -#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1233 +#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1239 msgid "Thursday" msgstr "" -#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1235 +#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1241 msgid "Saturday" msgstr "" -#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1236 +#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1242 msgid "Sunday" msgstr "" @@ -7845,7 +7847,7 @@ msgid "" "\"{line}\": {message}" msgstr "" -#: pretix/base/services/modelimport.py:89 pretix/base/services/orders.py:1548 +#: pretix/base/services/modelimport.py:89 pretix/base/services/orders.py:1550 #, python-format msgid "Orders cannot have more than %(max)s positions." msgstr "" @@ -7860,39 +7862,39 @@ msgstr "" msgid "A voucher cannot be created without a code." msgstr "" -#: pretix/base/services/orders.py:129 +#: pretix/base/services/orders.py:130 msgid "" "Some of the products you selected were no longer available. Please see below " "for details." msgstr "" -#: pretix/base/services/orders.py:133 +#: pretix/base/services/orders.py:134 msgid "" "Some of the products you selected were no longer available in the quantity " "you selected. Please see below for details." msgstr "" -#: pretix/base/services/orders.py:137 +#: pretix/base/services/orders.py:138 msgid "" "The price of some of the items in your cart has changed in the meantime. " "Please see below for details." msgstr "" -#: pretix/base/services/orders.py:140 +#: pretix/base/services/orders.py:141 msgid "An internal error occurred, please try again." msgstr "" -#: pretix/base/services/orders.py:141 +#: pretix/base/services/orders.py:142 msgid "" "This order was changed by someone else simultaneously. Please check if your " "changes are still accurate and try again." msgstr "" -#: pretix/base/services/orders.py:143 +#: pretix/base/services/orders.py:144 msgid "Your cart is empty." msgstr "" -#: pretix/base/services/orders.py:145 +#: pretix/base/services/orders.py:146 #, python-format msgid "" "You cannot select more than %(max)s item of the product %(product)s. We " @@ -7903,193 +7905,193 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: pretix/base/services/orders.py:154 +#: pretix/base/services/orders.py:155 msgid "The booking period has ended." msgstr "" -#: pretix/base/services/orders.py:160 +#: pretix/base/services/orders.py:161 msgid "" "The voucher code used for one of the items in your cart is not known in our " "database." msgstr "" -#: pretix/base/services/orders.py:162 +#: pretix/base/services/orders.py:163 msgid "" "The voucher code used for one of the items in your cart has already been " "used the maximum number of times allowed. We removed this item from your " "cart." msgstr "" -#: pretix/base/services/orders.py:166 +#: pretix/base/services/orders.py:167 msgid "" "The voucher code used for one of the items in your cart has already been too " "often. We adjusted the price of the item in your cart." msgstr "" -#: pretix/base/services/orders.py:170 +#: pretix/base/services/orders.py:171 msgid "" "The voucher code used for one of the items in your cart is expired. We " "removed this item from your cart." msgstr "" -#: pretix/base/services/orders.py:173 +#: pretix/base/services/orders.py:174 msgid "" "The voucher code used for one of the items in your cart is not valid for " "this item. We removed this item from your cart." msgstr "" -#: pretix/base/services/orders.py:175 +#: pretix/base/services/orders.py:176 msgid "You need a valid voucher code to order one of the products." msgstr "" -#: pretix/base/services/orders.py:177 +#: pretix/base/services/orders.py:178 msgid "" "The booking period for one of the events in your cart has not yet started. " "The affected positions have been removed from your cart." msgstr "" -#: pretix/base/services/orders.py:184 +#: pretix/base/services/orders.py:185 msgid "" "One of the seats in your order was invalid, we removed the position from " "your cart." msgstr "" -#: pretix/base/services/orders.py:185 +#: pretix/base/services/orders.py:186 msgid "" "One of the seats in your order has been taken in the meantime, we removed " "the position from your cart." msgstr "" -#: pretix/base/services/orders.py:201 +#: pretix/base/services/orders.py:202 #, python-format msgid "" "You cannot remove the position %(addon)s since it has already been checked " "in." msgstr "" -#: pretix/base/services/orders.py:202 +#: pretix/base/services/orders.py:203 msgid "Paid products not supported without a valid currency." msgstr "" -#: pretix/base/services/orders.py:218 +#: pretix/base/services/orders.py:219 msgid "The order was not canceled." msgstr "" -#: pretix/base/services/orders.py:272 pretix/control/forms/orders.py:124 +#: pretix/base/services/orders.py:273 pretix/control/forms/orders.py:126 msgid "The new expiry date needs to be in the future." msgstr "" -#: pretix/base/services/orders.py:365 pretix/base/services/orders.py:451 +#: pretix/base/services/orders.py:367 pretix/base/services/orders.py:453 msgid "This order is not pending approval." msgstr "" -#: pretix/base/services/orders.py:509 pretix/presale/views/order.py:928 +#: pretix/base/services/orders.py:511 pretix/presale/views/order.py:928 #: pretix/presale/views/order.py:982 msgid "You cannot cancel this order." msgstr "" -#: pretix/base/services/orders.py:521 +#: pretix/base/services/orders.py:523 #, python-brace-format msgid "" "This order can not be canceled since the gift card {card} purchased in this " "order has already been redeemed." msgstr "" -#: pretix/base/services/orders.py:561 pretix/control/forms/orders.py:205 +#: pretix/base/services/orders.py:563 pretix/control/forms/orders.py:207 msgid "" "The cancellation fee cannot be higher than the total amount of this order." msgstr "" -#: pretix/base/services/orders.py:955 +#: pretix/base/services/orders.py:957 msgid "The selected payment methods do not cover the total balance." msgstr "" -#: pretix/base/services/orders.py:1023 +#: pretix/base/services/orders.py:1025 msgid "" "While trying to place your order, we noticed that the order total has " "changed. Either one of the prices changed just now, or a gift card you used " "has been used in the meantime. Please check the prices below and try again." msgstr "" -#: pretix/base/services/orders.py:1518 +#: pretix/base/services/orders.py:1520 msgid "You need to select a variation of the product." msgstr "" -#: pretix/base/services/orders.py:1519 +#: pretix/base/services/orders.py:1521 #, python-brace-format msgid "" "The quota {name} does not have enough capacity left to perform the operation." msgstr "" -#: pretix/base/services/orders.py:1520 +#: pretix/base/services/orders.py:1522 msgid "There is no quota defined that allows this operation." msgstr "" -#: pretix/base/services/orders.py:1521 +#: pretix/base/services/orders.py:1523 msgid "The selected product is not active or has no price set." msgstr "" -#: pretix/base/services/orders.py:1522 +#: pretix/base/services/orders.py:1524 msgid "" "This operation would leave the order empty. Please cancel the order itself " "instead." msgstr "" -#: pretix/base/services/orders.py:1524 +#: pretix/base/services/orders.py:1526 msgid "" "This operation would make the order free and therefore immediately paid, " "however no quota is available." msgstr "" -#: pretix/base/services/orders.py:1527 +#: pretix/base/services/orders.py:1529 msgid "" "This is an add-on product, please select the base position it should be " "added to." msgstr "" -#: pretix/base/services/orders.py:1528 +#: pretix/base/services/orders.py:1530 msgid "" "The selected base position does not allow you to add this product as an add-" "on." msgstr "" -#: pretix/base/services/orders.py:1529 +#: pretix/base/services/orders.py:1531 msgid "You need to choose a subevent for the new position." msgstr "" -#: pretix/base/services/orders.py:1532 +#: pretix/base/services/orders.py:1534 #, python-brace-format msgid "" "You selected seat \"{seat}\" for a date that does not match the selected " "ticket date. Please choose a seat again." msgstr "" -#: pretix/base/services/orders.py:1534 +#: pretix/base/services/orders.py:1536 msgid "The selected product requires you to select a seat." msgstr "" -#: pretix/base/services/orders.py:1535 +#: pretix/base/services/orders.py:1537 msgid "The selected product does not allow to select a seat." msgstr "" -#: pretix/base/services/orders.py:1536 +#: pretix/base/services/orders.py:1538 msgid "The selected country is blocked by your tax rule." msgstr "" -#: pretix/base/services/orders.py:1537 +#: pretix/base/services/orders.py:1539 msgid "" "You cannot change the price of a position that has been used to issue a gift " "card." msgstr "" -#: pretix/base/services/orders.py:2341 pretix/base/services/orders.py:2357 +#: pretix/base/services/orders.py:2343 pretix/base/services/orders.py:2359 #, python-brace-format msgid "" "A position can not be canceled since the gift card {card} purchased in this " "order has already been redeemed." msgstr "" -#: pretix/base/services/orders.py:3010 +#: pretix/base/services/orders.py:3012 msgid "" "There was an error while trying to send the money back to you. Please " "contact the event organizer for further information." @@ -8097,7 +8099,7 @@ msgstr "" #: pretix/base/services/placeholders.py:469 #: pretix/base/services/placeholders.py:478 -#: pretix/base/templates/pretixbase/email/order_details.html:52 +#: pretix/base/templates/pretixbase/email/order_details.html:49 msgid "View registration details" msgstr "" @@ -8225,7 +8227,7 @@ msgstr "" msgid "Plugin: %s" msgstr "" -#: pretix/base/services/vouchers.py:56 pretix/control/logdisplay.py:519 +#: pretix/base/services/vouchers.py:56 pretix/control/logdisplay.py:518 #, python-brace-format msgid "The voucher has been sent to {recipient}." msgstr "" @@ -8980,7 +8982,7 @@ msgstr "" msgid "Hide all products that are sold out" msgstr "" -#: pretix/base/settings.py:1356 pretix/control/forms/event.py:1678 +#: pretix/base/settings.py:1356 pretix/control/forms/event.py:1680 msgid "Publicly show how many tickets of a certain type are still available." msgstr "" @@ -8996,7 +8998,7 @@ msgstr "" msgid "Enable waiting list" msgstr "" -#: pretix/base/settings.py:1384 pretix/control/forms/event.py:1683 +#: pretix/base/settings.py:1384 pretix/control/forms/event.py:1685 msgid "" "Once a ticket is sold out, people can add themselves to a waiting list. As " "soon as a ticket becomes available again, it will be reserved for the first " @@ -9388,7 +9390,7 @@ msgid "" "Otherwise, a manual refund will be created for you to process manually." msgstr "" -#: pretix/base/settings.py:1883 pretix/control/forms/orders.py:888 +#: pretix/base/settings.py:1883 pretix/control/forms/orders.py:899 msgid "Keep a fixed cancellation fee" msgstr "" @@ -9396,7 +9398,7 @@ msgstr "" msgid "Keep payment, shipping and service fees" msgstr "" -#: pretix/base/settings.py:1904 pretix/control/forms/orders.py:899 +#: pretix/base/settings.py:1904 pretix/control/forms/orders.py:910 msgid "Keep a percentual cancellation fee" msgstr "" @@ -9468,7 +9470,7 @@ msgid "Do not handle refunds automatically at all" msgstr "" #: pretix/base/settings.py:1982 -#: pretix/control/templates/pretixcontrol/order/index.html:148 +#: pretix/control/templates/pretixcontrol/order/index.html:149 msgid "Refund method" msgstr "" @@ -9490,19 +9492,19 @@ msgid "" "cancellation based on your settings." msgstr "" -#: pretix/base/settings.py:2034 pretix/control/forms/event.py:1706 +#: pretix/base/settings.py:2034 pretix/control/forms/event.py:1708 msgid "Contact address" msgstr "" -#: pretix/base/settings.py:2035 pretix/control/forms/event.py:1708 +#: pretix/base/settings.py:2035 pretix/control/forms/event.py:1710 msgid "We'll show this publicly to allow attendees to contact you." msgstr "" -#: pretix/base/settings.py:2043 pretix/control/forms/event.py:1700 +#: pretix/base/settings.py:2043 pretix/control/forms/event.py:1702 msgid "Imprint URL" msgstr "" -#: pretix/base/settings.py:2044 pretix/control/forms/event.py:1701 +#: pretix/base/settings.py:2044 pretix/control/forms/event.py:1703 msgid "" "This should point e.g. to a part of your website that has your contact " "details and legal information." @@ -9575,15 +9577,15 @@ msgid "" "[prefix]. Choose, for example, a short form of your event name." msgstr "" -#: pretix/base/settings.py:2141 pretix/control/forms/mailsetup.py:35 -#: pretix/control/forms/mailsetup.py:108 +#: pretix/base/settings.py:2141 pretix/control/forms/mailsetup.py:37 +#: pretix/control/forms/mailsetup.py:119 #: pretix/control/templates/pretixcontrol/event/mail.html:39 #: pretix/control/templates/pretixcontrol/organizers/mail.html:40 msgid "Sender address" msgstr "" -#: pretix/base/settings.py:2142 pretix/control/forms/mailsetup.py:36 -#: pretix/control/forms/mailsetup.py:109 +#: pretix/base/settings.py:2142 pretix/control/forms/mailsetup.py:38 +#: pretix/control/forms/mailsetup.py:120 msgid "Sender address for outgoing emails" msgstr "" @@ -10260,7 +10262,7 @@ msgid "" "This picture will be used as a preview if you post links to your ticket shop " "on social media. Facebook advises to use a picture size of 1200 x 630 " "pixels, however some platforms like WhatsApp and Reddit only show a square " -"preview, so we recommend to make sure it still looks good only the center " +"preview, so we recommend to make sure it still looks good if only the center " "square is shown. If you do not fill this, we will use the logo given above." msgstr "" @@ -10404,21 +10406,21 @@ msgid "" "an explicit expiry date." msgstr "" -#: pretix/base/settings.py:3301 +#: pretix/base/settings.py:3303 msgid "Enable cookie consent management features" msgstr "" -#: pretix/base/settings.py:3307 +#: pretix/base/settings.py:3309 msgid "" "By clicking \"Accept all cookies\", you agree to the storing of cookies and " "use of similar technologies on your device." msgstr "" -#: pretix/base/settings.py:3314 +#: pretix/base/settings.py:3316 msgid "Dialog text" msgstr "" -#: pretix/base/settings.py:3321 +#: pretix/base/settings.py:3323 msgid "" "We use cookies and similar technologies to gather data that allows us to " "improve this website and our offerings. If you do not agree, we will only " @@ -10426,199 +10428,209 @@ msgid "" "offers." msgstr "" -#: pretix/base/settings.py:3329 +#: pretix/base/settings.py:3331 msgid "Secondary dialog text" msgstr "" -#: pretix/base/settings.py:3335 +#: pretix/base/settings.py:3337 msgid "Privacy settings" msgstr "" -#: pretix/base/settings.py:3340 +#: pretix/base/settings.py:3342 msgid "Dialog title" msgstr "" -#: pretix/base/settings.py:3346 +#: pretix/base/settings.py:3348 msgid "Accept all cookies" msgstr "" -#: pretix/base/settings.py:3351 +#: pretix/base/settings.py:3353 msgid "\"Accept\" button description" msgstr "" -#: pretix/base/settings.py:3357 +#: pretix/base/settings.py:3359 msgid "Required cookies only" msgstr "" -#: pretix/base/settings.py:3362 +#: pretix/base/settings.py:3364 msgid "\"Reject\" button description" msgstr "" -#: pretix/base/settings.py:3372 +#: pretix/base/settings.py:3374 msgid "Customers can choose their own seats" msgstr "" -#: pretix/base/settings.py:3373 +#: pretix/base/settings.py:3375 msgid "" "If disabled, you will need to manually assign seats in the backend. Note " "that this can mean people will not know their seat after their purchase and " "it might not be written on their ticket." msgstr "" -#: pretix/base/settings.py:3399 +#: pretix/base/settings.py:3401 msgid "Show button to copy user input from other products" msgstr "" -#: pretix/base/settings.py:3409 +#: pretix/base/settings.py:3411 msgid "Most common English titles" msgstr "" -#: pretix/base/settings.py:3419 +#: pretix/base/settings.py:3421 msgid "Most common German titles" msgstr "" -#: pretix/base/settings.py:3432 -msgctxt "person_name_salutation" -msgid "Ms" -msgstr "" - -#: pretix/base/settings.py:3433 -msgctxt "person_name_salutation" -msgid "Mr" -msgstr "" - #: pretix/base/settings.py:3434 msgctxt "person_name_salutation" +msgid "Ms" +msgstr "" + +#: pretix/base/settings.py:3435 +msgctxt "person_name_salutation" +msgid "Mr" +msgstr "" + +#: pretix/base/settings.py:3436 +msgctxt "person_name_salutation" msgid "Mx" msgstr "" -#: pretix/base/settings.py:3466 pretix/base/settings.py:3479 -#: pretix/base/settings.py:3495 pretix/base/settings.py:3545 -#: pretix/base/settings.py:3558 pretix/base/settings.py:3572 -#: pretix/base/settings.py:3625 pretix/base/settings.py:3646 -#: pretix/base/settings.py:3668 +#: pretix/base/settings.py:3468 pretix/base/settings.py:3481 +#: pretix/base/settings.py:3497 pretix/base/settings.py:3547 +#: pretix/base/settings.py:3560 pretix/base/settings.py:3574 +#: pretix/base/settings.py:3627 pretix/base/settings.py:3648 +#: pretix/base/settings.py:3670 msgid "Given name" msgstr "" -#: pretix/base/settings.py:3467 pretix/base/settings.py:3480 -#: pretix/base/settings.py:3496 pretix/base/settings.py:3512 -#: pretix/base/settings.py:3529 pretix/base/settings.py:3544 -#: pretix/base/settings.py:3559 pretix/base/settings.py:3573 -#: pretix/base/settings.py:3626 pretix/base/settings.py:3647 -#: pretix/base/settings.py:3669 +#: pretix/base/settings.py:3469 pretix/base/settings.py:3482 +#: pretix/base/settings.py:3498 pretix/base/settings.py:3514 +#: pretix/base/settings.py:3531 pretix/base/settings.py:3546 +#: pretix/base/settings.py:3561 pretix/base/settings.py:3575 +#: pretix/base/settings.py:3628 pretix/base/settings.py:3649 +#: pretix/base/settings.py:3671 msgid "Family name" msgstr "" -#: pretix/base/settings.py:3471 pretix/base/settings.py:3487 -#: pretix/base/settings.py:3503 pretix/base/settings.py:3518 -#: pretix/base/settings.py:3536 pretix/base/settings.py:3551 -#: pretix/base/settings.py:3581 pretix/base/settings.py:3605 -#: pretix/base/settings.py:3637 pretix/base/settings.py:3659 -#: pretix/base/settings.py:3690 +#: pretix/base/settings.py:3473 pretix/base/settings.py:3489 +#: pretix/base/settings.py:3505 pretix/base/settings.py:3520 +#: pretix/base/settings.py:3538 pretix/base/settings.py:3553 +#: pretix/base/settings.py:3583 pretix/base/settings.py:3607 +#: pretix/base/settings.py:3639 pretix/base/settings.py:3661 +#: pretix/base/settings.py:3692 msgctxt "person_name_sample" msgid "John" msgstr "" -#: pretix/base/settings.py:3472 pretix/base/settings.py:3488 -#: pretix/base/settings.py:3504 pretix/base/settings.py:3520 -#: pretix/base/settings.py:3538 pretix/base/settings.py:3552 -#: pretix/base/settings.py:3582 pretix/base/settings.py:3638 -#: pretix/base/settings.py:3660 pretix/base/settings.py:3691 +#: pretix/base/settings.py:3474 pretix/base/settings.py:3490 +#: pretix/base/settings.py:3506 pretix/base/settings.py:3522 +#: pretix/base/settings.py:3540 pretix/base/settings.py:3554 +#: pretix/base/settings.py:3584 pretix/base/settings.py:3640 +#: pretix/base/settings.py:3662 pretix/base/settings.py:3693 msgctxt "person_name_sample" msgid "Doe" msgstr "" -#: pretix/base/settings.py:3478 pretix/base/settings.py:3494 -#: pretix/base/settings.py:3526 pretix/base/settings.py:3645 -#: pretix/base/settings.py:3667 +#: pretix/base/settings.py:3480 pretix/base/settings.py:3496 +#: pretix/base/settings.py:3528 pretix/base/settings.py:3647 +#: pretix/base/settings.py:3669 msgctxt "person_name" msgid "Title" msgstr "" -#: pretix/base/settings.py:3486 pretix/base/settings.py:3502 -#: pretix/base/settings.py:3535 pretix/base/settings.py:3658 -#: pretix/base/settings.py:3689 +#: pretix/base/settings.py:3488 pretix/base/settings.py:3504 +#: pretix/base/settings.py:3537 pretix/base/settings.py:3660 +#: pretix/base/settings.py:3691 msgctxt "person_name_sample" msgid "Dr" msgstr "" -#: pretix/base/settings.py:3510 pretix/base/settings.py:3527 +#: pretix/base/settings.py:3512 pretix/base/settings.py:3529 msgid "First name" msgstr "" -#: pretix/base/settings.py:3511 pretix/base/settings.py:3528 +#: pretix/base/settings.py:3513 pretix/base/settings.py:3530 msgid "Middle name" msgstr "" -#: pretix/base/settings.py:3592 pretix/base/settings.py:3604 +#: pretix/base/settings.py:3594 pretix/base/settings.py:3606 #: pretix/control/forms/organizer.py:651 msgctxt "person_name_sample" msgid "John Doe" msgstr "" -#: pretix/base/settings.py:3598 +#: pretix/base/settings.py:3600 msgid "Calling name" msgstr "" -#: pretix/base/settings.py:3612 +#: pretix/base/settings.py:3614 msgid "Latin transcription" msgstr "" -#: pretix/base/settings.py:3624 pretix/base/settings.py:3644 -#: pretix/base/settings.py:3666 +#: pretix/base/settings.py:3626 pretix/base/settings.py:3646 +#: pretix/base/settings.py:3668 msgctxt "person_name" msgid "Salutation" msgstr "" -#: pretix/base/settings.py:3636 pretix/base/settings.py:3657 -#: pretix/base/settings.py:3688 +#: pretix/base/settings.py:3638 pretix/base/settings.py:3659 +#: pretix/base/settings.py:3690 msgctxt "person_name_sample" msgid "Mr" msgstr "" -#: pretix/base/settings.py:3670 +#: pretix/base/settings.py:3672 msgctxt "person_name" msgid "Degree (after name)" msgstr "" -#: pretix/base/settings.py:3692 +#: pretix/base/settings.py:3694 msgctxt "person_name_sample" msgid "MA" msgstr "" -#: pretix/base/settings.py:3800 pretix/control/forms/event.py:228 +#: pretix/base/settings.py:3720 pretix/base/settings.py:3722 +msgctxt "address" +msgid "Province" +msgstr "" + +#: pretix/base/settings.py:3721 +msgctxt "address" +msgid "Prefecture" +msgstr "" + +#: pretix/base/settings.py:3810 pretix/control/forms/event.py:228 msgid "" "Your default locale must also be enabled for your event (see box above)." msgstr "" -#: pretix/base/settings.py:3804 +#: pretix/base/settings.py:3814 msgid "" "You cannot require specifying attendee names if you do not ask for them." msgstr "" -#: pretix/base/settings.py:3808 +#: pretix/base/settings.py:3818 msgid "You have to ask for attendee emails if you want to make them required." msgstr "" -#: pretix/base/settings.py:3812 +#: pretix/base/settings.py:3822 msgid "" "You have to ask for invoice addresses if you want to make them required." msgstr "" -#: pretix/base/settings.py:3816 +#: pretix/base/settings.py:3826 msgid "You have to require invoice addresses to require for company names." msgstr "" -#: pretix/base/settings.py:3823 +#: pretix/base/settings.py:3833 msgid "The last payment date cannot be before the end of presale." msgstr "" -#: pretix/base/settings.py:3831 +#: pretix/base/settings.py:3841 #, python-brace-format msgid "The value \"{identifier}\" is not a valid sales channel." msgstr "" -#: pretix/base/settings.py:3846 +#: pretix/base/settings.py:3856 msgid "This needs to be disabled if other NFC-based types are active." msgstr "" @@ -10884,31 +10896,31 @@ msgid "" msgstr "" #: pretix/base/templates/pretixbase/email/order_details.html:12 -#: pretix/base/templates/pretixbase/email/order_details.html:62 +#: pretix/base/templates/pretixbase/email/order_details.html:59 msgid "Event:" msgstr "" -#: pretix/base/templates/pretixbase/email/order_details.html:26 -#: pretix/base/templates/pretixbase/email/order_details.html:77 +#: pretix/base/templates/pretixbase/email/order_details.html:23 +#: pretix/base/templates/pretixbase/email/order_details.html:74 msgid "Order code:" msgstr "" -#: pretix/base/templates/pretixbase/email/order_details.html:31 +#: pretix/base/templates/pretixbase/email/order_details.html:28 msgid "created by" msgstr "" -#: pretix/base/templates/pretixbase/email/order_details.html:37 -#: pretix/base/templates/pretixbase/email/order_details.html:132 +#: pretix/base/templates/pretixbase/email/order_details.html:34 +#: pretix/base/templates/pretixbase/email/order_details.html:126 msgid "Contact:" msgstr "" -#: pretix/base/templates/pretixbase/email/order_details.html:57 +#: pretix/base/templates/pretixbase/email/order_details.html:54 msgid "" "You are receiving this email because you placed an order for the following " "event:" msgstr "" -#: pretix/base/templates/pretixbase/email/order_details.html:86 +#: pretix/base/templates/pretixbase/email/order_details.html:83 msgid "Details:" msgstr "" @@ -11399,8 +11411,8 @@ msgid "Support for check-in questions" msgstr "" #: pretix/control/forms/checkin.py:197 pretix/control/forms/checkin.py:213 -#: pretix/control/forms/filter.py:2399 pretix/control/forms/filter.py:2441 -#: pretix/control/forms/filter.py:2607 +#: pretix/control/forms/filter.py:2395 pretix/control/forms/filter.py:2437 +#: pretix/control/forms/filter.py:2602 msgid "All gates" msgstr "" @@ -11820,65 +11832,65 @@ msgstr "" msgid "European Union" msgstr "" -#: pretix/control/forms/event.py:1492 +#: pretix/control/forms/event.py:1494 msgid "Any customer" msgstr "" -#: pretix/control/forms/event.py:1493 +#: pretix/control/forms/event.py:1495 msgid "Individual" msgstr "" -#: pretix/control/forms/event.py:1494 +#: pretix/control/forms/event.py:1496 msgid "Business" msgstr "" -#: pretix/control/forms/event.py:1495 +#: pretix/control/forms/event.py:1497 msgid "Business with valid VAT ID" msgstr "" -#: pretix/control/forms/event.py:1501 +#: pretix/control/forms/event.py:1503 msgid "Charge VAT" msgstr "" -#: pretix/control/forms/event.py:1503 +#: pretix/control/forms/event.py:1505 msgid "No VAT" msgstr "" -#: pretix/control/forms/event.py:1504 +#: pretix/control/forms/event.py:1506 msgid "Sale not allowed" msgstr "" -#: pretix/control/forms/event.py:1505 +#: pretix/control/forms/event.py:1507 msgid "Order requires approval" msgstr "" -#: pretix/control/forms/event.py:1510 +#: pretix/control/forms/event.py:1512 msgid "Default tax code" msgstr "" -#: pretix/control/forms/event.py:1514 +#: pretix/control/forms/event.py:1516 msgid "Deviating tax rate" msgstr "" -#: pretix/control/forms/event.py:1519 pretix/control/forms/event.py:1523 +#: pretix/control/forms/event.py:1521 pretix/control/forms/event.py:1525 msgid "Text on invoice" msgstr "" -#: pretix/control/forms/event.py:1543 +#: pretix/control/forms/event.py:1545 msgid "" "A combination of this calculation mode with a non-zero tax rate does not " "make sense." msgstr "" -#: pretix/control/forms/event.py:1548 pretix/control/forms/event.py:1552 +#: pretix/control/forms/event.py:1550 pretix/control/forms/event.py:1554 msgid "This combination of calculation mode and tax code does not make sense." msgstr "" -#: pretix/control/forms/event.py:1617 +#: pretix/control/forms/event.py:1619 msgid "Pre-selected voucher" msgstr "" -#: pretix/control/forms/event.py:1619 +#: pretix/control/forms/event.py:1621 msgid "" "If set, the widget will show products as if this voucher has been entered " "and when a product is bought via the widget, this voucher will be used. This " @@ -11886,48 +11898,48 @@ msgid "" "secret products." msgstr "" -#: pretix/control/forms/event.py:1624 +#: pretix/control/forms/event.py:1626 msgid "Compatibility mode" msgstr "" -#: pretix/control/forms/event.py:1626 +#: pretix/control/forms/event.py:1628 msgid "" "Our regular widget doesn't work in all website builders. If you run into " "trouble, try using this compatibility mode." msgstr "" -#: pretix/control/forms/event.py:1647 +#: pretix/control/forms/event.py:1649 msgid "The given voucher code does not exist." msgstr "" -#: pretix/control/forms/event.py:1654 pretix/control/forms/organizer.py:112 +#: pretix/control/forms/event.py:1656 pretix/control/forms/organizer.py:112 #: pretix/control/views/shredder.py:179 msgid "The slug you entered was not correct." msgstr "" -#: pretix/control/forms/event.py:1689 +#: pretix/control/forms/event.py:1691 msgid "Ticket downloads" msgstr "" -#: pretix/control/forms/event.py:1690 +#: pretix/control/forms/event.py:1692 msgid "Your customers will be able to download their tickets in PDF format." msgstr "" -#: pretix/control/forms/event.py:1694 +#: pretix/control/forms/event.py:1696 msgid "Require all attendees to fill in their names" msgstr "" -#: pretix/control/forms/event.py:1695 +#: pretix/control/forms/event.py:1697 msgid "" "By default, we will ask for names but not require them. You can turn this " "off completely in the settings." msgstr "" -#: pretix/control/forms/event.py:1721 +#: pretix/control/forms/event.py:1723 msgid "Payment via Stripe" msgstr "" -#: pretix/control/forms/event.py:1722 +#: pretix/control/forms/event.py:1724 msgid "" "Stripe is an online payments processor supporting credit cards and lots of " "other payment options. To accept payments via Stripe, you will need to set " @@ -11935,27 +11947,27 @@ msgid "" "simple interface." msgstr "" -#: pretix/control/forms/event.py:1728 +#: pretix/control/forms/event.py:1730 msgid "Payment by bank transfer" msgstr "" -#: pretix/control/forms/event.py:1729 +#: pretix/control/forms/event.py:1731 msgid "" "Your customers will be instructed to wire the money to your account. You can " "then import your bank statements to process the payments within pretix, or " "mark them as paid manually." msgstr "" -#: pretix/control/forms/event.py:1768 +#: pretix/control/forms/event.py:1770 #: pretix/control/templates/pretixcontrol/event/quick_setup.html:45 msgid "Price (optional)" msgstr "" -#: pretix/control/forms/event.py:1773 +#: pretix/control/forms/event.py:1775 msgid "Free" msgstr "" -#: pretix/control/forms/event.py:1778 +#: pretix/control/forms/event.py:1780 msgid "Quantity available" msgstr "" @@ -11964,8 +11976,8 @@ msgstr "" msgid "Please enter less than 25 recipients." msgstr "" -#: pretix/control/forms/filter.py:196 pretix/control/forms/filter.py:198 -#: pretix/control/forms/filter.py:980 pretix/control/forms/filter.py:982 +#: pretix/control/forms/filter.py:197 pretix/control/forms/filter.py:199 +#: pretix/control/forms/filter.py:987 pretix/control/forms/filter.py:989 msgid "Search for…" msgstr "" @@ -12078,152 +12090,152 @@ msgstr "" msgid "Follow-up due" msgstr "" -#: pretix/control/forms/filter.py:461 pretix/control/forms/filter.py:1900 -#: pretix/control/forms/filter.py:2157 pretix/control/forms/filter.py:2461 -#: pretix/control/forms/filter.py:2480 pretix/control/forms/vouchers.py:152 +#: pretix/control/forms/filter.py:462 pretix/control/forms/filter.py:1898 +#: pretix/control/forms/filter.py:2153 pretix/control/forms/filter.py:2457 +#: pretix/control/forms/filter.py:2476 pretix/control/forms/vouchers.py:152 #: pretix/control/templates/pretixcontrol/items/question.html:38 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:119 #: pretix/plugins/sendmail/models.py:251 msgid "All products" msgstr "" -#: pretix/control/forms/filter.py:465 pretix/control/forms/filter.py:2161 -#: pretix/control/forms/filter.py:2465 pretix/control/forms/vouchers.py:140 +#: pretix/control/forms/filter.py:466 pretix/control/forms/filter.py:2157 +#: pretix/control/forms/filter.py:2461 pretix/control/forms/vouchers.py:140 #: pretix/control/views/typeahead.py:666 pretix/control/views/typeahead.py:783 #, python-brace-format msgid "{product} – Any variation" msgstr "" -#: pretix/control/forms/filter.py:529 pretix/control/forms/orders.py:841 +#: pretix/control/forms/filter.py:530 pretix/control/forms/orders.py:852 msgctxt "subevent" msgid "All dates starting at or after" msgstr "" -#: pretix/control/forms/filter.py:535 pretix/control/forms/orders.py:848 +#: pretix/control/forms/filter.py:536 pretix/control/forms/orders.py:859 msgctxt "subevent" msgid "All dates starting before" msgstr "" -#: pretix/control/forms/filter.py:541 +#: pretix/control/forms/filter.py:542 msgid "Order placed at or after" msgstr "" -#: pretix/control/forms/filter.py:547 +#: pretix/control/forms/filter.py:548 msgid "Order placed before" msgstr "" -#: pretix/control/forms/filter.py:576 +#: pretix/control/forms/filter.py:577 msgid "Minimal sum of payments and refunds" msgstr "" -#: pretix/control/forms/filter.py:581 +#: pretix/control/forms/filter.py:582 msgid "Maximal sum of payments and refunds" msgstr "" -#: pretix/control/forms/filter.py:592 +#: pretix/control/forms/filter.py:593 msgid "At least one ticket with check-in" msgstr "" -#: pretix/control/forms/filter.py:596 +#: pretix/control/forms/filter.py:597 msgid "Affected quota" msgstr "" -#: pretix/control/forms/filter.py:633 pretix/control/forms/filter.py:638 -#: pretix/control/forms/filter.py:664 pretix/control/forms/filter.py:669 -#: pretix/control/forms/filter.py:699 pretix/control/forms/filter.py:731 -#: pretix/control/forms/filter.py:737 pretix/control/forms/filter.py:747 -#: pretix/control/forms/filter.py:754 +#: pretix/control/forms/filter.py:634 pretix/control/forms/filter.py:639 +#: pretix/control/forms/filter.py:665 pretix/control/forms/filter.py:670 +#: pretix/control/forms/filter.py:700 pretix/control/forms/filter.py:732 +#: pretix/control/forms/filter.py:738 pretix/control/forms/filter.py:748 +#: pretix/control/forms/filter.py:755 msgid "Exact matches only" msgstr "" -#: pretix/control/forms/filter.py:884 pretix/control/forms/filter.py:889 -#: pretix/control/forms/filter.py:1003 pretix/control/forms/filter.py:1008 +#: pretix/control/forms/filter.py:891 pretix/control/forms/filter.py:896 +#: pretix/control/forms/filter.py:1009 pretix/control/forms/filter.py:1014 #: pretix/control/forms/filter.py:1685 pretix/control/forms/filter.py:1690 msgid "All organizers" msgstr "" -#: pretix/control/forms/filter.py:995 pretix/control/forms/filter.py:1669 +#: pretix/control/forms/filter.py:1001 pretix/control/forms/filter.py:1669 msgid "All events" msgstr "" -#: pretix/control/forms/filter.py:1015 +#: pretix/control/forms/filter.py:1021 msgid "All payments" msgstr "" -#: pretix/control/forms/filter.py:1025 +#: pretix/control/forms/filter.py:1031 msgid "Payment created from" msgstr "" -#: pretix/control/forms/filter.py:1030 +#: pretix/control/forms/filter.py:1036 msgid "Payment created until" msgstr "" -#: pretix/control/forms/filter.py:1035 +#: pretix/control/forms/filter.py:1041 msgid "Paid from" msgstr "" -#: pretix/control/forms/filter.py:1040 +#: pretix/control/forms/filter.py:1046 msgid "Paid until" msgstr "" -#: pretix/control/forms/filter.py:1196 pretix/control/forms/filter.py:1671 +#: pretix/control/forms/filter.py:1202 pretix/control/forms/filter.py:1671 msgid "Shop live and presale running" msgstr "" -#: pretix/control/forms/filter.py:1197 pretix/control/forms/filter.py:2013 +#: pretix/control/forms/filter.py:1203 pretix/control/forms/filter.py:2011 msgid "Inactive" msgstr "" -#: pretix/control/forms/filter.py:1198 pretix/control/forms/filter.py:1673 +#: pretix/control/forms/filter.py:1204 pretix/control/forms/filter.py:1673 #: pretix/control/templates/pretixcontrol/events/index.html:150 #: pretix/control/templates/pretixcontrol/organizers/detail.html:114 #: pretix/control/templates/pretixcontrol/subevents/index.html:170 msgid "Presale not started" msgstr "" -#: pretix/control/forms/filter.py:1199 pretix/control/forms/filter.py:1674 +#: pretix/control/forms/filter.py:1205 pretix/control/forms/filter.py:1674 #: pretix/control/templates/pretixcontrol/events/index.html:148 #: pretix/control/templates/pretixcontrol/organizers/detail.html:112 #: pretix/control/templates/pretixcontrol/subevents/index.html:168 msgid "Presale over" msgstr "" -#: pretix/control/forms/filter.py:1204 pretix/control/forms/filter.py:1207 -#: pretix/control/forms/filter.py:1703 pretix/control/forms/filter.py:1706 -#: pretix/control/forms/filter.py:2339 +#: pretix/control/forms/filter.py:1210 pretix/control/forms/filter.py:1213 +#: pretix/control/forms/filter.py:1702 pretix/control/forms/filter.py:1705 +#: pretix/control/forms/filter.py:2335 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:84 msgid "Date from" msgstr "" -#: pretix/control/forms/filter.py:1211 pretix/control/forms/filter.py:1214 -#: pretix/control/forms/filter.py:1710 pretix/control/forms/filter.py:1713 -#: pretix/control/forms/filter.py:2344 +#: pretix/control/forms/filter.py:1217 pretix/control/forms/filter.py:1220 +#: pretix/control/forms/filter.py:1709 pretix/control/forms/filter.py:1712 +#: pretix/control/forms/filter.py:2340 msgid "Date until" msgstr "" -#: pretix/control/forms/filter.py:1218 +#: pretix/control/forms/filter.py:1224 msgid "Start time from" msgstr "" -#: pretix/control/forms/filter.py:1223 +#: pretix/control/forms/filter.py:1229 msgid "Start time until" msgstr "" -#: pretix/control/forms/filter.py:1228 pretix/control/forms/rrule.py:111 +#: pretix/control/forms/filter.py:1234 pretix/control/forms/rrule.py:111 #: pretix/control/forms/rrule.py:150 msgid "Weekday" msgstr "" -#: pretix/control/forms/filter.py:1433 pretix/control/forms/filter.py:1435 -#: pretix/control/forms/filter.py:1485 pretix/control/forms/filter.py:1487 -#: pretix/control/forms/filter.py:1558 pretix/control/forms/filter.py:1560 -#: pretix/control/forms/filter.py:1613 pretix/control/forms/filter.py:1615 -#: pretix/control/forms/filter.py:2027 pretix/control/forms/filter.py:2029 -#: pretix/control/forms/filter.py:2597 pretix/control/forms/filter.py:2599 +#: pretix/control/forms/filter.py:1437 pretix/control/forms/filter.py:1439 +#: pretix/control/forms/filter.py:1488 pretix/control/forms/filter.py:1490 +#: pretix/control/forms/filter.py:1560 pretix/control/forms/filter.py:1562 +#: pretix/control/forms/filter.py:1614 pretix/control/forms/filter.py:1616 +#: pretix/control/forms/filter.py:2025 pretix/control/forms/filter.py:2027 +#: pretix/control/forms/filter.py:2593 pretix/control/forms/filter.py:2595 msgid "Search query" msgstr "" -#: pretix/control/forms/filter.py:1497 pretix/control/forms/filter.py:1570 +#: pretix/control/forms/filter.py:1499 pretix/control/forms/filter.py:1571 #: pretix/control/templates/pretixcontrol/organizers/customer.html:46 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:47 #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:54 @@ -12233,12 +12245,12 @@ msgstr "" msgid "active" msgstr "" -#: pretix/control/forms/filter.py:1499 +#: pretix/control/forms/filter.py:1501 #: pretix/control/templates/pretixcontrol/organizers/customer.html:44 msgid "not yet activated" msgstr "" -#: pretix/control/forms/filter.py:1503 +#: pretix/control/forms/filter.py:1505 #: pretix/control/templates/pretixcontrol/organizers/customer.html:110 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:6 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:12 @@ -12246,15 +12258,15 @@ msgstr "" msgid "Memberships" msgstr "" -#: pretix/control/forms/filter.py:1507 +#: pretix/control/forms/filter.py:1509 msgid "Has no memberships" msgstr "" -#: pretix/control/forms/filter.py:1508 +#: pretix/control/forms/filter.py:1510 msgid "Has any membership" msgstr "" -#: pretix/control/forms/filter.py:1509 +#: pretix/control/forms/filter.py:1511 msgid "Has valid membership" msgstr "" @@ -12274,176 +12286,176 @@ msgstr "" msgid "Single event in the past" msgstr "" -#: pretix/control/forms/filter.py:1878 pretix/control/forms/filter.py:1880 +#: pretix/control/forms/filter.py:1877 pretix/control/forms/filter.py:1879 msgid "Search attendee…" msgstr "" -#: pretix/control/forms/filter.py:1886 +#: pretix/control/forms/filter.py:1884 #: pretix/plugins/checkinlists/exporters.py:105 msgid "Check-in status" msgstr "" -#: pretix/control/forms/filter.py:1888 +#: pretix/control/forms/filter.py:1886 #: pretix/plugins/checkinlists/exporters.py:107 msgid "All attendees" msgstr "" -#: pretix/control/forms/filter.py:1889 +#: pretix/control/forms/filter.py:1887 #: pretix/control/templates/pretixcontrol/checkin/index.html:183 #: pretix/control/templates/pretixcontrol/checkin/lists.html:96 #: pretix/plugins/checkinlists/exporters.py:108 -#: pretix/plugins/checkinlists/exporters.py:497 +#: pretix/plugins/checkinlists/exporters.py:499 msgid "Checked in" msgstr "" -#: pretix/control/forms/filter.py:1890 +#: pretix/control/forms/filter.py:1888 #: pretix/plugins/checkinlists/exporters.py:109 msgctxt "checkin state" msgid "Present" msgstr "" -#: pretix/control/forms/filter.py:1891 +#: pretix/control/forms/filter.py:1889 #: pretix/plugins/checkinlists/exporters.py:110 msgctxt "checkin state" msgid "Checked in but left" msgstr "" -#: pretix/control/forms/filter.py:1892 +#: pretix/control/forms/filter.py:1890 #: pretix/control/templates/pretixcontrol/checkin/index.html:178 #: pretix/plugins/checkinlists/exporters.py:111 msgid "Not checked in" msgstr "" -#: pretix/control/forms/filter.py:1911 +#: pretix/control/forms/filter.py:1909 msgctxt "subevent" msgid "Date start from" msgstr "" -#: pretix/control/forms/filter.py:1917 +#: pretix/control/forms/filter.py:1915 msgctxt "subevent" msgid "Date start until" msgstr "" -#: pretix/control/forms/filter.py:2018 pretix/control/forms/filter.py:2021 +#: pretix/control/forms/filter.py:2016 pretix/control/forms/filter.py:2019 #: pretix/control/templates/pretixcontrol/users/index.html:52 msgid "Administrator" msgstr "" -#: pretix/control/forms/filter.py:2022 +#: pretix/control/forms/filter.py:2020 msgid "No administrator" msgstr "" -#: pretix/control/forms/filter.py:2093 +#: pretix/control/forms/filter.py:2090 msgid "Valid" msgstr "" -#: pretix/control/forms/filter.py:2094 +#: pretix/control/forms/filter.py:2091 msgid "Unredeemed" msgstr "" -#: pretix/control/forms/filter.py:2095 +#: pretix/control/forms/filter.py:2092 msgid "Redeemed at least once" msgstr "" -#: pretix/control/forms/filter.py:2096 +#: pretix/control/forms/filter.py:2093 msgid "Fully redeemed" msgstr "" -#: pretix/control/forms/filter.py:2098 +#: pretix/control/forms/filter.py:2095 msgid "Redeemed and checked in with ticket" msgstr "" -#: pretix/control/forms/filter.py:2103 +#: pretix/control/forms/filter.py:2100 msgid "Quota handling" msgstr "" -#: pretix/control/forms/filter.py:2107 +#: pretix/control/forms/filter.py:2104 msgid "Allow to ignore quota" msgstr "" -#: pretix/control/forms/filter.py:2112 pretix/control/forms/filter.py:2114 +#: pretix/control/forms/filter.py:2109 pretix/control/forms/filter.py:2111 msgid "Filter by tag" msgstr "" -#: pretix/control/forms/filter.py:2119 pretix/control/forms/filter.py:2121 +#: pretix/control/forms/filter.py:2116 pretix/control/forms/filter.py:2118 msgid "Search voucher" msgstr "" -#: pretix/control/forms/filter.py:2167 pretix/control/forms/vouchers.py:131 +#: pretix/control/forms/filter.py:2163 pretix/control/forms/vouchers.py:131 #: pretix/control/views/typeahead.py:791 pretix/control/views/typeahead.py:795 #: pretix/control/views/vouchers.py:132 #, python-brace-format msgid "Any product in quota \"{quota}\"" msgstr "" -#: pretix/control/forms/filter.py:2289 +#: pretix/control/forms/filter.py:2285 msgid "Refund status" msgstr "" -#: pretix/control/forms/filter.py:2291 +#: pretix/control/forms/filter.py:2287 msgid "All open refunds" msgstr "" -#: pretix/control/forms/filter.py:2292 +#: pretix/control/forms/filter.py:2288 msgid "All refunds" msgstr "" -#: pretix/control/forms/filter.py:2330 pretix/plugins/reports/exporters.py:688 +#: pretix/control/forms/filter.py:2326 pretix/plugins/reports/exporters.py:688 msgid "Date filter" msgstr "" -#: pretix/control/forms/filter.py:2332 pretix/plugins/reports/exporters.py:690 +#: pretix/control/forms/filter.py:2328 pretix/plugins/reports/exporters.py:690 msgid "Filter by…" msgstr "" -#: pretix/control/forms/filter.py:2334 pretix/plugins/reports/exporters.py:692 +#: pretix/control/forms/filter.py:2330 pretix/plugins/reports/exporters.py:692 msgid "Date of last successful payment" msgstr "" -#: pretix/control/forms/filter.py:2374 +#: pretix/control/forms/filter.py:2370 msgid "All check-ins" msgstr "" -#: pretix/control/forms/filter.py:2375 +#: pretix/control/forms/filter.py:2371 msgid "Successful check-ins" msgstr "" -#: pretix/control/forms/filter.py:2376 +#: pretix/control/forms/filter.py:2372 msgid "Unsuccessful check-ins" msgstr "" -#: pretix/control/forms/filter.py:2381 +#: pretix/control/forms/filter.py:2377 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:64 -#: pretix/plugins/checkinlists/exporters.py:753 +#: pretix/plugins/checkinlists/exporters.py:755 msgid "Scan type" msgstr "" -#: pretix/control/forms/filter.py:2383 +#: pretix/control/forms/filter.py:2379 msgid "All directions" msgstr "" -#: pretix/control/forms/filter.py:2392 pretix/control/forms/filter.py:2432 +#: pretix/control/forms/filter.py:2388 pretix/control/forms/filter.py:2428 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:67 -#: pretix/plugins/checkinlists/exporters.py:759 +#: pretix/plugins/checkinlists/exporters.py:761 msgid "Device" msgstr "" -#: pretix/control/forms/filter.py:2393 pretix/control/forms/filter.py:2428 -#: pretix/control/forms/filter.py:2620 +#: pretix/control/forms/filter.py:2389 pretix/control/forms/filter.py:2424 +#: pretix/control/forms/filter.py:2615 msgid "All devices" msgstr "" -#: pretix/control/forms/filter.py:2407 +#: pretix/control/forms/filter.py:2403 msgctxt "filter" msgid "Start date" msgstr "" -#: pretix/control/forms/filter.py:2413 +#: pretix/control/forms/filter.py:2409 msgctxt "filter" msgid "End date" msgstr "" -#: pretix/control/forms/filter.py:2455 pretix/control/forms/filter.py:2459 +#: pretix/control/forms/filter.py:2451 pretix/control/forms/filter.py:2455 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:64 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:10 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:25 @@ -12453,26 +12465,26 @@ msgstr "" #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:29 #: pretix/plugins/checkinlists/exporters.py:80 #: pretix/plugins/checkinlists/exporters.py:153 -#: pretix/plugins/checkinlists/exporters.py:472 -#: pretix/plugins/checkinlists/exporters.py:752 -#: pretix/plugins/checkinlists/exporters.py:834 +#: pretix/plugins/checkinlists/exporters.py:474 +#: pretix/plugins/checkinlists/exporters.py:754 +#: pretix/plugins/checkinlists/exporters.py:836 msgid "Check-in list" msgstr "" -#: pretix/control/forms/filter.py:2611 +#: pretix/control/forms/filter.py:2606 #: pretix/control/templates/pretixcontrol/organizers/devices.html:82 msgid "Software" msgstr "" -#: pretix/control/forms/filter.py:2618 +#: pretix/control/forms/filter.py:2613 msgid "Device status" msgstr "" -#: pretix/control/forms/filter.py:2621 +#: pretix/control/forms/filter.py:2616 msgid "Active devices" msgstr "" -#: pretix/control/forms/filter.py:2622 +#: pretix/control/forms/filter.py:2617 msgid "Revoked devices" msgstr "" @@ -12890,52 +12902,60 @@ msgstr "" msgid "Bundled product" msgstr "" -#: pretix/control/forms/item.py:1236 pretix/control/forms/orders.py:365 -#: pretix/control/forms/orders.py:555 +#: pretix/control/forms/item.py:1236 pretix/control/forms/orders.py:367 +#: pretix/control/forms/orders.py:557 msgid "inactive" msgstr "" -#: pretix/control/forms/mailsetup.py:40 +#: pretix/control/forms/mailsetup.py:42 msgid "Hostname" msgstr "" -#: pretix/control/forms/mailsetup.py:45 +#: pretix/control/forms/mailsetup.py:47 msgid "Port" msgstr "" -#: pretix/control/forms/mailsetup.py:50 +#: pretix/control/forms/mailsetup.py:52 msgid "Username" msgstr "" -#: pretix/control/forms/mailsetup.py:59 +#: pretix/control/forms/mailsetup.py:62 +#, python-brace-format +msgid "" +"The password contains characters not supported by our email system. Please " +"only use characters A-Z, a-z, 0-9, and common special characters " +"({characters})." +msgstr "" + +#: pretix/control/forms/mailsetup.py:70 msgid "Use STARTTLS" msgstr "" -#: pretix/control/forms/mailsetup.py:60 +#: pretix/control/forms/mailsetup.py:71 msgid "Commonly enabled on port 587." msgstr "" -#: pretix/control/forms/mailsetup.py:64 +#: pretix/control/forms/mailsetup.py:75 msgid "Use SSL" msgstr "" -#: pretix/control/forms/mailsetup.py:65 +#: pretix/control/forms/mailsetup.py:76 msgid "Commonly enabled on port 465." msgstr "" -#: pretix/control/forms/mailsetup.py:72 +#: pretix/control/forms/mailsetup.py:83 msgid "" "You can activate either SSL or STARTTLS security, but not both at the same " "time." msgstr "" -#: pretix/control/forms/mailsetup.py:84 pretix/control/forms/mailsetup.py:89 +#: pretix/control/forms/mailsetup.py:95 pretix/control/forms/mailsetup.py:100 msgid "" "You are not allowed to use this mail server, please choose one with a public " "IP address instead." msgstr "" -#: pretix/control/forms/mailsetup.py:92 +#: pretix/control/forms/mailsetup.py:103 msgid "We were unable to resolve this hostname." msgstr "" @@ -12968,11 +12988,11 @@ msgstr "" msgid "Create orders as test mode orders" msgstr "" -#: pretix/control/forms/orders.py:83 +#: pretix/control/forms/orders.py:85 msgid "Confirm order regardless of payment" msgstr "" -#: pretix/control/forms/orders.py:84 +#: pretix/control/forms/orders.py:86 msgid "" "If you check this box, this order will behave like a paid order for most " "purposes, even though it is not yet paid. This means that the customer can " @@ -12983,21 +13003,21 @@ msgid "" "somehow and not auto-cancel the order." msgstr "" -#: pretix/control/forms/orders.py:92 +#: pretix/control/forms/orders.py:94 msgid "Overbook quota" msgstr "" -#: pretix/control/forms/orders.py:93 +#: pretix/control/forms/orders.py:95 msgid "" "If you check this box, this operation will be performed even if it leads to " "an overbooked quota and you having sold more tickets than you planned!" msgstr "" -#: pretix/control/forms/orders.py:134 +#: pretix/control/forms/orders.py:136 msgid "Overbook quota and ignore late payment" msgstr "" -#: pretix/control/forms/orders.py:135 +#: pretix/control/forms/orders.py:137 msgid "" "If you check this box, this operation will be performed even if it leads to " "an overbooked quota and you having sold more tickets than you planned! The " @@ -13005,16 +13025,16 @@ msgid "" "payments." msgstr "" -#: pretix/control/forms/orders.py:165 pretix/control/forms/orders.py:212 -#: pretix/control/forms/orders.py:226 +#: pretix/control/forms/orders.py:167 pretix/control/forms/orders.py:214 +#: pretix/control/forms/orders.py:228 msgid "Notify customer by email" msgstr "" -#: pretix/control/forms/orders.py:172 +#: pretix/control/forms/orders.py:174 msgid "Keep a cancellation fee of" msgstr "" -#: pretix/control/forms/orders.py:173 +#: pretix/control/forms/orders.py:175 msgid "" "If you keep a fee, all positions within this order will be canceled and the " "order will be reduced to a cancellation fee. Payment and shipping fees will " @@ -13023,29 +13043,29 @@ msgid "" "automatically." msgstr "" -#: pretix/control/forms/orders.py:179 +#: pretix/control/forms/orders.py:181 msgid "Generate cancellation for invoice" msgstr "" -#: pretix/control/forms/orders.py:184 pretix/control/forms/orders.py:216 +#: pretix/control/forms/orders.py:186 pretix/control/forms/orders.py:218 msgid "Comment (will be sent to the user)" msgstr "" -#: pretix/control/forms/orders.py:185 pretix/control/forms/orders.py:217 +#: pretix/control/forms/orders.py:187 pretix/control/forms/orders.py:219 msgid "" "Will be included in the notification email when the respective placeholder " "is present in the configured email text." msgstr "" -#: pretix/control/forms/orders.py:227 +#: pretix/control/forms/orders.py:229 msgid "A mail will only be sent if the order is fully paid after this." msgstr "" -#: pretix/control/forms/orders.py:234 +#: pretix/control/forms/orders.py:236 msgid "Payment amount" msgstr "" -#: pretix/control/forms/orders.py:238 +#: pretix/control/forms/orders.py:240 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/control.html:24 #: pretix/plugins/reports/exporters.py:499 #: pretix/plugins/reports/exporters.py:561 @@ -13054,58 +13074,58 @@ msgstr "" msgid "Payment date" msgstr "" -#: pretix/control/forms/orders.py:262 +#: pretix/control/forms/orders.py:264 msgid "Please select some events." msgstr "" -#: pretix/control/forms/orders.py:283 +#: pretix/control/forms/orders.py:285 msgid "Re-calculate taxes" msgstr "" -#: pretix/control/forms/orders.py:286 +#: pretix/control/forms/orders.py:288 msgid "Do not re-calculate taxes" msgstr "" -#: pretix/control/forms/orders.py:287 +#: pretix/control/forms/orders.py:289 msgid "" "Re-calculate taxes based on address and product settings, keep gross amount " "the same." msgstr "" -#: pretix/control/forms/orders.py:288 +#: pretix/control/forms/orders.py:290 msgid "" "Re-calculate taxes based on address and product settings, keep net amount " "the same." msgstr "" -#: pretix/control/forms/orders.py:293 +#: pretix/control/forms/orders.py:295 msgid "Issue a new invoice if required" msgstr "" -#: pretix/control/forms/orders.py:297 +#: pretix/control/forms/orders.py:299 msgid "" "If an invoice exists for this order and this operation would change its " "contents, the old invoice will be canceled and a new invoice will be issued." msgstr "" -#: pretix/control/forms/orders.py:302 +#: pretix/control/forms/orders.py:304 msgid "Notify user" msgstr "" -#: pretix/control/forms/orders.py:306 +#: pretix/control/forms/orders.py:308 msgid "" "Send an email to the customer notifying that their order has been changed." msgstr "" -#: pretix/control/forms/orders.py:310 +#: pretix/control/forms/orders.py:312 msgid "Allow to overbook quotas when performing this operation" msgstr "" -#: pretix/control/forms/orders.py:326 +#: pretix/control/forms/orders.py:328 msgid "Add-on to" msgstr "" -#: pretix/control/forms/orders.py:331 +#: pretix/control/forms/orders.py:333 #: pretix/control/templates/pretixcontrol/checkin/index.html:104 #: pretix/control/templates/pretixcontrol/order/change.html:127 #: pretix/control/views/vouchers.py:120 @@ -13114,7 +13134,7 @@ msgstr "" msgid "Seat" msgstr "" -#: pretix/control/forms/orders.py:334 +#: pretix/control/forms/orders.py:336 #: pretix/control/templates/pretixcontrol/order/change.html:182 #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:5 #: pretix/control/templates/pretixcontrol/organizers/customer_membership.html:9 @@ -13124,145 +13144,150 @@ msgstr "" msgid "Membership" msgstr "" -#: pretix/control/forms/orders.py:342 +#: pretix/control/forms/orders.py:344 msgid "Including taxes, if any. Keep empty for the product's default price" msgstr "" -#: pretix/control/forms/orders.py:457 pretix/control/forms/orders.py:461 -#: pretix/control/forms/orders.py:489 pretix/control/forms/orders.py:531 -#: pretix/control/forms/orders.py:550 pretix/control/forms/orders.py:568 -#: pretix/control/forms/orders.py:596 +#: pretix/control/forms/orders.py:459 pretix/control/forms/orders.py:463 +#: pretix/control/forms/orders.py:491 pretix/control/forms/orders.py:533 +#: pretix/control/forms/orders.py:552 pretix/control/forms/orders.py:570 +#: pretix/control/forms/orders.py:598 msgid "(Unchanged)" msgstr "" -#: pretix/control/forms/orders.py:467 pretix/control/forms/orders.py:591 +#: pretix/control/forms/orders.py:469 pretix/control/forms/orders.py:593 msgid "New price (gross)" msgstr "" -#: pretix/control/forms/orders.py:471 +#: pretix/control/forms/orders.py:473 msgid "Ticket is blocked" msgstr "" -#: pretix/control/forms/orders.py:476 +#: pretix/control/forms/orders.py:478 msgid "Validity start" msgstr "" -#: pretix/control/forms/orders.py:481 +#: pretix/control/forms/orders.py:483 msgid "Validity end" msgstr "" -#: pretix/control/forms/orders.py:493 +#: pretix/control/forms/orders.py:495 msgid "Generate a new secret" msgstr "" -#: pretix/control/forms/orders.py:494 +#: pretix/control/forms/orders.py:496 msgid "" "This affects both the ticket secret (often used as a QR code) as well as the " "link used to individually access the ticket." msgstr "" -#: pretix/control/forms/orders.py:499 +#: pretix/control/forms/orders.py:501 msgid "Cancel this position" msgstr "" -#: pretix/control/forms/orders.py:503 +#: pretix/control/forms/orders.py:505 msgid "Split into new order" msgstr "" -#: pretix/control/forms/orders.py:569 +#: pretix/control/forms/orders.py:571 msgid "(No membership)" msgstr "" -#: pretix/control/forms/orders.py:600 +#: pretix/control/forms/orders.py:602 msgid "Remove this fee" msgstr "" -#: pretix/control/forms/orders.py:618 +#: pretix/control/forms/orders.py:620 msgid "" "Note that payment fees have a special semantic and might automatically be " "changed if the payment method of the order is changed." msgstr "" -#: pretix/control/forms/orders.py:626 +#: pretix/control/forms/orders.py:628 #: pretix/control/templates/pretixcontrol/order/change.html:214 #: pretix/control/templates/pretixcontrol/order/change.html:438 msgid "including all taxes" msgstr "" -#: pretix/control/forms/orders.py:664 +#: pretix/control/forms/orders.py:666 msgid "Invalidate secrets" msgstr "" -#: pretix/control/forms/orders.py:665 +#: pretix/control/forms/orders.py:667 msgid "" "Regenerates the order and ticket secrets. You will need to re-send the link " "to the order page to the user and the user will need to download his tickets " "again. The old versions will be invalid." msgstr "" -#: pretix/control/forms/orders.py:722 pretix/plugins/sendmail/forms.py:196 +#: pretix/control/forms/orders.py:724 pretix/plugins/sendmail/forms.py:196 msgid "Attach tickets" msgstr "" -#: pretix/control/forms/orders.py:723 pretix/plugins/sendmail/forms.py:197 +#: pretix/control/forms/orders.py:725 pretix/plugins/sendmail/forms.py:197 msgid "" "Will be ignored if tickets exceed a given size limit to ensure email " "deliverability." msgstr "" -#: pretix/control/forms/orders.py:727 +#: pretix/control/forms/orders.py:732 msgid "Attach invoices" msgstr "" -#: pretix/control/forms/orders.py:748 +#: pretix/control/forms/orders.py:753 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_inspect.html:20 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_list.html:30 msgid "Recipient" msgstr "" -#: pretix/control/forms/orders.py:785 +#: pretix/control/forms/orders.py:768 +#, python-brace-format +msgid "Attach {file}" +msgstr "" + +#: pretix/control/forms/orders.py:796 msgid "" "Cancel the order. All tickets will no longer work. This can not be reverted." msgstr "" -#: pretix/control/forms/orders.py:786 +#: pretix/control/forms/orders.py:797 msgid "" "Mark the order as pending and allow the user to pay the open amount with " "another payment method." msgstr "" -#: pretix/control/forms/orders.py:788 +#: pretix/control/forms/orders.py:799 msgid "Do nothing and keep the order as it is." msgstr "" -#: pretix/control/forms/orders.py:815 +#: pretix/control/forms/orders.py:826 msgid "The refund amount needs to be positive and less than {}." msgstr "" -#: pretix/control/forms/orders.py:821 +#: pretix/control/forms/orders.py:832 msgid "You need to specify an amount for a partial refund." msgstr "" -#: pretix/control/forms/orders.py:833 +#: pretix/control/forms/orders.py:844 msgid "Cancel all dates" msgstr "" -#: pretix/control/forms/orders.py:852 +#: pretix/control/forms/orders.py:863 msgid "Automatically refund money if possible" msgstr "" -#: pretix/control/forms/orders.py:855 +#: pretix/control/forms/orders.py:866 msgid "" "Only available for payment method that support automatic refunds. Tickets " "that have been blocked (manually or by a plugin) are not auto-canceled and " "you will need to deal with them manually." msgstr "" -#: pretix/control/forms/orders.py:859 +#: pretix/control/forms/orders.py:870 msgid "Create refund in the manual refund to-do list" msgstr "" -#: pretix/control/forms/orders.py:862 +#: pretix/control/forms/orders.py:873 msgid "" "Manual refunds will be created which will be listed in the manual refund to-" "do list. When combined with the automatic refund functionally, only payments " @@ -13271,29 +13296,29 @@ msgid "" "orders by offsetting with different orders or issuing gift cards." msgstr "" -#: pretix/control/forms/orders.py:868 +#: pretix/control/forms/orders.py:879 msgid "" "Refund order value to a gift card instead instead of the original payment " "method" msgstr "" -#: pretix/control/forms/orders.py:874 +#: pretix/control/forms/orders.py:885 msgid "Gift card validity" msgstr "" -#: pretix/control/forms/orders.py:893 +#: pretix/control/forms/orders.py:904 msgid "Keep a fixed cancellation fee per ticket" msgstr "" -#: pretix/control/forms/orders.py:894 +#: pretix/control/forms/orders.py:905 msgid "Free tickets and add-on products are not counted" msgstr "" -#: pretix/control/forms/orders.py:904 +#: pretix/control/forms/orders.py:915 msgid "Keep fees" msgstr "" -#: pretix/control/forms/orders.py:907 +#: pretix/control/forms/orders.py:918 msgid "" "The selected types of fees will not be refunded but instead added to the " "cancellation fee. Fees are never refunded in when an order in an event " @@ -13301,20 +13326,20 @@ msgid "" "dates." msgstr "" -#: pretix/control/forms/orders.py:913 +#: pretix/control/forms/orders.py:924 msgid "Send information via email" msgstr "" -#: pretix/control/forms/orders.py:919 +#: pretix/control/forms/orders.py:930 msgid "Send information to waiting list" msgstr "" -#: pretix/control/forms/orders.py:934 pretix/control/forms/orders.py:960 +#: pretix/control/forms/orders.py:945 pretix/control/forms/orders.py:971 #, python-brace-format msgid "Canceled: {event}" msgstr "" -#: pretix/control/forms/orders.py:945 +#: pretix/control/forms/orders.py:956 #, python-brace-format msgid "" "Hello,\n" @@ -13332,7 +13357,7 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/control/forms/orders.py:972 +#: pretix/control/forms/orders.py:983 #, python-brace-format msgid "" "Hello,\n" @@ -13346,24 +13371,24 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/control/forms/orders.py:1004 pretix/plugins/sendmail/forms.py:115 +#: pretix/control/forms/orders.py:1015 pretix/plugins/sendmail/forms.py:115 #: pretix/plugins/sendmail/forms.py:208 msgctxt "subevent" msgid "Please either select a specific date or a date range, not both." msgstr "" -#: pretix/control/forms/orders.py:1006 +#: pretix/control/forms/orders.py:1017 msgctxt "subevent" msgid "Please either select all dates or a date range, not both." msgstr "" -#: pretix/control/forms/orders.py:1008 pretix/plugins/sendmail/forms.py:117 +#: pretix/control/forms/orders.py:1019 pretix/plugins/sendmail/forms.py:117 #: pretix/plugins/sendmail/forms.py:210 msgctxt "subevent" msgid "If you set a date range, please set both a start and an end." msgstr "" -#: pretix/control/forms/orders.py:1010 +#: pretix/control/forms/orders.py:1021 msgid "Please confirm that you want to cancel ALL dates in this event series." msgstr "" @@ -13789,1246 +13814,1246 @@ msgstr "" msgid "You need to specify as many seats as voucher codes." msgstr "" -#: pretix/control/logdisplay.py:72 pretix/control/logdisplay.py:82 +#: pretix/control/logdisplay.py:71 pretix/control/logdisplay.py:81 msgid "The order has been changed:" msgstr "" -#: pretix/control/logdisplay.py:99 +#: pretix/control/logdisplay.py:98 #, python-brace-format msgid "" "Position #{posid}: {old_item} ({old_price}) changed to {new_item} " "({new_price})." msgstr "" -#: pretix/control/logdisplay.py:110 +#: pretix/control/logdisplay.py:109 #, python-brace-format msgid "Position #{posid}: Used membership changed." msgstr "" -#: pretix/control/logdisplay.py:116 +#: pretix/control/logdisplay.py:115 #, python-brace-format msgid "Position #{posid}: Seat \"{old_seat}\" changed to \"{new_seat}\"." msgstr "" -#: pretix/control/logdisplay.py:126 +#: pretix/control/logdisplay.py:125 #, python-brace-format msgid "" "Position #{posid}: Event date \"{old_event}\" ({old_price}) changed to " "\"{new_event}\" ({new_price})." msgstr "" -#: pretix/control/logdisplay.py:140 +#: pretix/control/logdisplay.py:139 #, python-brace-format msgid "Price of position #{posid} changed from {old_price} to {new_price}." msgstr "" -#: pretix/control/logdisplay.py:153 +#: pretix/control/logdisplay.py:152 #, python-brace-format msgid "Tax rule of position #{posid} changed from {old_rule} to {new_rule}." msgstr "" -#: pretix/control/logdisplay.py:159 +#: pretix/control/logdisplay.py:158 #, python-brace-format msgid "Tax rule of fee #{fee} changed from {old_rule} to {new_rule}." msgstr "" -#: pretix/control/logdisplay.py:169 +#: pretix/control/logdisplay.py:168 msgid "A fee has been added" msgstr "" -#: pretix/control/logdisplay.py:177 +#: pretix/control/logdisplay.py:176 #, python-brace-format msgid "A fee was changed from {old_price} to {new_price}." msgstr "" -#: pretix/control/logdisplay.py:188 +#: pretix/control/logdisplay.py:187 #, python-brace-format msgid "A fee of {old_price} was removed." msgstr "" -#: pretix/control/logdisplay.py:201 +#: pretix/control/logdisplay.py:200 #, python-brace-format msgid "Position #{posid} ({old_item}, {old_price}) canceled." msgstr "" -#: pretix/control/logdisplay.py:218 +#: pretix/control/logdisplay.py:217 #, python-brace-format msgid "" "Position #{posid} created: {item} ({price}) as an add-on to position " "#{addon_to}." msgstr "" -#: pretix/control/logdisplay.py:224 +#: pretix/control/logdisplay.py:223 #, python-brace-format msgid "Position #{posid} created: {item} ({price})." msgstr "" -#: pretix/control/logdisplay.py:234 +#: pretix/control/logdisplay.py:233 #, python-brace-format msgid "A new secret has been generated for position #{posid}." msgstr "" -#: pretix/control/logdisplay.py:242 +#: pretix/control/logdisplay.py:241 #, python-brace-format msgid "" "The validity start date for position #{posid} has been changed to {value}." msgstr "" -#: pretix/control/logdisplay.py:254 +#: pretix/control/logdisplay.py:253 #, python-brace-format msgid "" "The validity end date for position #{posid} has been changed to {value}." msgstr "" -#: pretix/control/logdisplay.py:263 +#: pretix/control/logdisplay.py:262 #, python-brace-format msgid "A block has been added for position #{posid}." msgstr "" -#: pretix/control/logdisplay.py:269 +#: pretix/control/logdisplay.py:268 #, python-brace-format msgid "A block has been removed for position #{posid}." msgstr "" -#: pretix/control/logdisplay.py:286 +#: pretix/control/logdisplay.py:285 #, python-brace-format msgid "" "Position #{posid} ({old_item}, {old_price}) split into new order: {order}" msgstr "" -#: pretix/control/logdisplay.py:305 +#: pretix/control/logdisplay.py:304 #, python-brace-format msgid "This order has been created by splitting the order {order}" msgstr "" -#: pretix/control/logdisplay.py:312 +#: pretix/control/logdisplay.py:311 #, python-brace-format msgid "" "Unknown scan of code \"{barcode}…\" at {datetime} for list \"{list}\", type " "\"{type}\"." msgstr "" -#: pretix/control/logdisplay.py:313 +#: pretix/control/logdisplay.py:312 #, python-brace-format msgid "" "Unknown scan of code \"{barcode}…\" for list \"{list}\", type \"{type}\"." msgstr "" -#: pretix/control/logdisplay.py:316 +#: pretix/control/logdisplay.py:315 #, python-brace-format msgid "" "Scan of revoked code \"{barcode}…\" at {datetime} for list \"{list}\", type " "\"{type}\", was uploaded." msgstr "" -#: pretix/control/logdisplay.py:317 +#: pretix/control/logdisplay.py:316 #, python-brace-format msgid "" "Scan of revoked code \"{barcode}\" for list \"{list}\", type \"{type}\", was " "uploaded." msgstr "" -#: pretix/control/logdisplay.py:320 +#: pretix/control/logdisplay.py:319 #, python-brace-format msgid "" "Denied scan of position #{posid} at {datetime} for list \"{list}\", type " "\"{type}\", error code \"{errorcode}\"." msgstr "" -#: pretix/control/logdisplay.py:321 +#: pretix/control/logdisplay.py:320 #, python-brace-format msgid "" "Denied scan of position #{posid} for list \"{list}\", type \"{type}\", error " "code \"{errorcode}\"." msgstr "" -#: pretix/control/logdisplay.py:323 pretix/control/logdisplay.py:324 +#: pretix/control/logdisplay.py:322 pretix/control/logdisplay.py:323 #, python-brace-format msgid "The check-in of position #{posid} on list \"{list}\" has been reverted." msgstr "" -#: pretix/control/logdisplay.py:344 pretix/control/logdisplay.py:346 -#: pretix/control/logdisplay.py:892 pretix/control/logdisplay.py:894 +#: pretix/control/logdisplay.py:343 pretix/control/logdisplay.py:345 +#: pretix/control/logdisplay.py:891 pretix/control/logdisplay.py:893 msgid "(unknown)" msgstr "" -#: pretix/control/logdisplay.py:366 +#: pretix/control/logdisplay.py:365 #, python-brace-format msgid "" "Position #{posid} has been checked out at {datetime} for list \"{list}\"." msgstr "" -#: pretix/control/logdisplay.py:367 +#: pretix/control/logdisplay.py:366 #, python-brace-format msgid "Position #{posid} has been checked out for list \"{list}\"." msgstr "" -#: pretix/control/logdisplay.py:371 +#: pretix/control/logdisplay.py:370 #, python-brace-format msgid "" "Position #{posid} has been checked in at {datetime} for list \"{list}\"." msgstr "" -#: pretix/control/logdisplay.py:372 +#: pretix/control/logdisplay.py:371 #, python-brace-format msgid "Position #{posid} has been checked in for list \"{list}\"." msgstr "" -#: pretix/control/logdisplay.py:376 +#: pretix/control/logdisplay.py:375 #, python-brace-format msgid "" "A scan for position #{posid} at {datetime} for list \"{list}\" has been " "uploaded even though it has been scanned already." msgstr "" -#: pretix/control/logdisplay.py:382 +#: pretix/control/logdisplay.py:381 #, python-brace-format msgid "" "Position #{posid} has been scanned and rejected because it has already been " "scanned before on list \"{list}\"." msgstr "" -#: pretix/control/logdisplay.py:393 +#: pretix/control/logdisplay.py:392 msgid "The user confirmed the following message: \"{}\"" msgstr "" -#: pretix/control/logdisplay.py:405 +#: pretix/control/logdisplay.py:404 #, python-brace-format msgid "The order has been canceled (comment: \"{comment}\")." msgstr "" -#: pretix/control/logdisplay.py:407 pretix/control/views/orders.py:1552 +#: pretix/control/logdisplay.py:406 pretix/control/views/orders.py:1573 #: pretix/presale/views/order.py:1047 msgid "The order has been canceled." msgstr "" -#: pretix/control/logdisplay.py:415 +#: pretix/control/logdisplay.py:414 #, python-brace-format msgid "Position #{posid} has been printed at {datetime} with type \"{type}\"." msgstr "" -#: pretix/control/logdisplay.py:429 pretix/control/logdisplay.py:742 +#: pretix/control/logdisplay.py:428 pretix/control/logdisplay.py:741 msgid "The settings of a payment provider have been changed." msgstr "" -#: pretix/control/logdisplay.py:432 pretix/control/logdisplay.py:741 +#: pretix/control/logdisplay.py:431 pretix/control/logdisplay.py:740 msgid "The settings of a ticket output provider have been changed." msgstr "" -#: pretix/control/logdisplay.py:438 +#: pretix/control/logdisplay.py:437 msgid "Blocked manually" msgstr "" -#: pretix/control/logdisplay.py:440 +#: pretix/control/logdisplay.py:439 msgid "Blocked because of an API integration" msgstr "" -#: pretix/control/logdisplay.py:444 +#: pretix/control/logdisplay.py:443 #, python-brace-format msgid "The test mode order {code} has been deleted." msgstr "" -#: pretix/control/logdisplay.py:445 +#: pretix/control/logdisplay.py:444 msgid "The order details have been changed." msgstr "" -#: pretix/control/logdisplay.py:446 +#: pretix/control/logdisplay.py:445 msgid "The order has been marked as unpaid." msgstr "" -#: pretix/control/logdisplay.py:447 +#: pretix/control/logdisplay.py:446 msgid "The order's secret has been changed." msgstr "" -#: pretix/control/logdisplay.py:448 +#: pretix/control/logdisplay.py:447 msgid "The order's expiry date has been changed." msgstr "" -#: pretix/control/logdisplay.py:449 +#: pretix/control/logdisplay.py:448 msgid "The order has been set to be usable before it is paid." msgstr "" -#: pretix/control/logdisplay.py:450 +#: pretix/control/logdisplay.py:449 msgid "The order has been set to require payment before use." msgstr "" -#: pretix/control/logdisplay.py:451 pretix/control/views/orders.py:1557 +#: pretix/control/logdisplay.py:450 pretix/control/views/orders.py:1578 msgid "The order has been marked as expired." msgstr "" -#: pretix/control/logdisplay.py:452 pretix/control/views/orders.py:1455 +#: pretix/control/logdisplay.py:451 pretix/control/views/orders.py:1476 msgid "The order has been marked as paid." msgstr "" -#: pretix/control/logdisplay.py:453 +#: pretix/control/logdisplay.py:452 msgid "The cancellation request has been deleted." msgstr "" -#: pretix/control/logdisplay.py:454 +#: pretix/control/logdisplay.py:453 msgid "The order has been refunded." msgstr "" -#: pretix/control/logdisplay.py:455 pretix/control/views/orders.py:1840 +#: pretix/control/logdisplay.py:454 pretix/control/views/orders.py:1861 msgid "The order has been reactivated." msgstr "" -#: pretix/control/logdisplay.py:456 +#: pretix/control/logdisplay.py:455 msgid "The order has been created." msgstr "" -#: pretix/control/logdisplay.py:458 +#: pretix/control/logdisplay.py:457 msgid "The order requires approval before it can continue to be processed." msgstr "" -#: pretix/control/logdisplay.py:459 pretix/control/views/orders.py:779 +#: pretix/control/logdisplay.py:458 pretix/control/views/orders.py:800 msgid "The order has been approved." msgstr "" -#: pretix/control/logdisplay.py:460 +#: pretix/control/logdisplay.py:459 #, python-brace-format msgid "The order has been denied (comment: \"{comment}\")." msgstr "" -#: pretix/control/logdisplay.py:461 +#: pretix/control/logdisplay.py:460 #, python-brace-format msgid "" "The email address has been changed from \"{old_email}\" to \"{new_email}\"." msgstr "" -#: pretix/control/logdisplay.py:464 +#: pretix/control/logdisplay.py:463 msgid "" "The email address has been confirmed to be working (the user clicked on a " "link in the email for the first time)." msgstr "" -#: pretix/control/logdisplay.py:466 +#: pretix/control/logdisplay.py:465 #, python-brace-format msgid "" "The phone number has been changed from \"{old_phone}\" to \"{new_phone}\"." msgstr "" -#: pretix/control/logdisplay.py:468 +#: pretix/control/logdisplay.py:467 msgid "The customer account has been changed." msgstr "" -#: pretix/control/logdisplay.py:469 +#: pretix/control/logdisplay.py:468 msgid "The order locale has been changed." msgstr "" -#: pretix/control/logdisplay.py:470 pretix/control/views/orders.py:1596 +#: pretix/control/logdisplay.py:469 pretix/control/views/orders.py:1617 #: pretix/presale/views/order.py:739 pretix/presale/views/order.py:812 msgid "The invoice has been generated." msgstr "" -#: pretix/control/logdisplay.py:471 pretix/control/views/orders.py:1667 +#: pretix/control/logdisplay.py:470 pretix/control/views/orders.py:1688 msgid "The invoice has been regenerated." msgstr "" -#: pretix/control/logdisplay.py:472 pretix/control/views/orders.py:1698 +#: pretix/control/logdisplay.py:471 pretix/control/views/orders.py:1719 #: pretix/presale/views/order.py:825 msgid "The invoice has been reissued." msgstr "" -#: pretix/control/logdisplay.py:473 +#: pretix/control/logdisplay.py:472 msgid "The order's internal comment has been updated." msgstr "" -#: pretix/control/logdisplay.py:474 +#: pretix/control/logdisplay.py:473 msgid "The order's follow-up date has been updated." msgstr "" -#: pretix/control/logdisplay.py:475 +#: pretix/control/logdisplay.py:474 msgid "The order's flag to require attention at check-in has been toggled." msgstr "" -#: pretix/control/logdisplay.py:477 +#: pretix/control/logdisplay.py:476 msgid "The order's check-in text has been changed." msgstr "" -#: pretix/control/logdisplay.py:478 +#: pretix/control/logdisplay.py:477 msgid "" "The order's flag to be considered valid even if unpaid has been toggled." msgstr "" -#: pretix/control/logdisplay.py:480 +#: pretix/control/logdisplay.py:479 #, python-brace-format msgid "A new payment {local_id} has been started instead of the previous one." msgstr "" -#: pretix/control/logdisplay.py:481 +#: pretix/control/logdisplay.py:480 msgid "An unidentified type email has been sent." msgstr "" -#: pretix/control/logdisplay.py:482 pretix/control/logdisplay.py:667 +#: pretix/control/logdisplay.py:481 pretix/control/logdisplay.py:666 msgid "Sending of an email has failed." msgstr "" -#: pretix/control/logdisplay.py:483 +#: pretix/control/logdisplay.py:482 msgid "" "The email has been sent without attached tickets since they would have been " "too large to be likely to arrive." msgstr "" -#: pretix/control/logdisplay.py:485 +#: pretix/control/logdisplay.py:484 msgid "A custom email has been sent." msgstr "" -#: pretix/control/logdisplay.py:486 +#: pretix/control/logdisplay.py:485 msgid "A custom email has been sent to an attendee." msgstr "" -#: pretix/control/logdisplay.py:487 +#: pretix/control/logdisplay.py:486 msgid "" "An email has been sent with a reminder that the ticket is available for " "download." msgstr "" -#: pretix/control/logdisplay.py:489 +#: pretix/control/logdisplay.py:488 msgid "" "An email has been sent with a warning that the order is about to expire." msgstr "" -#: pretix/control/logdisplay.py:492 +#: pretix/control/logdisplay.py:491 msgid "" "An email has been sent to notify the user that the order has been canceled." msgstr "" -#: pretix/control/logdisplay.py:493 +#: pretix/control/logdisplay.py:492 msgid "" "An email has been sent to notify the user that the event has been canceled." msgstr "" -#: pretix/control/logdisplay.py:496 +#: pretix/control/logdisplay.py:495 msgid "" "An email has been sent to notify the user that the order has been changed." msgstr "" -#: pretix/control/logdisplay.py:498 +#: pretix/control/logdisplay.py:497 msgid "" "An email has been sent to notify the user that the order has been received." msgstr "" -#: pretix/control/logdisplay.py:500 +#: pretix/control/logdisplay.py:499 msgid "" "An email has been sent to notify the user that payment has been received." msgstr "" -#: pretix/control/logdisplay.py:502 +#: pretix/control/logdisplay.py:501 msgid "" "An email has been sent to notify the user that the order has been denied." msgstr "" -#: pretix/control/logdisplay.py:503 +#: pretix/control/logdisplay.py:502 msgid "" "An email has been sent to notify the user that the order has been approved." msgstr "" -#: pretix/control/logdisplay.py:506 +#: pretix/control/logdisplay.py:505 msgid "" "An email has been sent to notify the user that the order has been received " "and requires payment." msgstr "" -#: pretix/control/logdisplay.py:507 +#: pretix/control/logdisplay.py:506 msgid "" "An email has been sent to notify the user that the order has been received " "and requires approval." msgstr "" -#: pretix/control/logdisplay.py:510 +#: pretix/control/logdisplay.py:509 msgid "" "An email with a link to the order detail page has been resent to the user." msgstr "" -#: pretix/control/logdisplay.py:511 +#: pretix/control/logdisplay.py:510 msgid "An email has been sent to notify the user that the payment failed." msgstr "" -#: pretix/control/logdisplay.py:518 +#: pretix/control/logdisplay.py:517 msgid "The voucher has been created." msgstr "" -#: pretix/control/logdisplay.py:520 +#: pretix/control/logdisplay.py:519 msgid "The voucher has been created and sent to a person on the waiting list." msgstr "" -#: pretix/control/logdisplay.py:522 +#: pretix/control/logdisplay.py:521 msgid "" "The voucher has been set to expire because the recipient removed themselves " "from the waiting list." msgstr "" -#: pretix/control/logdisplay.py:523 +#: pretix/control/logdisplay.py:522 msgid "The voucher has been changed." msgstr "" -#: pretix/control/logdisplay.py:524 +#: pretix/control/logdisplay.py:523 msgid "The voucher has been deleted." msgstr "" -#: pretix/control/logdisplay.py:533 +#: pretix/control/logdisplay.py:532 #, python-brace-format msgid "The voucher has been redeemed in order {order_code}." msgstr "" -#: pretix/control/logdisplay.py:548 +#: pretix/control/logdisplay.py:547 msgid "The category has been added." msgstr "" -#: pretix/control/logdisplay.py:549 +#: pretix/control/logdisplay.py:548 msgid "The category has been deleted." msgstr "" -#: pretix/control/logdisplay.py:550 +#: pretix/control/logdisplay.py:549 msgid "The category has been changed." msgstr "" -#: pretix/control/logdisplay.py:551 +#: pretix/control/logdisplay.py:550 msgid "The category has been reordered." msgstr "" -#: pretix/control/logdisplay.py:558 +#: pretix/control/logdisplay.py:557 msgid "The tax rule has been added." msgstr "" -#: pretix/control/logdisplay.py:559 +#: pretix/control/logdisplay.py:558 msgid "The tax rule has been deleted." msgstr "" -#: pretix/control/logdisplay.py:560 +#: pretix/control/logdisplay.py:559 msgid "The tax rule has been changed." msgstr "" -#: pretix/control/logdisplay.py:572 +#: pretix/control/logdisplay.py:571 #, python-brace-format msgid "{user} has been added to the team." msgstr "" -#: pretix/control/logdisplay.py:573 +#: pretix/control/logdisplay.py:572 #, python-brace-format msgid "{user} has been removed from the team." msgstr "" -#: pretix/control/logdisplay.py:574 +#: pretix/control/logdisplay.py:573 #, python-brace-format msgid "{user} has been invited to the team." msgstr "" -#: pretix/control/logdisplay.py:575 +#: pretix/control/logdisplay.py:574 #, python-brace-format msgid "Invite for {user} has been resent." msgstr "" -#: pretix/control/logdisplay.py:586 +#: pretix/control/logdisplay.py:585 #, python-brace-format msgid "{user} has joined the team using the invite sent to {email}." msgstr "" -#: pretix/control/logdisplay.py:596 +#: pretix/control/logdisplay.py:595 msgid "Your account settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:599 pretix/control/views/user.py:253 +#: pretix/control/logdisplay.py:598 pretix/control/views/user.py:253 #, python-brace-format msgid "Your email address has been changed to {email}." msgstr "" -#: pretix/control/logdisplay.py:601 pretix/control/views/user.py:250 +#: pretix/control/logdisplay.py:600 pretix/control/views/user.py:250 msgid "Your password has been changed." msgstr "" -#: pretix/control/logdisplay.py:603 +#: pretix/control/logdisplay.py:602 msgid "Your account has been enabled." msgstr "" -#: pretix/control/logdisplay.py:605 +#: pretix/control/logdisplay.py:604 msgid "Your account has been disabled." msgstr "" -#: pretix/control/logdisplay.py:615 +#: pretix/control/logdisplay.py:614 msgid "You impersonated {}." msgstr "" -#: pretix/control/logdisplay.py:616 +#: pretix/control/logdisplay.py:615 msgid "You stopped impersonating {}." msgstr "" -#: pretix/control/logdisplay.py:623 +#: pretix/control/logdisplay.py:622 msgid "This object has been created by cloning." msgstr "" -#: pretix/control/logdisplay.py:624 +#: pretix/control/logdisplay.py:623 msgid "The organizer has been changed." msgstr "" -#: pretix/control/logdisplay.py:625 +#: pretix/control/logdisplay.py:624 msgid "The organizer settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:626 pretix/control/logdisplay.py:749 +#: pretix/control/logdisplay.py:625 pretix/control/logdisplay.py:748 msgid "The footer links have been changed." msgstr "" -#: pretix/control/logdisplay.py:627 pretix/control/logdisplay.py:673 +#: pretix/control/logdisplay.py:626 pretix/control/logdisplay.py:672 msgid "A scheduled export has been added." msgstr "" -#: pretix/control/logdisplay.py:628 pretix/control/logdisplay.py:674 +#: pretix/control/logdisplay.py:627 pretix/control/logdisplay.py:673 msgid "A scheduled export has been changed." msgstr "" -#: pretix/control/logdisplay.py:629 pretix/control/logdisplay.py:675 +#: pretix/control/logdisplay.py:628 pretix/control/logdisplay.py:674 msgid "A scheduled export has been deleted." msgstr "" -#: pretix/control/logdisplay.py:630 pretix/control/logdisplay.py:676 +#: pretix/control/logdisplay.py:629 pretix/control/logdisplay.py:675 msgid "A scheduled export has been executed." msgstr "" -#: pretix/control/logdisplay.py:631 pretix/control/logdisplay.py:677 +#: pretix/control/logdisplay.py:630 pretix/control/logdisplay.py:676 #, python-brace-format msgid "A scheduled export has failed: {reason}." msgstr "" -#: pretix/control/logdisplay.py:632 +#: pretix/control/logdisplay.py:631 msgid "Gift card acceptance for another organizer has been added." msgstr "" -#: pretix/control/logdisplay.py:633 +#: pretix/control/logdisplay.py:632 msgid "Gift card acceptance for another organizer has been removed." msgstr "" -#: pretix/control/logdisplay.py:634 +#: pretix/control/logdisplay.py:633 msgid "A new gift card acceptor has been invited." msgstr "" -#: pretix/control/logdisplay.py:635 +#: pretix/control/logdisplay.py:634 msgid "A gift card acceptor has been removed." msgstr "" -#: pretix/control/logdisplay.py:636 +#: pretix/control/logdisplay.py:635 msgid "A gift card issuer has been removed or declined." msgstr "" -#: pretix/control/logdisplay.py:637 +#: pretix/control/logdisplay.py:636 msgid "A new gift card issuer has been accepted." msgstr "" -#: pretix/control/logdisplay.py:638 +#: pretix/control/logdisplay.py:637 msgid "The webhook has been created." msgstr "" -#: pretix/control/logdisplay.py:639 +#: pretix/control/logdisplay.py:638 msgid "The webhook has been changed." msgstr "" -#: pretix/control/logdisplay.py:640 +#: pretix/control/logdisplay.py:639 msgid "The webhook call retry jobs have been manually expedited." msgstr "" -#: pretix/control/logdisplay.py:641 +#: pretix/control/logdisplay.py:640 msgid "The webhook call retry jobs have been dropped." msgstr "" -#: pretix/control/logdisplay.py:642 +#: pretix/control/logdisplay.py:641 msgid "The SSO provider has been created." msgstr "" -#: pretix/control/logdisplay.py:643 +#: pretix/control/logdisplay.py:642 msgid "The SSO provider has been changed." msgstr "" -#: pretix/control/logdisplay.py:644 +#: pretix/control/logdisplay.py:643 msgid "The SSO provider has been deleted." msgstr "" -#: pretix/control/logdisplay.py:645 +#: pretix/control/logdisplay.py:644 msgid "The SSO client has been created." msgstr "" -#: pretix/control/logdisplay.py:646 +#: pretix/control/logdisplay.py:645 msgid "The SSO client has been changed." msgstr "" -#: pretix/control/logdisplay.py:647 +#: pretix/control/logdisplay.py:646 msgid "The SSO client has been deleted." msgstr "" -#: pretix/control/logdisplay.py:648 pretix/control/views/organizer.py:2341 +#: pretix/control/logdisplay.py:647 pretix/control/views/organizer.py:2341 msgid "The membership type has been created." msgstr "" -#: pretix/control/logdisplay.py:649 +#: pretix/control/logdisplay.py:648 msgid "The membership type has been changed." msgstr "" -#: pretix/control/logdisplay.py:650 +#: pretix/control/logdisplay.py:649 msgid "The membership type has been deleted." msgstr "" -#: pretix/control/logdisplay.py:651 pretix/control/views/organizer.py:3179 +#: pretix/control/logdisplay.py:650 pretix/control/views/organizer.py:3179 msgid "The sales channel has been created." msgstr "" -#: pretix/control/logdisplay.py:652 +#: pretix/control/logdisplay.py:651 msgid "The sales channel has been changed." msgstr "" -#: pretix/control/logdisplay.py:653 +#: pretix/control/logdisplay.py:652 msgid "The sales channel has been deleted." msgstr "" -#: pretix/control/logdisplay.py:654 +#: pretix/control/logdisplay.py:653 msgid "The account has been created." msgstr "" -#: pretix/control/logdisplay.py:655 +#: pretix/control/logdisplay.py:654 msgid "The account has been changed." msgstr "" -#: pretix/control/logdisplay.py:656 +#: pretix/control/logdisplay.py:655 msgid "A membership for this account has been added." msgstr "" -#: pretix/control/logdisplay.py:657 +#: pretix/control/logdisplay.py:656 msgid "A membership of this account has been changed." msgstr "" -#: pretix/control/logdisplay.py:658 +#: pretix/control/logdisplay.py:657 msgid "A membership of this account has been deleted." msgstr "" -#: pretix/control/logdisplay.py:659 +#: pretix/control/logdisplay.py:658 msgid "The account has been disabled and anonymized." msgstr "" -#: pretix/control/logdisplay.py:660 +#: pretix/control/logdisplay.py:659 msgid "A new password has been requested." msgstr "" -#: pretix/control/logdisplay.py:661 +#: pretix/control/logdisplay.py:660 msgid "A new password has been set." msgstr "" -#: pretix/control/logdisplay.py:662 +#: pretix/control/logdisplay.py:661 msgid "The reusable medium has been created." msgstr "" -#: pretix/control/logdisplay.py:663 +#: pretix/control/logdisplay.py:662 msgid "The reusable medium has been created automatically." msgstr "" -#: pretix/control/logdisplay.py:664 +#: pretix/control/logdisplay.py:663 msgid "The reusable medium has been changed." msgstr "" -#: pretix/control/logdisplay.py:665 +#: pretix/control/logdisplay.py:664 msgid "The medium has been connected to a new ticket." msgstr "" -#: pretix/control/logdisplay.py:666 +#: pretix/control/logdisplay.py:665 msgid "The medium has been connected to a new gift card." msgstr "" -#: pretix/control/logdisplay.py:668 +#: pretix/control/logdisplay.py:667 msgid "The event's internal comment has been updated." msgstr "" -#: pretix/control/logdisplay.py:669 +#: pretix/control/logdisplay.py:668 msgid "The event has been canceled." msgstr "" -#: pretix/control/logdisplay.py:670 +#: pretix/control/logdisplay.py:669 msgid "An event has been deleted." msgstr "" -#: pretix/control/logdisplay.py:671 +#: pretix/control/logdisplay.py:670 msgid "A removal process for personal data has been started." msgstr "" -#: pretix/control/logdisplay.py:672 +#: pretix/control/logdisplay.py:671 msgid "A removal process for personal data has been completed." msgstr "" -#: pretix/control/logdisplay.py:678 +#: pretix/control/logdisplay.py:677 msgid "The user has been created." msgstr "" -#: pretix/control/logdisplay.py:679 +#: pretix/control/logdisplay.py:678 #, python-brace-format msgid "" "A first login using {agent_type} on {os_type} from {country} has been " "detected." msgstr "" -#: pretix/control/logdisplay.py:681 pretix/control/views/user.py:490 +#: pretix/control/logdisplay.py:680 pretix/control/views/user.py:490 #: pretix/control/views/user.py:550 pretix/control/views/user.py:609 msgid "Two-factor authentication has been enabled." msgstr "" -#: pretix/control/logdisplay.py:682 pretix/control/views/user.py:393 +#: pretix/control/logdisplay.py:681 pretix/control/views/user.py:393 #: pretix/control/views/user.py:625 msgid "Two-factor authentication has been disabled." msgstr "" -#: pretix/control/logdisplay.py:683 pretix/control/views/user.py:642 +#: pretix/control/logdisplay.py:682 pretix/control/views/user.py:642 msgid "Your two-factor emergency codes have been regenerated." msgstr "" -#: pretix/control/logdisplay.py:684 +#: pretix/control/logdisplay.py:683 msgid "A two-factor emergency code has been generated." msgstr "" -#: pretix/control/logdisplay.py:685 +#: pretix/control/logdisplay.py:684 #, python-brace-format msgid "" "A new two-factor authentication device \"{name}\" has been added to your " "account." msgstr "" -#: pretix/control/logdisplay.py:687 +#: pretix/control/logdisplay.py:686 #, python-brace-format msgid "" "The two-factor authentication device \"{name}\" has been removed from your " "account." msgstr "" -#: pretix/control/logdisplay.py:689 +#: pretix/control/logdisplay.py:688 msgid "Notifications have been enabled." msgstr "" -#: pretix/control/logdisplay.py:690 +#: pretix/control/logdisplay.py:689 msgid "Notifications have been disabled." msgstr "" -#: pretix/control/logdisplay.py:691 +#: pretix/control/logdisplay.py:690 msgid "Your notification settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:692 +#: pretix/control/logdisplay.py:691 msgid "This user has been anonymized." msgstr "" -#: pretix/control/logdisplay.py:695 +#: pretix/control/logdisplay.py:694 msgid "Password reset mail sent." msgstr "" -#: pretix/control/logdisplay.py:696 +#: pretix/control/logdisplay.py:695 msgid "The password has been reset." msgstr "" -#: pretix/control/logdisplay.py:697 +#: pretix/control/logdisplay.py:696 msgid "" "A repeated password reset has been denied, as the last request was less than " "24 hours ago." msgstr "" -#: pretix/control/logdisplay.py:699 +#: pretix/control/logdisplay.py:698 #, python-brace-format msgid "The organizer \"{name}\" has been deleted." msgstr "" -#: pretix/control/logdisplay.py:700 pretix/control/logdisplay.py:701 +#: pretix/control/logdisplay.py:699 pretix/control/logdisplay.py:700 msgid "A voucher has been sent to a person on the waiting list." msgstr "" -#: pretix/control/logdisplay.py:702 +#: pretix/control/logdisplay.py:701 msgid "An entry has been removed from the waiting list." msgstr "" -#: pretix/control/logdisplay.py:703 +#: pretix/control/logdisplay.py:702 msgid "An entry has been transferred to another waiting list." msgstr "" -#: pretix/control/logdisplay.py:704 +#: pretix/control/logdisplay.py:703 msgid "An entry has been changed on the waiting list." msgstr "" -#: pretix/control/logdisplay.py:705 +#: pretix/control/logdisplay.py:704 msgid "An entry has been added to the waiting list." msgstr "" -#: pretix/control/logdisplay.py:706 +#: pretix/control/logdisplay.py:705 msgid "The team has been created." msgstr "" -#: pretix/control/logdisplay.py:707 +#: pretix/control/logdisplay.py:706 msgid "The team settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:708 +#: pretix/control/logdisplay.py:707 msgid "The team has been deleted." msgstr "" -#: pretix/control/logdisplay.py:709 pretix/control/views/organizer.py:2007 +#: pretix/control/logdisplay.py:708 pretix/control/views/organizer.py:2007 msgid "The gate has been created." msgstr "" -#: pretix/control/logdisplay.py:710 +#: pretix/control/logdisplay.py:709 msgid "The gate has been changed." msgstr "" -#: pretix/control/logdisplay.py:711 +#: pretix/control/logdisplay.py:710 msgid "The gate has been deleted." msgstr "" -#: pretix/control/logdisplay.py:712 +#: pretix/control/logdisplay.py:711 msgctxt "subevent" msgid "The event date has been deleted." msgstr "" -#: pretix/control/logdisplay.py:713 +#: pretix/control/logdisplay.py:712 msgctxt "subevent" msgid "The event date has been canceled." msgstr "" -#: pretix/control/logdisplay.py:714 +#: pretix/control/logdisplay.py:713 msgctxt "subevent" msgid "The event date has been changed." msgstr "" -#: pretix/control/logdisplay.py:715 +#: pretix/control/logdisplay.py:714 msgctxt "subevent" msgid "The event date has been created." msgstr "" -#: pretix/control/logdisplay.py:716 +#: pretix/control/logdisplay.py:715 msgctxt "subevent" msgid "A quota has been added to the event date." msgstr "" -#: pretix/control/logdisplay.py:717 +#: pretix/control/logdisplay.py:716 msgctxt "subevent" msgid "A quota has been changed on the event date." msgstr "" -#: pretix/control/logdisplay.py:718 +#: pretix/control/logdisplay.py:717 msgctxt "subevent" msgid "A quota has been removed from the event date." msgstr "" -#: pretix/control/logdisplay.py:719 +#: pretix/control/logdisplay.py:718 msgid "The device has been created." msgstr "" -#: pretix/control/logdisplay.py:720 +#: pretix/control/logdisplay.py:719 msgid "The device has been changed." msgstr "" -#: pretix/control/logdisplay.py:721 +#: pretix/control/logdisplay.py:720 msgid "Access of the device has been revoked." msgstr "" -#: pretix/control/logdisplay.py:722 +#: pretix/control/logdisplay.py:721 msgid "The device has been initialized." msgstr "" -#: pretix/control/logdisplay.py:723 +#: pretix/control/logdisplay.py:722 msgid "The access token of the device has been regenerated." msgstr "" -#: pretix/control/logdisplay.py:724 +#: pretix/control/logdisplay.py:723 msgid "The device has notified the server of an hardware or software update." msgstr "" -#: pretix/control/logdisplay.py:725 +#: pretix/control/logdisplay.py:724 msgid "The gift card has been created." msgstr "" -#: pretix/control/logdisplay.py:726 pretix/control/views/organizer.py:1651 +#: pretix/control/logdisplay.py:725 pretix/control/views/organizer.py:1651 msgid "The gift card has been changed." msgstr "" -#: pretix/control/logdisplay.py:727 +#: pretix/control/logdisplay.py:726 msgid "A manual transaction has been performed." msgstr "" -#: pretix/control/logdisplay.py:728 +#: pretix/control/logdisplay.py:727 #, python-brace-format msgid "The token \"{name}\" has been created." msgstr "" -#: pretix/control/logdisplay.py:729 +#: pretix/control/logdisplay.py:728 #, python-brace-format msgid "The token \"{name}\" has been revoked." msgstr "" -#: pretix/control/logdisplay.py:736 +#: pretix/control/logdisplay.py:735 msgid "A meta property has been added to this event." msgstr "" -#: pretix/control/logdisplay.py:737 +#: pretix/control/logdisplay.py:736 msgid "A meta property has been removed from this event." msgstr "" -#: pretix/control/logdisplay.py:738 +#: pretix/control/logdisplay.py:737 msgid "A meta property has been changed on this event." msgstr "" -#: pretix/control/logdisplay.py:739 +#: pretix/control/logdisplay.py:738 msgid "The event settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:740 +#: pretix/control/logdisplay.py:739 msgid "The ticket download settings have been changed." msgstr "" -#: pretix/control/logdisplay.py:743 +#: pretix/control/logdisplay.py:742 msgid "The shop has been taken live." msgstr "" -#: pretix/control/logdisplay.py:744 +#: pretix/control/logdisplay.py:743 msgid "The shop has been taken offline." msgstr "" -#: pretix/control/logdisplay.py:745 +#: pretix/control/logdisplay.py:744 msgid "The shop has been taken into test mode." msgstr "" -#: pretix/control/logdisplay.py:746 +#: pretix/control/logdisplay.py:745 msgid "The test mode has been disabled." msgstr "" -#: pretix/control/logdisplay.py:747 +#: pretix/control/logdisplay.py:746 msgid "The event has been created." msgstr "" -#: pretix/control/logdisplay.py:748 +#: pretix/control/logdisplay.py:747 msgid "The event details have been changed." msgstr "" -#: pretix/control/logdisplay.py:750 +#: pretix/control/logdisplay.py:749 msgid "An answer option has been added to the question." msgstr "" -#: pretix/control/logdisplay.py:751 +#: pretix/control/logdisplay.py:750 msgid "An answer option has been removed from the question." msgstr "" -#: pretix/control/logdisplay.py:752 +#: pretix/control/logdisplay.py:751 msgid "An answer option has been changed." msgstr "" -#: pretix/control/logdisplay.py:753 +#: pretix/control/logdisplay.py:752 msgid "A user has been added to the event team." msgstr "" -#: pretix/control/logdisplay.py:754 +#: pretix/control/logdisplay.py:753 msgid "A user has been invited to the event team." msgstr "" -#: pretix/control/logdisplay.py:755 +#: pretix/control/logdisplay.py:754 msgid "A user's permissions have been changed." msgstr "" -#: pretix/control/logdisplay.py:756 +#: pretix/control/logdisplay.py:755 msgid "A user has been removed from the event team." msgstr "" -#: pretix/control/logdisplay.py:763 +#: pretix/control/logdisplay.py:762 msgid "The check-in list has been added." msgstr "" -#: pretix/control/logdisplay.py:764 pretix/control/logdisplay.py:765 +#: pretix/control/logdisplay.py:763 pretix/control/logdisplay.py:764 msgid "The check-in list has been deleted." msgstr "" -#: pretix/control/logdisplay.py:766 +#: pretix/control/logdisplay.py:765 msgid "The check-in list has been changed." msgstr "" -#: pretix/control/logdisplay.py:769 +#: pretix/control/logdisplay.py:768 #, python-brace-format msgid "Check-in list {val}" msgstr "" -#: pretix/control/logdisplay.py:776 +#: pretix/control/logdisplay.py:775 msgid "The plugin has been enabled." msgstr "" -#: pretix/control/logdisplay.py:777 +#: pretix/control/logdisplay.py:776 pretix/control/views/event.py:461 msgid "The plugin has been disabled." msgstr "" -#: pretix/control/logdisplay.py:780 +#: pretix/control/logdisplay.py:779 #, python-brace-format msgid "Plugin {val}" msgstr "" -#: pretix/control/logdisplay.py:796 +#: pretix/control/logdisplay.py:795 msgid "The product has been created." msgstr "" -#: pretix/control/logdisplay.py:797 +#: pretix/control/logdisplay.py:796 msgid "The product has been changed." msgstr "" -#: pretix/control/logdisplay.py:798 +#: pretix/control/logdisplay.py:797 msgid "The product has been reordered." msgstr "" -#: pretix/control/logdisplay.py:799 +#: pretix/control/logdisplay.py:798 msgid "The product has been deleted." msgstr "" -#: pretix/control/logdisplay.py:800 +#: pretix/control/logdisplay.py:799 msgid "An add-on has been added to this product." msgstr "" -#: pretix/control/logdisplay.py:801 +#: pretix/control/logdisplay.py:800 msgid "An add-on has been removed from this product." msgstr "" -#: pretix/control/logdisplay.py:802 +#: pretix/control/logdisplay.py:801 msgid "An add-on has been changed on this product." msgstr "" -#: pretix/control/logdisplay.py:803 +#: pretix/control/logdisplay.py:802 msgid "A bundled item has been added to this product." msgstr "" -#: pretix/control/logdisplay.py:804 +#: pretix/control/logdisplay.py:803 msgid "A bundled item has been removed from this product." msgstr "" -#: pretix/control/logdisplay.py:805 +#: pretix/control/logdisplay.py:804 msgid "A bundled item has been changed on this product." msgstr "" -#: pretix/control/logdisplay.py:812 +#: pretix/control/logdisplay.py:811 #, python-brace-format msgid "The variation \"{value}\" has been created." msgstr "" -#: pretix/control/logdisplay.py:813 +#: pretix/control/logdisplay.py:812 #, python-brace-format msgid "The variation \"{value}\" has been deleted." msgstr "" -#: pretix/control/logdisplay.py:814 +#: pretix/control/logdisplay.py:813 #, python-brace-format msgid "The variation \"{value}\" has been changed." msgstr "" -#: pretix/control/logdisplay.py:831 +#: pretix/control/logdisplay.py:830 #, python-brace-format msgid "Payment {local_id} has been confirmed." msgstr "" -#: pretix/control/logdisplay.py:832 +#: pretix/control/logdisplay.py:831 #, python-brace-format msgid "Payment {local_id} has been canceled." msgstr "" -#: pretix/control/logdisplay.py:833 +#: pretix/control/logdisplay.py:832 #, python-brace-format msgid "Canceling payment {local_id} has failed." msgstr "" -#: pretix/control/logdisplay.py:834 +#: pretix/control/logdisplay.py:833 #, python-brace-format msgid "Payment {local_id} has been started." msgstr "" -#: pretix/control/logdisplay.py:835 +#: pretix/control/logdisplay.py:834 #, python-brace-format msgid "Payment {local_id} has failed." msgstr "" -#: pretix/control/logdisplay.py:836 +#: pretix/control/logdisplay.py:835 #, python-brace-format msgid "The order could not be marked as paid: {message}" msgstr "" -#: pretix/control/logdisplay.py:837 +#: pretix/control/logdisplay.py:836 msgid "The order has been overpaid." msgstr "" -#: pretix/control/logdisplay.py:838 +#: pretix/control/logdisplay.py:837 #, python-brace-format msgid "Refund {local_id} has been created." msgstr "" -#: pretix/control/logdisplay.py:839 +#: pretix/control/logdisplay.py:838 #, python-brace-format msgid "Refund {local_id} has been created by an external entity." msgstr "" -#: pretix/control/logdisplay.py:840 +#: pretix/control/logdisplay.py:839 msgid "The customer requested you to issue a refund." msgstr "" -#: pretix/control/logdisplay.py:841 +#: pretix/control/logdisplay.py:840 #, python-brace-format msgid "Refund {local_id} has been completed." msgstr "" -#: pretix/control/logdisplay.py:842 +#: pretix/control/logdisplay.py:841 #, python-brace-format msgid "Refund {local_id} has been canceled." msgstr "" -#: pretix/control/logdisplay.py:843 +#: pretix/control/logdisplay.py:842 #, python-brace-format msgid "Refund {local_id} has failed." msgstr "" -#: pretix/control/logdisplay.py:850 +#: pretix/control/logdisplay.py:849 msgid "The quota has been added." msgstr "" -#: pretix/control/logdisplay.py:851 +#: pretix/control/logdisplay.py:850 msgid "The quota has been deleted." msgstr "" -#: pretix/control/logdisplay.py:852 +#: pretix/control/logdisplay.py:851 msgid "The quota has been changed." msgstr "" -#: pretix/control/logdisplay.py:853 +#: pretix/control/logdisplay.py:852 msgid "The quota has closed." msgstr "" -#: pretix/control/logdisplay.py:854 pretix/control/views/item.py:1069 +#: pretix/control/logdisplay.py:853 pretix/control/views/item.py:1069 msgid "The quota has been re-opened." msgstr "" -#: pretix/control/logdisplay.py:861 +#: pretix/control/logdisplay.py:860 msgid "The question has been added." msgstr "" -#: pretix/control/logdisplay.py:862 +#: pretix/control/logdisplay.py:861 msgid "The question has been deleted." msgstr "" -#: pretix/control/logdisplay.py:863 +#: pretix/control/logdisplay.py:862 msgid "The question has been changed." msgstr "" -#: pretix/control/logdisplay.py:864 +#: pretix/control/logdisplay.py:863 msgid "The question has been reordered." msgstr "" -#: pretix/control/logdisplay.py:871 +#: pretix/control/logdisplay.py:870 msgid "The discount has been added." msgstr "" -#: pretix/control/logdisplay.py:872 +#: pretix/control/logdisplay.py:871 msgid "The discount has been deleted." msgstr "" -#: pretix/control/logdisplay.py:873 +#: pretix/control/logdisplay.py:872 msgid "The discount has been changed." msgstr "" -#: pretix/control/logdisplay.py:897 +#: pretix/control/logdisplay.py:896 #, python-brace-format msgid "" "Position #{posid} has been checked in manually at {datetime} on list \"{list}" "\"." msgstr "" -#: pretix/control/logdisplay.py:902 +#: pretix/control/logdisplay.py:901 #, python-brace-format msgid "" "Position #{posid} has been checked in again at {datetime} on list \"{list}\"." @@ -15069,17 +15094,23 @@ msgstr "" #: pretix/control/navigation.py:57 #: pretix/control/templates/pretixcontrol/event/quick_setup.html:151 -#: pretix/control/templates/pretixcontrol/order/index.html:844 +#: pretix/control/templates/pretixcontrol/order/index.html:841 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:37 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:42 -#: pretix/presale/templates/pretixpresale/event/order.html:85 +#: pretix/plugins/banktransfer/apps.py:42 +#: pretix/plugins/manualpayment/apps.py:39 pretix/plugins/paypal2/apps.py:45 +#: pretix/plugins/stripe/apps.py:44 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:43 +#: pretix/presale/templates/pretixpresale/event/order.html:86 msgid "Payment" msgstr "" -#: pretix/control/navigation.py:73 pretix/control/views/event.py:1473 -#: pretix/control/views/event.py:1475 pretix/control/views/event.py:1507 -#: pretix/control/views/event.py:1512 pretix/control/views/subevents.py:293 +#: pretix/control/navigation.py:73 +#: pretix/control/templates/pretixcontrol/order/mail_history.html:56 +#: pretix/control/views/event.py:1516 pretix/control/views/event.py:1518 +#: pretix/control/views/event.py:1550 pretix/control/views/event.py:1555 +#: pretix/control/views/subevents.py:293 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:60 +#: pretix/plugins/ticketoutputpdf/apps.py:55 #: pretix/plugins/ticketoutputpdf/exporters.py:68 #: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:31 #: pretix/presale/templates/pretixpresale/organizers/index.html:90 @@ -15110,7 +15141,10 @@ msgstr "" #: pretix/control/navigation.py:126 pretix/control/navigation.py:435 #: pretix/control/navigation.py:480 #: pretix/control/templates/pretixcontrol/event/payment.html:47 +#: pretix/control/templates/pretixcontrol/event/plugins.html:106 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:12 +#: pretix/plugins/returnurl/apps.py:40 +#: pretix/plugins/ticketoutputpdf/apps.py:55 msgid "Settings" msgstr "" @@ -15127,12 +15161,12 @@ msgid "Overview" msgstr "" #: pretix/control/navigation.py:221 -#: pretix/control/templates/pretixcontrol/order/index.html:831 +#: pretix/control/templates/pretixcontrol/order/index.html:828 #: pretix/control/templates/pretixcontrol/orders/refunds.html:7 #: pretix/control/templates/pretixcontrol/orders/refunds.html:9 #: pretix/plugins/reports/accountingreport.py:497 #: pretix/plugins/reports/accountingreport.py:684 -#: pretix/presale/templates/pretixpresale/event/order.html:136 +#: pretix/presale/templates/pretixpresale/event/order.html:137 msgid "Refunds" msgstr "" @@ -15160,12 +15194,13 @@ msgid "Check-in history" msgstr "" #: pretix/control/navigation.py:356 -#: pretix/control/templates/pretixcontrol/orders/search.html:19 +#: pretix/control/templates/pretixcontrol/event/plugins.html:20 +#: pretix/control/templates/pretixcontrol/orders/search.html:20 msgid "Search" msgstr "" #: pretix/control/navigation.py:368 -#: pretix/control/templates/pretixcontrol/order/index.html:737 +#: pretix/control/templates/pretixcontrol/order/index.html:734 #: pretix/plugins/reports/accountingreport.py:496 #: pretix/plugins/reports/accountingreport.py:677 #: pretix/plugins/reports/accountingreport.py:871 @@ -15355,11 +15390,11 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:36 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:11 #: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:45 -#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:94 +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:90 #: pretix/presale/templates/pretixpresale/event/checkout_customer.html:134 -#: pretix/presale/templates/pretixpresale/event/checkout_membership.html:89 +#: pretix/presale/templates/pretixpresale/event/checkout_membership.html:83 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:129 -#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:191 +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:185 #: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:53 #: pretix/presale/templates/pretixpresale/event/order_change.html:27 #: pretix/presale/templates/pretixpresale/event/order_pay.html:28 @@ -15761,7 +15796,7 @@ msgstr "" #, python-format msgid "" "Are you sure you want to permanently delete the check-ins of one " -"ticket." +"ticket?" msgid_plural "" "Are you sure you want to permanently delete the check-ins of " "%(count)s tickets?" @@ -15849,7 +15884,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/items/discount_delete.html:36 #: pretix/control/templates/pretixcontrol/items/index.html:157 #: pretix/control/templates/pretixcontrol/items/quota_delete.html:40 -#: pretix/control/templates/pretixcontrol/order/index.html:38 +#: pretix/control/templates/pretixcontrol/order/index.html:39 #: pretix/control/templates/pretixcontrol/orders/export.html:77 #: pretix/control/templates/pretixcontrol/orders/export_delete.html:15 #: pretix/control/templates/pretixcontrol/organizers/channel_delete.html:28 @@ -15873,7 +15908,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_carts.html:16 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:15 #: pretix/control/templates/pretixcontrol/waitinglist/delete_bulk.html:36 -#: pretix/control/views/orders.py:361 +#: pretix/control/views/orders.py:382 #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/delete.html:15 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:16 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_delete.html:15 @@ -15896,8 +15931,8 @@ msgstr "" #: pretix/control/templates/pretixcontrol/events/index.html:53 #: pretix/control/templates/pretixcontrol/items/question.html:19 #: pretix/control/templates/pretixcontrol/items/question.html:56 -#: pretix/control/templates/pretixcontrol/orders/index.html:57 -#: pretix/control/templates/pretixcontrol/orders/index.html:94 +#: pretix/control/templates/pretixcontrol/orders/index.html:56 +#: pretix/control/templates/pretixcontrol/orders/index.html:93 #: pretix/control/templates/pretixcontrol/orders/overview.html:25 #: pretix/control/templates/pretixcontrol/orders/overview.html:59 #: pretix/control/templates/pretixcontrol/orders/refunds.html:12 @@ -15949,18 +15984,18 @@ msgstr "" #: pretix/control/templates/pretixcontrol/checkin/checkins.html:65 #: pretix/control/templates/pretixcontrol/checkin/simulator.html:49 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:14 -#: pretix/plugins/checkinlists/exporters.py:764 +#: pretix/plugins/checkinlists/exporters.py:766 msgid "Result" msgstr "" #: pretix/control/templates/pretixcontrol/checkin/checkins.html:78 -#: pretix/control/templates/pretixcontrol/order/index.html:391 +#: pretix/control/templates/pretixcontrol/order/index.html:392 #, python-format msgid "Automatically marked not present: %(date)s" msgstr "" #: pretix/control/templates/pretixcontrol/checkin/checkins.html:82 -#: pretix/control/templates/pretixcontrol/order/index.html:396 +#: pretix/control/templates/pretixcontrol/order/index.html:397 #, python-format msgid "Additional entry scan: %(date)s" msgstr "" @@ -15971,7 +16006,7 @@ msgid "Offline scan. Upload time: %(date)s" msgstr "" #: pretix/control/templates/pretixcontrol/checkin/checkins.html:88 -#: pretix/control/templates/pretixcontrol/order/index.html:398 +#: pretix/control/templates/pretixcontrol/order/index.html:399 #, python-format msgid "Automatically checked in: %(date)s" msgstr "" @@ -16011,7 +16046,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/checkin/index.html:22 #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:21 -#: pretix/control/templates/pretixcontrol/checkin/lists.html:161 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:160 #: pretix/control/templates/pretixcontrol/checkin/simulator.html:8 #: pretix/control/templates/pretixcontrol/checkin/simulator.html:20 msgid "Check-in simulator" @@ -16032,7 +16067,7 @@ msgid "No attendee record was found." msgstr "" #: pretix/control/templates/pretixcontrol/checkin/index.html:91 -#: pretix/control/templates/pretixcontrol/orders/index.html:128 +#: pretix/control/templates/pretixcontrol/orders/index.html:127 #: pretix/control/templates/pretixcontrol/organizers/devices.html:68 #: pretix/control/templates/pretixcontrol/subevents/index.html:89 #: pretix/control/templates/pretixcontrol/vouchers/index.html:108 @@ -16046,7 +16081,7 @@ msgid "Timestamp" msgstr "" #: pretix/control/templates/pretixcontrol/checkin/index.html:125 -#: pretix/control/templates/pretixcontrol/orders/index.html:166 +#: pretix/control/templates/pretixcontrol/orders/index.html:165 #: pretix/control/templates/pretixcontrol/organizers/devices.html:99 #: pretix/control/templates/pretixcontrol/subevents/index.html:117 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:181 @@ -16154,7 +16189,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/webhooks.html:72 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:94 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:117 -#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:84 +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:85 msgid "Edit" msgstr "" @@ -16218,7 +16253,7 @@ msgstr "" msgid "Connected devices" msgstr "" -#: pretix/control/templates/pretixcontrol/checkin/lists.html:157 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:156 #: pretix/control/templates/pretixcontrol/items/categories.html:53 #: pretix/control/templates/pretixcontrol/items/discounts.html:149 #: pretix/control/templates/pretixcontrol/items/index.html:156 @@ -16804,7 +16839,7 @@ msgid "Show affected orders" msgstr "" #: pretix/control/templates/pretixcontrol/event/index.html:142 -#: pretix/control/templates/pretixcontrol/order/index.html:1010 +#: pretix/control/templates/pretixcontrol/order/index.html:1007 msgid "Update comment" msgstr "" @@ -16964,9 +16999,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/event/logs.html:86 #: pretix/control/templates/pretixcontrol/event/logs_embed.html:47 #: pretix/control/templates/pretixcontrol/includes/logs.html:42 -#: pretix/control/templates/pretixcontrol/order/index.html:799 -#: pretix/control/templates/pretixcontrol/order/index.html:811 -#: pretix/control/templates/pretixcontrol/order/index.html:916 +#: pretix/control/templates/pretixcontrol/order/index.html:796 +#: pretix/control/templates/pretixcontrol/order/index.html:808 +#: pretix/control/templates/pretixcontrol/order/index.html:913 #: pretix/control/templates/pretixcontrol/organizers/device_logs.html:42 #: pretix/control/templates/pretixcontrol/organizers/logs.html:72 #: pretix/control/templates/pretixcontrol/search/payments.html:147 @@ -17034,8 +17069,8 @@ msgid "Free order" msgstr "" #: pretix/control/templates/pretixcontrol/event/mail.html:99 -#: pretix/control/templates/pretixcontrol/order/index.html:248 -#: pretix/control/templates/pretixcontrol/order/index.html:538 +#: pretix/control/templates/pretixcontrol/order/index.html:249 +#: pretix/control/templates/pretixcontrol/order/index.html:535 msgid "Resend link" msgstr "" @@ -17084,12 +17119,8 @@ msgstr "" msgid "Disabled" msgstr "" -#: pretix/control/templates/pretixcontrol/event/payment.html:55 -#, python-format -msgid "" -"There are no payment providers available. Please go to the plugin settings and activate one or more " -"payment plugins." +#: pretix/control/templates/pretixcontrol/event/payment.html:57 +msgid "Enable additional payment plugins" msgstr "" #: pretix/control/templates/pretixcontrol/event/payment.html:66 @@ -17142,12 +17173,11 @@ msgid "" "third-party services, or apply other forms of customizations." msgstr "" -#: pretix/control/templates/pretixcontrol/event/plugins.html:17 +#: pretix/control/templates/pretixcontrol/event/plugins.html:15 #: pretix/control/views/checkin.py:423 pretix/control/views/discounts.py:113 -#: pretix/control/views/event.py:232 pretix/control/views/event.py:419 -#: pretix/control/views/event.py:502 pretix/control/views/event.py:541 -#: pretix/control/views/event.py:688 pretix/control/views/event.py:917 -#: pretix/control/views/event.py:1288 +#: pretix/control/views/event.py:236 pretix/control/views/event.py:545 +#: pretix/control/views/event.py:584 pretix/control/views/event.py:731 +#: pretix/control/views/event.py:960 pretix/control/views/event.py:1331 #: pretix/control/views/global_settings.py:65 #: pretix/control/views/global_settings.py:88 pretix/control/views/item.py:257 #: pretix/control/views/item.py:783 pretix/control/views/item.py:1109 @@ -17180,23 +17210,36 @@ msgstr "" msgid "Your changes have been saved." msgstr "" -#: pretix/control/templates/pretixcontrol/event/plugins.html:36 +#: pretix/control/templates/pretixcontrol/event/plugins.html:34 +msgid "Search results" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:56 msgid "Top recommendation" msgstr "" -#: pretix/control/templates/pretixcontrol/event/plugins.html:40 +#: pretix/control/templates/pretixcontrol/event/plugins.html:60 msgid "Experimental feature" msgstr "" -#: pretix/control/templates/pretixcontrol/event/plugins.html:63 +#: pretix/control/templates/pretixcontrol/event/plugins.html:83 msgid "Incompatible" msgstr "" -#: pretix/control/templates/pretixcontrol/event/plugins.html:67 +#: pretix/control/templates/pretixcontrol/event/plugins.html:87 msgid "Not available" msgstr "" -#: pretix/control/templates/pretixcontrol/event/plugins.html:72 +#: pretix/control/templates/pretixcontrol/event/plugins.html:93 +#: pretix/control/templates/pretixcontrol/event/plugins.html:105 +msgid "Open plugin settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:94 +msgid "Go to" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:116 #: pretix/control/templates/pretixcontrol/oauth/app_delete.html:15 #: pretix/control/templates/pretixcontrol/user/2fa_disable.html:20 #: pretix/control/templates/pretixcontrol/user/2fa_main.html:79 @@ -17206,7 +17249,7 @@ msgstr "" msgid "Disable" msgstr "" -#: pretix/control/templates/pretixcontrol/event/plugins.html:77 +#: pretix/control/templates/pretixcontrol/event/plugins.html:121 #: pretix/control/templates/pretixcontrol/user/2fa_enable.html:21 #: pretix/control/templates/pretixcontrol/user/2fa_main.html:99 #: pretix/control/templates/pretixcontrol/user/notifications.html:23 @@ -17267,7 +17310,7 @@ msgid "" msgstr "" #: pretix/control/templates/pretixcontrol/event/quick_setup.html:132 -#: pretix/control/views/event.py:357 +#: pretix/control/views/event.py:378 msgid "Features" msgstr "" @@ -17412,8 +17455,8 @@ msgid "Calendar and list views" msgstr "" #: pretix/control/templates/pretixcontrol/event/settings.html:268 -#: pretix/control/templates/pretixcontrol/order/index.html:175 -#: pretix/presale/templates/pretixpresale/event/order.html:21 +#: pretix/control/templates/pretixcontrol/order/index.html:176 +#: pretix/presale/templates/pretixpresale/event/order.html:22 msgid "Order details" msgstr "" @@ -18601,7 +18644,7 @@ msgid "Sold out" msgstr "" #: pretix/control/templates/pretixcontrol/items/index.html:7 -#: pretix/control/templates/pretixcontrol/order/index.html:18 +#: pretix/control/templates/pretixcontrol/order/index.html:19 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:7 msgid "taxes" msgstr "" @@ -18648,19 +18691,19 @@ msgid "Can only be bought using a voucher" msgstr "" #: pretix/control/templates/pretixcontrol/items/index.html:140 -#: pretix/control/templates/pretixcontrol/order/index.html:622 -#: pretix/control/templates/pretixcontrol/order/index.html:662 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:364 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:411 +#: pretix/control/templates/pretixcontrol/order/index.html:619 +#: pretix/control/templates/pretixcontrol/order/index.html:659 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:359 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:406 #, python-format msgid "plus %(rate)s%% %(taxname)s" msgstr "" #: pretix/control/templates/pretixcontrol/items/index.html:144 -#: pretix/control/templates/pretixcontrol/order/index.html:632 -#: pretix/control/templates/pretixcontrol/order/index.html:672 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:374 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:421 +#: pretix/control/templates/pretixcontrol/order/index.html:629 +#: pretix/control/templates/pretixcontrol/order/index.html:669 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:369 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:416 #, python-format msgid "incl. %(rate)s%% %(taxname)s" msgstr "" @@ -18681,8 +18724,8 @@ msgstr "" #: pretix/control/templates/pretixcontrol/items/question.html:26 #: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:31 #: pretix/control/templates/pretixcontrol/orders/overview.html:88 -#: pretix/plugins/checkinlists/exporters.py:500 -#: pretix/plugins/checkinlists/exporters.py:694 +#: pretix/plugins/checkinlists/exporters.py:502 +#: pretix/plugins/checkinlists/exporters.py:696 #: pretix/plugins/reports/exporters.py:386 #: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:23 msgid "Paid" @@ -19043,9 +19086,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/order/cancel.html:6 #: pretix/control/templates/pretixcontrol/order/cancel.html:10 -#: pretix/control/templates/pretixcontrol/order/index.html:67 -#: pretix/control/templates/pretixcontrol/order/index.html:165 -#: pretix/presale/templates/pretixpresale/event/order.html:478 +#: pretix/control/templates/pretixcontrol/order/index.html:68 +#: pretix/control/templates/pretixcontrol/order/index.html:166 +#: pretix/presale/templates/pretixpresale/event/order.html:479 #: pretix/presale/templates/pretixpresale/event/order_cancel.html:7 msgid "Cancel order" msgstr "" @@ -19203,15 +19246,15 @@ msgid "Validity time" msgstr "" #: pretix/control/templates/pretixcontrol/order/change.html:247 -#: pretix/control/templates/pretixcontrol/order/index.html:461 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:111 +#: pretix/control/templates/pretixcontrol/order/index.html:458 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:106 #, python-format msgid "Valid from %(datetime)s" msgstr "" #: pretix/control/templates/pretixcontrol/order/change.html:255 -#: pretix/control/templates/pretixcontrol/order/index.html:465 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:115 +#: pretix/control/templates/pretixcontrol/order/index.html:462 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:110 #, python-format msgid "Valid until %(datetime)s" msgstr "" @@ -19287,8 +19330,8 @@ msgid "Change order information" msgstr "" #: pretix/control/templates/pretixcontrol/order/change_questions.html:25 -#: pretix/control/templates/pretixcontrol/order/index.html:946 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:74 +#: pretix/control/templates/pretixcontrol/order/index.html:943 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:75 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:39 #: pretix/presale/templates/pretixpresale/event/order_modify.html:29 msgid "Invoice information" @@ -19326,78 +19369,78 @@ msgstr "" #: pretix/control/templates/pretixcontrol/order/extend.html:5 #: pretix/control/templates/pretixcontrol/order/extend.html:9 -#: pretix/control/templates/pretixcontrol/order/index.html:61 +#: pretix/control/templates/pretixcontrol/order/index.html:62 msgid "Extend payment term" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:13 -#: pretix/control/templates/pretixcontrol/order/index.html:20 +#: pretix/control/templates/pretixcontrol/order/index.html:14 +#: pretix/control/templates/pretixcontrol/order/index.html:21 #, python-format msgid "Order details: %(code)s" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:45 -#: pretix/control/templates/pretixcontrol/orders/index.html:298 -#: pretix/control/views/orders.py:289 +#: pretix/control/templates/pretixcontrol/order/index.html:46 +#: pretix/control/templates/pretixcontrol/orders/index.html:297 +#: pretix/control/views/orders.py:310 msgid "Approve" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:50 -#: pretix/control/templates/pretixcontrol/orders/index.html:305 -#: pretix/control/views/orders.py:303 +#: pretix/control/templates/pretixcontrol/order/index.html:51 +#: pretix/control/templates/pretixcontrol/orders/index.html:304 +#: pretix/control/views/orders.py:324 msgid "Deny" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:57 +#: pretix/control/templates/pretixcontrol/order/index.html:58 #: pretix/control/templates/pretixcontrol/order/pay_complete.html:37 msgid "Mark as paid" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:72 +#: pretix/control/templates/pretixcontrol/order/index.html:73 #: pretix/control/templates/pretixcontrol/order/reactivate.html:5 #: pretix/control/templates/pretixcontrol/order/reactivate.html:9 msgid "Reactivate order" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:80 +#: pretix/control/templates/pretixcontrol/order/index.html:81 msgid "View order as user" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:84 +#: pretix/control/templates/pretixcontrol/order/index.html:85 msgid "View email history" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:88 +#: pretix/control/templates/pretixcontrol/order/index.html:89 msgid "View transaction history" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:99 +#: pretix/control/templates/pretixcontrol/order/index.html:100 msgid "Expire order" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:100 +#: pretix/control/templates/pretixcontrol/order/index.html:101 msgid "" "The payment for this order is overdue, but you have configured not to expire " "orders automatically. To free quota capacity, you can mark it as expired " "manually." msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:115 -#: pretix/control/views/orders.py:351 +#: pretix/control/templates/pretixcontrol/order/index.html:116 +#: pretix/control/views/orders.py:372 msgid "Refund for overpayment" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:117 +#: pretix/control/templates/pretixcontrol/order/index.html:118 #, python-format msgid "This order is currently overpaid by %(amount)s." msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:121 +#: pretix/control/templates/pretixcontrol/order/index.html:122 #, python-format msgid "Initiate a refund of %(amount)s" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:129 +#: pretix/control/templates/pretixcontrol/order/index.html:130 #, python-format msgid "" "This order is expired even though it received payments of %(amount)s. You " @@ -19405,179 +19448,179 @@ msgid "" "payment deadline." msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:142 +#: pretix/control/templates/pretixcontrol/order/index.html:143 msgid "Cancellation request" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:146 +#: pretix/control/templates/pretixcontrol/order/index.html:147 msgid "The customer asked you to cancel the order with the following settings:" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:153 +#: pretix/control/templates/pretixcontrol/order/index.html:154 msgid "Original payment method" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:162 +#: pretix/control/templates/pretixcontrol/order/index.html:163 msgid "Delete request" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:185 +#: pretix/control/templates/pretixcontrol/order/index.html:186 msgid "Cancellation date" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:207 +#: pretix/control/templates/pretixcontrol/order/index.html:208 msgid "" "This order will not expire automatically since it is already confirmed and " "can be used." msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:210 +#: pretix/control/templates/pretixcontrol/order/index.html:211 msgid "" "This order will not expire automatically as it has an open cancellation fee." msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:229 +#: pretix/control/templates/pretixcontrol/order/index.html:230 msgid "Contact email" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:233 +#: pretix/control/templates/pretixcontrol/order/index.html:234 msgid "" "We know that this email address works because the user clicked a link we " "sent them." msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:275 +#: pretix/control/templates/pretixcontrol/order/index.html:276 msgid "" "We don't know if this invoice was emailed to the customer since it was " "created before our system tracked this information" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:280 +#: pretix/control/templates/pretixcontrol/order/index.html:281 msgid "Invoice was emailed to customer" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:285 +#: pretix/control/templates/pretixcontrol/order/index.html:286 msgid "Invoice was not yet emailed to customer" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:295 +#: pretix/control/templates/pretixcontrol/order/index.html:296 msgid "Rebuild the invoice with updated data but the same invoice number." msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:296 +#: pretix/control/templates/pretixcontrol/order/index.html:297 #: pretix/control/templates/pretixcontrol/user/2fa_regenemergency.html:20 msgid "Regenerate" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:307 +#: pretix/control/templates/pretixcontrol/order/index.html:308 msgid "" "Generate a cancellation document for this invoice and create a new invoice " "with a new invoice number." msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:310 +#: pretix/control/templates/pretixcontrol/order/index.html:311 msgid "Generate cancellation" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:312 +#: pretix/control/templates/pretixcontrol/order/index.html:313 msgid "Cancel and reissue" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:325 +#: pretix/control/templates/pretixcontrol/order/index.html:326 msgid "Email invoices" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:334 -#: pretix/control/templates/pretixcontrol/order/index.html:346 +#: pretix/control/templates/pretixcontrol/order/index.html:335 +#: pretix/control/templates/pretixcontrol/order/index.html:347 msgid "Generate invoice" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:360 +#: pretix/control/templates/pretixcontrol/order/index.html:361 msgid "Change answers" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:364 +#: pretix/control/templates/pretixcontrol/order/index.html:365 msgid "Change products" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:369 -#: pretix/presale/templates/pretixpresale/event/order.html:196 +#: pretix/control/templates/pretixcontrol/order/index.html:370 +#: pretix/presale/templates/pretixpresale/event/order.html:197 msgid "Ordered items" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:388 +#: pretix/control/templates/pretixcontrol/order/index.html:389 #, python-format msgid "Denied scan: %(date)s" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:393 +#: pretix/control/templates/pretixcontrol/order/index.html:394 #, python-format msgid "Exit scan: %(date)s" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:400 +#: pretix/control/templates/pretixcontrol/order/index.html:401 #, python-format msgid "Entry scan: %(date)s" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:422 +#: pretix/control/templates/pretixcontrol/order/index.html:423 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:54 msgid "Voucher code used:" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:424 +#: pretix/control/templates/pretixcontrol/order/index.html:425 #, python-format msgid "Used %(amount)s discount from budget" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:445 +#: pretix/control/templates/pretixcontrol/order/index.html:442 msgid "" "The price of this product was reduced because of an automatic discount or " "this product was part of the discount calculation for a different product in " "this order." msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:457 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:107 +#: pretix/control/templates/pretixcontrol/order/index.html:454 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:102 #, python-format msgid "Valid %(datetime_range)s" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:503 +#: pretix/control/templates/pretixcontrol/order/index.html:500 msgid "Ticket page" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:522 -#: pretix/control/templates/pretixcontrol/order/index.html:543 -#: pretix/control/templates/pretixcontrol/order/index.html:552 -#: pretix/control/templates/pretixcontrol/order/index.html:566 -#: pretix/control/templates/pretixcontrol/order/index.html:604 -#: pretix/control/templates/pretixcontrol/order/index.html:611 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:232 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:238 +#: pretix/control/templates/pretixcontrol/order/index.html:519 +#: pretix/control/templates/pretixcontrol/order/index.html:540 +#: pretix/control/templates/pretixcontrol/order/index.html:549 +#: pretix/control/templates/pretixcontrol/order/index.html:563 +#: pretix/control/templates/pretixcontrol/order/index.html:601 +#: pretix/control/templates/pretixcontrol/order/index.html:608 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:227 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:233 msgid "not answered" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:576 +#: pretix/control/templates/pretixcontrol/order/index.html:573 msgid "This question will be asked during check-in." msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:588 +#: pretix/control/templates/pretixcontrol/order/index.html:585 msgid "" "This file has been uploaded by a user and could contain viruses or other " "malicious content." msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:589 +#: pretix/control/templates/pretixcontrol/order/index.html:586 msgid "UNSAFE" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:693 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:449 +#: pretix/control/templates/pretixcontrol/order/index.html:690 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:444 msgid "Taxes" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:702 +#: pretix/control/templates/pretixcontrol/order/index.html:699 #: pretix/control/templates/pretixcontrol/orders/overview.html:89 #: pretix/control/templates/pretixcontrol/orders/overview.html:177 #: pretix/plugins/reports/accountingreport.py:498 @@ -19585,97 +19628,97 @@ msgstr "" #: pretix/plugins/reports/exporters.py:435 #: pretix/plugins/reports/exporters.py:627 #: pretix/plugins/reports/exporters.py:957 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:461 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:456 msgid "Total" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:712 -#: pretix/presale/templates/pretixpresale/event/order.html:209 +#: pretix/control/templates/pretixcontrol/order/index.html:709 +#: pretix/presale/templates/pretixpresale/event/order.html:210 msgid "Successful payments" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:721 -#: pretix/presale/templates/pretixpresale/event/order.html:218 +#: pretix/control/templates/pretixcontrol/order/index.html:718 +#: pretix/presale/templates/pretixpresale/event/order.html:219 msgid "Pending total" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:747 +#: pretix/control/templates/pretixcontrol/order/index.html:744 #: pretix/control/templates/pretixcontrol/search/payments.html:88 msgid "Confirmation date" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:760 +#: pretix/control/templates/pretixcontrol/order/index.html:757 #: pretix/control/templates/pretixcontrol/search/payments.html:125 msgid "" "This payment was created with an older version of pretix, therefore accurate " "data might not be available." msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:761 +#: pretix/control/templates/pretixcontrol/order/index.html:758 #: pretix/control/templates/pretixcontrol/search/payments.html:126 msgid "MIGRATED" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:773 +#: pretix/control/templates/pretixcontrol/order/index.html:770 #: pretix/control/templates/pretixcontrol/order/pay_cancel.html:4 #: pretix/control/templates/pretixcontrol/order/pay_cancel.html:8 msgid "Cancel payment" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:778 +#: pretix/control/templates/pretixcontrol/order/index.html:775 msgid "Confirm as paid" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:821 +#: pretix/control/templates/pretixcontrol/order/index.html:818 msgid "Create a refund" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:842 +#: pretix/control/templates/pretixcontrol/order/index.html:839 #: pretix/control/templates/pretixcontrol/orders/refunds.html:60 msgid "Source" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:875 +#: pretix/control/templates/pretixcontrol/order/index.html:872 msgid "Cancel transfer" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:880 +#: pretix/control/templates/pretixcontrol/order/index.html:877 #: pretix/control/templates/pretixcontrol/orders/refunds.html:112 msgid "Confirm as done" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:887 +#: pretix/control/templates/pretixcontrol/order/index.html:884 #: pretix/control/templates/pretixcontrol/orders/refunds.html:118 msgid "Ignore" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:893 +#: pretix/control/templates/pretixcontrol/order/index.html:890 #: pretix/control/templates/pretixcontrol/order/refund_process.html:58 #: pretix/control/templates/pretixcontrol/orders/refunds.html:123 msgid "Process refund" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:941 -#: pretix/presale/templates/pretixpresale/event/base.html:138 +#: pretix/control/templates/pretixcontrol/order/index.html:938 +#: pretix/presale/templates/pretixpresale/event/base.html:140 #: pretix/presale/templates/pretixpresale/event/timemachine.html:30 msgid "Change" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:957 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:90 -#: pretix/presale/templates/pretixpresale/event/order.html:317 +#: pretix/control/templates/pretixcontrol/order/index.html:954 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:91 +#: pretix/presale/templates/pretixpresale/event/order.html:318 msgid "ZIP code and city" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:970 +#: pretix/control/templates/pretixcontrol/order/index.html:967 msgid "Valid EU VAT ID" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:976 +#: pretix/control/templates/pretixcontrol/order/index.html:973 msgid "Check" msgstr "" -#: pretix/control/templates/pretixcontrol/order/index.html:1024 +#: pretix/control/templates/pretixcontrol/order/index.html:1021 msgid "Order history" msgstr "" @@ -19699,6 +19742,10 @@ msgstr "" msgid "Subject:" msgstr "" +#: pretix/control/templates/pretixcontrol/order/mail_history.html:59 +msgid "Calendar invite" +msgstr "" + #: pretix/control/templates/pretixcontrol/order/pay.html:5 #: pretix/control/templates/pretixcontrol/order/pay.html:9 msgid "Mark order as paid" @@ -19902,19 +19949,19 @@ msgstr "" msgid "Send email" msgstr "" -#: pretix/control/templates/pretixcontrol/order/sendmail.html:27 +#: pretix/control/templates/pretixcontrol/order/sendmail.html:30 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_update.html:74 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:42 msgid "Email preview" msgstr "" -#: pretix/control/templates/pretixcontrol/order/sendmail.html:38 -#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:79 +#: pretix/control/templates/pretixcontrol/order/sendmail.html:41 +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:80 msgid "Preview email" msgstr "" -#: pretix/control/templates/pretixcontrol/order/sendmail.html:41 -#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:88 +#: pretix/control/templates/pretixcontrol/order/sendmail.html:44 +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:89 msgid "Send" msgstr "" @@ -20322,30 +20369,30 @@ msgstr "" msgid "Search query:" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:50 +#: pretix/control/templates/pretixcontrol/orders/index.html:49 #: pretix/control/templates/pretixcontrol/vouchers/index.html:20 msgid "Go!" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:90 +#: pretix/control/templates/pretixcontrol/orders/index.html:89 msgid "Advanced search" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:103 +#: pretix/control/templates/pretixcontrol/orders/index.html:102 #, python-format msgid "List filtered by answers to question \"%(question)s\"." msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:108 +#: pretix/control/templates/pretixcontrol/orders/index.html:107 msgid "Remove filter" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:146 +#: pretix/control/templates/pretixcontrol/orders/index.html:145 #: pretix/control/templates/pretixcontrol/organizers/customer.html:207 msgid "Order paid / total" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:177 +#: pretix/control/templates/pretixcontrol/orders/index.html:176 #: pretix/control/templates/pretixcontrol/organizers/devices.html:109 #: pretix/control/templates/pretixcontrol/subevents/index.html:128 #: pretix/control/templates/pretixcontrol/vouchers/index.html:153 @@ -20353,8 +20400,8 @@ msgstr "" msgid "select row for batch-operation" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:193 -#: pretix/control/templates/pretixcontrol/orders/index.html:195 +#: pretix/control/templates/pretixcontrol/orders/index.html:192 +#: pretix/control/templates/pretixcontrol/orders/index.html:194 #: pretix/control/templates/pretixcontrol/search/orders.html:80 #: pretix/control/templates/pretixcontrol/search/orders.html:82 #, python-format @@ -20362,14 +20409,14 @@ msgctxt "followup" msgid "TODO %(date)s" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:216 +#: pretix/control/templates/pretixcontrol/orders/index.html:215 #: pretix/control/templates/pretixcontrol/organizers/customer.html:246 #: pretix/control/templates/pretixcontrol/search/orders.html:95 msgid "CANCELLATION REQUESTED" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:219 -#: pretix/control/templates/pretixcontrol/orders/index.html:221 +#: pretix/control/templates/pretixcontrol/orders/index.html:218 +#: pretix/control/templates/pretixcontrol/orders/index.html:220 #: pretix/control/templates/pretixcontrol/organizers/customer.html:249 #: pretix/control/templates/pretixcontrol/organizers/customer.html:251 #: pretix/control/templates/pretixcontrol/search/orders.html:98 @@ -20377,62 +20424,62 @@ msgstr "" msgid "REFUND PENDING" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:224 +#: pretix/control/templates/pretixcontrol/orders/index.html:223 #: pretix/control/templates/pretixcontrol/organizers/customer.html:254 #: pretix/control/templates/pretixcontrol/search/orders.html:103 msgid "OVERPAID" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:226 +#: pretix/control/templates/pretixcontrol/orders/index.html:225 #: pretix/control/templates/pretixcontrol/organizers/customer.html:256 #: pretix/control/templates/pretixcontrol/search/orders.html:105 msgid "UNDERPAID" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:228 +#: pretix/control/templates/pretixcontrol/orders/index.html:227 #: pretix/control/templates/pretixcontrol/organizers/customer.html:258 #: pretix/control/templates/pretixcontrol/search/orders.html:107 msgid "FULLY PAID" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:240 +#: pretix/control/templates/pretixcontrol/orders/index.html:239 #: pretix/control/templates/pretixcontrol/organizers/customer.html:270 msgid "INVOICE NOT CANCELED" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:252 +#: pretix/control/templates/pretixcontrol/orders/index.html:251 msgid "Sum over all pages" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:255 +#: pretix/control/templates/pretixcontrol/orders/index.html:254 #, python-format msgid "1 order" msgid_plural "%(s)s orders" msgstr[0] "" msgstr[1] "" -#: pretix/control/templates/pretixcontrol/orders/index.html:264 -#: pretix/control/templates/pretixcontrol/orders/index.html:273 +#: pretix/control/templates/pretixcontrol/orders/index.html:263 +#: pretix/control/templates/pretixcontrol/orders/index.html:272 msgid "" "This sum includes canceled orders. For your ticket revenue, look at the " "\"order overview\"." msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:291 +#: pretix/control/templates/pretixcontrol/orders/index.html:290 msgid "Select action" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:312 -#: pretix/control/views/orders.py:335 +#: pretix/control/templates/pretixcontrol/orders/index.html:311 +#: pretix/control/views/orders.py:356 msgid "Refund overpaid amount" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:320 -#: pretix/control/views/orders.py:320 +#: pretix/control/templates/pretixcontrol/orders/index.html:319 +#: pretix/control/views/orders.py:341 msgid "Mark as expired if overdue" msgstr "" -#: pretix/control/templates/pretixcontrol/orders/index.html:328 +#: pretix/control/templates/pretixcontrol/orders/index.html:327 msgid "Delete (test mode only)" msgstr "" @@ -20559,7 +20606,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcards.html:95 #: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:102 #: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:21 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:394 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:389 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:114 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:97 #: pretix/presale/templates/pretixpresale/organizers/customer_orders.html:70 @@ -22158,7 +22205,7 @@ msgid "Use as a template for many new dates" msgstr "" #: pretix/control/templates/pretixcontrol/subevents/index.html:207 -#: pretix/control/templates/pretixcontrol/vouchers/index.html:215 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:212 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:297 msgid "Delete selected" msgstr "" @@ -22797,7 +22844,7 @@ msgstr "" msgid "Any product in quota \"%(quota)s\"" msgstr "" -#: pretix/control/templates/pretixcontrol/vouchers/index.html:200 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:197 msgid "Use as a template for new vouchers" msgstr "" @@ -23103,10 +23150,10 @@ msgstr "" #: pretix/control/views/checkin.py:380 pretix/control/views/checkin.py:440 #: pretix/control/views/discounts.py:134 pretix/control/views/discounts.py:182 -#: pretix/control/views/event.py:261 pretix/control/views/event.py:505 -#: pretix/control/views/event.py:544 pretix/control/views/event.py:691 -#: pretix/control/views/event.py:883 pretix/control/views/event.py:1241 -#: pretix/control/views/event.py:1307 pretix/control/views/event.py:1414 +#: pretix/control/views/event.py:265 pretix/control/views/event.py:548 +#: pretix/control/views/event.py:587 pretix/control/views/event.py:734 +#: pretix/control/views/event.py:926 pretix/control/views/event.py:1284 +#: pretix/control/views/event.py:1350 pretix/control/views/event.py:1457 #: pretix/control/views/item.py:273 pretix/control/views/item.py:320 #: pretix/control/views/item.py:793 pretix/control/views/item.py:819 #: pretix/control/views/item.py:939 pretix/control/views/item.py:1143 @@ -23271,132 +23318,140 @@ msgstr "" msgid "Not all discounts have been selected." msgstr "" -#: pretix/control/views/event.py:359 +#: pretix/control/views/event.py:380 msgid "Integrations" msgstr "" -#: pretix/control/views/event.py:360 +#: pretix/control/views/event.py:381 msgid "Customizations" msgstr "" -#: pretix/control/views/event.py:361 +#: pretix/control/views/event.py:382 msgid "Output and export formats" msgstr "" -#: pretix/control/views/event.py:362 +#: pretix/control/views/event.py:383 msgid "API features" msgstr "" -#: pretix/control/views/event.py:473 +#: pretix/control/views/event.py:444 +msgid "The plugin {} is now active, you can configure it here:" +msgstr "" + +#: pretix/control/views/event.py:453 +msgid "The plugin {} is now active." +msgstr "" + +#: pretix/control/views/event.py:516 msgid "" "This payment provider does not exist or the respective plugin is disabled." msgstr "" -#: pretix/control/views/event.py:730 pretix/control/views/organizer.py:342 +#: pretix/control/views/event.py:773 pretix/control/views/organizer.py:342 #: pretix/control/views/vouchers.py:561 msgid "invalid item" msgstr "" -#: pretix/control/views/event.py:805 +#: pretix/control/views/event.py:848 #, python-format msgid "Your order: %(code)s" msgstr "" -#: pretix/control/views/event.py:814 +#: pretix/control/views/event.py:857 msgid "Unknown email renderer." msgstr "" -#: pretix/control/views/event.py:830 pretix/control/views/orders.py:671 +#: pretix/control/views/event.py:873 pretix/control/views/orders.py:692 #: pretix/presale/views/order.py:1086 pretix/presale/views/order.py:1093 msgid "You requested an invalid ticket output type." msgstr "" -#: pretix/control/views/event.py:978 +#: pretix/control/views/event.py:1021 msgid "Your shop is live now!" msgstr "" -#: pretix/control/views/event.py:986 +#: pretix/control/views/event.py:1029 msgid "We've taken your shop down. You can re-enable it whenever you want!" msgstr "" -#: pretix/control/views/event.py:994 +#: pretix/control/views/event.py:1037 msgid "Your shop is now in test mode!" msgstr "" -#: pretix/control/views/event.py:1011 +#: pretix/control/views/event.py:1054 msgid "" "An order could not be deleted as some constraints (e.g. data created by plug-" "ins) do not allow it." msgstr "" -#: pretix/control/views/event.py:1017 +#: pretix/control/views/event.py:1060 msgid "We've disabled test mode for you. Let's sell some real tickets!" msgstr "" -#: pretix/control/views/event.py:1039 +#: pretix/control/views/event.py:1082 msgid "This event can not be deleted." msgstr "" -#: pretix/control/views/event.py:1062 +#: pretix/control/views/event.py:1105 msgid "The event has been deleted." msgstr "" -#: pretix/control/views/event.py:1065 +#: pretix/control/views/event.py:1108 msgid "" "The event could not be deleted as some constraints (e.g. data created by " "plug-ins) do not allow it." msgstr "" -#: pretix/control/views/event.py:1081 +#: pretix/control/views/event.py:1124 #, python-brace-format msgid "" "Specifically, the following plugins still contain data depends on this " "event: {plugin_names}" msgstr "" -#: pretix/control/views/event.py:1161 pretix/control/views/orders.py:760 +#: pretix/control/views/event.py:1204 pretix/control/views/orders.py:781 msgid "The comment has been updated." msgstr "" -#: pretix/control/views/event.py:1163 pretix/control/views/orders.py:762 +#: pretix/control/views/event.py:1206 pretix/control/views/orders.py:783 msgid "Could not update the comment." msgstr "" -#: pretix/control/views/event.py:1201 pretix/control/views/main.py:330 +#: pretix/control/views/event.py:1244 pretix/control/views/main.py:330 msgid "VAT" msgstr "" -#: pretix/control/views/event.py:1235 +#: pretix/control/views/event.py:1278 msgid "The new tax rule has been created." msgstr "" -#: pretix/control/views/event.py:1258 pretix/control/views/event.py:1323 +#: pretix/control/views/event.py:1301 pretix/control/views/event.py:1366 msgid "The requested tax rule does not exist." msgstr "" -#: pretix/control/views/event.py:1332 +#: pretix/control/views/event.py:1375 msgid "The selected tax rule has been deleted." msgstr "" -#: pretix/control/views/event.py:1334 +#: pretix/control/views/event.py:1377 msgid "The selected tax rule can not be deleted." msgstr "" -#: pretix/control/views/event.py:1384 +#: pretix/control/views/event.py:1427 msgid "Your event is not empty, you need to set it up manually." msgstr "" -#: pretix/control/views/event.py:1519 +#: pretix/control/views/event.py:1562 msgid "" "Your changes have been saved. You can now go on with looking at the details " "or take your event live to start selling!" msgstr "" -#: pretix/control/views/event.py:1538 +#: pretix/control/views/event.py:1581 msgid "Regular ticket" msgstr "" -#: pretix/control/views/event.py:1543 +#: pretix/control/views/event.py:1586 msgid "Reduced ticket" msgstr "" @@ -23693,19 +23748,23 @@ msgstr "" msgid "Access for the selected application has been revoked." msgstr "" -#: pretix/control/views/orders.py:244 +#: pretix/control/views/orders.py:192 +msgid "We could not process your input. See below for details." +msgstr "" + +#: pretix/control/views/orders.py:265 #, python-brace-format msgid "" "Successfully executed the action \"{label}\" on {success} of {total} orders." msgstr "" -#: pretix/control/views/orders.py:535 +#: pretix/control/views/orders.py:556 msgid "Your invoice" msgid_plural "Your invoices" msgstr[0] "" msgstr[1] "" -#: pretix/control/views/orders.py:537 +#: pretix/control/views/orders.py:558 #, python-brace-format msgid "" "Hello,\n" @@ -23722,7 +23781,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: pretix/control/views/orders.py:673 pretix/plugins/banktransfer/views.py:901 +#: pretix/control/views/orders.py:694 pretix/plugins/banktransfer/views.py:901 #: pretix/presale/views/order.py:158 pretix/presale/views/order.py:240 #: pretix/presale/views/order.py:334 pretix/presale/views/order.py:361 #: pretix/presale/views/order.py:429 pretix/presale/views/order.py:496 @@ -23735,65 +23794,65 @@ msgstr[1] "" msgid "Unknown order code or not authorized to access this order." msgstr "" -#: pretix/control/views/orders.py:675 pretix/presale/views/order.py:1100 +#: pretix/control/views/orders.py:696 pretix/presale/views/order.py:1100 msgid "Ticket download is not enabled for this product." msgstr "" -#: pretix/control/views/orders.py:796 +#: pretix/control/views/orders.py:817 msgid "The order has been deleted." msgstr "" -#: pretix/control/views/orders.py:803 +#: pretix/control/views/orders.py:824 msgid "" "The order could not be deleted as some constraints (e.g. data created by " "plug-ins) do not allow it." msgstr "" -#: pretix/control/views/orders.py:811 +#: pretix/control/views/orders.py:832 msgid "Only orders created in test mode can be deleted." msgstr "" -#: pretix/control/views/orders.py:832 +#: pretix/control/views/orders.py:853 msgid "The order has been denied and is therefore now canceled." msgstr "" -#: pretix/control/views/orders.py:872 +#: pretix/control/views/orders.py:893 msgid "This payment has been canceled." msgstr "" -#: pretix/control/views/orders.py:874 +#: pretix/control/views/orders.py:895 msgid "This payment can not be canceled at the moment." msgstr "" -#: pretix/control/views/orders.py:900 +#: pretix/control/views/orders.py:921 msgid "The refund has been canceled." msgstr "" -#: pretix/control/views/orders.py:902 +#: pretix/control/views/orders.py:923 msgid "This refund can not be canceled at the moment." msgstr "" -#: pretix/control/views/orders.py:936 +#: pretix/control/views/orders.py:957 msgid "The refund has been processed." msgstr "" -#: pretix/control/views/orders.py:938 pretix/control/views/orders.py:964 +#: pretix/control/views/orders.py:959 pretix/control/views/orders.py:985 msgid "This refund can not be processed at the moment." msgstr "" -#: pretix/control/views/orders.py:962 +#: pretix/control/views/orders.py:983 msgid "The refund has been marked as done." msgstr "" -#: pretix/control/views/orders.py:988 +#: pretix/control/views/orders.py:1009 msgid "The request has been removed. If you want, you can now inform the user." msgstr "" -#: pretix/control/views/orders.py:995 +#: pretix/control/views/orders.py:1016 msgid "Your cancellation request" msgstr "" -#: pretix/control/views/orders.py:996 +#: pretix/control/views/orders.py:1017 #, python-brace-format msgid "" "Hello,\n" @@ -23804,69 +23863,69 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/control/views/orders.py:1052 +#: pretix/control/views/orders.py:1073 msgid "" "The payment has been marked as complete, but we were unable to send a " "confirmation mail." msgstr "" -#: pretix/control/views/orders.py:1055 +#: pretix/control/views/orders.py:1076 msgid "The payment has been marked as complete." msgstr "" -#: pretix/control/views/orders.py:1057 +#: pretix/control/views/orders.py:1078 msgid "This payment can not be confirmed at the moment." msgstr "" -#: pretix/control/views/orders.py:1148 +#: pretix/control/views/orders.py:1169 msgid "" "The refund was prevented due to a refund already being processed at the same " "time. Please have a look at the order details and check if your refund is " "still necessary." msgstr "" -#: pretix/control/views/orders.py:1248 +#: pretix/control/views/orders.py:1269 msgid "You entered an order in an event with a different currency." msgstr "" -#: pretix/control/views/orders.py:1299 +#: pretix/control/views/orders.py:1320 msgid "" "You can not refund more than the amount of a payment that is not yet " "refunded." msgstr "" -#: pretix/control/views/orders.py:1304 +#: pretix/control/views/orders.py:1325 msgid "" "You selected a partial refund for a payment method that only supports full " "refunds." msgstr "" -#: pretix/control/views/orders.py:1334 +#: pretix/control/views/orders.py:1355 msgid "" "One of the refunds failed to be processed. You should retry to refund in a " "different way. The error message was: {}" msgstr "" -#: pretix/control/views/orders.py:1340 +#: pretix/control/views/orders.py:1361 msgid "A refund of {} has been processed." msgstr "" -#: pretix/control/views/orders.py:1344 +#: pretix/control/views/orders.py:1365 msgid "" "A refund of {} has been saved, but not yet fully executed. You can mark it " "as complete below." msgstr "" -#: pretix/control/views/orders.py:1373 +#: pretix/control/views/orders.py:1394 msgid "" "A new gift card was created. You can now send the user their gift card code." msgstr "" -#: pretix/control/views/orders.py:1381 +#: pretix/control/views/orders.py:1402 msgid "Your gift card code" msgstr "" -#: pretix/control/views/orders.py:1383 +#: pretix/control/views/orders.py:1404 #, python-brace-format msgid "" "Hello,\n" @@ -23879,184 +23938,184 @@ msgid "" "Your {event} team" msgstr "" -#: pretix/control/views/orders.py:1394 +#: pretix/control/views/orders.py:1415 msgid "The refunds you selected do not match the selected total refund amount." msgstr "" -#: pretix/control/views/orders.py:1522 +#: pretix/control/views/orders.py:1543 msgid "" "The order has been marked as paid, but we were unable to send a confirmation " "mail." msgstr "" -#: pretix/control/views/orders.py:1525 +#: pretix/control/views/orders.py:1546 msgid "The payment has been created successfully." msgstr "" -#: pretix/control/views/orders.py:1539 +#: pretix/control/views/orders.py:1560 msgid "" "The order has been canceled. You can now select how you want to transfer the " "money back to the user." msgstr "" -#: pretix/control/views/orders.py:1610 pretix/control/views/orders.py:1614 +#: pretix/control/views/orders.py:1631 pretix/control/views/orders.py:1635 msgid "No VAT ID specified." msgstr "" -#: pretix/control/views/orders.py:1618 +#: pretix/control/views/orders.py:1639 msgid "No country specified." msgstr "" -#: pretix/control/views/orders.py:1622 +#: pretix/control/views/orders.py:1643 msgid "VAT ID could not be checked since this country is not supported." msgstr "" -#: pretix/control/views/orders.py:1633 +#: pretix/control/views/orders.py:1654 msgid "" "The VAT ID could not be checked, as the VAT checking service of the country " "is currently not available." msgstr "" -#: pretix/control/views/orders.py:1636 +#: pretix/control/views/orders.py:1657 msgid "This VAT ID is valid." msgstr "" -#: pretix/control/views/orders.py:1650 pretix/control/views/orders.py:1683 +#: pretix/control/views/orders.py:1671 pretix/control/views/orders.py:1704 msgid "Unknown invoice." msgstr "" -#: pretix/control/views/orders.py:1653 +#: pretix/control/views/orders.py:1674 msgid "Invoices may not be changed after they are created." msgstr "" -#: pretix/control/views/orders.py:1655 pretix/control/views/orders.py:1686 +#: pretix/control/views/orders.py:1676 pretix/control/views/orders.py:1707 msgid "The invoice has already been canceled." msgstr "" -#: pretix/control/views/orders.py:1657 +#: pretix/control/views/orders.py:1678 msgid "The invoice file has already been exported." msgstr "" -#: pretix/control/views/orders.py:1659 +#: pretix/control/views/orders.py:1680 msgid "The invoice file is too old to be regenerated." msgstr "" -#: pretix/control/views/orders.py:1661 pretix/control/views/orders.py:1688 +#: pretix/control/views/orders.py:1682 pretix/control/views/orders.py:1709 msgid "The invoice has been cleaned of personal data." msgstr "" -#: pretix/control/views/orders.py:1719 +#: pretix/control/views/orders.py:1740 msgid "The email has been queued to be sent." msgstr "" -#: pretix/control/views/orders.py:1743 pretix/presale/views/order.py:1277 +#: pretix/control/views/orders.py:1764 pretix/presale/views/order.py:1277 msgid "This invoice has not been found" msgstr "" -#: pretix/control/views/orders.py:1750 pretix/presale/views/order.py:1284 +#: pretix/control/views/orders.py:1771 pretix/presale/views/order.py:1284 msgid "The invoice file is no longer stored on the server." msgstr "" -#: pretix/control/views/orders.py:1755 pretix/presale/views/order.py:1289 +#: pretix/control/views/orders.py:1776 pretix/presale/views/order.py:1289 msgid "" "The invoice file has not yet been generated, we will generate it for you " "now. Please try again in a few seconds." msgstr "" -#: pretix/control/views/orders.py:1783 +#: pretix/control/views/orders.py:1804 msgid "The payment term has been changed." msgstr "" -#: pretix/control/views/orders.py:1788 pretix/control/views/orders.py:1845 +#: pretix/control/views/orders.py:1809 pretix/control/views/orders.py:1866 msgid "" "We were not able to process the request completely as the server was too " "busy." msgstr "" -#: pretix/control/views/orders.py:1796 +#: pretix/control/views/orders.py:1817 msgid "This action is only allowed for pending orders." msgstr "" -#: pretix/control/views/orders.py:1851 +#: pretix/control/views/orders.py:1872 msgid "This action is only allowed for canceled orders." msgstr "" -#: pretix/control/views/orders.py:2108 pretix/presale/views/order.py:1563 +#: pretix/control/views/orders.py:2129 pretix/presale/views/order.py:1563 msgid "An error occurred. Please see the details below." msgstr "" -#: pretix/control/views/orders.py:2116 +#: pretix/control/views/orders.py:2137 msgid "The order has been changed and the user has been notified." msgstr "" -#: pretix/control/views/orders.py:2118 pretix/control/views/orders.py:2254 -#: pretix/control/views/orders.py:2291 pretix/presale/views/order.py:1598 +#: pretix/control/views/orders.py:2139 pretix/control/views/orders.py:2275 +#: pretix/control/views/orders.py:2312 pretix/presale/views/order.py:1598 msgid "The order has been changed." msgstr "" -#: pretix/control/views/orders.py:2145 pretix/presale/checkoutflow.py:945 +#: pretix/control/views/orders.py:2166 pretix/presale/checkoutflow.py:945 #: pretix/presale/views/order.py:781 pretix/presale/views/order.py:886 msgid "" "We had difficulties processing your input. Please review the errors below." msgstr "" -#: pretix/control/views/orders.py:2256 +#: pretix/control/views/orders.py:2277 msgid "Nothing about the order had to be changed." msgstr "" -#: pretix/control/views/orders.py:2337 pretix/plugins/sendmail/views.py:176 +#: pretix/control/views/orders.py:2358 pretix/plugins/sendmail/views.py:176 msgid "We could not send the email. See below for details." msgstr "" -#: pretix/control/views/orders.py:2353 pretix/control/views/orders.py:2420 +#: pretix/control/views/orders.py:2374 pretix/control/views/orders.py:2444 #: pretix/plugins/sendmail/views.py:204 pretix/plugins/sendmail/views.py:671 #, python-brace-format msgid "Subject: {subject}" msgstr "" -#: pretix/control/views/orders.py:2369 pretix/control/views/orders.py:2437 +#: pretix/control/views/orders.py:2393 pretix/control/views/orders.py:2464 msgid "Your message has been queued and will be sent to {}." msgstr "" -#: pretix/control/views/orders.py:2373 pretix/control/views/orders.py:2440 +#: pretix/control/views/orders.py:2397 pretix/control/views/orders.py:2467 msgid "Failed to send mail to the following user: {}" msgstr "" -#: pretix/control/views/orders.py:2476 pretix/presale/views/order.py:1060 +#: pretix/control/views/orders.py:2520 pretix/presale/views/order.py:1060 msgid "" "This link is no longer valid. Please go back, refresh the page, and try " "again." msgstr "" -#: pretix/control/views/orders.py:2552 +#: pretix/control/views/orders.py:2596 msgid "There is no order with the given order code." msgstr "" -#: pretix/control/views/orders.py:2658 pretix/control/views/organizer.py:1800 +#: pretix/control/views/orders.py:2702 pretix/control/views/organizer.py:1800 msgid "The selected exporter was not found." msgstr "" -#: pretix/control/views/orders.py:2668 pretix/control/views/organizer.py:1810 +#: pretix/control/views/orders.py:2712 pretix/control/views/organizer.py:1810 msgid "There was a problem processing your input. See below for error details." msgstr "" -#: pretix/control/views/orders.py:2703 pretix/control/views/organizer.py:1853 +#: pretix/control/views/orders.py:2747 pretix/control/views/organizer.py:1853 #, python-brace-format msgid "" "Your export schedule has been saved. The next export will start around " "{datetime}." msgstr "" -#: pretix/control/views/orders.py:2708 pretix/control/views/organizer.py:1858 +#: pretix/control/views/orders.py:2752 pretix/control/views/organizer.py:1858 msgid "Your export schedule has been saved, but no next export is planned." msgstr "" -#: pretix/control/views/orders.py:2747 pretix/control/views/organizer.py:1898 +#: pretix/control/views/orders.py:2791 pretix/control/views/organizer.py:1898 #, python-brace-format msgid "Export: {title}" msgstr "" -#: pretix/control/views/orders.py:2748 pretix/control/views/organizer.py:1900 +#: pretix/control/views/orders.py:2792 pretix/control/views/organizer.py:1900 #, python-brace-format msgid "" "Hello,\n" @@ -24064,25 +24123,25 @@ msgid "" "attached to this email, you can find a new scheduled report for {name}." msgstr "" -#: pretix/control/views/orders.py:2816 pretix/control/views/organizer.py:1968 +#: pretix/control/views/orders.py:2860 pretix/control/views/organizer.py:1968 msgid "" "Your export is queued to start soon. The results will be send via email. " "Depending on system load and type and size of export, this may take a few " "minutes." msgstr "" -#: pretix/control/views/orders.py:2895 +#: pretix/control/views/orders.py:2939 msgid "All orders have been canceled." msgstr "" -#: pretix/control/views/orders.py:2897 +#: pretix/control/views/orders.py:2941 #, python-brace-format msgid "" "The orders have been canceled. An error occurred with {count} orders, please " "check all uncanceled orders." msgstr "" -#: pretix/control/views/orders.py:2918 +#: pretix/control/views/orders.py:2962 msgid "Your input was not valid." msgstr "" @@ -24361,7 +24420,7 @@ msgstr "" msgid "Please only upload PDF files." msgstr "" -#: pretix/control/views/pdf.py:211 +#: pretix/control/views/pdf.py:228 #, python-brace-format msgid "Unfortunately, we were unable to process this PDF file ({reason})." msgstr "" @@ -24690,6 +24749,18 @@ msgstr "" msgid "Automatically check-in specific tickets after they have been sold." msgstr "" +#: pretix/plugins/autocheckin/apps.py:42 pretix/plugins/webcheckin/apps.py:40 +#: pretix/plugins/webcheckin/templates/pretixplugins/webcheckin/index.html:10 +msgid "Check-in" +msgstr "" + +#: pretix/plugins/autocheckin/apps.py:42 +#: pretix/plugins/autocheckin/signals.py:47 +#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/add.html:13 +#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/edit.html:13 +msgid "Auto check-in" +msgstr "" + #: pretix/plugins/autocheckin/forms.py:60 #: pretix/plugins/autocheckin/models.py:82 msgid "Only including usage of payment providers" @@ -24731,12 +24802,6 @@ msgstr "" msgid "All payment methods" msgstr "" -#: pretix/plugins/autocheckin/signals.py:47 -#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/add.html:13 -#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/edit.html:13 -msgid "Auto check-in" -msgstr "" - #: pretix/plugins/autocheckin/signals.py:70 msgid "An auto check-in rule was created" msgstr "" @@ -24801,7 +24866,7 @@ msgid "The selected rule has been deleted." msgstr "" #: pretix/plugins/badges/apps.py:30 pretix/plugins/badges/apps.py:33 -#: pretix/plugins/badges/signals.py:54 +#: pretix/plugins/badges/apps.py:41 pretix/plugins/badges/signals.py:54 #: pretix/plugins/badges/templates/pretixplugins/badges/control_order_info.html:7 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:4 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:6 @@ -25052,6 +25117,9 @@ msgstr "" #: pretix/plugins/banktransfer/apps.py:31 #: pretix/plugins/banktransfer/apps.py:34 +#: pretix/plugins/banktransfer/apps.py:42 +#: pretix/plugins/banktransfer/apps.py:45 +#: pretix/plugins/banktransfer/apps.py:46 #: pretix/plugins/banktransfer/payment.py:67 #: pretix/plugins/banktransfer/signals.py:50 #: pretix/plugins/banktransfer/signals.py:87 @@ -25064,7 +25132,23 @@ msgid "" "with your own bank account." msgstr "" -#: pretix/plugins/banktransfer/apps.py:53 +#: pretix/plugins/banktransfer/apps.py:45 +#: pretix/plugins/banktransfer/signals.py:58 +#: pretix/plugins/banktransfer/signals.py:94 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_base.html:4 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_base.html:7 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_base_organizer.html:4 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_base_organizer.html:7 +msgid "Import bank data" +msgstr "" + +#: pretix/plugins/banktransfer/apps.py:46 +#: pretix/plugins/banktransfer/signals.py:66 +#: pretix/plugins/banktransfer/signals.py:102 +msgid "Export refunds" +msgstr "" + +#: pretix/plugins/banktransfer/apps.py:60 msgid "" "Install the python package 'chardet' for better CSV import capabilities." msgstr "" @@ -25301,20 +25385,6 @@ msgstr "" msgid "Refund" msgstr "" -#: pretix/plugins/banktransfer/signals.py:58 -#: pretix/plugins/banktransfer/signals.py:94 -#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_base.html:4 -#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_base.html:7 -#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_base_organizer.html:4 -#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_base_organizer.html:7 -msgid "Import bank data" -msgstr "" - -#: pretix/plugins/banktransfer/signals.py:66 -#: pretix/plugins/banktransfer/signals.py:102 -msgid "Export refunds" -msgstr "" - #: pretix/plugins/banktransfer/signals.py:126 msgid "The invoice was sent to the designated email address." msgstr "" @@ -25862,102 +25932,102 @@ msgstr "" msgid "Include questions" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:301 +#: pretix/plugins/checkinlists/exporters.py:303 msgid "Check-in list (PDF)" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:302 -#: pretix/plugins/checkinlists/exporters.py:473 -#: pretix/plugins/checkinlists/exporters.py:670 -#: pretix/plugins/checkinlists/exporters.py:740 +#: pretix/plugins/checkinlists/exporters.py:304 +#: pretix/plugins/checkinlists/exporters.py:475 +#: pretix/plugins/checkinlists/exporters.py:672 +#: pretix/plugins/checkinlists/exporters.py:742 msgctxt "export_category" msgid "Check-in" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:303 +#: pretix/plugins/checkinlists/exporters.py:305 msgid "" "Download a PDF version of a check-in list that can be used to check people " "in at the event without digital methods." msgstr "" #. Translators: maximum 5 characters -#: pretix/plugins/checkinlists/exporters.py:371 +#: pretix/plugins/checkinlists/exporters.py:373 msgctxt "tablehead" msgid "paid" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:474 +#: pretix/plugins/checkinlists/exporters.py:476 msgid "" "Download a spreadsheet with all attendees that are included in a check-in " "list." msgstr "" -#: pretix/plugins/checkinlists/exporters.py:497 +#: pretix/plugins/checkinlists/exporters.py:499 msgid "Checked out" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:497 -#: pretix/plugins/checkinlists/exporters.py:762 +#: pretix/plugins/checkinlists/exporters.py:499 +#: pretix/plugins/checkinlists/exporters.py:764 msgid "Automatically checked in" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:503 -#: pretix/plugins/checkinlists/exporters.py:691 -#: pretix/plugins/checkinlists/exporters.py:756 +#: pretix/plugins/checkinlists/exporters.py:505 +#: pretix/plugins/checkinlists/exporters.py:693 +#: pretix/plugins/checkinlists/exporters.py:758 #: pretix/plugins/paypal/payment.py:123 pretix/plugins/paypal2/payment.py:120 msgid "Secret" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:669 +#: pretix/plugins/checkinlists/exporters.py:671 msgid "Valid check-in codes" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:671 +#: pretix/plugins/checkinlists/exporters.py:673 msgid "" "Download a spreadsheet with all valid check-in barcodes e.g. for import into " "a different system. Does not included blocked codes or personal data." msgstr "" -#: pretix/plugins/checkinlists/exporters.py:739 +#: pretix/plugins/checkinlists/exporters.py:741 msgid "Check-in log (all scans)" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:741 +#: pretix/plugins/checkinlists/exporters.py:743 msgid "" "Download a spreadsheet with one line for every scan that happened at your " "check-in stations." msgstr "" -#: pretix/plugins/checkinlists/exporters.py:760 +#: pretix/plugins/checkinlists/exporters.py:762 msgid "Offline" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:761 +#: pretix/plugins/checkinlists/exporters.py:763 msgid "Offline override" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:765 +#: pretix/plugins/checkinlists/exporters.py:767 #: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:766 +#: pretix/plugins/checkinlists/exporters.py:768 msgid "Upload date" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:767 +#: pretix/plugins/checkinlists/exporters.py:769 msgid "Upload time" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:818 +#: pretix/plugins/checkinlists/exporters.py:820 msgid "OK" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:850 +#: pretix/plugins/checkinlists/exporters.py:852 msgid "Successful scans only" msgstr "" -#: pretix/plugins/checkinlists/exporters.py:871 +#: pretix/plugins/checkinlists/exporters.py:873 msgid "All check-in lists" msgstr "" @@ -25966,9 +26036,10 @@ msgid "A fully customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:44 pretix/plugins/paypal/apps.py:47 -#: pretix/plugins/paypal/payment.py:75 pretix/plugins/paypal2/payment.py:82 -#: pretix/plugins/paypal2/payment.py:138 pretix/plugins/paypal2/payment.py:1080 -#: pretix/plugins/paypal2/payment.py:1081 pretix/plugins/stripe/payment.py:1816 +#: pretix/plugins/paypal/payment.py:75 pretix/plugins/paypal2/apps.py:45 +#: pretix/plugins/paypal2/payment.py:82 pretix/plugins/paypal2/payment.py:138 +#: pretix/plugins/paypal2/payment.py:1082 +#: pretix/plugins/paypal2/payment.py:1083 pretix/plugins/stripe/payment.py:1816 msgid "PayPal" msgstr "" @@ -26033,9 +26104,9 @@ msgstr "" #: pretix/plugins/paypal2/payment.py:470 pretix/plugins/paypal2/payment.py:480 #: pretix/plugins/paypal2/payment.py:602 pretix/plugins/paypal2/payment.py:606 #: pretix/plugins/paypal2/payment.py:661 pretix/plugins/paypal2/payment.py:725 -#: pretix/plugins/paypal2/payment.py:1004 -#: pretix/plugins/paypal2/payment.py:1014 -#: pretix/plugins/paypal2/payment.py:1110 +#: pretix/plugins/paypal2/payment.py:1006 +#: pretix/plugins/paypal2/payment.py:1016 +#: pretix/plugins/paypal2/payment.py:1112 msgid "We had trouble communicating with PayPal" msgstr "" @@ -26061,23 +26132,23 @@ msgid "There was an error sending the confirmation mail." msgstr "" #: pretix/plugins/paypal/payment.py:565 pretix/plugins/paypal/payment.py:572 -#: pretix/plugins/paypal2/payment.py:962 pretix/plugins/paypal2/payment.py:983 +#: pretix/plugins/paypal2/payment.py:964 pretix/plugins/paypal2/payment.py:985 msgid "Refunding the amount via PayPal failed: {}" msgstr "" #: pretix/plugins/paypal/payment.py:707 pretix/plugins/paypal/payment.py:715 -#: pretix/plugins/paypal2/payment.py:1060 -#: pretix/plugins/paypal2/payment.py:1068 +#: pretix/plugins/paypal2/payment.py:1062 +#: pretix/plugins/paypal2/payment.py:1070 msgid "The payment for this invoice has already been received." msgstr "" #: pretix/plugins/paypal/payment.py:708 pretix/plugins/paypal/payment.py:716 -#: pretix/plugins/paypal2/payment.py:1061 -#: pretix/plugins/paypal2/payment.py:1069 +#: pretix/plugins/paypal2/payment.py:1063 +#: pretix/plugins/paypal2/payment.py:1071 msgid "PayPal payment ID" msgstr "" -#: pretix/plugins/paypal/payment.py:710 pretix/plugins/paypal2/payment.py:1063 +#: pretix/plugins/paypal/payment.py:710 pretix/plugins/paypal2/payment.py:1065 msgid "PayPal sale ID" msgstr "" @@ -26145,15 +26216,15 @@ msgstr "" msgid "Click here in order to open the window." msgstr "" -#: pretix/plugins/paypal/views.py:107 pretix/plugins/paypal2/views.py:319 +#: pretix/plugins/paypal/views.py:107 pretix/plugins/paypal2/views.py:321 msgid "Invalid response from PayPal received." msgstr "" -#: pretix/plugins/paypal/views.py:123 pretix/plugins/paypal2/views.py:340 +#: pretix/plugins/paypal/views.py:123 pretix/plugins/paypal2/views.py:342 msgid "It looks like you canceled the PayPal payment" msgstr "" -#: pretix/plugins/paypal/views.py:255 pretix/plugins/paypal2/views.py:531 +#: pretix/plugins/paypal/views.py:255 pretix/plugins/paypal2/views.py:536 msgid "Your PayPal account has been disconnected." msgstr "" @@ -26259,13 +26330,13 @@ msgid "" "to send any payments." msgstr "" -#: pretix/plugins/paypal2/payment.py:334 pretix/plugins/paypal2/views.py:248 +#: pretix/plugins/paypal2/payment.py:334 pretix/plugins/paypal2/views.py:250 msgid "An error occurred during connecting with PayPal, please try again." msgstr "" #: pretix/plugins/paypal2/payment.py:466 pretix/plugins/paypal2/payment.py:598 #: pretix/plugins/paypal2/payment.py:658 pretix/plugins/paypal2/payment.py:721 -#: pretix/plugins/paypal2/payment.py:766 pretix/plugins/paypal2/payment.py:999 +#: pretix/plugins/paypal2/payment.py:766 pretix/plugins/paypal2/payment.py:1001 #: pretix/plugins/paypal2/templates/pretixplugins/paypal2/pending.html:5 msgid "" "Your payment has failed due to a known issue within PayPal. Please try " @@ -26273,26 +26344,26 @@ msgid "" "attempt. You can also try other payment methods, if available." msgstr "" -#: pretix/plugins/paypal2/payment.py:476 pretix/plugins/paypal2/payment.py:1010 +#: pretix/plugins/paypal2/payment.py:476 pretix/plugins/paypal2/payment.py:1012 msgid "" "Something went wrong when requesting the payment status. Please try again." msgstr "" -#: pretix/plugins/paypal2/payment.py:485 pretix/plugins/paypal2/payment.py:1019 +#: pretix/plugins/paypal2/payment.py:485 pretix/plugins/paypal2/payment.py:1021 msgid "You may need to enable JavaScript for PayPal payments." msgstr "" -#: pretix/plugins/paypal2/payment.py:953 +#: pretix/plugins/paypal2/payment.py:955 msgid "" "Refunding the amount via PayPal failed: The original payment does not " "contain the required information to issue an automated refund." msgstr "" -#: pretix/plugins/paypal2/payment.py:1087 +#: pretix/plugins/paypal2/payment.py:1089 msgid "PayPal APM" msgstr "" -#: pretix/plugins/paypal2/payment.py:1088 +#: pretix/plugins/paypal2/payment.py:1090 msgid "PayPal Alternative Payment Methods" msgstr "" @@ -26450,31 +26521,31 @@ msgid "" "or contact us." msgstr "" -#: pretix/plugins/paypal2/views.py:221 +#: pretix/plugins/paypal2/views.py:223 msgid "" "An error occurred returning from PayPal: request parameters missing. Please " "try again." msgstr "" -#: pretix/plugins/paypal2/views.py:257 +#: pretix/plugins/paypal2/views.py:259 msgid "" "An error occurred returning from PayPal: result parameters missing. Please " "try again." msgstr "" -#: pretix/plugins/paypal2/views.py:262 +#: pretix/plugins/paypal2/views.py:264 msgid "" "An error occurred returning from PayPal: session parameter not matching. " "Please try again." msgstr "" -#: pretix/plugins/paypal2/views.py:267 +#: pretix/plugins/paypal2/views.py:269 msgid "" "The email address on your PayPal account has not yet been confirmed. You " "will need to do this before you can start accepting payments." msgstr "" -#: pretix/plugins/paypal2/views.py:273 +#: pretix/plugins/paypal2/views.py:275 msgid "" "Your PayPal account is now connected to pretix. You can change the settings " "in detail below." @@ -26671,7 +26742,7 @@ msgid "" "useful in combination with our API." msgstr "" -#: pretix/plugins/returnurl/signals.py:90 +#: pretix/plugins/returnurl/apps.py:40 pretix/plugins/returnurl/signals.py:90 msgid "Redirection" msgstr "" @@ -27127,7 +27198,7 @@ msgid "" "yet been sent." msgstr "" -#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:76 +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:77 msgid "You need to preview your email before you can send it." msgstr "" @@ -27177,7 +27248,7 @@ msgstr[0] "" msgstr[1] "" #: pretix/plugins/statistics/apps.py:30 pretix/plugins/statistics/apps.py:33 -#: pretix/plugins/statistics/signals.py:37 +#: pretix/plugins/statistics/apps.py:39 pretix/plugins/statistics/signals.py:37 #: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:8 #: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:10 msgid "Statistics" @@ -27270,7 +27341,7 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:31 pretix/plugins/stripe/apps.py:34 -#: pretix/plugins/stripe/payment.py:163 +#: pretix/plugins/stripe/apps.py:44 pretix/plugins/stripe/payment.py:163 msgid "Stripe" msgstr "" @@ -28094,7 +28165,7 @@ msgid "" "allows you to customize the layout of the PDF files to your brand." msgstr "" -#: pretix/plugins/ticketoutputpdf/apps.py:71 +#: pretix/plugins/ticketoutputpdf/apps.py:74 #: pretix/plugins/ticketoutputpdf/migrations/0002_auto_20180605_2022.py:22 #: pretix/plugins/ticketoutputpdf/migrations/0002_auto_20180605_2022.py:38 #: pretix/plugins/ticketoutputpdf/views.py:227 @@ -28176,7 +28247,7 @@ msgid "" msgstr "" #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html:14 -msgid "Open Layout Designer" +msgid "Open layout editor" msgstr "" #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html:18 @@ -28239,14 +28310,10 @@ msgstr "" msgid "Turn your browser into a check-in device to perform access control." msgstr "" -#: pretix/plugins/webcheckin/signals.py:36 +#: pretix/plugins/webcheckin/apps.py:40 pretix/plugins/webcheckin/signals.py:36 msgid "Web Check-in" msgstr "" -#: pretix/plugins/webcheckin/templates/pretixplugins/webcheckin/index.html:10 -msgid "Check-in" -msgstr "" - #: pretix/presale/checkoutflow.py:119 msgctxt "checkoutflow" msgid "Step" @@ -28278,8 +28345,8 @@ msgid "Add-on products" msgstr "" #: pretix/presale/checkoutflow.py:678 pretix/presale/checkoutflow.py:686 -#: pretix/presale/views/cart.py:193 pretix/presale/views/cart.py:198 -#: pretix/presale/views/cart.py:216 pretix/presale/views/cart.py:229 +#: pretix/presale/views/cart.py:195 pretix/presale/views/cart.py:200 +#: pretix/presale/views/cart.py:218 pretix/presale/views/cart.py:231 #: pretix/presale/views/order.py:1485 pretix/presale/views/order.py:1493 msgid "Please enter numbers only." msgstr "" @@ -28510,69 +28577,69 @@ msgstr "" msgid "Footer Navigation" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:33 +#: pretix/presale/templates/pretixpresale/event/base.html:35 msgid "This shop is currently only visible to you and your team." msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:35 +#: pretix/presale/templates/pretixpresale/event/base.html:37 msgid "Take it live now" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:45 -#: pretix/presale/templates/pretixpresale/event/base.html:106 -#: pretix/presale/templates/pretixpresale/organizers/base.html:28 -#: pretix/presale/templates/pretixpresale/organizers/base.html:70 +#: pretix/presale/templates/pretixpresale/event/base.html:47 +#: pretix/presale/templates/pretixpresale/event/base.html:108 +#: pretix/presale/templates/pretixpresale/organizers/base.html:30 +#: pretix/presale/templates/pretixpresale/organizers/base.html:72 msgid "select language" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:49 -#: pretix/presale/templates/pretixpresale/event/base.html:110 -#: pretix/presale/templates/pretixpresale/organizers/base.html:32 -#: pretix/presale/templates/pretixpresale/organizers/base.html:74 +#: pretix/presale/templates/pretixpresale/event/base.html:51 +#: pretix/presale/templates/pretixpresale/event/base.html:112 +#: pretix/presale/templates/pretixpresale/organizers/base.html:34 +#: pretix/presale/templates/pretixpresale/organizers/base.html:76 #, python-format msgid "Website in %(language)s" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:63 +#: pretix/presale/templates/pretixpresale/event/base.html:65 #, python-format msgid "Show all events of %(name)s" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:85 -#: pretix/presale/templates/pretixpresale/event/base.html:90 +#: pretix/presale/templates/pretixpresale/event/base.html:87 +#: pretix/presale/templates/pretixpresale/event/base.html:92 msgid "Homepage" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:127 -#: pretix/presale/templates/pretixpresale/event/base.html:163 -#: pretix/presale/templates/pretixpresale/event/base.html:176 -#: pretix/presale/templates/pretixpresale/event/base.html:201 -#: pretix/presale/templates/pretixpresale/event/base.html:210 +#: pretix/presale/templates/pretixpresale/event/base.html:129 +#: pretix/presale/templates/pretixpresale/event/base.html:165 +#: pretix/presale/templates/pretixpresale/event/base.html:178 +#: pretix/presale/templates/pretixpresale/event/base.html:203 +#: pretix/presale/templates/pretixpresale/event/base.html:212 msgctxt "alert-messages" msgid "Warning" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:128 -#: pretix/presale/templates/pretixpresale/event/base.html:202 +#: pretix/presale/templates/pretixpresale/event/base.html:130 +#: pretix/presale/templates/pretixpresale/event/base.html:204 msgid "This ticket shop is currently in test mode." msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:131 -#: pretix/presale/templates/pretixpresale/event/base.html:205 +#: pretix/presale/templates/pretixpresale/event/base.html:133 +#: pretix/presale/templates/pretixpresale/event/base.html:207 msgid "" "Please do not perform any real purchases as your order might be deleted " "without notice." msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:135 +#: pretix/presale/templates/pretixpresale/event/base.html:137 #, python-format msgid "" "You are currently using the time machine. The ticket shop is rendered as if " "it were %(datetime)s." msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:143 -#: pretix/presale/templates/pretixpresale/event/base.html:153 +#: pretix/presale/templates/pretixpresale/event/base.html:145 +#: pretix/presale/templates/pretixpresale/event/base.html:155 #, python-format msgid "" "To view your shop at different points in time, you can enable the time machine." msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:164 -#: pretix/presale/templates/pretixpresale/event/base.html:211 +#: pretix/presale/templates/pretixpresale/event/base.html:166 +#: pretix/presale/templates/pretixpresale/event/base.html:213 msgid "" "Orders made through this sales channel cannot be deleted - even if the " "ticket shop is in test mode!" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:175 +#: pretix/presale/templates/pretixpresale/event/base.html:177 msgctxt "alert-messages" msgid "Error" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:177 +#: pretix/presale/templates/pretixpresale/event/base.html:179 msgctxt "alert-messages" msgid "Information" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:219 -#: pretix/presale/templates/pretixpresale/organizers/base.html:98 +#: pretix/presale/templates/pretixpresale/event/base.html:221 +#: pretix/presale/templates/pretixpresale/organizers/base.html:100 msgid "Contact event organizer" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:222 +#: pretix/presale/templates/pretixpresale/event/base.html:224 #: pretix/presale/templates/pretixpresale/fragment_modals.html:101 #: pretix/presale/templates/pretixpresale/fragment_modals.html:129 -#: pretix/presale/templates/pretixpresale/organizers/base.html:101 +#: pretix/presale/templates/pretixpresale/organizers/base.html:103 msgid "Privacy policy" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:225 -#: pretix/presale/templates/pretixpresale/organizers/base.html:104 +#: pretix/presale/templates/pretixpresale/event/base.html:227 +#: pretix/presale/templates/pretixpresale/organizers/base.html:106 msgid "Cookie settings" msgstr "" -#: pretix/presale/templates/pretixpresale/event/base.html:228 -#: pretix/presale/templates/pretixpresale/organizers/base.html:107 +#: pretix/presale/templates/pretixpresale/event/base.html:230 +#: pretix/presale/templates/pretixpresale/organizers/base.html:109 msgid "Imprint" msgstr "" @@ -28639,20 +28706,20 @@ msgstr "" msgid "Additional options for" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:64 +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:60 msgid "More recommendations" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:71 +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:67 msgid "Our recommendations" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:89 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:201 +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:85 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:202 #: pretix/presale/templates/pretixpresale/event/checkout_customer.html:129 -#: pretix/presale/templates/pretixpresale/event/checkout_membership.html:84 +#: pretix/presale/templates/pretixpresale/event/checkout_membership.html:78 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:124 -#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:186 +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:180 #: pretix/presale/templates/pretixpresale/organizers/customer_address_delete.html:28 #: pretix/presale/templates/pretixpresale/organizers/customer_profile_delete.html:28 msgid "Go back" @@ -28671,14 +28738,14 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/checkout_base.html:15 #: pretix/presale/templates/pretixpresale/event/checkout_base.html:21 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:20 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:21 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:8 #: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:11 msgid "Your cart" msgstr "" #: pretix/presale/templates/pretixpresale/event/checkout_base.html:28 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:30 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:31 #: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:18 msgid "Cart expired" msgstr "" @@ -28692,75 +28759,75 @@ msgstr "" msgid "Add tickets for a different date" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:7 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:9 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:8 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:10 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:11 msgid "Review order" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:12 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:13 msgid "Please review the details below and confirm your order." msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:14 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:15 msgid "Please hang tight, we're finalizing your order!" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:22 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:23 msgid "Add or remove tickets" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:44 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:45 msgid "Modify payment" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:45 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:76 -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:125 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:46 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:77 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:126 msgid "Modify" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:75 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:76 msgid "Modify invoice information" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:123 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:124 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:23 #: pretix/presale/templates/pretixpresale/event/order_modify.html:33 msgid "Contact information" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:124 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:125 msgid "Modify contact information" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:167 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:168 msgid "Confirmations" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:185 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:186 msgid "" "After you submitted your order using the button below, it will require " "approval by the event organizer before it can be confirmed and forms a valid " "contract." msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:187 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:188 msgid "" "We will send you an email as soon as the event organizer approved or " "rejected your order." msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:191 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:192 msgid "" "If your order was approved, we will send you a link that you can use to pay." msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:207 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:208 msgid "Place binding order" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:209 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:210 msgid "Submit registration" msgstr "" @@ -28819,7 +28886,7 @@ msgstr "" msgid "Selected add-ons" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_membership.html:68 +#: pretix/presale/templates/pretixpresale/event/checkout_membership.html:62 msgid "" "This product can only be purchased when you are logged in with a customer " "account that includes a valid membership or authorization for this type of " @@ -28886,7 +28953,7 @@ msgid "Auto-fill with address" msgstr "" #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:58 -#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:168 +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:162 msgid "Fill form" msgstr "" @@ -28894,11 +28961,11 @@ msgstr "" msgid "Copy answers from above" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:150 +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:144 msgid "Copy answers" msgstr "" -#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:159 +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:153 msgid "Auto-fill with profile" msgstr "" @@ -29189,85 +29256,85 @@ msgctxt "subevent" msgid "Date:" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:83 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:78 msgid "Location:" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:85 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:80 msgid "Show full location" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:96 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:91 msgid "Membership:" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:127 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:122 msgid "This ticket is blocked." msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:134 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:129 msgctxt "ticket_checkins" msgid "Usage:" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:138 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:133 #, python-format msgid "This ticket has been used once." msgid_plural "This ticket has been used %(count)s times." msgstr[0] "" msgstr[1] "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:170 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:165 msgid "No attendee name provided" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:223 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:218 msgid "The image you previously uploaded" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:269 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:342 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:264 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:337 msgid "The price of this product was reduced because of an automatic discount." msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:273 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:346 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:268 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:341 #, python-format msgid "%(percent)s %% Discount" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:277 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:350 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:272 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:345 msgid "Discounted" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:287 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:282 msgid "Okay, we're removing that…" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:292 -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:294 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:287 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:289 #, python-format msgid "Remove %(item)s from your cart" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:297 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:292 #, python-format msgid "Remove one %(item)s from your cart" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:299 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:294 #, python-format msgid "" "Remove one %(item)s from your cart. You currently have %(count)s in your " "cart." msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:307 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:302 msgid "We're trying to reserve another one for you!" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:308 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:303 #: pretix/presale/templates/pretixpresale/event/index.html:183 #: pretix/presale/templates/pretixpresale/event/seatingplan.html:24 #: pretix/presale/templates/pretixpresale/event/voucher.html:63 @@ -29277,48 +29344,48 @@ msgid "" "your purchase." msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:327 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:322 #, python-format msgid "Add one more %(item)s to your cart" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:329 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:324 #, python-format msgid "" "Add one more %(item)s to your cart. You currently have %(count)s in your " "cart." msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:389 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:384 #: pretix/presale/templates/pretixpresale/event/order_giftcard.html:20 #: pretix/presale/templates/pretixpresale/event/position_giftcard.html:20 msgid "Current value:" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:463 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:458 #, python-format msgid "One product" msgid_plural "%(num)s products" msgstr[0] "" msgstr[1] "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:477 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:472 #, python-format msgid "incl. %(tax_sum)s taxes" msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:494 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:489 #, python-format msgid "The items in your cart are reserved for you for %(minutes)s minutes." msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:498 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:493 msgid "" "The items in your cart are no longer reserved for you. You can still " "complete your order as long as they’re available." msgstr "" -#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:502 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:497 msgid "Overview of your ordered products." msgstr "" @@ -29434,9 +29501,9 @@ msgid "" msgstr "" #: pretix/presale/templates/pretixpresale/event/fragment_change_confirm.html:152 -#: pretix/presale/templates/pretixpresale/event/order.html:390 -#: pretix/presale/templates/pretixpresale/event/order.html:426 -#: pretix/presale/templates/pretixpresale/event/order.html:447 +#: pretix/presale/templates/pretixpresale/event/order.html:391 +#: pretix/presale/templates/pretixpresale/event/order.html:427 +#: pretix/presale/templates/pretixpresale/event/order.html:448 #: pretix/presale/templates/pretixpresale/event/order_cancel.html:113 msgid "" "The refund will be issued in form of a gift card that you can use for " @@ -29783,178 +29850,178 @@ msgstr "" msgid "Please try again later." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:12 -#: pretix/presale/templates/pretixpresale/event/order.html:29 +#: pretix/presale/templates/pretixpresale/event/order.html:13 +#: pretix/presale/templates/pretixpresale/event/order.html:30 msgid "Thank you!" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:14 -#: pretix/presale/templates/pretixpresale/event/order.html:32 +#: pretix/presale/templates/pretixpresale/event/order.html:15 +#: pretix/presale/templates/pretixpresale/event/order.html:33 msgid "Your order has been placed successfully. See below for details." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:16 -#: pretix/presale/templates/pretixpresale/event/order.html:48 +#: pretix/presale/templates/pretixpresale/event/order.html:17 +#: pretix/presale/templates/pretixpresale/event/order.html:49 msgid "Your order has been processed successfully! See below for details." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:18 -#: pretix/presale/templates/pretixpresale/event/order.html:50 +#: pretix/presale/templates/pretixpresale/event/order.html:19 +#: pretix/presale/templates/pretixpresale/event/order.html:51 msgid "We successfully received your payment. See below for details." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:35 +#: pretix/presale/templates/pretixpresale/event/order.html:36 msgid "" "Please note that we still await approval by the event organizer before your " "order is confirmed." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:39 +#: pretix/presale/templates/pretixpresale/event/order.html:40 msgid "" "Please note that we still await approval by the event organizer before you " "can pay and complete this order." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:43 +#: pretix/presale/templates/pretixpresale/event/order.html:44 msgid "Please note that we still await your payment to complete the process." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:55 +#: pretix/presale/templates/pretixpresale/event/order.html:56 msgid "" "Please bookmark or save the link to this exact page if you want to access " "your order later. We also sent you an email containing the link to the " "address you specified." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:58 +#: pretix/presale/templates/pretixpresale/event/order.html:59 msgid "" "Please save the following link if you want to access your order later. We " "also sent you an email containing the link to the address you specified." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:73 +#: pretix/presale/templates/pretixpresale/event/order.html:74 #: pretix/presale/templates/pretixpresale/event/position.html:18 msgid "View in backend" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:90 +#: pretix/presale/templates/pretixpresale/event/order.html:91 #, python-format msgid "A payment of %(total)s is still pending for this order." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:95 +#: pretix/presale/templates/pretixpresale/event/order.html:96 #, python-format msgid "Please complete your payment before %(date)s" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:107 +#: pretix/presale/templates/pretixpresale/event/order.html:108 msgid "Re-try payment or choose another payment method" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:125 +#: pretix/presale/templates/pretixpresale/event/order.html:126 msgid "" "We've received your request to cancel this order. Please stay patient while " "the event organizer decides on the cancellation." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:143 +#: pretix/presale/templates/pretixpresale/event/order.html:144 #, python-format msgid "A refund of %(amount)s will be sent out to you soon, please be patient." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:150 +#: pretix/presale/templates/pretixpresale/event/order.html:151 msgid "Print" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:152 +#: pretix/presale/templates/pretixpresale/event/order.html:153 #, python-format msgid "" "We've issued your refund of %(amount)s as a gift card. On your next purchase " "with us, you can use the following gift card code during payment:" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:162 +#: pretix/presale/templates/pretixpresale/event/order.html:163 #, python-format msgid "The current value of your gift card is %(value)s." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:169 +#: pretix/presale/templates/pretixpresale/event/order.html:170 #, python-format msgid "This gift card is valid until %(expiry)s." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:180 +#: pretix/presale/templates/pretixpresale/event/order.html:181 #, python-format msgid "" "A refund of %(amount)s has been sent to you. Depending on the payment " "method, please allow for up to 14 days until it shows up on your statement." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:198 +#: pretix/presale/templates/pretixpresale/event/order.html:199 #: pretix/presale/templates/pretixpresale/event/position.html:33 msgid "Change ordered items" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:199 -#: pretix/presale/templates/pretixpresale/event/order.html:290 +#: pretix/presale/templates/pretixpresale/event/order.html:200 +#: pretix/presale/templates/pretixpresale/event/order.html:291 #: pretix/presale/templates/pretixpresale/event/position.html:34 msgid "Change details" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:262 +#: pretix/presale/templates/pretixpresale/event/order.html:263 msgid "" "You need to select a payment method above before you can request an invoice." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:267 -#: pretix/presale/templates/pretixpresale/event/order.html:274 +#: pretix/presale/templates/pretixpresale/event/order.html:268 +#: pretix/presale/templates/pretixpresale/event/order.html:275 #: pretix/presale/templates/pretixpresale/event/order_modify.html:85 msgid "Request invoice" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:286 +#: pretix/presale/templates/pretixpresale/event/order.html:287 msgid "Your information" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:289 +#: pretix/presale/templates/pretixpresale/event/order.html:290 msgid "Change your information" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:334 +#: pretix/presale/templates/pretixpresale/event/order.html:335 msgid "Internal Reference" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:349 +#: pretix/presale/templates/pretixpresale/event/order.html:350 msgctxt "action" msgid "Change or cancel your order" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:351 +#: pretix/presale/templates/pretixpresale/event/order.html:352 msgctxt "action" msgid "Change your order" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:353 +#: pretix/presale/templates/pretixpresale/event/order.html:354 msgctxt "action" msgid "Cancel your order" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:361 +#: pretix/presale/templates/pretixpresale/event/order.html:362 msgid "" "If you want to make changes to the products you bought, you can click on the " "button to change your order." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:369 +#: pretix/presale/templates/pretixpresale/event/order.html:370 msgid "Change order" msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:381 +#: pretix/presale/templates/pretixpresale/event/order.html:382 #: pretix/presale/templates/pretixpresale/event/order_cancel.html:27 msgid "You can request to cancel this order." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:384 +#: pretix/presale/templates/pretixpresale/event/order.html:385 #: pretix/presale/templates/pretixpresale/event/order_cancel.html:30 msgid "" "If your request is approved, the organizer will determine if you will " @@ -29962,38 +30029,38 @@ msgid "" "their cancellation policy." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:392 -#: pretix/presale/templates/pretixpresale/event/order.html:428 -#: pretix/presale/templates/pretixpresale/event/order.html:449 +#: pretix/presale/templates/pretixpresale/event/order.html:393 +#: pretix/presale/templates/pretixpresale/event/order.html:429 +#: pretix/presale/templates/pretixpresale/event/order.html:450 msgid "" "The refund can be issued to your original payment method or as a gift card." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:394 -#: pretix/presale/templates/pretixpresale/event/order.html:430 -#: pretix/presale/templates/pretixpresale/event/order.html:451 +#: pretix/presale/templates/pretixpresale/event/order.html:395 +#: pretix/presale/templates/pretixpresale/event/order.html:431 +#: pretix/presale/templates/pretixpresale/event/order.html:452 msgid "The refund will be issued to your original payment method." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:396 -#: pretix/presale/templates/pretixpresale/event/order.html:409 -#: pretix/presale/templates/pretixpresale/event/order.html:432 -#: pretix/presale/templates/pretixpresale/event/order.html:453 -#: pretix/presale/templates/pretixpresale/event/order.html:465 -#: pretix/presale/templates/pretixpresale/event/order.html:470 +#: pretix/presale/templates/pretixpresale/event/order.html:397 +#: pretix/presale/templates/pretixpresale/event/order.html:410 +#: pretix/presale/templates/pretixpresale/event/order.html:433 +#: pretix/presale/templates/pretixpresale/event/order.html:454 +#: pretix/presale/templates/pretixpresale/event/order.html:466 +#: pretix/presale/templates/pretixpresale/event/order.html:471 msgid "This will invalidate all tickets in this order." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:401 +#: pretix/presale/templates/pretixpresale/event/order.html:402 msgid "" "You can request to cancel this order, but you will not receive a refund." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:405 +#: pretix/presale/templates/pretixpresale/event/order.html:406 msgid "You can cancel this order, but you will not receive a refund." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:414 +#: pretix/presale/templates/pretixpresale/event/order.html:415 #, python-format msgid "" "You can request to cancel this order. If your request is approved, a " @@ -30001,7 +30068,7 @@ msgid "" "receive a refund of the remainder." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:420 +#: pretix/presale/templates/pretixpresale/event/order.html:421 #, python-format msgid "" "You can cancel this order. In this case, a cancellation fee of " @@ -30009,17 +30076,17 @@ msgid "" "remainder." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:437 +#: pretix/presale/templates/pretixpresale/event/order.html:438 msgid "" "You can request to cancel this order. If your request is approved, you get a " "full refund." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:442 +#: pretix/presale/templates/pretixpresale/event/order.html:443 msgid "You can cancel this order and receive a full refund." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:461 +#: pretix/presale/templates/pretixpresale/event/order.html:462 #: pretix/presale/templates/pretixpresale/event/order_cancel.html:54 #, python-format msgid "" @@ -30027,7 +30094,7 @@ msgid "" "required to pay a cancellation fee of %(fee)s." msgstr "" -#: pretix/presale/templates/pretixpresale/event/order.html:467 +#: pretix/presale/templates/pretixpresale/event/order.html:468 msgid "You can cancel this order using the following button." msgstr "" @@ -30704,11 +30771,11 @@ msgstr "" msgid "Event list" msgstr "" -#: pretix/presale/templates/pretixpresale/organizers/index.html:39 +#: pretix/presale/templates/pretixpresale/organizers/index.html:38 msgid "Past events" msgstr "" -#: pretix/presale/templates/pretixpresale/organizers/index.html:41 +#: pretix/presale/templates/pretixpresale/organizers/index.html:40 msgid "Upcoming events" msgstr "" @@ -30717,19 +30784,19 @@ msgctxt "subevent" msgid "Multiple dates" msgstr "" -#: pretix/presale/templates/pretixpresale/organizers/index.html:105 +#: pretix/presale/templates/pretixpresale/organizers/index.html:106 msgid "No archived events found." msgstr "" -#: pretix/presale/templates/pretixpresale/organizers/index.html:105 +#: pretix/presale/templates/pretixpresale/organizers/index.html:106 msgid "Show upcoming" msgstr "" -#: pretix/presale/templates/pretixpresale/organizers/index.html:107 +#: pretix/presale/templates/pretixpresale/organizers/index.html:108 msgid "No public upcoming events found." msgstr "" -#: pretix/presale/templates/pretixpresale/organizers/index.html:107 +#: pretix/presale/templates/pretixpresale/organizers/index.html:108 msgid "Show past events" msgstr "" @@ -30763,43 +30830,43 @@ msgid "" "{amount}." msgstr "" -#: pretix/presale/views/cart.py:200 +#: pretix/presale/views/cart.py:202 msgid "Please enter positive numbers only." msgstr "" -#: pretix/presale/views/cart.py:439 +#: pretix/presale/views/cart.py:441 msgid "We applied the voucher to as many products in your cart as we could." msgstr "" -#: pretix/presale/views/cart.py:458 pretix/presale/views/cart.py:466 +#: pretix/presale/views/cart.py:460 pretix/presale/views/cart.py:468 msgid "" "The gift card has been saved to your cart. Please continue your checkout." msgstr "" -#: pretix/presale/views/cart.py:502 +#: pretix/presale/views/cart.py:504 msgid "Your cart has been updated." msgstr "" -#: pretix/presale/views/cart.py:505 pretix/presale/views/cart.py:531 +#: pretix/presale/views/cart.py:507 pretix/presale/views/cart.py:533 msgid "Your cart is now empty." msgstr "" -#: pretix/presale/views/cart.py:546 +#: pretix/presale/views/cart.py:548 msgid "The products have been successfully added to your cart." msgstr "" -#: pretix/presale/views/cart.py:570 pretix/presale/views/event.py:536 +#: pretix/presale/views/cart.py:572 pretix/presale/views/event.py:540 #: pretix/presale/views/widget.py:377 msgid "Tickets for this event cannot be purchased on this sales channel." msgstr "" -#: pretix/presale/views/cart.py:709 +#: pretix/presale/views/cart.py:711 msgid "" "The gift card has been saved to your cart. Please now select the products " "you want to purchase." msgstr "" -#: pretix/presale/views/cart.py:737 +#: pretix/presale/views/cart.py:739 msgctxt "subevent" msgid "We were unable to find the specified date." msgstr "" @@ -30856,38 +30923,38 @@ msgid "" "used for a different account in this system." msgstr "" -#: pretix/presale/views/event.py:895 +#: pretix/presale/views/event.py:899 msgid "Unknown event code or not authorized to access this event." msgstr "" -#: pretix/presale/views/event.py:902 +#: pretix/presale/views/event.py:906 msgctxt "subevent" msgid "No date selected." msgstr "" -#: pretix/presale/views/event.py:905 +#: pretix/presale/views/event.py:909 msgctxt "subevent" msgid "Unknown date selected." msgstr "" -#: pretix/presale/views/event.py:930 pretix/presale/views/event.py:938 -#: pretix/presale/views/event.py:941 +#: pretix/presale/views/event.py:934 pretix/presale/views/event.py:942 +#: pretix/presale/views/event.py:945 msgid "Please go back and try again." msgstr "" -#: pretix/presale/views/event.py:954 +#: pretix/presale/views/event.py:958 msgid "Fake date time" msgstr "" -#: pretix/presale/views/event.py:966 +#: pretix/presale/views/event.py:970 msgid "You are not allowed to access time machine mode." msgstr "" -#: pretix/presale/views/event.py:968 +#: pretix/presale/views/event.py:972 msgid "This feature is only available in test mode." msgstr "" -#: pretix/presale/views/event.py:985 +#: pretix/presale/views/event.py:989 msgid "Time machine disabled!" msgstr "" diff --git a/src/pretix/locale/ang/LC_MESSAGES/djangojs.po b/src/pretix/locale/ang/LC_MESSAGES/djangojs.po index 1167f30199..0b93a0ab1c 100644 --- a/src/pretix/locale/ang/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/ang/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-25 10:10+0000\n" +"POT-Creation-Date: 2025-03-25 15:46+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -663,6 +663,10 @@ msgstr "" msgid "Calculating default price…" msgstr "" +#: pretix/static/pretixcontrol/js/ui/plugins.js:69 +msgid "No results" +msgstr "" + #: pretix/static/pretixcontrol/js/ui/question.js:42 msgid "Others" msgstr "" @@ -705,15 +709,15 @@ msgstr "" msgid "Please enter the amount the organizer can keep." msgstr "" -#: pretix/static/pretixpresale/js/ui/main.js:446 +#: pretix/static/pretixpresale/js/ui/main.js:445 msgid "Please enter a quantity for one of the ticket types." msgstr "" -#: pretix/static/pretixpresale/js/ui/main.js:498 +#: pretix/static/pretixpresale/js/ui/main.js:497 msgid "required" msgstr "" -#: pretix/static/pretixpresale/js/ui/main.js:542 +#: pretix/static/pretixpresale/js/ui/main.js:541 #: pretix/static/pretixpresale/js/ui/main.js:561 msgid "Time zone:" msgstr "" diff --git a/src/pretix/locale/ar/LC_MESSAGES/django.po b/src/pretix/locale/ar/LC_MESSAGES/django.po index c27bb739e4..a9d3f78577 100644 --- a/src/pretix/locale/ar/LC_MESSAGES/django.po +++ b/src/pretix/locale/ar/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-25 10:10+0000\n" +"POT-Creation-Date: 2025-03-25 15:44+0000\n" "PO-Revision-Date: 2025-02-21 19:00+0000\n" "Last-Translator: anonymous \n" "Language-Team: Arabic
{% endfor %} diff --git a/src/pretix/plugins/statistics/apps.py b/src/pretix/plugins/statistics/apps.py index 79b82f70ca..580782e4ce 100644 --- a/src/pretix/plugins/statistics/apps.py +++ b/src/pretix/plugins/statistics/apps.py @@ -35,6 +35,9 @@ class StatisticsApp(AppConfig): version = version category = 'FEATURE' description = _("Get a birds-eye view of your event sales with graphical statistics.") + navigation_links = [ + ((_("Orders"), _("Statistics")), "plugins:statistics:index", {}), + ] def ready(self): from . import signals # NOQA diff --git a/src/pretix/plugins/stripe/apps.py b/src/pretix/plugins/stripe/apps.py index b66257d1fe..de478128f6 100644 --- a/src/pretix/plugins/stripe/apps.py +++ b/src/pretix/plugins/stripe/apps.py @@ -40,6 +40,9 @@ class StripeApp(AppConfig): description = _("Accept payments via Stripe, a globally popular payment service provider. Stripe supports " "payments via credit cards as well as many local payment methods such as iDEAL, Alipay," "and many more.") + settings_links = [ + ((_("Payment"), _("Stripe")), "control:event.settings.payment.provider", {"provider": "stripe_settings"}), + ] def ready(self): from . import signals, tasks # NOQA diff --git a/src/pretix/plugins/ticketoutputpdf/apps.py b/src/pretix/plugins/ticketoutputpdf/apps.py index 9adfbefa54..b307dd9a20 100644 --- a/src/pretix/plugins/ticketoutputpdf/apps.py +++ b/src/pretix/plugins/ticketoutputpdf/apps.py @@ -51,6 +51,9 @@ class TicketOutputPdfApp(AppConfig): featured = True description = _("Issue tickets as PDF files, usable on any device. Our drag-and-drop editor allows you to " "customize the layout of the PDF files to your brand.") + settings_links = [ + ((_("Settings"), _("Tickets")), "control:event.settings.tickets", {}), + ] def ready(self): from . import signals # NOQA diff --git a/src/pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html b/src/pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html index be567bef3b..7a1b5f2084 100644 --- a/src/pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html +++ b/src/pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html @@ -11,7 +11,7 @@ - {% trans "Open Layout Designer" %} + {% trans "Open layout editor" %} diff --git a/src/pretix/plugins/webcheckin/apps.py b/src/pretix/plugins/webcheckin/apps.py index a9c51233c5..af85d47037 100644 --- a/src/pretix/plugins/webcheckin/apps.py +++ b/src/pretix/plugins/webcheckin/apps.py @@ -36,6 +36,9 @@ class WebCheckinApp(AppConfig): experimental = True category = "FEATURE" description = _("Turn your browser into a check-in device to perform access control.") + navigation_links = [ + ((_("Check-in"), _("Web Check-in")), "plugins:webcheckin:index", {}), + ] def ready(self): from . import signals # NOQA diff --git a/src/pretix/presale/context.py b/src/pretix/presale/context.py index ebb939b9e8..2bfeac2c50 100644 --- a/src/pretix/presale/context.py +++ b/src/pretix/presale/context.py @@ -40,7 +40,7 @@ from django.utils.translation import get_language_info from django_scopes import get_scope from i18nfield.strings import LazyI18nString -from pretix.base.settings import GlobalSettingsObject +from pretix.base.settings import COUNTRY_STATE_LABEL, GlobalSettingsObject from pretix.helpers.i18n import ( get_javascript_format_without_seconds, get_moment_locale, ) @@ -52,7 +52,6 @@ from .signals import ( footer_link, global_footer_link, global_html_footer, global_html_head, global_html_page_header, html_footer, html_head, html_page_header, ) -from .views.cart import cart_session, get_or_create_cart_id from .views.theme import _get_source_cache_key logger = logging.getLogger(__name__) @@ -157,10 +156,9 @@ def _default_context(request): ctx['languages'] = [get_language_info(code) for code in request.event.settings.locales] ctx['cookie_providers'] = get_cookie_providers(request.event, request) - if get_or_create_cart_id(request, create=False): - c = cart_session(request) - if "widget_data" in c and c["widget_data"].get("consent"): - ctx['cookie_consent_from_widget'] = c["widget_data"].get("consent").split(",") + if 'requested_consent_from_widget' in request.session: + # We only need to present this to the frontend once, JavaScript will then save it to localStorage/sessionStorage + ctx['cookie_consent_from_widget'] = request.session.pop("requested_consent_from_widget").split(",") if request.resolver_match: ctx['cart_namespace'] = request.resolver_match.kwargs.get('cart_namespace', '') @@ -189,6 +187,7 @@ def _default_context(request): ctx['html_locale'] = translation.get_language_info(get_language_without_region()).get('public_code', translation.get_language()) ctx['settings'] = pretix_settings ctx['django_settings'] = settings + ctx['COUNTRY_STATE_LABEL'] = COUNTRY_STATE_LABEL ctx['ie_deprecation_warning'] = 'MSIE' in request.headers.get('User-Agent', '') or 'Trident/' in request.headers.get('User-Agent', '') diff --git a/src/pretix/presale/templates/pretixpresale/event/base.html b/src/pretix/presale/templates/pretixpresale/event/base.html index 8da6f083ed..272149b7c1 100644 --- a/src/pretix/presale/templates/pretixpresale/event/base.html +++ b/src/pretix/presale/templates/pretixpresale/event/base.html @@ -15,6 +15,8 @@ {% block custom_header %} {% if event.settings.meta_noindex %} + {% elif "date" in request.GET or "old" in request.GET %} + {% endif %} {% if social_image %} diff --git a/src/pretix/presale/templates/pretixpresale/event/checkout_addons.html b/src/pretix/presale/templates/pretixpresale/event/checkout_addons.html index 30f1a8b462..6913f48d6e 100644 --- a/src/pretix/presale/templates/pretixpresale/event/checkout_addons.html +++ b/src/pretix/presale/templates/pretixpresale/event/checkout_addons.html @@ -42,11 +42,7 @@ {% if form.pos.subevent %}

- {{ form.pos.subevent.name }} · {{ form.pos.subevent.get_date_range_display_as_html }} - {% if form.pos.event.settings.show_times %} - - {{ form.pos.subevent.date_from|date:"TIME_FORMAT" }} - {% endif %} + {{ form.pos.subevent.name }} · {{ form.pos.subevent.get_date_range_display_with_times_as_html }}

{% endif %} {% include "pretixpresale/event/fragment_addon_choice.html" with form=form %} diff --git a/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html b/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html index b74d399aac..42156a81ed 100644 --- a/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html +++ b/src/pretix/presale/templates/pretixpresale/event/checkout_confirm.html @@ -4,6 +4,7 @@ {% load money %} {% load eventurl %} {% load eventsignal %} +{% load getitem %} {% block title %}{% trans "Review order" %}{% endblock %} {% block content %}
@@ -92,7 +93,7 @@
{% trans "Country" %}
{{ addr.country.name }}
{% if addr.state %} -
{% trans "State" context "address" %}
+
{% trans "State" context "address" as state_label %}{{ COUNTRY_STATE_LABEL|getitem:addr.country.code|default:state_label }}
{{ addr.state_name }}
{% endif %} {% if request.event.settings.invoice_address_vatid and addr.vat_id %} diff --git a/src/pretix/presale/templates/pretixpresale/event/checkout_membership.html b/src/pretix/presale/templates/pretixpresale/event/checkout_membership.html index 51b54438e9..14f54e2020 100644 --- a/src/pretix/presale/templates/pretixpresale/event/checkout_membership.html +++ b/src/pretix/presale/templates/pretixpresale/event/checkout_membership.html @@ -52,13 +52,7 @@
    - {{ form.position.subevent.name }} · {{ form.position.subevent.get_date_range_display_as_html }} - {% if form.position.event.settings.show_times %} - - - {{ form.position.subevent.date_from|date:"TIME_FORMAT" }} - - {% endif %} + {{ form.position.subevent.name }} · {{ form.position.subevent.get_date_range_display_with_times_as_html }}
diff --git a/src/pretix/presale/templates/pretixpresale/event/checkout_questions.html b/src/pretix/presale/templates/pretixpresale/event/checkout_questions.html index 2bf004bd7a..bbacb58ed4 100644 --- a/src/pretix/presale/templates/pretixpresale/event/checkout_questions.html +++ b/src/pretix/presale/templates/pretixpresale/event/checkout_questions.html @@ -130,13 +130,7 @@
    - {{ pos.subevent.name }} · {{ pos.subevent.get_date_range_display_as_html }} - {% if pos.event.settings.show_times %} - - - {{ pos.subevent.date_from|date:"TIME_FORMAT" }} - - {% endif %} + {{ pos.subevent.name }} · {{ pos.subevent.get_date_range_display_with_times_as_html }}
diff --git a/src/pretix/presale/templates/pretixpresale/event/fragment_cart.html b/src/pretix/presale/templates/pretixpresale/event/fragment_cart.html index 23dae50c8a..cb83f25f0c 100644 --- a/src/pretix/presale/templates/pretixpresale/event/fragment_cart.html +++ b/src/pretix/presale/templates/pretixpresale/event/fragment_cart.html @@ -62,12 +62,7 @@ {{ line.subevent.name }}
@@ -200,8 +195,8 @@ {{ line.street|default_if_none:""|linebreaksbr }}
{{ line.zipcode|default_if_none:"" }} {{ line.city|default_if_none:"" }}
+ {% if line.state %}{{ line.state_for_address }}
{% endif %} {{ line.country.name|default_if_none:"" }} - {% if line.state %}
{{ line.state }}{% endif %}
{% endif %} diff --git a/src/pretix/presale/templates/pretixpresale/event/fragment_change_form.html b/src/pretix/presale/templates/pretixpresale/event/fragment_change_form.html index 7ef183ae62..a3d13988e1 100644 --- a/src/pretix/presale/templates/pretixpresale/event/fragment_change_form.html +++ b/src/pretix/presale/templates/pretixpresale/event/fragment_change_form.html @@ -21,11 +21,7 @@
    - {{ position.subevent.name }} · {{ position.subevent.get_date_range_display_as_html }} - {% if position.event.settings.show_times %} - - {{ position.subevent.date_from|date:"TIME_FORMAT" }} - {% endif %} + {{ position.subevent.name }} · {{ position.subevent.get_date_range_display_with_times_as_html }}
diff --git a/src/pretix/presale/templates/pretixpresale/event/order.html b/src/pretix/presale/templates/pretixpresale/event/order.html index 62c9c11a83..7750f3c2cd 100644 --- a/src/pretix/presale/templates/pretixpresale/event/order.html +++ b/src/pretix/presale/templates/pretixpresale/event/order.html @@ -7,6 +7,7 @@ {% load eventurl %} {% load phone_format %} {% load rich_text %} +{% load getitem %} {% block title %} {% if "thanks" in request.GET or "paid" in request.GET %} {% trans "Thank you!" %} @@ -319,7 +320,7 @@
{% trans "Country" %}
{{ order.invoice_address.country.name|default:order.invoice_address.country_old }}
{% if order.invoice_address.state %} -
{% trans "State" context "address" %}
+
{% trans "State" context "address" as state_label %}{{ COUNTRY_STATE_LABEL|getitem:order.invoice_address.country.code|default:state_label }}
{{ order.invoice_address.state_name }}
{% endif %} {% if request.event.settings.invoice_address_vatid and order.invoice_address.vat_id %} diff --git a/src/pretix/presale/templates/pretixpresale/organizers/base.html b/src/pretix/presale/templates/pretixpresale/organizers/base.html index cd3bd346ad..f83ea52138 100644 --- a/src/pretix/presale/templates/pretixpresale/organizers/base.html +++ b/src/pretix/presale/templates/pretixpresale/organizers/base.html @@ -11,6 +11,8 @@ {% block custom_header %} {% if organizer.settings.meta_noindex %} + {% elif "date" in request.GET or "old" in request.GET %} + {% endif %} diff --git a/src/pretix/presale/templates/pretixpresale/organizers/index.html b/src/pretix/presale/templates/pretixpresale/organizers/index.html index 33f9381ff2..4a7bb82242 100644 --- a/src/pretix/presale/templates/pretixpresale/organizers/index.html +++ b/src/pretix/presale/templates/pretixpresale/organizers/index.html @@ -30,24 +30,24 @@ - {% if events %} -
-
-

- - {% if "old" in request.GET %} - {% trans "Past events" %} - {% else %} - {% trans "Upcoming events" %} - {% endif %} - -

-
- {% if filter_form.fields %} -
- {% include "pretixpresale/fragment_event_list_filter.html" with request=request %} -
- {% endif %} +
{% include "pretixpresale/pagination.html" %} {% endblock %} diff --git a/src/pretix/presale/views/__init__.py b/src/pretix/presale/views/__init__.py index e5dd3de071..5b893c3dd6 100644 --- a/src/pretix/presale/views/__init__.py +++ b/src/pretix/presale/views/__init__.py @@ -467,6 +467,9 @@ def iframe_entry_view_wrapper(view_func): if 'iframe' in request.GET: request.session['iframe_session'] = True + if request.GET.get("consent"): + request.session["requested_consent_from_widget"] = request.GET["consent"] + locale = request.GET.get('locale') if locale and locale in [lc for lc, ll in settings.LANGUAGES]: lng = locale diff --git a/src/pretix/presale/views/cart.py b/src/pretix/presale/views/cart.py index 35ec6304b6..a823e6674a 100644 --- a/src/pretix/presale/views/cart.py +++ b/src/pretix/presale/views/cart.py @@ -158,11 +158,13 @@ def _item_from_post_value(request, key, value, voucher=None, voucher_ignore_if_r return subevent = None + prefix = '' if key.startswith('subevent_'): try: parts = key.split('_', 2) subevent = int(parts[1]) key = parts[2] + prefix = f'subevent_{subevent}_' except ValueError: pass elif 'subevent' in request.POST: @@ -175,7 +177,7 @@ def _item_from_post_value(request, key, value, voucher=None, voucher_ignore_if_r return parts = key.split("_") - price = request.POST.get('price_' + "_".join(parts[1:]), "") + price = request.POST.get(prefix + 'price_' + "_".join(parts[1:]), "") if key.startswith('seat_'): try: diff --git a/src/pretix/presale/views/event.py b/src/pretix/presale/views/event.py index 63e66e5266..ac6b9055de 100644 --- a/src/pretix/presale/views/event.py +++ b/src/pretix/presale/views/event.py @@ -500,33 +500,37 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView): self.subevent = None utm_params = {k: v for k, v in request.GET.items() if k.startswith("utm_")} + pass_through_url_params = utm_params | \ + {k: v for k, v in request.GET.items() if k in ("locale", "consent")} | \ + ({"widget_data": request.GET.get('widget_data')} if len(self.request.GET.get('widget_data', '{}')) > 3 else {}) + if request.GET.get('src', '') == 'widget' and 'take_cart_id' in request.GET: # User has clicked "Open in a new tab" link in widget get_or_create_cart_id(request) return redirect_to_url(eventreverse(request.event, 'presale:event.index', kwargs=kwargs) + '?' + urlencode(utm_params)) - elif request.GET.get('iframe', '') == '1' and 'take_cart_id' in request.GET: - # Widget just opened, a cart already exists. Let's to a stupid redirect to check if cookies are disabled - get_or_create_cart_id(request) + elif request.GET.get('iframe', '') == '1' and ( + 'take_cart_id' in request.GET or len(self.request.GET.get('widget_data', '{}')) > 3 or 'consent' in request.GET + ): + # Widget just opened, and a cart already exists or we have been passed widget_data. + # Let's do a stupid redirect to check if cookies are disabled. return redirect_to_url(eventreverse(request.event, 'presale:event.index', kwargs=kwargs) + '?' + urlencode({ 'require_cookie': 'true', - 'cart_id': request.GET.get('take_cart_id'), - **({"locale": request.GET.get('locale')} if request.GET.get('locale') else {}), - **utm_params, + 'cart_id': get_or_create_cart_id(request), + **pass_through_url_params, })) - elif request.GET.get('iframe', '') == '1' and len(self.request.GET.get('widget_data', '{}')) > 3: - # We've been passed data from a widget, we need to create a cart session to store it. - get_or_create_cart_id(request) elif 'require_cookie' in request.GET and settings.SESSION_COOKIE_NAME not in request.COOKIES and \ '__Host-' + settings.SESSION_COOKIE_NAME not in self.request.COOKIES: # Cookies are in fact not supported r = render(request, 'pretixpresale/event/cookies.html', { 'url': eventreverse( - request.event, "presale:event.index", kwargs={'cart_namespace': kwargs.get('cart_namespace') or ''} + request.event, "presale:event.index", kwargs={ + 'cart_namespace': kwargs.get('cart_namespace') or '', + **({"subevent": kwargs['subevent']} if kwargs.get('subevent') else {}), + } ) + "?" + urlencode({ "src": "widget", - **({"locale": request.GET.get('locale')} if request.GET.get('locale') else {}), **({"take_cart_id": request.GET.get('cart_id')} if request.GET.get('cart_id') else {}), - **utm_params, + **pass_through_url_params, }) }) r._csp_ignore = True diff --git a/src/pretix/static/npm_dir/package-lock.json b/src/pretix/static/npm_dir/package-lock.json index f9146a55ad..396ab79434 100644 --- a/src/pretix/static/npm_dir/package-lock.json +++ b/src/pretix/static/npm_dir/package-lock.json @@ -8,8 +8,8 @@ "name": "pretix", "version": "0.0.0", "dependencies": { - "@babel/core": "^7.26.7", - "@babel/preset-env": "^7.26.7", + "@babel/core": "^7.26.9", + "@babel/preset-env": "^7.26.9", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^16.0.0", "rollup": "^2.79.1", @@ -44,30 +44,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", - "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", - "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", + "@babel/generator": "^7.26.9", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.7", - "@babel/parser": "^7.26.7", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.26.7", - "@babel/types": "^7.26.7", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -102,13 +102,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", - "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", + "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.5", - "@babel/types": "^7.26.5", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -231,9 +231,10 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -387,25 +388,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", - "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", + "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", - "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.7" + "@babel/types": "^7.26.9" }, "bin": { "parser": "bin/babel-parser.js" @@ -557,13 +558,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/traverse": "^7.26.8" }, "engines": { "node": ">=6.9.0" @@ -783,11 +785,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { @@ -1197,11 +1200,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1285,12 +1289,12 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.7.tgz", - "integrity": "sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.5", + "@babel/compat-data": "^7.26.8", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", @@ -1304,7 +1308,7 @@ "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", "@babel/plugin-transform-async-to-generator": "^7.25.9", "@babel/plugin-transform-block-scoped-functions": "^7.26.5", "@babel/plugin-transform-block-scoping": "^7.25.9", @@ -1319,7 +1323,7 @@ "@babel/plugin-transform-dynamic-import": "^7.25.9", "@babel/plugin-transform-exponentiation-operator": "^7.26.3", "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", "@babel/plugin-transform-function-name": "^7.25.9", "@babel/plugin-transform-json-strings": "^7.25.9", "@babel/plugin-transform-literals": "^7.25.9", @@ -1347,7 +1351,7 @@ "@babel/plugin-transform-shorthand-properties": "^7.25.9", "@babel/plugin-transform-spread": "^7.25.9", "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", "@babel/plugin-transform-typeof-symbol": "^7.26.7", "@babel/plugin-transform-unicode-escapes": "^7.25.9", "@babel/plugin-transform-unicode-property-regex": "^7.25.9", @@ -1355,9 +1359,9 @@ "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", + "core-js-compat": "^3.40.0", "semver": "^6.3.1" }, "engines": { @@ -1389,9 +1393,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1400,29 +1405,30 @@ } }, "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", - "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", + "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.7", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7", + "@babel/generator": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1431,9 +1437,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", - "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", + "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -1763,12 +1769,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -1848,9 +1855,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "funding": [ { "type": "opencollective", @@ -1865,10 +1872,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { @@ -1898,9 +1906,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001676", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001676.tgz", - "integrity": "sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw==", + "version": "1.0.30001701", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001701.tgz", + "integrity": "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==", "funding": [ { "type": "opencollective", @@ -1914,7 +1922,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "2.4.2", @@ -2044,11 +2053,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3" + "browserslist": "^4.24.4" }, "funding": { "type": "opencollective", @@ -2177,9 +2187,10 @@ "optional": true }, "node_modules/electron-to-chromium": { - "version": "1.5.50", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.50.tgz", - "integrity": "sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==" + "version": "1.5.109", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.109.tgz", + "integrity": "sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ==", + "license": "ISC" }, "node_modules/emojis-list": { "version": "2.1.0", @@ -2835,9 +2846,10 @@ "optional": true }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -3777,25 +3789,25 @@ } }, "@babel/compat-data": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", - "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==" + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==" }, "@babel/core": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", - "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", + "@babel/generator": "^7.26.9", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.7", - "@babel/parser": "^7.26.7", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.26.7", - "@babel/types": "^7.26.7", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -3816,12 +3828,12 @@ } }, "@babel/generator": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", - "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", + "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", "requires": { - "@babel/parser": "^7.26.5", - "@babel/types": "^7.26.5", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -3918,9 +3930,9 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", "requires": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -4025,20 +4037,20 @@ } }, "@babel/helpers": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", - "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", + "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", "requires": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10" } }, "@babel/parser": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", - "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", "requires": { - "@babel/types": "^7.26.7" + "@babel/types": "^7.26.9" } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { @@ -4125,13 +4137,13 @@ } }, "@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", "requires": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/traverse": "^7.26.8" } }, "@babel/plugin-transform-async-to-generator": { @@ -4259,11 +4271,11 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", "requires": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" } }, @@ -4503,11 +4515,11 @@ } }, "@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" } }, "@babel/plugin-transform-typeof-symbol": { @@ -4554,11 +4566,11 @@ } }, "@babel/preset-env": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.7.tgz", - "integrity": "sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", "requires": { - "@babel/compat-data": "^7.26.5", + "@babel/compat-data": "^7.26.8", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", @@ -4572,7 +4584,7 @@ "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", "@babel/plugin-transform-async-to-generator": "^7.25.9", "@babel/plugin-transform-block-scoped-functions": "^7.26.5", "@babel/plugin-transform-block-scoping": "^7.25.9", @@ -4587,7 +4599,7 @@ "@babel/plugin-transform-dynamic-import": "^7.25.9", "@babel/plugin-transform-exponentiation-operator": "^7.26.3", "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", "@babel/plugin-transform-function-name": "^7.25.9", "@babel/plugin-transform-json-strings": "^7.25.9", "@babel/plugin-transform-literals": "^7.25.9", @@ -4615,7 +4627,7 @@ "@babel/plugin-transform-shorthand-properties": "^7.25.9", "@babel/plugin-transform-spread": "^7.25.9", "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", "@babel/plugin-transform-typeof-symbol": "^7.26.7", "@babel/plugin-transform-unicode-escapes": "^7.25.9", "@babel/plugin-transform-unicode-property-regex": "^7.25.9", @@ -4623,9 +4635,9 @@ "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", + "core-js-compat": "^3.40.0", "semver": "^6.3.1" }, "dependencies": { @@ -4647,41 +4659,41 @@ } }, "@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", "requires": { "regenerator-runtime": "^0.14.0" } }, "@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", "requires": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" } }, "@babel/traverse": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", - "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", + "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", "requires": { "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.7", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7", + "@babel/generator": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", - "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", + "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", "requires": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" @@ -4907,12 +4919,12 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" } }, "babel-plugin-polyfill-regenerator": { @@ -4974,13 +4986,13 @@ } }, "browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "requires": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" } }, @@ -4998,9 +5010,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001676", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001676.tgz", - "integrity": "sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw==" + "version": "1.0.30001701", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001701.tgz", + "integrity": "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==" }, "chalk": { "version": "2.4.2", @@ -5114,11 +5126,11 @@ } }, "core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", "requires": { - "browserslist": "^4.23.3" + "browserslist": "^4.24.4" } }, "css": { @@ -5218,9 +5230,9 @@ "optional": true }, "electron-to-chromium": { - "version": "1.5.50", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.50.tgz", - "integrity": "sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==" + "version": "1.5.109", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.109.tgz", + "integrity": "sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ==" }, "emojis-list": { "version": "2.1.0", @@ -5706,9 +5718,9 @@ "optional": true }, "node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" }, "normalize-path": { "version": "3.0.0", diff --git a/src/pretix/static/npm_dir/package.json b/src/pretix/static/npm_dir/package.json index 8a34ce4ea5..25009bb9ba 100644 --- a/src/pretix/static/npm_dir/package.json +++ b/src/pretix/static/npm_dir/package.json @@ -4,8 +4,8 @@ "private": true, "scripts": {}, "dependencies": { - "@babel/core": "^7.26.7", - "@babel/preset-env": "^7.26.7", + "@babel/core": "^7.26.9", + "@babel/preset-env": "^7.26.9", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^16.0.0", "vue": "^2.7.16", diff --git a/src/pretix/static/pretixbase/js/addressform.js b/src/pretix/static/pretixbase/js/addressform.js index 5cae95100d..fe29408037 100644 --- a/src/pretix/static/pretixbase/js/addressform.js +++ b/src/pretix/static/pretixbase/js/addressform.js @@ -44,6 +44,10 @@ $(function () { ); } + if ('label' in options) { + dependent.closest(".form-group").find(".control-label").text(options.label); + } + const required = 'required' in options && options.required && isRequired && visible; dependent.closest(".form-group").toggle(visible).toggleClass('required', required); dependent.prop("required", required); diff --git a/src/pretix/static/pretixbase/scss/_theme.scss b/src/pretix/static/pretixbase/scss/_theme.scss index 8489ce30b7..9e7d0eb249 100644 --- a/src/pretix/static/pretixbase/scss/_theme.scss +++ b/src/pretix/static/pretixbase/scss/_theme.scss @@ -114,6 +114,10 @@ input[type=number]::-webkit-outer-spin-button { background: transparent; border: transparent; } + +.btn-group-flex { display: flex; } +.btn-group-flex > .btn { flex: 1; } + .panel-heading { border-radius: 0; } diff --git a/src/pretix/static/pretixcontrol/js/ui/editor.js b/src/pretix/static/pretixcontrol/js/ui/editor.js index d91f587a78..5df1b3dda4 100644 --- a/src/pretix/static/pretixcontrol/js/ui/editor.js +++ b/src/pretix/static/pretixcontrol/js/ui/editor.js @@ -1115,7 +1115,7 @@ var editor = { }, _on_keydown: function (e) { - var step = e.shiftKey ? editor._mm2px(10) : editor._mm2px(1); + var step = editor._mm2px(e.shiftKey ? 10 : (e.altKey ? 0.1 : 1)); var thing = editor.fabric.getActiveObject(); if ($("#source-container").is(':visible')) { return true; diff --git a/src/pretix/static/pretixcontrol/js/ui/plugins.js b/src/pretix/static/pretixcontrol/js/ui/plugins.js new file mode 100644 index 0000000000..ba862c95ff --- /dev/null +++ b/src/pretix/static/pretixcontrol/js/ui/plugins.js @@ -0,0 +1,84 @@ +$(function() { + var plugins = $(".plugin-container").toArray().map(function(el) { + return { + sortName: el.getAttribute('data-plugin-name').toLowerCase().replace(/pretix /g, ''), + name: el.getAttribute('data-plugin-name').toLowerCase(), + module: el.getAttribute('data-plugin-module').toLowerCase(), + description: $(el).find('.plugin-description').text().toLowerCase(), + html: el.outerHTML, + category: $(el).closest('[data-plugin-category]').attr('data-plugin-category'), + categoryLabel: $(el).closest('[data-plugin-category]').attr('data-plugin-category-label'), + active: !!$(el).has('[data-is-active]').length, + } + }); + function SearchMatcher(term, fields) { + this.searchFor = term.toLowerCase().split(/\s+/); + this.fields = fields; + } + function inStringRanked(haystack, needle) { + let pos = -1, rank = 0; + do { + pos = haystack.indexOf(needle, pos + 1); + if (pos !== -1) rank = 10; + if (pos === 0 || haystack.charCodeAt(pos - 1) <= 47) + return 15; // string start or word start (=char before match is special char) + } while (pos !== -1); + return rank; + } + SearchMatcher.prototype.isMatch = function(obj) { + let rank = 0; + for(let j = 0; j < this.searchFor.length; j++) { + var searchFor = this.searchFor[j]; + for(let i = this.fields.length - 1; i >= 0; i--) { + var result = inStringRanked(obj[this.fields[i]], searchFor); + if (result) { + rank += (i + 1) * result; + break; + } + } + } + return rank; + } + function strcmp(a, b) { + return a > b ? 1 : a < b ? -1 : 0; + } + var $results_box = $("#plugin_search_results"); + var $plugin_tabs = $("#plugin_tabs"); + var $results = $("#plugin_search_results .plugin-list"); + function search() { + $results.html(""); + var value = $("#plugin_search_input").val(); + var only_active = $("input[name=plugin_state_filter][value=active]").prop("checked"); + if (!value && !only_active) { + $results_box.hide(); $plugin_tabs.show(); + return; + } + $results_box.show(); $plugin_tabs.hide(); + var matcher = new SearchMatcher(value, ["description", "module", "name"]); + var matches = []; + for(const plugin of plugins) { + if (only_active && !plugin.active) continue; + var rank = matcher.isMatch(plugin); + if (!rank) continue; + matches.push([rank, plugin]); + } + matches.sort(function (a,b) { return (b[0]-a[0]) || strcmp(a[1].sortName, b[1].sortName); }) + $results.append(matches.map(function(res) { return $(res[1].html).prepend('' + res[1].categoryLabel + ''); })) + $results.find(".panel-body, .panel, .featured-plugin, .btn-lg").removeClass("panel-body panel featured-plugin btn-lg"); + if (matches.length === 0) { + $results.append(gettext("No results")); + } + } + $("#plugin_search_input").on("input", search); + $("input[name=plugin_state_filter]").on("change", search); + $results_box.find("button.close").on("click", function() { + $("input[name=plugin_state_filter][value=all]").prop("checked", true).trigger("click"); + $("#plugin_search_input").val("").trigger("input"); + }); + if (location.search) { + var search = new URLSearchParams(location.search); + if (search.has('q')) { + $("#plugin_search_input").val(search.get("q")).trigger("input"); + } + } +}) diff --git a/src/pretix/static/pretixcontrol/scss/main.scss b/src/pretix/static/pretixcontrol/scss/main.scss index f6f9112ace..9a38920325 100644 --- a/src/pretix/static/pretixcontrol/scss/main.scss +++ b/src/pretix/static/pretixcontrol/scss/main.scss @@ -770,6 +770,9 @@ h1 .label { flex-shrink: 0; padding-top: 15px; } + .plugin-container:first-child { + padding-top: 0; + } .plugin-container:not(.featured-plugin) + .plugin-container { border-top: 1px solid #ccc; } diff --git a/src/pretix/static/pretixpresale/js/ui/cookieconsent.js b/src/pretix/static/pretixpresale/js/ui/cookieconsent.js index bc109db381..ed5ed77f17 100644 --- a/src/pretix/static/pretixpresale/js/ui/cookieconsent.js +++ b/src/pretix/static/pretixpresale/js/ui/cookieconsent.js @@ -4,8 +4,21 @@ $(function () { window.pretix = window.pretix || {}; var storage_key = $("#cookie-consent-storage-key").text(); - function update_consent(consent) { - if (storage_key && window.localStorage) window.localStorage[storage_key] = JSON.stringify(consent); + var widget_consent = $("#cookie-consent-from-widget").text(); + var consent_checkboxes = $("#cookie-consent-details input[type=checkbox][name]"); + var consent_modal = $("#cookie-consent-modal"); + + function update_consent(consent, sessionOnly) { + if (storage_key && window.sessionStorage && sessionOnly) { + if (!window.localStorage[storage_key] || window.localStorage[storage_key] !== JSON.stringify(consent)) { + // No need to write to sessionStorage if the value is identical to the one in localStorage + window.sessionStorage[storage_key] = JSON.stringify(consent); + } + } else if (storage_key && window.localStorage) { + window.localStorage[storage_key] = JSON.stringify(consent); + // When saving permanent storage, clear session storage + window.sessionStorage.removeItem(storage_key); + } window.pretix.cookie_consent = consent; // Event() is not supported by IE11, see ployfill here: @@ -16,44 +29,69 @@ $(function () { } if (!storage_key) { - update_consent(null); + // We are not on a page where the consent should run, fire the change event with empty consent but don't + // actually store anything. + update_consent(null, false); return; } if (!window.localStorage) { // Consent not supported. Even IE8 supports it, so we're on a weird embedded device. // Let's just say we don't consent then. - update_consent({}) + update_consent({}, false) return; } - var storage_val = window.localStorage[storage_key]; - var show_dialog = !storage_val; - var consent_checkboxes = $("#cookie-consent-details input[type=checkbox][name]"); - var consent_modal = $("#cookie-consent-modal"); - var widget_consent = $("#cookie-consent-from-widget").text(); - if (widget_consent) { + var storage_val, consent_source, save_for_session_only; + if (window.sessionStorage[storage_key]) { + // A manual input was given inside a widget. This is the user's last explicit choice and takes precedence – + // as long as they are in the widget. + storage_val = JSON.parse(window.sessionStorage[storage_key]); + consent_source = 'sessionStorage'; + save_for_session_only = true; + } else if (widget_consent) { + // An input was given through the widget. This takes precedence over localStorage as we need to assume the + // widget embedder is doing a correct job. If the user never visited the page without the widget, we also + // use it to prefill local storage to save the user from seeing more cookie banners. (This will stop working + // when browsers partition local storage of iframes, anyway.) If the user does have visited the page without + // the widget before and has a consent setting in localStorage, we respect the widget consent *only* within + // the widget -- hence, we save it into sessionStorage. We need to save it into sessionStorage because the + // widget_data value itself will not "survive" the entire lifetime of the tab, i.e. it is no longer present + // after the order was confirmed. widget_consent = JSON.parse(widget_consent); - storage_val = {} + storage_val = {}; consent_checkboxes.each(function () { this.checked = storage_val[this.name] = widget_consent.indexOf(this.name) > -1; - }) - show_dialog = false; - $("#cookie-consent-reopen").hide(); - } else if (storage_val) { - storage_val = JSON.parse(storage_val); - consent_checkboxes.each(function () { - if (typeof storage_val[this.name] === "undefined") { - // A new cookie type has been added that we haven't asked for yet - show_dialog = true; - } else if (storage_val[this.name]) { - this.checked = true; - } - }) + }); + consent_source = 'widget'; + save_for_session_only = !!window.localStorage[storage_key]; + } else if (window.localStorage[storage_key]) { + // The user made a specific selection, let's use that. + storage_val = JSON.parse(window.localStorage[storage_key]); + consent_source = 'localStorage'; + save_for_session_only = false; } else { - storage_val = {} + // No consent given, dialog will be shown. + storage_val = {}; + consent_source = 'new'; + save_for_session_only = false; } - update_consent(storage_val); + + var show_dialog = false; + consent_checkboxes.each(function () { + if (typeof storage_val[this.name] === "undefined") { + // A new cookie type has been added that we haven't asked for yet + if (consent_source === "widget") { + // Trust the widget, keep it as "no consent" + } else { + show_dialog = true; + } + } else if (storage_val[this.name]) { + this.checked = true; + } + }) + + update_consent(storage_val, save_for_session_only); function _set_button_text () { var btn = $("#cookie-consent-button-no"); @@ -83,7 +121,8 @@ $(function () { consent[this.name] = this.checked = consent_all || this.checked; }); if (consent_all) _set_button_text(); - update_consent(consent); + // Always save explicit consent to permanent storage + update_consent(consent, false); }); consent_checkboxes.on("change", _set_button_text); $("#cookie-consent-reopen").on("click", function (e) { diff --git a/src/pretix/static/pretixpresale/js/ui/main.js b/src/pretix/static/pretixpresale/js/ui/main.js index 34b84b807c..d914fb4a13 100644 --- a/src/pretix/static/pretixpresale/js/ui/main.js +++ b/src/pretix/static/pretixpresale/js/ui/main.js @@ -314,6 +314,12 @@ function setup_week_calendar() { } } +function get_label_text_for_id(id) { + return $("label[for=" + id +"]").first().contents().filter(function () { + return this.nodeType != Node.ELEMENT_NODE || !this.classList.contains("sr-only"); + }).text().trim(); +} + $(function () { "use strict"; @@ -344,7 +350,7 @@ $(function () { $("#ajaxerr").on("click", ".ajaxerr-close", ajaxErrDialog.hide); - // Copy answers + // Handlers for "Copy answers from above" buttons $(".js-copy-answers").click(function (e) { e.preventDefault(); e.stopPropagation(); @@ -372,44 +378,37 @@ $(function () { copy_answers(elements, answers); return false; }); - var copy_to_first_ticket = true; - var attendee_address_fields = $("input[id*=attendee_name_parts_], input[id*=attendee_email], .questions-form" + - " input[id$=company], .questions-form[id$=street], .questions-form input[id$=zipcode], .questions-form" + - " input[id$=city]"); - attendee_address_fields.each(function () { - if ($(this).val()) { - copy_to_first_ticket = false; - } - }) - $("select[id^=id_name_parts], input[id^=id_name_parts_], #id_email, #id_street, #id_company, #id_zipcode," + - " #id_city, #id_country, #id_state").change(function () { - if (copy_to_first_ticket) { - var $first_ticket_form = $(".questions-form").first().find("[data-addonidx=0]"); - $first_ticket_form.find("[id$=" + this.id.substring(3) + "]").val(this.value); - if (this.placeholder) { - $first_ticket_form.find("[placeholder='" + CSS.escape(this.placeholder) + "']").val(this.value); - } - var label = $("label[for=" + this.id +"]").first().contents().filter(function () { - return this.nodeType != Node.ELEMENT_NODE || !this.classList.contains("sr-only"); - }).text().trim(); - if (label) { - // match to placeholder and label - $first_ticket_form.find("[placeholder='" + CSS.escape(label) + "']").val(this.value); - var v = this.value; - $first_ticket_form.find("label").each(function() { - var text = $(this).first().contents().filter(function () { - return this.nodeType != Node.ELEMENT_NODE || !this.classList.contains("sr-only"); - }).text().trim(); - if (text == label) { - $("#" + this.getAttribute("for")).val(v); - } - }); - } - } - }).trigger("change"); - attendee_address_fields.change(function () { - copy_to_first_ticket = false; - }); + + // Automatically copy answers from invoice to first attendee + var attendee_address_fields = $("input[id*=attendee_name_parts_], input[id*=attendee_email], " + + ".questions-form input[id$=company], .questions-form input[id$=street], " + + ".questions-form input[id$=zipcode], .questions-form input[id$=city]"); + function copy_to_first_ticket () { + var source = this; + var source_label = get_label_text_for_id(source.id); + + var $first_ticket_form = $(".questions-form").first().find("[data-addonidx=0]"); + var $candidates = $first_ticket_form.find(source.tagName + ":not([type='checkbox'], [type='radio'], [type='hidden'])"); + var $match = $candidates.filter(function() { + return ( + this.id.endsWith(source.id.substring(3)) + || (this.placeholder && this.placeholder === source.placeholder) + || (this.placeholder && this.placeholder === source_label) + || (source_label && this.id && get_label_text_for_id(this.id) === source_label) + ); + }).first(); + $match.val(this.value).trigger("change"); + } + function valueIsEmpty(el) { return !el.value; } + if (attendee_address_fields.toArray().every(valueIsEmpty)) { + var invoice_address_fields = $("select[id^=id_name_parts], input[id^=id_name_parts_], #id_email, #id_street, " + + "#id_company, #id_zipcode, #id_city, #id_country, #id_state"); + invoice_address_fields.on("change", copy_to_first_ticket).trigger("change"); + attendee_address_fields.one("input", function () { + invoice_address_fields.off("change", copy_to_first_ticket); + }); + } + questions_init_profiles($("body")); if (sessionStorage) { @@ -533,8 +532,8 @@ $(function () { form_handlers($("body")); var local_tz = moment.tz.guess() - $("span[data-timezone], small[data-timezone]").each(function() { - var t = moment.tz($(this).attr("data-time"), $(this).attr("data-timezone")) + $("span[data-timezone], small[data-timezone], time[data-timezone]").each(function() { + var t = moment.tz($(this).attr("datetime") || $(this).attr("data-time"), $(this).attr("data-timezone")) var tz = moment.tz.zone($(this).attr("data-timezone")) var tpl = ''; @@ -544,6 +543,7 @@ $(function () { }); if (t.tz(tz.name).format() !== t.tz(local_tz).format()) { var $add = $("") + $add.append(" ") $add.append($("").addClass("fa fa-globe")) if ($(this).is("[data-time-short]")) { $add.append($("").text(" " + t.tz(local_tz).format($("body").attr("data-timeformat")))) diff --git a/src/pretix/static/pretixpresale/js/widget/widget.js b/src/pretix/static/pretixpresale/js/widget/widget.js index d3f99c803f..ce984b5ab0 100644 --- a/src/pretix/static/pretixpresale/js/widget/widget.js +++ b/src/pretix/static/pretixpresale/js/widget/widget.js @@ -313,9 +313,9 @@ Vue.component('availbox', { waiting_list_url: function () { var u if (this.item.has_variations) { - u = this.$root.target_url + 'w/' + widget_id + '/waitinglist/?item=' + this.item.id + '&var=' + this.variation.id + '&widget_data=' + encodeURIComponent(this.$root.widget_data_json); + u = this.$root.target_url + 'w/' + widget_id + '/waitinglist/?item=' + this.item.id + '&var=' + this.variation.id + '&widget_data=' + encodeURIComponent(this.$root.widget_data_json) + this.$root.consent_parameter; } else { - u = this.$root.target_url + 'w/' + widget_id + '/waitinglist/?item=' + this.item.id + '&widget_data=' + encodeURIComponent(this.$root.widget_data_json); + u = this.$root.target_url + 'w/' + widget_id + '/waitinglist/?item=' + this.item.id + '&widget_data=' + encodeURIComponent(this.$root.widget_data_json) + this.$root.consent_parameter; } if (this.$root.subevent) { u += '&subevent=' + this.$root.subevent @@ -736,6 +736,7 @@ var shared_methods = { } else { url = url + '?iframe=1&locale=' + lang + '&take_cart_id=' + this.$root.cart_id; } + url += this.$root.consent_parameter; if (this.$root.additionalURLParams) { url += '&' + this.$root.additionalURLParams; } @@ -764,39 +765,11 @@ var shared_methods = { redeem: function (event) { if (this.$root.useIframe) { event.preventDefault(); - } else { - if (this.$root.additionalURLParams) { - var params = new URLSearchParams(this.$root.additionalURLParams); - for (var [key, value] of params.entries()) { - if (!event.target.form.elements[key]) { - var input = document.createElement("input"); - input.type = "hidden"; - input.name = key; - input.value = value; - event.target.form.appendChild(input); - } - } - } - return; + this.voucher_open(this.voucher); } - var redirect_url = this.$root.voucherFormTarget + '&voucher=' + encodeURIComponent(this.voucher) + '&subevent=' + this.$root.subevent; - if (this.$root.widget_data) { - redirect_url += '&widget_data=' + encodeURIComponent(this.$root.widget_data_json); - } - if (this.$root.additionalURLParams) { - redirect_url += '&' + this.$root.additionalURLParams; - } - this.$root.overlay.frame_src = redirect_url; }, voucher_open: function (voucher) { - var redirect_url; - redirect_url = this.$root.voucherFormTarget + '&voucher=' + encodeURIComponent(voucher); - if (this.$root.widget_data) { - redirect_url += '&widget_data=' + encodeURIComponent(this.$root.widget_data_json); - } - if (this.$root.additionalURLParams) { - redirect_url += '&' + this.$root.additionalURLParams; - } + var redirect_url = this.$root.voucherFormTarget + '&voucher=' + encodeURIComponent(voucher); if (this.$root.useIframe) { this.$root.overlay.frame_src = redirect_url; } else { @@ -817,6 +790,7 @@ var shared_methods = { if (this.$root.widget_data) { redirect_url += '&widget_data=' + encodeURIComponent(this.$root.widget_data_json); } + redirect_url += this.$root.consent_parameter; if (this.$root.additionalURLParams) { redirect_url += '&' + this.$root.additionalURLParams; } @@ -1017,6 +991,7 @@ Vue.component('pretix-widget-event-form', { + '' + '' + '' + + '' // Error message + '
{{ $root.error }}
' @@ -1070,9 +1045,7 @@ Vue.component('pretix-widget-event-form', { + '
' + '' + '
' - + '' - + '' - + '' + + '' + '
' + '' + '
' @@ -1130,7 +1103,13 @@ Vue.component('pretix-widget-event-form', { } else { return strings.buy; } - } + }, + hiddenParams: function () { + var params = new URL(this.$root.voucherFormTarget).searchParams; + params.delete("iframe"); + params.delete("take_cart_id"); + return [...params.entries()]; + }, }, methods: { focus_voucher_field: function() { @@ -1706,6 +1685,7 @@ Vue.component('pretix-button', { + '' + '' + '' + + '' + '' + '' + '' @@ -1923,6 +1903,7 @@ var shared_root_methods = { if (this.$root.additionalURLParams) { redirect_url += '&' + this.$root.additionalURLParams; } + redirect_url += this.$root.consent_parameter; if (this.$root.useIframe) { this.$root.overlay.frame_src = redirect_url; } else { @@ -1965,6 +1946,10 @@ var shared_root_computed = { if (this.subevent) { form_target += "&subevent=" + this.subevent; } + if (this.$root.widget_data) { + form_target += '&widget_data=' + encodeURIComponent(this.$root.widget_data_json); + } + form_target += this.$root.consent_parameter; if (this.$root.additionalURLParams) { form_target += '&' + this.$root.additionalURLParams; } @@ -1978,9 +1963,13 @@ var shared_root_computed = { }, formAction: function () { if (!this.useIframe && this.is_button && this.items.length === 0) { - var target = this.target_url; + var target; if (this.voucher_code) { target = this.target_url + 'redeem'; + } else if (this.subevent) { + target = this.target_url + this.subevent + '/'; + } else { + target = this.target_url; } return target; } @@ -1996,6 +1985,7 @@ var shared_root_computed = { if (cookie) { form_target += "&take_cart_id=" + cookie; } + form_target += this.$root.consent_parameter return form_target }, newTabTarget: function () { @@ -2029,8 +2019,26 @@ var shared_root_computed = { } return has_priced || cnt_items > 1; }, + consent_parameter_value: function () { + if (typeof this.widget_data["consent"] !== "undefined") { + return encodeURIComponent(this.widget_data["consent"]); + } + return ""; + }, + consent_parameter: function () { + if (typeof this.widget_data["consent"] !== "undefined") { + return "&consent=" + encodeURIComponent(this.widget_data["consent"]); + } + return ""; + }, widget_data_json: function () { - return JSON.stringify(this.widget_data); + var cloned_data = Object.assign({}, this.widget_data); + if (typeof cloned_data["consent"] !== "undefined") { + // Remove consent as we pass it differently. We still keep it as widget_data in the input to avoid breaking + // the JS API of the widget. + delete cloned_data["consent"]; + } + return JSON.stringify(cloned_data); }, additionalURLParams: function () { if (!window.location.search.indexOf('utm_')) { diff --git a/src/pretix/static/pretixpresale/scss/_cart.scss b/src/pretix/static/pretixpresale/scss/_cart.scss index 85f28f216a..2c91bf4b5b 100644 --- a/src/pretix/static/pretixpresale/scss/_cart.scss +++ b/src/pretix/static/pretixpresale/scss/_cart.scss @@ -83,7 +83,7 @@ position: relative; padding-left: 1.4em; text-indent: 0; - .fa, svg { + & > .fa, & > svg, & > dd > .fa, & > dd > svg { position: absolute; left: 0; top: .22em; diff --git a/src/pretix/static/pretixpresale/scss/_event.scss b/src/pretix/static/pretixpresale/scss/_event.scss index 71d2cb779c..3b901caedb 100644 --- a/src/pretix/static/pretixpresale/scss/_event.scss +++ b/src/pretix/static/pretixpresale/scss/_event.scss @@ -145,6 +145,11 @@ article.item-with-variations .product-row:last-child:after { margin-bottom: 0; } +.panel > hr { + margin: 0; + border-top: 1px solid $table-border-color; +} + .product-row { padding: 1.25*$line-height-computed 0; diff --git a/src/pretix/static/pretixpresale/scss/main.scss b/src/pretix/static/pretixpresale/scss/main.scss index 7c49aa7084..7d33e96c51 100644 --- a/src/pretix/static/pretixpresale/scss/main.scss +++ b/src/pretix/static/pretixpresale/scss/main.scss @@ -413,7 +413,6 @@ details.details-open .panel-title::before { } .panel-subhead { - margin-bottom: 15px; padding: 15px; background: $table-bg-accent; border-bottom: 1px solid $table-border-color; diff --git a/src/tests/base/test_models.py b/src/tests/base/test_models.py index f61f13904d..b68d5b977f 100644 --- a/src/tests/base/test_models.py +++ b/src/tests/base/test_models.py @@ -35,6 +35,7 @@ import datetime import sys import time +import zoneinfo from datetime import date, timedelta from decimal import Decimal @@ -2458,6 +2459,57 @@ class EventTest(TestCase): item.save() assert Event.annotated(Event.objects, 'web').first().active_quotas == [] + @classscope(attr='organizer') + def test_date_range_display(self): + tz = zoneinfo.ZoneInfo("Europe/Berlin") + sets = ( + ( + datetime.datetime(2025, 3, 9, 21, 0, 0, tzinfo=tz), + datetime.datetime(2025, 3, 9, 22, 0, 0, tzinfo=tz), + 'Sun, March 9th, 2025', + '', + 'Sun, March 9th, 2025 20:00–21:00', + ' ' + '' + ), + ( + datetime.datetime(2025, 3, 9, 21, 0, 0, tzinfo=tz), + datetime.datetime(2025, 3, 10, 3, 0, 0, tzinfo=tz), + 'March 9th – 10th, 2025', + '', + 'March 9th – 10th, 2025 20:00–02:00', + ' ' + '' + ), + ( + datetime.datetime(2025, 3, 9, 21, 0, 0, tzinfo=tz), + datetime.datetime(2025, 3, 12, 14, 0, 0, tzinfo=tz), + 'March 9th – 12th, 2025', + '', + 'March 9th – 12th, 2025', + '', + ), + ( + datetime.datetime(2025, 3, 9, 21, 0, 0, tzinfo=tz), + None, + 'Sun, March 9th, 2025', + '', + 'Sun, March 9th, 2025 20:00', + ' ' + '' + ), + ) + + for i, (df, dt, expected, expected_html, expected_with_times, expected_with_times_html) in enumerate(sets): + event = Event.objects.create( + organizer=self.organizer, name='Dummy', slug=f'dummy{i}', + date_from=df, date_to=dt, + ) + assert event.get_date_range_display() == expected + assert event.get_date_range_display(as_html=True) == expected_html + assert event.get_date_range_display(try_to_show_times=True) == expected_with_times + assert event.get_date_range_display(try_to_show_times=True, as_html=True) == expected_with_times_html + class SubEventTest(TestCase): def setUp(self):