diff --git a/.github/workflows/docker-pr.yml b/.github/workflows/docker-pr.yml index 2ec07f6ec..2fc1dd17c 100644 --- a/.github/workflows/docker-pr.yml +++ b/.github/workflows/docker-pr.yml @@ -2,7 +2,7 @@ name: Docker PR Build on: pull_request: - branches: [development, main] + branches: [development, master] jobs: build_docker_image: diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index e7f3cc682..e15b2ff39 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -20,10 +20,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Set up Python 3.8 + - name: Set up Python 3.11 uses: actions/setup-python@v1 with: - python-version: 3.8 + python-version: 3.11 - uses: actions/cache@v1 with: path: ~/.cache/pip diff --git a/.github/workflows/strings.yml b/.github/workflows/strings.yml index 184706035..332a1872d 100644 --- a/.github/workflows/strings.yml +++ b/.github/workflows/strings.yml @@ -18,10 +18,10 @@ jobs: name: Check gettext syntax steps: - uses: actions/checkout@v2 - - name: Set up Python 3.8 + - name: Set up Python 3.11 uses: actions/setup-python@v1 with: - python-version: 3.8 + python-version: 3.11 - uses: actions/cache@v1 with: path: ~/.cache/pip @@ -43,10 +43,10 @@ jobs: name: Spellcheck steps: - uses: actions/checkout@v2 - - name: Set up Python 3.8 + - name: Set up Python 3.11 uses: actions/setup-python@v1 with: - python-version: 3.8 + python-version: 3.11 - uses: actions/cache@v1 with: path: ~/.cache/pip diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml index cae1e0d4f..c63fb9d15 100644 --- a/.github/workflows/style.yml +++ b/.github/workflows/style.yml @@ -18,10 +18,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Set up Python 3.8 + - name: Set up Python 3.11 uses: actions/setup-python@v1 with: - python-version: 3.8 + python-version: 3.11 - uses: actions/cache@v1 with: path: ~/.cache/pip @@ -38,10 +38,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Set up Python 3.8 + - name: Set up Python 3.11 uses: actions/setup-python@v1 with: - python-version: 3.8 + python-version: 3.11 - uses: actions/cache@v1 with: path: ~/.cache/pip diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0b66f3ab1..e81f85d42 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -18,24 +18,16 @@ jobs: name: Tests strategy: matrix: - python-version: [3.8] - database: [sqlite, postgres, mysql] + python-version: [3.11] + database: [sqlite, postgres] exclude: - - database: mysql - python-version: 3.8 - database: sqlite - python-version: 3.8 + python-version: 3.11 steps: - uses: actions/checkout@v2 - - uses: getong/mariadb-action@v1.1 - with: - mariadb version: '10.4' - mysql database: 'pretix' - mysql root password: '' - if: matrix.database == 'mysql' - uses: harmon758/postgresql-action@v1 with: - postgresql version: '11' + postgresql version: '12' postgresql db: 'pretix' postgresql user: 'postgres' postgresql password: 'postgres' @@ -51,7 +43,7 @@ jobs: restore-keys: | ${{ runner.os }}-pip- - name: Install system dependencies - run: sudo apt update && sudo apt install gettext mysql-client + run: sudo apt update && sudo apt install gettext - name: Install Python dependencies run: pip3 install -e ".[dev]" psycopg2-binary - name: Run checks @@ -71,4 +63,4 @@ jobs: with: file: src/coverage.xml fail_ci_if_error: true - if: matrix.database == 'postgres' && matrix.python-version == '3.8' + if: matrix.database == 'postgres' && matrix.python-version == '3.11' diff --git a/Dockerfile b/Dockerfile index a6a109cf6..7d50aa4ef 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.8-bookworm +FROM python:3.11-bookworm RUN apt-get update && \ apt-get install -y --no-install-recommends \ @@ -45,6 +45,7 @@ COPY deployment/docker/production_settings.py /pretix/src/production_settings.py COPY pyproject.toml /pretix/pyproject.toml COPY src /pretix/src +ENV DJANGO_SETTINGS_MODULE= RUN pip3 install -U \ pip \ setuptools \ @@ -54,6 +55,7 @@ RUN pip3 install -U \ -e ".[memcached]" \ gunicorn django-extensions ipython && \ rm -rf ~/.cache/pip +ENV DJANGO_SETTINGS_MODULE=production_settings RUN chmod +x /usr/local/bin/pretix && \ rm /etc/nginx/sites-enabled/default && \ diff --git a/doc/admin/config.rst b/doc/admin/config.rst index 3de991481..eebbca900 100644 --- a/doc/admin/config.rst +++ b/doc/admin/config.rst @@ -143,7 +143,7 @@ Example:: port=3306 ``backend`` - One of ``sqlite3``, ``oracle`` and ``postgresql``. + One of ``sqlite3`` and ``postgresql``. Default: ``sqlite3``. ``name`` diff --git a/doc/admin/installation/general.rst b/doc/admin/installation/general.rst index f15284c20..601604260 100644 --- a/doc/admin/installation/general.rst +++ b/doc/admin/installation/general.rst @@ -16,13 +16,12 @@ To use pretix, you will need the following things: * A periodic task runner, e.g. ``cron`` * **A database**. This needs to be a SQL-based that is supported by Django. We highly recommend to either - go for **PostgreSQL** or **MySQL/MariaDB**. If you do not provide one, pretix will run on SQLite, which is useful + go for **PostgreSQL**. If you do not provide one, pretix will run on SQLite, which is useful for evaluation and development purposes. .. warning:: Do not ever use SQLite in production. It will break. - .. warning:: We recommend **PostgreSQL**. If you go for MySQL, make sure you run **MySQL 5.7 or newer** or - **MariaDB 10.2.7 or newer**. + .. warning:: We recommend to use **PostgreSQL**. * A **reverse proxy**. pretix needs to deliver some static content to your users (e.g. CSS, images, ...). While pretix is capable of doing this, having this handled by a proper web server like **nginx** or **Apache** will be much diff --git a/doc/admin/installation/manual_smallscale.rst b/doc/admin/installation/manual_smallscale.rst index 928156b11..3955eb8ac 100644 --- a/doc/admin/installation/manual_smallscale.rst +++ b/doc/admin/installation/manual_smallscale.rst @@ -23,7 +23,7 @@ installation guides): * A SMTP server to send out mails, e.g. `Postfix`_ on your machine or some third-party server you have credentials for * A HTTP reverse proxy, e.g. `nginx`_ or Apache to allow HTTPS connections -* A `PostgreSQL`_ 9.5+, `MySQL`_ 5.7+, or MariaDB 10.2.7+ database server +* A `PostgreSQL`_ 11+, `MySQL`_ 5.7+, or MariaDB 10.2.7+ database server * A `redis`_ server * A `nodejs_` installation @@ -134,7 +134,7 @@ command if you're running MySQL:: (venv)$ pip3 install "pretix[postgres]" gunicorn -Note that you need Python 3.6 or newer. You can find out your Python version using ``python -V``. +Note that you need Python 3.11 or newer. You can find out your Python version using ``python -V``. We also need to create a data directory:: diff --git a/doc/plugins/badges.rst b/doc/plugins/badges.rst index e46ab7e91..8ae4be75c 100644 --- a/doc/plugins/badges.rst +++ b/doc/plugins/badges.rst @@ -77,7 +77,7 @@ Endpoints .. sourcecode:: http - GET /api/v1/organizers/bigevents/events/democon/layoutsbadge/1/ HTTP/1.1 + GET /api/v1/organizers/bigevents/events/democon/badgelayouts/1/ HTTP/1.1 Host: pretix.eu Accept: application/json, text/javascript diff --git a/pyproject.toml b/pyproject.toml index 26644b433..5664ee1d3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "eventyay" dynamic = ["version"] description = "the open source event solution" readme = "README.rst" -requires-python = ">=3.8" +requires-python = ">=3.11" license = {file = "LICENSE"} keywords = ["tickets", "events", "web", "shop", "ecommerce"] authors = [ {name = "eventyay", email = "info@eventyay.com"}, ] @@ -15,9 +15,8 @@ classifiers = [ "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Environment :: Web Environment", "License :: OSI Approved :: Apache License, Version 2.0", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Framework :: Django :: 3.2", + "Programming Language :: Python :: 3.11", + "Framework :: Django :: 4.2", ] dependencies = [ 'Django==4.2.*', @@ -77,7 +76,7 @@ dependencies = [ 'jsonschema', 'django-hijack==2.*', 'openpyxl==3.1.*', - 'django-oauth-toolkit==1.6.*', + 'django-oauth-toolkit==2.3.*', 'oauthlib==3.2.*', 'django-phonenumber-field==7.1.*', 'phonenumberslite==8.13.*', @@ -88,7 +87,15 @@ dependencies = [ 'text-unidecode==1.*', 'protobuf==4.23.*', 'cryptography>=3.4.2', + 'pycryptodome==3.20.*', 'sepaxml==2.6.*', + 'geoip2==4.*', + 'paypalhttp==1.*', + 'sendgrid==6.11.*', + 'importlib_metadata==7.*', + 'qrcode==7.4.*', + 'pretix-pages @ git+https://github.com/fossasia/eventyay-ticket-pages.git@master', + 'pretix-venueless @ git+https://github.com/fossasia/eventyay-ticket-video.git@master' ] [project.optional-dependencies] @@ -125,7 +132,7 @@ requires = [ 'setuptools', 'setuptools-rust', 'wheel', - 'importlib_metadata', + 'importlib_metadata' ] [project.urls] diff --git a/src/pretix/api/migrations/0003_oauthapplication_post_logout_redirect_uris_and_more.py b/src/pretix/api/migrations/0003_oauthapplication_post_logout_redirect_uris_and_more.py new file mode 100644 index 000000000..a32fe36e1 --- /dev/null +++ b/src/pretix/api/migrations/0003_oauthapplication_post_logout_redirect_uris_and_more.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.13 on 2024-07-09 08:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('pretixapi', '0002_initial'), + ] + + operations = [ + migrations.AddField( + model_name='oauthapplication', + name='post_logout_redirect_uris', + field=models.TextField(default=''), + ), + ] diff --git a/src/pretix/api/models.py b/src/pretix/api/models.py index 2dacc9a65..6e49d2704 100644 --- a/src/pretix/api/models.py +++ b/src/pretix/api/models.py @@ -9,7 +9,7 @@ ) from oauth2_provider.models import ( AbstractAccessToken, AbstractApplication, AbstractGrant, AbstractIDToken, - AbstractRefreshToken, + AbstractRefreshToken, ClientSecretField ) from oauth2_provider.validators import URIValidator @@ -21,11 +21,16 @@ class OAuthApplication(AbstractApplication): verbose_name=_("Redirection URIs"), help_text=_("Allowed URIs list, space separated") ) + post_logout_redirect_uris = models.TextField( + blank=True, validators=[URIValidator], + help_text=_("Allowed Post Logout URIs list with space separated"), + default="", + ) client_id = models.CharField( verbose_name=_("Client ID"), max_length=100, unique=True, default=generate_client_id, db_index=True ) - client_secret = models.CharField( + client_secret = ClientSecretField( verbose_name=_("Client secret"), max_length=255, blank=False, default=generate_client_secret, db_index=True ) @@ -45,6 +50,7 @@ class OAuthGrant(AbstractGrant): organizers = models.ManyToManyField('pretixbase.Organizer') redirect_uri = models.CharField(max_length=2500) # Only 255 in AbstractGrant, which caused problems + class OAuthIDToken(AbstractIDToken): application = models.ForeignKey( OAuthApplication, on_delete=models.CASCADE, diff --git a/src/pretix/api/serializers/i18n.py b/src/pretix/api/serializers/i18n.py index 9e9f3860a..f348d37f7 100644 --- a/src/pretix/api/serializers/i18n.py +++ b/src/pretix/api/serializers/i18n.py @@ -1,4 +1,5 @@ from django.conf import settings +from django.core.validators import URLValidator from i18nfield.fields import I18nCharField, I18nTextField from i18nfield.strings import LazyI18nString from rest_framework.exceptions import ValidationError @@ -48,3 +49,43 @@ class I18nAwareModelSerializer(ModelSerializer): I18nAwareModelSerializer.serializer_field_mapping[I18nCharField] = I18nField I18nAwareModelSerializer.serializer_field_mapping[I18nTextField] = I18nField + + +class I18nURLField(I18nField): + """ + Custom field to handle internationalized URL inputs. It extends the I18nField + and ensures that all provided URLs are valid. + + Methods: + to_internal_value(value: LazyI18nString) -> LazyI18nString: + Validates the URL(s) in the provided internationalized input. + """ + + def to_internal_value(self, value) -> LazyI18nString: + """ + Converts and validates the internationalized URL input. + + Args: + value (LazyI18nString): The input value to convert and validate. + + Returns: + LazyI18nString: The converted and validated input value. + + Raises: + ValidationError: If any of the URLs are invalid. + """ + value = super().to_internal_value(value) + if not value: + return value + + url_validator = URLValidator() + + if isinstance(value.data, dict): + for val in value.data.values(): + if val: + url_validator(val) + else: + url_validator(value.data) + + return value + diff --git a/src/pretix/api/serializers/order.py b/src/pretix/api/serializers/order.py index 528235bbb..dac8b35b9 100644 --- a/src/pretix/api/serializers/order.py +++ b/src/pretix/api/serializers/order.py @@ -24,7 +24,7 @@ from pretix.base.models import ( CachedFile, Checkin, Invoice, InvoiceAddress, InvoiceLine, Item, ItemVariation, Order, OrderPosition, Question, QuestionAnswer, Seat, - SubEvent, TaxRule, Voucher, + SubEvent, TaxRule, Voucher, Customer, ) from pretix.base.models.orders import ( CartPosition, OrderFee, OrderPayment, OrderRefund, RevokedTicketSecret, @@ -583,6 +583,7 @@ class OrderSerializer(I18nAwareModelSerializer): payment_date = OrderPaymentDateField(source='*', read_only=True) payment_provider = OrderPaymentTypeField(source='*', read_only=True) url = OrderURLField(source='*', read_only=True) + customer = serializers.SlugRelatedField(slug_field='identifier', read_only=True) class Meta: model = Order @@ -590,11 +591,11 @@ class Meta: 'code', 'status', 'testmode', 'secret', 'email', 'phone', 'locale', 'datetime', 'expires', 'payment_date', 'payment_provider', 'fees', 'total', 'comment', 'invoice_address', 'positions', 'downloads', 'checkin_attention', 'last_modified', 'payments', 'refunds', 'require_approval', 'sales_channel', - 'url' + 'url', 'customer' ) read_only_fields = ( 'code', 'status', 'testmode', 'secret', 'datetime', 'expires', 'payment_date', - 'payment_provider', 'fees', 'total', 'positions', 'downloads', + 'payment_provider', 'fees', 'total', 'positions', 'downloads', 'customer', 'last_modified', 'payments', 'refunds', 'require_approval', 'sales_channel' ) @@ -866,16 +867,18 @@ class OrderCreateSerializer(I18nAwareModelSerializer): payment_date = serializers.DateTimeField(required=False, allow_null=True) send_email = serializers.BooleanField(default=False, required=False) simulate = serializers.BooleanField(default=False, required=False) + customer = serializers.SlugRelatedField(slug_field='identifier', queryset=Customer.objects.none(), required=False) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['positions'].child.fields['voucher'].queryset = self.context['event'].vouchers.all() + self.fields['customer'].queryset = self.context['event'].organizer.customers.all() class Meta: model = Order - fields = ('code', 'status', 'testmode', 'email', 'phone', 'locale', 'payment_provider', 'fees', 'comment', 'sales_channel', - 'invoice_address', 'positions', 'checkin_attention', 'payment_info', 'payment_date', 'consume_carts', - 'force', 'send_email', 'simulate') + fields = ('code', 'status', 'testmode', 'email', 'phone', 'locale', 'payment_provider', 'fees', 'comment', + 'sales_channel', 'invoice_address', 'positions', 'checkin_attention', 'payment_info', 'payment_date', + 'consume_carts', 'force', 'send_email', 'simulate', 'customer') def validate_payment_provider(self, pp): if pp is None: diff --git a/src/pretix/api/serializers/organizer.py b/src/pretix/api/serializers/organizer.py index 99ce6faa4..3d1571057 100644 --- a/src/pretix/api/serializers/organizer.py +++ b/src/pretix/api/serializers/organizer.py @@ -14,7 +14,7 @@ from pretix.base.i18n import get_language_without_region from pretix.base.models import ( Device, GiftCard, GiftCardTransaction, Organizer, SeatingPlan, Team, - TeamAPIToken, TeamInvite, User, + TeamAPIToken, TeamInvite, User, Customer, ) from pretix.base.models.seating import SeatingPlanLayoutValidator from pretix.base.services.mail import SendMailException, mail @@ -40,6 +40,49 @@ class Meta: fields = ('id', 'name', 'layout') +class CustomerSerializer(I18nAwareModelSerializer): + identifier = serializers.CharField(read_only=True) + name = serializers.CharField(read_only=True) + last_login = serializers.DateTimeField(read_only=True) + date_joined = serializers.DateTimeField(read_only=True) + last_modified = serializers.DateTimeField(read_only=True) + + class Meta: + """ + Meta class for the Customer model serializer. + """ + model = Customer + fields = ( + 'identifier', 'email', 'name', 'name_parts', 'is_active', 'is_verified', + 'last_login', 'date_joined', 'locale', 'last_modified' + ) + + def update(self, instance, validated_data): + """ + Updates an existing instance with the validated data. + + If the instance has a provider ID, it retains its external identifier. + + Args: + instance (Model): The instance to be updated. + validated_data (dict): The validated data to update the instance with. + + Returns: + Model: The updated instance. + """ + if instance and instance.provider_id: + validated_data.setdefault('external_identifier', instance.external_identifier) + return super().update(instance, validated_data) + + +class CustomerCreateSerializer(CustomerSerializer): + send_email = serializers.BooleanField(default=False, required=False, allow_null=True) + + class Meta: + model = Customer + fields = CustomerSerializer.Meta.fields + ('send_email',) + + class GiftCardSerializer(I18nAwareModelSerializer): value = serializers.DecimalField(max_digits=10, decimal_places=2, min_value=Decimal('0.00')) @@ -95,7 +138,7 @@ class Meta: 'id', 'name', 'all_events', 'limit_events', 'can_create_events', 'can_change_teams', 'can_change_organizer_settings', 'can_manage_gift_cards', 'can_change_event_settings', 'can_change_items', 'can_view_orders', 'can_change_orders', 'can_view_vouchers', - 'can_change_vouchers', 'can_checkin_orders' + 'can_change_vouchers', 'can_checkin_orders', 'can_manage_customers' ) def validate(self, data): @@ -213,6 +256,8 @@ class Meta: class OrganizerSettingsSerializer(SettingsSerializer): default_fields = [ + 'customer_accounts', + 'customer_accounts_native', 'contact_mail', 'imprint_url', 'organizer_info_text', @@ -232,7 +277,8 @@ class OrganizerSettingsSerializer(SettingsSerializer): 'theme_color_background', 'theme_round_borders', 'primary_font', - 'organizer_logo_image' + 'organizer_logo_image', + 'privacy_policy' ] def __init__(self, *args, **kwargs): diff --git a/src/pretix/api/urls.py b/src/pretix/api/urls.py index ba6bdf461..394d1128a 100644 --- a/src/pretix/api/urls.py +++ b/src/pretix/api/urls.py @@ -21,6 +21,7 @@ orga_router.register(r'webhooks', webhooks.WebHookViewSet) orga_router.register(r'seatingplans', organizer.SeatingPlanViewSet) orga_router.register(r'giftcards', organizer.GiftCardViewSet) +orga_router.register(r'customers', organizer.CustomerViewSet) orga_router.register(r'teams', organizer.TeamViewSet) orga_router.register(r'devices', organizer.DeviceViewSet) orga_router.register(r'exporters', exporters.OrganizerExportersViewSet, basename='exporters') diff --git a/src/pretix/api/views/organizer.py b/src/pretix/api/views/organizer.py index bafab9131..5cd00f422 100644 --- a/src/pretix/api/views/organizer.py +++ b/src/pretix/api/views/organizer.py @@ -1,6 +1,7 @@ from decimal import Decimal import django_filters +from django.contrib.auth.hashers import make_password from django.db import transaction from django.shortcuts import get_object_or_404 from django.utils.functional import cached_property @@ -20,11 +21,11 @@ DeviceSerializer, GiftCardSerializer, GiftCardTransactionSerializer, OrganizerSerializer, OrganizerSettingsSerializer, SeatingPlanSerializer, TeamAPITokenSerializer, TeamInviteSerializer, TeamMemberSerializer, - TeamSerializer, + TeamSerializer, CustomerSerializer, CustomerCreateSerializer, ) from pretix.base.models import ( Device, GiftCard, GiftCardTransaction, Organizer, SeatingPlan, Team, - TeamAPIToken, TeamInvite, User, + TeamAPIToken, TeamInvite, User, Customer, ) from pretix.base.settings import SETTINGS_AFFECTING_CSS from pretix.helpers.dicts import merge_dicts @@ -459,3 +460,136 @@ def patch(self, request, *wargs, **kwargs): 'request': request }) return Response(s.data) + + +with scopes_disabled(): + """ + Filter for Customer model based on the email field. + + Attributes: + email (django_filters.CharFilter): A case-insensitive exact match filter for the email field. + + Meta: + model (Customer): The model to filter. + fields (list): The fields to filter by. + """ + class CustomerFilter(FilterSet): + email = django_filters.CharFilter(field_name='email', lookup_expr='iexact') + + class Meta: + model = Customer + fields = ['email'] + + +class CustomerViewSet(viewsets.ModelViewSet): + serializer_class = CustomerSerializer + queryset = Customer.objects.none() + permission = 'can_manage_customers' + lookup_field = 'identifier' + filter_backends = (DjangoFilterBackend,) + filterset_class = CustomerFilter + + def get_queryset(self): + """ + Get the list of customers. + @return: customers + """ + return self.request.organizer.customers.all() + + def get_serializer_context(self): + """ + Get the serializer context. + @return: + """ + context = super().get_serializer_context() + context['organizer'] = self.request.organizer + return context + + def perform_destroy(self, instance): + raise MethodNotAllowed("Customers cannot be deleted.") + + @transaction.atomic() + def perform_create(self, serializer, send_email=False): + """ + Create a new customer. + @param serializer: serializer instance + @param send_email: allow to send mail or not + @return: created customer + """ + customer = serializer.save(organizer=self.request.organizer, password=make_password(None)) + # Log the action + serializer.instance.log_action( + 'pretix.customer.created', + user=self.request.user, + auth=self.request.auth, + data=self.request.data, + ) + if send_email: + # Send activation mail for customer to activate the account + customer.send_activation_mail() + return customer + + def create(self, request, *args, **kwargs): + """ + Creates a new Customer instance based on the request data. + + This method handles the creation of a new Customer by validating the incoming data + using the CustomerCreateSerializer, performing the creation, and sending a response + with the created customer's data. + + Args: + request (HttpRequest): The HTTP request object containing the data for creating a new customer. + *args: Variable length argument list. + **kwargs: Arbitrary keyword arguments. + + Returns: + Response: A Response object containing the created customer's data and the HTTP status code. + """ + # Initialize the serializer with the request data and context + serializer = CustomerCreateSerializer(data=request.data, context=self.get_serializer_context()) + + # Validate the serializer data, raising an exception if invalid + serializer.is_valid(raise_exception=True) + + # Perform the creation of the customer, optionally sending an email if specified + self.perform_create(serializer, send_email=serializer.validated_data.pop('send_email', False)) + + # Get the headers for the success response + headers = self.get_success_headers(serializer.data) + + # Return the response with the created customer's data and HTTP 201 status + return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) + + @transaction.atomic() + def perform_update(self, serializer): + """ + Update a customer info. + @param serializer: serializer instance + @return: customer instance + """ + customer_inst = serializer.save(organizer=self.request.organizer) + serializer.instance.log_action( + 'pretix.customer.changed', + user=self.request.user, + auth=self.request.auth, + data=self.request.data, + ) + return customer_inst + + @action(detail=True, methods=["POST"]) + @transaction.atomic() + def anonymize(self, request, **kwargs): + """ + Anonymize a customer. + @param request: request instance + @param kwargs: arguments + @return: result response + """ + customer_obj = self.get_object() + customer_obj.anonymize_customer() + customer_obj.log_action( + 'pretix.customer.anonymized', + user=self.request.user, + auth=self.request.auth + ) + return Response(CustomerSerializer(customer_obj).data, status=status.HTTP_200_OK) diff --git a/src/pretix/base/configurations/__init__.py b/src/pretix/base/configurations/__init__.py new file mode 100644 index 000000000..c2a126f9c --- /dev/null +++ b/src/pretix/base/configurations/__init__.py @@ -0,0 +1,2 @@ +from .default_setting import (DEFAULT_SETTINGS, CSS_SETTINGS, TITLE_GROUP, NAME_SALUTION, NAME_SCHEMES, COUNTRIES_WITH_STATE) # NOQA +from .lazy_i18n_string_list_base import LazyI18nStringListBase # NOQA \ No newline at end of file diff --git a/src/pretix/base/configurations/default_setting.py b/src/pretix/base/configurations/default_setting.py new file mode 100644 index 000000000..8bc8e588d --- /dev/null +++ b/src/pretix/base/configurations/default_setting.py @@ -0,0 +1,2619 @@ +from collections import OrderedDict +import json +from datetime import datetime +from decimal import Decimal + +from django import forms +from django.conf import settings +from django.core.files import File +from django.core.validators import ( + MaxValueValidator, MinValueValidator, RegexValidator, +) +from django.utils.text import format_lazy +from django.utils.translation import ( + gettext_lazy as _, gettext_noop, pgettext, pgettext_lazy +) +from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput +from i18nfield.strings import LazyI18nString + +from rest_framework import serializers +from pretix.api.serializers.fields import ( + ListMultipleChoiceField, UploadedFileField, +) +from pretix.api.serializers.i18n import I18nField, I18nURLField +from .lazy_i18n_string_list_base import LazyI18nStringListBase +from pretix.base.forms import I18nURLFormField +from pretix.base.models.tax import TaxRule +from pretix.base.reldate import ( + RelativeDateField, RelativeDateTimeField, RelativeDateWrapper, + SerializerRelativeDateField, SerializerRelativeDateTimeField, +) +from pretix.base.settings import country_choice_kwargs, primary_font_kwargs +from pretix.control.forms import ( + ExtFileField, FontSelect, MultipleLanguagesWidget, SingleLanguageWidget, +) + +DEFAULT_SETTINGS = { + 'customer_accounts': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Allow customers to create an account"), + help_text=_( + "Allow your customers to sign up an account.") + ) + }, + 'customer_accounts_native': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Allow customers to log in with email address and password"), + help_text=_("If disabled, SSO providers is required for customer to login."), + widget=forms.CheckboxInput(attrs={'data-display-dependency': '#id_settings-customer_accounts'}), + ) + }, + 'max_items_per_order': { + 'default': '10', + 'type': int, + 'form_class': forms.IntegerField, + 'serializer_class': serializers.IntegerField, + 'form_kwargs': dict( + min_value=1, + label=_("Maximum number of items per order"), + help_text=_("Add-on products will not be counted.") + ) + }, + 'display_net_prices': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Show net prices instead of gross prices in the product list (not recommended!)"), + help_text=_("Independent of your choice, the cart will show gross prices as this is the price that needs to be " + "paid."), + + ) + }, + 'system_question_order': { + 'default': {}, + 'type': dict, + }, + 'attendee_names_asked': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Ask for attendee names"), + help_text=_("Ask for a name for all tickets which include admission to the event."), + ) + }, + 'attendee_names_required': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Require attendee names"), + help_text=_("Require customers to fill in the names of all attendees."), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-attendee_names_asked'}), + ) + }, + 'attendee_emails_asked': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Ask for email addresses per ticket"), + help_text=_("Normally, eventyay asks for one email address per order and the order confirmation will be sent " + "only to that email address. If you enable this option, the system will additionally ask for " + "individual email addresses for every admission ticket. This might be useful if you want to " + "obtain individual addresses for every attendee even in case of group orders. However, " + "eventyay will send the order confirmation by default only to the primary email address, not to " + "the per-attendee addresses. You can however enable this in the E-mail settings."), + ) + }, + 'attendee_emails_required': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Require email addresses per ticket"), + help_text=_("Require customers to fill in individual e-mail addresses for all admission tickets. See the " + "above option for more details. One email address for the order confirmation will always be " + "required regardless of this setting."), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-attendee_emails_asked'}), + ) + }, + 'attendee_company_asked': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Ask for company per ticket"), + ) + }, + 'attendee_company_required': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Require company per ticket"), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-attendee_company_asked'}), + ) + }, + 'attendee_addresses_asked': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Ask for postal addresses per ticket"), + ) + }, + 'attendee_addresses_required': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Require postal addresses per ticket"), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-attendee_addresses_asked'}), + ) + }, + 'order_email_asked_twice': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Ask for the order email address twice"), + help_text=_("Require customers to fill in the primary email address twice to avoid errors."), + ) + }, + 'order_phone_asked': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Ask for a phone number per order"), + ) + }, + 'order_phone_required': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Require a phone number per order"), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-order_phone_asked'}), + ) + }, + 'invoice_address_asked': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Ask for invoice address"), + ) + }, + 'invoice_address_not_asked_free': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_('Do not ask for invoice address if an order is free'), + ) + }, + 'invoice_name_required': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Require customer name"), + ) + }, + 'invoice_attendee_name': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Show attendee names on invoices"), + ) + }, + 'invoice_eu_currencies': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("On invoices from one EU country into another EU country with a different currency, print the " + "tax amounts in both currencies if possible"), + ) + }, + 'invoice_address_required': { + 'default': 'False', + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'type': bool, + 'form_kwargs': dict( + label=_("Require invoice address"), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_invoice_address_asked'}), + ) + }, + 'invoice_address_company_required': { + 'default': 'False', + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'type': bool, + 'form_kwargs': dict( + label=_("Require a business addresses"), + help_text=_('This will require users to enter a company name.'), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_invoice_address_required'}), + ) + }, + 'invoice_address_beneficiary': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Ask for beneficiary"), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_invoice_address_asked'}), + ) + }, + 'invoice_address_custom_field': { + 'default': '', + 'type': LazyI18nString, + 'form_class': I18nFormField, + 'serializer_class': I18nField, + 'form_kwargs': dict( + label=_("Custom address field"), + widget=I18nTextInput, + help_text=_("If you want to add a custom text field, e.g. for a country-specific registration number, to " + "your invoice address form, please fill in the label here. This label will both be used for " + "asking the user to input their details as well as for displaying the value on the invoice. " + "The field will not be required.") + ) + }, + 'invoice_address_vatid': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Ask for VAT ID"), + help_text=_("Does only work if an invoice address is asked for. VAT ID is not required."), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_invoice_address_asked'}), + ) + }, + 'invoice_address_explanation_text': { + 'default': '', + 'type': LazyI18nString, + 'form_class': I18nFormField, + 'serializer_class': I18nField, + 'form_kwargs': dict( + label=_("Invoice address explanation"), + widget=I18nTextarea, + widget_kwargs={'attrs': {'rows': '2'}}, + help_text=_("This text will be shown above the invoice address form during checkout.") + ) + }, + 'invoice_show_payments': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Show paid amount on partially paid invoices"), + help_text=_("If an invoice has already been paid partially, this option will add the paid and pending " + "amount to the invoice."), + ) + }, + 'invoice_include_free': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Show free products on invoices"), + help_text=_("Note that invoices will never be generated for orders that contain only free " + "products."), + ) + }, + 'invoice_include_expire_date': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Show expiration date of order"), + help_text=_("The expiration date will not be shown if the invoice is generated after the order is paid."), + ) + }, + 'invoice_numbers_counter_length': { + 'default': '5', + 'type': int, + 'form_class': forms.IntegerField, + 'serializer_class': serializers.IntegerField, + 'form_kwargs': dict( + label=_("Minimum length of invoice number after prefix"), + help_text=_("The part of your invoice number after your prefix will be filled up with leading zeros up to this length, e.g. INV-001 or INV-00001."), + ) + }, + 'invoice_numbers_consecutive': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Generate invoices with consecutive numbers"), + help_text=_("If deactivated, the order code will be used in the invoice number."), + ) + }, + 'invoice_numbers_prefix': { + 'default': '', + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'form_kwargs': dict( + label=_("Invoice number prefix"), + help_text=_("This will be prepended to invoice numbers. If you leave this field empty, your event slug will " + "be used followed by a dash. Attention: If multiple events within the same organization use the " + "same value in this field, they will share their number range, i.e. every full number will be " + "used at most once over all of your events. This setting only affects future invoices. You can " + "use %Y (with century) %y (without century) to insert the year of the invoice, or %m and %d for " + "the day of month."), + ) + }, + 'invoice_numbers_prefix_cancellations': { + 'default': '', + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'form_kwargs': dict( + label=_("Invoice number prefix for cancellations"), + help_text=_("This will be prepended to invoice numbers of cancellations. If you leave this field empty, " + "the same numbering scheme will be used that you configured for regular invoices."), + ) + }, + 'invoice_renderer': { + 'default': 'classic', + 'type': str, + }, + 'ticket_secret_generator': { + 'default': 'random', + 'type': str, + }, + 'reservation_time': { + 'default': '30', + 'type': int, + 'form_class': forms.IntegerField, + 'serializer_class': serializers.IntegerField, + 'form_kwags': dict( + min_value=0, + label=_("Reservation period"), + help_text=_("The number of minutes the items in a user's cart are reserved for this user."), + ) + }, + 'redirect_to_checkout_directly': { + 'default': 'False', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_('Directly redirect to check-out after a product has been added to the cart.'), + ) + }, + 'presale_has_ended_text': { + 'default': '', + 'type': LazyI18nString, + 'form_class': I18nFormField, + 'serializer_class': I18nField, + 'form_kwargs': dict( + label=_("End of presale text"), + widget=I18nTextarea, + widget_kwargs={'attrs': {'rows': '2'}}, + help_text=_("This text will be shown above the ticket shop once the designated sales timeframe for this event " + "is over. You can use it to describe other options to get a ticket, such as a box office.") + ) + }, + 'payment_explanation': { + 'default': '', + 'type': LazyI18nString, + 'form_class': I18nFormField, + 'serializer_class': I18nField, + 'form_kwargs': dict( + widget=I18nTextarea, + widget_kwargs={'attrs': { + 'rows': 3, + }}, + label=_("Guidance text"), + help_text=_("This text will be shown above the payment options. You can explain the choices to the user here, " + "if you want.") + ) + }, + 'payment_term_mode': { + 'default': 'days', + 'type': str, + 'form_class': forms.ChoiceField, + 'serializer_class': serializers.ChoiceField, + 'serializer_kwargs': dict( + choices=( + ('days', _("in days")), + ('minutes', _("in minutes")) + ), + ), + 'form_kwargs': dict( + label=_("Set payment term"), + widget=forms.RadioSelect, + choices=( + ('days', _("in days")), + ('minutes', _("in minutes")) + ), + help_text=_("If using days, the order will expire at the end of the last day. " + "Using minutes is more exact, but should only be used for real-time payment methods.") + ) + }, + 'payment_term_days': { + 'default': '14', + 'type': int, + 'form_class': forms.IntegerField, + 'serializer_class': serializers.IntegerField, + 'form_kwargs': dict( + label=_('Payment term in days'), + widget=forms.NumberInput( + attrs={ + 'data-display-dependency': '#id_payment_term_mode_0', + 'data-required-if': '#id_payment_term_mode_0' + }, + ), + help_text=_("The number of days after placing an order the user has to pay to preserve their reservation. If " + "you use slow payment methods like bank transfer, we recommend 14 days. If you only use real-time " + "payment methods, we recommend still setting two or three days to allow people to retry failed " + "payments."), + validators=[MinValueValidator(0), + MaxValueValidator(1000000)] + ), + 'serializer_kwargs': dict( + validators=[MinValueValidator(0), + MaxValueValidator(1000000)] + ) + }, + 'payment_term_weekdays': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_('Only end payment terms on weekdays'), + help_text=_("If this is activated and the payment term of any order ends on a Saturday or Sunday, it will be " + "moved to the next Monday instead. This is required in some countries by civil law. This will " + "not effect the last date of payments configured below."), + widget=forms.CheckboxInput( + attrs={ + 'data-display-dependency': '#id_payment_term_mode_0', + }, + ), + ) + }, + 'payment_term_minutes': { + 'default': '30', + 'type': int, + 'form_class': forms.IntegerField, + 'serializer_class': serializers.IntegerField, + 'form_kwargs': dict( + label=_('Payment term in minutes'), + help_text=_("The number of minutes after placing an order the user has to pay to preserve their reservation. " + "Only use this if you exclusively offer real-time payment methods. Please note that for technical reasons, " + "the actual time frame might be a few minutes longer before the order is marked as expired."), + validators=[MinValueValidator(0), + MaxValueValidator(1440)], + widget=forms.NumberInput( + attrs={ + 'data-display-dependency': '#id_payment_term_mode_1', + 'data-required-if': '#id_payment_term_mode_1' + }, + ), + ), + 'serializer_kwargs': dict( + validators=[MinValueValidator(0), + MaxValueValidator(1440)] + ) + }, + 'payment_term_last': { + 'default': None, + 'type': RelativeDateWrapper, + 'form_class': RelativeDateField, + 'serializer_class': SerializerRelativeDateField, + 'form_kwargs': dict( + label=_('Last date of payments'), + help_text=_("The last date any payments are accepted. This has precedence over the terms " + "configured above. If you use the event series feature and an order contains tickets for " + "multiple dates, the earliest date will be used."), + ) + }, + 'payment_term_expire_automatically': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_('Automatically expire unpaid orders'), + help_text=_("If checked, all unpaid orders will automatically go from 'pending' to 'expired' " + "after the end of their payment deadline. This means that those tickets go back to " + "the pool and can be ordered by other people."), + ) + }, + 'payment_pending_hidden': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_('Hide "payment pending" state on customer-facing pages'), + help_text=_("The payment instructions panel will still be shown to the primary customer, but no indication " + "of missing payment will be visible on the ticket pages of attendees who did not buy the ticket " + "themselves.") + ) + }, + 'payment_giftcard__enabled': { + 'default': 'True', + 'type': bool + }, + 'payment_resellers__restrict_to_sales_channels': { + 'default': ['resellers'], + 'type': list + }, + 'payment_term_accept_late': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_('Accept late payments'), + help_text=_("Accept payments for orders even when they are in 'expired' state as long as enough " + "capacity is available. No payments will ever be accepted after the 'Last date of payments' " + "configured above."), + ) + }, + 'presale_start_show_date': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Show start date"), + help_text=_("Show the presale start date before presale has started."), + widget=forms.CheckboxInput, + ) + }, + 'tax_rate_default': { + 'default': None, + 'type': TaxRule + }, + 'invoice_generate': { + 'default': 'False', + 'type': str, + 'form_class': forms.ChoiceField, + 'serializer_class': serializers.ChoiceField, + 'serializer_kwargs': dict( + choices=( + ('False', _('Do not generate invoices')), + ('admin', _('Only manually in admin panel')), + ('user', _('Automatically on user request')), + ('True', _('Automatically for all created orders')), + ('paid', _('Automatically on payment or when required by payment method')), + ), + ), + 'form_kwargs': dict( + label=_("Generate invoices"), + widget=forms.RadioSelect, + choices=( + ('False', _('Do not generate invoices')), + ('admin', _('Only manually in admin panel')), + ('user', _('Automatically on user request')), + ('True', _('Automatically for all created orders')), + ('paid', _('Automatically on payment or when required by payment method')), + ), + help_text=_("Invoices will never be automatically generated for free orders.") + ) + }, + 'invoice_reissue_after_modify': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Automatically cancel and reissue invoice on address changes"), + help_text=_("If customers change their invoice address on an existing order, the invoice will " + "automatically be canceled and a new invoice will be issued. This setting does not affect " + "changes made through the backend."), + ) + }, + 'invoice_generate_sales_channels': { + 'default': json.dumps(['web']), + 'type': list + }, + 'invoice_address_from': { + 'default': '', + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'form_kwargs': dict( + label=_("Address line"), + widget=forms.Textarea(attrs={ + 'rows': 2, + 'placeholder': _( + 'Albert Einstein Road 52' + ) + }), + ) + }, + 'invoice_address_from_name': { + 'default': '', + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'form_kwargs': dict( + label=_("Company name"), + ) + }, + 'invoice_address_from_zipcode': { + 'default': '', + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'form_kwargs': dict( + widget=forms.TextInput(attrs={ + 'placeholder': '12345' + }), + label=_("ZIP code"), + ) + }, + 'invoice_address_from_city': { + 'default': '', + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'form_kwargs': dict( + widget=forms.TextInput(attrs={ + 'placeholder': _('Random City') + }), + label=_("City"), + ) + }, + 'invoice_address_from_country': { + 'default': '', + 'type': str, + 'form_class': forms.ChoiceField, + 'serializer_class': serializers.ChoiceField, + 'serializer_kwargs': lambda: dict(**country_choice_kwargs()), + 'form_kwargs': lambda: dict(label=_('Country'), **country_choice_kwargs()), + }, + 'invoice_address_from_tax_id': { + 'default': '', + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'form_kwargs': dict( + label=_("Domestic tax ID"), + help_text=_("e.g. tax number in Germany, ABN in Australia, …") + ) + }, + 'invoice_address_from_vat_id': { + 'default': '', + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'form_kwargs': dict( + label=_("EU VAT ID"), + ) + }, + 'invoice_introductory_text': { + 'default': '', + 'type': LazyI18nString, + 'form_class': I18nFormField, + 'serializer_class': I18nField, + 'form_kwargs': dict( + widget=I18nTextarea, + widget_kwargs={'attrs': { + 'rows': 3, + 'placeholder': _( + 'e.g. With this document, we sent you the invoice for your ticket order.' + ) + }}, + label=_("Introductory text"), + help_text=_("Will be printed on every invoice above the invoice rows.") + ) + }, + 'invoice_additional_text': { + 'default': '', + 'type': LazyI18nString, + 'form_class': I18nFormField, + 'serializer_class': I18nField, + 'form_kwargs': dict( + widget=I18nTextarea, + widget_kwargs={'attrs': { + 'rows': 3, + 'placeholder': _( + 'e.g. Thank you for your purchase! You can find more information on the event at ...' + ) + }}, + label=_("Additional text"), + help_text=_("Will be printed on every invoice below the invoice total.") + ) + }, + 'invoice_footer_text': { + 'default': '', + 'type': LazyI18nString, + 'form_class': I18nFormField, + 'serializer_class': I18nField, + 'form_kwargs': dict( + widget=I18nTextarea, + widget_kwargs={'attrs': { + 'rows': 5, + 'placeholder': _( + 'e.g. your bank details, legal details like your VAT ID, registration numbers, etc.' + ) + }}, + label=_("Footer"), + help_text=_("Will be printed centered and in a smaller font at the end of every invoice page.") + ) + }, + 'invoice_language': { + 'default': '__user__', + 'type': str + }, + 'invoice_email_attachment': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Attach invoices to emails"), + help_text=_("If invoices are automatically generated for all orders, they will be attached to the order " + "confirmation mail. If they are automatically generated on payment, they will be attached to the " + "payment confirmation mail. If they are not automatically generated, they will not be attached " + "to emails."), + ) + }, + 'show_items_outside_presale_period': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Show items outside presale period"), + help_text=_("Show item details before presale has started and after presale has ended"), + ) + }, + 'timezone': { + 'default': settings.TIME_ZONE, + 'type': str + }, + 'locales': { + 'default': json.dumps([settings.LANGUAGE_CODE]), + 'type': list, + 'serializer_class': ListMultipleChoiceField, + 'serializer_kwargs': dict( + choices=settings.LANGUAGES, + required=True, + ), + 'form_class': forms.MultipleChoiceField, + 'form_kwargs': dict( + choices=settings.LANGUAGES, + widget=MultipleLanguagesWidget, + required=True, + label=_("Available languages"), + ) + }, + 'locale': { + 'default': settings.LANGUAGE_CODE, + 'type': str, + 'serializer_class': serializers.ChoiceField, + 'serializer_kwargs': dict( + choices=settings.LANGUAGES, + required=True, + ), + 'form_class': forms.ChoiceField, + 'form_kwargs': dict( + choices=settings.LANGUAGES, + widget=SingleLanguageWidget, + required=True, + label=_("Default language"), + ) + }, + 'region': { + 'default': None, + 'type': str, + 'form_class': forms.ChoiceField, + 'serializer_class': serializers.ChoiceField, + 'serializer_kwargs': lambda: dict(**country_choice_kwargs()), + 'form_kwargs': lambda: dict( + label=_('Region'), + help_text=_('Will be used to determine date and time formatting as well as default country for customer ' + 'addresses and phone numbers. For formatting, this takes less priority than the language and ' + 'is therefore mostly relevant for languages used in different regions globally (like English).'), + **country_choice_kwargs() + ), + }, + 'show_dates_on_frontpage': { + 'default': 'True', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Show event times and dates on the ticket shop"), + help_text=_("If disabled, no date or time will be shown on the ticket shop's front page. This settings " + "does however not affect the display in other locations."), + ) + }, + 'show_date_to': { + 'default': 'True', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Show event end date"), + help_text=_("If disabled, only event's start date will be displayed to the public."), + ) + }, + 'show_times': { + 'default': 'True', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Show dates with time"), + help_text=_("If disabled, the event's start and end date will be displayed without the time of day."), + ) + }, + 'hide_sold_out': { + 'default': 'False', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Hide all products that are sold out"), + ) + }, + 'show_quota_left': { + 'default': 'False', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Show number of tickets left"), + help_text=_("Publicly show how many tickets of a certain type are still available."), + ) + }, + 'meta_noindex': { + 'default': 'False', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_('Ask search engines not to index the ticket shop'), + ) + }, + 'show_variations_expanded': { + 'default': 'False', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Show variations of a product expanded by default"), + ) + }, + 'waiting_list_enabled': { + 'default': 'False', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Enable waiting list"), + help_text=_("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 person on the waiting list and this " + "person will receive an email notification with a voucher that can be used to buy a ticket."), + ) + }, + 'waiting_list_auto': { + 'default': 'True', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Automatic waiting list assignments"), + help_text=_("If ticket capacity becomes free, automatically create a voucher and send it to the first person " + "on the waiting list for that product. If this is not active, mails will not be send automatically " + "but you can send them manually via the control panel. If you disable the waiting list but keep " + "this option enabled, tickets will still be sent out."), + widget=forms.CheckboxInput(), + ) + }, + 'waiting_list_hours': { + 'default': '48', + 'type': int, + 'serializer_class': serializers.IntegerField, + 'form_class': forms.IntegerField, + 'form_kwargs': dict( + label=_("Waiting list response time"), + min_value=1, + help_text=_("If a ticket voucher is sent to a person on the waiting list, it has to be redeemed within this " + "number of hours until it expires and can be re-assigned to the next person on the list."), + widget=forms.NumberInput(), + ) + }, + 'waiting_list_names_asked': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Ask for a name"), + help_text=_("Ask for a name when signing up to the waiting list."), + ) + }, + 'waiting_list_names_required': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Require name"), + help_text=_("Require a name when signing up to the waiting list.."), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-waiting_list_names_asked'}), + ) + }, + 'waiting_list_phones_asked': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Ask for a phone number"), + help_text=_("Ask for a phone number when signing up to the waiting list."), + ) + }, + 'waiting_list_phones_required': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Require phone number"), + help_text=_("Require a phone number when signing up to the waiting list.."), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-waiting_list_phones_asked'}), + ) + }, + 'waiting_list_phones_explanation_text': { + 'default': '', + 'type': LazyI18nString, + 'form_class': I18nFormField, + 'serializer_class': I18nField, + 'form_kwargs': dict( + label=_("Phone number explanation"), + widget=I18nTextarea, + widget_kwargs={'attrs': {'rows': '2'}}, + help_text=_("If you ask for a phone number, explain why you do so and what you will use the phone number for.") + ) + }, + + 'ticket_download': { + 'default': 'False', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Allow users to download tickets"), + help_text=_("If this is off, nobody can download a ticket."), + ) + }, + 'ticket_download_date': { + 'default': None, + 'type': RelativeDateWrapper, + 'form_class': RelativeDateTimeField, + 'serializer_class': SerializerRelativeDateTimeField, + 'form_kwargs': dict( + label=_("Download date"), + help_text=_("Ticket download will be offered after this date. If you use the event series feature and an order " + "contains tickets for multiple event dates, download of all tickets will be available if at least " + "one of the event dates allows it."), + ) + }, + 'ticket_download_addons': { + 'default': 'False', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Generate tickets for add-on products"), + help_text=_('By default, tickets are only issued for products selected individually, not for add-on ' + 'products. With this option, a separate ticket is issued for every add-on product as well.'), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_ticket_download', + 'data-checkbox-dependency-visual': 'on'}), + ) + }, + 'ticket_download_nonadm': { + 'default': 'True', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Generate tickets for all products"), + help_text=_('If turned off, tickets are only issued for products that are marked as an "admission ticket"' + 'in the product settings. You can also turn off ticket issuing in every product separately.'), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_ticket_download', + 'data-checkbox-dependency-visual': 'on'}), + ) + }, + 'ticket_download_pending': { + 'default': 'False', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Generate tickets for pending orders"), + help_text=_('If turned off, ticket downloads are only possible after an order has been marked as paid.'), + widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_ticket_download', + 'data-checkbox-dependency-visual': 'on'}), + ) + }, + 'ticket_download_require_validated_email': { + 'default': 'False', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_("Do not issue ticket before email address is validated"), + help_text=_("If turned on, tickets will not be offered for download directly after purchase. They will " + "be attached to the payment confirmation email (if the file size is not too large), and the " + "customer will be able to download them from the page as soon as they clicked a link in " + "the email. Does not affect orders performed through other sales channels."), + ) + }, + 'event_list_availability': { + 'default': 'True', + 'type': bool, + 'serializer_class': serializers.BooleanField, + 'form_class': forms.BooleanField, + 'form_kwargs': dict( + label=_('Show availability in event overviews'), + help_text=_('If checked, the list of events will show if events are sold out. This might ' + 'make for longer page loading times if you have lots of events and the shown status might be out ' + 'of date for up to two minutes.'), + required=False + ) + }, + 'event_list_type': { + 'default': 'list', + 'type': str, + 'form_class': forms.ChoiceField, + 'serializer_class': serializers.ChoiceField, + 'serializer_kwargs': dict( + choices=( + ('list', _('List')), + ('week', _('Week calendar')), + ('calendar', _('Month calendar')), + ) + ), + 'form_kwargs': dict( + label=_('Default overview style'), + choices=( + ('list', _('List')), + ('week', _('Week calendar')), + ('calendar', _('Month calendar')), + ), + help_text=_('If your event series has more than 50 dates in the future, only the month or week calendar can be used.') + ), + }, + 'event_list_available_only': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Hide all unavailable dates from calendar or list views"), + ) + }, + 'allow_modifications_after_checkin': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Allow customers to modify their information after they checked in."), + ) + }, + 'last_order_modification_date': { + 'default': None, + 'type': RelativeDateWrapper, + 'form_class': RelativeDateTimeField, + 'serializer_class': SerializerRelativeDateTimeField, + 'form_kwargs': dict( + label=_('Last date of modifications'), + help_text=_("The last date users can modify details of their orders, such as attendee names or " + "answers to questions. If you use the event series feature and an order contains tickets for " + "multiple event dates, the earliest date will be used."), + ) + }, + 'change_allow_user_variation': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Customers can change the variation of the products they purchased"), + ) + }, + 'change_allow_user_price': { + 'default': 'gte', + 'type': str, + 'form_class': forms.ChoiceField, + 'serializer_class': serializers.ChoiceField, + 'serializer_kwargs': dict( + choices=( + ('gte', _('Only allow changes if the resulting price is higher or equal than the previous price.')), + ('gt', _('Only allow changes if the resulting price is higher than the previous price.')), + ('eq', _('Only allow changes if the resulting price is equal to the previous price.')), + ('any', _('Allow changes regardless of price, even if this results in a refund.')), + ) + ), + 'form_kwargs': dict( + label=_("Requirement for changed prices"), + choices=( + ('gte', _('Only allow changes if the resulting price is higher or equal than the previous price.')), + ('gt', _('Only allow changes if the resulting price is higher than the previous price.')), + ('eq', _('Only allow changes if the resulting price is equal to the previous price.')), + ('any', _('Allow changes regardless of price, even if this results in a refund.')), + ), + widget=forms.RadioSelect, + ), + }, + 'change_allow_user_until': { + 'default': None, + 'type': RelativeDateWrapper, + 'form_class': RelativeDateTimeField, + 'serializer_class': SerializerRelativeDateTimeField, + 'form_kwargs': dict( + label=_("Do not allow changes after"), + ) + }, + 'cancel_allow_user': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Customers can cancel their unpaid orders"), + ) + }, + 'cancel_allow_user_until': { + 'default': None, + 'type': RelativeDateWrapper, + 'form_class': RelativeDateTimeField, + 'serializer_class': SerializerRelativeDateTimeField, + 'form_kwargs': dict( + label=_("Do not allow cancellations after"), + ) + }, + 'cancel_allow_user_paid': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Customers can cancel their paid orders"), + help_text=_("Paid money will be automatically paid back if the payment method allows it. " + "Otherwise, a manual refund will be created for you to process manually."), + ) + }, + 'cancel_allow_user_paid_keep': { + 'default': '0.00', + 'type': Decimal, + 'form_class': forms.DecimalField, + 'serializer_class': serializers.DecimalField, + 'serializer_kwargs': dict( + max_digits=10, decimal_places=2 + ), + 'form_kwargs': dict( + label=_("Keep a fixed cancellation fee"), + ) + }, + 'cancel_allow_user_paid_keep_fees': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Keep payment, shipping and service fees"), + ) + }, + 'cancel_allow_user_paid_keep_percentage': { + 'default': '0.00', + 'type': Decimal, + 'form_class': forms.DecimalField, + 'serializer_class': serializers.DecimalField, + 'serializer_kwargs': dict( + max_digits=10, decimal_places=2 + ), + 'form_kwargs': dict( + label=_("Keep a percentual cancellation fee"), + ) + }, + 'cancel_allow_user_paid_adjust_fees': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Allow customers to voluntarily choose a lower refund"), + help_text=_("With this option enabled, your customers can choose to get a smaller refund to support you.") + ) + }, + 'cancel_allow_user_paid_adjust_fees_explanation': { + 'default': LazyI18nString.from_gettext(gettext_noop( + 'However, if you want us to help keep the lights on here, please consider using the slider below to ' + 'request a smaller refund. Thank you!' + )), + 'type': LazyI18nString, + 'serializer_class': I18nField, + 'form_class': I18nFormField, + 'form_kwargs': dict( + label=_("Voluntary lower refund explanation"), + widget=I18nTextarea, + widget_kwargs={'attrs': {'rows': '2'}}, + help_text=_("This text will be shown in between the explanation of how the refunds work and the slider " + "which your customers can use to choose the amount they would like to receive. You can use it " + "e.g. to explain choosing a lower refund will help your organization.") + ) + }, + 'cancel_allow_user_paid_adjust_fees_step': { + 'default': None, + 'type': Decimal, + 'form_class': forms.DecimalField, + 'serializer_class': serializers.DecimalField, + 'serializer_kwargs': dict( + max_digits=10, decimal_places=2 + ), + 'form_kwargs': dict( + max_digits=10, decimal_places=2, + label=_("Step size for reduction amount"), + help_text=_('By default, customers can choose an arbitrary amount for you to keep. If you set this to e.g. ' + '10, they will only be able to choose values in increments of 10.') + ) + }, + 'cancel_allow_user_paid_require_approval': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Customers can only request a cancellation that needs to be approved by the event organizer " + "before the order is canceled and a refund is issued."), + ) + }, + 'cancel_allow_user_paid_refund_as_giftcard': { + 'default': 'off', + 'type': str, + 'serializer_class': serializers.ChoiceField, + 'serializer_kwargs': dict( + choices=[ + ('off', _('All refunds are issued to the original payment method')), + ('option', _('Customers can choose between a gift card and a refund to their payment method')), + ('force', _('All refunds are issued as gift cards')), + ], + ), + 'form_class': forms.ChoiceField, + 'form_kwargs': dict( + label=_('Refund method'), + choices=[ + ('off', _('All refunds are issued to the original payment method')), + ('option', _('Customers can choose between a gift card and a refund to their payment method')), + ('force', _('All refunds are issued as gift cards')), + ], + widget=forms.RadioSelect, + # When adding a new ordering, remember to also define it in the event model + ) + }, + 'cancel_allow_user_paid_until': { + 'default': None, + 'type': RelativeDateWrapper, + 'form_class': RelativeDateTimeField, + 'serializer_class': SerializerRelativeDateTimeField, + 'form_kwargs': dict( + label=_("Do not allow cancellations after"), + ) + }, + 'contact_mail': { + 'default': None, + 'type': str, + 'serializer_class': serializers.EmailField, + 'form_class': forms.EmailField, + 'form_kwargs': dict( + label=_("Contact address"), + help_text=_("We'll show this publicly to allow attendees to contact you.") + ) + }, + 'imprint_url': { + 'default': None, + 'type': str, + 'form_class': forms.URLField, + 'form_kwargs': dict( + label=_("Imprint URL"), + help_text=_("This should point e.g. to a part of your website that has your contact details and legal " + "information."), + ), + 'serializer_class': serializers.URLField, + }, + 'confirm_texts': { + 'default': LazyI18nStringListBase(), + 'type': LazyI18nStringListBase, + 'serializer_class': serializers.ListField, + 'serializer_kwargs': lambda: dict(child=I18nField()), + }, + 'mail_html_renderer': { + 'default': 'classic', + 'type': str + }, + 'mail_attach_tickets': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Attach ticket files"), + help_text=format_lazy( + _("Tickets will never be attached if they're larger than {size} to avoid email delivery problems."), + size='4 MB' + ), + ) + }, + 'mail_attach_ical': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Attach calendar files"), + help_text=_("If enabled, we will attach an .ics calendar file to order confirmation emails."), + ) + }, + 'mail_prefix': { + 'default': None, + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'form_kwargs': dict( + label=_("Subject prefix"), + help_text=_("This will be prepended to the subject of all outgoing emails, formatted as [prefix]. " + "Choose, for example, a short form of your event name."), + ) + }, + 'mail_bcc': { + 'default': None, + 'type': str + }, + 'mail_from': { + 'default': settings.MAIL_FROM, + 'type': str, + 'form_class': forms.EmailField, + 'serializer_class': serializers.EmailField, + 'form_kwargs': dict( + label=_("Sender address"), + help_text=_("Sender address for outgoing emails"), + ) + }, + 'mail_from_name': { + 'default': None, + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'form_kwargs': dict( + label=_("Sender name"), + help_text=_("Sender name used in conjunction with the sender address for outgoing emails. " + "Defaults to your event name."), + ) + }, + 'mail_sales_channel_placed_paid': { + 'default': ['web'], + 'type': list, + }, + 'mail_sales_channel_download_reminder': { + 'default': ['web'], + 'type': list, + }, + 'mail_text_signature': { + 'type': LazyI18nString, + 'default': "" + }, + 'mail_text_resend_link': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +you receive this message because you asked us to send you the link +to your order for {event}. + +You can change your order details and view the status of your order at +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_text_resend_all_links': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +somebody requested a list of your orders for {event}. +The list is as follows: + +{orders} + +Best regards, +Your {event} team""")) + }, + 'mail_text_order_free_attendee': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello {attendee_name}, + +you have been registered for {event} successfully. + +You can view the details and status of your ticket here: +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_text_order_free': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +your order for {event} was successful. As you only ordered free products, +no payment is required. + +You can change your order details and view the status of your order at +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_send_order_free_attendee': { + 'type': bool, + 'default': 'False' + }, + 'mail_text_order_placed_require_approval': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +we successfully received your order for {event}. Since you ordered +a product that requires approval by the event organizer, we ask you to +be patient and wait for our next email. + +You can change your order details and view the status of your order at +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_text_order_placed': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +we successfully received your order for {event} with a total value +of {total_with_currency}. Please complete your payment before {expire_date}. + +{payment_info} + +You can change your order details and view the status of your order at +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_send_order_placed_attendee': { + 'type': bool, + 'default': 'False' + }, + 'mail_text_order_placed_attendee': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello {attendee_name}, + +a ticket for {event} has been ordered for you. + +You can view the details and status of your ticket here: +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_text_order_changed': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +your order for {event} has been changed. + +You can view the status of your order at +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_text_order_paid': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +we successfully received your payment for {event}. Thank you! + +{payment_info} + +You can change your order details and view the status of your order at +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_send_order_paid_attendee': { + 'type': bool, + 'default': 'False' + }, + 'mail_text_order_paid_attendee': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello {attendee_name}, + +a ticket for {event} that has been ordered for you is now paid. + +You can view the details and status of your ticket here: +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_days_order_expire_warning': { + 'type': int, + 'default': '3' + }, + 'mail_text_order_expire_warning': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +we did not yet receive a full payment for your order for {event}. +Please keep in mind that we only guarantee your order if we receive +your payment before {expire_date}. + +You can view the payment information and the status of your order at +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_text_waiting_list': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +you submitted yourself to the waiting list for {event}, +for the product {product}. + +We now have a ticket ready for you! You can redeem it in our ticket shop +within the next {hours} hours by entering the following voucher code: + +{code} + +Alternatively, you can just click on the following link: + +{url} + +Please note that this link is only valid within the next {hours} hours! +We will reassign the ticket to the next person on the list if you do not +redeem the voucher within that timeframe. + +Best regards, +Your {event} team""")) + }, + 'mail_text_order_canceled': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +your order {code} for {event} has been canceled. + +You can view the details of your order at +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_text_order_approved': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +we approved your order for {event} and will be happy to welcome you +at our event. + +Please continue by paying for your order before {expire_date}. + +You can select a payment method and perform the payment here: + +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_text_order_approved_free': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +we approved your order for {event} and will be happy to welcome you +at our event. As you only ordered free products, no payment is required. + +You can change your order details and view the status of your order at +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_text_order_denied': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +unfortunately, we denied your order request for {event}. + +{comment} + +You can view the details of your order here: + +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_text_order_custom_mail': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +You can change your order details and view the status of your order at +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_days_download_reminder': { + 'type': int, + 'default': None + }, + 'mail_send_download_reminder_attendee': { + 'type': bool, + 'default': 'False' + }, + 'mail_text_download_reminder_attendee': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello {attendee_name}, + + you are registered for {event}. + + If you did not do so already, you can download your ticket here: + {url} + + Best regards, + Your {event} team""")) + }, + 'mail_text_download_reminder': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, + +you bought a ticket for {event}. + +If you did not do so already, you can download your ticket here: +{url} + +Best regards, +Your {event} team""")) + }, + 'mail_subject_customer_registration': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("Activate your account at {organizer}")), + }, + 'mail_text_customer_registration': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello {name}, + +thank you for signing up for an account at {organizer}! + +To activate your account and set a password, please click here: + +{url} + +This link is valid for one day. + +If you did not sign up yourself, please ignore this email. + +Best regards, + +Your {organizer} team""")) + }, + 'mail_subject_customer_email_change': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("Confirm email address for your account at {organizer}")), + }, + 'mail_subject_customer_reset': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("Set a new password for your account at {organizer}")), + }, + 'mail_text_customer_email_change': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello {name}, + +you requested to change the email address of your account at {organizer}! + +To confirm the change, please click here: + +{url} + +This link is valid for one day. + +If you did not request this, please ignore this email. + +Best regards, + +Your {organizer} team""")) + }, + 'mail_text_customer_reset': { + 'type': LazyI18nString, + 'default': LazyI18nString.from_gettext(gettext_noop("""Hello {name}, + +you requested a new password for your account at {organizer}! + +To set a new password, please click here: + +{url} + +This link is valid for one day. + +If you did not request a new password, please ignore this email. + +Best regards, + +Your {organizer} team""")) + }, + 'smtp_use_custom': { + 'default': 'False', + 'type': bool + }, + 'smtp_host': { + 'default': '', + 'type': str + }, + 'smtp_port': { + 'default': 587, + 'type': int + }, + 'smtp_username': { + 'default': '', + 'type': str + }, + 'smtp_password': { + 'default': '', + 'type': str + }, + 'smtp_use_tls': { + 'default': 'True', + 'type': bool + }, + 'smtp_use_ssl': { + 'default': 'False', + 'type': bool + }, + 'primary_color': { + 'default': settings.PRETIX_PRIMARY_COLOR, + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'serializer_kwargs': dict( + validators=[ + RegexValidator(regex='^#[0-9a-fA-F]{6}$', + message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), + ], + ), + 'form_kwargs': dict( + label=_("Primary color"), + validators=[ + RegexValidator(regex='^#[0-9a-fA-F]{6}$', + message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), + ], + widget=forms.TextInput(attrs={'class': 'colorpickerfield'}) + ), + }, + 'theme_color_success': { + 'default': '#50a167', + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'serializer_kwargs': dict( + validators=[ + RegexValidator(regex='^#[0-9a-fA-F]{6}$', + message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), + ], + ), + 'form_kwargs': dict( + label=_("Accent color for success"), + help_text=_("We strongly suggest to use a shade of green."), + validators=[ + RegexValidator(regex='^#[0-9a-fA-F]{6}$', + message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), + ], + widget=forms.TextInput(attrs={'class': 'colorpickerfield'}) + ), + }, + 'theme_color_danger': { + 'default': '#c44f4f', + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'serializer_kwargs': dict( + validators=[ + RegexValidator(regex='^#[0-9a-fA-F]{6}$', + message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), + ], + ), + 'form_kwargs': dict( + label=_("Accent color for errors"), + help_text=_("We strongly suggest to use a shade of red."), + validators=[ + RegexValidator(regex='^#[0-9a-fA-F]{6}$', + message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), + ], + widget=forms.TextInput(attrs={'class': 'colorpickerfield'}) + ), + }, + 'theme_color_background': { + 'default': '#f5f5f5', + 'type': str, + 'form_class': forms.CharField, + 'serializer_class': serializers.CharField, + 'serializer_kwargs': dict( + validators=[ + RegexValidator(regex='^#[0-9a-fA-F]{6}$', + message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), + ], + ), + 'form_kwargs': dict( + label=_("Page background color"), + validators=[ + RegexValidator(regex='^#[0-9a-fA-F]{6}$', + message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), + ], + widget=forms.TextInput(attrs={'class': 'colorpickerfield no-contrast'}) + ), + }, + 'theme_round_borders': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Use round edges"), + ) + }, + 'primary_font': { + 'default': 'Open Sans', + 'type': str, + 'form_class': forms.ChoiceField, + 'serializer_class': serializers.ChoiceField, + 'serializer_kwargs': lambda: dict(**primary_font_kwargs()), + 'form_kwargs': lambda: dict( + label=_('Font'), + help_text=_('Only respected by modern browsers.'), + widget=FontSelect, + **primary_font_kwargs() + ), + }, + 'presale_css_file': { + 'default': None, + 'type': str + }, + 'presale_css_checksum': { + 'default': None, + 'type': str + }, + 'presale_widget_css_file': { + 'default': None, + 'type': str + }, + 'presale_widget_css_checksum': { + 'default': None, + 'type': str + }, + 'logo_image': { + 'default': None, + 'type': File, + 'form_class': ExtFileField, + 'form_kwargs': dict( + label=_('Header image'), + ext_whitelist=(".png", ".jpg", ".gif", ".jpeg"), + max_size=10 * 1024 * 1024, + help_text=_('If you provide a logo image, we will by default not show your event name and date ' + 'in the page header. By default, we show your logo with a size of up to 1140x120 pixels. You ' + 'can increase the size with the setting below. We recommend not using small details on the picture ' + 'as it will be resized on smaller screens.') + ), + 'serializer_class': UploadedFileField, + 'serializer_kwargs': dict( + allowed_types=[ + 'image/png', 'image/jpeg', 'image/gif' + ], + max_size=10 * 1024 * 1024, + ) + + }, + 'logo_image_large': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_('Use header image in its full size'), + help_text=_('We recommend to upload a picture at least 1170 pixels wide.'), + ) + }, + 'logo_show_title': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_('Show event title even if a header image is present'), + help_text=_('The title will only be shown on the event front page.'), + ) + }, + 'organizer_logo_image': { + 'default': None, + 'type': File, + 'form_class': ExtFileField, + 'form_kwargs': dict( + label=_('Header image'), + ext_whitelist=(".png", ".jpg", ".gif", ".jpeg"), + max_size=10 * 1024 * 1024, + help_text=_('If you provide a logo image, we will by default not show your organization name ' + 'in the page header. By default, we show your logo with a size of up to 1140x120 pixels. You ' + 'can increase the size with the setting below. We recommend not using small details on the picture ' + 'as it will be resized on smaller screens.') + ), + 'serializer_class': UploadedFileField, + 'serializer_kwargs': dict( + allowed_types=[ + 'image/png', 'image/jpeg', 'image/gif' + ], + max_size=10 * 1024 * 1024, + ) + }, + 'organizer_logo_image_large': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_('Use header image in its full size'), + help_text=_('We recommend to upload a picture at least 1170 pixels wide.'), + ) + }, + 'og_image': { + 'default': None, + 'type': File, + 'form_class': ExtFileField, + 'form_kwargs': dict( + label=_('Social media image'), + ext_whitelist=(".png", ".jpg", ".gif", ".jpeg"), + max_size=10 * 1024 * 1024, + 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.') + ), + 'serializer_class': UploadedFileField, + 'serializer_kwargs': dict( + allowed_types=[ + 'image/png', 'image/jpeg', 'image/gif' + ], + max_size=10 * 1024 * 1024, + ) + }, + 'invoice_logo_image': { + 'default': None, + 'type': File, + 'form_class': ExtFileField, + 'form_kwargs': dict( + label=_('Logo image'), + ext_whitelist=(".png", ".jpg", ".gif", ".jpeg"), + required=False, + max_size=10 * 1024 * 1024, + help_text=_('We will show your logo with a maximal height and width of 2.5 cm.') + ), + 'serializer_class': UploadedFileField, + 'serializer_kwargs': dict( + allowed_types=[ + 'image/png', 'image/jpeg', 'image/gif' + ], + max_size=10 * 1024 * 1024, + ) + }, + 'frontpage_text': { + 'default': '', + 'type': LazyI18nString, + 'serializer_class': I18nField, + 'form_class': I18nFormField, + 'form_kwargs': dict( + label=_("Frontpage text"), + widget=I18nTextarea + ) + }, + 'event_info_text': { + 'default': '', + 'type': LazyI18nString, + 'serializer_class': I18nField, + 'form_class': I18nFormField, + 'form_kwargs': dict( + label=_('Info text'), + widget=I18nTextarea, + widget_kwargs={'attrs': {'rows': '2'}}, + help_text=_('Not displayed anywhere by default, but if you want to, you can use this e.g. in ticket templates.') + ) + }, + 'banner_text': { + 'default': '', + 'type': LazyI18nString, + 'serializer_class': I18nField, + 'form_class': I18nFormField, + 'form_kwargs': dict( + label=_("Banner text (top)"), + widget=I18nTextarea, + widget_kwargs={'attrs': {'rows': '2'}}, + help_text=_("This text will be shown above every page of your shop. Please only use this for " + "very important messages.") + ) + }, + 'banner_text_bottom': { + 'default': '', + 'type': LazyI18nString, + 'serializer_class': I18nField, + 'form_class': I18nFormField, + 'form_kwargs': dict( + label=_("Banner text (bottom)"), + widget=I18nTextarea, + widget_kwargs={'attrs': {'rows': '2'}}, + help_text=_("This text will be shown below every page of your shop. Please only use this for " + "very important messages.") + ) + }, + 'voucher_explanation_text': { + 'default': '', + 'type': LazyI18nString, + 'serializer_class': I18nField, + 'form_class': I18nFormField, + 'form_kwargs': dict( + label=_("Voucher explanation"), + widget=I18nTextarea, + widget_kwargs={'attrs': {'rows': '2'}}, + help_text=_("This text will be shown next to the input for a voucher code. You can use it e.g. to explain " + "how to obtain a voucher code.") + ) + }, + 'attendee_data_explanation_text': { + 'default': '', + 'type': LazyI18nString, + 'serializer_class': I18nField, + 'form_class': I18nFormField, + 'form_kwargs': dict( + label=_("Attendee data explanation"), + widget=I18nTextarea, + widget_kwargs={'attrs': {'rows': '2'}}, + help_text=_("This text will be shown above the questions asked for every admission product. You can use it e.g. to explain " + "why you need information from them.") + ) + }, + 'checkout_success_text': { + 'default': '', + 'type': LazyI18nString, + 'serializer_class': I18nField, + 'form_class': I18nFormField, + 'form_kwargs': dict( + label=_("Additional success message"), + help_text=_("This message will be shown after an order has been created successfully. It will be shown in additional " + "to the default text."), + widget_kwargs={'attrs': {'rows': '2'}}, + widget=I18nTextarea + ) + }, + 'checkout_phone_helptext': { + 'default': '', + 'type': LazyI18nString, + 'serializer_class': I18nField, + 'form_class': I18nFormField, + 'form_kwargs': dict( + label=_("Help text of the phone number field"), + widget_kwargs={'attrs': {'rows': '2'}}, + widget=I18nTextarea + ) + }, + 'checkout_email_helptext': { + 'default': LazyI18nString.from_gettext(gettext_noop( + 'Make sure to enter a valid email address. We will send you an order ' + 'confirmation including a link that you need to access your order later.' + )), + 'type': LazyI18nString, + 'serializer_class': I18nField, + 'form_class': I18nFormField, + 'form_kwargs': dict( + label=_("Help text of the email field"), + widget_kwargs={'attrs': {'rows': '2'}}, + widget=I18nTextarea + ) + }, + 'order_import_settings': { + 'default': '{}', + 'type': dict + }, + 'organizer_info_text': { + 'default': '', + 'type': LazyI18nString, + 'serializer_class': I18nField, + 'form_class': I18nFormField, + 'form_kwargs': dict( + label=_('Info text'), + widget=I18nTextarea, + help_text=_('Not displayed anywhere by default, but if you want to, you can use this e.g. in ticket templates.') + ) + }, + 'event_team_provisioning': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_('Allow creating a new team during event creation'), + help_text=_('Users that do not have access to all events under this organizer, must select one of their teams ' + 'to have access to the created event. This setting allows users to create an event-specified team' + ' on-the-fly, even when they do not have \"Can change teams and permissions\" permission.'), + ) + }, + 'update_check_ack': { + 'default': 'False', + 'type': bool + }, + 'update_check_email': { + 'default': '', + 'type': str + }, + # here is the default setting for the updates check + 'update_check_perform': { + 'default': 'False', + 'type': bool + }, + 'update_check_result': { + 'default': None, + 'type': dict + }, + 'update_check_result_warning': { + 'default': 'False', + 'type': bool + }, + 'update_check_last': { + 'default': None, + 'type': datetime + }, + 'update_check_id': { + 'default': None, + 'type': str + }, + 'banner_message': { + 'default': '', + 'type': LazyI18nString + }, + 'banner_message_detail': { + 'default': '', + 'type': LazyI18nString + }, + 'opencagedata_apikey': { + 'default': None, + 'type': str + }, + 'mapquest_apikey': { + 'default': None, + 'type': str + }, + 'leaflet_tiles': { + 'default': None, + 'type': str + }, + 'leaflet_tiles_attribution': { + 'default': None, + 'type': str + }, + 'frontpage_subevent_ordering': { + 'default': 'date_ascending', + 'type': str, + 'serializer_class': serializers.ChoiceField, + 'serializer_kwargs': dict( + choices=[ + ('date_ascending', _('Event start time')), + ('date_descending', _('Event start time (descending)')), + ('name_ascending', _('Name')), + ('name_descending', _('Name (descending)')), + ], + ), + 'form_class': forms.ChoiceField, + 'form_kwargs': dict( + label=pgettext('subevent', 'Date ordering'), + choices=[ + ('date_ascending', _('Event start time')), + ('date_descending', _('Event start time (descending)')), + ('name_ascending', _('Name')), + ('name_descending', _('Name (descending)')), + ], + # When adding a new ordering, remember to also define it in the event model + ) + }, + 'organizer_link_back': { + 'default': 'False', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_('Link back to organizer overview on all event pages'), + ) + }, + 'organizer_homepage_text': { + 'default': '', + 'type': LazyI18nString, + 'serializer_class': I18nField, + 'form_class': I18nFormField, + 'form_kwargs': dict( + label=_('Homepage text'), + widget=I18nTextarea, + help_text=_('This will be displayed on the organizer homepage.') + ) + }, + 'name_scheme': { + 'default': 'full', + 'type': str + }, + 'giftcard_length': { + 'default': settings.ENTROPY['giftcard_secret'], + 'type': int, + 'form_class': forms.IntegerField, + 'serializer_class': serializers.IntegerField, + 'form_kwargs': dict( + label=_('Length of gift card codes'), + help_text=_('The system generates by default {}-character long gift card codes. However, if a different length ' + 'is required, it can be set here.'.format(settings.ENTROPY['giftcard_secret'])), + ) + }, + 'giftcard_expiry_years': { + 'default': None, + 'type': int, + 'form_class': forms.IntegerField, + 'serializer_class': serializers.IntegerField, + 'form_kwargs': dict( + 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.'), + ) + }, + 'privacy_policy': { + 'default': None, + 'type': LazyI18nString, + 'form_class': I18nURLFormField, + 'form_kwargs': dict( + label=_("Privacy Policy URL"), + help_text=_("This should link to a section of your website that explains " + "how you use the data gathered in your ticket shop."), + widget=I18nTextInput, + ), + 'serializer_class': I18nURLField, + }, + 'seating_choice': { + 'default': 'True', + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Customers can choose their own seats"), + help_text=_("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."), + ), + 'type': bool, + }, + 'seating_minimal_distance': { + 'default': '0', + 'type': float + }, + 'seating_allow_blocked_seats_for_channel': { + 'default': [], + 'type': list + }, + 'seating_distance_within_row': { + 'default': 'False', + 'type': bool + }, + 'checkout_show_copy_answers_button': { + 'default': 'True', + 'type': bool, + 'form_class': forms.BooleanField, + 'serializer_class': serializers.BooleanField, + 'form_kwargs': dict( + label=_("Show button to copy user input from other products"), + ), + } +} + +CSS_SETTINGS = { + 'primary_color', 'theme_color_success', 'theme_color_danger', 'primary_font', + 'theme_color_background', 'theme_round_borders' +} + +TITLE_GROUP = OrderedDict([ + ('english_common', (_('Most common English titles'), ( + 'Mr', + 'Ms', + 'Mrs', + 'Miss', + 'Mx', + 'Dr', + 'Professor', + 'Sir', + ))), + ('german_common', (_('Most common German titles'), ( + 'Dr.', + 'Prof.', + 'Prof. Dr.', + ))) +]) + +NAME_SALUTION = [ + pgettext_lazy("person_name_salutation", "Ms"), + pgettext_lazy("person_name_salutation", "Mr"), +] + +NAME_SCHEMES = OrderedDict([ + ('given_family', { + 'fields': ( + # field_name, label, weight for widget width + ('given_name', _('Given name'), 1), + ('family_name', _('Family name'), 1), + ), + 'concatenation': lambda d: ' '.join(str(p) for p in [d.get('given_name', ''), d.get('family_name', '')] if p), + 'sample': { + 'given_name': pgettext_lazy('person_name_sample', 'John'), + 'family_name': pgettext_lazy('person_name_sample', 'Doe'), + '_scheme': 'given_family', + }, + }), + ('title_given_family', { + 'fields': ( + ('title', pgettext_lazy('person_name', 'Title'), 1), + ('given_name', _('Given name'), 2), + ('family_name', _('Family name'), 2), + ), + 'concatenation': lambda d: ' '.join( + str(p) for p in [d.get('title', ''), d.get('given_name', ''), d.get('family_name', '')] if p + ), + 'sample': { + 'title': pgettext_lazy('person_name_sample', 'Dr'), + 'given_name': pgettext_lazy('person_name_sample', 'John'), + 'family_name': pgettext_lazy('person_name_sample', 'Doe'), + '_scheme': 'title_given_family', + }, + }), + ('title_given_family', { + 'fields': ( + ('title', pgettext_lazy('person_name', 'Title'), 1), + ('given_name', _('Given name'), 2), + ('family_name', _('Family name'), 2), + ), + 'concatenation': lambda d: ' '.join( + str(p) for p in [d.get('title', ''), d.get('given_name', ''), d.get('family_name', '')] if p + ), + 'sample': { + 'title': pgettext_lazy('person_name_sample', 'Dr'), + 'given_name': pgettext_lazy('person_name_sample', 'John'), + 'family_name': pgettext_lazy('person_name_sample', 'Doe'), + '_scheme': 'title_given_family', + }, + }), + ('given_middle_family', { + 'fields': ( + ('given_name', _('First name'), 2), + ('middle_name', _('Middle name'), 1), + ('family_name', _('Family name'), 2), + ), + 'concatenation': lambda d: ' '.join( + str(p) for p in [d.get('given_name', ''), d.get('middle_name', ''), d.get('family_name', '')] if p + ), + 'sample': { + 'given_name': pgettext_lazy('person_name_sample', 'John'), + 'middle_name': 'M', + 'family_name': pgettext_lazy('person_name_sample', 'Doe'), + '_scheme': 'given_middle_family', + }, + }), + ('title_given_middle_family', { + 'fields': ( + ('title', pgettext_lazy('person_name', 'Title'), 1), + ('given_name', _('First name'), 2), + ('middle_name', _('Middle name'), 1), + ('family_name', _('Family name'), 1), + ), + 'concatenation': lambda d: ' '.join( + str(p) for p in [d.get('title', ''), d.get('given_name'), d.get('middle_name'), d.get('family_name')] if p + ), + 'sample': { + 'title': pgettext_lazy('person_name_sample', 'Dr'), + 'given_name': pgettext_lazy('person_name_sample', 'John'), + 'middle_name': 'M', + 'family_name': pgettext_lazy('person_name_sample', 'Doe'), + '_scheme': 'title_given_middle_family', + }, + }), + ('family_given', { + 'fields': ( + ('family_name', _('Family name'), 1), + ('given_name', _('Given name'), 1), + ), + 'concatenation': lambda d: ' '.join( + str(p) for p in [d.get('family_name', ''), d.get('given_name', '')] if p + ), + 'sample': { + 'given_name': pgettext_lazy('person_name_sample', 'John'), + 'family_name': pgettext_lazy('person_name_sample', 'Doe'), + '_scheme': 'family_given', + }, + }), + ('family_nospace_given', { + 'fields': ( + ('given_name', _('Given name'), 1), + ('family_name', _('Family name'), 1), + ), + 'concatenation': lambda d: ''.join( + str(p) for p in [d.get('family_name', ''), d.get('given_name', '')] if p + ), + 'sample': { + 'given_name': '泽东', + 'family_name': '毛', + '_scheme': 'family_nospace_given', + }, + }), + ('family_comma_given', { + 'fields': ( + ('given_name', _('Given name'), 1), + ('family_name', _('Family name'), 1), + ), + 'concatenation': lambda d: ( + str(d.get('family_name', '')) + + str((', ' if d.get('family_name') and d.get('given_name') else '')) + + str(d.get('given_name', '')) + ), + 'sample': { + 'given_name': pgettext_lazy('person_name_sample', 'John'), + 'family_name': pgettext_lazy('person_name_sample', 'Doe'), + '_scheme': 'family_comma_given', + }, + }), + ('full', { + 'fields': ( + ('full_name', _('Name'), 1), + ), + 'concatenation': lambda d: str(d.get('full_name', '')), + 'sample': { + 'full_name': pgettext_lazy('person_name_sample', 'John Doe'), + '_scheme': 'full', + }, + }), + ('calling_full', { + 'fields': ( + ('calling_name', _('Calling name'), 1), + ('full_name', _('Full name'), 2), + ), + 'concatenation': lambda d: str(d.get('full_name', '')), + 'sample': { + 'full_name': pgettext_lazy('person_name_sample', 'John Doe'), + 'calling_name': pgettext_lazy('person_name_sample', 'John'), + '_scheme': 'calling_full', + }, + }), + ('full_transcription', { + 'fields': ( + ('full_name', _('Full name'), 1), + ('latin_transcription', _('Latin transcription'), 2), + ), + 'concatenation': lambda d: str(d.get('full_name', '')), + 'sample': { + 'full_name': '庄司', + 'latin_transcription': 'Shōji', + '_scheme': 'full_transcription', + }, + }), + ('salutation_given_family', { + 'fields': ( + ('salutation', pgettext_lazy('person_name', 'Salutation'), 1), + ('given_name', _('Given name'), 2), + ('family_name', _('Family name'), 2), + ), + 'concatenation': lambda d: ' '.join( + str(p) for p in (d.get(key, '') for key in ["given_name", "family_name"]) if p + ), + 'sample': { + 'salutation': pgettext_lazy('person_name_sample', 'Mr'), + 'given_name': pgettext_lazy('person_name_sample', 'John'), + 'family_name': pgettext_lazy('person_name_sample', 'Doe'), + '_scheme': 'salutation_given_family', + }, + }), + ('salutation_title_given_family', { + 'fields': ( + ('salutation', pgettext_lazy('person_name', 'Salutation'), 1), + ('title', pgettext_lazy('person_name', 'Title'), 1), + ('given_name', _('Given name'), 2), + ('family_name', _('Family name'), 2), + ), + 'concatenation': lambda d: ' '.join( + str(p) for p in (d.get(key, '') for key in ["title", "given_name", "family_name"]) if p + ), + 'sample': { + 'salutation': pgettext_lazy('person_name_sample', 'Mr'), + 'title': pgettext_lazy('person_name_sample', 'Dr'), + 'given_name': pgettext_lazy('person_name_sample', 'John'), + 'family_name': pgettext_lazy('person_name_sample', 'Doe'), + '_scheme': 'salutation_title_given_family', + }, + }), + ('salutation_title_given_family_degree', { + 'fields': ( + ('salutation', pgettext_lazy('person_name', 'Salutation'), 1), + ('title', pgettext_lazy('person_name', 'Title'), 1), + ('given_name', _('Given name'), 2), + ('family_name', _('Family name'), 2), + ('degree', pgettext_lazy('person_name', 'Degree (after name)'), 2), + ), + 'concatenation': lambda d: ( + ' '.join( + str(p) for p in (d.get(key, '') for key in ["title", "given_name", "family_name"]) if p + ) + + str((', ' if d.get('degree') else '')) + + str(d.get('degree', '')) + ), + 'sample': { + 'salutation': pgettext_lazy('person_name_sample', 'Mr'), + 'title': pgettext_lazy('person_name_sample', 'Dr'), + 'given_name': pgettext_lazy('person_name_sample', 'John'), + 'family_name': pgettext_lazy('person_name_sample', 'Doe'), + 'degree': pgettext_lazy('person_name_sample', 'MA'), + '_scheme': 'salutation_title_given_family_degree', + }, + }), +]) + +COUNTRIES_WITH_STATE = { + # Source: http://www.bitboost.com/ref/international-address-formats.html + # This is not a list of countries that *have* states, this is a list of countries where states + # are actually *used* in postal addresses. This is obviously not complete and opinionated. + # Country: [(List of subdivision types as defined by pycountry), (short or long form to be used)] + 'AU': (['State', 'Territory'], 'short'), + 'BR': (['State'], 'short'), + 'CA': (['Province', 'Territory'], 'short'), + # 'CN': (['Province', 'Autonomous region', 'Munincipality'], 'long'), + 'MY': (['State'], 'long'), + 'MX': (['State', 'Federal District'], 'short'), + 'US': (['State', 'Outlying area', 'District'], 'short'), +} \ No newline at end of file diff --git a/src/pretix/base/configurations/lazy_i18n_string_list_base.py b/src/pretix/base/configurations/lazy_i18n_string_list_base.py new file mode 100644 index 000000000..2f6d3fb28 --- /dev/null +++ b/src/pretix/base/configurations/lazy_i18n_string_list_base.py @@ -0,0 +1,17 @@ +from collections import UserList +import json +from i18nfield.strings import LazyI18nString + + +class LazyI18nStringListBase(UserList): + def __init__(self, init_list=None): + super().__init__() + if init_list is not None: + self.data = [v if isinstance(v, LazyI18nString) else LazyI18nString(v) for v in init_list] + + def serialize(self): + return json.dumps([s.data for s in self.data]) + + @classmethod + def unserialize(cls, s): + return cls(json.loads(s)) \ No newline at end of file diff --git a/src/pretix/plugins/stripe/utils.py b/src/pretix/base/customersso/__init__.py similarity index 100% rename from src/pretix/plugins/stripe/utils.py rename to src/pretix/base/customersso/__init__.py diff --git a/src/pretix/base/customersso/oidc.py b/src/pretix/base/customersso/oidc.py new file mode 100644 index 000000000..d8f2cdb68 --- /dev/null +++ b/src/pretix/base/customersso/oidc.py @@ -0,0 +1,362 @@ +import base64 +import hashlib +import logging +import time +from datetime import datetime +from urllib.parse import urlencode, urljoin + +import jwt +import requests +from cryptography.hazmat.primitives.asymmetric.rsa import generate_private_key +from cryptography.hazmat.primitives.serialization import ( + Encoding, NoEncryption, PrivateFormat, PublicFormat, +) +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ +from requests import RequestException + +from pretix.multidomain.urlreverse import build_absolute_uri + +logger = logging.getLogger(__name__) + + +def _urljoin(base, path): + """ + Joins a base URL and a relative path to form a complete URL. + Args: + base (str): The base URL. + path (str): The relative path to be joined with the base URL. + Returns: + str: The complete URL formed by joining the base URL and the relative path. + """ + if not base.endswith("/"): + base += "/" + return urljoin(base, path) + + +def oidc_validate_and_complete_config(config): + """ + Validates and completes the OIDC configuration. + + Args: + config (dict): A dictionary containing the OIDC configuration options. + + Returns: + dict: The validated and completed OIDC configuration. + + Raises: + ValidationError: If any required configuration option is missing or if the provider is incompatible. + """ + required_keys = ["base_url", "client_id", "client_secret", "uid_field", "email_field", "scope"] + missing_keys = [k for k in required_keys if not config.get(k)] + if missing_keys: + raise ValidationError(_('Configuration option(s) "{name}" is missing.').format(name=", ".join(missing_keys))) + + conf_url = _urljoin(config["base_url"], ".well-known/openid-configuration") + try: + provider_resp = requests.get(conf_url, timeout=10) + provider_resp.raise_for_status() + provider_config = provider_resp.json() + except (RequestException, ValueError) as e: + raise ValidationError(_('Unable to retrieve configuration from "{url}". Error message: "{error}".').format( + url=conf_url, + error=str(e) + )) + + required_endpoints = ["authorization_endpoint", "userinfo_endpoint", "token_endpoint"] + for endpoint in required_endpoints: + if not provider_config.get(endpoint): + raise ValidationError(_('Incompatible SSO provider: "{error}".').format( + error=f"{endpoint} not set" + )) + + if "code" not in provider_config.get("response_types_supported", []): + raise ValidationError(_('Incompatible SSO provider: "{error}".').format( + error=f"provider supports response types {', '.join(provider_config.get('response_types_supported', []))}, but we only support 'code'." + )) + + if "query" not in provider_config.get("response_modes_supported", ["query", "fragment"]): + raise ValidationError(_('Incompatible SSO provider: "{error}".').format( + error=f"provider supports response modes {', '.join(provider_config.get('response_modes_supported', []))}, but we only support 'query'." + )) + + if "authorization_code" not in provider_config.get("grant_types_supported", ["authorization_code", "implicit"]): + raise ValidationError(_('Incompatible SSO provider: "{error}".').format( + error=f"provider supports grant types {', '.join(provider_config.get('grant_types_supported', []))}, but we only support 'authorization_code'." + )) + + if "openid" not in config["scope"].split(" "): + raise ValidationError(_('You are not requesting "{scope}".').format(scope="openid")) + + for scope in config["scope"].split(" "): + if scope not in provider_config.get("scopes_supported", []): + raise ValidationError( + _('You are requesting scope "{scope}" but provider only supports these: {scopes}.').format( + scope=scope, + scopes=", ".join(provider_config.get("scopes_supported", [])) + )) + + for k, v in config.items(): + if k.endswith('_field') and v: + if v not in provider_config.get("claims_supported", []): + raise ValidationError( + _('You are requesting field "{field}" but provider only supports these: {fields}.').format( + field=v, + fields=", ".join(provider_config.get("claims_supported", [])) + )) + + config['provider_config'] = provider_config + return config + + +def oidc_authorize_url(provider, state, redirect_uri): + """ + Constructs the OIDC authorization URL. + + Args: + provider: The OIDC provider containing configuration details. + state (str): A unique state string to prevent CSRF attacks. + redirect_uri (str): The URI to which the response will be sent. + + Returns: + str: The constructed authorization URL. + """ + # Retrieve the authorization endpoint from the provider's configuration + endpoint = provider.configuration['provider_config']['authorization_endpoint'] + + # Construct URL parameters + params = { + 'response_type': 'code', + 'client_id': provider.configuration['client_id'], + 'scope': provider.configuration['scope'], + 'state': state, + 'redirect_uri': redirect_uri, + } + + # Join the endpoint with encoded parameters + url = urljoin(endpoint, '?' + urlencode(params)) + + return url + + +def oidc_validate_authorization(provider, code, redirect_uri): + """ + Validates the OIDC authorization code and retrieves user information. + + Args: + provider: The OIDC provider containing configuration details. + code (str): The authorization code received from the OIDC provider. + redirect_uri (str): The URI to which the response will be sent. + + Returns: + dict: A dictionary containing the user's profile information. + + Raises: + ValidationError: If any part of the authorization or user info retrieval process fails. + """ + endpoint = provider.configuration['provider_config']['token_endpoint'] + params = { + 'grant_type': 'authorization_code', + 'code': code, + 'redirect_uri': redirect_uri, + } + try: + resp = requests.post( + endpoint, + data=params, + headers={ + 'Accept': 'application/json', + }, + auth=( + provider.configuration['client_id'], + provider.configuration['client_secret'] + ), + ) + resp.raise_for_status() + data = resp.json() + except RequestException: + logger.exception('Could not retrieve authorization token') + raise ValidationError( + _('Login was not successful. Error message: "{error}".').format( + error='could not reach login provider', + ) + ) + + if 'access_token' not in data: + raise ValidationError( + _('Login was not successful. Error message: "{error}".').format( + error='access token missing', + ) + ) + + endpoint = provider.configuration['provider_config']['userinfo_endpoint'] + try: + resp = requests.get( + endpoint, + headers={ + 'Authorization': f'Bearer {data["access_token"]}' + }, + ) + resp.raise_for_status() + userinfo = resp.json() + except RequestException: + logger.exception('Could not retrieve user info') + raise ValidationError( + _('Login was not successful. Error message: "{error}".').format( + error='could not fetch user info', + ) + ) + + if userinfo.get('email_verified') is False: + raise ValidationError(_('The email address on this account is not yet verified. Please first confirm the ' + 'email address in your customer account.')) + profile = {k[:-6]: userinfo.get(v) for k, v in provider.configuration.items() if k.endswith('_field')} + + missing_fields = [field for field in ['uid', 'email'] if not profile.get(field)] + if missing_fields: + raise ValidationError( + _('Login was not successful. Error message: "{error}".').format( + error=f'could not fetch user {", ".join(missing_fields)}', + ) + ) + + return profile + + +def _hash_scheme(value): + """ + Hashes the input value using SHA-256, truncates the hash to half its length, + and encodes it in URL-safe Base64. + + Args: + value (str): The input string to be hashed. + + Returns: + str: The URL-safe Base64 encoded hash of the input string, truncated to half its length. + """ + # Compute SHA-256 hash of the input value + digest = hashlib.sha256(value.encode()).digest() + + # Truncate the hash to half its length + digest_truncated = digest[:len(digest) // 2] + + # Encode the truncated hash in URL-safe Base64 and remove padding + encoded_value = base64.urlsafe_b64encode(digest_truncated).decode().rstrip("=") + + return encoded_value + + +def customer_claims(customer, scope): + """ + Generates a dictionary of claims for the given customer based on the requested scope. + + Args: + customer (Customer model): The customer object containing relevant information. + scope (str): A space-separated string of scopes indicating which claims to include. + + Returns: + dict: A dictionary containing the claims for the customer. + """ + scope_set = set(scope.split(' ')) + claims = { + 'sub': customer.identifier, + 'locale': customer.locale, + } + + if 'profile' in scope_set: + if customer.name: + claims['name'] = customer.name + name_parts = customer.name_parts + if 'given_name' in name_parts: + claims['given_name'] = name_parts['given_name'] + if 'family_name' in name_parts: + claims['family_name'] = name_parts['family_name'] + if 'middle_name' in name_parts: + claims['middle_name'] = name_parts['middle_name'] + if 'calling_name' in name_parts: + claims['nickname'] = name_parts['calling_name'] + + if 'email' in scope_set and customer.email: + claims['email'] = customer.email + claims['email_verified'] = customer.is_verified + + if 'phone' in scope_set and customer.phone: + claims['phone_number'] = customer.phone.as_international + + return claims + + +def _get_or_create_server_keypair(organizer): + """ + Retrieves or creates an RSA key pair for the given organizer. If the keys do not exist, they are generated and stored. + + Args: + organizer: The organizer object containing settings for SSO server keys. + + Returns: + tuple: A tuple containing the private key and public key in PEM format. + """ + # Check if the private key does not exist + if not organizer.settings.sso_server_signing_key_rsa256_private: + prkey = generate_private_key(key_size=4096, public_exponent=65537) + pubkey = prkey.public_key() + organizer.settings.sso_server_signing_key_rsa256_private = prkey.private_bytes( + Encoding.PEM, PrivateFormat.PKCS8, NoEncryption() + ).decode() + + # Store the public key in PEM format + organizer.settings.sso_server_signing_key_rsa256_public = pubkey.public_bytes( + Encoding.PEM, PublicFormat.SubjectPublicKeyInfo + ).decode() + return organizer.settings.sso_server_signing_key_rsa256_private, organizer.settings.sso_server_signing_key_rsa256_public + + +def generate_id_token(customer, client, auth_time, nonce, scope, expires: datetime, scope_claims=False, with_code=None, + with_access_token=None): + """ + Generates an ID token for the given customer and client. + + Args: + customer: The customer object containing relevant information. + client: The client object containing relevant information. + auth_time (int): The authentication time as a Unix timestamp. + nonce (str): A unique string to associate the token with the authentication request. + scope (str): A space-separated string of scopes. + expires (datetime): The expiration time of the token. + scope_claims (bool): Whether to include claims based on the evaluated scope. + with_code (str, optional): An optional authorization code to include in the token. + with_access_token (str, optional): An optional access token to include in the token. + + Returns: + str: The generated ID token as a JWT. + """ + # Build the payload for the ID token + payload = { + 'iss': build_absolute_uri(client.organizer, 'presale:organizer.index').rstrip('/'), + 'aud': client.client_id, + 'exp': int(expires.timestamp()), + 'iat': int(time.time()), + 'auth_time': auth_time, + **customer_claims(customer, client.evaluated_scope(scope) if scope_claims else ''), + } + + # Add optional claims if provided + if nonce: + payload['nonce'] = nonce + if with_code: + payload['c_hash'] = _hash_scheme(with_code) + if with_access_token: + payload['at_hash'] = _hash_scheme(with_access_token) + + # Get or create the server keypair for signing + privkey, pubkey = _get_or_create_server_keypair(client.organizer) + + # Generate the ID token as a JWT + return jwt.encode( + payload, + privkey, + headers={ + "kid": hashlib.sha256(pubkey.encode()).hexdigest()[:16] + }, + algorithm="RS256", + ) diff --git a/src/pretix/base/email.py b/src/pretix/base/email.py index 8cc205911..4da571ab0 100644 --- a/src/pretix/base/email.py +++ b/src/pretix/base/email.py @@ -23,10 +23,64 @@ register_html_mail_renderers, register_mail_placeholders, ) from pretix.base.templatetags.rich_text import markdown_compile_email +import os +from sendgrid import SendGridAPIClient +from sendgrid.helpers.mail import Mail, Attachment, Bcc logger = logging.getLogger('pretix.base.email') +class SendGridEmail(): + api_key = "" + def __init__(self, api_key): + self.api_key = api_key + + def test(self, from_addr): + message = Mail( + from_email=from_addr, + to_emails='testdummy@eventyay.com', + subject='Eventyay test email', + html_content='Eventyay test email') + sg = SendGridAPIClient(self.api_key) + sg.send(message) + + def bytes_to_base64_string(self, value: bytes) -> str: + import base64 + return base64.b64encode(value).decode('ASCII') + + def build_attachment(self, input): + + attachment = Attachment() + attachment.file_content = self.bytes_to_base64_string(input[1]) + attachment.file_type = input[2] + attachment.file_name = input[0] + attachment.disposition = "attachment" + # attachment.content_id = "Balance Sheet" + return attachment + + + def send_messages(self, emails): + print("======================== send mess grid") + for email in emails: + message = Mail( + from_email=email.from_email, + to_emails=email.to, + subject=email.subject, + html_content=email.body) + sg = SendGridAPIClient(self.api_key) + bcc = [] + for mail in email.bcc: + bcc.append(Bcc(mail)) + message.bcc = bcc + attachments = [] + for attachment in email.attachments: + + attachments.append(self.build_attachment(attachment)) + + message.attachment = attachments + sg.send(message) + + class CustomSMTPBackend(EmailBackend): def test(self, from_addr): @@ -50,8 +104,9 @@ class BaseHTMLMailRenderer: This is the base class for all HTML e-mail renderers. """ - def __init__(self, event: Event): + def __init__(self, event: Event, organizer=None): self.event = event + self.organizer = organizer def __str__(self): return self.identifier @@ -119,6 +174,9 @@ def render(self, plain_body: str, plain_signature: str, subject: str, order, pos 'color': settings.PRETIX_PRIMARY_COLOR, 'rtl': get_language() in settings.LANGUAGES_RTL or get_language().split('-')[0] in settings.LANGUAGES_RTL, } + if self.organizer: + htmlctx['organizer'] = self.organizer + if self.event: htmlctx['event'] = self.event htmlctx['color'] = self.event.settings.primary_color diff --git a/src/pretix/base/forms/__init__.py b/src/pretix/base/forms/__init__.py index 160cb93ae..54243e5f6 100644 --- a/src/pretix/base/forms/__init__.py +++ b/src/pretix/base/forms/__init__.py @@ -2,10 +2,13 @@ import i18nfield.forms from django import forms +from django.core.validators import URLValidator from django.forms.models import ModelFormMetaclass from django.utils.crypto import get_random_string +from django.utils.translation import gettext_lazy as _ from formtools.wizard.views import SessionWizardView from hierarkey.forms import HierarkeyForm +from i18nfield.strings import LazyI18nString from pretix.base.reldate import RelativeDateField, RelativeDateTimeField @@ -151,3 +154,54 @@ def run_validators(self, value): if value == SECRET_REDACTED: return return super().run_validators(value) + + +class I18nMarkdownTextarea(i18nfield.forms.I18nTextarea): + def format_output(self, rendered_widgets) -> str: + rendered_widgets = rendered_widgets + [ + '
%s
' % ( + _("You can use {markup_name} in this field.").format( + markup_name='Markdown' + ) + ) + ] + return super().format_output(rendered_widgets) + + +class I18nURLFormField(i18nfield.forms.I18nFormField): + """ + Custom form field to handle internationalized URL inputs. It extends the I18nFormField + and ensures that all provided URLs are valid. + + Methods: + clean(value: LazyI18nString) -> LazyI18nString: + Validates the URL(s) in the provided internationalized input. + """ + + def clean(self, value) -> LazyI18nString: + """ + Cleans and validates the internationalized URL input. + + Args: + value (LazyI18nString): The input value to clean and validate. + + Returns: + LazyI18nString: The cleaned and validated input value. + + Raises: + ValidationError: If any of the URLs are invalid. + """ + value = super().clean(value) + if not value: + return value + + url_validator = URLValidator() + + if isinstance(value.data, dict): + for val in value.data.values(): + if val: + url_validator(val) + else: + url_validator(value.data) + + return value diff --git a/src/pretix/base/forms/questions.py b/src/pretix/base/forms/questions.py index dd10a3ecc..90a8839f9 100644 --- a/src/pretix/base/forms/questions.py +++ b/src/pretix/base/forms/questions.py @@ -11,19 +11,21 @@ import vat_moss.id from babel import Locale from django import forms +from django.conf import settings from django.contrib import messages +from django.contrib.gis.geoip2 import GeoIP2 from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db.models import QuerySet from django.forms import Select from django.utils import translation from django.utils.formats import date_format -from django.utils.html import escape from django.utils.safestring import mark_safe from django.utils.timezone import get_current_timezone from django.utils.translation import gettext_lazy as _, pgettext_lazy from django_countries import countries from django_countries.fields import Country, CountryField +from geoip2.errors import AddressNotFoundError from phonenumber_field.formfields import PhoneNumberField from phonenumber_field.phonenumber import PhoneNumber from phonenumber_field.widgets import PhoneNumberPrefixWidget @@ -49,6 +51,7 @@ from pretix.control.forms import ExtFileField, SplitDateTimeField from pretix.helpers.countries import CachedCountries from pretix.helpers.escapejson import escapejson_attr +from pretix.helpers.http import get_client_ip from pretix.helpers.i18n import get_format_without_seconds from pretix.presale.signals import question_form_fields @@ -195,8 +198,8 @@ def clean(self, value) -> dict: if self.one_required and (not value or not any(v for v in value.values())): raise forms.ValidationError(self.error_messages['required'], code='required') if self.one_required: - for k, v in value.items(): - if k in REQUIRED_NAME_PARTS and not v: + for k, label, size in self.scheme['fields']: + if k in REQUIRED_NAME_PARTS and not value.get(k): raise forms.ValidationError(self.error_messages['required'], code='required') if self.require_all_fields and not all(v for v in value): raise forms.ValidationError(self.error_messages['incomplete'], code='required') @@ -246,7 +249,8 @@ class WrappedPhoneNumberPrefixWidget(PhoneNumberPrefixWidget): def __init__(self, attrs=None, initial=None): attrs = { - 'aria-label': pgettext_lazy('phonenumber', 'Phone number (without international area code)') + 'aria-label': pgettext_lazy('phonenumber', 'Phone number (without international area code)'), + 'placeholder': 'Phone' } widgets = (WrappedPhonePrefixSelect(initial), forms.TextInput(attrs=attrs)) super(PhoneNumberPrefixWidget, self).__init__(widgets, attrs) @@ -484,26 +488,18 @@ def __init__(self, *args, **kwargs): for q in questions: # Do we already have an answer? Provide it as the initial value answers = [a for a in pos.answerlist if a.question_id == q.id] - if answers: - initial = answers[0] - else: - initial = None + initial = answers[0] if answers else None tz = pytz.timezone(event.settings.timezone) help_text = rich_text(q.help_text) - label = escape(q.question) # django-bootstrap3 calls mark_safe + label = mark_safe(q.question) # django-bootstrap3 calls mark_safe required = q.required and not self.all_optional if q.type == Question.TYPE_BOOLEAN: if q.required: - # For some reason, django-bootstrap3 does not set the required attribute - # itself. widget = forms.CheckboxInput(attrs={'required': 'required'}) else: widget = forms.CheckboxInput() - if initial: - initialbool = (initial.answer == "True") - else: - initialbool = False + initialbool = (initial.answer == "True") if initial else False field = forms.BooleanField( label=label, required=required, @@ -515,20 +511,24 @@ def __init__(self, *args, **kwargs): label=label, required=required, min_value=q.valid_number_min or Decimal('0.00'), max_value=q.valid_number_max, - help_text=q.help_text, + help_text=help_text, initial=initial.answer if initial else None, + widget=forms.NumberInput(attrs={'placeholder': 'Your answer'}), ) elif q.type == Question.TYPE_STRING: field = forms.CharField( label=label, required=required, help_text=help_text, initial=initial.answer if initial else None, + widget=forms.TextInput(attrs={'placeholder': 'Your answer'}), ) elif q.type == Question.TYPE_TEXT: field = forms.CharField( label=label, required=required, help_text=help_text, - widget=forms.Textarea, + widget=forms.Textarea(attrs={ + 'placeholder': 'Your answer' + }), initial=initial.answer if initial else None, ) elif q.type == Question.TYPE_COUNTRYCODE: @@ -605,7 +605,7 @@ def __init__(self, *args, **kwargs): widget=SplitDateTimePickerWidget( time_format=get_format_without_seconds('TIME_INPUT_FORMATS'), min_date=q.valid_datetime_min, - max_date=q.valid_datetime_max + max_date=q.valid_datetime_max, ), ) if q.valid_datetime_min: @@ -626,15 +626,19 @@ def __init__(self, *args, **kwargs): field = PhoneNumberField( label=label, required=required, help_text=help_text, - # We now exploit an implementation detail in PhoneNumberPrefixWidget to allow us to pass just - # a country code but no number as an initial value. It's a bit hacky, but should be stable for - # the future. initial=initial, widget=WrappedPhoneNumberPrefixWidget() ) + elif q.type == Question.TYPE_DESCRIPTION: + field = forms.CharField( + label=label, + widget=forms.Textarea(), + initial=mark_safe(q.description), + required=False + ) + field.widget.attrs['type'] = 'description' field.question = q if answers: - # Cache the answer object for later use field.answer = answers[0] if q.dependency_question_id: @@ -656,7 +660,6 @@ def __init__(self, *args, **kwargs): data = pos.meta_info_data for r, response in sorted(responses, key=lambda r: str(r[0])): for key, value in response.items(): - # We need to be this explicit, since OrderedDict.update does not retain ordering self.fields[key] = value value.initial = data.get('question_form_data', {}).get(key) @@ -897,3 +900,22 @@ def __init__(self, *args, **kwargs): for f in list(self.fields.keys()): if f != 'name_parts': del self.fields[f] + + +def get_country_from_request(request, event): + """ + Guesses the country of the user based on the request IP address. This is used as a fallback + @param request: The HTTP request object containing metadata about the request, including the client's IP address. + @param event: The event object used as a fallback to guess the country if GeoIP2 lookup fails. + @return: A Country object representing the user's country. + """ + if settings.HAS_GEOIP: + g = GeoIP2() + try: + res = g.country(get_client_ip(request)) + country_code = res.get('country_code') + if country_code and len(country_code) == 2: + return Country(country_code) + except AddressNotFoundError: + pass + return guess_country(event) diff --git a/src/pretix/base/management/commands/makemigrations.py b/src/pretix/base/management/commands/makemigrations.py index dd2b955a4..f8d637f28 100644 --- a/src/pretix/base/management/commands/makemigrations.py +++ b/src/pretix/base/management/commands/makemigrations.py @@ -3,7 +3,7 @@ we change on a model. Even the `help_text`! This makes sense, as we don't know if any database backend unknown to us might actually use this information for its database schema. -However, pretix only supports PostgreSQL, MySQL, MariaDB and SQLite and we can be pretty +However, Eventyay only supports PostgreSQL and SQLite and we can be pretty certain that some changes to models will never require a change to the database. In this case, not creating a migration for certain changes will save us some performance while applying them *and* allow for a cleaner git history. Win-win! diff --git a/src/pretix/base/middleware.py b/src/pretix/base/middleware.py index e9edde489..afcba40f3 100644 --- a/src/pretix/base/middleware.py +++ b/src/pretix/base/middleware.py @@ -63,6 +63,8 @@ def process_request(self, request: HttpRequest): tzname = None if hasattr(request, 'event'): tzname = request.event.settings.timezone + elif hasattr(request, 'organizer') and 'timezone' in request.organizer.settings._cache(): + tzname = request.organizer.settings.timezone elif request.user.is_authenticated: tzname = request.user.timezone if tzname: @@ -82,6 +84,26 @@ def process_response(self, request: HttpRequest, response: HttpResponse): return response +def get_language_from_customer_settings(request: HttpRequest) -> str: + """ + Retrieves the preferred language code from the customer's settings in the request. + + Args: + request (HttpRequest): The HTTP request object containing the customer's information. + + Returns: + str: The preferred language code if valid and supported, otherwise an empty string. + """ + # Check if the request has a customer attribute and it is not None + if hasattr(request, 'customer') and request.customer: + lang_code = request.customer.locale + # Validate the language code + if lang_code and lang_code in _supported and check_for_language(lang_code): + return lang_code + + return '' # Return an empty string if no valid language code is found + + def get_language_from_user_settings(request: HttpRequest) -> str: if request.user.is_authenticated: lang_code = request.user.locale @@ -142,6 +164,7 @@ def get_language_from_request(request: HttpRequest) -> str: if request.path.startswith(get_script_prefix() + 'control'): return ( get_language_from_user_settings(request) + or get_language_from_customer_settings(request) or get_language_from_cookie(request) or get_language_from_browser(request) or get_language_from_event(request) @@ -150,6 +173,7 @@ def get_language_from_request(request: HttpRequest) -> str: else: return ( get_language_from_cookie(request) + or get_language_from_customer_settings(request) or get_language_from_user_settings(request) or get_language_from_browser(request) or get_language_from_event(request) diff --git a/src/pretix/base/migrations/0002_question_description.py b/src/pretix/base/migrations/0002_question_description.py new file mode 100644 index 000000000..a6d4bc690 --- /dev/null +++ b/src/pretix/base/migrations/0002_question_description.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.13 on 2024-06-25 06:46 + +from django.db import migrations, models +import i18nfield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('pretixbase', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='question', + name='description', + field=i18nfield.fields.I18nTextField(default='', null=True), + ), + ] diff --git a/src/pretix/base/migrations/0003_eventfooterlinkmodel_organizerfooterlinkmodel.py b/src/pretix/base/migrations/0003_eventfooterlinkmodel_organizerfooterlinkmodel.py new file mode 100644 index 000000000..2b05eee35 --- /dev/null +++ b/src/pretix/base/migrations/0003_eventfooterlinkmodel_organizerfooterlinkmodel.py @@ -0,0 +1,33 @@ +# Generated by Django 4.2.13 on 2024-06-26 04:36 + +from django.db import migrations, models +import django.db.models.deletion +import i18nfield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('pretixbase', '0002_question_description'), + ] + + operations = [ + migrations.CreateModel( + name='OrganizerFooterLinkModel', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('label', i18nfield.fields.I18nCharField(max_length=255)), + ('url', models.URLField()), + ('organizer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='footer_links', to='pretixbase.organizer')), + ], + ), + migrations.CreateModel( + name='EventFooterLinkModel', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('label', i18nfield.fields.I18nCharField(max_length=255)), + ('url', models.URLField()), + ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='footer_links', to='pretixbase.event')), + ], + ), + ] diff --git a/src/pretix/base/migrations/0004_create_customer_table.py b/src/pretix/base/migrations/0004_create_customer_table.py new file mode 100644 index 000000000..f5163125c --- /dev/null +++ b/src/pretix/base/migrations/0004_create_customer_table.py @@ -0,0 +1,155 @@ +# Generated by Django 4.2.13 on 2024-06-26 08:41 + +import django.db.models.deletion +import i18nfield.fields +from django.db import migrations, models + +import pretix.base.models.base +import pretix.base.models.fields + + +def set_can_manage_customers(apps, schema_editor): + Team = apps.get_model('pretixbase', 'Team') + Team.objects.filter(can_change_organizer_settings=True).update(can_manage_customers=True) + Team.objects.filter(can_change_orders=True, all_events=True).update(can_manage_customers=True) + + +class Migration(migrations.Migration): + dependencies = [ + ('pretixbase', '0003_eventfooterlinkmodel_organizerfooterlinkmodel'), + ] + + operations = [ + migrations.CreateModel( + name='Customer', + fields=[ + ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('identifier', models.CharField(db_index=True, max_length=190, unique=True)), + ('email', models.EmailField(db_index=True, max_length=190, null=True)), + ('password', models.CharField(max_length=128)), + ('name_cached', models.CharField(max_length=255)), + ('name_parts', models.JSONField(default=dict)), + ('is_active', models.BooleanField(default=True)), + ('is_verified', models.BooleanField(default=True)), + ('last_login', models.DateTimeField(blank=True, null=True)), + ('date_joined', models.DateTimeField(auto_now_add=True)), + ('locale', models.CharField(default='en', max_length=50)), + ('last_modified', models.DateTimeField(auto_now=True)), + ('organizer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='customers', + to='pretixbase.Organizer')), + ], + options={ + 'unique_together': {('organizer', 'email')}, + }, + bases=(models.Model, pretix.base.models.base.LoggingMixin), + ), + migrations.AddField( + model_name='order', + name='customer', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='orders', + to='pretixbase.Customer'), + ), + migrations.AddField( + model_name='team', + name='can_manage_customers', + field=models.BooleanField(default=False), + ), + migrations.RunPython( + set_can_manage_customers, + migrations.RunPython.noop, + ), + + migrations.CreateModel( + name='CustomerSSOProvider', + fields=[ + ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('name', i18nfield.fields.I18nCharField(max_length=200)), + ('is_active', models.BooleanField(default=True)), + ('button_label', i18nfield.fields.I18nCharField(max_length=200)), + ('method', models.CharField(max_length=190)), + ('configuration', models.JSONField()), + ('organizer', + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sso_providers', + to='pretixbase.organizer')), + ], + options={ + 'abstract': False, + }, + bases=(models.Model, pretix.base.models.base.LoggingMixin), + ), + migrations.AddField( + model_name='customer', + name='provider', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='customers', + to='pretixbase.customerssoprovider'), + ), + migrations.CreateModel( + name='CustomerSSOClient', + fields=[ + ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=255)), + ('is_active', models.BooleanField(default=True)), + ('client_id', models.CharField(db_index=True, default=pretix.base.models.customers.generate_client_id, + max_length=100, unique=True)), + ('client_secret', models.CharField(max_length=255)), + ('client_type', models.CharField(default='confidential', max_length=32)), + ('authorization_grant_type', models.CharField(default='authorization-code', max_length=32)), + ('redirect_uris', models.TextField()), + ('allowed_scopes', + pretix.base.models.fields.MultiStringField(default=['openid', 'profile', 'email', 'phone'])), + ('organizer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sso_clients', + to='pretixbase.organizer')), + ], + options={ + 'abstract': False, + }, + bases=(models.Model, pretix.base.models.base.LoggingMixin), + ), + migrations.AlterField( + model_name='customer', + name='provider', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='customers', + to='pretixbase.customerssoprovider'), + ), + migrations.CreateModel( + name='CustomerSSOGrant', + fields=[ + ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('code', models.CharField(max_length=255, unique=True)), + ('nonce', models.CharField(max_length=255, null=True)), + ('auth_time', models.IntegerField()), + ('expires', models.DateTimeField()), + ('redirect_uri', models.TextField()), + ('scope', models.TextField()), + ('client', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='grants', + to='pretixbase.customerssoclient')), + ('customer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sso_grants', + to='pretixbase.customer')), + ], + ), + migrations.CreateModel( + name='CustomerSSOAccessToken', + fields=[ + ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('from_code', models.CharField(max_length=255, null=True)), + ('token', models.CharField(max_length=255, unique=True)), + ('expires', models.DateTimeField()), + ('scope', models.TextField()), + ('client', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='access_tokens', + to='pretixbase.customerssoclient')), + ('customer', + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sso_access_tokens', + to='pretixbase.customer')), + ], + ), + migrations.AddField( + model_name='customer', + name='external_identifier', + field=models.CharField(max_length=255, null=True), + ), + migrations.AddField( + model_name='customer', + name='notes', + field=models.TextField(null=True), + ), + ] diff --git a/src/pretix/base/models/__init__.py b/src/pretix/base/models/__init__.py index ac4d3cae3..ab07af0bb 100644 --- a/src/pretix/base/models/__init__.py +++ b/src/pretix/base/models/__init__.py @@ -1,5 +1,6 @@ from ..settings import GlobalSettingsObject_SettingsStore from .auth import U2FDevice, User, WebAuthnDevice +from .customers import Customer from .base import CachedFile, LoggedModel, cachedfile_name from .checkin import Checkin, CheckinList from .devices import Device, Gate diff --git a/src/pretix/base/models/customers.py b/src/pretix/base/models/customers.py new file mode 100644 index 000000000..8e7713755 --- /dev/null +++ b/src/pretix/base/models/customers.py @@ -0,0 +1,424 @@ +import string +import uuid + +from django.conf import settings +from django.contrib.auth.hashers import ( + check_password, is_password_usable, make_password, +) +from django.core.validators import URLValidator +from django.db import models +from django.utils.crypto import get_random_string, salted_hmac +from django.utils.translation import gettext_lazy as _, pgettext_lazy +from django_scopes import ScopedManager, scopes_disabled +from i18nfield.fields import I18nCharField + +from pretix.base.banlist import banned +from pretix.base.models.base import LoggedModel +from pretix.base.models.fields import MultiStringField +from pretix.base.models.organizer import Organizer +from pretix.base.settings import PERSON_NAME_SCHEMES + + +class CustomerSSOProvider(LoggedModel): + METHOD_OIDC = 'oidc' + METHODS = ( + (METHOD_OIDC, 'OpenID Connect'), + ) + + id = models.BigAutoField(primary_key=True) + organizer = models.ForeignKey(Organizer, related_name='sso_providers', on_delete=models.CASCADE) + name = I18nCharField( + max_length=200, + verbose_name=_("Provider name"), + ) + is_active = models.BooleanField(default=True, verbose_name=_('Active')) + button_label = I18nCharField( + max_length=200, + verbose_name=_("Login button label"), + ) + method = models.CharField( + max_length=190, + verbose_name=_("Single-sign-on method"), + null=False, blank=False, + choices=METHODS, + ) + configuration = models.JSONField() + + def allow_delete(self): + return not self.customers.exists() + + +class Customer(LoggedModel): + """ + Represents a registered customer of an organizer. + """ + id = models.BigAutoField(primary_key=True) + organizer = models.ForeignKey(Organizer, related_name='customers', on_delete=models.CASCADE) + provider = models.ForeignKey(CustomerSSOProvider, related_name='customers', on_delete=models.PROTECT, null=True, + blank=True) + identifier = models.CharField(max_length=190, db_index=True, unique=True) + email = models.EmailField(db_index=True, null=True, blank=False, verbose_name=_('E-mail'), max_length=190) + password = models.CharField(verbose_name=_('Password'), max_length=128) + name_cached = models.CharField(max_length=255, verbose_name=_('Full name'), blank=True) + name_parts = models.JSONField(default=dict) + is_active = models.BooleanField(default=True, verbose_name=_('Account active')) + is_verified = models.BooleanField(default=True, verbose_name=_('Verified email address')) + last_login = models.DateTimeField(verbose_name=_('Last login'), blank=True, null=True) + date_joined = models.DateTimeField(auto_now_add=True, verbose_name=_('Registration date')) + locale = models.CharField(max_length=50, + choices=settings.LANGUAGES, + default=settings.LANGUAGE_CODE, + verbose_name=_('Language')) + last_modified = models.DateTimeField(auto_now=True) + external_identifier = models.CharField(max_length=255, verbose_name=_('External identifier'), null=True, blank=True) + + objects = ScopedManager(organizer='organizer') + + class Meta: + unique_together = [['organizer', 'email'], ['organizer', 'identifier']] + ordering = ('email',) + + def get_email_field_name(self): + """ + Returns the name of the field that stores the email. + @return: string + """ + return 'email' + + def save(self, **kwargs): + if self.email: + self.email = self.email.lower() + if 'update_fields' in kwargs and 'last_modified' not in kwargs['update_fields']: + kwargs['update_fields'] = {'last_modified'}.union(kwargs['update_fields']) + if not self.identifier: + self.generate_identifier() + if self.name_parts: + self.name_cached = self.name + else: + self.name_cached = "" + self.name_parts = {} + super().save(**kwargs) + + def anonymize_customer(self): + """ + Anonymize the customer, remove all personal data. + """ + self.is_active = False + self.is_verified = False + self.name_parts = {} + self.name_cached = '' + self.email = None + self.external_identifier = None + self.save() + self.all_logentries().update(data={}, shredded=True) + self.orders.all().update(customer=None) + + @scopes_disabled() + def generate_identifier(self): + """ + Assigns a unique identifier to a customer. + + This method generates a random identifier using a specified character set and ensures + that the generated identifier is not banned and does not already exist in the database. + If the identifier generation fails after multiple iterations, the length of the identifier + is increased to ensure uniqueness. + + Raises: + ValueError: If a unique identifier could not be generated after multiple attempts. + """ + iteration = 0 + length = settings.ENTROPY['customer_identifier'] + + char_list = string.ascii_uppercase + string.digits.replace('0', '').replace('1', '') + def base36_encode(number, length): + result = "" + while number: + number, remainder = divmod(number, 36) + result = char_list[remainder] + result + return result.zfill(length) + + def generate_random_identifier(length): + # Generate a UUID and convert to an integer + number = uuid.uuid4().int + + # Convert to a base-36 string (using digits and uppercase letters) + base36_id = base36_encode(number, length) + code = base36_id[:length] + if(banned(code)): + length += 1 + if length > Customer.identifier.field.max_length: + raise ValueError("Unable to generate a unique identifier.") + return generate_random_identifier(length) + return code + + while iteration < 20: + code = generate_random_identifier(length=length) + iteration += 1 + + # Check if the code is unique + if not Customer.objects.filter(identifier=code).exists(): + self.identifier = code + return + + raise ValueError("Unable to generate a unique identifier.") + + @property + def name(self): + """ + Concatenates and returns the customer's name based on the name parts. + + This property constructs the full name of a customer using the `name_parts` dictionary. + If `_legacy` is present in `name_parts`, it returns the legacy name. + If `_scheme` is present, it uses the corresponding scheme to concatenate the name parts. + If neither `_legacy` nor `_scheme` is present, it raises a TypeError. + + Returns: + str: The concatenated name of the customer. + + Raises: + TypeError: If `name_parts` is invalid or missing required keys. + """ + if not self.name_parts: + return "" + + if '_legacy' in self.name_parts: + return self.name_parts['_legacy'] + + if '_scheme' in self.name_parts: + scheme = PERSON_NAME_SCHEMES[self.name_parts['_scheme']] + else: + raise TypeError("Invalid name given.") + + return scheme['concatenation'](self.name_parts).strip() + + def __str__(self): + s = f'#{self.identifier}' + if self.name or self.email: + s += f' – {self.name or self.email}' + if not self.is_active: + s += f' ({_("disabled")})' + return s + + def set_password(self, raw_password): + """ + Sets the password for the customer. + @param raw_password: input password + """ + self.password = make_password(raw_password) + + def check_password(self, raw_password): + """ + Checks if the provided raw password matches the stored hashed password. + + This method uses Django's `check_password` utility to verify the password. If the password needs + to be rehashed, it uses the provided setter to update the stored password. + + Args: + raw_password (str): The raw password to check. + + Returns: + bool: True if the password is correct, False otherwise. + """ + + def setter(raw_password): + self.set_password(raw_password) + self.save(update_fields=["password"]) + + return check_password(raw_password, self.password, setter) + + def set_unusable_password(self): + """ + Sets the password to an unusable value. + """ + self.password = make_password(None) + + def has_usable_password(self): + """ + Checks if the customer has a usable password. + @return: + """ + return is_password_usable(self.password) + + def get_session_auth_hash(self): + key_salt = "$2a$12$9yg2Pg.pJOnOzO9Ysxx7aO/xznE3yhBIl5h3i4i9pz1uRDSDwBska" + payload = self.password + payload += self.email + return salted_hmac(key_salt, payload).hexdigest() + + def get_email_context(self): + """ + Generates the context for email templates related to the customer. + + This method constructs a dictionary with key-value pairs representing the + customer's name and organizer's name. It also includes individual parts of + the customer's name based on the defined name scheme. + + Returns: + dict: A dictionary containing the context for email templates. + """ + # Initialize the context with the customer's name and organizer's name + ctx = { + 'name': self.name, + 'organizer': self.organizer.name, + } + + # Retrieve the name scheme for the organizer + name_scheme = PERSON_NAME_SCHEMES[self.organizer.settings.name_scheme] + + # Add individual name parts to the context based on the name scheme + for f, l, w in name_scheme['fields']: + if f == 'full_name': + continue + ctx['name_%s' % f] = self.name_parts.get(f, '') + return ctx + + def send_activation_mail(self): + """ + Sends an activation email to the customer. + """ + from pretix.base.services.mail import mail + from pretix.multidomain.urlreverse import build_absolute_uri + from pretix.presale.forms.customer import TokenGenerator + + ctx = self.get_email_context() + token = TokenGenerator().make_token(self) + ctx['url'] = build_absolute_uri( + self.organizer, + 'presale:organizer.customer.activate' + ) + '?id=' + self.identifier + '&token=' + token + mail( + self.email, + self.organizer.settings.mail_subject_customer_registration, + self.organizer.settings.mail_text_customer_registration, + ctx, + locale=self.locale, + customer=self, + organizer=self.organizer, + ) + + +def generate_client_id(): + return get_random_string(40) + + +def generate_client_secret(): + return get_random_string(40) + + +class CustomerSSOClient(LoggedModel): + CLIENT_CONFIDENTIAL = "confidential" + CLIENT_PUBLIC = "public" + CLIENT_TYPES = ( + (CLIENT_CONFIDENTIAL, pgettext_lazy("openidconnect", "Confidential")), + (CLIENT_PUBLIC, pgettext_lazy("openidconnect", "Public")), + ) + + GRANT_AUTHORIZATION_CODE = "authorization-code" + GRANT_IMPLICIT = "implicit" + GRANT_TYPES = ( + (GRANT_AUTHORIZATION_CODE, pgettext_lazy("openidconnect", "Authorization code")), + (GRANT_IMPLICIT, pgettext_lazy("openidconnect", "Implicit")), + ) + + SCOPE_CHOICES = ( + ('openid', _('OpenID Connect access (required)')), + ('profile', _('Profile data (name, addresses)')), + ('email', _('E-mail address')), + ('phone', _('Phone number')), + ) + + id = models.BigAutoField(primary_key=True) + organizer = models.ForeignKey(Organizer, related_name='sso_clients', on_delete=models.CASCADE) + + name = models.CharField(verbose_name=_("Application name"), max_length=255, blank=False) + is_active = models.BooleanField(default=True, verbose_name=_('Active')) + + client_id = models.CharField( + verbose_name=_("Client ID"), + max_length=100, unique=True, default=generate_client_id, db_index=True + ) + client_secret = models.CharField( + max_length=255, blank=False, + ) + + client_type = models.CharField( + max_length=32, choices=CLIENT_TYPES, verbose_name=_("Client type"), default=CLIENT_CONFIDENTIAL, + ) + authorization_grant_type = models.CharField( + max_length=32, choices=GRANT_TYPES, verbose_name=_("Grant type"), default=GRANT_AUTHORIZATION_CODE, + ) + redirect_uris = models.TextField( + blank=False, + verbose_name=_("Redirection URIs"), + help_text=_("Allowed URIs list, space separated") + ) + allowed_scopes = MultiStringField( + default=['openid', 'profile', 'email', 'phone'], + delimiter=" ", + blank=True, + verbose_name=_('Allowed access scopes'), + help_text=_('Separate multiple values with spaces'), + ) + + def is_usable(self): + return self.is_active + + def allow_redirect_uri(self, redirect_uri): + return self.redirect_uris and any(r.strip() == redirect_uri for r in self.redirect_uris.split(' ')) + + def allow_delete(self): + return True + + def evaluated_scope(self, scope): + scope = set(scope.split(' ')) + allowed_scopes = set(self.allowed_scopes) + return ' '.join(scope & allowed_scopes) + + def clean(self): + redirect_uris = self.redirect_uris.strip().split() + + if redirect_uris: + validator = URLValidator() + for uri in redirect_uris: + validator(uri) + + def set_client_secret(self): + secret = get_random_string(64) + self.client_secret = make_password(secret) + return secret + + def check_client_secret(self, raw_secret): + def setter(raw_secret): + self.client_secret = make_password(raw_secret) + self.save(update_fields=["client_secret"]) + return check_password(raw_secret, self.client_secret, setter) + + +class CustomerSSOGrant(models.Model): + id = models.BigAutoField(primary_key=True) + client = models.ForeignKey( + CustomerSSOClient, on_delete=models.CASCADE, related_name="grants" + ) + customer = models.ForeignKey( + Customer, on_delete=models.CASCADE, related_name="sso_grants" + ) + code = models.CharField(max_length=255, unique=True) + nonce = models.CharField(max_length=255, null=True, blank=True) + auth_time = models.IntegerField() + expires = models.DateTimeField() + redirect_uri = models.TextField() + scope = models.TextField(blank=True) + + +class CustomerSSOAccessToken(models.Model): + id = models.BigAutoField(primary_key=True) + client = models.ForeignKey( + CustomerSSOClient, on_delete=models.CASCADE, related_name="access_tokens" + ) + customer = models.ForeignKey( + Customer, on_delete=models.CASCADE, related_name="sso_access_tokens" + ) + from_code = models.CharField(max_length=255, null=True, blank=True) + token = models.CharField(max_length=255, unique=True) + expires = models.DateTimeField() + scope = models.TextField(blank=True) diff --git a/src/pretix/base/models/event.py b/src/pretix/base/models/event.py index 3e93f957e..eaec57309 100644 --- a/src/pretix/base/models/event.py +++ b/src/pretix/base/models/event.py @@ -28,6 +28,7 @@ from pretix.base.models.base import LoggedModel from pretix.base.models.fields import MultiStringField from pretix.base.reldate import RelativeDateWrapper +from pretix.base.settings import GlobalSettingsObject from pretix.base.validators import EventSlugBanlistValidator from pretix.helpers.database import GroupConcat from pretix.helpers.daterange import daterange @@ -550,16 +551,31 @@ def get_mail_backend(self, timeout=None, force_custom=False): Returns an email server connection, either by using the system-wide connection or by returning a custom one based on the event's settings. """ - from pretix.base.email import CustomSMTPBackend + from pretix.base.email import CustomSMTPBackend, SendGridEmail + + gs = GlobalSettingsObject() if self.settings.smtp_use_custom or force_custom: + if self.settings.email_vendor == 'sendgrid': + return SendGridEmail(api_key=self.settings.send_grid_api_key) return CustomSMTPBackend(host=self.settings.smtp_host, - port=self.settings.smtp_port, - username=self.settings.smtp_username, - password=self.settings.smtp_password, - use_tls=self.settings.smtp_use_tls, - use_ssl=self.settings.smtp_use_ssl, - fail_silently=False, timeout=timeout) + port=self.settings.smtp_port, + username=self.settings.smtp_username, + password=self.settings.smtp_password, + use_tls=self.settings.smtp_use_tls, + use_ssl=self.settings.smtp_use_ssl, + fail_silently=False, timeout=timeout) + elif gs.settings.email_vendor is not None: + if gs.settings.email_vendor == 'sendgrid': + return SendGridEmail(api_key=gs.settings.send_grid_api_key) + else: + CustomSMTPBackend(host=gs.settings.smtp_host, + port=gs.settings.smtp_port, + username=gs.settings.smtp_username, + password=gs.settings.smtp_password, + use_tls=gs.settings.smtp_use_tls, + use_ssl=gs.settings.smtp_use_ssl, + fail_silently=False, timeout=timeout) else: return get_connection(fail_silently=False) @@ -690,6 +706,12 @@ def copy_data_from(self, other): for q in self.questions.filter(dependency_question__isnull=False): q.dependency_question = question_map[q.dependency_question_id] q.save(update_fields=['dependency_question']) + + # Copy event footer link + for footerLink in EventFooterLinkModel.objects.filter(event=other): + footerLink.pk = None + footerLink.event = self + footerLink.save(force_insert=True) def _walk_rules(rules): if isinstance(rules, dict): @@ -1457,3 +1479,28 @@ def save(self, *args, **kwargs): super().save(*args, **kwargs) if self.subevent: self.subevent.event.cache.clear() + + +class EventFooterLinkModel(models.Model): + """ + FooterLink model - support show link for event's footer + """ + event = models.ForeignKey('Event', + on_delete=models.CASCADE, + related_name='footer_links') + label = I18nCharField( + max_length=255, + verbose_name=_("Link's text"), + ) + url = models.URLField( + verbose_name=_("Link's URL"), + # description=_("Event's footer link") + ) + + def delete(self, *args, **kwargs): + super().delete(*args, **kwargs) + self.event.cache.clear() + + def save(self, *args, **kwargs): + super().save(*args, **kwargs) + self.event.cache.clear() diff --git a/src/pretix/base/models/fields.py b/src/pretix/base/models/fields.py index 76852b6b4..7c497db6e 100644 --- a/src/pretix/base/models/fields.py +++ b/src/pretix/base/models/fields.py @@ -12,7 +12,8 @@ class MultiStringField(TextField): 'delimiter_found': _('No value can contain the delimiter character.') } - def __init__(self, verbose_name=None, name=None, **kwargs): + def __init__(self, verbose_name=None, name=None, delimiter=DELIMITER, **kwargs): + self.delimiter = delimiter super().__init__(verbose_name, name, **kwargs) def deconstruct(self): @@ -23,13 +24,13 @@ def to_python(self, value): if isinstance(value, (list, tuple)): return value elif value: - return [v for v in value.split(DELIMITER) if v] + return [v for v in value.split(self.delimiter) if v] else: return [] def get_prep_value(self, value): if isinstance(value, (list, tuple)): - return DELIMITER + DELIMITER.join(value) + DELIMITER + return self.delimiter + self.delimiter.join(value) + self.delimiter elif value is None: return "" raise TypeError("Invalid data type passed.") @@ -39,14 +40,14 @@ def get_prep_lookup(self, lookup_type, value): # NOQA def from_db_value(self, value, expression, connection): if value: - return [v for v in value.split(DELIMITER) if v] + return [v for v in value.split(self.delimiter) if v] else: return [] def validate(self, value, model_instance): super().validate(value, model_instance) for l in value: - if DELIMITER in l: + if self.delimiter in l: raise exceptions.ValidationError( self.error_messages['delimiter_found'], code='delimiter_found', @@ -54,26 +55,30 @@ def validate(self, value, model_instance): def get_lookup(self, lookup_name): if lookup_name == 'contains': - return MultiStringContains + return make_multi_string_contains_lookup(self.delimiter) elif lookup_name == 'icontains': - return MultiStringIContains + return make_multi_string_icontains_lookup(self.delimiter) raise NotImplementedError( "Lookup '{}' doesn't work with MultiStringField".format(lookup_name), ) -class MultiStringContains(builtin_lookups.Contains): - def process_rhs(self, qn, connection): - sql, params = super().process_rhs(qn, connection) - params[0] = "%" + DELIMITER + params[0][1:-1] + DELIMITER + "%" - return sql, params +def make_multi_string_contains_lookup(delimiter): + class Cls(builtin_lookups.Contains): + def process_rhs(self, qn, connection): + sql, params = super().process_rhs(qn, connection) + params[0] = "%" + delimiter + params[0][1:-1] + delimiter + "%" + return sql, params + return Cls -class MultiStringIContains(builtin_lookups.IContains): - def process_rhs(self, qn, connection): - sql, params = super().process_rhs(qn, connection) - params[0] = "%" + DELIMITER + params[0][1:-1] + DELIMITER + "%" - return sql, params +def make_multi_string_icontains_lookup(delimiter): + class Cls(builtin_lookups.IContains): + def process_rhs(self, qn, connection): + sql, params = super().process_rhs(qn, connection) + params[0] = "%" + delimiter + params[0][1:-1] + delimiter + "%" + return sql, params + return Cls class MultiStringSerializer(serializers.Field): diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index 3a90b6471..78ac38f57 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -1013,6 +1013,7 @@ class Question(LoggedModel): TYPE_DATETIME = "W" TYPE_COUNTRYCODE = "CC" TYPE_PHONENUMBER = "TEL" + TYPE_DESCRIPTION = "DES" TYPE_CHOICES = ( (TYPE_NUMBER, _("Number")), (TYPE_STRING, _("Text (one line)")), @@ -1026,6 +1027,7 @@ class Question(LoggedModel): (TYPE_DATETIME, _("Date and time")), (TYPE_COUNTRYCODE, _("Country code (ISO 3166-1 alpha-2)")), (TYPE_PHONENUMBER, _("Phone number")), + (TYPE_DESCRIPTION, _("Text field")), ) UNLOCALIZED_TYPES = [TYPE_DATE, TYPE_TIME, TYPE_DATETIME] ASK_DURING_CHECKIN_UNSUPPORTED = [TYPE_PHONENUMBER] @@ -1038,6 +1040,12 @@ class Question(LoggedModel): question = I18nTextField( verbose_name=_("Question") ) + description = I18nTextField( + verbose_name=_("Description"), + default="", + null=True, + blank=True, + ) identifier = models.CharField( max_length=190, verbose_name=_("Internal identifier"), diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index 5de1fdc53..52d081738 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -1,8 +1,10 @@ import copy import hashlib +import hmac import json import logging import string +import uuid from collections import Counter from datetime import datetime, time, timedelta from decimal import Decimal @@ -14,13 +16,13 @@ from django.conf import settings from django.db import models, transaction from django.db.models import ( - Case, Exists, F, Max, OuterRef, Q, Subquery, Sum, Value, When, JSONField, + Case, Exists, F, JSONField, Max, OuterRef, Q, Subquery, Sum, Value, When, ) from django.db.models.functions import Coalesce, Greatest from django.db.models.signals import post_delete from django.dispatch import receiver from django.urls import reverse -from django.utils.crypto import get_random_string +from django.utils.crypto import get_random_string, salted_hmac from django.utils.encoding import escape_uri_path from django.utils.formats import date_format from django.utils.functional import cached_property @@ -37,7 +39,7 @@ from pretix.base.decimal import round_decimal from pretix.base.email import get_email_context from pretix.base.i18n import language -from pretix.base.models import User +from pretix.base.models import Customer, User from pretix.base.reldate import RelativeDateWrapper from pretix.base.services.locking import NoLockManager from pretix.base.settings import PERSON_NAME_SCHEMES @@ -52,11 +54,53 @@ def generate_secret(): - return get_random_string(length=16, allowed_chars=string.ascii_lowercase + string.digits) + char_list = string.ascii_lowercase + string.digits + length = 16 + result = "" + number = uuid.uuid4().int + while number: + number, remainder = divmod(number, 36) + result = char_list[remainder] + result + result = result.zfill(length) + code = result[:length] + return code + + +class SecureOrderQuerySet(models.QuerySet): + def get_with_secret_check(self, code, received_secret, tag, secret_length=64): + """ + Get an order by its code and check the secret against the received secret. If the secret is correct, the order + is returned. If the secret is incorrect, a ``Order.DoesNotExist`` exception is raised. + @param code: The code of the order to retrieve. + @param received_secret: The secret provided for verification. + @param tag: An optional tag used for generating a tagged secret. + @param secret_length: (default=64): The length of the secret to compare. + @return: An Order object if the code and secret are verified. + """ + dummy_secret = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"[:secret_length] + + def hash_compare(secret, received): + """ + Compare two hash digests securely. + """ + return hmac.compare_digest( + secret[:secret_length].lower(), + received[:secret_length].lower() + ) + try: + order = self.get(code=code) + except Order.DoesNotExist: + hash_compare(order.tagged_secret(tag, dummy_secret), received_secret) + raise + + order_secret = order.tagged_secret(tag, secret_length) if tag else order.secret + valid_digest = hash_compare(order_secret, received_secret) + valid_sha1 = tag and hash_compare(hashlib.sha1(order.secret.encode()).hexdigest(), received_secret) + if not valid_digest and not valid_sha1: + raise Order.DoesNotExist -def generate_position_secret(): - raise TypeError("Function no longer exists, use secret generators") + return order class Order(LockModel, LoggedModel): @@ -141,6 +185,13 @@ class Order(LockModel, LoggedModel): related_name="orders", on_delete=models.CASCADE ) + customer = models.ForeignKey( + Customer, + verbose_name=_("Customer"), + related_name="orders", + null=True, blank=True, + on_delete=models.SET_NULL + ) email = models.EmailField( null=True, blank=True, verbose_name=_('E-mail') @@ -202,7 +253,7 @@ class Order(LockModel, LoggedModel): verbose_name=_('E-mail address verified') ) - objects = ScopedManager(organizer='event__organizer') + objects = ScopedManager(SecureOrderQuerySet.as_manager().__class__, organizer='event__organizer') class Meta: verbose_name = _("Order") @@ -257,7 +308,7 @@ def fees(self): @cached_property @scopes_disabled() def count_positions(self): - if hasattr(self, 'pcnt'): + if getattr(self, 'pcnt', None) is not None: return self.pcnt or 0 return self.positions.count() @@ -785,7 +836,7 @@ def _can_be_paid(self, count_waitinglist=True, ignore_date=False, force=False) - return self._is_still_available(count_waitinglist=count_waitinglist, force=force) - def _is_still_available(self, now_dt: datetime=None, count_waitinglist=True, force=False, + def _is_still_available(self, now_dt=None, count_waitinglist=True, force=False, check_voucher_usage=False) -> Union[bool, str]: error_messages = { 'unavailable': _('The ordered product "{item}" is no longer available.'), @@ -794,7 +845,7 @@ def _is_still_available(self, now_dt: datetime=None, count_waitinglist=True, for 'voucher_usages': _('The voucher "{voucher}" has been used in the meantime.'), } now_dt = now_dt or now() - positions = self.positions.all().select_related('item', 'variation', 'seat', 'voucher') + positions = list(self.positions.all().select_related('item', 'variation', 'seat', 'voucher')) quota_cache = {} v_budget = {} v_usage = Counter() @@ -933,6 +984,9 @@ def positions_with_tickets(self): continue yield op + def tagged_secret(self, tag, secret_length=64): + return salted_hmac(key_salt=b"", value=tag, secret=self.secret, algorithm="sha256").hexdigest()[:secret_length] + def answerfile_name(instance, filename: str) -> str: secret = get_random_string(length=32, allowed_chars=string.ascii_letters + string.digits) @@ -1191,7 +1245,7 @@ def cache_answers(self, all=True): # answers of other items in the same cart if the question objects have been # selected via prefetch_related if not all: - if hasattr(self.item, 'questions_to_ask'): + if getattr(self.item, 'questions_to_ask', None) is not None: questions = list(copy.copy(q) for q in self.item.questions_to_ask) else: questions = list(copy.copy(q) for q in self.item.questions.filter(ask_during_checkin=False, diff --git a/src/pretix/base/models/organizer.py b/src/pretix/base/models/organizer.py index cb3e09b81..c55f4fa35 100644 --- a/src/pretix/base/models/organizer.py +++ b/src/pretix/base/models/organizer.py @@ -1,6 +1,8 @@ import string from datetime import date, datetime, time +import pytz +from django.core.mail import get_connection from django.core.validators import MinLengthValidator, RegexValidator from django.db import models from django.db.models import Exists, OuterRef, Q @@ -12,7 +14,7 @@ from pretix.base.models.base import LoggedModel from pretix.base.validators import OrganizerSlugBanlistValidator - +from i18nfield.fields import I18nCharField from ..settings import settings_hierarkey from .auth import User @@ -89,6 +91,10 @@ def cache(self): return ObjectRelatedCache(self) + @property + def timezone(self): + return pytz.timezone(self.settings.timezone) + @cached_property def all_logentries_link(self): return reverse( @@ -139,6 +145,24 @@ def delete_sub_objects(self): e.delete() self.teams.all().delete() + def get_mail_backend(self, timeout=None, force_custom=False): + """ + Returns an email server connection, either by using the system-wide connection + or by returning a custom one based on the organizer's settings. + """ + from pretix.base.email import CustomSMTPBackend + + if self.settings.smtp_use_custom or force_custom: + return CustomSMTPBackend(host=self.settings.smtp_host, + port=self.settings.smtp_port, + username=self.settings.smtp_username, + password=self.settings.smtp_password, + use_tls=self.settings.smtp_use_tls, + use_ssl=self.settings.smtp_use_ssl, + fail_silently=False, timeout=timeout) + else: + return get_connection(fail_silently=False) + def generate_invite_token(): return get_random_string(length=32, allowed_chars=string.ascii_lowercase + string.digits) @@ -201,6 +225,10 @@ class Team(LoggedModel): help_text=_('Someone with this setting can get access to most data of all of your events, i.e. via privacy ' 'reports, so be careful who you add to this team!') ) + can_manage_customers = models.BooleanField( + default=False, + verbose_name=_("Can manage customer accounts") + ) can_manage_gift_cards = models.BooleanField( default=False, verbose_name=_("Can manage gift cards") @@ -390,3 +418,28 @@ def get_events_with_permission(self, permission, request=None): return self.get_events_with_any_permission() else: return self.team.organizer.events.none() + +class OrganizerFooterLinkModel(models.Model): + """ + FooterLink model - support show link for organizer's footer + """ + organizer = models.ForeignKey('Organizer', + on_delete=models.CASCADE, + related_name='footer_links') + + label = I18nCharField( + max_length=255, + verbose_name=_("Link's text"), + ) + url = models.URLField( + verbose_name=_("Link's URL"), + # description=_("Organizer's footer link") + ) + + def delete(self, *args, **kwargs): + super().delete(*args, **kwargs) + self.organizer.cache.clear() + + def save(self, *args, **kwargs): + super().save(*args, **kwargs) + self.organizer.cache.clear() diff --git a/src/pretix/base/payment.py b/src/pretix/base/payment.py index 0f95f9ad5..8d75e0809 100644 --- a/src/pretix/base/payment.py +++ b/src/pretix/base/payment.py @@ -4,6 +4,7 @@ from collections import OrderedDict from decimal import ROUND_HALF_UP, Decimal from typing import Any, Dict, Union +from enum import Enum import pytz from django import forms @@ -42,6 +43,17 @@ logger = logging.getLogger(__name__) +class WalletType(Enum): + APPLEPAY = 'applepay' + GOOGLEPAY = 'googlepay' + + +class WalletQueries: + WALLETS = ( + (WalletType.APPLEPAY.value, pgettext_lazy('payment', 'Apple Pay')), + (WalletType.GOOGLEPAY.value, pgettext_lazy('payment', 'Google Pay')), + ) + class PaymentProviderForm(Form): def clean(self): cleaned_data = super().clean() @@ -670,7 +682,7 @@ def order_change_allowed(self, order: Order) -> bool: except InvoiceAddress.DoesNotExist: return True else: - if str(ia.country) not in restricted_countries: + if str(ia.country) != '' and str(ia.country) not in restricted_countries: return False if order.sales_channel not in self.settings.get('_restrict_to_sales_channels', as_type=list, default=['web']): diff --git a/src/pretix/base/plugins.py b/src/pretix/base/plugins.py index c12e021e1..18d425c90 100644 --- a/src/pretix/base/plugins.py +++ b/src/pretix/base/plugins.py @@ -1,5 +1,8 @@ import os import sys +import importlib.metadata +import logging + from enum import Enum from typing import List @@ -7,6 +10,7 @@ from django.conf import settings from django.core.exceptions import ImproperlyConfigured +logger = logging.getLogger(__name__) class PluginType(Enum): """ @@ -53,12 +57,38 @@ def __init__(self, *args, **kwargs): raise ImproperlyConfigured("A pretix plugin config should have a PretixPluginMeta inner class.") if hasattr(self.PretixPluginMeta, 'compatibility') and not os.environ.get("PRETIX_IGNORE_CONFLICTS") == "True": - import pkg_resources - try: - pkg_resources.require(self.PretixPluginMeta.compatibility) - except pkg_resources.VersionConflict as e: - print("Incompatible plugins found!") - print("Plugin {} requires you to have {}, but you installed {}.".format( - self.name, e.req, e.dist - )) - sys.exit(1) + self.check_compatibility() + + def check_compatibility(self): + """ + Checks for compatibility of the plugin based on specified version requirements. + + This method verifies if the currently installed versions of required packages match + the versions specified in the plugin's compatibility requirements. If a version + mismatch is found or a required package is not installed, it prints an error message + and exits the program. + + Steps: + 1. Iterates over the compatibility requirements specified in `self.PretixPluginMeta.compatibility`. + 2. For each requirement, it splits the package name and the required version. + 3. Fetches the installed version of the package using `importlib.metadata.version`. + 4. Compares the installed version with the required version. + 5. If a mismatch is found, prints an error message and exits the program. + 6. If a required package is not found, catches the `PackageNotFoundError`, prints an error message, + and exits the program. + + Raises: + SystemExit: If a version conflict or missing package is detected, the program exits. + """ + try: + for requirement in self.PretixPluginMeta.compatibility: + package_name, _, required_version = requirement.partition("==") + installed_version = importlib.metadata.version(package_name) + if installed_version != required_version: + logger.error("Incompatible plugins found!") + logger.error("Plugin %s requires you to have %s==%s, but you installed %s==%s", + self.name, package_name, required_version, package_name, installed_version) + sys.exit(1) + except importlib.metadata.PackageNotFoundError as e: + logger.exception(f"Package not found: {e}") + sys.exit(1) diff --git a/src/pretix/base/services/cleanup.py b/src/pretix/base/services/cleanup.py index 549d26b17..ac2372bad 100644 --- a/src/pretix/base/services/cleanup.py +++ b/src/pretix/base/services/cleanup.py @@ -7,6 +7,7 @@ from django_scopes import scopes_disabled from pretix.base.models import CachedCombinedTicket, CachedTicket +from pretix.base.models.customers import CustomerSSOGrant from ..models import CachedFile, CartPosition, InvoiceAddress from ..signals import periodic_task @@ -47,3 +48,9 @@ def clean_cached_tickets(sender, **kwargs): @scopes_disabled() def clearsessions(sender, **kwargs): call_command('clearsessions') + + +@receiver(signal=periodic_task) +@scopes_disabled() +def clear_oidc_data(sender, **kwargs): + CustomerSSOGrant.objects.filter(expires__lt=now() - timedelta(days=14)).delete() diff --git a/src/pretix/base/services/mail.py b/src/pretix/base/services/mail.py index 77111abd9..2d541b2b6 100644 --- a/src/pretix/base/services/mail.py +++ b/src/pretix/base/services/mail.py @@ -30,7 +30,7 @@ from pretix.base.email import ClassicMailRenderer from pretix.base.i18n import language from pretix.base.models import ( - CachedFile, Event, Invoice, InvoiceAddress, Order, OrderPosition, User, + CachedFile, Event, Invoice, InvoiceAddress, Order, OrderPosition, User, Organizer, Customer, ) from pretix.base.services.invoices import invoice_pdf_task from pretix.base.services.tasks import TransactionAwareTask @@ -55,10 +55,10 @@ class SendMailException(Exception): def mail(email: Union[str, Sequence[str]], subject: str, template: Union[str, LazyI18nString], - context: Dict[str, Any] = None, event: Event = None, locale: str = None, - order: Order = None, position: OrderPosition = None, headers: dict = None, sender: str = None, - invoices: Sequence = None, attach_tickets=False, auto_email=True, user=None, attach_ical=False, - attach_cached_files: Sequence = None): + context: Dict[str, Any] = None, event: Event = None, locale: str = None, order: Order = None, + position: OrderPosition = None, *, headers: dict = None, sender: str = None, organizer: Organizer = None, + customer: Customer = None, invoices: Sequence = None, attach_tickets=False, auto_email=True, user=None, + attach_ical=False, attach_cached_files: Sequence = None): """ Sends out an email to a user. The mail will be sent synchronously or asynchronously depending on the installation. @@ -128,15 +128,24 @@ def mail(email: Union[str, Sequence[str]], subject: str, template: Union[str, La 'invoice_name': '', 'invoice_company': '' }) - renderer = ClassicMailRenderer(None) + renderer = ClassicMailRenderer(None, organizer) content_plain = body_plain = render_mail(template, context) subject = str(subject).format_map(TolerantDict(context)) - sender = sender or (event.settings.get('mail_from') if event else settings.MAIL_FROM) or settings.MAIL_FROM + sender = ( + sender or + (event.settings.get('mail_from') if event else settings.MAIL_FROM) or + (organizer.settings.get('mail_from') if organizer else settings.MAIL_FROM) or + settings.MAIL_FROM + ) if event: - sender_name = str(event.name) + sender_name = event.settings.mail_from_name or str(event.name) + if len(sender_name) > 75: + sender_name = sender_name[:75] + "..." + sender = formataddr((sender_name, sender)) + elif organizer: + sender_name = organizer.settings.mail_from_name or str(organizer.name) if len(sender_name) > 75: sender_name = sender_name[:75] + "..." - sender_name = event.settings.mail_from_name or sender_name sender = formataddr((sender_name, sender)) else: sender = formataddr((settings.INSTANCE_NAME, sender)) @@ -145,17 +154,28 @@ def mail(email: Union[str, Sequence[str]], subject: str, template: Union[str, La signature = "" bcc = [] + + settings_holder = event or organizer + if event: timezone = event.timezone - renderer = event.get_html_mail_renderer() - if event.settings.mail_bcc: - for bcc_mail in event.settings.mail_bcc.split(','): + elif user: + timezone = pytz.timezone(user.timezone) + elif organizer: + timezone = organizer.timezone + else: + timezone = pytz.timezone(settings.TIME_ZONE) + + if settings_holder: + if settings_holder.settings.mail_bcc: + for bcc_mail in set.settings.mail_bcc.split(','): bcc.append(bcc_mail.strip()) - if event.settings.mail_from == settings.DEFAULT_FROM_EMAIL and event.settings.contact_mail and not headers.get('Reply-To'): - headers['Reply-To'] = event.settings.contact_mail + if settings_holder.settings.mail_from == settings.DEFAULT_FROM_EMAIL and settings_holder.settings.contact_mail and not headers.get( + 'Reply-To'): + headers['Reply-To'] = settings_holder.settings.contact_mail - prefix = event.settings.get('mail_prefix') + prefix = settings_holder.settings.get('mail_prefix') if prefix and prefix.startswith('[') and prefix.endswith(']'): prefix = prefix[1:-1] if prefix: @@ -163,12 +183,13 @@ def mail(email: Union[str, Sequence[str]], subject: str, template: Union[str, La body_plain += "\r\n\r\n-- \r\n" - signature = str(event.settings.get('mail_text_signature')) + signature = str(settings_holder.settings.get('mail_text_signature')) if signature: - signature = signature.format(event=event.name) + signature = signature.format(event=event.name if event else '') body_plain += signature body_plain += "\r\n\r\n-- \r\n" - + if event: + renderer = event.get_html_mail_renderer() if order and order.testmode: subject = "[TESTMODE] " + subject @@ -205,10 +226,6 @@ def mail(email: Union[str, Sequence[str]], subject: str, template: Union[str, La ) ) body_plain += "\r\n" - elif user: - timezone = pytz.timezone(user.timezone) - else: - timezone = pytz.timezone(settings.TIME_ZONE) with override(timezone): try: @@ -239,6 +256,8 @@ def mail(email: Union[str, Sequence[str]], subject: str, template: Union[str, La attach_tickets=attach_tickets, attach_ical=attach_ical, user=user.pk if user else None, + organizer=organizer.pk if organizer else None, + customer=customer.pk if customer else None, attach_cached_files=[(cf.id if isinstance(cf, CachedFile) else cf) for cf in attach_cached_files] if attach_cached_files else [], ) @@ -277,7 +296,7 @@ def _create_mime_attachment(self, content, mimetype): def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: str, sender: str, event: int = None, position: int = None, headers: dict = None, bcc: List[str] = None, invoices: List[int] = None, order: int = None, attach_tickets=False, user=None, - attach_ical=False, attach_cached_files: List[int] = None) -> bool: + organizer=None, customer=None, attach_ical=False, attach_cached_files: List[int] = None) -> bool: email = CustomEmail(subject, body, sender, to=to, bcc=bcc, headers=headers) if html is not None: html_message = SafeMIMEMultipart(_subtype='related', encoding=settings.DEFAULT_CHARSET) @@ -294,11 +313,19 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st event = Event.objects.get(id=event) backend = event.get_mail_backend() cm = lambda: scope(organizer=event.organizer) # noqa + elif organizer: + with scopes_disabled(): + organizer = Organizer.objects.get(id=organizer) + backend = organizer.get_mail_backend() + cm = lambda: scope(organizer=organizer) # noqa else: backend = get_connection(fail_silently=False) cm = lambda: scopes_disabled() # noqa - with cm(): + if customer: + customer = Customer.objects.get(pk=customer) + log_target = user or customer + if event: if order: try: @@ -384,7 +411,8 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st logger.exception('Could not attach file to email') pass - email = global_email_filter.send_chained(event, 'message', message=email, user=user, order=order) + email = global_email_filter.send_chained(event, 'message', message=email, user=user, order=order, + organizer=organizer, customer=customer) try: backend.send_messages([email]) @@ -394,9 +422,9 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st try: self.retry(max_retries=5, countdown=2 ** (self.request.retries * 3)) # max is 2 ** (4*3) = 4096 seconds = 68 minutes except MaxRetriesExceededError: - if order: - order.log_action( - 'pretix.event.order.email.error', + if log_target: + log_target.log_action( + 'pretix.email.error', data={ 'subject': 'SMTP code {}, max retries exceeded'.format(e.smtp_code), 'message': e.smtp_error.decode() if isinstance(e.smtp_error, bytes) else str(e.smtp_error), @@ -407,9 +435,9 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st raise e logger.exception('Error sending email') - if order: - order.log_action( - 'pretix.event.order.email.error', + if log_target: + log_target.log_action( + 'pretix.email.error', data={ 'subject': 'SMTP code {}'.format(e.smtp_code), 'message': e.smtp_error.decode() if isinstance(e.smtp_error, bytes) else str(e.smtp_error), @@ -431,13 +459,13 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st pass logger.exception('Error sending email') - if order: + if log_target: message = [] for e, val in e.recipients.items(): message.append(f'{e}: {val[0]} {val[1].decode()}') - order.log_action( - 'pretix.event.order.email.error', + logger.log_action( + 'pretix.email.error', data={ 'subject': 'SMTP error', 'message': '\n'.join(message), @@ -452,9 +480,9 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st try: self.retry(max_retries=5, countdown=2 ** (self.request.retries * 3)) # max is 2 ** (4*3) = 4096 seconds = 68 minutes except MaxRetriesExceededError: - if order: - order.log_action( - 'pretix.event.order.email.error', + if log_target: + log_target.log_action( + 'pretix.email.error', data={ 'subject': 'Internal error', 'message': 'Max retries exceeded', @@ -463,9 +491,9 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st } ) raise e - if order: - order.log_action( - 'pretix.event.order.email.error', + if logger: + log_target.log_action( + 'pretix.email.error', data={ 'subject': 'Internal error', 'message': str(e), diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 990cacf85..c3f6485de 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -496,7 +496,7 @@ def _check_date(event: Event, now_dt: datetime): def _check_positions(event: Event, now_dt: datetime, positions: List[CartPosition], address: InvoiceAddress=None, - sales_channel='web'): + sales_channel='web', customer=None): err = None errargs = None _check_date(event, now_dt) @@ -518,7 +518,8 @@ def delete(cp): deleted_positions.add(cp.pk) cp.delete() - for i, cp in enumerate(sorted(positions, key=lambda s: -int(s.is_bundled))): + sorted_positions = sorted(positions, key=lambda s: -int(s.is_bundled)) + for i, cp in enumerate(sorted_positions): if cp.pk in deleted_positions: continue @@ -750,8 +751,8 @@ def _get_fees(positions: List[CartPosition], payment_provider: BasePaymentProvid def _create_order(event: Event, email: str, positions: List[CartPosition], now_dt: datetime, payment_provider: BasePaymentProvider, locale: str=None, address: InvoiceAddress=None, - meta_info: dict=None, sales_channel: str='web', gift_cards: list=None, - shown_total=None): + meta_info: dict=None, sales_channel: str='web', gift_cards: list=None, shown_total=None, + customer=None): p = None sales_channel = get_all_sales_channels()[sales_channel] @@ -786,8 +787,11 @@ def _create_order(event: Event, email: str, positions: List[CartPosition], now_d testmode=True if sales_channel.testmode_supported and event.testmode else False, meta_info=json.dumps(meta_info or {}), require_approval=any(p.item.require_approval for p in positions), - sales_channel=sales_channel.identifier + sales_channel=sales_channel.identifier, + customer=customer, ) + if customer: + order.email_known_to_work = customer.is_verified order.set_expires(now_dt, event.subevents.filter(id__in=[p.subevent_id for p in positions])) order.save() @@ -891,7 +895,7 @@ def _order_placed_email_attendee(event: Event, order: Order, position: OrderPosi def _perform_order(event: Event, payment_provider: str, position_ids: List[str], email: str, locale: str, address: int, meta_info: dict=None, sales_channel: str='web', - gift_cards: list=None, shown_total=None): + gift_cards: list=None, shown_total=None, customer=None): if payment_provider: pprov = event.get_payment_providers().get(payment_provider) if not pprov: @@ -899,6 +903,9 @@ def _perform_order(event: Event, payment_provider: str, position_ids: List[str], else: pprov = None + if customer: + customer = event.organizer.customers.get(pk=customer) + if email == settings.PRETIX_EMAIL_NONE_VALUE: email = None @@ -924,8 +931,8 @@ def _perform_order(event: Event, payment_provider: str, position_ids: List[str], id__in=position_ids, event=event ) - validate_order.send(event, payment_provider=pprov, email=email, positions=positions, - locale=locale, invoice_address=addr, meta_info=meta_info) + validate_order.send(event, payment_provider=pprov, email=email, positions=positions, locale=locale, + invoice_address=addr, meta_info=meta_info, customer=customer) lockfn = NoLockManager locked = False @@ -944,10 +951,10 @@ def _perform_order(event: Event, payment_provider: str, position_ids: List[str], raise OrderError(error_messages['empty']) if len(position_ids) != len(positions): raise OrderError(error_messages['internal']) - _check_positions(event, now_dt, positions, address=addr, sales_channel=sales_channel) + _check_positions(event, now_dt, positions, address=addr, sales_channel=sales_channel, customer=customer) order, payment = _create_order(event, email, positions, now_dt, pprov, locale=locale, address=addr, meta_info=meta_info, sales_channel=sales_channel, - gift_cards=gift_cards, shown_total=shown_total) + gift_cards=gift_cards, shown_total=shown_total, customer=customer) free_order_flow = payment and payment_provider == 'free' and order.pending_sum == Decimal('0.00') and not order.require_approval if free_order_flow: @@ -2019,12 +2026,12 @@ def _get_payment_provider(self): @app.task(base=ProfiledEventTask, bind=True, max_retries=5, default_retry_delay=1, throws=(OrderError,)) def perform_order(self, event: Event, payment_provider: str, positions: List[str], email: str=None, locale: str=None, address: int=None, meta_info: dict=None, - sales_channel: str='web', gift_cards: list=None, shown_total=None): + sales_channel: str='web', gift_cards: list=None, shown_total=None, customer=None): with language(locale): try: try: return _perform_order(event, payment_provider, positions, email, locale, address, meta_info, - sales_channel, gift_cards, shown_total) + sales_channel, gift_cards, shown_total, customer) except LockTimeoutException: self.retry() except (MaxRetriesExceededError, LockTimeoutException): diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index 70747390e..8386bd7fc 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -1,40 +1,17 @@ import json import operator -from collections import OrderedDict, UserList -from datetime import datetime -from decimal import Decimal from typing import Any -from django import forms -from django.conf import settings from django.core.exceptions import ValidationError -from django.core.files import File -from django.core.validators import ( - MaxValueValidator, MinValueValidator, RegexValidator, -) from django.db.models import Model -from django.utils.text import format_lazy -from django.utils.translation import ( - gettext_lazy as _, gettext_noop, pgettext, pgettext_lazy, -) +from django.utils.translation import gettext_lazy as _ from hierarkey.models import GlobalSettingsBase, Hierarkey -from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput from i18nfield.strings import LazyI18nString -from rest_framework import serializers - -from pretix.api.serializers.fields import ( - ListMultipleChoiceField, UploadedFileField, -) -from pretix.api.serializers.i18n import I18nField -from pretix.base.models.tax import TaxRule -from pretix.base.reldate import ( - RelativeDateField, RelativeDateTimeField, RelativeDateWrapper, - SerializerRelativeDateField, SerializerRelativeDateTimeField, -) -from pretix.control.forms import ( - ExtFileField, FontSelect, MultipleLanguagesWidget, SingleLanguageWidget, -) +from pretix.base.reldate import RelativeDateWrapper from pretix.helpers.countries import CachedCountries +from pretix.base.configurations import (DEFAULT_SETTINGS, CSS_SETTINGS, TITLE_GROUP, NAME_SALUTION, NAME_SCHEMES, COUNTRIES_WITH_STATE, LazyI18nStringListBase) +from pretix.base.models import Event +from pretix.base.signals import validate_event_settings def country_choice_kwargs(): @@ -57,2501 +34,18 @@ def primary_font_kwargs(): } -class LazyI18nStringList(UserList): +class LazyI18nStringList(LazyI18nStringListBase): def __init__(self, init_list=None): super().__init__() - if init_list is not None: - self.data = [v if isinstance(v, LazyI18nString) else LazyI18nString(v) for v in init_list] - - def serialize(self): - return json.dumps([s.data for s in self.data]) - - @classmethod - def unserialize(cls, s): - return cls(json.loads(s)) - - -DEFAULTS = { - 'max_items_per_order': { - 'default': '10', - 'type': int, - 'form_class': forms.IntegerField, - 'serializer_class': serializers.IntegerField, - 'form_kwargs': dict( - min_value=1, - label=_("Maximum number of items per order"), - help_text=_("Add-on products will not be counted.") - ) - }, - 'display_net_prices': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Show net prices instead of gross prices in the product list (not recommended!)"), - help_text=_("Independent of your choice, the cart will show gross prices as this is the price that needs to be " - "paid."), - - ) - }, - 'system_question_order': { - 'default': {}, - 'type': dict, - }, - 'attendee_names_asked': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Ask for attendee names"), - help_text=_("Ask for a name for all tickets which include admission to the event."), - ) - }, - 'attendee_names_required': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Require attendee names"), - help_text=_("Require customers to fill in the names of all attendees."), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-attendee_names_asked'}), - ) - }, - 'attendee_emails_asked': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Ask for email addresses per ticket"), - help_text=_("Normally, eventyay asks for one email address per order and the order confirmation will be sent " - "only to that email address. If you enable this option, the system will additionally ask for " - "individual email addresses for every admission ticket. This might be useful if you want to " - "obtain individual addresses for every attendee even in case of group orders. However, " - "eventyay will send the order confirmation by default only to the primary email address, not to " - "the per-attendee addresses. You can however enable this in the E-mail settings."), - ) - }, - 'attendee_emails_required': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Require email addresses per ticket"), - help_text=_("Require customers to fill in individual e-mail addresses for all admission tickets. See the " - "above option for more details. One email address for the order confirmation will always be " - "required regardless of this setting."), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-attendee_emails_asked'}), - ) - }, - 'attendee_company_asked': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Ask for company per ticket"), - ) - }, - 'attendee_company_required': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Require company per ticket"), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-attendee_company_asked'}), - ) - }, - 'attendee_addresses_asked': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Ask for postal addresses per ticket"), - ) - }, - 'attendee_addresses_required': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Require postal addresses per ticket"), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-attendee_addresses_asked'}), - ) - }, - 'order_email_asked_twice': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Ask for the order email address twice"), - help_text=_("Require customers to fill in the primary email address twice to avoid errors."), - ) - }, - 'order_phone_asked': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Ask for a phone number per order"), - ) - }, - 'order_phone_required': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Require a phone number per order"), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-order_phone_asked'}), - ) - }, - 'invoice_address_asked': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Ask for invoice address"), - ) - }, - 'invoice_address_not_asked_free': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_('Do not ask for invoice address if an order is free'), - ) - }, - 'invoice_name_required': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Require customer name"), - ) - }, - 'invoice_attendee_name': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Show attendee names on invoices"), - ) - }, - 'invoice_eu_currencies': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("On invoices from one EU country into another EU country with a different currency, print the " - "tax amounts in both currencies if possible"), - ) - }, - 'invoice_address_required': { - 'default': 'False', - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'type': bool, - 'form_kwargs': dict( - label=_("Require invoice address"), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_invoice_address_asked'}), - ) - }, - 'invoice_address_company_required': { - 'default': 'False', - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'type': bool, - 'form_kwargs': dict( - label=_("Require a business addresses"), - help_text=_('This will require users to enter a company name.'), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_invoice_address_required'}), - ) - }, - 'invoice_address_beneficiary': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Ask for beneficiary"), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_invoice_address_asked'}), - ) - }, - 'invoice_address_custom_field': { - 'default': '', - 'type': LazyI18nString, - 'form_class': I18nFormField, - 'serializer_class': I18nField, - 'form_kwargs': dict( - label=_("Custom address field"), - widget=I18nTextInput, - help_text=_("If you want to add a custom text field, e.g. for a country-specific registration number, to " - "your invoice address form, please fill in the label here. This label will both be used for " - "asking the user to input their details as well as for displaying the value on the invoice. " - "The field will not be required.") - ) - }, - 'invoice_address_vatid': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Ask for VAT ID"), - help_text=_("Does only work if an invoice address is asked for. VAT ID is not required."), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_invoice_address_asked'}), - ) - }, - 'invoice_address_explanation_text': { - 'default': '', - 'type': LazyI18nString, - 'form_class': I18nFormField, - 'serializer_class': I18nField, - 'form_kwargs': dict( - label=_("Invoice address explanation"), - widget=I18nTextarea, - widget_kwargs={'attrs': {'rows': '2'}}, - help_text=_("This text will be shown above the invoice address form during checkout.") - ) - }, - 'invoice_show_payments': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Show paid amount on partially paid invoices"), - help_text=_("If an invoice has already been paid partially, this option will add the paid and pending " - "amount to the invoice."), - ) - }, - 'invoice_include_free': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Show free products on invoices"), - help_text=_("Note that invoices will never be generated for orders that contain only free " - "products."), - ) - }, - 'invoice_include_expire_date': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Show expiration date of order"), - help_text=_("The expiration date will not be shown if the invoice is generated after the order is paid."), - ) - }, - 'invoice_numbers_counter_length': { - 'default': '5', - 'type': int, - 'form_class': forms.IntegerField, - 'serializer_class': serializers.IntegerField, - 'form_kwargs': dict( - label=_("Minimum length of invoice number after prefix"), - help_text=_("The part of your invoice number after your prefix will be filled up with leading zeros up to this length, e.g. INV-001 or INV-00001."), - ) - }, - 'invoice_numbers_consecutive': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Generate invoices with consecutive numbers"), - help_text=_("If deactivated, the order code will be used in the invoice number."), - ) - }, - 'invoice_numbers_prefix': { - 'default': '', - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'form_kwargs': dict( - label=_("Invoice number prefix"), - help_text=_("This will be prepended to invoice numbers. If you leave this field empty, your event slug will " - "be used followed by a dash. Attention: If multiple events within the same organization use the " - "same value in this field, they will share their number range, i.e. every full number will be " - "used at most once over all of your events. This setting only affects future invoices. You can " - "use %Y (with century) %y (without century) to insert the year of the invoice, or %m and %d for " - "the day of month."), - ) - }, - 'invoice_numbers_prefix_cancellations': { - 'default': '', - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'form_kwargs': dict( - label=_("Invoice number prefix for cancellations"), - help_text=_("This will be prepended to invoice numbers of cancellations. If you leave this field empty, " - "the same numbering scheme will be used that you configured for regular invoices."), - ) - }, - 'invoice_renderer': { - 'default': 'classic', - 'type': str, - }, - 'ticket_secret_generator': { - 'default': 'random', - 'type': str, - }, - 'reservation_time': { - 'default': '30', - 'type': int, - 'form_class': forms.IntegerField, - 'serializer_class': serializers.IntegerField, - 'form_kwags': dict( - min_value=0, - label=_("Reservation period"), - help_text=_("The number of minutes the items in a user's cart are reserved for this user."), - ) - }, - 'redirect_to_checkout_directly': { - 'default': 'False', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_('Directly redirect to check-out after a product has been added to the cart.'), - ) - }, - 'presale_has_ended_text': { - 'default': '', - 'type': LazyI18nString, - 'form_class': I18nFormField, - 'serializer_class': I18nField, - 'form_kwargs': dict( - label=_("End of presale text"), - widget=I18nTextarea, - widget_kwargs={'attrs': {'rows': '2'}}, - help_text=_("This text will be shown above the ticket shop once the designated sales timeframe for this event " - "is over. You can use it to describe other options to get a ticket, such as a box office.") - ) - }, - 'payment_explanation': { - 'default': '', - 'type': LazyI18nString, - 'form_class': I18nFormField, - 'serializer_class': I18nField, - 'form_kwargs': dict( - widget=I18nTextarea, - widget_kwargs={'attrs': { - 'rows': 3, - }}, - label=_("Guidance text"), - help_text=_("This text will be shown above the payment options. You can explain the choices to the user here, " - "if you want.") - ) - }, - 'payment_term_mode': { - 'default': 'days', - 'type': str, - 'form_class': forms.ChoiceField, - 'serializer_class': serializers.ChoiceField, - 'serializer_kwargs': dict( - choices=( - ('days', _("in days")), - ('minutes', _("in minutes")) - ), - ), - 'form_kwargs': dict( - label=_("Set payment term"), - widget=forms.RadioSelect, - choices=( - ('days', _("in days")), - ('minutes', _("in minutes")) - ), - help_text=_("If using days, the order will expire at the end of the last day. " - "Using minutes is more exact, but should only be used for real-time payment methods.") - ) - }, - 'payment_term_days': { - 'default': '14', - 'type': int, - 'form_class': forms.IntegerField, - 'serializer_class': serializers.IntegerField, - 'form_kwargs': dict( - label=_('Payment term in days'), - widget=forms.NumberInput( - attrs={ - 'data-display-dependency': '#id_payment_term_mode_0', - 'data-required-if': '#id_payment_term_mode_0' - }, - ), - help_text=_("The number of days after placing an order the user has to pay to preserve their reservation. If " - "you use slow payment methods like bank transfer, we recommend 14 days. If you only use real-time " - "payment methods, we recommend still setting two or three days to allow people to retry failed " - "payments."), - validators=[MinValueValidator(0), - MaxValueValidator(1000000)] - ), - 'serializer_kwargs': dict( - validators=[MinValueValidator(0), - MaxValueValidator(1000000)] - ) - }, - 'payment_term_weekdays': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_('Only end payment terms on weekdays'), - help_text=_("If this is activated and the payment term of any order ends on a Saturday or Sunday, it will be " - "moved to the next Monday instead. This is required in some countries by civil law. This will " - "not effect the last date of payments configured below."), - widget=forms.CheckboxInput( - attrs={ - 'data-display-dependency': '#id_payment_term_mode_0', - }, - ), - ) - }, - 'payment_term_minutes': { - 'default': '30', - 'type': int, - 'form_class': forms.IntegerField, - 'serializer_class': serializers.IntegerField, - 'form_kwargs': dict( - label=_('Payment term in minutes'), - help_text=_("The number of minutes after placing an order the user has to pay to preserve their reservation. " - "Only use this if you exclusively offer real-time payment methods. Please note that for technical reasons, " - "the actual time frame might be a few minutes longer before the order is marked as expired."), - validators=[MinValueValidator(0), - MaxValueValidator(1440)], - widget=forms.NumberInput( - attrs={ - 'data-display-dependency': '#id_payment_term_mode_1', - 'data-required-if': '#id_payment_term_mode_1' - }, - ), - ), - 'serializer_kwargs': dict( - validators=[MinValueValidator(0), - MaxValueValidator(1440)] - ) - }, - 'payment_term_last': { - 'default': None, - 'type': RelativeDateWrapper, - 'form_class': RelativeDateField, - 'serializer_class': SerializerRelativeDateField, - 'form_kwargs': dict( - label=_('Last date of payments'), - help_text=_("The last date any payments are accepted. This has precedence over the terms " - "configured above. If you use the event series feature and an order contains tickets for " - "multiple dates, the earliest date will be used."), - ) - }, - 'payment_term_expire_automatically': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_('Automatically expire unpaid orders'), - help_text=_("If checked, all unpaid orders will automatically go from 'pending' to 'expired' " - "after the end of their payment deadline. This means that those tickets go back to " - "the pool and can be ordered by other people."), - ) - }, - 'payment_pending_hidden': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_('Hide "payment pending" state on customer-facing pages'), - help_text=_("The payment instructions panel will still be shown to the primary customer, but no indication " - "of missing payment will be visible on the ticket pages of attendees who did not buy the ticket " - "themselves.") - ) - }, - 'payment_giftcard__enabled': { - 'default': 'True', - 'type': bool - }, - 'payment_resellers__restrict_to_sales_channels': { - 'default': ['resellers'], - 'type': list - }, - 'payment_term_accept_late': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_('Accept late payments'), - help_text=_("Accept payments for orders even when they are in 'expired' state as long as enough " - "capacity is available. No payments will ever be accepted after the 'Last date of payments' " - "configured above."), - ) - }, - 'presale_start_show_date': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Show start date"), - help_text=_("Show the presale start date before presale has started."), - widget=forms.CheckboxInput, - ) - }, - 'tax_rate_default': { - 'default': None, - 'type': TaxRule - }, - 'invoice_generate': { - 'default': 'False', - 'type': str, - 'form_class': forms.ChoiceField, - 'serializer_class': serializers.ChoiceField, - 'serializer_kwargs': dict( - choices=( - ('False', _('Do not generate invoices')), - ('admin', _('Only manually in admin panel')), - ('user', _('Automatically on user request')), - ('True', _('Automatically for all created orders')), - ('paid', _('Automatically on payment or when required by payment method')), - ), - ), - 'form_kwargs': dict( - label=_("Generate invoices"), - widget=forms.RadioSelect, - choices=( - ('False', _('Do not generate invoices')), - ('admin', _('Only manually in admin panel')), - ('user', _('Automatically on user request')), - ('True', _('Automatically for all created orders')), - ('paid', _('Automatically on payment or when required by payment method')), - ), - help_text=_("Invoices will never be automatically generated for free orders.") - ) - }, - 'invoice_reissue_after_modify': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Automatically cancel and reissue invoice on address changes"), - help_text=_("If customers change their invoice address on an existing order, the invoice will " - "automatically be canceled and a new invoice will be issued. This setting does not affect " - "changes made through the backend."), - ) - }, - 'invoice_generate_sales_channels': { - 'default': json.dumps(['web']), - 'type': list - }, - 'invoice_address_from': { - 'default': '', - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'form_kwargs': dict( - label=_("Address line"), - widget=forms.Textarea(attrs={ - 'rows': 2, - 'placeholder': _( - 'Albert Einstein Road 52' - ) - }), - ) - }, - 'invoice_address_from_name': { - 'default': '', - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'form_kwargs': dict( - label=_("Company name"), - ) - }, - 'invoice_address_from_zipcode': { - 'default': '', - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'form_kwargs': dict( - widget=forms.TextInput(attrs={ - 'placeholder': '12345' - }), - label=_("ZIP code"), - ) - }, - 'invoice_address_from_city': { - 'default': '', - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'form_kwargs': dict( - widget=forms.TextInput(attrs={ - 'placeholder': _('Random City') - }), - label=_("City"), - ) - }, - 'invoice_address_from_country': { - 'default': '', - 'type': str, - 'form_class': forms.ChoiceField, - 'serializer_class': serializers.ChoiceField, - 'serializer_kwargs': lambda: dict(**country_choice_kwargs()), - 'form_kwargs': lambda: dict(label=_('Country'), **country_choice_kwargs()), - }, - 'invoice_address_from_tax_id': { - 'default': '', - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'form_kwargs': dict( - label=_("Domestic tax ID"), - help_text=_("e.g. tax number in Germany, ABN in Australia, …") - ) - }, - 'invoice_address_from_vat_id': { - 'default': '', - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'form_kwargs': dict( - label=_("EU VAT ID"), - ) - }, - 'invoice_introductory_text': { - 'default': '', - 'type': LazyI18nString, - 'form_class': I18nFormField, - 'serializer_class': I18nField, - 'form_kwargs': dict( - widget=I18nTextarea, - widget_kwargs={'attrs': { - 'rows': 3, - 'placeholder': _( - 'e.g. With this document, we sent you the invoice for your ticket order.' - ) - }}, - label=_("Introductory text"), - help_text=_("Will be printed on every invoice above the invoice rows.") - ) - }, - 'invoice_additional_text': { - 'default': '', - 'type': LazyI18nString, - 'form_class': I18nFormField, - 'serializer_class': I18nField, - 'form_kwargs': dict( - widget=I18nTextarea, - widget_kwargs={'attrs': { - 'rows': 3, - 'placeholder': _( - 'e.g. Thank you for your purchase! You can find more information on the event at ...' - ) - }}, - label=_("Additional text"), - help_text=_("Will be printed on every invoice below the invoice total.") - ) - }, - 'invoice_footer_text': { - 'default': '', - 'type': LazyI18nString, - 'form_class': I18nFormField, - 'serializer_class': I18nField, - 'form_kwargs': dict( - widget=I18nTextarea, - widget_kwargs={'attrs': { - 'rows': 5, - 'placeholder': _( - 'e.g. your bank details, legal details like your VAT ID, registration numbers, etc.' - ) - }}, - label=_("Footer"), - help_text=_("Will be printed centered and in a smaller font at the end of every invoice page.") - ) - }, - 'invoice_language': { - 'default': '__user__', - 'type': str - }, - 'invoice_email_attachment': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Attach invoices to emails"), - help_text=_("If invoices are automatically generated for all orders, they will be attached to the order " - "confirmation mail. If they are automatically generated on payment, they will be attached to the " - "payment confirmation mail. If they are not automatically generated, they will not be attached " - "to emails."), - ) - }, - 'show_items_outside_presale_period': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Show items outside presale period"), - help_text=_("Show item details before presale has started and after presale has ended"), - ) - }, - 'timezone': { - 'default': settings.TIME_ZONE, - 'type': str - }, - 'locales': { - 'default': json.dumps([settings.LANGUAGE_CODE]), - 'type': list, - 'serializer_class': ListMultipleChoiceField, - 'serializer_kwargs': dict( - choices=settings.LANGUAGES, - required=True, - ), - 'form_class': forms.MultipleChoiceField, - 'form_kwargs': dict( - choices=settings.LANGUAGES, - widget=MultipleLanguagesWidget, - required=True, - label=_("Available languages"), - ) - }, - 'locale': { - 'default': settings.LANGUAGE_CODE, - 'type': str, - 'serializer_class': serializers.ChoiceField, - 'serializer_kwargs': dict( - choices=settings.LANGUAGES, - required=True, - ), - 'form_class': forms.ChoiceField, - 'form_kwargs': dict( - choices=settings.LANGUAGES, - widget=SingleLanguageWidget, - required=True, - label=_("Default language"), - ) - }, - 'region': { - 'default': None, - 'type': str, - 'form_class': forms.ChoiceField, - 'serializer_class': serializers.ChoiceField, - 'serializer_kwargs': lambda: dict(**country_choice_kwargs()), - 'form_kwargs': lambda: dict( - label=_('Region'), - help_text=_('Will be used to determine date and time formatting as well as default country for customer ' - 'addresses and phone numbers. For formatting, this takes less priority than the language and ' - 'is therefore mostly relevant for languages used in different regions globally (like English).'), - **country_choice_kwargs() - ), - }, - 'show_dates_on_frontpage': { - 'default': 'True', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Show event times and dates on the ticket shop"), - help_text=_("If disabled, no date or time will be shown on the ticket shop's front page. This settings " - "does however not affect the display in other locations."), - ) - }, - 'show_date_to': { - 'default': 'True', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Show event end date"), - help_text=_("If disabled, only event's start date will be displayed to the public."), - ) - }, - 'show_times': { - 'default': 'True', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Show dates with time"), - help_text=_("If disabled, the event's start and end date will be displayed without the time of day."), - ) - }, - 'hide_sold_out': { - 'default': 'False', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Hide all products that are sold out"), - ) - }, - 'show_quota_left': { - 'default': 'False', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Show number of tickets left"), - help_text=_("Publicly show how many tickets of a certain type are still available."), - ) - }, - 'meta_noindex': { - 'default': 'False', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_('Ask search engines not to index the ticket shop'), - ) - }, - 'show_variations_expanded': { - 'default': 'False', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Show variations of a product expanded by default"), - ) - }, - 'waiting_list_enabled': { - 'default': 'False', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Enable waiting list"), - help_text=_("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 person on the waiting list and this " - "person will receive an email notification with a voucher that can be used to buy a ticket."), - ) - }, - 'waiting_list_auto': { - 'default': 'True', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Automatic waiting list assignments"), - help_text=_("If ticket capacity becomes free, automatically create a voucher and send it to the first person " - "on the waiting list for that product. If this is not active, mails will not be send automatically " - "but you can send them manually via the control panel. If you disable the waiting list but keep " - "this option enabled, tickets will still be sent out."), - widget=forms.CheckboxInput(), - ) - }, - 'waiting_list_hours': { - 'default': '48', - 'type': int, - 'serializer_class': serializers.IntegerField, - 'form_class': forms.IntegerField, - 'form_kwargs': dict( - label=_("Waiting list response time"), - min_value=1, - help_text=_("If a ticket voucher is sent to a person on the waiting list, it has to be redeemed within this " - "number of hours until it expires and can be re-assigned to the next person on the list."), - widget=forms.NumberInput(), - ) - }, - 'waiting_list_names_asked': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Ask for a name"), - help_text=_("Ask for a name when signing up to the waiting list."), - ) - }, - 'waiting_list_names_required': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Require name"), - help_text=_("Require a name when signing up to the waiting list.."), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-waiting_list_names_asked'}), - ) - }, - 'waiting_list_phones_asked': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Ask for a phone number"), - help_text=_("Ask for a phone number when signing up to the waiting list."), - ) - }, - 'waiting_list_phones_required': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Require phone number"), - help_text=_("Require a phone number when signing up to the waiting list.."), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_settings-waiting_list_phones_asked'}), - ) - }, - 'waiting_list_phones_explanation_text': { - 'default': '', - 'type': LazyI18nString, - 'form_class': I18nFormField, - 'serializer_class': I18nField, - 'form_kwargs': dict( - label=_("Phone number explanation"), - widget=I18nTextarea, - widget_kwargs={'attrs': {'rows': '2'}}, - help_text=_("If you ask for a phone number, explain why you do so and what you will use the phone number for.") - ) - }, - - 'ticket_download': { - 'default': 'False', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Allow users to download tickets"), - help_text=_("If this is off, nobody can download a ticket."), - ) - }, - 'ticket_download_date': { - 'default': None, - 'type': RelativeDateWrapper, - 'form_class': RelativeDateTimeField, - 'serializer_class': SerializerRelativeDateTimeField, - 'form_kwargs': dict( - label=_("Download date"), - help_text=_("Ticket download will be offered after this date. If you use the event series feature and an order " - "contains tickets for multiple event dates, download of all tickets will be available if at least " - "one of the event dates allows it."), - ) - }, - 'ticket_download_addons': { - 'default': 'False', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Generate tickets for add-on products"), - help_text=_('By default, tickets are only issued for products selected individually, not for add-on ' - 'products. With this option, a separate ticket is issued for every add-on product as well.'), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_ticket_download', - 'data-checkbox-dependency-visual': 'on'}), - ) - }, - 'ticket_download_nonadm': { - 'default': 'True', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Generate tickets for all products"), - help_text=_('If turned off, tickets are only issued for products that are marked as an "admission ticket"' - 'in the product settings. You can also turn off ticket issuing in every product separately.'), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_ticket_download', - 'data-checkbox-dependency-visual': 'on'}), - ) - }, - 'ticket_download_pending': { - 'default': 'False', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Generate tickets for pending orders"), - help_text=_('If turned off, ticket downloads are only possible after an order has been marked as paid.'), - widget=forms.CheckboxInput(attrs={'data-checkbox-dependency': '#id_ticket_download', - 'data-checkbox-dependency-visual': 'on'}), - ) - }, - 'ticket_download_require_validated_email': { - 'default': 'False', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_("Do not issue ticket before email address is validated"), - help_text=_("If turned on, tickets will not be offered for download directly after purchase. They will " - "be attached to the payment confirmation email (if the file size is not too large), and the " - "customer will be able to download them from the page as soon as they clicked a link in " - "the email. Does not affect orders performed through other sales channels."), - ) - }, - 'event_list_availability': { - 'default': 'True', - 'type': bool, - 'serializer_class': serializers.BooleanField, - 'form_class': forms.BooleanField, - 'form_kwargs': dict( - label=_('Show availability in event overviews'), - help_text=_('If checked, the list of events will show if events are sold out. This might ' - 'make for longer page loading times if you have lots of events and the shown status might be out ' - 'of date for up to two minutes.'), - required=False - ) - }, - 'event_list_type': { - 'default': 'list', - 'type': str, - 'form_class': forms.ChoiceField, - 'serializer_class': serializers.ChoiceField, - 'serializer_kwargs': dict( - choices=( - ('list', _('List')), - ('week', _('Week calendar')), - ('calendar', _('Month calendar')), - ) - ), - 'form_kwargs': dict( - label=_('Default overview style'), - choices=( - ('list', _('List')), - ('week', _('Week calendar')), - ('calendar', _('Month calendar')), - ), - help_text=_('If your event series has more than 50 dates in the future, only the month or week calendar can be used.') - ), - }, - 'event_list_available_only': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Hide all unavailable dates from calendar or list views"), - ) - }, - 'allow_modifications_after_checkin': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Allow customers to modify their information after they checked in."), - ) - }, - 'last_order_modification_date': { - 'default': None, - 'type': RelativeDateWrapper, - 'form_class': RelativeDateTimeField, - 'serializer_class': SerializerRelativeDateTimeField, - 'form_kwargs': dict( - label=_('Last date of modifications'), - help_text=_("The last date users can modify details of their orders, such as attendee names or " - "answers to questions. If you use the event series feature and an order contains tickets for " - "multiple event dates, the earliest date will be used."), - ) - }, - 'change_allow_user_variation': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Customers can change the variation of the products they purchased"), - ) - }, - 'change_allow_user_price': { - 'default': 'gte', - 'type': str, - 'form_class': forms.ChoiceField, - 'serializer_class': serializers.ChoiceField, - 'serializer_kwargs': dict( - choices=( - ('gte', _('Only allow changes if the resulting price is higher or equal than the previous price.')), - ('gt', _('Only allow changes if the resulting price is higher than the previous price.')), - ('eq', _('Only allow changes if the resulting price is equal to the previous price.')), - ('any', _('Allow changes regardless of price, even if this results in a refund.')), - ) - ), - 'form_kwargs': dict( - label=_("Requirement for changed prices"), - choices=( - ('gte', _('Only allow changes if the resulting price is higher or equal than the previous price.')), - ('gt', _('Only allow changes if the resulting price is higher than the previous price.')), - ('eq', _('Only allow changes if the resulting price is equal to the previous price.')), - ('any', _('Allow changes regardless of price, even if this results in a refund.')), - ), - widget=forms.RadioSelect, - ), - }, - 'change_allow_user_until': { - 'default': None, - 'type': RelativeDateWrapper, - 'form_class': RelativeDateTimeField, - 'serializer_class': SerializerRelativeDateTimeField, - 'form_kwargs': dict( - label=_("Do not allow changes after"), - ) - }, - 'cancel_allow_user': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Customers can cancel their unpaid orders"), - ) - }, - 'cancel_allow_user_until': { - 'default': None, - 'type': RelativeDateWrapper, - 'form_class': RelativeDateTimeField, - 'serializer_class': SerializerRelativeDateTimeField, - 'form_kwargs': dict( - label=_("Do not allow cancellations after"), - ) - }, - 'cancel_allow_user_paid': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Customers can cancel their paid orders"), - help_text=_("Paid money will be automatically paid back if the payment method allows it. " - "Otherwise, a manual refund will be created for you to process manually."), - ) - }, - 'cancel_allow_user_paid_keep': { - 'default': '0.00', - 'type': Decimal, - 'form_class': forms.DecimalField, - 'serializer_class': serializers.DecimalField, - 'serializer_kwargs': dict( - max_digits=10, decimal_places=2 - ), - 'form_kwargs': dict( - label=_("Keep a fixed cancellation fee"), - ) - }, - 'cancel_allow_user_paid_keep_fees': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Keep payment, shipping and service fees"), - ) - }, - 'cancel_allow_user_paid_keep_percentage': { - 'default': '0.00', - 'type': Decimal, - 'form_class': forms.DecimalField, - 'serializer_class': serializers.DecimalField, - 'serializer_kwargs': dict( - max_digits=10, decimal_places=2 - ), - 'form_kwargs': dict( - label=_("Keep a percentual cancellation fee"), - ) - }, - 'cancel_allow_user_paid_adjust_fees': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Allow customers to voluntarily choose a lower refund"), - help_text=_("With this option enabled, your customers can choose to get a smaller refund to support you.") - ) - }, - 'cancel_allow_user_paid_adjust_fees_explanation': { - 'default': LazyI18nString.from_gettext(gettext_noop( - 'However, if you want us to help keep the lights on here, please consider using the slider below to ' - 'request a smaller refund. Thank you!' - )), - 'type': LazyI18nString, - 'serializer_class': I18nField, - 'form_class': I18nFormField, - 'form_kwargs': dict( - label=_("Voluntary lower refund explanation"), - widget=I18nTextarea, - widget_kwargs={'attrs': {'rows': '2'}}, - help_text=_("This text will be shown in between the explanation of how the refunds work and the slider " - "which your customers can use to choose the amount they would like to receive. You can use it " - "e.g. to explain choosing a lower refund will help your organization.") - ) - }, - 'cancel_allow_user_paid_adjust_fees_step': { - 'default': None, - 'type': Decimal, - 'form_class': forms.DecimalField, - 'serializer_class': serializers.DecimalField, - 'serializer_kwargs': dict( - max_digits=10, decimal_places=2 - ), - 'form_kwargs': dict( - max_digits=10, decimal_places=2, - label=_("Step size for reduction amount"), - help_text=_('By default, customers can choose an arbitrary amount for you to keep. If you set this to e.g. ' - '10, they will only be able to choose values in increments of 10.') - ) - }, - 'cancel_allow_user_paid_require_approval': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Customers can only request a cancellation that needs to be approved by the event organizer " - "before the order is canceled and a refund is issued."), - ) - }, - 'cancel_allow_user_paid_refund_as_giftcard': { - 'default': 'off', - 'type': str, - 'serializer_class': serializers.ChoiceField, - 'serializer_kwargs': dict( - choices=[ - ('off', _('All refunds are issued to the original payment method')), - ('option', _('Customers can choose between a gift card and a refund to their payment method')), - ('force', _('All refunds are issued as gift cards')), - ], - ), - 'form_class': forms.ChoiceField, - 'form_kwargs': dict( - label=_('Refund method'), - choices=[ - ('off', _('All refunds are issued to the original payment method')), - ('option', _('Customers can choose between a gift card and a refund to their payment method')), - ('force', _('All refunds are issued as gift cards')), - ], - widget=forms.RadioSelect, - # When adding a new ordering, remember to also define it in the event model - ) - }, - 'cancel_allow_user_paid_until': { - 'default': None, - 'type': RelativeDateWrapper, - 'form_class': RelativeDateTimeField, - 'serializer_class': SerializerRelativeDateTimeField, - 'form_kwargs': dict( - label=_("Do not allow cancellations after"), - ) - }, - 'contact_mail': { - 'default': None, - 'type': str, - 'serializer_class': serializers.EmailField, - 'form_class': forms.EmailField, - 'form_kwargs': dict( - label=_("Contact address"), - help_text=_("We'll show this publicly to allow attendees to contact you.") - ) - }, - 'imprint_url': { - 'default': None, - 'type': str, - 'form_class': forms.URLField, - 'form_kwargs': dict( - label=_("Imprint URL"), - help_text=_("This should point e.g. to a part of your website that has your contact details and legal " - "information."), - ), - 'serializer_class': serializers.URLField, - }, - 'confirm_texts': { - 'default': LazyI18nStringList(), - 'type': LazyI18nStringList, - 'serializer_class': serializers.ListField, - 'serializer_kwargs': lambda: dict(child=I18nField()), - }, - 'mail_html_renderer': { - 'default': 'classic', - 'type': str - }, - 'mail_attach_tickets': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Attach ticket files"), - help_text=format_lazy( - _("Tickets will never be attached if they're larger than {size} to avoid email delivery problems."), - size='4 MB' - ), - ) - }, - 'mail_attach_ical': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Attach calendar files"), - help_text=_("If enabled, we will attach an .ics calendar file to order confirmation emails."), - ) - }, - 'mail_prefix': { - 'default': None, - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'form_kwargs': dict( - label=_("Subject prefix"), - help_text=_("This will be prepended to the subject of all outgoing emails, formatted as [prefix]. " - "Choose, for example, a short form of your event name."), - ) - }, - 'mail_bcc': { - 'default': None, - 'type': str - }, - 'mail_from': { - 'default': settings.MAIL_FROM, - 'type': str, - 'form_class': forms.EmailField, - 'serializer_class': serializers.EmailField, - 'form_kwargs': dict( - label=_("Sender address"), - help_text=_("Sender address for outgoing emails"), - ) - }, - 'mail_from_name': { - 'default': None, - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'form_kwargs': dict( - label=_("Sender name"), - help_text=_("Sender name used in conjunction with the sender address for outgoing emails. " - "Defaults to your event name."), - ) - }, - 'mail_sales_channel_placed_paid': { - 'default': ['web'], - 'type': list, - }, - 'mail_sales_channel_download_reminder': { - 'default': ['web'], - 'type': list, - }, - 'mail_text_signature': { - 'type': LazyI18nString, - 'default': "" - }, - 'mail_text_resend_link': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -you receive this message because you asked us to send you the link -to your order for {event}. - -You can change your order details and view the status of your order at -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_text_resend_all_links': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -somebody requested a list of your orders for {event}. -The list is as follows: - -{orders} - -Best regards, -Your {event} team""")) - }, - 'mail_text_order_free_attendee': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello {attendee_name}, - -you have been registered for {event} successfully. - -You can view the details and status of your ticket here: -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_text_order_free': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -your order for {event} was successful. As you only ordered free products, -no payment is required. - -You can change your order details and view the status of your order at -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_send_order_free_attendee': { - 'type': bool, - 'default': 'False' - }, - 'mail_text_order_placed_require_approval': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -we successfully received your order for {event}. Since you ordered -a product that requires approval by the event organizer, we ask you to -be patient and wait for our next email. - -You can change your order details and view the status of your order at -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_text_order_placed': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -we successfully received your order for {event} with a total value -of {total_with_currency}. Please complete your payment before {expire_date}. - -{payment_info} - -You can change your order details and view the status of your order at -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_send_order_placed_attendee': { - 'type': bool, - 'default': 'False' - }, - 'mail_text_order_placed_attendee': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello {attendee_name}, - -a ticket for {event} has been ordered for you. - -You can view the details and status of your ticket here: -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_text_order_changed': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -your order for {event} has been changed. - -You can view the status of your order at -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_text_order_paid': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -we successfully received your payment for {event}. Thank you! - -{payment_info} - -You can change your order details and view the status of your order at -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_send_order_paid_attendee': { - 'type': bool, - 'default': 'False' - }, - 'mail_text_order_paid_attendee': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello {attendee_name}, - -a ticket for {event} that has been ordered for you is now paid. - -You can view the details and status of your ticket here: -{url} -Best regards, -Your {event} team""")) - }, - 'mail_days_order_expire_warning': { - 'type': int, - 'default': '3' - }, - 'mail_text_order_expire_warning': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, +DEFAULTS = DEFAULT_SETTINGS.copy() +SETTINGS_AFFECTING_CSS = CSS_SETTINGS.copy() +PERSON_NAME_TITLE_GROUPS = TITLE_GROUP.copy() -we did not yet receive a full payment for your order for {event}. -Please keep in mind that we only guarantee your order if we receive -your payment before {expire_date}. +PERSON_NAME_SALUTATIONS = NAME_SALUTION.copy() -You can view the payment information and the status of your order at -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_text_waiting_list': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -you submitted yourself to the waiting list for {event}, -for the product {product}. - -We now have a ticket ready for you! You can redeem it in our ticket shop -within the next {hours} hours by entering the following voucher code: - -{code} - -Alternatively, you can just click on the following link: - -{url} - -Please note that this link is only valid within the next {hours} hours! -We will reassign the ticket to the next person on the list if you do not -redeem the voucher within that timeframe. - -Best regards, -Your {event} team""")) - }, - 'mail_text_order_canceled': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -your order {code} for {event} has been canceled. - -You can view the details of your order at -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_text_order_approved': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -we approved your order for {event} and will be happy to welcome you -at our event. - -Please continue by paying for your order before {expire_date}. - -You can select a payment method and perform the payment here: - -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_text_order_approved_free': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -we approved your order for {event} and will be happy to welcome you -at our event. As you only ordered free products, no payment is required. - -You can change your order details and view the status of your order at -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_text_order_denied': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -unfortunately, we denied your order request for {event}. - -{comment} - -You can view the details of your order here: - -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_text_order_custom_mail': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -You can change your order details and view the status of your order at -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_days_download_reminder': { - 'type': int, - 'default': None - }, - 'mail_send_download_reminder_attendee': { - 'type': bool, - 'default': 'False' - }, - 'mail_text_download_reminder_attendee': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello {attendee_name}, - -you are registered for {event}. - -If you did not do so already, you can download your ticket here: -{url} - -Best regards, -Your {event} team""")) - }, - 'mail_text_download_reminder': { - 'type': LazyI18nString, - 'default': LazyI18nString.from_gettext(gettext_noop("""Hello, - -you bought a ticket for {event}. - -If you did not do so already, you can download your ticket here: -{url} - -Best regards, -Your {event} team""")) - }, - 'smtp_use_custom': { - 'default': 'False', - 'type': bool - }, - 'smtp_host': { - 'default': '', - 'type': str - }, - 'smtp_port': { - 'default': 587, - 'type': int - }, - 'smtp_username': { - 'default': '', - 'type': str - }, - 'smtp_password': { - 'default': '', - 'type': str - }, - 'smtp_use_tls': { - 'default': 'True', - 'type': bool - }, - 'smtp_use_ssl': { - 'default': 'False', - 'type': bool - }, - 'primary_color': { - 'default': settings.PRETIX_PRIMARY_COLOR, - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'serializer_kwargs': dict( - validators=[ - RegexValidator(regex='^#[0-9a-fA-F]{6}$', - message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), - ], - ), - 'form_kwargs': dict( - label=_("Primary color"), - validators=[ - RegexValidator(regex='^#[0-9a-fA-F]{6}$', - message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), - ], - widget=forms.TextInput(attrs={'class': 'colorpickerfield'}) - ), - }, - 'theme_color_success': { - 'default': '#50a167', - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'serializer_kwargs': dict( - validators=[ - RegexValidator(regex='^#[0-9a-fA-F]{6}$', - message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), - ], - ), - 'form_kwargs': dict( - label=_("Accent color for success"), - help_text=_("We strongly suggest to use a shade of green."), - validators=[ - RegexValidator(regex='^#[0-9a-fA-F]{6}$', - message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), - ], - widget=forms.TextInput(attrs={'class': 'colorpickerfield'}) - ), - }, - 'theme_color_danger': { - 'default': '#c44f4f', - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'serializer_kwargs': dict( - validators=[ - RegexValidator(regex='^#[0-9a-fA-F]{6}$', - message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), - ], - ), - 'form_kwargs': dict( - label=_("Accent color for errors"), - help_text=_("We strongly suggest to use a shade of red."), - validators=[ - RegexValidator(regex='^#[0-9a-fA-F]{6}$', - message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), - ], - widget=forms.TextInput(attrs={'class': 'colorpickerfield'}) - ), - }, - 'theme_color_background': { - 'default': '#f5f5f5', - 'type': str, - 'form_class': forms.CharField, - 'serializer_class': serializers.CharField, - 'serializer_kwargs': dict( - validators=[ - RegexValidator(regex='^#[0-9a-fA-F]{6}$', - message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), - ], - ), - 'form_kwargs': dict( - label=_("Page background color"), - validators=[ - RegexValidator(regex='^#[0-9a-fA-F]{6}$', - message=_('Please enter the hexadecimal code of a color, e.g. #990000.')), - ], - widget=forms.TextInput(attrs={'class': 'colorpickerfield no-contrast'}) - ), - }, - 'theme_round_borders': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Use round edges"), - ) - }, - 'primary_font': { - 'default': 'Open Sans', - 'type': str, - 'form_class': forms.ChoiceField, - 'serializer_class': serializers.ChoiceField, - 'serializer_kwargs': lambda: dict(**primary_font_kwargs()), - 'form_kwargs': lambda: dict( - label=_('Font'), - help_text=_('Only respected by modern browsers.'), - widget=FontSelect, - **primary_font_kwargs() - ), - }, - 'presale_css_file': { - 'default': None, - 'type': str - }, - 'presale_css_checksum': { - 'default': None, - 'type': str - }, - 'presale_widget_css_file': { - 'default': None, - 'type': str - }, - 'presale_widget_css_checksum': { - 'default': None, - 'type': str - }, - 'logo_image': { - 'default': None, - 'type': File, - 'form_class': ExtFileField, - 'form_kwargs': dict( - label=_('Header image'), - ext_whitelist=(".png", ".jpg", ".gif", ".jpeg"), - max_size=10 * 1024 * 1024, - help_text=_('If you provide a logo image, we will by default not show your event name and date ' - 'in the page header. By default, we show your logo with a size of up to 1140x120 pixels. You ' - 'can increase the size with the setting below. We recommend not using small details on the picture ' - 'as it will be resized on smaller screens.') - ), - 'serializer_class': UploadedFileField, - 'serializer_kwargs': dict( - allowed_types=[ - 'image/png', 'image/jpeg', 'image/gif' - ], - max_size=10 * 1024 * 1024, - ) - - }, - 'logo_image_large': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_('Use header image in its full size'), - help_text=_('We recommend to upload a picture at least 1170 pixels wide.'), - ) - }, - 'logo_show_title': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_('Show event title even if a header image is present'), - help_text=_('The title will only be shown on the event front page.'), - ) - }, - 'organizer_logo_image': { - 'default': None, - 'type': File, - 'form_class': ExtFileField, - 'form_kwargs': dict( - label=_('Header image'), - ext_whitelist=(".png", ".jpg", ".gif", ".jpeg"), - max_size=10 * 1024 * 1024, - help_text=_('If you provide a logo image, we will by default not show your organization name ' - 'in the page header. By default, we show your logo with a size of up to 1140x120 pixels. You ' - 'can increase the size with the setting below. We recommend not using small details on the picture ' - 'as it will be resized on smaller screens.') - ), - 'serializer_class': UploadedFileField, - 'serializer_kwargs': dict( - allowed_types=[ - 'image/png', 'image/jpeg', 'image/gif' - ], - max_size=10 * 1024 * 1024, - ) - }, - 'organizer_logo_image_large': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_('Use header image in its full size'), - help_text=_('We recommend to upload a picture at least 1170 pixels wide.'), - ) - }, - 'og_image': { - 'default': None, - 'type': File, - 'form_class': ExtFileField, - 'form_kwargs': dict( - label=_('Social media image'), - ext_whitelist=(".png", ".jpg", ".gif", ".jpeg"), - max_size=10 * 1024 * 1024, - 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.') - ), - 'serializer_class': UploadedFileField, - 'serializer_kwargs': dict( - allowed_types=[ - 'image/png', 'image/jpeg', 'image/gif' - ], - max_size=10 * 1024 * 1024, - ) - }, - 'invoice_logo_image': { - 'default': None, - 'type': File, - 'form_class': ExtFileField, - 'form_kwargs': dict( - label=_('Logo image'), - ext_whitelist=(".png", ".jpg", ".gif", ".jpeg"), - required=False, - max_size=10 * 1024 * 1024, - help_text=_('We will show your logo with a maximal height and width of 2.5 cm.') - ), - 'serializer_class': UploadedFileField, - 'serializer_kwargs': dict( - allowed_types=[ - 'image/png', 'image/jpeg', 'image/gif' - ], - max_size=10 * 1024 * 1024, - ) - }, - 'frontpage_text': { - 'default': '', - 'type': LazyI18nString, - 'serializer_class': I18nField, - 'form_class': I18nFormField, - 'form_kwargs': dict( - label=_("Frontpage text"), - widget=I18nTextarea - ) - }, - 'event_info_text': { - 'default': '', - 'type': LazyI18nString, - 'serializer_class': I18nField, - 'form_class': I18nFormField, - 'form_kwargs': dict( - label=_('Info text'), - widget=I18nTextarea, - widget_kwargs={'attrs': {'rows': '2'}}, - help_text=_('Not displayed anywhere by default, but if you want to, you can use this e.g. in ticket templates.') - ) - }, - 'banner_text': { - 'default': '', - 'type': LazyI18nString, - 'serializer_class': I18nField, - 'form_class': I18nFormField, - 'form_kwargs': dict( - label=_("Banner text (top)"), - widget=I18nTextarea, - widget_kwargs={'attrs': {'rows': '2'}}, - help_text=_("This text will be shown above every page of your shop. Please only use this for " - "very important messages.") - ) - }, - 'banner_text_bottom': { - 'default': '', - 'type': LazyI18nString, - 'serializer_class': I18nField, - 'form_class': I18nFormField, - 'form_kwargs': dict( - label=_("Banner text (bottom)"), - widget=I18nTextarea, - widget_kwargs={'attrs': {'rows': '2'}}, - help_text=_("This text will be shown below every page of your shop. Please only use this for " - "very important messages.") - ) - }, - 'voucher_explanation_text': { - 'default': '', - 'type': LazyI18nString, - 'serializer_class': I18nField, - 'form_class': I18nFormField, - 'form_kwargs': dict( - label=_("Voucher explanation"), - widget=I18nTextarea, - widget_kwargs={'attrs': {'rows': '2'}}, - help_text=_("This text will be shown next to the input for a voucher code. You can use it e.g. to explain " - "how to obtain a voucher code.") - ) - }, - 'attendee_data_explanation_text': { - 'default': '', - 'type': LazyI18nString, - 'serializer_class': I18nField, - 'form_class': I18nFormField, - 'form_kwargs': dict( - label=_("Attendee data explanation"), - widget=I18nTextarea, - widget_kwargs={'attrs': {'rows': '2'}}, - help_text=_("This text will be shown above the questions asked for every admission product. You can use it e.g. to explain " - "why you need information from them.") - ) - }, - 'checkout_success_text': { - 'default': '', - 'type': LazyI18nString, - 'serializer_class': I18nField, - 'form_class': I18nFormField, - 'form_kwargs': dict( - label=_("Additional success message"), - help_text=_("This message will be shown after an order has been created successfully. It will be shown in additional " - "to the default text."), - widget_kwargs={'attrs': {'rows': '2'}}, - widget=I18nTextarea - ) - }, - 'checkout_phone_helptext': { - 'default': '', - 'type': LazyI18nString, - 'serializer_class': I18nField, - 'form_class': I18nFormField, - 'form_kwargs': dict( - label=_("Help text of the phone number field"), - widget_kwargs={'attrs': {'rows': '2'}}, - widget=I18nTextarea - ) - }, - 'checkout_email_helptext': { - 'default': LazyI18nString.from_gettext(gettext_noop( - 'Make sure to enter a valid email address. We will send you an order ' - 'confirmation including a link that you need to access your order later.' - )), - 'type': LazyI18nString, - 'serializer_class': I18nField, - 'form_class': I18nFormField, - 'form_kwargs': dict( - label=_("Help text of the email field"), - widget_kwargs={'attrs': {'rows': '2'}}, - widget=I18nTextarea - ) - }, - 'order_import_settings': { - 'default': '{}', - 'type': dict - }, - 'organizer_info_text': { - 'default': '', - 'type': LazyI18nString, - 'serializer_class': I18nField, - 'form_class': I18nFormField, - 'form_kwargs': dict( - label=_('Info text'), - widget=I18nTextarea, - help_text=_('Not displayed anywhere by default, but if you want to, you can use this e.g. in ticket templates.') - ) - }, - 'event_team_provisioning': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_('Allow creating a new team during event creation'), - help_text=_('Users that do not have access to all events under this organizer, must select one of their teams ' - 'to have access to the created event. This setting allows users to create an event-specified team' - ' on-the-fly, even when they do not have \"Can change teams and permissions\" permission.'), - ) - }, - 'update_check_ack': { - 'default': 'False', - 'type': bool - }, - 'update_check_email': { - 'default': '', - 'type': str - }, - # here is the default setting for the updates check - 'update_check_perform': { - 'default': 'False', - 'type': bool - }, - 'update_check_result': { - 'default': None, - 'type': dict - }, - 'update_check_result_warning': { - 'default': 'False', - 'type': bool - }, - 'update_check_last': { - 'default': None, - 'type': datetime - }, - 'update_check_id': { - 'default': None, - 'type': str - }, - 'banner_message': { - 'default': '', - 'type': LazyI18nString - }, - 'banner_message_detail': { - 'default': '', - 'type': LazyI18nString - }, - 'opencagedata_apikey': { - 'default': None, - 'type': str - }, - 'mapquest_apikey': { - 'default': None, - 'type': str - }, - 'leaflet_tiles': { - 'default': None, - 'type': str - }, - 'leaflet_tiles_attribution': { - 'default': None, - 'type': str - }, - 'frontpage_subevent_ordering': { - 'default': 'date_ascending', - 'type': str, - 'serializer_class': serializers.ChoiceField, - 'serializer_kwargs': dict( - choices=[ - ('date_ascending', _('Event start time')), - ('date_descending', _('Event start time (descending)')), - ('name_ascending', _('Name')), - ('name_descending', _('Name (descending)')), - ], - ), - 'form_class': forms.ChoiceField, - 'form_kwargs': dict( - label=pgettext('subevent', 'Date ordering'), - choices=[ - ('date_ascending', _('Event start time')), - ('date_descending', _('Event start time (descending)')), - ('name_ascending', _('Name')), - ('name_descending', _('Name (descending)')), - ], - # When adding a new ordering, remember to also define it in the event model - ) - }, - 'organizer_link_back': { - 'default': 'False', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_('Link back to organizer overview on all event pages'), - ) - }, - 'organizer_homepage_text': { - 'default': '', - 'type': LazyI18nString, - 'serializer_class': I18nField, - 'form_class': I18nFormField, - 'form_kwargs': dict( - label=_('Homepage text'), - widget=I18nTextarea, - help_text=_('This will be displayed on the organizer homepage.') - ) - }, - 'name_scheme': { - 'default': 'full', - 'type': str - }, - 'giftcard_length': { - 'default': settings.ENTROPY['giftcard_secret'], - 'type': int, - 'form_class': forms.IntegerField, - 'serializer_class': serializers.IntegerField, - 'form_kwargs': dict( - label=_('Length of gift card codes'), - help_text=_('The system generates by default {}-character long gift card codes. However, if a different length ' - 'is required, it can be set here.'.format(settings.ENTROPY['giftcard_secret'])), - ) - }, - 'giftcard_expiry_years': { - 'default': None, - 'type': int, - 'form_class': forms.IntegerField, - 'serializer_class': serializers.IntegerField, - 'form_kwargs': dict( - 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.'), - ) - }, - 'seating_choice': { - 'default': 'True', - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Customers can choose their own seats"), - help_text=_("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."), - ), - 'type': bool, - }, - 'seating_minimal_distance': { - 'default': '0', - 'type': float - }, - 'seating_allow_blocked_seats_for_channel': { - 'default': [], - 'type': list - }, - 'seating_distance_within_row': { - 'default': 'False', - 'type': bool - }, - 'checkout_show_copy_answers_button': { - 'default': 'True', - 'type': bool, - 'form_class': forms.BooleanField, - 'serializer_class': serializers.BooleanField, - 'form_kwargs': dict( - label=_("Show button to copy user input from other products"), - ), - } -} -SETTINGS_AFFECTING_CSS = { - 'primary_color', 'theme_color_success', 'theme_color_danger', 'primary_font', - 'theme_color_background', 'theme_round_borders' -} -PERSON_NAME_TITLE_GROUPS = OrderedDict([ - ('english_common', (_('Most common English titles'), ( - 'Mr', - 'Ms', - 'Mrs', - 'Miss', - 'Mx', - 'Dr', - 'Professor', - 'Sir', - ))), - ('german_common', (_('Most common German titles'), ( - 'Dr.', - 'Prof.', - 'Prof. Dr.', - ))) -]) - -PERSON_NAME_SALUTATIONS = [ - pgettext_lazy("person_name_salutation", "Ms"), - pgettext_lazy("person_name_salutation", "Mr"), -] - -PERSON_NAME_SCHEMES = OrderedDict([ - ('given_family', { - 'fields': ( - # field_name, label, weight for widget width - ('given_name', _('Given name'), 1), - ('family_name', _('Family name'), 1), - ), - 'concatenation': lambda d: ' '.join(str(p) for p in [d.get('given_name', ''), d.get('family_name', '')] if p), - 'sample': { - 'given_name': pgettext_lazy('person_name_sample', 'John'), - 'family_name': pgettext_lazy('person_name_sample', 'Doe'), - '_scheme': 'given_family', - }, - }), - ('title_given_family', { - 'fields': ( - ('title', pgettext_lazy('person_name', 'Title'), 1), - ('given_name', _('Given name'), 2), - ('family_name', _('Family name'), 2), - ), - 'concatenation': lambda d: ' '.join( - str(p) for p in [d.get('title', ''), d.get('given_name', ''), d.get('family_name', '')] if p - ), - 'sample': { - 'title': pgettext_lazy('person_name_sample', 'Dr'), - 'given_name': pgettext_lazy('person_name_sample', 'John'), - 'family_name': pgettext_lazy('person_name_sample', 'Doe'), - '_scheme': 'title_given_family', - }, - }), - ('title_given_family', { - 'fields': ( - ('title', pgettext_lazy('person_name', 'Title'), 1), - ('given_name', _('Given name'), 2), - ('family_name', _('Family name'), 2), - ), - 'concatenation': lambda d: ' '.join( - str(p) for p in [d.get('title', ''), d.get('given_name', ''), d.get('family_name', '')] if p - ), - 'sample': { - 'title': pgettext_lazy('person_name_sample', 'Dr'), - 'given_name': pgettext_lazy('person_name_sample', 'John'), - 'family_name': pgettext_lazy('person_name_sample', 'Doe'), - '_scheme': 'title_given_family', - }, - }), - ('given_middle_family', { - 'fields': ( - ('given_name', _('First name'), 2), - ('middle_name', _('Middle name'), 1), - ('family_name', _('Family name'), 2), - ), - 'concatenation': lambda d: ' '.join( - str(p) for p in [d.get('given_name', ''), d.get('middle_name', ''), d.get('family_name', '')] if p - ), - 'sample': { - 'given_name': pgettext_lazy('person_name_sample', 'John'), - 'middle_name': 'M', - 'family_name': pgettext_lazy('person_name_sample', 'Doe'), - '_scheme': 'given_middle_family', - }, - }), - ('title_given_middle_family', { - 'fields': ( - ('title', pgettext_lazy('person_name', 'Title'), 1), - ('given_name', _('First name'), 2), - ('middle_name', _('Middle name'), 1), - ('family_name', _('Family name'), 1), - ), - 'concatenation': lambda d: ' '.join( - str(p) for p in [d.get('title', ''), d.get('given_name'), d.get('middle_name'), d.get('family_name')] if p - ), - 'sample': { - 'title': pgettext_lazy('person_name_sample', 'Dr'), - 'given_name': pgettext_lazy('person_name_sample', 'John'), - 'middle_name': 'M', - 'family_name': pgettext_lazy('person_name_sample', 'Doe'), - '_scheme': 'title_given_middle_family', - }, - }), - ('family_given', { - 'fields': ( - ('family_name', _('Family name'), 1), - ('given_name', _('Given name'), 1), - ), - 'concatenation': lambda d: ' '.join( - str(p) for p in [d.get('family_name', ''), d.get('given_name', '')] if p - ), - 'sample': { - 'given_name': pgettext_lazy('person_name_sample', 'John'), - 'family_name': pgettext_lazy('person_name_sample', 'Doe'), - '_scheme': 'family_given', - }, - }), - ('family_nospace_given', { - 'fields': ( - ('given_name', _('Given name'), 1), - ('family_name', _('Family name'), 1), - ), - 'concatenation': lambda d: ''.join( - str(p) for p in [d.get('family_name', ''), d.get('given_name', '')] if p - ), - 'sample': { - 'given_name': '泽东', - 'family_name': '毛', - '_scheme': 'family_nospace_given', - }, - }), - ('family_comma_given', { - 'fields': ( - ('given_name', _('Given name'), 1), - ('family_name', _('Family name'), 1), - ), - 'concatenation': lambda d: ( - str(d.get('family_name', '')) + - str((', ' if d.get('family_name') and d.get('given_name') else '')) + - str(d.get('given_name', '')) - ), - 'sample': { - 'given_name': pgettext_lazy('person_name_sample', 'John'), - 'family_name': pgettext_lazy('person_name_sample', 'Doe'), - '_scheme': 'family_comma_given', - }, - }), - ('full', { - 'fields': ( - ('full_name', _('Name'), 1), - ), - 'concatenation': lambda d: str(d.get('full_name', '')), - 'sample': { - 'full_name': pgettext_lazy('person_name_sample', 'John Doe'), - '_scheme': 'full', - }, - }), - ('calling_full', { - 'fields': ( - ('calling_name', _('Calling name'), 1), - ('full_name', _('Full name'), 2), - ), - 'concatenation': lambda d: str(d.get('full_name', '')), - 'sample': { - 'full_name': pgettext_lazy('person_name_sample', 'John Doe'), - 'calling_name': pgettext_lazy('person_name_sample', 'John'), - '_scheme': 'calling_full', - }, - }), - ('full_transcription', { - 'fields': ( - ('full_name', _('Full name'), 1), - ('latin_transcription', _('Latin transcription'), 2), - ), - 'concatenation': lambda d: str(d.get('full_name', '')), - 'sample': { - 'full_name': '庄司', - 'latin_transcription': 'Shōji', - '_scheme': 'full_transcription', - }, - }), - ('salutation_given_family', { - 'fields': ( - ('salutation', pgettext_lazy('person_name', 'Salutation'), 1), - ('given_name', _('Given name'), 2), - ('family_name', _('Family name'), 2), - ), - 'concatenation': lambda d: ' '.join( - str(p) for p in (d.get(key, '') for key in ["given_name", "family_name"]) if p - ), - 'sample': { - 'salutation': pgettext_lazy('person_name_sample', 'Mr'), - 'given_name': pgettext_lazy('person_name_sample', 'John'), - 'family_name': pgettext_lazy('person_name_sample', 'Doe'), - '_scheme': 'salutation_given_family', - }, - }), - ('salutation_title_given_family', { - 'fields': ( - ('salutation', pgettext_lazy('person_name', 'Salutation'), 1), - ('title', pgettext_lazy('person_name', 'Title'), 1), - ('given_name', _('Given name'), 2), - ('family_name', _('Family name'), 2), - ), - 'concatenation': lambda d: ' '.join( - str(p) for p in (d.get(key, '') for key in ["title", "given_name", "family_name"]) if p - ), - 'sample': { - 'salutation': pgettext_lazy('person_name_sample', 'Mr'), - 'title': pgettext_lazy('person_name_sample', 'Dr'), - 'given_name': pgettext_lazy('person_name_sample', 'John'), - 'family_name': pgettext_lazy('person_name_sample', 'Doe'), - '_scheme': 'salutation_title_given_family', - }, - }), - ('salutation_title_given_family_degree', { - 'fields': ( - ('salutation', pgettext_lazy('person_name', 'Salutation'), 1), - ('title', pgettext_lazy('person_name', 'Title'), 1), - ('given_name', _('Given name'), 2), - ('family_name', _('Family name'), 2), - ('degree', pgettext_lazy('person_name', 'Degree (after name)'), 2), - ), - 'concatenation': lambda d: ( - ' '.join( - str(p) for p in (d.get(key, '') for key in ["title", "given_name", "family_name"]) if p - ) + - str((', ' if d.get('degree') else '')) + - str(d.get('degree', '')) - ), - 'sample': { - 'salutation': pgettext_lazy('person_name_sample', 'Mr'), - 'title': pgettext_lazy('person_name_sample', 'Dr'), - 'given_name': pgettext_lazy('person_name_sample', 'John'), - 'family_name': pgettext_lazy('person_name_sample', 'Doe'), - 'degree': pgettext_lazy('person_name_sample', 'MA'), - '_scheme': 'salutation_title_given_family_degree', - }, - }), -]) -COUNTRIES_WITH_STATE_IN_ADDRESS = { - # Source: http://www.bitboost.com/ref/international-address-formats.html - # This is not a list of countries that *have* states, this is a list of countries where states - # are actually *used* in postal addresses. This is obviously not complete and opinionated. - # Country: [(List of subdivision types as defined by pycountry), (short or long form to be used)] - 'AU': (['State', 'Territory'], 'short'), - 'BR': (['State'], 'short'), - 'CA': (['Province', 'Territory'], 'short'), - # 'CN': (['Province', 'Autonomous region', 'Munincipality'], 'long'), - 'MY': (['State'], 'long'), - 'MX': (['State', 'Federal District'], 'short'), - 'US': (['State', 'Outlying area', 'District'], 'short'), -} +PERSON_NAME_SCHEMES = NAME_SCHEMES.copy() +COUNTRIES_WITH_STATE_IN_ADDRESS = COUNTRIES_WITH_STATE.copy() settings_hierarkey = Hierarkey(attribute_name='settings') @@ -2630,10 +124,9 @@ def set(self, key: str, value: Any): def validate_event_settings(event, settings_dict): - from pretix.base.models import Event - from pretix.base.signals import validate_event_settings - - if 'locales' in settings_dict and settings_dict['locale'] not in settings_dict['locales']: + default_locale = settings_dict.get('locale') + locales = settings_dict.get('locales', []) + if default_locale and default_locale not in locales: raise ValidationError({ 'locale': _('Your default locale must also be enabled for your event (see box above).') }) diff --git a/src/pretix/base/shredder.py b/src/pretix/base/shredder.py index 37463d5fc..ba0af44d6 100644 --- a/src/pretix/base/shredder.py +++ b/src/pretix/base/shredder.py @@ -160,7 +160,7 @@ class EmailAddressShredder(BaseDataShredder): verbose_name = _('E-mails') identifier = 'order_emails' description = _('This will remove all e-mail addresses from orders and attendees, as well as logged email ' - 'contents.') + 'contents. This will also remove the association to customer accounts.') def generate_files(self) -> List[Tuple[str, str, str]]: yield 'emails-by-order.json', 'application/json', json.dumps({ @@ -177,12 +177,13 @@ def shred_data(self): for o in self.event.orders.all(): o.email = None + o.customer = None d = o.meta_info_data if d: if 'contact_form_data' in d and 'email' in d['contact_form_data']: del d['contact_form_data']['email'] o.meta_info = json.dumps(d) - o.save(update_fields=['meta_info', 'email']) + o.save(update_fields=['meta_info', 'email', 'customer']) for le in self.event.logentry_set.filter(action_type__contains="order.email"): shred_log_fields(le, banlist=['recipient', 'message', 'subject']) diff --git a/src/pretix/base/signals.py b/src/pretix/base/signals.py index 8d324fba1..2d4f5bcc4 100644 --- a/src/pretix/base/signals.py +++ b/src/pretix/base/signals.py @@ -266,8 +266,7 @@ def connect(self, receiver, sender=None, weak=True, dispatch_uid=None): The ``sender`` keyword argument will contain an organizer. """ -validate_order = EventPluginSignal( -) +validate_order = EventPluginSignal() """ Arguments: ``payment_provider``, ``positions``, ``email``, ``locale``, ``invoice_address``, ``meta_info``, ``customer`` diff --git a/src/pretix/base/templates/pretixbase/email/base.html b/src/pretix/base/templates/pretixbase/email/base.html index 4f622691c..b1b337a47 100644 --- a/src/pretix/base/templates/pretixbase/email/base.html +++ b/src/pretix/base/templates/pretixbase/email/base.html @@ -202,6 +202,9 @@ {% if event %}

{{ event.name }}

+ {% elif organizer %} +

{{ organizer.name }} +

{% else %}

{{ site }}

{% endif %} diff --git a/src/pretix/base/templates/pretixbase/email/simple_logo.html b/src/pretix/base/templates/pretixbase/email/simple_logo.html index 80ed3583d..5e08b22c5 100644 --- a/src/pretix/base/templates/pretixbase/email/simple_logo.html +++ b/src/pretix/base/templates/pretixbase/email/simple_logo.html @@ -220,6 +220,9 @@ {% if event %}

{{ event.name }}

+ {% elif organizer %} +

{{ organizer.name }} +

{% else %}

{{ site }}

{% endif %} diff --git a/src/pretix/base/validators.py b/src/pretix/base/validators.py index 871295cda..616b42642 100644 --- a/src/pretix/base/validators.py +++ b/src/pretix/base/validators.py @@ -35,6 +35,8 @@ class EventSlugBanlistValidator(BanlistValidator): 'events', 'csp_report', 'widget', + 'customer', + 'account', ] diff --git a/src/pretix/control/forms/__init__.py b/src/pretix/control/forms/__init__.py index 4acb2f492..7454a7ee2 100644 --- a/src/pretix/control/forms/__init__.py +++ b/src/pretix/control/forms/__init__.py @@ -11,7 +11,7 @@ from django.utils.timezone import now from django.utils.translation import gettext_lazy as _ -from ...base.forms import I18nModelForm +from ...base.forms import I18nModelForm, SecretKeySettingsField # Import for backwards compatibility with okd import paths from ...base.forms.widgets import ( # noqa @@ -328,3 +328,47 @@ def compress(self, data_list): class FontSelect(forms.RadioSelect): option_template_name = 'pretixcontrol/font_option.html' + + +class SMTPSettingsMixin(forms.Form): + smtp_use_custom = forms.BooleanField( + label=_("Use custom SMTP server"), + help_text=_("All mail related to your event will be sent over the smtp server specified by you."), + required=False + ) + smtp_host = forms.CharField( + label=_("Hostname"), + required=False, + widget=forms.TextInput(attrs={'placeholder': 'mail.example.org'}) + ) + smtp_port = forms.IntegerField( + label=_("Port"), + required=False, + widget=forms.TextInput(attrs={'placeholder': 'e.g. 587, 465, 25, ...'}) + ) + smtp_username = forms.CharField( + label=_("Username"), + widget=forms.TextInput(attrs={'placeholder': 'eventyay-tickets@eventyay.com'}), + required=False + ) + smtp_password = SecretKeySettingsField( + label=_("Password"), + required=False, + ) + smtp_use_tls = forms.BooleanField( + label=_("Use STARTTLS"), + help_text=_("Commonly enabled on port 587."), + required=False + ) + smtp_use_ssl = forms.BooleanField( + label=_("Use SSL"), + help_text=_("Commonly enabled on port 465."), + required=False + ) + + def clean(self): + data = super().clean() + if data.get('smtp_use_tls') and data.get('smtp_use_ssl'): + raise ValidationError(_('SSL and STARTTLS can not be enabled at the same time.')) + return data + diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index 568822ccb..4201763e8 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -5,7 +5,7 @@ from django.core.exceptions import ValidationError from django.core.validators import validate_email from django.db.models import Q -from django.forms import CheckboxSelectMultiple, formset_factory +from django.forms import CheckboxSelectMultiple, formset_factory, inlineformset_factory from django.urls import reverse from django.utils.html import escape from django.utils.safestring import mark_safe @@ -21,14 +21,14 @@ from pretix.base.email import get_available_placeholders from pretix.base.forms import I18nModelForm, PlaceholderValidator, SettingsForm from pretix.base.models import Event, Organizer, TaxRule, Team -from pretix.base.models.event import EventMetaValue, SubEvent +from pretix.base.models.event import EventMetaValue, SubEvent, EventFooterLinkModel from pretix.base.reldate import RelativeDateField, RelativeDateTimeField from pretix.base.settings import ( PERSON_NAME_SCHEMES, PERSON_NAME_TITLE_GROUPS, validate_event_settings, ) from pretix.control.forms import ( MultipleLanguagesWidget, SlugWidget, SplitDateTimeField, - SplitDateTimePickerWidget, + SplitDateTimePickerWidget, SMTPSettingsMixin, ) from pretix.control.forms.widgets import Select2 from pretix.helpers.countries import CachedCountries @@ -789,7 +789,7 @@ def contains_web_channel_validate(val): raise ValidationError(_("The online shop must be selected to receive these emails.")) -class MailSettingsForm(SettingsForm): +class MailSettingsForm(SMTPSettingsMixin, SettingsForm): auto_fields = [ 'mail_prefix', 'mail_from', @@ -985,10 +985,28 @@ class MailSettingsForm(SettingsForm): widget=I18nTextarea, ) smtp_use_custom = forms.BooleanField( - label=_("Use custom SMTP server"), - help_text=_("All mail related to your event will be sent over the smtp server specified by you."), + label=_("Use Custom Email"), + help_text=_("All mail related to your event will be sent over your specified email gateway."), required=False ) + send_grid_api_key = forms.CharField( + label=_("Sendgrid Token"), + required=True, + widget=forms.TextInput(attrs={'placeholder': 'SG.xxxxxxxx'}) + ) + + smtp_select = [ + + ('sendgrid', _("SendGrid")), + ('smtp', _("SMTP"))] + + + email_vendor = forms.ChoiceField( + label=_(""), + required=True, + widget=forms.RadioSelect, + choices=smtp_select + ) smtp_host = forms.CharField( label=_("Hostname"), required=False, @@ -1074,17 +1092,6 @@ def __init__(self, *args, **kwargs): # the user interface with it del self.fields[k] - def clean(self): - data = self.cleaned_data - if not data.get('smtp_password') and data.get('smtp_username'): - # Leave password unchanged if the username is set and the password field is empty. - # This makes it impossible to set an empty password as long as a username is set, but - # Python's smtplib does not support password-less schemes anyway. - data['smtp_password'] = self.initial.get('smtp_password') - - if data.get('smtp_use_tls') and data.get('smtp_use_ssl'): - raise ValidationError(_('You can activate either SSL or STARTTLS security, but not both at the same time.')) - class TicketSettingsForm(SettingsForm): auto_fields = [ @@ -1446,3 +1453,25 @@ def __init__(self, *args, **kwargs): formset=BaseConfirmTextFormSet, can_order=True, can_delete=True, extra=0 ) + + +class EventFooterLinkForm(I18nModelForm): + class Meta: + model = EventFooterLinkModel + fields = ('label', 'url') + + +class BaseEventFooterLinkFormSet(I18nFormSetMixin, forms.BaseInlineFormSet): + def __init__(self, *args, **kwargs): + event = kwargs.pop('event', None) + if event: + kwargs['locales'] = event.settings.get('locales') + super().__init__(*args, **kwargs) + + +EventFooterLinkFormset = inlineformset_factory( + Event, EventFooterLinkModel, + EventFooterLinkForm, + formset=BaseEventFooterLinkFormSet, + can_order=False, can_delete=True, extra=0 +) \ No newline at end of file diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index 9a6de35c2..4bf7f53d7 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -988,6 +988,44 @@ def filter_qs(self, qs): return qs.distinct() +class CustomerFilterForm(FilterForm): + orders = { + 'email': 'email', + 'identifier': 'identifier', + 'name_cached': 'name_cached', + } + query = forms.CharField( + label=_('Search query'), + widget=forms.TextInput(attrs={ + 'placeholder': _('Search query'), + 'autofocus': 'autofocus' + }), + required=False + ) + + def __init__(self, *args, **kwargs): + kwargs.pop('request') + super().__init__(*args, **kwargs) + + def filter_qs(self, qs): + form_data = self.cleaned_data + + if form_data.get('query'): + query = form_data.get('query') + qs = qs.filter( + Q(email__icontains=query) + | Q(name_cached__icontains=query) + | Q(identifier__istartswith=query) + ) + + if form_data.get('ordering'): + qs = qs.order_by(self.get_order_by()) + else: + qs = qs.order_by('-email') + + return qs + + class EventFilterForm(FilterForm): orders = { 'slug': 'slug', diff --git a/src/pretix/control/forms/global_settings.py b/src/pretix/control/forms/global_settings.py index b264898f1..f74f1cdd1 100644 --- a/src/pretix/control/forms/global_settings.py +++ b/src/pretix/control/forms/global_settings.py @@ -8,16 +8,45 @@ from pretix.base.settings import GlobalSettingsObject from pretix.base.signals import register_global_settings +from django.conf import settings + class GlobalSettingsForm(SettingsForm): auto_fields = [ - 'region' + 'region', + 'mail_from' ] + + def _setting_default(self): + """ + Load default email setting form .cfg file if not set + """ + global_settings = self.obj.settings + if global_settings.get('smtp_port') is None or global_settings.get('smtp_port') == "": + self.obj.settings.set('smtp_port', settings.EMAIL_PORT) + if global_settings.get('smtp_host') is None or global_settings.get('smtp_host') == "": + self.obj.settings.set('smtp_host', settings.EMAIL_HOST) + if global_settings.get('smtp_username') is None or global_settings.get('smtp_username') == "": + self.obj.settings.set('smtp_username', settings.EMAIL_HOST_USER) + if global_settings.get('smtp_password') is None or global_settings.get('smtp_password') == "": + self.obj.settings.set('smtp_password', settings.EMAIL_HOST_PASSWORD) + if global_settings.get('smtp_use_tls') is None or global_settings.get('smtp_use_tls') == "": + self.obj.settings.set('smtp_use_tls', settings.EMAIL_USE_TLS) + if global_settings.get('smtp_use_ssl') is None or global_settings.get('smtp_use_ssl') == "": + self.obj.settings.set('smtp_use_ssl', settings.EMAIL_USE_SSL) + if global_settings.get('email_vendor') is None or global_settings.get('email_vendor') == "": + self.obj.settings.set('email_vendor', 'smtp') + def __init__(self, *args, **kwargs): self.obj = GlobalSettingsObject() + self._setting_default() super().__init__(*args, obj=self.obj, **kwargs) + smtp_select = [ + ('sendgrid', _("SendGrid")), + ('smtp', _("SMTP"))] + self.fields = OrderedDict(list(self.fields.items()) + [ ('footer_text', I18nFormField( widget=I18nTextInput, @@ -59,6 +88,51 @@ def __init__(self, *args, **kwargs): label=_("Leaflet tiles attribution"), help_text=_("e.g. {sample}").format(sample='© OpenStreetMap contributors') )), + ('email_vendor', forms.ChoiceField( + label=_("System Email"), + required=True, + widget=forms.RadioSelect, + choices=smtp_select, + + )), + ('send_grid_api_key', forms.CharField( + required=False, + label=_("Sendgrid Token"), + widget=forms.TextInput(attrs={'placeholder': 'SG.xxxxxxxx'}) + )), + ('smtp_host', forms.CharField( + label=_("Hostname"), + required=False, + widget=forms.TextInput(attrs={'placeholder': 'mail.example.org'}) + )), + ('smtp_port', forms.IntegerField( + label=_("Port"), + required=False, + widget=forms.TextInput(attrs={'placeholder': 'e.g. 587, 465, 25, ...'}) + )), + ('smtp_username', forms.CharField( + label=_("Username"), + widget=forms.TextInput(attrs={'placeholder': 'myuser@example.org'}), + required=False + )), + ('smtp_password', forms.CharField( + label=_("Password"), + required=False, + widget=forms.PasswordInput(attrs={ + 'autocomplete': 'new-password' # see https://bugs.chromium.org/p/chromium/issues/detail?id=370363#c7 + }), + )), + ('smtp_use_tls', forms.BooleanField( + label=_("Use STARTTLS"), + help_text=_("Commonly enabled on port 587."), + required=False + + )), + ('smtp_use_ssl', forms.BooleanField( + label=_("Use SSL"), + help_text=_("Commonly enabled on port 465."), + required=False + )), ]) responses = register_global_settings.send(self) for r, response in sorted(responses, key=lambda r: str(r[0])): diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py index 0d161bdbb..e5f7d6733 100644 --- a/src/pretix/control/forms/item.py +++ b/src/pretix/control/forms/item.py @@ -47,8 +47,17 @@ class QuestionForm(I18nModelForm): widget=I18nTextarea ) + def removeDesOption(self): + choices = self.fields['type'].choices + for value in choices: + if value[0] == Question.TYPE_DESCRIPTION: + choices.pop(choices.index(value)) + self.fields['type'].choices = choices + break + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self.removeDesOption() self.fields['items'].queryset = self.instance.event.items.all() self.fields['items'].required = True self.fields['dependency_question'].queryset = self.instance.event.questions.filter( @@ -103,6 +112,7 @@ class Meta: fields = [ 'question', 'help_text', + 'description', 'type', 'required', 'ask_during_checkin', @@ -136,6 +146,28 @@ class Meta: 'dependency_question': SafeModelChoiceField, } +class DescriptionForm(QuestionForm): + question = I18nFormField( + label=_("Description Title"), + widget_kwargs={'attrs': {'rows': 2}}, + widget=I18nTextarea, + + ) + description = I18nFormField( + label=_("Description"), + widget_kwargs={'attrs': {'rows': 3}}, + widget=I18nTextarea, + initial="hahaha", + ) + + def removeDesOption(self): + # just override parent 's function + pass + def __init__(self, *args, **kwargs): + kwargs['initial'] = { + "type": "DES", + } + super().__init__(*args, **kwargs) class QuestionOptionForm(I18nModelForm): class Meta: diff --git a/src/pretix/control/forms/orders.py b/src/pretix/control/forms/orders.py index 3ea707766..2fcfc1d4a 100644 --- a/src/pretix/control/forms/orders.py +++ b/src/pretix/control/forms/orders.py @@ -11,6 +11,7 @@ from django.utils.translation import ( gettext_lazy as _, gettext_noop, pgettext_lazy, ) +from django_scopes.forms import SafeModelChoiceField from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput from i18nfield.strings import LazyI18nString @@ -481,16 +482,34 @@ class OrderContactForm(forms.ModelForm): class Meta: model = Order - fields = ['email', 'email_known_to_work', 'phone'] + fields = ['customer', 'email', 'email_known_to_work', 'phone'] widgets = { - 'phone': WrappedPhoneNumberPrefixWidget() + 'phone': WrappedPhoneNumberPrefixWidget(), + } + field_classes = { + 'customer': SafeModelChoiceField, } def __init__(self, *args, **kwargs): + customers = kwargs.pop('customers') super().__init__(*args, **kwargs) if not self.instance.event.settings.order_phone_asked and not self.instance.phone: del self.fields['phone'] - + if customers: + self.fields['customer'].queryset = self.instance.event.organizer.customers.all() + self.fields['customer'].widget = Select2( + attrs={ + 'data-model-select2': 'generic', + 'data-select2-url': reverse('control:organizer.customers.select2', kwargs={ + 'organizer': self.instance.event.organizer.slug, + }), + 'data-placeholder': _('Customer') + } + ) + self.fields['customer'].widget.choices = self.fields['customer'].choices + self.fields['customer'].required = False + else: + del self.fields['customer'] class OrderLocaleForm(forms.ModelForm): locale = forms.ChoiceField() diff --git a/src/pretix/control/forms/organizer.py b/src/pretix/control/forms/organizer.py index 94edb8042..df67bbad3 100644 --- a/src/pretix/control/forms/organizer.py +++ b/src/pretix/control/forms/organizer.py @@ -1,341 +1,14 @@ -from decimal import Decimal -from urllib.parse import urlparse - from django import forms -from django.conf import settings -from django.core.exceptions import ValidationError -from django.db.models import Q -from django.utils.safestring import mark_safe -from django.utils.translation import gettext_lazy as _, pgettext_lazy -from django_scopes.forms import SafeModelMultipleChoiceField -from pretix.api.models import WebHook -from pretix.api.webhooks import get_all_webhook_events -from pretix.base.forms import I18nModelForm, SettingsForm -from pretix.base.forms.widgets import SplitDateTimePickerWidget -from pretix.base.models import ( - Device, EventMetaProperty, Gate, GiftCard, Organizer, Team, +from pretix.base.models import Organizer +from pretix.base.models.organizer import OrganizerFooterLinkModel +from pretix.control.forms.organizer_forms import ( + BaseOrganizerFooterLinkFormSet, OrganizerFooterLinkForm, ) -from pretix.control.forms import ExtFileField, SplitDateTimeField -from pretix.control.forms.event import SafeEventMultipleChoiceField -from pretix.multidomain.models import KnownDomain - - -class OrganizerForm(I18nModelForm): - error_messages = { - 'duplicate_slug': _("This slug is already in use. Please choose a different one."), - } - - class Meta: - model = Organizer - fields = ['name', 'slug'] - - def clean_slug(self): - slug = self.cleaned_data['slug'] - if Organizer.objects.filter(slug__iexact=slug).exists(): - raise forms.ValidationError( - self.error_messages['duplicate_slug'], - code='duplicate_slug', - ) - return slug - - -class OrganizerDeleteForm(forms.Form): - error_messages = { - 'slug_wrong': _("The slug you entered was not correct."), - } - slug = forms.CharField( - max_length=255, - label=_("Event slug"), - ) - - def __init__(self, *args, **kwargs): - self.organizer = kwargs.pop('organizer') - super().__init__(*args, **kwargs) - - def clean_slug(self): - slug = self.cleaned_data.get('slug') - if slug != self.organizer.slug: - raise forms.ValidationError( - self.error_messages['slug_wrong'], - code='slug_wrong', - ) - return slug - - -class OrganizerUpdateForm(OrganizerForm): - - def __init__(self, *args, **kwargs): - self.domain = kwargs.pop('domain', False) - self.change_slug = kwargs.pop('change_slug', False) - kwargs.setdefault('initial', {}) - self.instance = kwargs['instance'] - if self.domain and self.instance: - initial_domain = self.instance.domains.filter(event__isnull=True).first() - if initial_domain: - kwargs['initial'].setdefault('domain', initial_domain.domainname) - - super().__init__(*args, **kwargs) - if not self.change_slug: - self.fields['slug'].widget.attrs['readonly'] = 'readonly' - if self.domain: - self.fields['domain'] = forms.CharField( - max_length=255, - label=_('Custom domain'), - required=False, - help_text=_('You need to configure the custom domain in the webserver beforehand.') - ) - - def clean_domain(self): - d = self.cleaned_data['domain'] - if d: - if d == urlparse(settings.SITE_URL).hostname: - raise ValidationError( - _('You cannot choose the base domain of this installation.') - ) - if KnownDomain.objects.filter(domainname=d).exclude(organizer=self.instance.pk, - event__isnull=True).exists(): - raise ValidationError( - _('This domain is already in use for a different event or organizer.') - ) - return d - - def clean_slug(self): - if self.change_slug: - return self.cleaned_data['slug'] - return self.instance.slug - - def save(self, commit=True): - instance = super().save(commit) - - if self.domain: - current_domain = instance.domains.first() - if self.cleaned_data['domain']: - if current_domain and current_domain.domainname != self.cleaned_data['domain']: - current_domain.delete() - KnownDomain.objects.create(organizer=instance, domainname=self.cleaned_data['domain']) - elif not current_domain: - KnownDomain.objects.create(organizer=instance, domainname=self.cleaned_data['domain']) - elif current_domain: - current_domain.delete() - instance.cache.clear() - for ev in instance.events.all(): - ev.cache.clear() - - return instance - - -class EventMetaPropertyForm(forms.ModelForm): - class Meta: - model = EventMetaProperty - fields = ['name', 'default', 'required', 'protected', 'allowed_values'] - widgets = { - 'default': forms.TextInput() - } - - -class TeamForm(forms.ModelForm): - - def __init__(self, *args, **kwargs): - organizer = kwargs.pop('organizer') - super().__init__(*args, **kwargs) - self.fields['limit_events'].queryset = organizer.events.all().order_by( - '-has_subevents', '-date_from' - ) - - class Meta: - model = Team - fields = ['name', 'all_events', 'limit_events', 'can_create_events', - 'can_change_teams', 'can_change_organizer_settings', - 'can_manage_gift_cards', - 'can_change_event_settings', 'can_change_items', - 'can_view_orders', 'can_change_orders', 'can_checkin_orders', - 'can_view_vouchers', 'can_change_vouchers'] - widgets = { - 'limit_events': forms.CheckboxSelectMultiple(attrs={ - 'data-inverse-dependency': '#id_all_events', - 'class': 'scrolling-multiple-choice scrolling-multiple-choice-large', - }), - } - field_classes = { - 'limit_events': SafeEventMultipleChoiceField - } - - def clean(self): - data = super().clean() - if self.instance.pk and not data['can_change_teams']: - if not self.instance.organizer.teams.exclude(pk=self.instance.pk).filter( - can_change_teams=True, members__isnull=False - ).exists(): - raise ValidationError(_('The changes could not be saved because there would be no remaining team with ' - 'the permission to change teams and permissions.')) - - return data - -class GateForm(forms.ModelForm): - - def __init__(self, *args, **kwargs): - kwargs.pop('organizer') - super().__init__(*args, **kwargs) - - class Meta: - model = Gate - fields = ['name', 'identifier'] - - -class DeviceForm(forms.ModelForm): - - def __init__(self, *args, **kwargs): - organizer = kwargs.pop('organizer') - super().__init__(*args, **kwargs) - self.fields['limit_events'].queryset = organizer.events.all().order_by( - '-has_subevents', '-date_from' - ) - self.fields['gate'].queryset = organizer.gates.all() - - def clean(self): - d = super().clean() - if not d['all_events'] and not d['limit_events']: - raise ValidationError(_('Your device will not have access to anything, please select some events.')) - - return d - - class Meta: - model = Device - fields = ['name', 'all_events', 'limit_events', 'security_profile', 'gate'] - widgets = { - 'limit_events': forms.CheckboxSelectMultiple(attrs={ - 'data-inverse-dependency': '#id_all_events', - 'class': 'scrolling-multiple-choice scrolling-multiple-choice-large', - }), - } - field_classes = { - 'limit_events': SafeEventMultipleChoiceField - } - - -class OrganizerSettingsForm(SettingsForm): - auto_fields = [ - 'contact_mail', - 'imprint_url', - 'organizer_info_text', - 'event_list_type', - 'event_list_availability', - 'organizer_homepage_text', - 'organizer_link_back', - 'organizer_logo_image_large', - 'giftcard_length', - 'giftcard_expiry_years', - 'locales', - 'region', - 'event_team_provisioning', - 'primary_color', - 'theme_color_success', - 'theme_color_danger', - 'theme_color_background', - 'theme_round_borders', - 'primary_font' - - ] - - organizer_logo_image = ExtFileField( - label=_('Header image'), - ext_whitelist=(".png", ".jpg", ".gif", ".jpeg"), - max_size=10 * 1024 * 1024, - required=False, - help_text=_('If you provide a logo image, we will by default not show your organization name ' - 'in the page header. By default, we show your logo with a size of up to 1140x120 pixels. You ' - 'can increase the size with the setting below. We recommend not using small details on the picture ' - 'as it will be resized on smaller screens.') - ) - favicon = ExtFileField( - label=_('Favicon'), - ext_whitelist=(".ico", ".png", ".jpg", ".gif", ".jpeg"), - required=False, - max_size=1 * 1024 * 1024, - help_text=_('If you provide a favicon, we will show it instead of the default pretix icon. ' - 'We recommend a size of at least 200x200px to accommodate most devices.') - ) - - -class WebHookForm(forms.ModelForm): - events = forms.MultipleChoiceField( - widget=forms.CheckboxSelectMultiple, - label=pgettext_lazy('webhooks', 'Event types') - ) - - def __init__(self, *args, **kwargs): - organizer = kwargs.pop('organizer') - super().__init__(*args, **kwargs) - self.fields['limit_events'].queryset = organizer.events.all() - self.fields['events'].choices = [ - ( - a.action_type, - mark_safe('{} – {}'.format(a.verbose_name, a.action_type)) - ) for a in get_all_webhook_events().values() - ] - if self.instance and self.instance.pk: - self.fields['events'].initial = list(self.instance.listeners.values_list('action_type', flat=True)) - - class Meta: - model = WebHook - fields = ['target_url', 'enabled', 'all_events', 'limit_events'] - widgets = { - 'limit_events': forms.CheckboxSelectMultiple(attrs={ - 'data-inverse-dependency': '#id_all_events' - }), - } - field_classes = { - 'limit_events': SafeModelMultipleChoiceField - } - - -class GiftCardCreateForm(forms.ModelForm): - value = forms.DecimalField( - label=_('Gift card value'), - min_value=Decimal('0.00') - ) - - def __init__(self, *args, **kwargs): - self.organizer = kwargs.pop('organizer') - initial = kwargs.pop('initial', {}) - initial['expires'] = self.organizer.default_gift_card_expiry - kwargs['initial'] = initial - super().__init__(*args, **kwargs) - - def clean_secret(self): - s = self.cleaned_data['secret'] - if GiftCard.objects.filter( - secret__iexact=s - ).filter( - Q(issuer=self.organizer) | Q(issuer__gift_card_collector_acceptance__collector=self.organizer) - ).exists(): - raise ValidationError( - _('A gift card with the same secret already exists in your or an affiliated organizer account.') - ) - return s - - class Meta: - model = GiftCard - fields = ['secret', 'currency', 'testmode', 'expires', 'conditions'] - field_classes = { - 'expires': SplitDateTimeField - } - widgets = { - 'expires': SplitDateTimePickerWidget, - 'conditions': forms.Textarea(attrs={"rows": 2}) - } - - -class GiftCardUpdateForm(forms.ModelForm): - class Meta: - model = GiftCard - fields = ['expires', 'conditions'] - field_classes = { - 'expires': SplitDateTimeField - } - widgets = { - 'expires': SplitDateTimePickerWidget, - 'conditions': forms.Textarea(attrs={"rows": 2}) - } +OrganizerFooterLinkFormset = forms.inlineformset_factory( + Organizer, OrganizerFooterLinkModel, + OrganizerFooterLinkForm, + formset=BaseOrganizerFooterLinkFormSet, + can_order=False, can_delete=True, extra=0 +) diff --git a/src/pretix/control/forms/organizer_forms/__init__.py b/src/pretix/control/forms/organizer_forms/__init__.py new file mode 100644 index 000000000..11dbe8370 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/__init__.py @@ -0,0 +1,17 @@ +from .base_organizer_footer_link_form_set import BaseOrganizerFooterLinkFormSet +from .customer_update_form import CustomerUpdateForm +from .device_form import DeviceForm +from .event_meta_property_form import EventMetaPropertyForm +from .gate_form import GateForm +from .gift_card_create_form import GiftCardCreateForm +from .gift_card_update_form import GiftCardUpdateForm +from .mail_settings_form import MailSettingsForm +from .organizer_delete_form import OrganizerDeleteForm +from .organizer_footer_link_form import OrganizerFooterLinkForm +from .organizer_form import OrganizerForm +from .organizer_settings_form import OrganizerSettingsForm +from .organizer_update_form import OrganizerUpdateForm +from .sso_client_form import SSOClientForm +from .sso_provider_form import SSOProviderForm +from .team_form import TeamForm +from .web_hook_form import WebHookForm diff --git a/src/pretix/control/forms/organizer_forms/base_organizer_footer_link_form_set.py b/src/pretix/control/forms/organizer_forms/base_organizer_footer_link_form_set.py new file mode 100644 index 000000000..dc1022cd4 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/base_organizer_footer_link_form_set.py @@ -0,0 +1,10 @@ +from django import forms +from i18nfield.forms import I18nFormSetMixin + + +class BaseOrganizerFooterLinkFormSet(I18nFormSetMixin, forms.BaseInlineFormSet): + def __init__(self, *args, **kwargs): + organizer = kwargs.pop('organizer', None) + if organizer: + kwargs['locales'] = organizer.settings.get('locales') + super().__init__(*args, **kwargs) \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/customer_update_form.py b/src/pretix/control/forms/organizer_forms/customer_update_form.py new file mode 100644 index 000000000..7d414edd4 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/customer_update_form.py @@ -0,0 +1,61 @@ +from django import forms +from django.utils.translation import gettext_lazy as _ + +from pretix.base.forms.questions import NamePartsFormField +from pretix.base.models.customers import Customer + + +class CustomerUpdateForm(forms.ModelForm): + error_messages = { + 'duplicate': _("An account with this email address is already existed."), + } + + class Meta: + model = Customer + fields = [ + 'is_active', + 'name_parts', + 'email', + 'is_verified', + 'locale', + 'external_identifier'] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.fields['name_parts'] = NamePartsFormField( + max_length=255, + required=False, + scheme=self.instance.organizer.settings.name_scheme, + titles=self.instance.organizer.settings.name_scheme_titles, + label=_('Name'), + ) + if self.instance.provider_id: + self.fields['email'].disabled = True + self.fields['is_verified'].disabled = True + self.fields['external_identifier'].disabled = True + + def clean(self): + """ + Validates the email and identifier fields to ensure they are unique within the organizer's customers, + excluding the current instance. Raises a validation error if a duplicate is found. + """ + email = self.cleaned_data.get('email') + identifier = self.cleaned_data.get('identifier') + + def check_duplicate(field_name, error_message_key, error_code, field_value): + if field_value: + filter_args = {field_name: field_value} + if self.instance.organizer.customers.exclude(pk=self.instance.pk).filter(**filter_args).exists(): + raise forms.ValidationError( + self.error_messages[error_message_key], + code=error_code + ) + + # Check for duplicate email + check_duplicate('email', 'duplicate', 'duplicate', email) + + # Check for duplicate identifier + check_duplicate('identifier', 'duplicate_identifier', 'duplicate_identifier', identifier) + + return self.cleaned_data diff --git a/src/pretix/control/forms/organizer_forms/device_form.py b/src/pretix/control/forms/organizer_forms/device_form.py new file mode 100644 index 000000000..8f6e30e82 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/device_form.py @@ -0,0 +1,37 @@ +from django import forms +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +from pretix.base.models.devices import Device +from pretix.control.forms.event import SafeEventMultipleChoiceField + + +class DeviceForm(forms.ModelForm): + + def __init__(self, *args, **kwargs): + organizer = kwargs.pop('organizer') + super().__init__(*args, **kwargs) + self.fields['limit_events'].queryset = organizer.events.all().order_by( + '-has_subevents', '-date_from' + ) + self.fields['gate'].queryset = organizer.gates.all() + + def clean(self): + cleaned_data = super().clean() + if not cleaned_data.get('all_events') and not cleaned_data.get('limit_events'): + raise ValidationError(_('Your device will not have access to anything, please select some events.')) + + return cleaned_data + + class Meta: + model = Device + fields = ['name', 'all_events', 'limit_events', 'security_profile', 'gate'] + widgets = { + 'limit_events': forms.CheckboxSelectMultiple(attrs={ + 'data-inverse-dependency': '#id_all_events', + 'class': 'scrolling-multiple-choice scrolling-multiple-choice-large', + }), + } + field_classes = { + 'limit_events': SafeEventMultipleChoiceField + } \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/event_meta_property_form.py b/src/pretix/control/forms/organizer_forms/event_meta_property_form.py new file mode 100644 index 000000000..d9be8cc46 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/event_meta_property_form.py @@ -0,0 +1,12 @@ +from django import forms + +from pretix.base.models.event import EventMetaProperty + + +class EventMetaPropertyForm(forms.ModelForm): + class Meta: + model = EventMetaProperty + fields = ['name', 'default', 'required', 'protected', 'allowed_values'] + widgets = { + 'default': forms.TextInput() + } \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/gate_form.py b/src/pretix/control/forms/organizer_forms/gate_form.py new file mode 100644 index 000000000..5be6e5258 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/gate_form.py @@ -0,0 +1,14 @@ +from django import forms + +from pretix.base.models.devices import Gate + + +class GateForm(forms.ModelForm): + + def __init__(self, *args, **kwargs): + kwargs.pop('organizer') + super().__init__(*args, **kwargs) + + class Meta: + model = Gate + fields = ['name', 'identifier'] \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/gift_card_create_form.py b/src/pretix/control/forms/organizer_forms/gift_card_create_form.py new file mode 100644 index 000000000..b896345a8 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/gift_card_create_form.py @@ -0,0 +1,50 @@ +from decimal import Decimal + +from django import forms +from django.core.exceptions import ValidationError +from django.db.models import Q +from django.utils.translation import gettext_lazy as _ + +from pretix.base.forms.widgets import SplitDateTimePickerWidget +from pretix.base.models.giftcards import GiftCard +from pretix.control.forms import SplitDateTimeField + + +class GiftCardCreateForm(forms.ModelForm): + value = forms.DecimalField( + label=_('Gift card value'), + min_value=Decimal('0.00') + ) + + def __init__(self, *args, **kwargs): + self.organizer = kwargs.pop('organizer') + initial = kwargs.pop('initial', {}) + initial['expires'] = self.organizer.default_gift_card_expiry + kwargs['initial'] = initial + super().__init__(*args, **kwargs) + + def clean_secret(self): + secret = self.cleaned_data.get('secret') + exists = GiftCard.objects.filter( + secret__iexact=secret + ).filter( + Q(issuer=self.organizer) | Q(issuer__gift_card_collector_acceptance__collector=self.organizer) + ).exists() + + if exists: + raise ValidationError( + _('A gift card with the same secret already exists in your or an affiliated organizer account.') + ) + + return secret + + class Meta: + model = GiftCard + fields = ['secret', 'currency', 'testmode', 'expires', 'conditions'] + field_classes = { + 'expires': SplitDateTimeField + } + widgets = { + 'expires': SplitDateTimePickerWidget, + 'conditions': forms.Textarea(attrs={"rows": 2}) + } diff --git a/src/pretix/control/forms/organizer_forms/gift_card_update_form.py b/src/pretix/control/forms/organizer_forms/gift_card_update_form.py new file mode 100644 index 000000000..4108eb136 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/gift_card_update_form.py @@ -0,0 +1,18 @@ +from django import forms + +from pretix.base.forms.widgets import SplitDateTimePickerWidget +from pretix.base.models.giftcards import GiftCard +from pretix.control.forms import SplitDateTimeField + + +class GiftCardUpdateForm(forms.ModelForm): + class Meta: + model = GiftCard + fields = ['expires', 'conditions'] + field_classes = { + 'expires': SplitDateTimeField + } + widgets = { + 'expires': SplitDateTimePickerWidget, + 'conditions': forms.Textarea(attrs={"rows": 2}) + } \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/mail_settings_form.py b/src/pretix/control/forms/organizer_forms/mail_settings_form.py new file mode 100644 index 000000000..779566e57 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/mail_settings_form.py @@ -0,0 +1,122 @@ +from django import forms +from django.utils.crypto import get_random_string +from django.utils.translation import gettext_lazy as _, pgettext_lazy +from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput + +from pretix.base.forms import ( + I18nMarkdownTextarea, PlaceholderValidator, SettingsForm, +) +from pretix.base.settings import PERSON_NAME_SCHEMES +from pretix.control.forms import SMTPSettingsMixin +from pretix.control.forms.event import multimail_validate +from pretix.helpers.urls import build_absolute_uri + + +class MailSettingsForm(SMTPSettingsMixin, SettingsForm): + auto_fields = [ + 'mail_from', + 'mail_from_name', + ] + + mail_bcc = forms.CharField( + label=_("Bcc address"), + help_text=_("All your emails will be sent to this address as a Bcc copy"), + validators=[multimail_validate], + required=False, + max_length=255 + ) + mail_text_signature = I18nFormField( + label=_("Signature"), + required=False, + widget=I18nTextarea, + help_text=_("This signature will be send along with all your email."), + validators=[PlaceholderValidator([])], + widget_kwargs={'attrs': { + 'rows': '4', + 'placeholder': _( + 'e.g. your contact details' + ) + }} + ) + + mail_text_customer_registration = I18nFormField( + label=_("Text"), + required=False, + widget=I18nMarkdownTextarea, + ) + mail_subject_customer_registration = I18nFormField( + label=_("Subject"), + required=False, + widget=I18nTextInput, + ) + mail_text_customer_email_change = I18nFormField( + label=_("Text"), + required=False, + widget=I18nTextInput, + ) + mail_text_customer_reset = I18nFormField( + label=_("Text"), + required=False, + widget=I18nTextInput, + ) + + mail_subject_customer_email_change = I18nFormField( + label=_("Subject"), + required=False, + widget=I18nTextInput, + ) + + mail_subject_customer_reset = I18nFormField( + label=_("Subject"), + required=False, + widget=I18nTextInput, + ) + + base_context = { + 'mail_text_customer_registration': ['customer', 'url'], + 'mail_subject_customer_registration': ['customer', 'url'], + 'mail_text_customer_email_change': ['customer', 'url'], + 'mail_subject_customer_email_change': ['customer', 'url'], + 'mail_text_customer_reset': ['customer', 'url'], + 'mail_subject_customer_reset': ['customer', 'url'], + } + + def _get_sample_context(self, base_parameters): + placeholders = { + 'organizer': self.organizer.name + } + + if 'url' in base_parameters: + token = get_random_string(30) + placeholders['url'] = f"{build_absolute_uri(self.organizer, 'presale:organizer.customer.activate')}?token={token}" + + if 'customer' in base_parameters: + placeholders['name'] = pgettext_lazy('person_name_sample', 'John Doe') + name_scheme = PERSON_NAME_SCHEMES[self.organizer.settings.name_scheme] + for f, l, w in name_scheme['fields']: + if f == 'full_name': + continue + placeholders['name_%s' % f] = name_scheme['sample'][f] + return placeholders + + def _set_field_placeholders(self, fn, base_parameters): + phs = [ + '{%s}' % p + for p in sorted(self._get_sample_context(base_parameters).keys()) + ] + ht = _('Available placeholders: {list}').format( + list=', '.join(phs) + ) + if self.fields[fn].help_text: + self.fields[fn].help_text += ' ' + str(ht) + else: + self.fields[fn].help_text = ht + self.fields[fn].validators.append( + PlaceholderValidator(phs) + ) + + def __init__(self, *args, **kwargs): + self.organizer = kwargs.get('obj') + super().__init__(*args, **kwargs) + for k, v in self.base_context.items(): + self._set_field_placeholders(k, v) \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/organizer_delete_form.py b/src/pretix/control/forms/organizer_forms/organizer_delete_form.py new file mode 100644 index 000000000..386128e90 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/organizer_delete_form.py @@ -0,0 +1,25 @@ +from django import forms +from django.utils.translation import gettext_lazy as _ + + +class OrganizerDeleteForm(forms.Form): + error_messages = { + 'slug_wrong': _("The slug you entered was not correct."), + } + slug = forms.CharField( + max_length=255, + label=_("Event slug"), + ) + + def __init__(self, *args, **kwargs): + self.organizer = kwargs.pop('organizer') + super().__init__(*args, **kwargs) + + def clean_slug(self): + slug = self.cleaned_data.get('slug') + if slug != self.organizer.slug: + raise forms.ValidationError( + self.error_messages['slug_wrong'], + code='slug_wrong', + ) + return slug \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/organizer_footer_link_form.py b/src/pretix/control/forms/organizer_forms/organizer_footer_link_form.py new file mode 100644 index 000000000..955d8a0a2 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/organizer_footer_link_form.py @@ -0,0 +1,8 @@ +from pretix.base.forms import I18nModelForm +from pretix.base.models.organizer import OrganizerFooterLinkModel + + +class OrganizerFooterLinkForm(I18nModelForm): + class Meta: + model = OrganizerFooterLinkModel + fields = ('label', 'url') diff --git a/src/pretix/control/forms/organizer_forms/organizer_form.py b/src/pretix/control/forms/organizer_forms/organizer_form.py new file mode 100644 index 000000000..cd6fa13c9 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/organizer_form.py @@ -0,0 +1,24 @@ +from django import forms +from django.utils.translation import gettext_lazy as _ + +from pretix.base.forms import I18nModelForm +from pretix.base.models.organizer import Organizer + + +class OrganizerForm(I18nModelForm): + error_messages = { + 'duplicate_slug': _("This slug is already in use. Please choose a different one."), + } + + class Meta: + model = Organizer + fields = ['name', 'slug'] + + def clean_slug(self): + slug = self.cleaned_data['slug'] + if Organizer.objects.filter(slug__iexact=slug).exists(): + raise forms.ValidationError( + self.error_messages['duplicate_slug'], + code='duplicate_slug', + ) + return slug \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/organizer_settings_form.py b/src/pretix/control/forms/organizer_forms/organizer_settings_form.py new file mode 100644 index 000000000..91e13483f --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/organizer_settings_form.py @@ -0,0 +1,86 @@ +from django import forms +from django.utils.translation import gettext_lazy as _ +from pytz import common_timezones + +from pretix.base.forms import SettingsForm +from pretix.base.settings import PERSON_NAME_SCHEMES, PERSON_NAME_TITLE_GROUPS +from pretix.control.forms import ExtFileField + + +class OrganizerSettingsForm(SettingsForm): + timezone = forms.ChoiceField( + choices=((a, a) for a in common_timezones), + label=_("Default timezone"), + ) + name_scheme = forms.ChoiceField( + label=_("Name format"), + help_text=_("Changing this after you already received " + "orders might lead to unexpected behavior when sorting or changing names."), + required=True, + ) + name_scheme_titles = forms.ChoiceField( + label=_("Allowed titles"), + help_text=_("If the naming scheme you defined above allows users to input a title, you can use this to " + "restrict the set of selectable titles."), + required=False, + ) + auto_fields = [ + 'customer_accounts', + 'customer_accounts_native', + 'contact_mail', + 'imprint_url', + 'organizer_info_text', + 'event_list_type', + 'event_list_availability', + 'organizer_homepage_text', + 'organizer_link_back', + 'organizer_logo_image_large', + 'giftcard_length', + 'giftcard_expiry_years', + 'locales', + 'region', + 'event_team_provisioning', + 'primary_color', + 'theme_color_success', + 'theme_color_danger', + 'theme_color_background', + 'theme_round_borders', + 'primary_font', + 'privacy_policy' + ] + + organizer_logo_image = ExtFileField( + label=_('Header image'), + ext_whitelist=(".png", ".jpg", ".gif", ".jpeg"), + max_size=10 * 1024 * 1024, + required=False, + help_text=_('If you provide a logo image, we will by default not show your organization name ' + 'in the page header. By default, we show your logo with a size of up to 1140x120 pixels. You ' + 'can increase the size with the setting below. We recommend not using small details on the picture ' + 'as it will be resized on smaller screens.') + ) + favicon = ExtFileField( + label=_('Favicon'), + ext_whitelist=(".ico", ".png", ".jpg", ".gif", ".jpeg"), + required=False, + max_size=1 * 1024 * 1024, + help_text=_('If you provide a favicon, we will show it instead of the default pretix icon. ' + 'We recommend a size of at least 200x200px to accommodate most devices.') + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['name_scheme'].choices = ( + (k, _('Ask for {fields}, display like {example}').format( + fields=' + '.join(str(vv[1]) for vv in v['fields']), + example=v['concatenation'](v['sample']) + )) + for k, v in PERSON_NAME_SCHEMES.items() + ) + self.fields['name_scheme_titles'].choices = [('', _('Free text input'))] + [ + (k, '{scheme}: {samples}'.format( + scheme=v[0], + samples=', '.join(v[1]) + )) + for k, v in PERSON_NAME_TITLE_GROUPS.items() + ] \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/organizer_update_form.py b/src/pretix/control/forms/organizer_forms/organizer_update_form.py new file mode 100644 index 000000000..952faaa03 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/organizer_update_form.py @@ -0,0 +1,72 @@ +from urllib.parse import urlparse + +from django import forms +from django.conf import settings +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +from pretix.multidomain.models import KnownDomain + +from .organizer_form import OrganizerForm + + +class OrganizerUpdateForm(OrganizerForm): + + def __init__(self, *args, **kwargs): + self.domain = kwargs.pop('domain', False) + self.change_slug = kwargs.pop('change_slug', False) + kwargs.setdefault('initial', {}) + self.instance = kwargs['instance'] + if self.domain and self.instance: + initial_domain = self.instance.domains.filter(event__isnull=True).first() + if initial_domain: + kwargs['initial'].setdefault('domain', initial_domain.domainname) + + super().__init__(*args, **kwargs) + if not self.change_slug: + self.fields['slug'].widget.attrs['readonly'] = 'readonly' + if self.domain: + self.fields['domain'] = forms.CharField( + max_length=255, + label=_('Custom domain'), + required=False, + help_text=_('You need to configure the custom domain in the webserver beforehand.') + ) + + def clean_domain(self): + d = self.cleaned_data['domain'] + if d: + if d == urlparse(settings.SITE_URL).hostname: + raise ValidationError( + _('You cannot choose the base domain of this installation.') + ) + if KnownDomain.objects.filter(domainname=d).exclude(organizer=self.instance.pk, + event__isnull=True).exists(): + raise ValidationError( + _('This domain is already in use for a different event or organizer.') + ) + return d + + def clean_slug(self): + if self.change_slug: + return self.cleaned_data['slug'] + return self.instance.slug + + def save(self, commit=True): + instance = super().save(commit) + + if self.domain: + current_domain = instance.domains.first() + if self.cleaned_data['domain']: + if current_domain and current_domain.domainname != self.cleaned_data['domain']: + current_domain.delete() + KnownDomain.objects.create(organizer=instance, domainname=self.cleaned_data['domain']) + elif not current_domain: + KnownDomain.objects.create(organizer=instance, domainname=self.cleaned_data['domain']) + elif current_domain: + current_domain.delete() + instance.cache.clear() + for ev in instance.events.all(): + ev.cache.clear() + + return instance \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/sso_client_form.py b/src/pretix/control/forms/organizer_forms/sso_client_form.py new file mode 100644 index 000000000..613451ca9 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/sso_client_form.py @@ -0,0 +1,38 @@ +from django import forms +from django.utils.translation import gettext_lazy as _ + +from pretix.base.forms import I18nModelForm +from pretix.base.models.customers import CustomerSSOClient + + +class SSOClientForm(I18nModelForm): + regenerate_client_secret = forms.BooleanField( + label=_('Invalidate old client secret and generate a new one'), + required=False, + ) + + class Meta: + model = CustomerSSOClient + fields = ['is_active', 'name', 'client_id', 'client_type', 'authorization_grant_type', 'redirect_uris', + 'allowed_scopes'] + widgets = { + 'authorization_grant_type': forms.RadioSelect, + 'client_type': forms.RadioSelect, + 'allowed_scopes': forms.CheckboxSelectMultiple, + } + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['allowed_scopes'] = forms.MultipleChoiceField( + label=self.fields['allowed_scopes'].label, + help_text=self.fields['allowed_scopes'].help_text, + required=self.fields['allowed_scopes'].required, + initial=self.fields['allowed_scopes'].initial, + choices=CustomerSSOClient.SCOPE_CHOICES, + widget=forms.CheckboxSelectMultiple + ) + if self.instance and self.instance.pk: + self.fields['client_id'].disabled = True + else: + del self.fields['client_id'] + del self.fields['regenerate_client_secret'] \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/sso_provider_form.py b/src/pretix/control/forms/organizer_forms/sso_provider_form.py new file mode 100644 index 000000000..1bae11346 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/sso_provider_form.py @@ -0,0 +1,99 @@ +from django import forms +from django.utils.translation import gettext_lazy as _, pgettext_lazy + +from pretix.base.customersso.oidc import oidc_validate_and_complete_config +from pretix.base.forms import I18nModelForm +from pretix.base.models.customers import CustomerSSOProvider +from pretix.base.settings import PERSON_NAME_SCHEMES + + +class SSOProviderForm(I18nModelForm): + + config_oidc_base_url = forms.URLField( + label=pgettext_lazy('sso_oidc', 'Base URL'), + required=False, + ) + config_oidc_client_id = forms.CharField( + label=pgettext_lazy('sso_oidc', 'Client ID'), + required=False, + ) + config_oidc_client_secret = forms.CharField( + label=pgettext_lazy('sso_oidc', 'Client secret'), + required=False, + ) + config_oidc_scope = forms.CharField( + label=pgettext_lazy('sso_oidc', 'Scope'), + help_text=pgettext_lazy('sso_oidc', 'Multiple scopes separated with spaces.'), + required=False, + ) + config_oidc_uid_field = forms.CharField( + label=pgettext_lazy('sso_oidc', 'User ID field'), + help_text=pgettext_lazy('sso_oidc', 'We will assume that the contents of the user ID fields are unique and ' + 'can never change for a user.'), + required=True, + initial='sub', + ) + config_oidc_email_field = forms.CharField( + label=pgettext_lazy('sso_oidc', 'Email field'), + help_text=pgettext_lazy('sso_oidc', 'We will assume that all email addresses received from the SSO provider ' + 'are verified to really belong the the user. If this can\'t be ' + 'guaranteed, security issues might arise.'), + required=True, + initial='email', + ) + config_oidc_phone_field = forms.CharField( + label=pgettext_lazy('sso_oidc', 'Phone field'), + required=False, + ) + + class Meta: + model = CustomerSSOProvider + fields = ['is_active', 'name', 'button_label', 'method'] + widgets = { + 'method': forms.RadioSelect, + } + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + name_scheme = self.event.settings.name_scheme + scheme = PERSON_NAME_SCHEMES.get(name_scheme) + for fname, label, size in scheme['fields']: + self.fields[f'config_oidc_{fname}_field'] = forms.CharField( + label=pgettext_lazy('sso_oidc', f'{label} field').format(label=label), + required=False, + ) + + self.fields['method'].choices = [c for c in self.fields['method'].choices if c[0]] + + for fname, f in self.fields.items(): + if fname.startswith('config_'): + prefix, method, suffix = fname.split('_', 2) + f.widget.attrs['data-display-dependency'] = f'input[name=method][value={method}]' + + if self.instance and self.instance.method == method: + f.initial = self.instance.configuration.get(suffix) + + def clean(self): + """ + Cleans and validates the form data. If a method is specified, it collects and validates the + configuration settings for that method, and then sets the instance's configuration. + + Returns: + dict: The cleaned data. + """ + data = self.cleaned_data + if not data.get("method"): + return data + + # Collect configuration settings for the specified method + config = { + fname.split('_', 2)[2]: data.get(fname) + for fname in self.fields + if fname.startswith(f'config_{data["method"]}_') + } + + if data["method"] == "oidc": + oidc_validate_and_complete_config(config) + + self.instance.configuration = config \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/team_form.py b/src/pretix/control/forms/organizer_forms/team_form.py new file mode 100644 index 000000000..109deb8ea --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/team_form.py @@ -0,0 +1,45 @@ +from django import forms +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +from pretix.base.models.organizer import Team +from pretix.control.forms.event import SafeEventMultipleChoiceField + + +class TeamForm(forms.ModelForm): + + def __init__(self, *args, **kwargs): + organizer = kwargs.pop('organizer') + super().__init__(*args, **kwargs) + self.fields['limit_events'].queryset = organizer.events.all().order_by( + '-has_subevents', '-date_from' + ) + + class Meta: + model = Team + fields = ['name', 'all_events', 'limit_events', 'can_create_events', + 'can_change_teams', 'can_change_organizer_settings', + 'can_manage_gift_cards', 'can_manage_customers', + 'can_change_event_settings', 'can_change_items', + 'can_view_orders', 'can_change_orders', 'can_checkin_orders', + 'can_view_vouchers', 'can_change_vouchers'] + widgets = { + 'limit_events': forms.CheckboxSelectMultiple(attrs={ + 'data-inverse-dependency': '#id_all_events', + 'class': 'scrolling-multiple-choice scrolling-multiple-choice-large', + }), + } + field_classes = { + 'limit_events': SafeEventMultipleChoiceField + } + + def clean(self): + data = super().clean() + if self.instance.pk and not data['can_change_teams']: + if not self.instance.organizer.teams.exclude(pk=self.instance.pk).filter( + can_change_teams=True, members__isnull=False + ).exists(): + raise ValidationError(_('The changes could not be saved because there would be no remaining team with ' + 'the permission to change teams and permissions.')) + + return data \ No newline at end of file diff --git a/src/pretix/control/forms/organizer_forms/web_hook_form.py b/src/pretix/control/forms/organizer_forms/web_hook_form.py new file mode 100644 index 000000000..53515f1a2 --- /dev/null +++ b/src/pretix/control/forms/organizer_forms/web_hook_form.py @@ -0,0 +1,39 @@ +from django import forms +from django.utils.safestring import mark_safe +from django.utils.translation import gettext_lazy as _, pgettext_lazy +from django_scopes.forms import SafeModelMultipleChoiceField + +from pretix.api.models import WebHook +from pretix.api.webhooks import get_all_webhook_events + + +class WebHookForm(forms.ModelForm): + events = forms.MultipleChoiceField( + widget=forms.CheckboxSelectMultiple, + label=pgettext_lazy('webhooks', 'Event types') + ) + + def __init__(self, *args, **kwargs): + organizer = kwargs.pop('organizer') + super().__init__(*args, **kwargs) + self.fields['limit_events'].queryset = organizer.events.all() + self.fields['events'].choices = [ + ( + a.action_type, + mark_safe('{} – {}'.format(a.verbose_name, a.action_type)) + ) for a in get_all_webhook_events().values() + ] + if self.instance and self.instance.pk: + self.fields['events'].initial = list(self.instance.listeners.values_list('action_type', flat=True)) + + class Meta: + model = WebHook + fields = ['target_url', 'enabled', 'all_events', 'limit_events'] + widgets = { + 'limit_events': forms.CheckboxSelectMultiple(attrs={ + 'data-inverse-dependency': '#id_all_events' + }), + } + field_classes = { + 'limit_events': SafeModelMultipleChoiceField + } \ No newline at end of file diff --git a/src/pretix/control/logdisplay.py b/src/pretix/control/logdisplay.py index c7f42486d..2bc326c78 100644 --- a/src/pretix/control/logdisplay.py +++ b/src/pretix/control/logdisplay.py @@ -275,10 +275,23 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs): 'pretix.object.cloned': _('This object has been created by cloning.'), 'pretix.organizer.changed': _('The organizer has been changed.'), 'pretix.organizer.settings': _('The organizer settings have been changed.'), + 'eventyay.organizer.footerlinks.changed': _('The footer links have been changed.'), 'pretix.giftcards.acceptance.added': _('Gift card acceptance for another organizer has been added.'), 'pretix.giftcards.acceptance.removed': _('Gift card acceptance for another organizer has been removed.'), 'pretix.webhook.created': _('The webhook has been created.'), 'pretix.webhook.changed': _('The webhook has been changed.'), + 'pretix.customer.created': _('The account has been created.'), + 'pretix.customer.changed': _('The account has been changed.'), + 'pretix.customer.anonymized': _('The account has been disabled and anonymized.'), + 'pretix.customer.password.resetrequested': _('A new password has been requested.'), + 'pretix.customer.password.set': _('A new password has been set.'), + 'pretix.ssoprovider.created': _('The SSO provider has been created.'), + 'pretix.ssoprovider.changed': _('The SSO provider has been changed.'), + 'pretix.ssoprovider.deleted': _('The SSO provider has been deleted.'), + 'pretix.ssoclient.created': _('The SSO client has been created.'), + 'pretix.ssoclient.changed': _('The SSO client has been changed.'), + 'pretix.ssoclient.deleted': _('The SSO client has been deleted.'), + 'pretix.email.error': _('Sending of an email has failed.'), 'pretix.event.comment': _('The event\'s internal comment has been updated.'), 'pretix.event.canceled': _('The event has been canceled.'), 'pretix.event.deleted': _('An event has been deleted.'), @@ -303,6 +316,7 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs): 'in the email for the first time).'), 'pretix.event.order.phone.changed': _('The phone number has been changed from "{old_phone}" ' 'to "{new_phone}".'), + 'pretix.event.order.customer.changed': _('The customer account has been changed.'), 'pretix.event.order.locale.changed': _('The order locale has been changed.'), 'pretix.event.order.invoice.generated': _('The invoice has been generated.'), 'pretix.event.order.invoice.regenerated': _('The invoice has been regenerated.'), @@ -412,6 +426,7 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs): 'pretix.event.testmode.deactivated': _('The test mode has been disabled.'), 'pretix.event.added': _('The event has been created.'), 'pretix.event.changed': _('The event details have been changed.'), + 'eventyay.event.footerlinks.changed': _('The footer links have been changed.'), 'pretix.event.question.option.added': _('An answer option has been added to the question.'), 'pretix.event.question.option.deleted': _('An answer option has been removed from the question.'), 'pretix.event.question.option.changed': _('An answer option has been changed.'), diff --git a/src/pretix/control/navigation.py b/src/pretix/control/navigation.py index 22b8cef36..1dd5baf9c 100644 --- a/src/pretix/control/navigation.py +++ b/src/pretix/control/navigation.py @@ -434,6 +434,13 @@ def get_organizer_navigation(request): }), 'active': url.url_name.startswith('organizer.propert'), }, + { + 'label': _('E-mail'), + 'url': reverse('control:organizer.settings.mail', kwargs={ + 'organizer': request.organizer.slug, + }), + 'active': url.url_name == 'organizer.settings.mail', + }, { 'label': _('Webhooks'), 'url': reverse('control:organizer.webhooks', kwargs={ @@ -463,7 +470,46 @@ def get_organizer_navigation(request): 'active': 'organizer.giftcard' in url.url_name, 'icon': 'credit-card', }) - + if request.organizer.settings.customer_accounts: + children = [] + if 'can_manage_customers' in request.orgapermset: + children.append( + { + 'label': _('Customers'), + 'url': reverse('control:organizer.customers', kwargs={ + 'organizer': request.organizer.slug + }), + 'active': 'organizer.customer' in url.url_name, + } + ) + if 'can_change_organizer_settings' in request.orgapermset: + children.append( + { + 'label': _('SSO clients'), + 'url': reverse('control:organizer.ssoclients', kwargs={ + 'organizer': request.organizer.slug + }), + 'active': 'organizer.ssoclient' in url.url_name, + } + ) + children.append( + { + 'label': _('SSO providers'), + 'url': reverse('control:organizer.ssoproviders', kwargs={ + 'organizer': request.organizer.slug + }), + 'active': 'organizer.ssoprovider' in url.url_name, + } + ) + if children: + nav.append({ + 'label': _('Customer accounts'), + 'url': reverse('control:organizer.customers', kwargs={ + 'organizer': request.organizer.slug + }), + 'icon': 'user', + 'children': children, + }) if 'can_change_organizer_settings' in request.orgapermset: nav.append({ 'label': _('Devices'), diff --git a/src/pretix/control/templates/pretixcontrol/checkin/list_edit.html b/src/pretix/control/templates/pretixcontrol/checkin/list_edit.html index a313b97c8..b7d16d822 100644 --- a/src/pretix/control/templates/pretixcontrol/checkin/list_edit.html +++ b/src/pretix/control/templates/pretixcontrol/checkin/list_edit.html @@ -79,8 +79,14 @@

{% trans "Custom check-in rule" %}

- {% compress js %} + {% if DEBUG %} + + {% else %} + + + {% endif %} + {% compress js %} {% endcompress %} {% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/event/fragment_plugin_description.html b/src/pretix/control/templates/pretixcontrol/event/fragment_plugin_description.html new file mode 100644 index 000000000..588e87276 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/event/fragment_plugin_description.html @@ -0,0 +1,36 @@ +{% load i18n %} +{% if show_meta %} + {% if plugin.author %} +

+ {% blocktrans trimmed with a=plugin.author %} + by {{ a }} + {% endblocktrans %}

+ {% endif %} +{% endif %} +

{{ plugin.description|safe }}

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

+ + {% trans "This plugin needs to be enabled by a system administrator for your account." %} +

+{% endif %} +{% if plugin.app.compatibility_errors %} +
+ {% trans "This plugin cannot be enabled for the following reasons:" %} + +
+{% endif %} +{% if plugin.app.compatibility_warnings %} +
+ {% trans "This plugin reports the following problems:" %} + +
+{% endif %} diff --git a/src/pretix/control/templates/pretixcontrol/event/fragment_qr_dropdown.html b/src/pretix/control/templates/pretixcontrol/event/fragment_qr_dropdown.html new file mode 100644 index 000000000..e0d6c5bf5 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/event/fragment_qr_dropdown.html @@ -0,0 +1,27 @@ +{% load i18n %} + diff --git a/src/pretix/control/templates/pretixcontrol/event/mail.html b/src/pretix/control/templates/pretixcontrol/event/mail.html index 22caefe91..a8dbc39ae 100644 --- a/src/pretix/control/templates/pretixcontrol/event/mail.html +++ b/src/pretix/control/templates/pretixcontrol/event/mail.html @@ -1,6 +1,7 @@ {% extends "pretixcontrol/event/settings_base.html" %} {% load i18n %} {% load bootstrap3 %} +{% load hierarkey_form %} {% load static %} {% block inside %}

{% trans "E-mail settings" %}

@@ -11,11 +12,14 @@

{% trans "E-mail settings" %}

{% trans "General" %} + {% url "control:organizer.settings.mail" organizer=request.organizer.slug as org_url %} + {% propagated request.event org_url "mail_from" "mail_from_name" "mail_text_signature" "mail_bcc" %} + {% bootstrap_field form.mail_from layout="control" %} + {% bootstrap_field form.mail_from_name layout="control" %} + {% bootstrap_field form.mail_text_signature layout="control" %} + {% bootstrap_field form.mail_bcc layout="control" %} + {% endpropagated %} {% bootstrap_field form.mail_prefix layout="control" %} - {% bootstrap_field form.mail_from layout="control" %} - {% bootstrap_field form.mail_from_name layout="control" %} - {% bootstrap_field form.mail_text_signature layout="control" %} - {% bootstrap_field form.mail_bcc layout="control" %} {% bootstrap_field form.mail_attach_tickets layout="control" %} {% bootstrap_field form.mail_attach_ical layout="control" %} {% bootstrap_field form.mail_sales_channel_placed_paid layout="control" %} @@ -79,8 +83,10 @@

{% trans "E-mail settings" %}

- {% trans "SMTP settings" %} + {% trans "Email settings" %} {% bootstrap_field form.smtp_use_custom layout="control" %} + {% bootstrap_field form.email_vendor layout="control" %} + {% bootstrap_field form.send_grid_api_key layout="control" %} {% bootstrap_field form.smtp_host layout="control" %} {% bootstrap_field form.smtp_port layout="control" %} {% bootstrap_field form.smtp_username layout="control" %} diff --git a/src/pretix/control/templates/pretixcontrol/event/mail_settings_fragment.html b/src/pretix/control/templates/pretixcontrol/event/mail_settings_fragment.html index a816fa691..fc8d4604c 100644 --- a/src/pretix/control/templates/pretixcontrol/event/mail_settings_fragment.html +++ b/src/pretix/control/templates/pretixcontrol/event/mail_settings_fragment.html @@ -35,9 +35,15 @@

{% bootstrap_field field show_label=False form_group_class="" %}
- {% for l in request.event.settings.locales %} -
- {% endfor %} + {% if request.event %} + {% for l in request.event.settings.locales %} +
+ {% endfor %} + {% else %} + {% for l in request.organizer.settings.locales %} +
+ {% endfor %} + {% endif %}
diff --git a/src/pretix/control/templates/pretixcontrol/event/plugins.html b/src/pretix/control/templates/pretixcontrol/event/plugins.html index 428169da4..39ca03277 100644 --- a/src/pretix/control/templates/pretixcontrol/event/plugins.html +++ b/src/pretix/control/templates/pretixcontrol/event/plugins.html @@ -1,8 +1,15 @@ {% extends "pretixcontrol/event/settings_base.html" %} {% load i18n %} +{% load static %} {% load bootstrap3 %} {% block inside %} -

{% trans "Installed plugins" %}

+

{% trans "Available plugins" %}

+

+ {% blocktrans trimmed %} + On this page, you can choose plugins you want to enable for your event. Plugins might bring additional + software functionality, connect your event to third-party services, or apply other forms of customizations. + {% endblocktrans %} +

{% csrf_token %} {% if "success" in request.GET %} @@ -11,71 +18,71 @@

{% trans "Installed plugins" %}

{% endif %}
- {% for cat, catlabel, plist in plugins %} + {% for cat, catlabel, plist, has_pictures in plugins %}
{{ catlabel }} -
- - {% for plugin in plist %} - - - - - {% endfor %} -
- {{ plugin.name }} - {% if plugin.author %} -

- {% blocktrans trimmed with v=plugin.version a=plugin.author %} - Version {{ v }} by {{ a }} - {% endblocktrans %}

- {% else %} -

- {% blocktrans trimmed with v=plugin.version a=plugin.author %} - Version {{ v }} - {% endblocktrans %}

+
+ {% for plugin in plist %} +
+ {% if plugin.featured %} +
+
+ {% endif %} +
+ {% if plugin.featured or plugin.experimental %} +

+ {% if plugin.featured %} + + {% trans "Top recommendation" %} + {% endif %} + {% if plugin.experimental %} + + {% trans "Experimental feature" %} + {% endif %} +

{% endif %} -

{{ plugin.description }}

- {% if plugin.restricted and not request.user.is_staff %} - - {% trans "This plugin needs to be enabled by a system administrator for your event." %} - + {% if plugin.picture %} +

{% endif %} +

+ {{ plugin.name }} + {% if show_meta %} + {{ plugin.version }} + {% endif %} + {% if plugin.module in plugins_active %} + + + {% trans "Active" %} + + {% endif %} +

+ {% include "pretixcontrol/event/fragment_plugin_description.html" with plugin=plugin %} +
{% if plugin.app.compatibility_errors %} -
- {% trans "This plugin cannot be enabled for the following reasons:" %} -
    - {% for e in plugin.app.compatibility_errors %} -
  • {{ e }}
  • - {% endfor %} -
+
+ {% trans "Incompatible" %}
- {% endif %} - {% if plugin.app.compatibility_warnings %} -
- {% trans "This plugin reports the following problems:" %} -
    - {% for e in plugin.app.compatibility_warnings %} -
  • {{ e }}
  • - {% endfor %} -
+ {% elif plugin.restricted and plugin.module not in request.event.settings.allowed_restricted_plugins %} +
+ {% trans "Not available" %} +
+ {% elif plugin.module in plugins_active %} +
+
- {% endif %} -
- {% if plugin.app.compatibility_errors %} - - {% elif plugin.restricted and not staff_session %} - - {% elif plugin.module in plugins_active %} - {% else %} - +
+ +
{% endif %} -
+ {% if plugin.featured %} +
+
+ {% endif %} + + {% endfor %}
{% endfor %} diff --git a/src/pretix/control/templates/pretixcontrol/event/settings.html b/src/pretix/control/templates/pretixcontrol/event/settings.html index ded070e6a..2bafefa18 100644 --- a/src/pretix/control/templates/pretixcontrol/event/settings.html +++ b/src/pretix/control/templates/pretixcontrol/event/settings.html @@ -4,6 +4,7 @@ {% load static %} {% load hierarkey_form %} {% load formset_tags %} +{% block title %}{% trans "General settings" %}{% endblock %} {% block custom_header %} {{ block.super }} @@ -203,7 +204,7 @@

{% trans "Other settings" %}

{% bootstrap_field sform.logo_show_title layout="control" %} {% bootstrap_field sform.og_image layout="control" %} {% url "control:organizer.edit" organizer=request.organizer.slug as org_url %} - {% propagated request.event org_url "primary_color" "primary_font" "theme_color_success" "theme_color_danger" %} + {% propagated request.event org_url "primary_color" "primary_font" "theme_color_success" "theme_color_danger" "theme_round_borders" %} {% bootstrap_field sform.primary_color layout="control" %} {% bootstrap_field sform.theme_color_success layout="control" %} {% bootstrap_field sform.theme_color_danger layout="control" %} @@ -231,6 +232,72 @@

{% trans "Other settings" %}

{% bootstrap_field sform.show_variations_expanded layout="control" %} {% bootstrap_field sform.hide_sold_out layout="control" %} {% bootstrap_field sform.meta_noindex layout="control" %} +
+ +
+

+ {% blocktrans trimmed %} + These links will be shown in the footer of your ticket shop. You could + for example link your terms of service here. Your contact address, imprint, and privacy + policy will be linked automatically (if you configured them), so you do not need to add + them here. + {% endblocktrans %} +

+
+ {{ footer_links_formset.management_form }} + {% bootstrap_formset_errors footer_links_formset %} +
+ {% for form in footer_links_formset %} +
+
+ {{ form.id }} + {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} +
+
+ {% bootstrap_form_errors form %} + {% bootstrap_field form.label layout='inline' form_group_class="" %} +
+
+ {% bootstrap_field form.url layout='inline' form_group_class="" %} +
+
+ +
+
+ {% endfor %} +
+ +

+ +

+
+
+
{% if sform.frontpage_subevent_ordering %} {% bootstrap_field sform.frontpage_subevent_ordering layout="control" %} {% endif %} diff --git a/src/pretix/control/templates/pretixcontrol/global_settings.html b/src/pretix/control/templates/pretixcontrol/global_settings.html index c3b988d10..2824ef288 100644 --- a/src/pretix/control/templates/pretixcontrol/global_settings.html +++ b/src/pretix/control/templates/pretixcontrol/global_settings.html @@ -1,6 +1,11 @@ {% extends "pretixcontrol/global_settings_base.html" %} {% load i18n %} {% load bootstrap3 %} +{% load static %} + +{% block custom_header %} + +{% endblock %} {% block inner %} diff --git a/src/pretix/control/templates/pretixcontrol/global_update.html b/src/pretix/control/templates/pretixcontrol/global_update.html index db16153be..aa54ece35 100644 --- a/src/pretix/control/templates/pretixcontrol/global_update.html +++ b/src/pretix/control/templates/pretixcontrol/global_update.html @@ -31,7 +31,7 @@ {% elif gs.settings.update_check_result.error == "development" %} {% trans "This installation appears to be a development installation." %} {% endif %} - + {% csrf_token %}

diff --git a/src/pretix/control/templates/pretixcontrol/item/index.html b/src/pretix/control/templates/pretixcontrol/item/index.html index 453a2a645..5c0363094 100644 --- a/src/pretix/control/templates/pretixcontrol/item/index.html +++ b/src/pretix/control/templates/pretixcontrol/item/index.html @@ -116,7 +116,7 @@ {% bootstrap_field form.generate_tickets layout="control" %} {% bootstrap_field form.checkin_attention layout="control" %} -

+
{% trans "Additional settings" %} {% bootstrap_field form.issue_giftcard layout="control" %} {% bootstrap_field form.show_quota_left layout="control" %} diff --git a/src/pretix/control/templates/pretixcontrol/items/description_delete.html b/src/pretix/control/templates/pretixcontrol/items/description_delete.html new file mode 100644 index 000000000..c34bf08f4 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/items/description_delete.html @@ -0,0 +1,25 @@ +{% extends "pretixcontrol/items/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block title %}{% trans "Delete description" %}{% endblock %} +{% block inside %} +

{% trans "Delete description" %}

+ + {% csrf_token %} +

{% blocktrans %}Are you sure you want to delete the description {{ question }}?{% endblocktrans %}

+ {% if dependent|length > 0 %} +

{% blocktrans %}All answers to the description given by the buyers of the following products will be lost.{% endblocktrans %}

+ {% for item in dependent %} +
  • {{ item.name }}
  • + {% endfor %} + {% endif %} +
    + + {% trans "Cancel" %} + + +
    + +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/items/description_edit.html b/src/pretix/control/templates/pretixcontrol/items/description_edit.html new file mode 100644 index 000000000..aa91ad7e0 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/items/description_edit.html @@ -0,0 +1,38 @@ +{% extends "pretixcontrol/items/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% load formset_tags %} +{% load escapejson %} +{% block title %} + {% if question %} + {% blocktrans with name=question.question %}Description: {{ name }}{% endblocktrans %} + {% else %} + {% trans "Description" %} + {% endif %} +{% endblock %} +{% block inside %} + {% if question %} +

    {% blocktrans with name=question.question %}Description: {{ name }}{% endblocktrans %}

    + {% else %} +

    {% trans "Description" %}

    + {% endif %} +
    + {% csrf_token %} + {% bootstrap_form_errors form %} +
    +
    + {% bootstrap_field form.question layout="control" %} + {% bootstrap_field form.description layout="control" %} + + {% bootstrap_field form.items layout="control" %} +
    +
    +
    + +
    +
    +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/items/questions.html b/src/pretix/control/templates/pretixcontrol/items/questions.html index 410719d70..75d61bf95 100644 --- a/src/pretix/control/templates/pretixcontrol/items/questions.html +++ b/src/pretix/control/templates/pretixcontrol/items/questions.html @@ -13,6 +13,8 @@

    {% trans "Questions" %}

    {% trans "Create a new question" %} + {% trans "Create a text field" %} +

    @@ -34,7 +36,11 @@

    {% trans "Questions" %}

    diff --git a/src/pretix/control/templates/pretixcontrol/organizers/customer.html b/src/pretix/control/templates/pretixcontrol/organizers/customer.html new file mode 100644 index 000000000..97c2b0815 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/organizers/customer.html @@ -0,0 +1,163 @@ +{% extends "pretixcontrol/organizers/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% load money %} +{% block title %} + {% blocktrans trimmed with id=customer.identifier %} + Customer #{{ id }} + {% endblocktrans %} +{% endblock %} +{% block inner %} +

    + {% blocktrans trimmed with id=customer.identifier %} + Customer #{{ id }} + {% endblocktrans %} +

    +
    +
    +
    +
    +

    + {% trans "Details" %} +

    +
    +
    +
    +
    {% trans "Customer ID" %}
    +
    #{{ customer.identifier }}
    + {% if customer.provider %} +
    {% trans "SSO provider" %}
    +
    {{ customer.provider.name }}
    + {% endif %} + {% if customer.external_identifier %} +
    {% trans "External identifier" %}
    +
    {{ customer.external_identifier }}
    + {% endif %} +
    {% trans "Status" %}
    +
    + {% if not customer.is_active %} + {% trans "disabled" %} + {% elif not customer.is_verified %} + {% trans "not yet activated" %} + {% else %} + {% trans "active" %} + {% endif %} +
    +
    {% trans "E-mail" %}
    +
    {{ customer.email|default_if_none:"" }}
    +
    {% trans "Name" %}
    +
    {{ customer.name }}
    +
    {% trans "Locale" %}
    +
    {{ display_locale }}
    +
    {% trans "Registration date" %}
    +
    {{ customer.date_joined|date:"SHORT_DATETIME_FORMAT" }}
    +
    {% trans "Last login" %}
    +
    {% if customer.last_login %}{{ customer.last_login|date:"SHORT_DATETIME_FORMAT" }}{% else %} + –{% endif %}
    +
    + +
    +
    +
    +
    +

    + {% trans "Orders" %} +

    +
    +
    {% if q.pk %} - + {% if q.type == "DES" %} + + {% else %} + + {% endif %} {% endif %} {{ q.question }} {% if q.pk %} @@ -83,9 +89,15 @@

    {% trans "Questions" %}

    {% if q.pk %} - - - + {% if q.type == "DES" %} + + + + {% else %} + + + + {% endif %} {% else %} diff --git a/src/pretix/control/templates/pretixcontrol/order/index.html b/src/pretix/control/templates/pretixcontrol/order/index.html index 5d09ea9cc..c3ce122c7 100644 --- a/src/pretix/control/templates/pretixcontrol/order/index.html +++ b/src/pretix/control/templates/pretixcontrol/order/index.html @@ -182,7 +182,20 @@

    {% trans "Expiry date" %}
    {{ order.expires|date:"SHORT_DATETIME_FORMAT" }}
    {% endif %} -
    {% trans "User" %}
    + {% if request.organizer.settings.customer_accounts %} +
    {% trans "Customer account" %}
    +
    + {% if order.customer %} + + {{ order.customer.identifier }} – {{ order.customer.email }} + + {% endif %} + + + +
    + {% endif %} +
    {% trans "Contact email" %}
    {{ order.email|default_if_none:"" }} {% if order.email and order.email_known_to_work %} @@ -336,7 +349,7 @@

    {{ line.seat }} {% endif %} {% if line.voucher %} -
    {% trans "Voucher code used:" %} +
    {% trans "Voucher code used:" %} @@ -345,7 +358,7 @@

    {% endif %} {% if line.subevent %}
    - {{ line.subevent.name }} · {{ line.subevent.get_date_range_display }} + {{ line.subevent.name }} · {{ line.subevent.get_date_range_display }} {% if event.settings.show_times %} {{ line.subevent.date_from|date:"TIME_FORMAT" }} diff --git a/src/pretix/control/templates/pretixcontrol/orders/index.html b/src/pretix/control/templates/pretixcontrol/orders/index.html index 5a271e8b2..22e05e69f 100644 --- a/src/pretix/control/templates/pretixcontrol/orders/index.html +++ b/src/pretix/control/templates/pretixcontrol/orders/index.html @@ -113,7 +113,7 @@

    {% trans "Orders" %}

    -

    {% trans "Order paid / total" %} + {% trans "Order paid / total" %} {% trans "Positions" %}
    + + + + + + + + + + + + {% for o in orders %} + + + + + + + + + {% endfor %} + +
    {% trans "Order code" %}{% trans "Event" %}{% trans "Order date" %}{% trans "Order paid / total" %}{% trans "Positions" %}{% trans "Status" %}
    + + + {{ o.code }} + + + {% if o.testmode %} + {% trans "TEST MODE" %} + {% endif %} + + {{ o.event }} + + + {{ o.datetime|date:"SHORT_DATETIME_FORMAT" }} + {% if o.customer_id != customer.pk %} + + {% endif %} + + {% if o.has_cancellation_request %} + {% trans "CANCELLATION REQUESTED" %} + {% endif %} + {% if o.has_external_refund or o.has_pending_refund %} + {% trans "REFUND PENDING" %} + {% elif o.has_pending_refund %} + {% trans "REFUND PENDING" %} + {% endif %} + {% if o.is_overpaid %} + {% trans "OVERPAID" %} + {% elif o.is_underpaid %} + {% trans "UNDERPAID" %} + {% elif o.is_pending_with_full_payment %} + {% trans "FULLY PAID" %} + {% endif %} + {% if o.computed_payment_refund_sum == o.total or o.computed_payment_refund_sum == 0 %} + + {% endif %} + {{ o.computed_payment_refund_sum|money:o.event.currency }} / + {% if o.computed_payment_refund_sum == o.total or o.computed_payment_refund_sum == 0 %} + + {% endif %} + {{ o.total|money:o.event.currency }} + {% if o.status == "c" and o.icnt %} +
    + {% trans "INVOICE NOT CANCELED" %} + {% endif %} +
    {{ o.pcnt|default_if_none:"0" }}{% include "pretixcontrol/orders/fragment_order_status.html" with order=o %}
    + {% include "pretixcontrol/pagination.html" %} +
    + +
    +
    +
    +

    + {% trans "Customer history" %} +

    +
    + {% include "pretixcontrol/includes/logs.html" with obj=customer %} +
    +
    + +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/customer_anonymize.html b/src/pretix/control/templates/pretixcontrol/organizers/customer_anonymize.html new file mode 100644 index 000000000..e2e9da3de --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/organizers/customer_anonymize.html @@ -0,0 +1,43 @@ +{% extends "pretixcontrol/organizers/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block title %} + {% blocktrans trimmed with id=customer.identifier %} + Anonymize customer #{{ id }} + {% endblocktrans %} +{% endblock %} +{% block inner %} +

    + {% blocktrans trimmed with id=customer.identifier %} + Anonymize customer #{{ id }} + {% endblocktrans %} +

    +

    + {% trans "Are you sure you want to anonymize this customer account?" %} +

    + +
    + {% csrf_token %} +
    + + {% trans "Cancel" %} + + +
    +
    +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/customer_edit.html b/src/pretix/control/templates/pretixcontrol/organizers/customer_edit.html new file mode 100644 index 000000000..e3d2ceaa2 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/organizers/customer_edit.html @@ -0,0 +1,32 @@ +{% extends "pretixcontrol/organizers/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block title %} + {% if not customer.id %} + {% trans "New customer" %} + {% else %} + {% blocktrans trimmed with id=customer.identifier %} + Customer #{{ id }} + {% endblocktrans %} + {% endif %} +{% endblock %} +{% block inner %} +

    + {% if not customer.id %} + {% trans "New customer" %} + {% else %} + {% blocktrans trimmed with id=customer.identifier %} + Customer #{{ id }} + {% endblocktrans %} + {% endif %} +

    +
    + {% csrf_token %} + {% bootstrap_form form layout="control" %} +
    + +
    +
    +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/customers.html b/src/pretix/control/templates/pretixcontrol/organizers/customers.html new file mode 100644 index 000000000..25ab062a6 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/organizers/customers.html @@ -0,0 +1,80 @@ +{% extends "pretixcontrol/organizers/base.html" %} +{% load i18n %} +{% load urlreplace %} +{% load bootstrap3 %} +{% load money %} +{% block title %}{% trans "Customers" %}{% endblock %} +{% block inner %} +

    + {% trans "Customers" %} +

    + {% if customers|length == 0 and not filter_form.filtered %} +
    +

    + {% blocktrans trimmed %} + No customer accounts have been created yet. + {% endblocktrans %} +

    +
    + {% else %} +
    +
    + {% bootstrap_field filter_form.query layout='inline' %} +
    +
    + +
    +
    +
    + + + + + + + + + + + {% for c in customers %} + + + + + + + {% endfor %} + +
    {% trans "Customer ID" %} + + + {% trans "Email" %} + + {% trans "Name" %} + +
    + + {% if not c.is_active %}{% endif %} + #{{ c.identifier }} + {% if not c.is_active %}{% endif %} + + + {% if not c.is_verified %}{% endif %} + {{ c.email|default_if_none:"" }} + {% if not c.is_verified %}{% endif %} + {{ c.name }} + + + +
    +
    + {% include "pretixcontrol/pagination.html" %} + {% endif %} +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/edit.html b/src/pretix/control/templates/pretixcontrol/organizers/edit.html index cbc09cd11..627fd2c5d 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/edit.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/edit.html @@ -45,11 +45,83 @@

    {% bootstrap_field sform.event_list_type layout="control" %} {% bootstrap_field sform.event_list_availability layout="control" %} {% bootstrap_field sform.organizer_link_back layout="control" %} +
    + +
    +

    + {% blocktrans trimmed %} + These links will be shown in the footer of your ticket shop. You could + for example link your terms of service here. Your contact address, imprint, and privacy + policy will be linked automatically (if you configured them), so you do not need to add + them here. + {% endblocktrans %} +

    +

    + {% blocktrans trimmed %} + The links you configure here will also be shown on all of your events. + {% endblocktrans %} +

    +
    + {{ footer_links_formset.management_form }} + {% bootstrap_formset_errors footer_links_formset %} +
    + {% for form in footer_links_formset %} +
    +
    + {{ form.id }} + {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} +
    +
    + {% bootstrap_form_errors form %} + {% bootstrap_field form.label layout='inline' form_group_class="" %} +
    +
    + {% bootstrap_field form.url layout='inline' form_group_class="" %} +
    +
    + +
    +
    + {% endfor %} +
    + +

    + +

    +
    +
    +

    {% trans "Localization" %} {% bootstrap_field sform.locales layout="control" %} {% bootstrap_field sform.region layout="control" %} + {% bootstrap_field sform.timezone layout="control" %}
    {% trans "Shop design" %} @@ -72,6 +144,17 @@

    {% bootstrap_field sform.giftcard_expiry_years layout="control" %} {% bootstrap_field sform.giftcard_length layout="control" %}

    +
    + {% trans "Customer accounts" %} + {% bootstrap_field sform.customer_accounts layout="control" %} + {% bootstrap_field sform.customer_accounts_native layout="control" %} + {% bootstrap_field sform.name_scheme layout="control" %} + {% bootstrap_field sform.name_scheme_titles layout="control" %} +
    +
    + {% trans "Privacy" %} + {% bootstrap_field sform.privacy_policy layout="control" %} +
    diff --git a/src/pretix/control/templates/pretixcontrol/organizers/mail.html b/src/pretix/control/templates/pretixcontrol/organizers/mail.html new file mode 100644 index 000000000..b8839b669 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/organizers/mail.html @@ -0,0 +1,58 @@ +{% extends "pretixcontrol/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% load formset_tags %} +{% block custom_header %} + {{ block.super }} + +{% endblock %} +{% block title %}{% trans "Organizer" %}{% endblock %} +{% block content %} +

    {% trans "E-mail settings" %}

    + +
    + {% csrf_token %} + {% bootstrap_form_errors form %} +
    +
    + {% trans "General" %} + {% bootstrap_field form.mail_from layout="control" %} + {% bootstrap_field form.mail_from_name layout="control" %} + {% bootstrap_field form.mail_text_signature layout="control" %} + {% bootstrap_field form.mail_bcc layout="control" %} +
    +
    + {% trans "E-mail content" %} +
    + {% blocktrans asvar title_customer_registration %}Customer account registration{% endblocktrans %} + {% include "pretixcontrol/event/mail_settings_fragment.html" with pid="customer_registration" title=title_customer_registration items="mail_subject_customer_registration,mail_text_customer_registration" %} + + {% blocktrans asvar title_email_change %}Customer account email change{% endblocktrans %} + {% include "pretixcontrol/event/mail_settings_fragment.html" with pid="email_change" title=title_email_change items="mail_subject_customer_email_change,mail_text_customer_email_change" %} + + {% blocktrans asvar title_reset %}Customer account password reset{% endblocktrans %} + {% include "pretixcontrol/event/mail_settings_fragment.html" with pid="reset" title=title_reset items="mail_subject_customer_reset,mail_text_customer_reset" %} +
    +
    +
    + {% trans "SMTP settings" %} + {% bootstrap_field form.smtp_use_custom layout="control" %} + {% bootstrap_field form.smtp_host layout="control" %} + {% bootstrap_field form.smtp_port layout="control" %} + {% bootstrap_field form.smtp_username layout="control" %} + {% bootstrap_field form.smtp_password layout="control" %} + {% bootstrap_field form.smtp_use_tls layout="control" %} + {% bootstrap_field form.smtp_use_ssl layout="control" %} +
    +
    +
    + + +
    +
    +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/property_delete.html b/src/pretix/control/templates/pretixcontrol/organizers/property_delete.html index 58f7b9c9e..c8950f829 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/property_delete.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/property_delete.html @@ -2,7 +2,7 @@ {% load i18n %} {% load bootstrap3 %} {% block inner %} -

    {% trans "Delete property:" %} {{ gate.name }}

    +

    {% trans "Delete property:" %} {{ type.name }}

    {% csrf_token %}

    {% blocktrans %}Are you sure you want to delete the property?{% endblocktrans %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/property_edit.html b/src/pretix/control/templates/pretixcontrol/organizers/property_edit.html index f4f2ffc84..e3d93db05 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/property_edit.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/property_edit.html @@ -2,7 +2,7 @@ {% load i18n %} {% load bootstrap3 %} {% block inner %} - {% if gate %} + {% if property %}

    {% trans "Property:" %} {{ property.name }}

    {% else %}

    {% trans "Create a new property" %}

    diff --git a/src/pretix/control/templates/pretixcontrol/organizers/ssoclient_delete.html b/src/pretix/control/templates/pretixcontrol/organizers/ssoclient_delete.html new file mode 100644 index 000000000..8be5bbf52 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/organizers/ssoclient_delete.html @@ -0,0 +1,25 @@ +{% extends "pretixcontrol/organizers/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block inner %} +

    {% trans "Delete SSO client:" %} {{ client.name }}

    + + {% csrf_token %} + {% if is_allowed %} +

    {% blocktrans %}Are you sure you want to delete this SSO client?{% endblocktrans %} + {% else %} +

    {% blocktrans %}This SSO client cannot be deleted since it has already been used.{% endblocktrans %} + {% endif %} +

    +
    + + {% trans "Cancel" %} + + {% if is_allowed %} + + {% endif %} +
    +
    +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html b/src/pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html new file mode 100644 index 000000000..e1265ced3 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html @@ -0,0 +1,20 @@ +{% extends "pretixcontrol/organizers/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block inner %} + {% if client %} +

    {% trans "SSO client:" %} {{ client.name }}

    + {% else %} +

    {% trans "Create a new SSO client" %}

    + {% endif %} +
    + {% csrf_token %} + {% bootstrap_form form layout="control" %} +
    + +
    + +
    +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/ssoclients.html b/src/pretix/control/templates/pretixcontrol/organizers/ssoclients.html new file mode 100644 index 000000000..b9eec0417 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/organizers/ssoclients.html @@ -0,0 +1,44 @@ +{% extends "pretixcontrol/organizers/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block title %}{% trans "SSO clients" %}{% endblock %} +{% block inner %} +

    {% trans "SSO clients" %}

    +

    + {% blocktrans trimmed %} + You can allow your customers to log into other systems using their customer account credentials by setting up + your other systems as a Single-Sign-On (SSO) client based on OpenID Connect. + {% endblocktrans %} +

    + + + {% trans "Create a new SSO client" %} + + + + + + + + + + {% for c in clients %} + + + + + {% endfor %} + +
    {% trans "Name" %}
    + + {% if not c.is_active %}{% endif %} + {{ c.name }} + {% if not c.is_active %}{% endif %} + + + + +
    +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html b/src/pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html new file mode 100644 index 000000000..d94197e00 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/organizers/ssoprovider_delete.html @@ -0,0 +1,25 @@ +{% extends "pretixcontrol/organizers/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block inner %} +

    {% trans "Delete SSO provider:" %} {{ provider.name }}

    +
    + {% csrf_token %} + {% if is_allowed %} +

    {% blocktrans %}Are you sure you want to delete this SSO provider?{% endblocktrans %} + {% else %} +

    {% blocktrans %}This SSO provider cannot be deleted since it has already been used.{% endblocktrans %} + {% endif %} +

    +
    + + {% trans "Cancel" %} + + {% if is_allowed %} + + {% endif %} +
    +
    +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html b/src/pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html new file mode 100644 index 000000000..1e9869107 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html @@ -0,0 +1,33 @@ +{% extends "pretixcontrol/organizers/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block inner %} + {% if provider %} +

    {% trans "SSO provider:" %} {{ provider.name }}

    + {% else %} +

    {% trans "Create a new SSO provider" %}

    + {% endif %} +
    + {% csrf_token %} + {% bootstrap_form form layout="control" %} + {% if redirect_uri %} +
    + +
    + +
    +
    + {% endif %} +
    + +
    + +
    +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/ssoproviders.html b/src/pretix/control/templates/pretixcontrol/organizers/ssoproviders.html new file mode 100644 index 000000000..248c347a1 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/organizers/ssoproviders.html @@ -0,0 +1,44 @@ +{% extends "pretixcontrol/organizers/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block title %}{% trans "SSO providers" %}{% endblock %} +{% block inner %} +

    {% trans "SSO providers" %}

    +

    + {% blocktrans trimmed %} + You can connect existing Single-Sign-On (SSO) providers to allow your customers to log in using your own + account system. + {% endblocktrans %} +

    + + + {% trans "Create a new SSO provider" %} + + + + + + + + + + {% for p in providers %} + + + + + {% endfor %} + +
    {% trans "Name" %}
    + + {% if not p.is_active %}{% endif %} + {{ p.name }} + {% if not p.is_active %}{% endif %} + + + + +
    +{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/organizers/team_edit.html b/src/pretix/control/templates/pretixcontrol/organizers/team_edit.html index bd6d25c4b..601735c9e 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/team_edit.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/team_edit.html @@ -23,6 +23,7 @@

    {% trans "Create a new team" %}

    {% trans "Organizer permissions" %} {% bootstrap_field form.can_create_events layout="control" %} {% bootstrap_field form.can_manage_gift_cards layout="control" %} + {% bootstrap_field form.can_manage_customers layout="control" %} {% bootstrap_field form.can_change_teams layout="control" %} {% bootstrap_field form.can_change_organizer_settings layout="control" %}
    diff --git a/src/pretix/control/templatetags/hierarkey_form.py b/src/pretix/control/templatetags/hierarkey_form.py index 8b1b11db8..4f2682f0b 100644 --- a/src/pretix/control/templatetags/hierarkey_form.py +++ b/src/pretix/control/templatetags/hierarkey_form.py @@ -21,27 +21,30 @@ def render(self, context): if all([fn not in event.settings._cache() for fn in self.field_names]): body = """ -
    - -
    - {body} -
    -
    -

    {text_inh}

    -

    - {text_expl} -

    - - - {text_orga} +

    + {text_inh} +

    +
    +
    + {text_expl}
    +
    + {text_orga}
    +
    + {body} +
    """.format( body=body, - text_inh=_("Organizer-level settings") if isinstance(event, Event) else _('Site-level settings'), + text_inh=_("Currently set on organizer level") if isinstance(event, Event) else _('Currently set ' + 'on global level'), fnames=','.join(self.field_names), text_expl=_( 'These settings are currently set on organizer level. This way, you can easily change them for ' @@ -52,8 +55,8 @@ def render(self, context): 'all organizers at the same time. You can either go to the global settings to change them ' 'or decouple them from the global settings to change them for this event individually.' ), - text_unlink=_('Change only for this event') if isinstance(event, Event) else _('Change only for this organizer'), - text_orga=_('Change for all events') if isinstance(event, Event) else _('Change for all organizers'), + text_unlink=_('Unlock'), + text_orga=_('Go to organizer settings') if isinstance(event, Event) else _('Go to global settings'), url=url ) diff --git a/src/pretix/control/urls.py b/src/pretix/control/urls.py index 7964dc88e..42101a78d 100644 --- a/src/pretix/control/urls.py +++ b/src/pretix/control/urls.py @@ -5,7 +5,7 @@ from pretix.control.views import ( auth, checkin, dashboards, event, geo, global_settings, item, main, oauth, orderimport, orders, organizer, pdf, search, shredder, subevents, - typeahead, user, users, vouchers, waitinglist, + typeahead, user, users, vouchers, waitinglist, organizer_views ) urlpatterns = [ @@ -70,13 +70,17 @@ name='user.settings.2fa.confirm.webauthn'), url(r'^settings/2fa/(?P[^/]+)/(?P[0-9]+)/delete', user.User2FADeviceDeleteView.as_view(), name='user.settings.2fa.delete'), - url(r'^organizers/$', organizer.OrganizerList.as_view(), name='organizers'), - url(r'^organizers/add$', organizer.OrganizerCreate.as_view(), name='organizers.add'), + url(r'^organizers/$', organizer_views.organizer_view.OrganizerList.as_view(), name='organizers'), + url(r'^organizers/add$', organizer_views.organizer_view.OrganizerCreate.as_view(), name='organizers.add'), url(r'^organizers/select2$', typeahead.organizer_select2, name='organizers.select2'), - url(r'^organizer/(?P[^/]+)/$', organizer.OrganizerDetail.as_view(), name='organizer'), - url(r'^organizer/(?P[^/]+)/edit$', organizer.OrganizerUpdate.as_view(), name='organizer.edit'), - url(r'^organizer/(?P[^/]+)/delete$', organizer.OrganizerDelete.as_view(), name='organizer.delete'), - url(r'^organizer/(?P[^/]+)/settings/display$', organizer.OrganizerDisplaySettings.as_view(), + url(r'^organizer/(?P[^/]+)/$', organizer_views.organizer_view.OrganizerDetail.as_view(), name='organizer'), + url(r'^organizer/(?P[^/]+)/edit$', organizer_views.organizer_view.OrganizerUpdate.as_view(), name='organizer.edit'), + url(r'^organizer/(?P[^/]+)/settings/email$', + organizer_views.organizer_view.OrganizerMailSettings.as_view(), name='organizer.settings.mail'), + url(r'^organizer/(?P[^/]+)/settings/email/preview$', + organizer_views.MailSettingsPreview.as_view(), name='organizer.settings.mail.preview'), + url(r'^organizer/(?P[^/]+)/delete$', organizer_views.organizer_view.OrganizerDelete.as_view(), name='organizer.delete'), + url(r'^organizer/(?P[^/]+)/settings/display$', organizer_views.organizer_view.OrganizerDisplaySettings.as_view(), name='organizer.display'), url(r'^organizer/(?P[^/]+)/properties$', organizer.EventMetaPropertyListView.as_view(), name='organizer.properties'), url(r'^organizer/(?P[^/]+)/property/add$', organizer.EventMetaPropertyCreateView.as_view(), @@ -85,42 +89,72 @@ name='organizer.property.edit'), url(r'^organizer/(?P[^/]+)/property/(?P[^/]+)/delete$', organizer.EventMetaPropertyDeleteView.as_view(), name='organizer.property.delete'), - url(r'^organizer/(?P[^/]+)/giftcards$', organizer.GiftCardListView.as_view(), name='organizer.giftcards'), - url(r'^organizer/(?P[^/]+)/giftcard/add$', organizer.GiftCardCreateView.as_view(), name='organizer.giftcard.add'), - url(r'^organizer/(?P[^/]+)/giftcard/(?P[^/]+)/$', organizer.GiftCardDetailView.as_view(), name='organizer.giftcard'), - url(r'^organizer/(?P[^/]+)/giftcard/(?P[^/]+)/edit$', organizer.GiftCardUpdateView.as_view(), + url(r'^organizer/(?P[^/]+)/customers$', organizer_views.customer_view.CustomerListView.as_view(), + name='organizer.customers'), + url(r'^organizer/(?P[^/]+)/customers/select2$', typeahead.customer_select2, + name='organizer.customers.select2'), + url(r'^organizer/(?P[^/]+)/customer/(?P[^/]+)/$', + organizer_views.customer_view.CustomerDetailView.as_view(), name='organizer.customer'), + url(r'^organizer/(?P[^/]+)/customer/(?P[^/]+)/edit$', + organizer_views.customer_view.CustomerUpdateView.as_view(), name='organizer.customer.edit'), + url(r'^organizer/(?P[^/]+)/customer/(?P[^/]+)/anonymize$', + organizer_views.customer_view.CustomerAnonymizeView.as_view(), name='organizer.customer.anonymize'), + url(r'^organizer/(?P[^/]+)/ssoproviders$', organizer_views.sso_provider_view.SSOProviderListView.as_view(), + name='organizer.ssoproviders'), + url(r'^organizer/(?P[^/]+)/ssoprovider/add$', organizer_views.sso_provider_view.SSOProviderCreateView.as_view(), + name='organizer.ssoprovider.add'), + url(r'^organizer/(?P[^/]+)/ssoprovider/(?P[^/]+)/edit$', + organizer_views.sso_provider_view.SSOProviderUpdateView.as_view(), + name='organizer.ssoprovider.edit'), + url(r'^organizer/(?P[^/]+)/ssoprovider/(?P[^/]+)/delete$', + organizer_views.sso_provider_view.SSOProviderDeleteView.as_view(), + name='organizer.ssoprovider.delete'), + url(r'^organizer/(?P[^/]+)/ssoclients$', organizer_views.sso_provider_view.SSOClientListView.as_view(), + name='organizer.ssoclients'), + url(r'^organizer/(?P[^/]+)/ssoclient/add$', organizer_views.sso_provider_view.SSOClientCreateView.as_view(), + name='organizer.ssoclient.add'), + url(r'^organizer/(?P[^/]+)/ssoclient/(?P[^/]+)/edit$', + organizer_views.sso_provider_view.SSOClientUpdateView.as_view(), + name='organizer.ssoclient.edit'), + url(r'^organizer/(?P[^/]+)/ssoclient/(?P[^/]+)/delete$', + organizer_views.sso_provider_view.SSOClientDeleteView.as_view(), + name='organizer.ssoclient.delete'), + url(r'^organizer/(?P[^/]+)/giftcards$', organizer_views.gift_card_view.GiftCardListView.as_view(), name='organizer.giftcards'), + url(r'^organizer/(?P[^/]+)/giftcard/add$', organizer_views.gift_card_view.GiftCardCreateView.as_view(), name='organizer.giftcard.add'), + url(r'^organizer/(?P[^/]+)/giftcard/(?P[^/]+)/$', organizer_views.gift_card_view.GiftCardDetailView.as_view(), name='organizer.giftcard'), + url(r'^organizer/(?P[^/]+)/giftcard/(?P[^/]+)/edit$', organizer_views.gift_card_view.GiftCardUpdateView.as_view(), name='organizer.giftcard.edit'), - url(r'^organizer/(?P[^/]+)/webhooks$', organizer.WebHookListView.as_view(), name='organizer.webhooks'), - url(r'^organizer/(?P[^/]+)/webhook/add$', organizer.WebHookCreateView.as_view(), + url(r'^organizer/(?P[^/]+)/webhooks$', organizer_views.web_hook_view.WebHookListView.as_view(), name='organizer.webhooks'), + url(r'^organizer/(?P[^/]+)/webhook/add$', organizer_views.web_hook_view.WebHookCreateView.as_view(), name='organizer.webhook.add'), - url(r'^organizer/(?P[^/]+)/webhook/(?P[^/]+)/edit$', organizer.WebHookUpdateView.as_view(), + url(r'^organizer/(?P[^/]+)/webhook/(?P[^/]+)/edit$', organizer_views.web_hook_view.WebHookUpdateView.as_view(), name='organizer.webhook.edit'), - url(r'^organizer/(?P[^/]+)/webhook/(?P[^/]+)/logs$', organizer.WebHookLogsView.as_view(), + url(r'^organizer/(?P[^/]+)/webhook/(?P[^/]+)/logs$', organizer_views.web_hook_view.WebHookLogsView.as_view(), name='organizer.webhook.logs'), - url(r'^organizer/(?P[^/]+)/devices$', organizer.DeviceListView.as_view(), name='organizer.devices'), - url(r'^organizer/(?P[^/]+)/device/add$', organizer.DeviceCreateView.as_view(), + url(r'^organizer/(?P[^/]+)/devices$', organizer_views.device_view.DeviceListView.as_view(), name='organizer.devices'), + url(r'^organizer/(?P[^/]+)/device/add$', organizer_views.device_view.DeviceCreateView.as_view(), name='organizer.device.add'), - url(r'^organizer/(?P[^/]+)/device/(?P[^/]+)/edit$', organizer.DeviceUpdateView.as_view(), + url(r'^organizer/(?P[^/]+)/device/(?P[^/]+)/edit$', organizer_views.device_view.DeviceUpdateView.as_view(), name='organizer.device.edit'), - url(r'^organizer/(?P[^/]+)/device/(?P[^/]+)/connect$', organizer.DeviceConnectView.as_view(), + url(r'^organizer/(?P[^/]+)/device/(?P[^/]+)/connect$', organizer_views.device_view.DeviceConnectView.as_view(), name='organizer.device.connect'), - url(r'^organizer/(?P[^/]+)/device/(?P[^/]+)/revoke$', organizer.DeviceRevokeView.as_view(), + url(r'^organizer/(?P[^/]+)/device/(?P[^/]+)/revoke$', organizer_views.device_view.DeviceRevokeView.as_view(), name='organizer.device.revoke'), - url(r'^organizer/(?P[^/]+)/device/(?P[^/]+)/logs$', organizer.DeviceLogView.as_view(), + url(r'^organizer/(?P[^/]+)/device/(?P[^/]+)/logs$', organizer_views.device_view.DeviceLogView.as_view(), name='organizer.device.logs'), - url(r'^organizer/(?P[^/]+)/gates$', organizer.GateListView.as_view(), name='organizer.gates'), - url(r'^organizer/(?P[^/]+)/gate/add$', organizer.GateCreateView.as_view(), name='organizer.gate.add'), - url(r'^organizer/(?P[^/]+)/gate/(?P[^/]+)/edit$', organizer.GateUpdateView.as_view(), + url(r'^organizer/(?P[^/]+)/gates$', organizer_views.gate_view.GateListView.as_view(), name='organizer.gates'), + url(r'^organizer/(?P[^/]+)/gate/add$', organizer_views.gate_view.GateCreateView.as_view(), name='organizer.gate.add'), + url(r'^organizer/(?P[^/]+)/gate/(?P[^/]+)/edit$', organizer_views.gate_view.GateUpdateView.as_view(), name='organizer.gate.edit'), - url(r'^organizer/(?P[^/]+)/gate/(?P[^/]+)/delete$', organizer.GateDeleteView.as_view(), + url(r'^organizer/(?P[^/]+)/gate/(?P[^/]+)/delete$', organizer_views.gate_view.GateDeleteView.as_view(), name='organizer.gate.delete'), - url(r'^organizer/(?P[^/]+)/teams$', organizer.TeamListView.as_view(), name='organizer.teams'), - url(r'^organizer/(?P[^/]+)/team/add$', organizer.TeamCreateView.as_view(), name='organizer.team.add'), - url(r'^organizer/(?P[^/]+)/team/(?P[^/]+)/$', organizer.TeamMemberView.as_view(), + url(r'^organizer/(?P[^/]+)/teams$', organizer_views.team_view.TeamListView.as_view(), name='organizer.teams'), + url(r'^organizer/(?P[^/]+)/team/add$', organizer_views.team_view.TeamCreateView.as_view(), name='organizer.team.add'), + url(r'^organizer/(?P[^/]+)/team/(?P[^/]+)/$', organizer_views.team_view.TeamMemberView.as_view(), name='organizer.team'), - url(r'^organizer/(?P[^/]+)/team/(?P[^/]+)/edit$', organizer.TeamUpdateView.as_view(), + url(r'^organizer/(?P[^/]+)/team/(?P[^/]+)/edit$', organizer_views.team_view.TeamUpdateView.as_view(), name='organizer.team.edit'), - url(r'^organizer/(?P[^/]+)/team/(?P[^/]+)/delete$', organizer.TeamDeleteView.as_view(), + url(r'^organizer/(?P[^/]+)/team/(?P[^/]+)/delete$', organizer_views.team_view.TeamDeleteView.as_view(), name='organizer.team.delete'), url(r'^organizer/(?P[^/]+)/slugrng', main.SlugRNG.as_view(), name='events.add.slugrng'), url(r'^organizer/(?P[^/]+)/logs', organizer.LogView.as_view(), name='organizer.log'), @@ -135,6 +169,7 @@ url(r'^event/(?P[^/]+)/(?P[^/]+)/', include([ url(r'^$', dashboards.event_index, name='event.index'), url(r'^widgets.json$', dashboards.event_index_widgets_lazy, name='event.index.widgets'), + url(r'^qrcode.(?P(png|jpeg|gif|svg))$', event.EventQRCode.as_view(), name='event.qrcode'), url(r'^live/$', event.EventLive.as_view(), name='event.live'), url(r'^logs/$', event.EventLog.as_view(), name='event.log'), url(r'^delete/$', event.EventDelete.as_view(), name='event.delete'), @@ -204,6 +239,9 @@ url(r'^questions/(?P\d+)/change$', item.QuestionUpdate.as_view(), name='event.items.questions.edit'), url(r'^questions/add$', item.QuestionCreate.as_view(), name='event.items.questions.add'), + url(r'^descriptions/add$', item.DescriptionCreate.as_view(), name='event.items.descriptions.add'), + url(r'^descriptions/(?P\d+)/change$', item.DescriptionUpdate.as_view(), name='event.items.descriptions.edit'), + url(r'^descriptions/(?P\d+)/delete$', item.QuestionDelete.as_view(), name='event.items.descriptions.delete'), url(r'^quotas/$', item.QuotaList.as_view(), name='event.items.quotas'), url(r'^quotas/(?P\d+)/$', item.QuotaView.as_view(), name='event.items.quotas.show'), url(r'^quotas/select$', typeahead.quotas_select2, name='event.items.quotas.select2'), diff --git a/src/pretix/control/views/event.py b/src/pretix/control/views/event.py index 7ccff3965..b3e69036a 100644 --- a/src/pretix/control/views/event.py +++ b/src/pretix/control/views/event.py @@ -3,13 +3,18 @@ import re from collections import OrderedDict from decimal import Decimal +from io import BytesIO from itertools import groupby -from urllib.parse import urlsplit +from urllib.parse import urlsplit, urlparse +import qrcode +import qrcode.image.svg from django.conf import settings from django.contrib import messages from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import PermissionDenied from django.core.files import File +from django.utils.http import url_has_allowed_host_and_scheme from django.db import transaction from django.db.models import ProtectedError from django.forms import inlineformset_factory @@ -40,7 +45,7 @@ from pretix.base.signals import register_ticket_outputs from pretix.base.templatetags.rich_text import markdown_compile_email from pretix.control.forms.event import ( - CancelSettingsForm, CommentForm, ConfirmTextFormset, EventDeleteForm, + CancelSettingsForm, CommentForm, ConfirmTextFormset, EventDeleteForm, EventFooterLinkFormset, EventMetaValueForm, EventSettingsForm, EventUpdateForm, InvoiceSettingsForm, ItemMetaPropertyForm, MailSettingsForm, PaymentSettingsForm, ProviderForm, QuickSetupForm, @@ -50,7 +55,7 @@ from pretix.control.permissions import EventPermissionRequiredMixin from pretix.control.views.user import RecentAuthenticationRequiredMixin from pretix.helpers.database import rolledback_transaction -from pretix.multidomain.urlreverse import get_event_domain +from pretix.multidomain.urlreverse import get_event_domain, build_absolute_uri from pretix.plugins.stripe.payment import StripeSettingsHolder from pretix.presale.style import regenerate_css @@ -151,6 +156,7 @@ def get_context_data(self, *args, **kwargs) -> dict: context['meta_forms'] = self.meta_forms context['item_meta_property_formset'] = self.item_meta_property_formset context['confirm_texts_formset'] = self.confirm_texts_formset + context['footer_links_formset'] = self.footer_links_formset return context @transaction.atomic @@ -160,6 +166,7 @@ def form_valid(self, form): self.save_meta() self.save_item_meta_property_formset(self.object) self.save_confirm_texts_formset(self.object) + self.save_footer_links_formset(self.object) change_css = False if self.sform.has_changed() or self.confirm_texts_formset.has_changed(): @@ -169,6 +176,10 @@ def form_valid(self, form): self.request.event.log_action('pretix.event.settings', user=self.request.user, data=data) if any(p in self.sform.changed_data for p in SETTINGS_AFFECTING_CSS): change_css = True + if self.footer_links_formset.has_changed(): + self.request.event.log_action('eventyay.event.footerlinks.changed', user=self.request.user, data={ + 'data': self.footer_links_formset.cleaned_data + }) if form.has_changed(): self.request.event.log_action('pretix.event.changed', user=self.request.user, data={ k: (form.cleaned_data.get(k).name @@ -203,7 +214,8 @@ def get_form_kwargs(self): def post(self, request, *args, **kwargs): form = self.get_form() if form.is_valid() and self.sform.is_valid() and all([f.is_valid() for f in self.meta_forms]) and \ - self.item_meta_property_formset.is_valid() and self.confirm_texts_formset.is_valid(): + self.item_meta_property_formset.is_valid() and self.confirm_texts_formset.is_valid() and \ + self.footer_links_formset.is_valid(): # reset timezone zone = timezone(self.sform.cleaned_data['timezone']) event = form.instance @@ -257,10 +269,20 @@ def confirm_texts_formset(self): def save_confirm_texts_formset(self, obj): obj.settings.confirm_texts = LazyI18nStringList( form_data['text'].data - for form_data in sorted(self.confirm_texts_formset.cleaned_data, key=operator.itemgetter("ORDER")) - if not form_data.get("DELETE", False) + for form_data in sorted((data for data in self.confirm_texts_formset.cleaned_data if data), key=operator.itemgetter("ORDER")) + if form_data and not form_data.get("DELETE", False) ) + @cached_property + def footer_links_formset(self): + return EventFooterLinkFormset(self.request.POST if self.request.method == "POST" else None, + event=self.object, + prefix="footer-links", + instance=self.object) + + def save_footer_links_formset(self, obj): + self.footer_links_formset.save() + class EventPlugins(EventSettingsViewMixin, EventPermissionRequiredMixin, TemplateView, SingleObjectMixin): model = Event @@ -293,15 +315,25 @@ def get_context_data(self, *args, **kwargs) -> dict: 'FORMAT': _('Output and export formats'), 'API': _('API features'), } + plugins_grouped = groupby( + sorted( + plugins, + key=lambda p: ( + str(getattr(p, 'category', _('Other'))), + (0 if getattr(p, 'featured', False) else 1), + str(p.name).lower().replace('pretix ', '') + ), + ), + lambda p: str(getattr(p, 'category', _('Other'))) + ) + plugins_grouped = [(c, list(plist)) for c, plist in plugins_grouped] context['plugins'] = sorted([ - (c, labels.get(c, c), list(plist)) + (c, labels.get(c, c), plist, any(getattr(p, 'picture', None) for p in plist)) for c, plist - in groupby( - sorted(plugins, key=lambda p: str(getattr(p, 'category', _('Other')))), - lambda p: str(getattr(p, 'category', _('Other'))) - ) + 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 def get(self, request, *args, **kwargs): @@ -1437,3 +1469,85 @@ def formset(self): }, ] if self.request.method != "POST" else [] ) + + +class EventQRCode(EventPermissionRequiredMixin, View): + """ + View to generate QR codes for event URLs. This class requires event-specific + permissions and can generate QR codes in various formats (SVG, JPEG, PNG, GIF). + + Attributes: + permission (str): Required permissions for accessing this view. + """ + permission = None + + def get(self, request, *args, filetype, **kwargs): + """ + Handle GET requests to generate a QR code. + """ + # Build the base URL for the event + url = build_absolute_uri(request.event, 'presale:event.index') + + # Check if a custom URL is provided and validate it + custom_url = request.GET.get("url") + if custom_url: + if url_has_allowed_host_and_scheme(custom_url, allowed_hosts=[urlparse(url).netloc]): + url = custom_url + else: + raise PermissionDenied("Untrusted URL") + + # Create a QRCode object + qr = qrcode.QRCode( + version=1, + error_correction=qrcode.constants.ERROR_CORRECT_M, + box_size=10, + border=4, + ) + qr.add_data(url) + qr.make(fit=True) + + # Generate the QR code in the requested format + if filetype == 'svg': + return self._generate_svg_response(qr, request.event.slug, filetype) + elif filetype in ('jpeg', 'png', 'gif'): + return self._generate_image_response(qr, request.event.slug, filetype) + else: + raise ValueError(f"Unsupported file type: {filetype}") + + def _generate_svg_response(self, qr, event_slug, filetype): + """ + Generate an SVG response for the QR code. + + Parameters: + qr (QRCode): The QRCode object. + event_slug (str): The event slug to be used in the filename. + filetype (str): The file type (should be 'svg'). + + Returns: + HttpResponse: An HTTP response containing the SVG QR code. + """ + factory = qrcode.image.svg.SvgPathImage + img = qr.make_image(image_factory=factory) + response = HttpResponse(img.to_string(), content_type='image/svg+xml') + response['Content-Disposition'] = f'inline; filename="qrcode-{event_slug}.{filetype}"' + return response + + def _generate_image_response(self, qr, event_slug, filetype): + """ + Generate an image response (JPEG, PNG, GIF) for the QR code. + + Parameters: + qr (QRCode): The QRCode object. + event_slug (str): The event slug to be used in the filename. + filetype (str): The file type (jpeg, png, gif). + + Returns: + HttpResponse: An HTTP response containing the image QR code. + """ + img = qr.make_image(fill_color="black", back_color="white") + byte_io = BytesIO() + img.save(byte_io, filetype.upper()) + byte_io.seek(0) + response = HttpResponse(byte_io.read(), content_type=f'image/{filetype}') + response['Content-Disposition'] = f'inline; filename="qrcode-{event_slug}.{filetype}"' + return response diff --git a/src/pretix/control/views/item.py b/src/pretix/control/views/item.py index 6a4bacb25..8ffeb7bdb 100644 --- a/src/pretix/control/views/item.py +++ b/src/pretix/control/views/item.py @@ -35,7 +35,7 @@ from pretix.base.services.tickets import invalidate_cache from pretix.base.signals import quota_availability from pretix.control.forms.item import ( - CategoryForm, ItemAddOnForm, ItemAddOnsFormSet, ItemBundleForm, + CategoryForm, DescriptionForm, ItemAddOnForm, ItemAddOnsFormSet, ItemBundleForm, ItemBundleFormSet, ItemCreateForm, ItemMetaValueForm, ItemUpdateForm, ItemVariationForm, ItemVariationsFormSet, QuestionForm, QuestionOptionForm, QuotaForm, @@ -450,6 +450,8 @@ def get_success_url(self) -> str: 'event': self.request.event.slug, }) +class DescriptionDelete(QuestionDelete): + template_name = 'pretixcontrol/items/desciption_delete.html' class QuestionMixin: @cached_property @@ -637,6 +639,9 @@ def form_invalid(self, form): messages.error(self.request, _('We could not save your changes. See below for details.')) return super().form_invalid(form) +class DescriptionUpdate(QuestionUpdate): + form_class = DescriptionForm + template_name = 'pretixcontrol/items/description_edit.html' class QuestionCreate(EventPermissionRequiredMixin, QuestionMixin, CreateView): model = Question @@ -678,6 +683,9 @@ def form_valid(self, form): return ret +class DescriptionCreate(QuestionCreate): + form_class = DescriptionForm + template_name = 'pretixcontrol/items/description_edit.html' class QuotaList(PaginationMixin, ListView): model = Quota diff --git a/src/pretix/control/views/oauth.py b/src/pretix/control/views/oauth.py index 458ecf6b1..b1b980c40 100644 --- a/src/pretix/control/views/oauth.py +++ b/src/pretix/control/views/oauth.py @@ -44,6 +44,12 @@ def get_form_class(self): def form_valid(self, form): form.instance.client_type = 'confidential' form.instance.authorization_grant_type = 'authorization-code' + secret = generate_client_secret() + messages.success(self.request, _('Your application has been successfully created, ' + 'and a unique application secret has been generated. ' + 'Please copy and save this secret immediately, ' + 'as it will not be displayed again: {secret}').format(secret=secret)) + form.instance.client_secret = secret oauth_application_registered.send( sender=self.request, user=self.request.user, application=form.instance ) @@ -53,18 +59,14 @@ def form_valid(self, form): class ApplicationUpdateForm(forms.ModelForm): class Meta: model = OAuthApplication - fields = ("name", "client_id", "client_secret", "redirect_uris") + fields = ("name", "client_id", "redirect_uris") def clean_client_id(self): return self.instance.client_id - def clean_client_secret(self): - return self.instance.client_secret - def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['client_id'].widget.attrs['readonly'] = True - self.fields['client_secret'].widget.attrs['readonly'] = True class OAuthApplicationUpdateView(ApplicationUpdate): @@ -82,8 +84,10 @@ class OAuthApplicationRollView(ApplicationDetail): def post(self, request, *args, **kwargs): self.object = self.get_object() - messages.success(request, _('A new client secret has been generated and is now effective.')) - self.object.client_secret = generate_client_secret() + secret = generate_client_secret() + messages.success(request, _('Please copy and save this secret immediately, as it will ' + 'not be displayed again: {secret}').format(secret=secret)) + self.object.client_secret = secret self.object.save() return HttpResponseRedirect(self.object.get_absolute_url()) diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index cec46d6a2..77d2fe23c 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -1737,12 +1737,18 @@ def get_context_data(self, **kwargs): def form(self): return OrderContactForm( instance=self.order, - data=self.request.POST if self.request.method == "POST" else None + data=self.request.POST if self.request.method == "POST" else None, + customers=self.request.organizer.settings.customer_accounts and ( + self.request.user.has_organizer_permission( + self.request.organizer, 'can_manage_customers', request=self.request + ) + ) ) def post(self, *args, **kwargs): old_email = self.order.email old_phone = self.order.phone + old_customer = self.order.customer changed = False if self.form.is_valid(): new_email = self.form.cleaned_data['email'] @@ -1768,7 +1774,17 @@ def post(self, *args, **kwargs): }, user=self.request.user, ) - + new_customer = self.form.cleaned_data.get('customer') + if new_customer != old_customer: + changed = True + self.order.log_action( + 'pretix.event.order.customer.changed', + data={ + 'old_customer': old_customer, + 'new_customer': self.form.cleaned_data['customer'], + }, + user=self.request.user, + ) if self.form.cleaned_data['regenerate_secrets']: changed = True self.order.secret = generate_secret() diff --git a/src/pretix/control/views/organizer.py b/src/pretix/control/views/organizer.py index 86d21b29c..0743d65b5 100644 --- a/src/pretix/control/views/organizer.py +++ b/src/pretix/control/views/organizer.py @@ -1,89 +1,29 @@ -import json from datetime import timedelta -from decimal import Decimal from django import forms from django.conf import settings from django.contrib import messages -from django.core.exceptions import PermissionDenied, ValidationError -from django.core.files import File from django.db import transaction -from django.db.models import ( - Count, Max, Min, OuterRef, Prefetch, ProtectedError, Subquery, Sum, -) -from django.db.models.functions import Coalesce, Greatest -from django.forms import DecimalField -from django.http import JsonResponse from django.shortcuts import get_object_or_404, redirect from django.urls import reverse from django.utils.functional import cached_property from django.utils.timezone import now from django.utils.translation import gettext_lazy as _ -from django.views import View from django.views.generic import ( - CreateView, DeleteView, DetailView, FormView, ListView, TemplateView, - UpdateView, + CreateView, DeleteView, ListView, TemplateView, UpdateView, ) -from pretix.api.models import WebHook -from pretix.base.auth import get_auth_backends -from pretix.base.models import ( - CachedFile, Device, Gate, GiftCard, LogEntry, OrderPayment, Organizer, - Team, TeamInvite, User, -) -from pretix.base.models.event import Event, EventMetaProperty, EventMetaValue -from pretix.base.models.giftcards import ( - GiftCardTransaction, gen_giftcard_secret, -) -from pretix.base.models.organizer import TeamAPIToken -from pretix.base.payment import PaymentException +from pretix.base.models import CachedFile, LogEntry +from pretix.base.models.event import EventMetaProperty from pretix.base.services.export import multiexport -from pretix.base.services.mail import SendMailException, mail -from pretix.base.settings import SETTINGS_AFFECTING_CSS from pretix.base.signals import register_multievent_data_exporters from pretix.base.views.tasks import AsyncAction -from pretix.control.forms.filter import ( - EventFilterForm, GiftCardFilterForm, OrganizerFilterForm, -) from pretix.control.forms.orders import ExporterForm -from pretix.control.forms.organizer import ( - DeviceForm, EventMetaPropertyForm, GateForm, GiftCardCreateForm, - GiftCardUpdateForm, OrganizerDeleteForm, OrganizerForm, - OrganizerSettingsForm, OrganizerUpdateForm, TeamForm, WebHookForm, -) +from pretix.control.forms.organizer_forms import EventMetaPropertyForm from pretix.control.logdisplay import OVERVIEW_BANLIST -from pretix.control.permissions import ( - AdministratorPermissionRequiredMixin, OrganizerPermissionRequiredMixin, -) -from pretix.control.signals import nav_organizer +from pretix.control.permissions import OrganizerPermissionRequiredMixin from pretix.control.views import PaginationMixin -from pretix.helpers.dicts import merge_dicts -from pretix.helpers.urls import build_absolute_uri -from pretix.presale.style import regenerate_organizer_css - - -class OrganizerList(PaginationMixin, ListView): - model = Organizer - context_object_name = 'organizers' - template_name = 'pretixcontrol/organizers/index.html' - - def get_queryset(self): - qs = Organizer.objects.all() - if self.filter_form.is_valid(): - qs = self.filter_form.filter_qs(qs) - if self.request.user.has_active_staff_session(self.request.session.session_key): - return qs - else: - return qs.filter(pk__in=self.request.user.teams.values_list('organizer', flat=True)) - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['filter_form'] = self.filter_form - return ctx - - @cached_property - def filter_form(self): - return OrganizerFilterForm(data=self.request.GET, request=self.request) +from pretix.control.views.organizer_views import OrganizerDetailViewMixin class InviteForm(forms.Form): @@ -94,1053 +34,6 @@ class TokenForm(forms.Form): name = forms.CharField(required=False, label=_('Token name')) -class OrganizerDetailViewMixin: - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['nav_organizer'] = [] - ctx['organizer'] = self.request.organizer - - for recv, retv in nav_organizer.send(sender=self.request.organizer, request=self.request, - organizer=self.request.organizer): - ctx['nav_organizer'] += retv - ctx['nav_organizer'].sort(key=lambda n: n['label']) - return ctx - - def get_object(self, queryset=None) -> Organizer: - return self.request.organizer - - -class OrganizerDetail(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): - model = Event - template_name = 'pretixcontrol/organizers/detail.html' - permission = None - context_object_name = 'events' - paginate_by = 50 - - @property - def organizer(self): - return self.request.organizer - - def get_queryset(self): - qs = self.request.user.get_events_with_any_permission(self.request).select_related('organizer').prefetch_related( - 'organizer', '_settings_objects', 'organizer___settings_objects', - 'organizer__meta_properties', - Prefetch( - 'meta_values', - EventMetaValue.objects.select_related('property'), - to_attr='meta_values_cached' - ) - ).filter(organizer=self.request.organizer).order_by('-date_from') - qs = qs.annotate( - min_from=Min('subevents__date_from'), - max_from=Max('subevents__date_from'), - max_to=Max('subevents__date_to'), - max_fromto=Greatest(Max('subevents__date_to'), Max('subevents__date_from')) - ).annotate( - order_from=Coalesce('min_from', 'date_from'), - order_to=Coalesce('max_fromto', 'max_to', 'max_from', 'date_to', 'date_from'), - ) - if self.filter_form.is_valid(): - qs = self.filter_form.filter_qs(qs) - return qs - - @cached_property - def filter_form(self): - return EventFilterForm(data=self.request.GET, request=self.request, organizer=self.organizer) - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['filter_form'] = self.filter_form - ctx['meta_fields'] = [ - self.filter_form['meta_{}'.format(p.name)] for p in self.organizer.meta_properties.all() - ] - return ctx - - -class OrganizerTeamView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView): - model = Organizer - template_name = 'pretixcontrol/organizers/teams.html' - permission = 'can_change_permissions' - context_object_name = 'organizer' - - -class OrganizerSettingsFormView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, FormView): - model = Organizer - permission = 'can_change_organizer_settings' - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - kwargs['obj'] = self.request.organizer - return kwargs - - @transaction.atomic - def post(self, request, *args, **kwargs): - form = self.get_form() - if form.is_valid(): - form.save() - if form.has_changed(): - self.request.organizer.log_action( - 'pretix.organizer.settings', user=self.request.user, data={ - k: (form.cleaned_data.get(k).name - if isinstance(form.cleaned_data.get(k), File) - else form.cleaned_data.get(k)) - for k in form.changed_data - } - ) - messages.success(self.request, _('Your changes have been saved.')) - return redirect(self.get_success_url()) - else: - messages.error(self.request, _('We could not save your changes. See below for details.')) - return self.get(request) - - -class OrganizerDisplaySettings(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, View): - permission = None - - def get(self, request, *wargs, **kwargs): - return redirect(reverse('control:organizer.edit', kwargs={ - 'organizer': self.request.organizer.slug, - }) + '#tab-0-3-open') - - -class OrganizerDelete(AdministratorPermissionRequiredMixin, FormView): - model = Organizer - template_name = 'pretixcontrol/organizers/delete.html' - context_object_name = 'organizer' - form_class = OrganizerDeleteForm - - def post(self, request, *args, **kwargs): - if not self.request.organizer.allow_delete(): - messages.error(self.request, _('This organizer can not be deleted.')) - return self.get(self.request, *self.args, **self.kwargs) - return super().post(request, *args, **kwargs) - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - kwargs['organizer'] = self.request.organizer - return kwargs - - def form_valid(self, form): - try: - with transaction.atomic(): - self.request.user.log_action( - 'pretix.organizer.deleted', user=self.request.user, - data={ - 'organizer_id': self.request.organizer.pk, - 'name': str(self.request.organizer.name), - 'logentries': list(self.request.organizer.all_logentries().values_list('pk', flat=True)) - } - ) - self.request.organizer.delete_sub_objects() - self.request.organizer.delete() - messages.success(self.request, _('The organizer has been deleted.')) - return redirect(self.get_success_url()) - except ProtectedError: - messages.error(self.request, _('The organizer could not be deleted as some constraints (e.g. data created by ' - 'plug-ins) do not allow it.')) - return self.get(self.request, *self.args, **self.kwargs) - - def get_success_url(self) -> str: - return reverse('control:index') - - -class OrganizerUpdate(OrganizerPermissionRequiredMixin, UpdateView): - model = Organizer - form_class = OrganizerUpdateForm - template_name = 'pretixcontrol/organizers/edit.html' - permission = 'can_change_organizer_settings' - context_object_name = 'organizer' - - @cached_property - def object(self) -> Organizer: - return self.request.organizer - - def get_object(self, queryset=None) -> Organizer: - return self.object - - @cached_property - def sform(self): - return OrganizerSettingsForm( - obj=self.object, - prefix='settings', - data=self.request.POST if self.request.method == 'POST' else None, - files=self.request.FILES if self.request.method == 'POST' else None - ) - - def get_context_data(self, *args, **kwargs) -> dict: - context = super().get_context_data(*args, **kwargs) - context['sform'] = self.sform - return context - - @transaction.atomic - def form_valid(self, form): - self.sform.save() - change_css = False - if self.sform.has_changed(): - self.request.organizer.log_action( - 'pretix.organizer.settings', - user=self.request.user, - data={ - k: (self.sform.cleaned_data.get(k).name - if isinstance(self.sform.cleaned_data.get(k), File) - else self.sform.cleaned_data.get(k)) - for k in self.sform.changed_data - } - ) - if any(p in self.sform.changed_data for p in SETTINGS_AFFECTING_CSS): - change_css = True - if form.has_changed(): - self.request.organizer.log_action( - 'pretix.organizer.changed', - user=self.request.user, - data={k: form.cleaned_data.get(k) for k in form.changed_data} - ) - - if change_css: - regenerate_organizer_css.apply_async(args=(self.request.organizer.pk,)) - messages.success(self.request, _('Your changes have been saved. Please note that it can ' - 'take a short period of time until your changes become ' - 'active.')) - else: - messages.success(self.request, _('Your changes have been saved.')) - return super().form_valid(form) - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - if self.request.user.has_active_staff_session(self.request.session.session_key): - kwargs['domain'] = True - kwargs['change_slug'] = True - return kwargs - - def get_success_url(self) -> str: - return reverse('control:organizer.edit', kwargs={ - 'organizer': self.request.organizer.slug, - }) - - def post(self, request, *args, **kwargs): - self.object = self.get_object() - form = self.get_form() - if form.is_valid() and self.sform.is_valid(): - return self.form_valid(form) - else: - return self.form_invalid(form) - - -class OrganizerCreate(CreateView): - model = Organizer - form_class = OrganizerForm - template_name = 'pretixcontrol/organizers/create.html' - context_object_name = 'organizer' - - def dispatch(self, request, *args, **kwargs): - if not request.user.has_active_staff_session(self.request.session.session_key): - raise PermissionDenied() # TODO - return super().dispatch(request, *args, **kwargs) - - @transaction.atomic - def form_valid(self, form): - messages.success(self.request, _('The new organizer has been created.')) - ret = super().form_valid(form) - t = Team.objects.create( - organizer=form.instance, name=_('Administrators'), - all_events=True, can_create_events=True, can_change_teams=True, can_manage_gift_cards=True, - can_change_organizer_settings=True, can_change_event_settings=True, can_change_items=True, - can_view_orders=True, can_change_orders=True, can_view_vouchers=True, can_change_vouchers=True - ) - t.members.add(self.request.user) - return ret - - def get_success_url(self) -> str: - return reverse('control:organizer', kwargs={ - 'organizer': self.object.slug, - }) - - -class TeamListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): - model = Team - template_name = 'pretixcontrol/organizers/teams.html' - permission = 'can_change_teams' - context_object_name = 'teams' - - def get_queryset(self): - return self.request.organizer.teams.annotate( - memcount=Count('members', distinct=True), - eventcount=Count('limit_events', distinct=True), - invcount=Count('invites', distinct=True) - ).all().order_by('name') - - -class TeamCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): - model = Team - template_name = 'pretixcontrol/organizers/team_edit.html' - permission = 'can_change_teams' - form_class = TeamForm - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - kwargs['organizer'] = self.request.organizer - return kwargs - - def get_object(self, queryset=None): - return get_object_or_404(Team, organizer=self.request.organizer, pk=self.kwargs.get('team')) - - def get_success_url(self): - return reverse('control:organizer.team', kwargs={ - 'organizer': self.request.organizer.slug, - 'team': self.object.pk - }) - - def form_valid(self, form): - messages.success(self.request, _('The team has been created. You can now add members to the team.')) - form.instance.organizer = self.request.organizer - ret = super().form_valid(form) - form.instance.members.add(self.request.user) - form.instance.log_action('pretix.team.created', user=self.request.user, data={ - k: getattr(self.object, k) if k != 'limit_events' else [e.id for e in getattr(self.object, k).all()] - for k in form.changed_data - }) - return ret - - def form_invalid(self, form): - messages.error(self.request, _('Your changes could not be saved.')) - return super().form_invalid(form) - - -class TeamUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): - model = Team - template_name = 'pretixcontrol/organizers/team_edit.html' - permission = 'can_change_teams' - context_object_name = 'team' - form_class = TeamForm - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - kwargs['organizer'] = self.request.organizer - return kwargs - - def get_object(self, queryset=None): - return get_object_or_404(Team, organizer=self.request.organizer, pk=self.kwargs.get('team')) - - def get_success_url(self): - return reverse('control:organizer.team', kwargs={ - 'organizer': self.request.organizer.slug, - 'team': self.object.pk - }) - - def form_valid(self, form): - if form.has_changed(): - self.object.log_action('pretix.team.changed', user=self.request.user, data={ - k: getattr(self.object, k) if k != 'limit_events' else [e.id for e in getattr(self.object, k).all()] - for k in form.changed_data - }) - messages.success(self.request, _('Your changes have been saved.')) - return super().form_valid(form) - - def form_invalid(self, form): - messages.error(self.request, _('Your changes could not be saved.')) - return super().form_invalid(form) - - -class TeamDeleteView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DeleteView): - model = Team - template_name = 'pretixcontrol/organizers/team_delete.html' - permission = 'can_change_teams' - context_object_name = 'team' - - def get_object(self, queryset=None): - return get_object_or_404(Team, organizer=self.request.organizer, pk=self.kwargs.get('team')) - - def get_success_url(self): - return reverse('control:organizer.teams', kwargs={ - 'organizer': self.request.organizer.slug, - }) - - def get_context_data(self, *args, **kwargs) -> dict: - context = super().get_context_data(*args, **kwargs) - context['possible'] = self.is_allowed() - return context - - def is_allowed(self) -> bool: - return self.request.organizer.teams.exclude(pk=self.kwargs.get('team')).filter( - can_change_teams=True, members__isnull=False - ).exists() - - @transaction.atomic - def form_valid(self, form): - success_url = self.get_success_url() - self.object = self.get_object() - if self.is_allowed(): - self.object.log_action('pretix.team.deleted', user=self.request.user) - self.object.delete() - messages.success(self.request, _('The selected team has been deleted.')) - return redirect(success_url) - else: - messages.error(self.request, _('The selected team cannot be deleted.')) - return redirect(success_url) - - -class TeamMemberView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView): - template_name = 'pretixcontrol/organizers/team_members.html' - context_object_name = 'team' - permission = 'can_change_teams' - model = Team - - def get_object(self, queryset=None): - return get_object_or_404(Team, organizer=self.request.organizer, pk=self.kwargs.get('team')) - - @cached_property - def add_form(self): - return InviteForm(data=(self.request.POST - if self.request.method == "POST" and "user" in self.request.POST else None)) - - @cached_property - def add_token_form(self): - return TokenForm(data=(self.request.POST - if self.request.method == "POST" and "name" in self.request.POST else None)) - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['add_form'] = self.add_form - ctx['add_token_form'] = self.add_token_form - return ctx - - def _send_invite(self, instance): - try: - mail( - instance.email, - _('eventyay account invitation'), - 'pretixcontrol/email/invitation.txt', - { - 'user': self, - 'organizer': self.request.organizer.name, - 'team': instance.team.name, - 'url': build_absolute_uri('control:auth.invite', kwargs={ - 'token': instance.token - }) - }, - event=None, - locale=self.request.LANGUAGE_CODE - ) - except SendMailException: - pass # Already logged - - @transaction.atomic - def post(self, request, *args, **kwargs): - self.object = self.get_object() - - if 'remove-member' in request.POST: - try: - user = User.objects.get(pk=request.POST.get('remove-member')) - except (User.DoesNotExist, ValueError): - pass - else: - other_admin_teams = self.request.organizer.teams.exclude(pk=self.object.pk).filter( - can_change_teams=True, members__isnull=False - ).exists() - if not other_admin_teams and self.object.can_change_teams and self.object.members.count() == 1: - messages.error(self.request, _('You cannot remove the last member from this team as no one would ' - 'be left with the permission to change teams.')) - return redirect(self.get_success_url()) - else: - self.object.members.remove(user) - self.object.log_action( - 'pretix.team.member.removed', user=self.request.user, data={ - 'email': user.email, - 'user': user.pk - } - ) - messages.success(self.request, _('The member has been removed from the team.')) - return redirect(self.get_success_url()) - - elif 'remove-invite' in request.POST: - try: - invite = self.object.invites.get(pk=request.POST.get('remove-invite')) - except (TeamInvite.DoesNotExist, ValueError): - messages.error(self.request, _('Invalid invite selected.')) - return redirect(self.get_success_url()) - else: - invite.delete() - self.object.log_action( - 'pretix.team.invite.deleted', user=self.request.user, data={ - 'email': invite.email - } - ) - messages.success(self.request, _('The invite has been revoked.')) - return redirect(self.get_success_url()) - - elif 'resend-invite' in request.POST: - try: - invite = self.object.invites.get(pk=request.POST.get('resend-invite')) - except (TeamInvite.DoesNotExist, ValueError): - messages.error(self.request, _('Invalid invite selected.')) - return redirect(self.get_success_url()) - else: - self._send_invite(invite) - self.object.log_action( - 'pretix.team.invite.resent', user=self.request.user, data={ - 'email': invite.email - } - ) - messages.success(self.request, _('The invite has been resent.')) - return redirect(self.get_success_url()) - - elif 'remove-token' in request.POST: - try: - token = self.object.tokens.get(pk=request.POST.get('remove-token')) - except (TeamAPIToken.DoesNotExist, ValueError): - messages.error(self.request, _('Invalid token selected.')) - return redirect(self.get_success_url()) - else: - token.active = False - token.save() - self.object.log_action( - 'pretix.team.token.deleted', user=self.request.user, data={ - 'name': token.name - } - ) - messages.success(self.request, _('The token has been revoked.')) - return redirect(self.get_success_url()) - - elif "user" in self.request.POST and self.add_form.is_valid() and self.add_form.has_changed(): - - try: - user = User.objects.get(email__iexact=self.add_form.cleaned_data['user']) - except User.DoesNotExist: - if self.object.invites.filter(email__iexact=self.add_form.cleaned_data['user']).exists(): - messages.error(self.request, _('This user already has been invited for this team.')) - return self.get(request, *args, **kwargs) - if 'native' not in get_auth_backends(): - messages.error(self.request, _('Users need to have a pretix account before they can be invited.')) - return self.get(request, *args, **kwargs) - - invite = self.object.invites.create(email=self.add_form.cleaned_data['user']) - self._send_invite(invite) - self.object.log_action( - 'pretix.team.invite.created', user=self.request.user, data={ - 'email': self.add_form.cleaned_data['user'] - } - ) - messages.success(self.request, _('The new member has been invited to the team.')) - return redirect(self.get_success_url()) - else: - if self.object.members.filter(pk=user.pk).exists(): - messages.error(self.request, _('This user already has permissions for this team.')) - return self.get(request, *args, **kwargs) - - self.object.members.add(user) - self.object.log_action( - 'pretix.team.member.added', user=self.request.user, - data={ - 'email': user.email, - 'user': user.pk, - } - ) - messages.success(self.request, _('The new member has been added to the team.')) - return redirect(self.get_success_url()) - - elif "name" in self.request.POST and self.add_token_form.is_valid() and self.add_token_form.has_changed(): - token = self.object.tokens.create(name=self.add_token_form.cleaned_data['name']) - self.object.log_action( - 'pretix.team.token.created', user=self.request.user, data={ - 'name': self.add_token_form.cleaned_data['name'], - 'id': token.pk - } - ) - messages.success(self.request, _('A new API token has been created with the following secret: {}\n' - 'Please copy this secret to a safe place. You will not be able to ' - 'view it again here.').format(token.token)) - return redirect(self.get_success_url()) - else: - messages.error(self.request, _('Your changes could not be saved.')) - return self.get(request, *args, **kwargs) - - def get_success_url(self) -> str: - return reverse('control:organizer.team', kwargs={ - 'organizer': self.request.organizer.slug, - 'team': self.object.pk - }) - - -class DeviceListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): - model = Device - template_name = 'pretixcontrol/organizers/devices.html' - permission = 'can_change_organizer_settings' - context_object_name = 'devices' - - def get_queryset(self): - return self.request.organizer.devices.prefetch_related( - 'limit_events' - ).order_by('revoked', '-device_id') - - -class DeviceCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): - model = Device - template_name = 'pretixcontrol/organizers/device_edit.html' - permission = 'can_change_organizer_settings' - form_class = DeviceForm - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - kwargs['organizer'] = self.request.organizer - return kwargs - - def get_success_url(self): - return reverse('control:organizer.device.connect', kwargs={ - 'organizer': self.request.organizer.slug, - 'device': self.object.pk - }) - - def form_valid(self, form): - form.instance.organizer = self.request.organizer - ret = super().form_valid(form) - form.instance.log_action('pretix.device.created', user=self.request.user, data={ - k: getattr(self.object, k) if k != 'limit_events' else [e.id for e in getattr(self.object, k).all()] - for k in form.changed_data - }) - return ret - - def form_invalid(self, form): - messages.error(self.request, _('Your changes could not be saved.')) - return super().form_invalid(form) - - -class DeviceLogView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): - template_name = 'pretixcontrol/organizers/device_logs.html' - permission = 'can_change_organizer_settings' - model = LogEntry - context_object_name = 'logs' - paginate_by = 20 - - @cached_property - def device(self): - return get_object_or_404(Device, organizer=self.request.organizer, pk=self.kwargs.get('device')) - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['device'] = self.device - return ctx - - def get_queryset(self): - qs = LogEntry.objects.filter( - device_id=self.device - ).select_related( - 'user', 'content_type', 'api_token', 'oauth_application', - ).prefetch_related( - 'device', 'event' - ).order_by('-datetime') - return qs - - -class DeviceUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): - model = Device - template_name = 'pretixcontrol/organizers/device_edit.html' - permission = 'can_change_organizer_settings' - context_object_name = 'device' - form_class = DeviceForm - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - kwargs['organizer'] = self.request.organizer - return kwargs - - def get_object(self, queryset=None): - return get_object_or_404(Device, organizer=self.request.organizer, pk=self.kwargs.get('device')) - - def get_success_url(self): - return reverse('control:organizer.devices', kwargs={ - 'organizer': self.request.organizer.slug, - }) - - def form_valid(self, form): - if form.has_changed(): - self.object.log_action('pretix.device.changed', user=self.request.user, data={ - k: getattr(self.object, k) if k != 'limit_events' else [e.id for e in getattr(self.object, k).all()] - for k in form.changed_data - }) - messages.success(self.request, _('Your changes have been saved.')) - return super().form_valid(form) - - def form_invalid(self, form): - messages.error(self.request, _('Your changes could not be saved.')) - return super().form_invalid(form) - - -class DeviceConnectView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView): - model = Device - template_name = 'pretixcontrol/organizers/device_connect.html' - permission = 'can_change_organizer_settings' - context_object_name = 'device' - - def get_object(self, queryset=None): - return get_object_or_404(Device, organizer=self.request.organizer, pk=self.kwargs.get('device')) - - def get(self, request, *args, **kwargs): - self.object = self.get_object() - if 'ajax' in request.GET: - return JsonResponse({ - 'initialized': bool(self.object.initialized) - }) - if self.object.initialized: - messages.success(request, _('This device has been set up successfully.')) - return redirect(reverse('control:organizer.devices', kwargs={ - 'organizer': self.request.organizer.slug, - })) - return super().get(request, *args, **kwargs) - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['qrdata'] = json.dumps({ - 'handshake_version': 1, - 'url': settings.SITE_URL, - 'token': self.object.initialization_token, - }) - return ctx - - -class DeviceRevokeView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView): - model = Device - template_name = 'pretixcontrol/organizers/device_revoke.html' - permission = 'can_change_organizer_settings' - context_object_name = 'device' - - def get_object(self, queryset=None): - return get_object_or_404(Device, organizer=self.request.organizer, pk=self.kwargs.get('device')) - - def get(self, request, *args, **kwargs): - self.object = self.get_object() - if not self.object.api_token: - messages.success(request, _('This device currently does not have access.')) - return redirect(reverse('control:organizer.devices', kwargs={ - 'organizer': self.request.organizer.slug, - })) - return super().get(request, *args, **kwargs) - - def post(self, request, *args, **kwargs): - self.object = self.get_object() - self.object.revoked = True - self.object.save() - self.object.log_action('pretix.device.revoked', user=self.request.user) - messages.success(request, _('Access for this device has been revoked.')) - return redirect(reverse('control:organizer.devices', kwargs={ - 'organizer': self.request.organizer.slug, - })) - - -class WebHookListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): - model = WebHook - template_name = 'pretixcontrol/organizers/webhooks.html' - permission = 'can_change_organizer_settings' - context_object_name = 'webhooks' - - def get_queryset(self): - return self.request.organizer.webhooks.prefetch_related('limit_events') - - -class WebHookCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): - model = WebHook - template_name = 'pretixcontrol/organizers/webhook_edit.html' - permission = 'can_change_organizer_settings' - form_class = WebHookForm - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - kwargs['organizer'] = self.request.organizer - return kwargs - - def get_success_url(self): - return reverse('control:organizer.webhooks', kwargs={ - 'organizer': self.request.organizer.slug, - }) - - def form_valid(self, form): - form.instance.organizer = self.request.organizer - ret = super().form_valid(form) - self.request.organizer.log_action('pretix.webhook.created', user=self.request.user, data=merge_dicts({ - k: form.cleaned_data[k] if k != 'limit_events' else [e.id for e in getattr(self.object, k).all()] - for k in form.changed_data - }, {'id': form.instance.pk})) - new_listeners = set(form.cleaned_data['events']) - for l in new_listeners: - self.object.listeners.create(action_type=l) - return ret - - def form_invalid(self, form): - messages.error(self.request, _('Your changes could not be saved.')) - return super().form_invalid(form) - - -class WebHookUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): - model = WebHook - template_name = 'pretixcontrol/organizers/webhook_edit.html' - permission = 'can_change_organizer_settings' - context_object_name = 'webhook' - form_class = WebHookForm - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - kwargs['organizer'] = self.request.organizer - return kwargs - - def get_object(self, queryset=None): - return get_object_or_404(WebHook, organizer=self.request.organizer, pk=self.kwargs.get('webhook')) - - def get_success_url(self): - return reverse('control:organizer.webhooks', kwargs={ - 'organizer': self.request.organizer.slug, - }) - - def form_valid(self, form): - if form.has_changed(): - self.request.organizer.log_action('pretix.webhook.changed', user=self.request.user, data=merge_dicts({ - k: form.cleaned_data[k] if k != 'limit_events' else [e.id for e in getattr(self.object, k).all()] - for k in form.changed_data - }, {'id': form.instance.pk})) - - current_listeners = set(self.object.listeners.values_list('action_type', flat=True)) - new_listeners = set(form.cleaned_data['events']) - for l in current_listeners - new_listeners: - self.object.listeners.filter(action_type=l).delete() - for l in new_listeners - current_listeners: - self.object.listeners.create(action_type=l) - - messages.success(self.request, _('Your changes have been saved.')) - return super().form_valid(form) - - def form_invalid(self, form): - messages.error(self.request, _('Your changes could not be saved.')) - return super().form_invalid(form) - - -class WebHookLogsView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): - model = WebHook - template_name = 'pretixcontrol/organizers/webhook_logs.html' - permission = 'can_change_organizer_settings' - context_object_name = 'calls' - paginate_by = 50 - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['webhook'] = self.webhook - return ctx - - @cached_property - def webhook(self): - return get_object_or_404( - WebHook, organizer=self.request.organizer, pk=self.kwargs.get('webhook') - ) - - def get_queryset(self): - return self.webhook.calls.order_by('-datetime') - - -class GiftCardListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): - model = GiftCard - template_name = 'pretixcontrol/organizers/giftcards.html' - permission = 'can_manage_gift_cards' - context_object_name = 'giftcards' - paginate_by = 50 - - def get_queryset(self): - s = GiftCardTransaction.objects.filter( - card=OuterRef('pk') - ).order_by().values('card').annotate(s=Sum('value')).values('s') - qs = self.request.organizer.issued_gift_cards.annotate( - cached_value=Coalesce(Subquery(s), Decimal('0.00')) - ).order_by('-issuance') - if self.filter_form.is_valid(): - qs = self.filter_form.filter_qs(qs) - return qs - - def post(self, request, *args, **kwargs): - if "add" in request.POST: - o = self.request.user.get_organizers_with_permission( - 'can_manage_gift_cards', self.request - ).exclude(pk=self.request.organizer.pk).filter( - slug=request.POST.get("add") - ).first() - if o: - self.request.organizer.gift_card_issuer_acceptance.get_or_create( - issuer=o - ) - self.request.organizer.log_action( - 'pretix.giftcards.acceptance.added', - data={'issuer': o.slug}, - user=request.user - ) - messages.success(self.request, _('The selected gift card issuer has been added.')) - if "del" in request.POST: - o = Organizer.objects.filter( - slug=request.POST.get("del") - ).first() - if o: - self.request.organizer.gift_card_issuer_acceptance.filter( - issuer=o - ).delete() - self.request.organizer.log_action( - 'pretix.giftcards.acceptance.removed', - data={'issuer': o.slug}, - user=request.user - ) - messages.success(self.request, _('The selected gift card issuer has been removed.')) - return redirect(reverse('control:organizer.giftcards', kwargs={'organizer': self.request.organizer.slug})) - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['filter_form'] = self.filter_form - ctx['other_organizers'] = self.request.user.get_organizers_with_permission( - 'can_manage_gift_cards', self.request - ).exclude(pk=self.request.organizer.pk) - return ctx - - @cached_property - def filter_form(self): - return GiftCardFilterForm(data=self.request.GET, request=self.request) - - -class GiftCardDetailView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView): - template_name = 'pretixcontrol/organizers/giftcard.html' - permission = 'can_manage_gift_cards' - context_object_name = 'card' - - def get_object(self, queryset=None) -> Organizer: - return get_object_or_404( - self.request.organizer.issued_gift_cards, - pk=self.kwargs.get('giftcard') - ) - - @transaction.atomic() - def post(self, request, *args, **kwargs): - self.object = GiftCard.objects.select_for_update().get(pk=self.get_object().pk) - if 'revert' in request.POST: - t = get_object_or_404(self.object.transactions.all(), pk=request.POST.get('revert'), order__isnull=False) - if self.object.value - t.value < Decimal('0.00'): - messages.error(request, _('Gift cards are not allowed to have negative values.')) - elif t.value > 0: - r = t.order.payments.create( - order=t.order, - state=OrderPayment.PAYMENT_STATE_CREATED, - amount=t.value, - provider='giftcard', - info=json.dumps({ - 'gift_card': self.object.pk, - 'retry': True, - }) - ) - try: - r.payment_provider.execute_payment(request, r) - except PaymentException as e: - with transaction.atomic(): - r.state = OrderPayment.PAYMENT_STATE_FAILED - r.save() - t.order.log_action('pretix.event.order.payment.failed', { - 'local_id': r.local_id, - 'provider': r.provider, - 'error': str(e) - }) - messages.error(request, _('The transaction could not be reversed.')) - else: - messages.success(request, _('The transaction has been reversed.')) - elif 'value' in request.POST: - try: - value = DecimalField(localize=True).to_python(request.POST.get('value')) - except ValidationError: - messages.error(request, _('Your input was invalid, please try again.')) - else: - if self.object.value + value < Decimal('0.00'): - messages.error(request, _('Gift cards are not allowed to have negative values.')) - else: - self.object.transactions.create( - value=value, - text=request.POST.get('text') or None, - ) - self.object.log_action( - 'pretix.giftcards.transaction.manual', - data={ - 'value': value, - 'text': request.POST.get('text') - }, - user=self.request.user, - ) - messages.success(request, _('The manual transaction has been saved.')) - return redirect(reverse( - 'control:organizer.giftcard', - kwargs={ - 'organizer': request.organizer.slug, - 'giftcard': self.object.pk - } - )) - return self.get(request, *args, **kwargs) - - -class GiftCardCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): - template_name = 'pretixcontrol/organizers/giftcard_create.html' - permission = 'can_manage_gift_cards' - form_class = GiftCardCreateForm - success_url = 'invalid' - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - any_event = self.request.organizer.events.first() - kwargs['initial'] = { - 'currency': any_event.currency if any_event else settings.DEFAULT_CURRENCY, - 'secret': gen_giftcard_secret(self.request.organizer.settings.giftcard_length) - } - kwargs['organizer'] = self.request.organizer - return kwargs - - @transaction.atomic() - def post(self, request, *args, **kwargs): - return super().post(request, *args, **kwargs) - - def form_valid(self, form): - messages.success(self.request, _('The gift card has been created and can now be used.')) - form.instance.issuer = self.request.organizer - super().form_valid(form) - form.instance.transactions.create( - value=form.cleaned_data['value'] - ) - form.instance.log_action('pretix.giftcards.created', user=self.request.user, data={}) - if form.cleaned_data['value']: - form.instance.log_action('pretix.giftcards.transaction.manual', user=self.request.user, data={ - 'value': form.cleaned_data['value'] - }) - return redirect(reverse( - 'control:organizer.giftcard', - kwargs={ - 'organizer': self.request.organizer.slug, - 'giftcard': self.object.pk - } - )) - - -class GiftCardUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): - template_name = 'pretixcontrol/organizers/giftcard_edit.html' - permission = 'can_manage_gift_cards' - form_class = GiftCardUpdateForm - success_url = 'invalid' - context_object_name = 'card' - model = GiftCard - - def get_object(self, queryset=None) -> Organizer: - return get_object_or_404( - self.request.organizer.issued_gift_cards, - pk=self.kwargs.get('giftcard') - ) - - @transaction.atomic() - def form_valid(self, form): - messages.success(self.request, _('The gift card has been changed.')) - super().form_valid(form) - form.instance.log_action('pretix.giftcards.modified', user=self.request.user, data=dict(form.cleaned_data)) - return redirect(reverse( - 'control:organizer.giftcard', - kwargs={ - 'organizer': self.request.organizer.slug, - 'giftcard': self.object.pk - } - )) - - class ExportMixin: @cached_property def exporters(self): @@ -1246,107 +139,6 @@ class ExportView(OrganizerPermissionRequiredMixin, ExportMixin, TemplateView): template_name = 'pretixcontrol/organizers/export.html' -class GateListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): - model = Gate - template_name = 'pretixcontrol/organizers/gates.html' - permission = 'can_change_organizer_settings' - context_object_name = 'gates' - - def get_queryset(self): - return self.request.organizer.gates.all() - - -class GateCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): - model = Gate - template_name = 'pretixcontrol/organizers/gate_edit.html' - permission = 'can_change_organizer_settings' - form_class = GateForm - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - kwargs['organizer'] = self.request.organizer - return kwargs - - def get_object(self, queryset=None): - return get_object_or_404(Gate, organizer=self.request.organizer, pk=self.kwargs.get('gate')) - - def get_success_url(self): - return reverse('control:organizer.gates', kwargs={ - 'organizer': self.request.organizer.slug, - }) - - def form_valid(self, form): - messages.success(self.request, _('The gate has been created.')) - form.instance.organizer = self.request.organizer - ret = super().form_valid(form) - form.instance.log_action('pretix.gate.created', user=self.request.user, data={ - k: getattr(self.object, k) for k in form.changed_data - }) - return ret - - def form_invalid(self, form): - messages.error(self.request, _('Your changes could not be saved.')) - return super().form_invalid(form) - - -class GateUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): - model = Gate - template_name = 'pretixcontrol/organizers/gate_edit.html' - permission = 'can_change_organizer_settings' - context_object_name = 'gate' - form_class = GateForm - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - kwargs['organizer'] = self.request.organizer - return kwargs - - def get_object(self, queryset=None): - return get_object_or_404(Gate, organizer=self.request.organizer, pk=self.kwargs.get('gate')) - - def get_success_url(self): - return reverse('control:organizer.gates', kwargs={ - 'organizer': self.request.organizer.slug, - }) - - def form_valid(self, form): - if form.has_changed(): - self.object.log_action('pretix.gate.changed', user=self.request.user, data={ - k: getattr(self.object, k) - for k in form.changed_data - }) - messages.success(self.request, _('Your changes have been saved.')) - return super().form_valid(form) - - def form_invalid(self, form): - messages.error(self.request, _('Your changes could not be saved.')) - return super().form_invalid(form) - - -class GateDeleteView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DeleteView): - model = Gate - template_name = 'pretixcontrol/organizers/gate_delete.html' - permission = 'can_change_organizer_settings' - context_object_name = 'gate' - - def get_object(self, queryset=None): - return get_object_or_404(Gate, organizer=self.request.organizer, pk=self.kwargs.get('gate')) - - def get_success_url(self): - return reverse('control:organizer.gates', kwargs={ - 'organizer': self.request.organizer.slug, - }) - - @transaction.atomic - def form_valid(self, form): - success_url = self.get_success_url() - self.object = self.get_object() - self.object.log_action('pretix.gate.deleted', user=self.request.user) - self.object.delete() - messages.success(self.request, _('The selected gate has been deleted.')) - return redirect(success_url) - - class EventMetaPropertyListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): model = EventMetaProperty template_name = 'pretixcontrol/organizers/properties.html' diff --git a/src/pretix/control/views/organizer_views/__init__.py b/src/pretix/control/views/organizer_views/__init__.py new file mode 100644 index 000000000..6f622ca90 --- /dev/null +++ b/src/pretix/control/views/organizer_views/__init__.py @@ -0,0 +1,10 @@ +from .customer_view import CustomerView +from .device_view import DeviceView +from .gate_view import GateView +from .gift_card_view import GiftCardView +from .mail_settings_preview import MailSettingsPreview +from .organizer_detail_view_mixin import OrganizerDetailViewMixin +from .organizer_view import OrganizerView +from .sso_provider_view import SSOProviderView +from .team_view import TeamView +from .web_hook_view import WebHookView diff --git a/src/pretix/control/views/organizer_views/customer_view.py b/src/pretix/control/views/organizer_views/customer_view.py new file mode 100644 index 000000000..1605dc565 --- /dev/null +++ b/src/pretix/control/views/organizer_views/customer_view.py @@ -0,0 +1,223 @@ +from django.conf import settings +from django.contrib import messages +from django.db import transaction +from django.db.models import Count, Exists, IntegerField, OuterRef, Q, Subquery +from django.shortcuts import get_object_or_404, redirect +from django.urls import reverse +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _ +from django.views.generic import DetailView, ListView, UpdateView + +from pretix.base.channels import get_all_sales_channels +from pretix.base.models.customers import Customer +from pretix.base.models.invoices import Invoice +from pretix.base.models.orders import CancellationRequest, Order, OrderPosition +from pretix.control.forms.filter import CustomerFilterForm +from pretix.control.forms.organizer_forms import CustomerUpdateForm +from pretix.control.permissions import OrganizerPermissionRequiredMixin +from pretix.control.views import PaginationMixin +from pretix.control.views.organizer_views.organizer_detail_view_mixin import ( + OrganizerDetailViewMixin, +) + + +class CustomerListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, PaginationMixin, ListView): + model = Customer + template_name = 'pretixcontrol/organizers/customers.html' + permission = 'can_manage_customers' + context_object_name = 'customers' + + def get_queryset(self): + """ + Returns the filtered queryset of customers based on the organizer's settings and the validity of the filter form. + + Returns: + QuerySet: The filtered queryset of customers. + """ + qs = self.request.organizer.customers.all() + + if self.filter_form.is_valid(): + qs = self.filter_form.filter_qs(qs) + + return qs + + def get_context_data(self, **kwargs): + """ + Returns the context data for the view, including the filter form. + + Args: + **kwargs: Arbitrary keyword arguments. + + Returns: + dict: The context data including the filter form. + """ + ctx = super().get_context_data(**kwargs) + ctx['filter_form'] = self.filter_form + return ctx + + @cached_property + def filter_form(self): + return CustomerFilterForm(data=self.request.GET, request=self.request) + + +class CustomerDetailView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, PaginationMixin, ListView): + template_name = 'pretixcontrol/organizers/customer.html' + permission = 'can_manage_customers' + context_object_name = 'orders' + + def get_queryset(self): + """ + Returns the queryset of orders for the specified customer, including orders that match the customer's email, + and orders are sorted by datetime in descending order. + + Returns: + QuerySet: The queryset of orders. + """ + return Order.objects.filter( + Q(customer=self.customer) | Q(email__iexact=self.customer.email) + ).select_related('event').order_by('-datetime') + + @cached_property + def customer(self): + return get_object_or_404( + self.request.organizer.customers, + identifier=self.kwargs.get('customer') + ) + + def get_context_data(self, **kwargs): + """ + Returns the context data for the view, including customer details, locale, and annotated order information. + + Args: + **kwargs: Arbitrary keyword arguments. + + Returns: + dict: The context data including customer details and annotated orders. + """ + ctx = super().get_context_data(**kwargs) + ctx['customer'] = self.customer + ctx['display_locale'] = dict(settings.LANGUAGES).get(self.customer.locale, + self.request.organizer.settings.locale) + + s = OrderPosition.objects.filter( + order=OuterRef('pk') + ).order_by().values('order').annotate(k=Count('id')).values('k') + i = Invoice.objects.filter( + order=OuterRef('pk'), + is_cancellation=False, + refered__isnull=True, + ).order_by().values('order').annotate(k=Count('id')).values('k') + orders = ctx.get('orders', []) + order_pks = [o.pk for o in orders] + + annotated_orders = Order.annotate_overpayments(Order.objects, sums=True).filter( + pk__in=order_pks + ).annotate( + pcnt=Subquery(s, output_field=IntegerField()), + icnt=Subquery(i, output_field=IntegerField()), + has_cancellation_request=Exists(CancellationRequest.objects.filter(order=OuterRef('pk'))) + ).values( + 'pk', 'pcnt', 'is_overpaid', 'is_underpaid', 'is_pending_with_full_payment', 'has_external_refund', + 'has_pending_refund', 'has_cancellation_request', 'computed_payment_refund_sum', 'icnt' + ) + + annotated = {o['pk']: o for o in annotated_orders} + + scs = get_all_sales_channels() + + for order in orders: + if order.pk not in annotated: + continue + annotation = annotated[order.pk] + order.pcnt = annotation['pcnt'] + order.is_overpaid = annotation['is_overpaid'] + order.is_underpaid = annotation['is_underpaid'] + order.is_pending_with_full_payment = annotation['is_pending_with_full_payment'] + order.has_external_refund = annotation['has_external_refund'] + order.has_pending_refund = annotation['has_pending_refund'] + order.has_cancellation_request = annotation['has_cancellation_request'] + order.computed_payment_refund_sum = annotation['computed_payment_refund_sum'] + order.icnt = annotation['icnt'] + order.sales_channel_obj = scs[order.sales_channel] + + return ctx + + +class CustomerUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): + template_name = 'pretixcontrol/organizers/customer_edit.html' + permission = 'can_manage_customers' + context_object_name = 'customer' + form_class = CustomerUpdateForm + + def get_object(self, queryset=None): + return get_object_or_404( + self.request.organizer.customers, + identifier=self.kwargs.get('customer') + ) + + def form_valid(self, form): + """ + Handles the form validation and logging of changes. If the form has changed, logs the action with the changed data. + + Args: + form (Form): The validated form. + + Returns: + HttpResponse: The response generated by the superclass method. + """ + if form.has_changed(): + self.object.log_action( + 'pretix.customer.changed', + user=self.request.user, + data={k: getattr(self.object, k) for k in form.changed_data} + ) + messages.success(self.request, _('Your changes have been saved.')) + + return super().form_valid(form) + + def get_success_url(self): + return reverse('control:organizer.customer', kwargs={ + 'organizer': self.request.organizer.slug, + 'customer': self.object.identifier, + }) + + +class CustomerAnonymizeView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView): + template_name = 'pretixcontrol/organizers/customer_anonymize.html' + permission = 'can_manage_customers' + context_object_name = 'customer' + + def get_object(self, queryset=None): + return get_object_or_404( + self.request.organizer.customers, + identifier=self.kwargs.get('customer') + ) + + def post(self, request, *args, **kwargs): + """ + Handles the POST request to anonymize a customer account. Anonymizes the customer, + logs the action, and redirects to the success URL. + + Args: + request (HttpRequest): The HTTP request object. + *args: Variable length argument list. + **kwargs: Arbitrary keyword arguments. + + Returns: + HttpResponseRedirect: Redirects to the success URL. + """ + self.object = self.get_object() + + with transaction.atomic(): + self.object.anonymize_customer() + self.object.log_action('pretix.customer.anonymized', user=self.request.user) + + messages.success(self.request, _('The customer account has been anonymized.')) + + return redirect(self.get_success_url()) + + def get_success_url(self): + return reverse('control:organizer.customer', kwargs={ + 'organizer': self.request.organizer.slug, + 'customer': self.object.identifier, + }) \ No newline at end of file diff --git a/src/pretix/control/views/organizer_views/device_view.py b/src/pretix/control/views/organizer_views/device_view.py new file mode 100644 index 000000000..e19018b8f --- /dev/null +++ b/src/pretix/control/views/organizer_views/device_view.py @@ -0,0 +1,182 @@ +import json + +from django.conf import settings +from django.contrib import messages +from django.http import HttpResponseBadRequest, JsonResponse +from django.shortcuts import get_object_or_404, redirect +from django.urls import reverse +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _ +from django.views.generic import CreateView, DetailView, ListView, UpdateView + +from pretix.base.models.devices import Device +from pretix.base.models.log import LogEntry +from pretix.control.forms.organizer_forms.device_form import DeviceForm +from pretix.control.permissions import OrganizerPermissionRequiredMixin +from pretix.control.views.organizer_views.organizer_detail_view_mixin import ( + OrganizerDetailViewMixin, +) + + +class DeviceCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): + model = Device + template_name = 'pretixcontrol/organizers/device_edit.html' + permission = 'can_change_organizer_settings' + form_class = DeviceForm + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['organizer'] = self.request.organizer + return kwargs + + def get_success_url(self): + return reverse('control:organizer.device.connect', kwargs={ + 'organizer': self.request.organizer.slug, + 'device': self.object.pk + }) + + def form_valid(self, form): + form.instance.organizer = self.request.organizer + ret = super().form_valid(form) + form.instance.log_action('pretix.device.created', user=self.request.user, data={ + k: getattr(self.object, k) if k != 'limit_events' else [e.id for e in getattr(self.object, k).all()] + for k in form.changed_data + }) + return ret + + def form_invalid(self, form): + messages.error(self.request, _('Your changes could not be saved.')) + return super().form_invalid(form) + + +class DeviceListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): + model = Device + template_name = 'pretixcontrol/organizers/devices.html' + permission = 'can_change_organizer_settings' + context_object_name = 'devices' + + def get_queryset(self): + return self.request.organizer.devices.prefetch_related( + 'limit_events' + ).order_by('revoked', '-device_id') + + +class DeviceLogView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): + template_name = 'pretixcontrol/organizers/device_logs.html' + permission = 'can_change_organizer_settings' + model = LogEntry + context_object_name = 'logs' + paginate_by = 20 + + @cached_property + def device(self): + return get_object_or_404(Device, organizer=self.request.organizer, pk=self.kwargs.get('device')) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['device'] = self.device + return ctx + + def get_queryset(self): + qs = LogEntry.objects.filter( + device_id=self.device + ).select_related( + 'user', 'content_type', 'api_token', 'oauth_application', + ).prefetch_related( + 'device', 'event' + ).order_by('-datetime') + return qs + + +class DeviceUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): + model = Device + template_name = 'pretixcontrol/organizers/device_edit.html' + permission = 'can_change_organizer_settings' + context_object_name = 'device' + form_class = DeviceForm + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['organizer'] = self.request.organizer + return kwargs + + def get_object(self, queryset=None): + return get_object_or_404(Device, organizer=self.request.organizer, pk=self.kwargs.get('device')) + + def get_success_url(self): + return reverse('control:organizer.devices', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + def form_valid(self, form): + if form.has_changed(): + self.object.log_action('pretix.device.changed', user=self.request.user, data={ + k: getattr(self.object, k) if k != 'limit_events' else [e.id for e in getattr(self.object, k).all()] + for k in form.changed_data + }) + messages.success(self.request, _('Your changes have been saved.')) + return super().form_valid(form) + + def form_invalid(self, form): + messages.error(self.request, _('Your changes could not be saved.')) + return super().form_invalid(form) + +class DeviceConnectView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView): + model = Device + template_name = 'pretixcontrol/organizers/device_connect.html' + permission = 'can_change_organizer_settings' + context_object_name = 'device' + + def get_object(self, queryset=None): + return get_object_or_404(Device, organizer=self.request.organizer, pk=self.kwargs.get('device')) + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + if 'ajax' in request.GET: + return JsonResponse({ + 'initialized': bool(self.object.initialized) + }) + if self.object.initialized: + messages.success(request, _('This device has been set up successfully.')) + return redirect(reverse('control:organizer.devices', kwargs={ + 'organizer': self.request.organizer.slug, + })) + return super().get(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['qrdata'] = json.dumps({ + 'handshake_version': 1, + 'url': settings.SITE_URL, + 'token': self.object.initialization_token, + }) + return ctx + + +class DeviceRevokeView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView): + model = Device + template_name = 'pretixcontrol/organizers/device_revoke.html' + permission = 'can_change_organizer_settings' + context_object_name = 'device' + + def get_object(self, queryset=None): + return get_object_or_404(Device, organizer=self.request.organizer, pk=self.kwargs.get('device')) + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + if not self.object.api_token: + messages.success(request, _('This device currently does not have access.')) + return redirect(reverse('control:organizer.devices', kwargs={ + 'organizer': self.request.organizer.slug, + })) + return super().get(request, *args, **kwargs) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + self.object.revoked = True + self.object.save() + self.object.log_action('pretix.device.revoked', user=self.request.user) + messages.success(request, _('Access for this device has been revoked.')) + return redirect(reverse('control:organizer.devices', kwargs={ + 'organizer': self.request.organizer.slug, + })) \ No newline at end of file diff --git a/src/pretix/control/views/organizer_views/gate_view.py b/src/pretix/control/views/organizer_views/gate_view.py new file mode 100644 index 000000000..dcb39699b --- /dev/null +++ b/src/pretix/control/views/organizer_views/gate_view.py @@ -0,0 +1,115 @@ + +from django.contrib import messages +from django.db import transaction +from django.shortcuts import get_object_or_404, redirect +from django.urls import reverse +from django.utils.translation import gettext_lazy as _ +from django.views.generic import CreateView, DeleteView, ListView, UpdateView + +from pretix.base.models.devices import Gate +from pretix.control.forms.organizer_forms import GateForm +from pretix.control.permissions import OrganizerPermissionRequiredMixin +from pretix.control.views.organizer_views.organizer_detail_view_mixin import ( + OrganizerDetailViewMixin, +) + + +class GateListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): + model = Gate + template_name = 'pretixcontrol/organizers/gates.html' + permission = 'can_change_organizer_settings' + context_object_name = 'gates' + + def get_queryset(self): + return self.request.organizer.gates.all() + + +class GateCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): + model = Gate + template_name = 'pretixcontrol/organizers/gate_edit.html' + permission = 'can_change_organizer_settings' + form_class = GateForm + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['organizer'] = self.request.organizer + return kwargs + + def get_object(self, queryset=None): + return get_object_or_404(Gate, organizer=self.request.organizer, pk=self.kwargs.get('gate')) + + def get_success_url(self): + return reverse('control:organizer.gates', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + def form_valid(self, form): + messages.success(self.request, _('The gate has been created.')) + form.instance.organizer = self.request.organizer + ret = super().form_valid(form) + form.instance.log_action('pretix.gate.created', user=self.request.user, data={ + k: getattr(self.object, k) for k in form.changed_data + }) + return ret + + def form_invalid(self, form): + messages.error(self.request, _('Your changes could not be saved.')) + return super().form_invalid(form) + + +class GateUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): + model = Gate + template_name = 'pretixcontrol/organizers/gate_edit.html' + permission = 'can_change_organizer_settings' + context_object_name = 'gate' + form_class = GateForm + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['organizer'] = self.request.organizer + return kwargs + + def get_object(self, queryset=None): + return get_object_or_404(Gate, organizer=self.request.organizer, pk=self.kwargs.get('gate')) + + def get_success_url(self): + return reverse('control:organizer.gates', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + def form_valid(self, form): + if form.has_changed(): + self.object.log_action('pretix.gate.changed', user=self.request.user, data={ + k: getattr(self.object, k) + for k in form.changed_data + }) + messages.success(self.request, _('Your changes have been saved.')) + return super().form_valid(form) + + def form_invalid(self, form): + messages.error(self.request, _('Your changes could not be saved.')) + return super().form_invalid(form) + + +class GateDeleteView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DeleteView): + model = Gate + template_name = 'pretixcontrol/organizers/gate_delete.html' + permission = 'can_change_organizer_settings' + context_object_name = 'gate' + + def get_object(self, queryset=None): + return get_object_or_404(Gate, organizer=self.request.organizer, pk=self.kwargs.get('gate')) + + def get_success_url(self): + return reverse('control:organizer.gates', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + @transaction.atomic + def form_valid(self, form): + success_url = self.get_success_url() + self.object = self.get_object() + self.object.log_action('pretix.gate.deleted', user=self.request.user) + self.object.delete() + messages.success(self.request, _('The selected gate has been deleted.')) + return redirect(success_url) \ No newline at end of file diff --git a/src/pretix/control/views/organizer_views/gift_card_view.py b/src/pretix/control/views/organizer_views/gift_card_view.py new file mode 100644 index 000000000..ebc934871 --- /dev/null +++ b/src/pretix/control/views/organizer_views/gift_card_view.py @@ -0,0 +1,279 @@ +import json +from decimal import Decimal + +from django.conf import settings +from django.contrib import messages +from django.core.exceptions import ValidationError +from django.db import transaction +from django.db.models import OuterRef, Subquery, Sum +from django.db.models.functions import Coalesce +from django.forms import DecimalField +from django.shortcuts import get_object_or_404, redirect +from django.urls import reverse +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _ +from django.views.generic import CreateView, DetailView, ListView, UpdateView + +from pretix.base.models.giftcards import ( + GiftCard, GiftCardTransaction, gen_giftcard_secret, +) +from pretix.base.models.orders import OrderPayment +from pretix.base.models.organizer import Organizer +from pretix.base.payment import PaymentException +from pretix.control.forms.filter import GiftCardFilterForm +from pretix.control.forms.organizer_forms import ( + GiftCardCreateForm, GiftCardUpdateForm, +) +from pretix.control.permissions import OrganizerPermissionRequiredMixin +from pretix.control.views.organizer_views.organizer_detail_view_mixin import ( + OrganizerDetailViewMixin, +) + + +class GiftCardListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): + model = GiftCard + template_name = 'pretixcontrol/organizers/giftcards.html' + permission = 'can_manage_gift_cards' + context_object_name = 'giftcards' + paginate_by = 50 + + def get_queryset(self): + s = GiftCardTransaction.objects.filter( + card=OuterRef('pk') + ).order_by().values('card').annotate(s=Sum('value')).values('s') + qs = self.request.organizer.issued_gift_cards.annotate( + cached_value=Coalesce(Subquery(s), Decimal('0.00')) + ).order_by('-issuance') + if self.filter_form.is_valid(): + qs = self.filter_form.filter_qs(qs) + return qs + + def post(self, request, *args, **kwargs): + if "add" in request.POST: + o = self.request.user.get_organizers_with_permission( + 'can_manage_gift_cards', self.request + ).exclude(pk=self.request.organizer.pk).filter( + slug=request.POST.get("add") + ).first() + if o: + self.request.organizer.gift_card_issuer_acceptance.get_or_create( + issuer=o + ) + self.request.organizer.log_action( + 'pretix.giftcards.acceptance.added', + data={'issuer': o.slug}, + user=request.user + ) + messages.success(self.request, _('The selected gift card issuer has been added.')) + if "del" in request.POST: + o = Organizer.objects.filter( + slug=request.POST.get("del") + ).first() + if o: + self.request.organizer.gift_card_issuer_acceptance.filter( + issuer=o + ).delete() + self.request.organizer.log_action( + 'pretix.giftcards.acceptance.removed', + data={'issuer': o.slug}, + user=request.user + ) + messages.success(self.request, _('The selected gift card issuer has been removed.')) + return redirect(reverse('control:organizer.giftcards', kwargs={'organizer': self.request.organizer.slug})) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['filter_form'] = self.filter_form + ctx['other_organizers'] = self.request.user.get_organizers_with_permission( + 'can_manage_gift_cards', self.request + ).exclude(pk=self.request.organizer.pk) + return ctx + + @cached_property + def filter_form(self): + return GiftCardFilterForm(data=self.request.GET, request=self.request) + + +class GiftCardDetailView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView): + template_name = 'pretixcontrol/organizers/giftcard.html' + permission = 'can_manage_gift_cards' + context_object_name = 'card' + + def get_object(self, queryset=None) -> Organizer: + return get_object_or_404( + self.request.organizer.issued_gift_cards, + pk=self.kwargs.get('giftcard') + ) + + @transaction.atomic() + def post(self, request, *args, **kwargs): + self.object = GiftCard.objects.select_for_update().get(pk=self.get_object().pk) + if 'revert' in request.POST: + t = get_object_or_404(self.object.transactions.all(), pk=request.POST.get('revert'), order__isnull=False) + if self.object.value - t.value < Decimal('0.00'): + messages.error(request, _('Gift cards are not allowed to have negative values.')) + elif t.value > 0: + r = t.order.payments.create( + order=t.order, + state=OrderPayment.PAYMENT_STATE_CREATED, + amount=t.value, + provider='giftcard', + info=json.dumps({ + 'gift_card': self.object.pk, + 'retry': True, + }) + ) + try: + r.payment_provider.execute_payment(request, r) + except PaymentException as e: + with transaction.atomic(): + r.state = OrderPayment.PAYMENT_STATE_FAILED + r.save() + t.order.log_action('pretix.event.order.payment.failed', { + 'local_id': r.local_id, + 'provider': r.provider, + 'error': str(e) + }) + messages.error(request, _('The transaction could not be reversed.')) + else: + messages.success(request, _('The transaction has been reversed.')) + elif 'value' in request.POST: + try: + value = DecimalField(localize=True).to_python(request.POST.get('value')) + except ValidationError: + messages.error(request, _('Your input was invalid, please try again.')) + else: + if self.object.value + value < Decimal('0.00'): + messages.error(request, _('Gift cards are not allowed to have negative values.')) + else: + self.object.transactions.create( + value=value, + text=request.POST.get('text') or None, + ) + self.object.log_action( + 'pretix.giftcards.transaction.manual', + data={ + 'value': value, + 'text': request.POST.get('text') + }, + user=self.request.user, + ) + messages.success(request, _('The manual transaction has been saved.')) + return redirect(reverse( + 'control:organizer.giftcard', + kwargs={ + 'organizer': request.organizer.slug, + 'giftcard': self.object.pk + } + )) + return self.get(request, *args, **kwargs) + + +class GiftCardCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): + template_name = 'pretixcontrol/organizers/giftcard_create.html' + permission = 'can_manage_gift_cards' + form_class = GiftCardCreateForm + success_url = 'invalid' + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + any_event = self.request.organizer.events.first() + kwargs['initial'] = { + 'currency': any_event.currency if any_event else settings.DEFAULT_CURRENCY, + 'secret': gen_giftcard_secret(self.request.organizer.settings.giftcard_length) + } + kwargs['organizer'] = self.request.organizer + return kwargs + + @transaction.atomic() + def post(self, request, *args, **kwargs): + return super().post(request, *args, **kwargs) + + def form_valid(self, form): + messages.success(self.request, _('The gift card has been created and can now be used.')) + form.instance.issuer = self.request.organizer + super().form_valid(form) + form.instance.transactions.create( + value=form.cleaned_data['value'] + ) + form.instance.log_action('pretix.giftcards.created', user=self.request.user, data={}) + if form.cleaned_data['value']: + form.instance.log_action('pretix.giftcards.transaction.manual', user=self.request.user, data={ + 'value': form.cleaned_data['value'] + }) + return redirect(reverse( + 'control:organizer.giftcard', + kwargs={ + 'organizer': self.request.organizer.slug, + 'giftcard': self.object.pk + } + )) + + +class GiftCardCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): + template_name = 'pretixcontrol/organizers/giftcard_create.html' + permission = 'can_manage_gift_cards' + form_class = GiftCardCreateForm + success_url = 'invalid' + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + any_event = self.request.organizer.events.first() + kwargs['initial'] = { + 'currency': any_event.currency if any_event else settings.DEFAULT_CURRENCY, + 'secret': gen_giftcard_secret(self.request.organizer.settings.giftcard_length) + } + kwargs['organizer'] = self.request.organizer + return kwargs + + @transaction.atomic() + def post(self, request, *args, **kwargs): + return super().post(request, *args, **kwargs) + + def form_valid(self, form): + messages.success(self.request, _('The gift card has been created and can now be used.')) + form.instance.issuer = self.request.organizer + super().form_valid(form) + form.instance.transactions.create( + value=form.cleaned_data['value'] + ) + form.instance.log_action('pretix.giftcards.created', user=self.request.user, data={}) + if form.cleaned_data['value']: + form.instance.log_action('pretix.giftcards.transaction.manual', user=self.request.user, data={ + 'value': form.cleaned_data['value'] + }) + return redirect(reverse( + 'control:organizer.giftcard', + kwargs={ + 'organizer': self.request.organizer.slug, + 'giftcard': self.object.pk + } + )) + + +class GiftCardUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): + template_name = 'pretixcontrol/organizers/giftcard_edit.html' + permission = 'can_manage_gift_cards' + form_class = GiftCardUpdateForm + success_url = 'invalid' + context_object_name = 'card' + model = GiftCard + + def get_object(self, queryset=None) -> Organizer: + return get_object_or_404( + self.request.organizer.issued_gift_cards, + pk=self.kwargs.get('giftcard') + ) + + @transaction.atomic() + def form_valid(self, form): + messages.success(self.request, _('The gift card has been changed.')) + super().form_valid(form) + form.instance.log_action('pretix.giftcards.modified', user=self.request.user, data=dict(form.cleaned_data)) + return redirect(reverse( + 'control:organizer.giftcard', + kwargs={ + 'organizer': self.request.organizer.slug, + 'giftcard': self.object.pk + } + )) \ No newline at end of file diff --git a/src/pretix/control/views/organizer_views/mail_settings_preview.py b/src/pretix/control/views/organizer_views/mail_settings_preview.py new file mode 100644 index 000000000..b55c086d7 --- /dev/null +++ b/src/pretix/control/views/organizer_views/mail_settings_preview.py @@ -0,0 +1,76 @@ +import re + +from django.conf import settings +from django.http import HttpResponseBadRequest, JsonResponse +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _ +from django.views import View + +from pretix.base.i18n import language +from pretix.base.templatetags.rich_text import markdown_compile_email +from pretix.control.forms.organizer_forms import MailSettingsForm +from pretix.control.permissions import OrganizerPermissionRequiredMixin + + +class MailSettingsPreview(OrganizerPermissionRequiredMixin, View): + permission = 'can_change_organizer_settings' + + class SafeDict(dict): + def __missing__(self, key): + return '{' + key + '}' + + @cached_property + def supported_locale(self): + locales = {} + for idx, val in enumerate(settings.LANGUAGES): + if val[0] in self.request.organizer.settings.locales: + locales[str(idx)] = val[0] + return locales + + def placeholders(self, item): + ctx = {} + for p, s in MailSettingsForm(obj=self.request.organizer)._get_sample_context( + MailSettingsForm.base_context[item]).items(): + if s.strip().startswith('*'): + ctx[p] = s + else: + ctx[p] = '{}'.format( + _('This value will be replaced based on dynamic parameters.'), + s + ) + return self.SafeDict(ctx) + + def post(self, request, *args, **kwargs): + """ + Handles the POST request to generate a preview of email messages in different locales. + + Args: + request (HttpRequest): The HTTP request object. + *args: Variable length argument list. + **kwargs: Arbitrary keyword arguments. + + Returns: + JsonResponse: A JSON response containing the item and the compiled messages for each locale. + HttpResponseBadRequest: If the preview item is invalid. + """ + preview_item = request.POST.get('item', '') + if preview_item not in MailSettingsForm.base_context: + return HttpResponseBadRequest(_('Invalid item')) + + regex = r"^" + re.escape(preview_item) + r"_(?P[\d+])$" + msgs = {} + + for k, v in request.POST.items(): + matched = re.search(regex, k) + if matched: + idx = matched.group('idx') + if idx in self.supported_locale: + with language(self.supported_locale[idx], self.request.organizer.settings.region): + msgs[self.supported_locale[idx]] = markdown_compile_email( + v.format_map(self.placeholders(preview_item)) + ) + + return JsonResponse({ + 'item': preview_item, + 'msgs': msgs + }) \ No newline at end of file diff --git a/src/pretix/control/views/organizer_views/organizer_detail_view_mixin.py b/src/pretix/control/views/organizer_views/organizer_detail_view_mixin.py new file mode 100644 index 000000000..695f11a38 --- /dev/null +++ b/src/pretix/control/views/organizer_views/organizer_detail_view_mixin.py @@ -0,0 +1,18 @@ +from pretix.base.models.organizer import Organizer +from pretix.control.signals import nav_organizer + + +class OrganizerDetailViewMixin: + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['nav_organizer'] = [] + ctx['organizer'] = self.request.organizer + + for recv, retv in nav_organizer.send(sender=self.request.organizer, request=self.request, + organizer=self.request.organizer): + ctx['nav_organizer'] += retv + ctx['nav_organizer'].sort(key=lambda n: n['label']) + return ctx + + def get_object(self, queryset=None) -> Organizer: + return self.request.organizer \ No newline at end of file diff --git a/src/pretix/control/views/organizer_views/organizer_view.py b/src/pretix/control/views/organizer_views/organizer_view.py new file mode 100644 index 000000000..c278daf88 --- /dev/null +++ b/src/pretix/control/views/organizer_views/organizer_view.py @@ -0,0 +1,391 @@ +from django.contrib import messages +from django.core.exceptions import PermissionDenied, ValidationError +from django.core.files import File +from django.db import transaction +from django.db.models import Max, Min, Prefetch, ProtectedError +from django.db.models.functions import Coalesce, Greatest +from django.shortcuts import redirect +from django.urls import reverse +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _ +from django.views import View +from django.views.generic import ( + CreateView, DetailView, FormView, ListView, UpdateView, +) + +from pretix.base.models.event import Event, EventMetaValue +from pretix.base.models.organizer import Organizer, Team +from pretix.base.settings import SETTINGS_AFFECTING_CSS +from pretix.control.forms.filter import EventFilterForm, OrganizerFilterForm +from pretix.control.forms.organizer import OrganizerFooterLinkFormset +from pretix.control.forms.organizer_forms import ( + MailSettingsForm, OrganizerDeleteForm, OrganizerForm, + OrganizerSettingsForm, OrganizerUpdateForm, +) +from pretix.control.permissions import ( + AdministratorPermissionRequiredMixin, OrganizerPermissionRequiredMixin, +) +from pretix.control.signals import nav_organizer +from pretix.control.views import PaginationMixin +from pretix.presale.style import regenerate_organizer_css + +from .organizer_detail_view_mixin import OrganizerDetailViewMixin + + +class OrganizerCreate(CreateView): + model = Organizer + form_class = OrganizerForm + template_name = 'pretixcontrol/organizers/create.html' + context_object_name = 'organizer' + + def dispatch(self, request, *args, **kwargs): + if not request.user.has_active_staff_session(self.request.session.session_key): + raise PermissionDenied() # TODO + return super().dispatch(request, *args, **kwargs) + + @transaction.atomic + def form_valid(self, form): + messages.success(self.request, _('The new organizer has been created.')) + ret = super().form_valid(form) + t = Team.objects.create( + organizer=form.instance, name=_('Administrators'), + all_events=True, can_create_events=True, can_change_teams=True, can_manage_gift_cards=True, + can_change_organizer_settings=True, can_change_event_settings=True, can_change_items=True, + can_view_orders=True, can_change_orders=True, can_view_vouchers=True, can_change_vouchers=True + ) + t.members.add(self.request.user) + return ret + + def get_success_url(self) -> str: + return reverse('control:organizer', kwargs={ + 'organizer': self.object.slug, + }) + + +class OrganizerUpdate(OrganizerPermissionRequiredMixin, UpdateView): + model = Organizer + form_class = OrganizerUpdateForm + template_name = 'pretixcontrol/organizers/edit.html' + permission = 'can_change_organizer_settings' + context_object_name = 'organizer' + + @cached_property + def object(self) -> Organizer: + return self.request.organizer + + def get_object(self, queryset=None) -> Organizer: + return self.object + + @cached_property + def sform(self): + return OrganizerSettingsForm( + obj=self.object, + prefix='settings', + data=self.request.POST if self.request.method == 'POST' else None, + files=self.request.FILES if self.request.method == 'POST' else None + ) + + def get_context_data(self, *args, **kwargs) -> dict: + context = super().get_context_data(*args, **kwargs) + context['sform'] = self.sform + context['footer_links_formset'] = self.footer_links_formset + return context + + @transaction.atomic + def form_valid(self, form): + self.sform.save() + self.save_footer_links_formset(self.object) + change_css = False + if self.sform.has_changed(): + self.request.organizer.log_action( + 'pretix.organizer.settings', + user=self.request.user, + data={ + k: (self.sform.cleaned_data.get(k).name + if isinstance(self.sform.cleaned_data.get(k), File) + else self.sform.cleaned_data.get(k)) + for k in self.sform.changed_data + } + ) + if any(p in self.sform.changed_data for p in SETTINGS_AFFECTING_CSS): + change_css = True + if self.footer_links_formset.has_changed(): + self.request.organizer.log_action('eventyay.organizer.footerlinks.changed', + user=self.request.user, + data={ + 'data': self.footer_links_formset.cleaned_data + }) + if form.has_changed(): + self.request.organizer.log_action( + 'pretix.organizer.changed', + user=self.request.user, + data={k: form.cleaned_data.get(k) for k in form.changed_data} + ) + + if change_css: + regenerate_organizer_css.apply_async(args=(self.request.organizer.pk,)) + messages.success(self.request, _('Your changes have been saved. Please note that it can ' + 'take a short period of time until your changes become ' + 'active.')) + else: + messages.success(self.request, _('Your changes have been saved.')) + return super().form_valid(form) + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + if self.request.user.has_active_staff_session(self.request.session.session_key): + kwargs['domain'] = True + kwargs['change_slug'] = True + return kwargs + + def get_success_url(self) -> str: + return reverse('control:organizer.edit', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + form = self.get_form() + if form.is_valid() and self.sform.is_valid() and self.footer_links_formset.is_valid(): + return self.form_valid(form) + else: + return self.form_invalid(form) + @cached_property + def footer_links_formset(self): + return OrganizerFooterLinkFormset(self.request.POST if self.request.method == "POST" else None, + organizer=self.object, + prefix="footer-links", + instance=self.object) + + def save_footer_links_formset(self, obj): + self.footer_links_formset.save() + + +class OrganizerDelete(AdministratorPermissionRequiredMixin, FormView): + model = Organizer + template_name = 'pretixcontrol/organizers/delete.html' + context_object_name = 'organizer' + form_class = OrganizerDeleteForm + + def post(self, request, *args, **kwargs): + if not self.request.organizer.allow_delete(): + messages.error(self.request, _('This organizer can not be deleted.')) + return self.get(self.request, *self.args, **self.kwargs) + return super().post(request, *args, **kwargs) + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['organizer'] = self.request.organizer + return kwargs + + def form_valid(self, form): + try: + with transaction.atomic(): + self.request.user.log_action( + 'pretix.organizer.deleted', user=self.request.user, + data={ + 'organizer_id': self.request.organizer.pk, + 'name': str(self.request.organizer.name), + 'logentries': list(self.request.organizer.all_logentries().values_list('pk', flat=True)) + } + ) + self.request.organizer.delete_sub_objects() + self.request.organizer.delete() + messages.success(self.request, _('The organizer has been deleted.')) + return redirect(self.get_success_url()) + except ProtectedError: + messages.error(self.request, _('The organizer could not be deleted as some constraints (e.g. data created by ' + 'plug-ins) do not allow it.')) + return self.get(self.request, *self.args, **self.kwargs) + + def get_success_url(self) -> str: + return reverse('control:index') + +class OrganizerDisplaySettings(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, View): + permission = None + + def get(self, request, *wargs, **kwargs): + return redirect(reverse('control:organizer.edit', kwargs={ + 'organizer': self.request.organizer.slug, + }) + '#tab-0-3-open') + + +class OrganizerSettingsFormView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, FormView): + model = Organizer + permission = 'can_change_organizer_settings' + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['obj'] = self.request.organizer + return kwargs + + @transaction.atomic + def post(self, request, *args, **kwargs): + form = self.get_form() + if form.is_valid(): + form.save() + if form.has_changed(): + self.request.organizer.log_action( + 'pretix.organizer.settings', user=self.request.user, data={ + k: (form.cleaned_data.get(k).name + if isinstance(form.cleaned_data.get(k), File) + else form.cleaned_data.get(k)) + for k in form.changed_data + } + ) + messages.success(self.request, _('Your changes have been saved.')) + return redirect(self.get_success_url()) + else: + messages.error(self.request, _('We could not save your changes. See below for details.')) + return self.get(request) + + +class OrganizerMailSettings(OrganizerSettingsFormView): + form_class = MailSettingsForm + template_name = 'pretixcontrol/organizers/mail.html' + permission = 'can_change_organizer_settings' + + def get_success_url(self): + return reverse('control:organizer.settings.mail', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + @transaction.atomic + def post(self, request, *args, **kwargs): + """ + Handles POST requests to process the form, save changes, log actions, and test SMTP settings if requested. + + Args: + request (HttpRequest): The HTTP request object. + *args: Variable length argument list. + **kwargs: Arbitrary keyword arguments. + + Returns: + HttpResponse: Redirects to the success URL if the form is valid, otherwise re-renders the form with errors. + """ + form = self.get_form() + + if form.is_valid(): + form.save() + + if form.has_changed(): + self.request.organizer.log_action( + 'pretix.organizer.settings', user=self.request.user, data={ + k: form.cleaned_data.get(k) for k in form.changed_data + } + ) + + if request.POST.get('test', '0').strip() == '1': + backend = self.request.organizer.get_mail_backend(force_custom=True, timeout=10) + try: + backend.test(self.request.organizer.settings.mail_from) + except Exception as e: + messages.warning(self.request, _('An error occurred while contacting the SMTP server: %s') % str(e)) + else: + success_message = _( + 'Your changes have been saved and the connection attempt to your SMTP server was successful.') \ + if form.cleaned_data.get('smtp_use_custom') else \ + _('We\'ve been able to contact the SMTP server you configured. Remember to check ' + 'the "use custom SMTP server" checkbox, otherwise your SMTP server will not be used.') + messages.success(self.request, success_message) + else: + messages.success(self.request, _('Your changes have been saved.')) + + return redirect(self.get_success_url()) + + messages.error(self.request, _('We could not save your changes. See below for details.')) + return self.get(request) + + +class OrganizerTeamView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView): + model = Organizer + template_name = 'pretixcontrol/organizers/teams.html' + permission = 'can_change_permissions' + context_object_name = 'organizer' + + +class OrganizerDetail(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): + model = Event + template_name = 'pretixcontrol/organizers/detail.html' + permission = None + context_object_name = 'events' + paginate_by = 50 + + @property + def organizer(self): + return self.request.organizer + + def get_queryset(self): + qs = self.request.user.get_events_with_any_permission(self.request).select_related('organizer').prefetch_related( + 'organizer', '_settings_objects', 'organizer___settings_objects', + 'organizer__meta_properties', + Prefetch( + 'meta_values', + EventMetaValue.objects.select_related('property'), + to_attr='meta_values_cached' + ) + ).filter(organizer=self.request.organizer).order_by('-date_from') + qs = qs.annotate( + min_from=Min('subevents__date_from'), + max_from=Max('subevents__date_from'), + max_to=Max('subevents__date_to'), + max_fromto=Greatest(Max('subevents__date_to'), Max('subevents__date_from')) + ).annotate( + order_from=Coalesce('min_from', 'date_from'), + order_to=Coalesce('max_fromto', 'max_to', 'max_from', 'date_to', 'date_from'), + ) + if self.filter_form.is_valid(): + qs = self.filter_form.filter_qs(qs) + return qs + + @cached_property + def filter_form(self): + return EventFilterForm(data=self.request.GET, request=self.request, organizer=self.organizer) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['filter_form'] = self.filter_form + ctx['meta_fields'] = [ + self.filter_form['meta_{}'.format(p.name)] for p in self.organizer.meta_properties.all() + ] + return ctx + + +class OrganizerDetailViewMixin: + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['nav_organizer'] = [] + ctx['organizer'] = self.request.organizer + + for recv, retv in nav_organizer.send(sender=self.request.organizer, request=self.request, + organizer=self.request.organizer): + ctx['nav_organizer'] += retv + ctx['nav_organizer'].sort(key=lambda n: n['label']) + return ctx + + def get_object(self, queryset=None) -> Organizer: + return self.request.organizer + + +class OrganizerList(PaginationMixin, ListView): + model = Organizer + context_object_name = 'organizers' + template_name = 'pretixcontrol/organizers/index.html' + + def get_queryset(self): + qs = Organizer.objects.all() + if self.filter_form.is_valid(): + qs = self.filter_form.filter_qs(qs) + if self.request.user.has_active_staff_session(self.request.session.session_key): + return qs + else: + return qs.filter(pk__in=self.request.user.teams.values_list('organizer', flat=True)) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['filter_form'] = self.filter_form + return ctx + + @cached_property + def filter_form(self): + return OrganizerFilterForm(data=self.request.GET, request=self.request) \ No newline at end of file diff --git a/src/pretix/control/views/organizer_views/sso_provider_view.py b/src/pretix/control/views/organizer_views/sso_provider_view.py new file mode 100644 index 000000000..8eff418de --- /dev/null +++ b/src/pretix/control/views/organizer_views/sso_provider_view.py @@ -0,0 +1,257 @@ + +from django.contrib import messages +from django.db import transaction +from django.shortcuts import get_object_or_404, redirect +from django.urls import reverse +from django.utils.translation import gettext_lazy as _ +from django.views.generic import CreateView, DeleteView, ListView, UpdateView + +from pretix.base.models.customers import CustomerSSOClient, CustomerSSOProvider +from pretix.control.forms.organizer_forms import SSOClientForm, SSOProviderForm +from pretix.control.permissions import OrganizerPermissionRequiredMixin +from pretix.control.views.organizer_views.organizer_detail_view_mixin import ( + OrganizerDetailViewMixin, +) +from pretix.multidomain.urlreverse import build_absolute_uri + + +class SSOProviderListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): + model = CustomerSSOProvider + template_name = 'pretixcontrol/organizers/ssoproviders.html' + permission = 'can_change_organizer_settings' + context_object_name = 'providers' + + def get_queryset(self): + return self.request.organizer.sso_providers.all() + + +class SSOProviderCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): + model = CustomerSSOProvider + template_name = 'pretixcontrol/organizers/ssoprovider_edit.html' + permission = 'can_change_organizer_settings' + form_class = SSOProviderForm + + def get_object(self, queryset=None): + return get_object_or_404(CustomerSSOProvider, organizer=self.request.organizer, pk=self.kwargs.get('provider')) + + def get_success_url(self): + return reverse('control:organizer.ssoproviders', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['event'] = self.request.organizer + return kwargs + + def form_valid(self, form): + messages.success(self.request, _('The provider has been created.')) + form.instance.organizer = self.request.organizer + ret = super().form_valid(form) + form.instance.log_action('pretix.ssoprovider.created', user=self.request.user, data={ + k: getattr(self.object, k, self.object.configuration.get(k)) for k in form.changed_data + }) + return ret + + def form_invalid(self, form): + messages.error(self.request, _('Your changes could not be saved.')) + return super().form_invalid(form) + + +class SSOProviderUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): + model = CustomerSSOProvider + template_name = 'pretixcontrol/organizers/ssoprovider_edit.html' + permission = 'can_change_organizer_settings' + context_object_name = 'provider' + form_class = SSOProviderForm + + def get_object(self, queryset=None): + return get_object_or_404(CustomerSSOProvider, organizer=self.request.organizer, pk=self.kwargs.get('provider')) + + def get_success_url(self): + return reverse('control:organizer.ssoproviders', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['redirect_uri'] = build_absolute_uri(self.request.organizer, 'presale:organizer.customer.login.return', + kwargs={ + 'provider': self.object.pk + }) + return ctx + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['event'] = self.request.organizer + return kwargs + + def form_valid(self, form): + if form.has_changed(): + self.object.log_action('pretix.ssoprovider.changed', user=self.request.user, data={ + k: getattr(self.object, k, self.object.configuration.get(k)) for k in form.changed_data + }) + messages.success(self.request, _('Your changes have been saved.')) + return super().form_valid(form) + + def form_invalid(self, form): + messages.error(self.request, _('Your changes could not be saved.')) + return super().form_invalid(form) + + +class SSOProviderDeleteView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DeleteView): + model = CustomerSSOProvider + template_name = 'pretixcontrol/organizers/ssoprovider_delete.html' + permission = 'can_change_organizer_settings' + context_object_name = 'provider' + + def get_object(self, queryset=None): + return get_object_or_404(CustomerSSOProvider, organizer=self.request.organizer, pk=self.kwargs.get('provider')) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['is_allowed'] = self.object.allow_delete() + return ctx + + def get_success_url(self): + return reverse('control:organizer.ssoproviders', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + @transaction.atomic + def delete(self, request, *args, **kwargs): + success_url = self.get_success_url() + self.object = self.get_object() + if self.object.allow_delete(): + self.object.log_action('pretix.ssoprovider.deleted', user=self.request.user) + self.object.delete() + messages.success(request, _('The selected object has been deleted.')) + return redirect(success_url) + + +class SSOClientListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): + model = CustomerSSOClient + template_name = 'pretixcontrol/organizers/ssoclients.html' + permission = 'can_change_organizer_settings' + context_object_name = 'clients' + + def get_queryset(self): + return self.request.organizer.sso_clients.all() + + +class SSOClientCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): + model = CustomerSSOClient + template_name = 'pretixcontrol/organizers/ssoclient_edit.html' + permission = 'can_change_organizer_settings' + form_class = SSOClientForm + + def get_object(self, queryset=None): + return get_object_or_404(CustomerSSOClient, organizer=self.request.organizer, pk=self.kwargs.get('client')) + + def get_success_url(self): + return reverse('control:organizer.ssoclient.edit', kwargs={ + 'organizer': self.request.organizer.slug, + 'client': self.object.pk + }) + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['event'] = self.request.organizer + return kwargs + + def form_valid(self, form): + secret = form.instance.set_client_secret() + messages.success( + self.request, + _('The SSO client has been created. Please note down the following client secret, it will never be shown ' + 'again: {secret}').format(secret=secret) + ) + form.instance.organizer = self.request.organizer + ret = super().form_valid(form) + form.instance.log_action('pretix.ssoclient.created', user=self.request.user, data={ + k: getattr(self.object, k, form.cleaned_data.get(k)) for k in form.changed_data + }) + return ret + + def form_invalid(self, form): + messages.error(self.request, _('Your changes could not be saved.')) + return super().form_invalid(form) + + +class SSOClientUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): + model = CustomerSSOClient + template_name = 'pretixcontrol/organizers/ssoclient_edit.html' + permission = 'can_change_organizer_settings' + context_object_name = 'client' + form_class = SSOClientForm + + def get_object(self, queryset=None): + return get_object_or_404(CustomerSSOClient, organizer=self.request.organizer, pk=self.kwargs.get('client')) + + def get_success_url(self): + return reverse('control:organizer.ssoclient.edit', kwargs={ + 'organizer': self.request.organizer.slug, + 'client': self.object.pk + }) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + return ctx + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['event'] = self.request.organizer + return kwargs + + def form_valid(self, form): + if form.has_changed(): + self.object.log_action('pretix.ssoclient.changed', user=self.request.user, data={ + k: getattr(self.object, k, form.cleaned_data.get(k)) for k in form.changed_data + }) + if form.cleaned_data.get('regenerate_client_secret'): + secret = form.instance.set_client_secret() + messages.success( + self.request, + _('Your changes have been saved. Please note down the following client secret, it will never be shown ' + 'again: {secret}').format(secret=secret) + ) + else: + messages.success( + self.request, + _('Your changes have been saved.') + ) + return super().form_valid(form) + + def form_invalid(self, form): + messages.error(self.request, _('Your changes could not be saved.')) + return super().form_invalid(form) + + +class SSOClientDeleteView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DeleteView): + model = CustomerSSOClient + template_name = 'pretixcontrol/organizers/ssoclient_delete.html' + permission = 'can_change_organizer_settings' + context_object_name = 'client' + + def get_object(self, queryset=None): + return get_object_or_404(CustomerSSOClient, organizer=self.request.organizer, pk=self.kwargs.get('client')) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['is_allowed'] = self.object.allow_delete() + return ctx + + def get_success_url(self): + return reverse('control:organizer.ssoclients', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + @transaction.atomic + def delete(self, request, *args, **kwargs): + success_url = self.get_success_url() + self.object = self.get_object() + if self.object.allow_delete(): + self.object.log_action('pretix.ssoclient.deleted', user=self.request.user) + self.object.delete() + messages.success(request, _('The selected object has been deleted.')) + return redirect(success_url) diff --git a/src/pretix/control/views/organizer_views/team_view.py b/src/pretix/control/views/organizer_views/team_view.py new file mode 100644 index 000000000..be90a5e6e --- /dev/null +++ b/src/pretix/control/views/organizer_views/team_view.py @@ -0,0 +1,327 @@ +from django.contrib import messages +from django.db import transaction +from django.db.models import Count +from django.shortcuts import get_object_or_404, redirect +from django.urls import reverse +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _ +from django.views.generic import ( + CreateView, DeleteView, DetailView, ListView, UpdateView, +) + +from pretix.base.auth import get_auth_backends +from pretix.base.models.auth import User +from pretix.base.models.organizer import Team, TeamAPIToken, TeamInvite +from pretix.base.services.mail import SendMailException, mail +from pretix.control.forms.organizer_forms.team_form import TeamForm +from pretix.control.permissions import OrganizerPermissionRequiredMixin +from pretix.control.views.organizer import InviteForm, TokenForm +from pretix.control.views.organizer_views.organizer_detail_view_mixin import ( + OrganizerDetailViewMixin, +) +from pretix.helpers.urls import build_absolute_uri as build_global_uri + + +class TeamCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): + model = Team + template_name = 'pretixcontrol/organizers/team_edit.html' + permission = 'can_change_teams' + form_class = TeamForm + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['organizer'] = self.request.organizer + return kwargs + + def get_object(self, queryset=None): + return get_object_or_404(Team, organizer=self.request.organizer, pk=self.kwargs.get('team')) + + def get_success_url(self): + return reverse('control:organizer.team', kwargs={ + 'organizer': self.request.organizer.slug, + 'team': self.object.pk + }) + + def form_valid(self, form): + messages.success(self.request, _('The team has been created. You can now add members to the team.')) + form.instance.organizer = self.request.organizer + ret = super().form_valid(form) + form.instance.members.add(self.request.user) + form.instance.log_action('pretix.team.created', user=self.request.user, data={ + k: getattr(self.object, k) if k != 'limit_events' else [e.id for e in getattr(self.object, k).all()] + for k in form.changed_data + }) + return ret + + def form_invalid(self, form): + messages.error(self.request, _('Your changes could not be saved.')) + return super().form_invalid(form) + + +class TeamDeleteView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DeleteView): + model = Team + template_name = 'pretixcontrol/organizers/team_delete.html' + permission = 'can_change_teams' + context_object_name = 'team' + + def get_object(self, queryset=None): + return get_object_or_404(Team, organizer=self.request.organizer, pk=self.kwargs.get('team')) + + def get_success_url(self): + return reverse('control:organizer.teams', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + def get_context_data(self, *args, **kwargs) -> dict: + context = super().get_context_data(*args, **kwargs) + context['possible'] = self.is_allowed() + return context + + def is_allowed(self) -> bool: + return self.request.organizer.teams.exclude(pk=self.kwargs.get('team')).filter( + can_change_teams=True, members__isnull=False + ).exists() + + @transaction.atomic + def form_valid(self, form): + success_url = self.get_success_url() + self.object = self.get_object() + if self.is_allowed(): + self.object.log_action('pretix.team.deleted', user=self.request.user) + self.object.delete() + messages.success(self.request, _('The selected team has been deleted.')) + return redirect(success_url) + else: + messages.error(self.request, _('The selected team cannot be deleted.')) + return redirect(success_url) + + +class TeamListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): + model = Team + template_name = 'pretixcontrol/organizers/teams.html' + permission = 'can_change_teams' + context_object_name = 'teams' + + def get_queryset(self): + return self.request.organizer.teams.annotate( + memcount=Count('members', distinct=True), + eventcount=Count('limit_events', distinct=True), + invcount=Count('invites', distinct=True) + ).all().order_by('name') + + +class TeamMemberView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView): + template_name = 'pretixcontrol/organizers/team_members.html' + context_object_name = 'team' + permission = 'can_change_teams' + model = Team + + def get_object(self, queryset=None): + return get_object_or_404(Team, organizer=self.request.organizer, pk=self.kwargs.get('team')) + + @cached_property + def add_form(self): + return InviteForm(data=(self.request.POST + if self.request.method == "POST" and "user" in self.request.POST else None)) + + @cached_property + def add_token_form(self): + return TokenForm(data=(self.request.POST + if self.request.method == "POST" and "name" in self.request.POST else None)) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['add_form'] = self.add_form + ctx['add_token_form'] = self.add_token_form + return ctx + + def _send_invite(self, instance): + try: + mail( + instance.email, + _('eventyay account invitation'), + 'pretixcontrol/email/invitation.txt', + { + 'user': self, + 'organizer': self.request.organizer.name, + 'team': instance.team.name, + 'url': build_global_uri('control:auth.invite', kwargs={ + 'token': instance.token + }) + }, + event=None, + locale=self.request.LANGUAGE_CODE + ) + except SendMailException: + pass # Already logged + + @transaction.atomic + def post(self, request, *args, **kwargs): + self.object = self.get_object() + + if 'remove-member' in request.POST: + try: + user = User.objects.get(pk=request.POST.get('remove-member')) + except (User.DoesNotExist, ValueError): + pass + else: + other_admin_teams = self.request.organizer.teams.exclude(pk=self.object.pk).filter( + can_change_teams=True, members__isnull=False + ).exists() + if not other_admin_teams and self.object.can_change_teams and self.object.members.count() == 1: + messages.error(self.request, _('You cannot remove the last member from this team as no one would ' + 'be left with the permission to change teams.')) + return redirect(self.get_success_url()) + else: + self.object.members.remove(user) + self.object.log_action( + 'pretix.team.member.removed', user=self.request.user, data={ + 'email': user.email, + 'user': user.pk + } + ) + messages.success(self.request, _('The member has been removed from the team.')) + return redirect(self.get_success_url()) + + elif 'remove-invite' in request.POST: + try: + invite = self.object.invites.get(pk=request.POST.get('remove-invite')) + except (TeamInvite.DoesNotExist, ValueError): + messages.error(self.request, _('Invalid invite selected.')) + return redirect(self.get_success_url()) + else: + invite.delete() + self.object.log_action( + 'pretix.team.invite.deleted', user=self.request.user, data={ + 'email': invite.email + } + ) + messages.success(self.request, _('The invite has been revoked.')) + return redirect(self.get_success_url()) + + elif 'resend-invite' in request.POST: + try: + invite = self.object.invites.get(pk=request.POST.get('resend-invite')) + except (TeamInvite.DoesNotExist, ValueError): + messages.error(self.request, _('Invalid invite selected.')) + return redirect(self.get_success_url()) + else: + self._send_invite(invite) + self.object.log_action( + 'pretix.team.invite.resent', user=self.request.user, data={ + 'email': invite.email + } + ) + messages.success(self.request, _('The invite has been resent.')) + return redirect(self.get_success_url()) + + elif 'remove-token' in request.POST: + try: + token = self.object.tokens.get(pk=request.POST.get('remove-token')) + except (TeamAPIToken.DoesNotExist, ValueError): + messages.error(self.request, _('Invalid token selected.')) + return redirect(self.get_success_url()) + else: + token.active = False + token.save() + self.object.log_action( + 'pretix.team.token.deleted', user=self.request.user, data={ + 'name': token.name + } + ) + messages.success(self.request, _('The token has been revoked.')) + return redirect(self.get_success_url()) + + elif "user" in self.request.POST and self.add_form.is_valid() and self.add_form.has_changed(): + + try: + user = User.objects.get(email__iexact=self.add_form.cleaned_data['user']) + except User.DoesNotExist: + if self.object.invites.filter(email__iexact=self.add_form.cleaned_data['user']).exists(): + messages.error(self.request, _('This user already has been invited for this team.')) + return self.get(request, *args, **kwargs) + if 'native' not in get_auth_backends(): + messages.error(self.request, _('Users need to have a pretix account before they can be invited.')) + return self.get(request, *args, **kwargs) + + invite = self.object.invites.create(email=self.add_form.cleaned_data['user']) + self._send_invite(invite) + self.object.log_action( + 'pretix.team.invite.created', user=self.request.user, data={ + 'email': self.add_form.cleaned_data['user'] + } + ) + messages.success(self.request, _('The new member has been invited to the team.')) + return redirect(self.get_success_url()) + else: + if self.object.members.filter(pk=user.pk).exists(): + messages.error(self.request, _('This user already has permissions for this team.')) + return self.get(request, *args, **kwargs) + + self.object.members.add(user) + self.object.log_action( + 'pretix.team.member.added', user=self.request.user, + data={ + 'email': user.email, + 'user': user.pk, + } + ) + messages.success(self.request, _('The new member has been added to the team.')) + return redirect(self.get_success_url()) + + elif "name" in self.request.POST and self.add_token_form.is_valid() and self.add_token_form.has_changed(): + token = self.object.tokens.create(name=self.add_token_form.cleaned_data['name']) + self.object.log_action( + 'pretix.team.token.created', user=self.request.user, data={ + 'name': self.add_token_form.cleaned_data['name'], + 'id': token.pk + } + ) + messages.success(self.request, _('A new API token has been created with the following secret: {}\n' + 'Please copy this secret to a safe place. You will not be able to ' + 'view it again here.').format(token.token)) + return redirect(self.get_success_url()) + else: + messages.error(self.request, _('Your changes could not be saved.')) + return self.get(request, *args, **kwargs) + + def get_success_url(self) -> str: + return reverse('control:organizer.team', kwargs={ + 'organizer': self.request.organizer.slug, + 'team': self.object.pk + }) + + +class TeamUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): + model = Team + template_name = 'pretixcontrol/organizers/team_edit.html' + permission = 'can_change_teams' + context_object_name = 'team' + form_class = TeamForm + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['organizer'] = self.request.organizer + return kwargs + + def get_object(self, queryset=None): + return get_object_or_404(Team, organizer=self.request.organizer, pk=self.kwargs.get('team')) + + def get_success_url(self): + return reverse('control:organizer.team', kwargs={ + 'organizer': self.request.organizer.slug, + 'team': self.object.pk + }) + + def form_valid(self, form): + if form.has_changed(): + self.object.log_action('pretix.team.changed', user=self.request.user, data={ + k: getattr(self.object, k) if k != 'limit_events' else [e.id for e in getattr(self.object, k).all()] + for k in form.changed_data + }) + messages.success(self.request, _('Your changes have been saved.')) + return super().form_valid(form) + + def form_invalid(self, form): + messages.error(self.request, _('Your changes could not be saved.')) + return super().form_invalid(form) \ No newline at end of file diff --git a/src/pretix/control/views/organizer_views/web_hook_view.py b/src/pretix/control/views/organizer_views/web_hook_view.py new file mode 100644 index 000000000..8b33e8e95 --- /dev/null +++ b/src/pretix/control/views/organizer_views/web_hook_view.py @@ -0,0 +1,121 @@ +from django.contrib import messages +from django.shortcuts import get_object_or_404 +from django.urls import reverse +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _ +from django.views.generic import CreateView, ListView, UpdateView + +from pretix.api.models import WebHook +from pretix.control.forms.organizer_forms import WebHookForm +from pretix.control.permissions import OrganizerPermissionRequiredMixin +from pretix.control.views.organizer_views.organizer_detail_view_mixin import ( + OrganizerDetailViewMixin, +) +from pretix.helpers.dicts import merge_dicts + + +class WebHookListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): + model = WebHook + template_name = 'pretixcontrol/organizers/webhooks.html' + permission = 'can_change_organizer_settings' + context_object_name = 'webhooks' + + def get_queryset(self): + return self.request.organizer.webhooks.prefetch_related('limit_events') + + +class WebHookCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView): + model = WebHook + template_name = 'pretixcontrol/organizers/webhook_edit.html' + permission = 'can_change_organizer_settings' + form_class = WebHookForm + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['organizer'] = self.request.organizer + return kwargs + + def get_success_url(self): + return reverse('control:organizer.webhooks', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + def form_valid(self, form): + form.instance.organizer = self.request.organizer + ret = super().form_valid(form) + self.request.organizer.log_action('pretix.webhook.created', user=self.request.user, data=merge_dicts({ + k: form.cleaned_data[k] if k != 'limit_events' else [e.id for e in getattr(self.object, k).all()] + for k in form.changed_data + }, {'id': form.instance.pk})) + new_listeners = set(form.cleaned_data['events']) + for l in new_listeners: + self.object.listeners.create(action_type=l) + return ret + + def form_invalid(self, form): + messages.error(self.request, _('Your changes could not be saved.')) + return super().form_invalid(form) + + +class WebHookUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView): + model = WebHook + template_name = 'pretixcontrol/organizers/webhook_edit.html' + permission = 'can_change_organizer_settings' + context_object_name = 'webhook' + form_class = WebHookForm + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs['organizer'] = self.request.organizer + return kwargs + + def get_object(self, queryset=None): + return get_object_or_404(WebHook, organizer=self.request.organizer, pk=self.kwargs.get('webhook')) + + def get_success_url(self): + return reverse('control:organizer.webhooks', kwargs={ + 'organizer': self.request.organizer.slug, + }) + + def form_valid(self, form): + if form.has_changed(): + self.request.organizer.log_action('pretix.webhook.changed', user=self.request.user, data=merge_dicts({ + k: form.cleaned_data[k] if k != 'limit_events' else [e.id for e in getattr(self.object, k).all()] + for k in form.changed_data + }, {'id': form.instance.pk})) + + current_listeners = set(self.object.listeners.values_list('action_type', flat=True)) + new_listeners = set(form.cleaned_data['events']) + for l in current_listeners - new_listeners: + self.object.listeners.filter(action_type=l).delete() + for l in new_listeners - current_listeners: + self.object.listeners.create(action_type=l) + + messages.success(self.request, _('Your changes have been saved.')) + return super().form_valid(form) + + def form_invalid(self, form): + messages.error(self.request, _('Your changes could not be saved.')) + return super().form_invalid(form) + + +class WebHookLogsView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView): + model = WebHook + template_name = 'pretixcontrol/organizers/webhook_logs.html' + permission = 'can_change_organizer_settings' + context_object_name = 'calls' + paginate_by = 50 + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['webhook'] = self.webhook + return ctx + + @cached_property + def webhook(self): + return get_object_or_404( + WebHook, organizer=self.request.organizer, pk=self.kwargs.get('webhook') + ) + + def get_queryset(self): + return self.webhook.calls.order_by('-datetime') \ No newline at end of file diff --git a/src/pretix/control/views/search.py b/src/pretix/control/views/search.py index 7f708bea4..4babe5daa 100644 --- a/src/pretix/control/views/search.py +++ b/src/pretix/control/views/search.py @@ -70,7 +70,7 @@ def get_queryset(self): if self.filter_form.cleaned_data.get('query'): """ - We need to work around a bug in PostgreSQL's (and likely MySQL's) query plan optimizer here. + We need to work around a bug in PostgreSQL's query plan optimizer here. The database lacks statistical data to predict how common our search filter is and therefore assumes that it is cheaper to first ORDER *all* orders in the system (since we got an index on datetime), then filter out with a full scan until OFFSET/LIMIT condition is fulfilled. If we diff --git a/src/pretix/control/views/typeahead.py b/src/pretix/control/views/typeahead.py index f2ab6e6a2..ed60fec4b 100644 --- a/src/pretix/control/views/typeahead.py +++ b/src/pretix/control/views/typeahead.py @@ -17,7 +17,9 @@ ItemVariation, Order, Organizer, User, Voucher, ) from pretix.control.forms.event import EventWizardCopyForm -from pretix.control.permissions import event_permission_required +from pretix.control.permissions import ( + event_permission_required, organizer_permission_required, +) from pretix.helpers.daterange import daterange from pretix.helpers.i18n import i18ncomp @@ -135,6 +137,47 @@ def event_list(request): return JsonResponse(doc) +@organizer_permission_required("can_manage_customers") +def customer_select2(request, **kwargs): + """ + Handles the Select2 AJAX requests for searching customers. Returns a paginated list of customers + matching the query. + + Args: + request (HttpRequest): The HTTP request object. + **kwargs: Arbitrary keyword arguments. + + Returns: + JsonResponse: A JSON response containing the search results and pagination information. + """ + query = request.GET.get('query', '') + + try: + page = int(request.GET.get('page', '1')) + except ValueError: + page = 1 + + pagesize = 20 + offset = (page - 1) * pagesize + + qs = request.organizer.customers.filter( + Q(email__icontains=query) | Q(name_cached__icontains=query) | Q(identifier__istartswith=query) + ).order_by('name_cached') + + total = qs.count() + results = [ + {'id': e.pk, 'text': str(e)} + for e in qs[offset:offset + pagesize] + ] + + doc = { + 'results': results, + 'pagination': {"more": total > (offset + pagesize)} + } + + return JsonResponse(doc) + + def nav_context_list(request): query = request.GET.get('query', '').strip() organizer = request.GET.get('organizer', None) diff --git a/src/pretix/helpers/compat.py b/src/pretix/helpers/compat.py index 344d02ddd..f9b3af12b 100644 --- a/src/pretix/helpers/compat.py +++ b/src/pretix/helpers/compat.py @@ -1,9 +1,49 @@ import datetime import sys +from django.forms import Form +from django.views.generic.detail import ( + BaseDetailView, SingleObjectTemplateResponseMixin, +) +from django.views.generic.edit import DeletionMixin, FormMixin + def date_fromisocalendar(isoyear, isoweek, isoday): if sys.version_info < (3, 8): return datetime.datetime.strptime(f'{isoyear}-W{isoweek}-{isoday}', "%G-W%V-%u") else: return datetime.datetime.fromisocalendar(isoyear, isoweek, isoday) + + +class CompatDeleteView(SingleObjectTemplateResponseMixin, DeletionMixin, FormMixin, BaseDetailView): + """ + This view combines the functionality of displaying a confirmation template, + handling form validation, and deleting the object upon form submission. + """ + form_class = Form + template_name_suffix = "_confirm_delete" + + def post(self, request, *args, **kwargs): + """ + Validate the form and delete the object if the form is valid. + + Parameters: + request (HttpRequest): The HTTP request object. + *args: Additional positional arguments. + **kwargs: Additional keyword arguments. + + Returns: + HttpResponse: The response after form validation. + """ + self.object = self.get_object() + form = self.get_form() + if form.is_valid(): + return self.form_valid(form) + else: + return self.form_invalid(form) + + def form_valid(self, form): + """ + Delete the object and redirect to the success URL. + """ + return self.delete(self.request, self.args, self.kwargs) diff --git a/src/pretix/helpers/database.py b/src/pretix/helpers/database.py index 764f1162b..b74eb1162 100644 --- a/src/pretix/helpers/database.py +++ b/src/pretix/helpers/database.py @@ -1,8 +1,9 @@ import contextlib -from django.db import transaction +from django.db import connection, transaction from django.db.models import Aggregate, Field, Lookup from django.db.models.expressions import OrderBy +from django.utils.functional import lazy class DummyRollbackException(Exception): @@ -105,3 +106,8 @@ def as_sql(self, compiler, connection): rhs, rhs_params = self.process_rhs(compiler, connection) params = lhs_params + rhs_params return '%s <> %s' % (lhs, rhs), params + +def _of_self(): + return ("self",) if connection.features.has_select_for_update_of else () + +OF_SELF = lazy(_of_self, tuple)() diff --git a/src/pretix/helpers/http.py b/src/pretix/helpers/http.py index ad7bc1b05..82c91c9c7 100644 --- a/src/pretix/helpers/http.py +++ b/src/pretix/helpers/http.py @@ -1,5 +1,5 @@ from django.conf import settings -from django.http import StreamingHttpResponse +from django.http import StreamingHttpResponse, HttpResponsePermanentRedirect, HttpResponseRedirect class ChunkBasedFileResponse(StreamingHttpResponse): @@ -19,3 +19,7 @@ def get_client_ip(request): if x_forwarded_for: ip = x_forwarded_for.split(',')[0] return ip + +def redirect_to_url(to, permanent=False): + redirect_class = HttpResponsePermanentRedirect if permanent else HttpResponseRedirect + return redirect_class(to) diff --git a/src/pretix/helpers/templatetags/jsonfield.py b/src/pretix/helpers/templatetags/jsonfield.py index 227171f69..b0274d2e8 100644 --- a/src/pretix/helpers/templatetags/jsonfield.py +++ b/src/pretix/helpers/templatetags/jsonfield.py @@ -9,6 +9,18 @@ def postgres_compile_json_path(key_transforms): return "{" + ','.join(key_transforms) + "}" +def sqlite_compile_json_path(key_transforms): + path = ['$'] + for key_transform in key_transforms: + try: + num = int(key_transform) + path.append('[{}]'.format(num)) + except ValueError: # non-integer + path.append('.') + path.append(key_transform) + return ''.join(path) + + class JSONExtract(Expression): def __init__(self, expression, *path, output_field=JSONField(), **extra): super().__init__(output_field=output_field) diff --git a/src/pretix/locale/ar/LC_MESSAGES/django.po b/src/pretix/locale/ar/LC_MESSAGES/django.po index d5574f95f..7542e4d94 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: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2020-07-30 19:00+0000\n" "Last-Translator: Abdullah \n" "Language-Team: Arabic " msgstr "<ملف>" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "تفريغ، إذا كان هذا المنتج ليس تذكرة الدخول" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "اسم الشركة" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "حدد الدولة" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "خلقت" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "قيد الانتظار" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "تم تأكيد" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "ألغيت" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "فشل" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "ردها" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "معلومات الدفع" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "تم تأكيد تسجيل الإيفينت: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "تم إستلام الدفع لطلبك: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "التي خارجيا" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "خلقت" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "في مرحلة انتقالية" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "منجز" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "فشل" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "ألغيت" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "منظم" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "زبون" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "خارجي" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Refund only" msgid "Refund reason" msgstr "برد فقط" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "دفع الرسوم" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "رسوم الشحن" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "رسوم الخدمة" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "رسوم الإلغاء" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "رسوم أخرى" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "كرت هدية" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "القيمة" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "موقف ترتيب" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "تسجيلك للإيفينت: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "ID العربة (مثل مفتاح جلسة)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "موقف العربة" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "مواقف العربة" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "فقط للعملاء من الشركات داخل الاتحاد الأوروبي." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "سيتم طباعة هذا المرجع على الفاتورة لراحتك." @@ -3787,7 +3787,7 @@ msgstr "" "هذا الخيار فقط بعد استشارة محامي الضرائب. لا تعطى لحساب الضريبة الصحيح " "الضمان. استخدام على مسؤوليتك الخاصة." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "بلد التاجر" @@ -4423,21 +4423,35 @@ msgstr "تحتاج إلى تحديد مقعد محددة." msgid "Ambiguous option selected." msgstr "تحديد خيار غير صالح." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "تطبيق" + +#: pretix/base/payment.py:54 +#, fuzzy +#| msgid "Android (Google Play)" +msgctxt "payment" +msgid "Google Pay" +msgstr "الروبوت (جوجل اللعب)" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "تمكين طريقة الدفع" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "المستخدمين لن تكون قادرة على اختيار هذا مزود خدمة الدفع بعد تاريخ معين." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "النص على الفواتير" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4448,11 +4462,11 @@ msgstr "" "استخدام هذا إذا تم إنشاء الفاتورة قبل دفع النظام. إذا تم إنشاء الفاتورة في " "وقت لاحق، وسوف تظهر نص يفيد أن قد تم دفعها." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "الحد الأدنى مجموع النظام" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4462,11 +4476,11 @@ msgstr "" "معينة. يمكن احتساب اجمالي أجل هذا الغرض دون أخذ الرسوم التي تفرضها طريقة " "الدفع هذه في الاعتبار." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "الحد الأقصى مجموع النظام" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4476,23 +4490,23 @@ msgstr "" "معينة. يمكن احتساب اجمالي أجل هذا الغرض دون أخذ الرسوم التي تفرضها طريقة " "الدفع هذه في الاعتبار." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "رسوم إضافية" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "قيمه مطلقه" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "النسبة المئوية من إجمالي الطلب." -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "حساب رسوم من القيمة الإجمالية بما في ذلك رسوم." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4505,11 +4519,11 @@ msgstr "" "هنا للحصول على معلومات مفصلة عن ما يفعل ذلك. لا ننسى لضبط رسوم الصحيحة " "أعلاه!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "تقييد للبلدان" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4518,7 +4532,7 @@ msgstr "" "فقط تسمح اختيار هذا مزود دفع لعناوين الفاتورة في بلدان مختارة. إذا لم تقم " "بتحديد أي بلد، يسمح لجميع البلدان. تم تمكين هذا فقط إذا مطلوب عنوان الفاتورة." -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 #, fuzzy #| msgid "" #| "Only allow the usage of this payment provider in the following sales " @@ -4527,58 +4541,58 @@ msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "إسمح بإستخدام مقدم المدفوعات هذا في القنوات التالية" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 #, fuzzy #| msgid "Enable payment method" msgid "Hide payment method" msgstr "تمكين طريقة الدفع" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 #, fuzzy #| msgid "Enable payment method" msgid "Link to enable payment method" msgstr "تمكين طريقة الدفع" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "تم استلام المبلغ عن هذه الفاتورة بالفعل." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "لا يتم اعتماد مبلغ معاد الأوتوماتيكية هذا المزود الدفع." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "جميع التذاكر في طلبك مجانية." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "شحن مجاني" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "شباك التذاكر" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "الدفع اليدوي" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." @@ -4586,15 +4600,15 @@ msgstr "" "في وضع الاختبار، يمكنك فقط يدويا بمناسبة هذا النظام كما المدفوعة في الخلفية " "بعد أن تم إنشاؤه." -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "الدفع اسم الأسلوب" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "وصف عملية الدفع خلال الخروج" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4602,11 +4616,11 @@ msgstr "" "سيتم عرض هذا النص في الخروج عندما يختار المستخدم طريقة الدفع هذه. وينبغي أن " "تعطي شرحا موجزا عن طريقة الدفع هذه." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "وصف عملية الدفع من أجل رسائل البريد الإلكتروني تأكيد" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, fuzzy, python-brace-format #| msgid "" #| "This text will be included for the {payment_info} placeholder in order " @@ -4623,11 +4637,11 @@ msgstr "" "إرشاد المستخدم على كيفية المضي قدما في الدفع. يمكنك إستخدام النائبة {order}، " "{total}، {currency}و {total_with_currency}" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "وصف عملية الدفع لأوامر معلقة" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, fuzzy, python-brace-format #| msgid "" #| "This text will be shown on the order confirmation page for pending " @@ -4643,59 +4657,59 @@ msgstr "" "على كيفية المضي قدما في الدفع. يمكنك إستخدام النائبة {order}، {total}، " "{currency} و {total_with_currency}" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "عوض" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "لقد أدخلت أمر لا يمكن العثور عليها." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "تم تسجيلها على الطلبات: %s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "في وضع الاختبار، وبطاقات اختبار الوحيدة عمل." -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "لا يمكنك الدفع مع بطاقات هدية عند شراء بطاقة هدية." -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "هذه البطاقة هدية لا يدعم هذه العملة." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "لا يمكن إلا أن هذه البطاقة هدية يمكن استخدامها في وضع الاختبار." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "بطاقات هدية اختبار الوحيدة التي يمكن أن تستخدم في وضع الاختبار." -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 #, fuzzy #| msgid "This gift card is not known." msgid "This gift card is no longer valid." msgstr "ولا يعرف هذه البطاقة هدية." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "وقد استخدمت كل الفضل على هذه البطاقة هدية." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "وتستخدم هذه البطاقة هدية بالفعل لدفعتك." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." @@ -4703,11 +4717,11 @@ msgstr "" "وقد تم تطبيق بطاقة الهدايا، ولكن {} لا تزال بحاجة إلى أن تدفع. الرجاء اختيار " "طريقة الدفع." -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "وقد تم تطبيق بطاقة الهدايا." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." @@ -4715,11 +4729,11 @@ msgstr "" "لقد أدخلت على قسيمة بدلا من بطاقة هدية. لا يمكن إلا أن قسائم دخلت على الصفحة " "الأولى من المحل دون اختيار المنتج." -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "ولا يعرف هذه البطاقة هدية." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." @@ -4727,11 +4741,11 @@ msgstr "" "هذه البطاقة هدية لا يمكن استبدال منذ مدونتها ليست فريدة من نوعها. يرجى " "الاتصال المنظم لهذا الحدث." -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "لم يتم قبول هذه البطاقة هدية من هذا منظم الحدث." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "This gift card was used in the meantime. Please try again" msgid "This gift card was used in the meantime. Please try again." @@ -11647,7 +11661,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -11753,7 +11767,7 @@ msgstr "كلمة المرور الجديدة تعيين" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "حفظ" @@ -11941,10 +11955,9 @@ msgstr "وضع بطاقة الدخول" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "رقم البطاقة" @@ -12120,7 +12133,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -13080,7 +13093,7 @@ msgstr "الإضافات المثبتة" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "تم حفظ التغييرات." @@ -17959,7 +17972,7 @@ msgstr "تم إنشاء الاختيار في قائمة جديدة." #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "لم نتمكن من حفظ التغييرات. انظر أدناه للحصول على التفاصيل." @@ -19251,7 +19264,7 @@ msgstr "شارات" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -19582,19 +19595,20 @@ msgstr "الرجاء إدخال تفاصيل حسابك المصرفي." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "مالك الحساب" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "بنك" @@ -20253,7 +20267,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "ويضيف هذا البرنامج المساعد طريقة الدفع تخصيص لمعالجة اليدوي." #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "باي بال" @@ -20273,17 +20287,17 @@ msgstr "" msgid "PayPal account" msgstr "حساب باي بال" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "{text}" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" "انقر هنا للحصول على البرنامج التعليمي حول كيفية الحصول على مفاتيح المطلوبة" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "نقطة النهاية" @@ -20365,8 +20379,8 @@ msgid "" msgstr "" "وباي بال لم يوافق بعد الدفع. ونحن سوف أبلغكم في أقرب وقت اتمام عملية الدفع." -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "كان هناك خطأ أثناء إرسال البريد تأكيد." @@ -20481,7 +20495,7 @@ msgid "Last update" msgstr "اخر تحديث" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "القيمة الإجمالية" @@ -20502,17 +20516,17 @@ msgstr "" "كان هذا يحتاج إلى أكثر من بضع ساعات." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "وقد بدأت عملية الدفع في نافذة جديدة." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "لم يفتح نافذة لإدخال البيانات الدفع أو كانت مغلقة؟" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "انقر هنا لفتح النافذة." @@ -20970,12 +20984,14 @@ msgstr "" "يتم تقديم الطلبات الأولى!" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "شريط" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "يسمح هذا البرنامج المساعد لك لتلقي مدفوعات بطاقات الائتمان عبر الشريط" #: pretix/plugins/stripe/forms.py:19 @@ -20985,36 +21001,41 @@ msgid "" "\"%(prefix)s\"." msgstr "مفتاح تقدم \"%(value)s\" لا تبدو صحيحة. يجب أن تبدأ مع \"%(prefix)s\"." -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "شريط الاتصال: التطبيق رسوم (نسبة مئوية)" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "شريط الاتصال: التطبيق الرسوم (كحد أقصى)" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "شريط الاتصال: التطبيق رسوم (دقيقة)" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "لقبول الدفع عن طريق الشريط، ستحتاج إلى حساب في الشريط. من خلال النقر على " "الزر التالي، يمكنك إما إنشاء الشريط الجديد حساب pretix اتصال واحدة موجودة." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "تواصل مع الشريط" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "قطع من الشريط" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -21026,22 +21047,22 @@ msgstr "" "تلقائيا عندما التهم ليست ردها خارجيا وتجهيز وسائل الدفع غير متزامن مثل " "SOFORT." -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 #, fuzzy #| msgid "Needs to be enabled in your Stripe account first." msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "يجب تمكين في حساب الشريط الخاص بك أولا." -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -21052,21 +21073,21 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "حساب الشريط" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "حي" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "اختبارات" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." @@ -21074,15 +21095,15 @@ msgstr "" "إذا هذا الحدث الخاص بك في وضع الاختبار، وسوف نستخدم دائما API اختبار الشريط، " "وبغض النظر عن هذا الإعداد." -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "مفتاح للنشر" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "المفتاح السري" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." @@ -21090,39 +21111,96 @@ msgstr "" "البلد الذي هو REGISTRED الشريط في الحساب الخاص بك في. عادة، وهذا هو البلد " "الذي تقيم فيه." -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "مدفوعات بطاقات الائتمان" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "نظام Giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "يجب تمكين في حساب الشريط الخاص بك أولا." -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "المثالي" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "و alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "SOFORT" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -21134,23 +21212,64 @@ msgstr "" "في بعض الحالات. يرجى تفعيلها فقط طريقة الدفع هذه إذا سمح مصطلح الدفع الخاص " "بك لهذا التأخر." -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "وصف" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of " "العديد من بطاقات اختبار لتنفيذ الصفقة. والواقع أن نقل أي مبلغ من المال." -#: pretix/plugins/stripe/payment.py:407 pretix/plugins/stripe/payment.py:757 -#: pretix/plugins/stripe/payment.py:852 +#: pretix/plugins/stripe/payment.py:575 +msgid "No payment information found." +msgstr "لا توجد معلومات الدفع." + +#: pretix/plugins/stripe/payment.py:591 +msgid "Stripe returned an error" +msgstr "عاد شريط خطأ" + +#: pretix/plugins/stripe/payment.py:616 +msgid "" +"We had trouble communicating with Stripe. Please try again and contact " +"support if the problem persists." +msgstr "" +"كان لدينا التواصل المتاعب مع الشريط. يرجى المحاولة مرة أخرى والاتصال بالدعم " +"إذا كان قائما المشكلة." + +#: pretix/plugins/stripe/payment.py:689 +msgid "You may need to enable JavaScript for Stripe payments." +msgstr "قد تحتاج إلى تفعيل جافا سكريبت لدفع الشريط." + +#: pretix/plugins/stripe/payment.py:761 pretix/plugins/stripe/payment.py:863 +#: pretix/plugins/stripe/payment.py:922 #, python-format msgid "Stripe reported an error with your card: %s" msgstr "ذكرت شريط خطأ مع بطاقتك: %s" -#: pretix/plugins/stripe/payment.py:434 pretix/plugins/stripe/payment.py:567 -#: pretix/plugins/stripe/payment.py:770 pretix/plugins/stripe/payment.py:864 -#: pretix/plugins/stripe/payment.py:1436 +#: pretix/plugins/stripe/payment.py:769 pretix/plugins/stripe/payment.py:875 +#: pretix/plugins/stripe/payment.py:936 pretix/plugins/stripe/payment.py:1002 msgid "" "We had trouble communicating with Stripe. Please try again and get in touch " "with us if this problem persists." @@ -21176,7 +21314,7 @@ msgstr "" "كان لدينا التواصل المتاعب مع الشريط. يرجى المحاولة مرة أخرى والحصول على " "اتصال معنا إذا كانت هذه المشكلة قائما." -#: pretix/plugins/stripe/payment.py:452 pretix/plugins/stripe/payment.py:804 +#: pretix/plugins/stripe/payment.py:801 msgid "" "Your payment is pending completion. We will inform you as soon as the " "payment completed." @@ -21184,251 +21322,338 @@ msgstr "" "الدفع الخاص بك في انتظار الانتهاء. ونحن سوف أبلغكم في أقرب وقت اتمام عملية " "الدفع." -#: pretix/plugins/stripe/payment.py:461 pretix/plugins/stripe/payment.py:818 +#: pretix/plugins/stripe/payment.py:808 +msgid "Your payment failed. Please try again." +msgstr "فشل الدفع الخاص بك. حاول مرة اخرى." + +#: pretix/plugins/stripe/payment.py:814 pretix/plugins/stripe/payment.py:970 #, python-format msgid "Stripe reported an error: %s" msgstr "ذكرت شريط خطأ: %s" -#: pretix/plugins/stripe/payment.py:517 -msgid "No payment information found." -msgstr "لا توجد معلومات الدفع." - -#: pretix/plugins/stripe/payment.py:538 +#: pretix/plugins/stripe/payment.py:963 +#, fuzzy +#| msgid "" +#| "Your payment is pending completion. We will inform you as soon as the " +#| "payment completed." msgid "" -"We had trouble communicating with Stripe. Please try again and contact " -"support if the problem persists." +"Your payment is pending completion. We will inform you as soon as the " +"payment is completed." msgstr "" -"كان لدينا التواصل المتاعب مع الشريط. يرجى المحاولة مرة أخرى والاتصال بالدعم " -"إذا كان قائما المشكلة." - -#: pretix/plugins/stripe/payment.py:542 -msgid "Stripe returned an error" -msgstr "عاد شريط خطأ" +"الدفع الخاص بك في انتظار الانتهاء. ونحن سوف أبلغكم في أقرب وقت اتمام عملية " +"الدفع." -#: pretix/plugins/stripe/payment.py:638 +#: pretix/plugins/stripe/payment.py:1035 msgid "Credit card via Stripe" msgstr "بطاقة الائتمان عبر الشريط" -#: pretix/plugins/stripe/payment.py:639 +#: pretix/plugins/stripe/payment.py:1036 msgid "Credit card" msgstr "بطاقة ائتمان" -#: pretix/plugins/stripe/payment.py:666 -msgid "You may need to enable JavaScript for Stripe payments." -msgstr "قد تحتاج إلى تفعيل جافا سكريبت لدفع الشريط." +#: pretix/plugins/stripe/payment.py:1116 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "SEPA Debit via Stripe" +msgstr "مثالية عبر الشريط" -#: pretix/plugins/stripe/payment.py:812 -msgid "Your payment failed. Please try again." -msgstr "فشل الدفع الخاص بك. حاول مرة اخرى." +#: pretix/plugins/stripe/payment.py:1117 +msgid "SEPA Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1155 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Name" +msgstr "مالك الحساب" + +#: pretix/plugins/stripe/payment.py:1159 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Street" +msgstr "مالك الحساب" -#: pretix/plugins/stripe/payment.py:885 +#: pretix/plugins/stripe/payment.py:1168 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Postal Code" +msgstr "مالك الحساب" + +#: pretix/plugins/stripe/payment.py:1177 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder City" +msgstr "مالك الحساب" + +#: pretix/plugins/stripe/payment.py:1186 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Country" +msgstr "مالك الحساب" + +#: pretix/plugins/stripe/payment.py:1224 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Affirm via Stripe" +msgstr "و alipay عبر الشريط" + +#: pretix/plugins/stripe/payment.py:1263 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Klarna via Stripe" +msgstr "و alipay عبر الشريط" + +#: pretix/plugins/stripe/payment.py:1368 msgid "giropay via Stripe" msgstr "نظام Giropay عبر الشريط" -#: pretix/plugins/stripe/payment.py:917 pretix/plugins/stripe/payment.py:1084 -#: pretix/plugins/stripe/payment.py:1236 +#: pretix/plugins/stripe/payment.py:1372 +msgid "" +"giropay is an online payment method available to all customers of most " +"German banks, usually after one-time activation. Please keep your online " +"banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1383 pretix/plugins/stripe/payment.py:1451 +#: pretix/plugins/stripe/payment.py:1554 msgid "unknown name" msgstr "اسم غير معروف" -#: pretix/plugins/stripe/payment.py:949 pretix/plugins/stripe/payment.py:1001 -#: pretix/plugins/stripe/payment.py:1116 pretix/plugins/stripe/payment.py:1268 -#: pretix/plugins/stripe/payment.py:1371 +#: pretix/plugins/stripe/payment.py:1395 pretix/plugins/stripe/payment.py:1415 +#: pretix/plugins/stripe/payment.py:1459 pretix/plugins/stripe/payment.py:1562 +#: pretix/plugins/stripe/payment.py:1654 #, fuzzy, python-brace-format #| msgid "Bank account type" msgid "Bank account at {bank}" msgstr "البنك نوع الحساب" -#: pretix/plugins/stripe/payment.py:957 +#: pretix/plugins/stripe/payment.py:1403 msgid "iDEAL via Stripe" msgstr "مثالية عبر الشريط" -#: pretix/plugins/stripe/payment.py:1009 +#: pretix/plugins/stripe/payment.py:1407 +msgid "" +"iDEAL is an online payment method available to customers of Dutch banks. " +"Please keep your online banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1428 msgid "Alipay via Stripe" msgstr "و alipay عبر الشريط" -#: pretix/plugins/stripe/payment.py:1052 +#: pretix/plugins/stripe/payment.py:1433 +msgid "" +"This payment method is available to customers of the Chinese payment system " +"Alipay. Please keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1440 msgid "Bancontact via Stripe" msgstr "Bancontact عبر الشريط" -#: pretix/plugins/stripe/payment.py:1124 +#: pretix/plugins/stripe/payment.py:1472 msgid "SOFORT via Stripe" msgstr "SOFORT عبر الشريط" -#: pretix/plugins/stripe/payment.py:1141 +#: pretix/plugins/stripe/payment.py:1473 +#, fuzzy +#| msgid "Payment by bank transfer" +msgid "SOFORT (instant bank transfer)" +msgstr "الدفع عن طريق التحويل المصرفي" + +#: pretix/plugins/stripe/payment.py:1491 msgid "Country of your bank" msgstr "بلد البنك الذي تتعامل معه" -#: pretix/plugins/stripe/payment.py:1142 +#: pretix/plugins/stripe/payment.py:1492 msgid "Germany" msgstr "ألمانيا" -#: pretix/plugins/stripe/payment.py:1143 +#: pretix/plugins/stripe/payment.py:1493 msgid "Austria" msgstr "النمسا" -#: pretix/plugins/stripe/payment.py:1144 +#: pretix/plugins/stripe/payment.py:1494 msgid "Belgium" msgstr "بلجيكا" -#: pretix/plugins/stripe/payment.py:1145 +#: pretix/plugins/stripe/payment.py:1495 msgid "Netherlands" msgstr "هولندا" -#: pretix/plugins/stripe/payment.py:1146 +#: pretix/plugins/stripe/payment.py:1496 msgid "Spain" msgstr "إسبانيا" -#: pretix/plugins/stripe/payment.py:1193 +#: pretix/plugins/stripe/payment.py:1532 #, fuzzy, python-brace-format #| msgid "Bank account details" msgid "Bank account {iban} at {bank}" msgstr "تفاصيل الحساب المصرفي" -#: pretix/plugins/stripe/payment.py:1204 +#: pretix/plugins/stripe/payment.py:1543 #, fuzzy #| msgid "iDEAL via Stripe" msgid "EPS via Stripe" msgstr "مثالية عبر الشريط" -#: pretix/plugins/stripe/payment.py:1276 +#: pretix/plugins/stripe/payment.py:1575 #, fuzzy #| msgid "Alipay via Stripe" msgid "Multibanco via Stripe" msgstr "و alipay عبر الشريط" -#: pretix/plugins/stripe/payment.py:1323 +#: pretix/plugins/stripe/payment.py:1624 #, fuzzy #| msgid "Alipay via Stripe" msgid "Przelewy24 via Stripe" msgstr "و alipay عبر الشريط" -#: pretix/plugins/stripe/payment.py:1379 +#: pretix/plugins/stripe/payment.py:1628 +msgid "" +"Przelewy24 is an online payment method available to customers of Polish " +"banks. Please keep your online banking account and login information " +"available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1662 #, fuzzy #| msgid "Payment via Stripe" msgid "WeChat Pay via Stripe" msgstr "الدفع عن طريق الشريط" -#: pretix/plugins/stripe/signals.py:65 +#: pretix/plugins/stripe/payment.py:1667 +msgid "" +"This payment method is available to users of the Chinese app WeChat. Please " +"keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1690 +#, fuzzy +#| msgid "Payment via Stripe" +msgid "PayPal via Stripe" +msgstr "الدفع عن طريق الشريط" + +#: pretix/plugins/stripe/payment.py:1697 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "Swish via Stripe" +msgstr "مثالية عبر الشريط" + +#: pretix/plugins/stripe/payment.py:1702 +msgid "" +"This payment method is available to users of the Swedish apps Swish and " +"BankID. Please have your app ready." +msgstr "" + +#: pretix/plugins/stripe/signals.py:70 msgid "Charge succeeded." msgstr "نجح تهمة." -#: pretix/plugins/stripe/signals.py:66 +#: pretix/plugins/stripe/signals.py:71 msgid "Charge refunded." msgstr "رد تهمة." -#: pretix/plugins/stripe/signals.py:67 +#: pretix/plugins/stripe/signals.py:72 msgid "Charge updated." msgstr "تهمة المحدثة." -#: pretix/plugins/stripe/signals.py:68 +#: pretix/plugins/stripe/signals.py:73 msgid "Charge pending" msgstr "تهمة انتظار" -#: pretix/plugins/stripe/signals.py:69 +#: pretix/plugins/stripe/signals.py:74 msgid "Payment authorized." msgstr "أذن الدفع." -#: pretix/plugins/stripe/signals.py:70 +#: pretix/plugins/stripe/signals.py:75 msgid "Payment authorization canceled." msgstr "إذن الدفع ألغيت." -#: pretix/plugins/stripe/signals.py:71 +#: pretix/plugins/stripe/signals.py:76 msgid "Payment authorization failed." msgstr "فشل إذن الدفع." -#: pretix/plugins/stripe/signals.py:77 +#: pretix/plugins/stripe/signals.py:82 msgid "Charge failed. Reason: {}" msgstr "فشل الاتهام. السبب: {}" -#: pretix/plugins/stripe/signals.py:79 +#: pretix/plugins/stripe/signals.py:84 msgid "Dispute created. Reason: {}" msgstr "خلاف خلق. السبب: {}" -#: pretix/plugins/stripe/signals.py:81 +#: pretix/plugins/stripe/signals.py:86 msgid "Dispute updated. Reason: {}" msgstr "النزاع تجديد. السبب: {}" -#: pretix/plugins/stripe/signals.py:83 +#: pretix/plugins/stripe/signals.py:88 msgid "Dispute closed. Status: {}" msgstr "أغلقت النزاع. الحالة: {}" -#: pretix/plugins/stripe/signals.py:86 +#: pretix/plugins/stripe/signals.py:91 msgid "Stripe reported an event: {}" msgstr "ذكرت الشريط حدث: {}" -#: pretix/plugins/stripe/signals.py:97 +#: pretix/plugins/stripe/signals.py:102 msgid "Stripe Connect: Client ID" msgstr "شريط الاتصال: معرف العميل" -#: pretix/plugins/stripe/signals.py:104 +#: pretix/plugins/stripe/signals.py:109 msgid "Stripe Connect: Secret key" msgstr "شريط الاتصال: المفتاح السري" -#: pretix/plugins/stripe/signals.py:111 +#: pretix/plugins/stripe/signals.py:116 msgid "Stripe Connect: Publishable key" msgstr "شريط الاتصال: مفتاح للنشر" -#: pretix/plugins/stripe/signals.py:118 +#: pretix/plugins/stripe/signals.py:123 msgid "Stripe Connect: Secret key (test)" msgstr "شريط الاتصال: المفتاح السري (اختبار)" -#: pretix/plugins/stripe/signals.py:125 +#: pretix/plugins/stripe/signals.py:130 msgid "Stripe Connect: Publishable key (test)" msgstr "شريط الاتصال: مفتاح للنشر (اختبار)" -#: pretix/plugins/stripe/signals.py:170 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:6 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:9 +#: pretix/plugins/stripe/signals.py:156 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:3 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:9 msgid "Stripe Connect" msgstr "شريط الاتصال" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"الصفقة الشريط %(charge)s نجحت ، ولكن النظام%(order)s " -"تم بالفعل دفع بوسائل أخرى. الرجاء انقر نقرا مزدوجا الاختيار واسترداد الاموال " -"عن طريق واجهة الشريط ل." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"الصفقة الشريط نجحت %(charge)s ، ولكن النظام %(order)s " -"غير منتهية الصلاحية وتم بيع المنتج في هذه الأثناء. لذلك، لا يمكن قبول الدفع. " -"يرجى الاتصال بالمستخدم وسنرد على المال عن طريق واجهة الشريط ل." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"ذكرت الشريط أن الصفقة %(charge)s كان ردها. هل تريد " -"علامة استرداد ترتيب المطابقة (%(order)s) كما هو ردها؟" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "سيتم سحب المبلغ الإجمالي من بطاقة الائتمان الخاصة بك." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "نوع البطاقة" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "سيتم سحب المبلغ الإجمالي من بطاقة الائتمان الخاصة بك." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "مالك الحساب" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -21437,32 +21662,32 @@ msgstr "" "بعد المقدمة طلبك، وسيتم توجيه لك إلى مزود خدمة الدفع لإتمام عملية الدفع. " "وعندها يمكنك أن يعاد توجيهها إلى هنا للحصول على التذاكر الخاصة بك." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "لدفع بطاقة الائتمان، يرجى تشغيل جافا سكريبت." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" "لقد أدخلت بالفعل عددا البطاقة التي سوف نستخدم لتوجيه الاتهام الى دفع المبلغ." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "استخدام بطاقة مختلفة" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "أو" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -21470,26 +21695,79 @@ msgstr "" "سيتم معالجة الدفع الخاص بك عن طريق الشريط، وشركة ستحال بيانات بطاقة الائتمان " "الخاصة بك مباشرة إلى الشريط وأبدا اللمسات خدمتنا." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "لدفع بطاقة الائتمان، يرجى تشغيل جافا سكريبت." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"لقد أدخلت بالفعل عددا البطاقة التي سوف نستخدم لتوجيه الاتهام الى دفع المبلغ." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "استخدام بطاقة مختلفة" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "تهمة ID" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "اسم دافع" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "اسم دافع" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "رسالة خطأ" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to regenerate your emergency codes?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "هل تريد حقا أن تجديد رموز الطوارئ الخاصة بك؟" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Connect" +msgid "Disconnect" +msgstr "الاتصال" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -21497,7 +21775,7 @@ msgstr "" "نحن في انتظار رد من مزود خدمة الدفع بشأن الدفع الخاصة بك. يرجى الاتصال بنا " "إذا كان هذا يحتاج إلى أكثر من بضعة أيام." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." @@ -21505,63 +21783,67 @@ msgstr "" "تحتاج إلى تأكيد الدفع الخاص بك. يرجى النقر على الرابط أدناه للقيام بذلك أو " "بدء دفعة جديدة." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "تأكيد الدفع" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "تعذر إكمال هذه الصفقة دفع للأسباب التالية:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "سبب غير معلوم" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "ترتيب الأجور" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "تأكيد الدفع: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "تأكيد الدفع الخاص بك ..." -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "حدث خطأ أثناء الاتصال مع الشريط، يرجى المحاولة مرة أخرى." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "عاد شريط خطأ: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" "متصل الآن حساب الشريط لpretix. يمكنك تغيير الإعدادات في التفاصيل أدناه." -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "تم فصل حساب الشريط الخاص بك." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -21569,7 +21851,7 @@ msgstr "" "عذرا، هناك خطأ في عملية الدفع. يرجى الاطلاع على الرابط في رسائل البريد " "الإلكتروني للمتابعة." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -21577,7 +21859,7 @@ msgstr "" "كان لدينا مشكلة يجيز دفع بطاقتك. يرجى المحاولة مرة أخرى والحصول على اتصال " "معنا إذا كانت هذه المشكلة قائما." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "عذرا، هناك خطأ في عملية الدفع." @@ -23665,6 +23947,37 @@ msgstr "وصول الكتابة" msgid "Kosovo" msgstr "" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "الصفقة الشريط %(charge)s نجحت ، ولكن " +#~ "النظام%(order)s تم بالفعل دفع بوسائل أخرى. الرجاء انقر نقرا مزدوجا " +#~ "الاختيار واسترداد الاموال عن طريق واجهة الشريط ل." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "الصفقة الشريط نجحت %(charge)s ، ولكن النظام " +#~ "%(order)s غير منتهية الصلاحية وتم بيع المنتج في هذه الأثناء. لذلك، لا " +#~ "يمكن قبول الدفع. يرجى الاتصال بالمستخدم وسنرد على المال عن طريق واجهة " +#~ "الشريط ل." + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "ذكرت الشريط أن الصفقة %(charge)s كان ردها. هل تريد " +#~ "علامة استرداد ترتيب المطابقة (%(order)s) كما هو ردها؟" + #, fuzzy #~| msgid "Optional. No products will be sold before this date." #~ msgid "Only include orders issued on or before this date." diff --git a/src/pretix/locale/ar/LC_MESSAGES/djangojs.po b/src/pretix/locale/ar/LC_MESSAGES/djangojs.po index a6649bebf..b6b36d17f 100644 --- a/src/pretix/locale/ar/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/ar/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-07-30 19:00+0000\n" "Last-Translator: Abdullah \n" "Language-Team: Arabic \n" "Language-Team: Catalan " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Buit si aquest producte no és un tiquet d'admissió" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Nom de l'empresa" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Seleccionau país" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "creat" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "pendent" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "confirmat" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "cancel·lat" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "fallat" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "reemborsat" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Dades de pagament" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "Registre confirmat: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "S'ha rebut el pagament per a la vostra comanda: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "s'ha iniciat externament" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "creat" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "en trànsit" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "fet" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "fallat" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "cancel·lat" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Organitzador" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Client" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Extern" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Refund only" msgid "Refund reason" msgstr "Només reemborsament" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Tarifa de pagament" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Tarifa d'enviament" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Tarifa de servei" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Tarifa de cancel·lació" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Altres tarifes" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Targeta regal" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Valor" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Posició de la comanda" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "El vostre registre: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "Identificador del carretó (ex. clau de sessió)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Posició del carretó" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Posicions del carretó" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Només per a clients empresarials dins la UE." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" "S'imprimirà aquesta referència dins la factura per a la vostra conveniència." @@ -3734,7 +3734,7 @@ msgstr "" "consultar un assessor fiscal. No es dóna cap garantia d'un càlcul fiscal " "correcte. USEU BAIX EL VOSTRE RISC." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "País mercant" @@ -4351,22 +4351,34 @@ msgstr "Heu de seleccionar un seient específic." msgid "Ambiguous option selected." msgstr "S'ha seleccionat una opció ambigua." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "Aplicar" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Activa el mètode de pagament" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Els usuaris no podran triar aquest proveïdor de pagament després de la data " "especificada." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Text a les factures" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4378,11 +4390,11 @@ msgstr "" "es pagui la comanda. Si la factura es genera després, mostrarà un text " "indicant que ja s'ha pagat." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Total mínim de comandes" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4393,11 +4405,11 @@ msgstr "" "pot ser calculat sense tenir en compte les tarifes imposades pel mètode de " "pagament." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Total màxim de comandes" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4408,23 +4420,23 @@ msgstr "" "ser calculat sense tenir en compte les tarifes imposades pel mètode de " "pagament." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Tarifa addicional" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Valor absolut" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "Percentatge del total de la comanda." -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Calcula la tarifa del valor total inclosa la tarifa." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4438,11 +4450,11 @@ msgstr "" "detallada sobre el que fa això. No oblideu especificar correctament les " "tarifes!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "Restringeix al països" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4452,39 +4464,39 @@ msgstr "" "els països seleccionats. Si no seleccioneu cap país, es permeten tots els " "països. Només s'activa això si es requereix l'adreça de la factura." -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "Amaga el mètode de pagament" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "Enllaç per activar el mètode de pagament" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "Ja s'ha rebut el pagament per a aquesta factura." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "Aquest proveïdor de pagament no suporta reemborsaments automàtics." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4492,21 +4504,21 @@ msgstr "" "No es requereix cap pagament ja que aquesta comanda només inclou productes " "sense cost." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Sense cost" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Taquilla" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "Pagament manual" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." @@ -4514,15 +4526,15 @@ msgstr "" "En el mode de proves podeu marcar manualment aquesta comanda com a pagada al " "gestor després d'haver-la creat." -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "Nom del mètode de pagament" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "Descripció del procés de pagament durant la finalització de la comanda" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4531,12 +4543,12 @@ msgstr "" "seleccioni aquest mètode de pagament. Hauria d'incloure una petita " "explicació d'aquest mètode de pagament." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" "Descripció del procés de pagament als correus de confirmació de comandes" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, fuzzy, python-brace-format #| msgid "" #| "This text will be included for the {payment_info} placeholder in order " @@ -4554,11 +4566,11 @@ msgstr "" "pagament. Podeu utilitzar els camps de {order}, {total}, {currency} i " "{total_with_currency}" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "Descripció del procés de pagament per les comandes pendents" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, fuzzy, python-brace-format #| msgid "" #| "This text will be shown on the order confirmation page for pending " @@ -4575,63 +4587,63 @@ msgstr "" "pagament. Podeu utilitzar els camps {order}, {total}, {currency} i " "{total_with_currency}" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "Desplaçament" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "Heu introduït una comanda que no es pot trobar." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "Comandes amb equilibri en contra: %s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "En mode de proves només funcionen les targetes de prova." -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "No es pot fer servir un val regal per comprar un val regal." -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 #, fuzzy #| msgid "This variation does not belong to this product." msgid "This gift card does not support this currency." msgstr "Aquesta variació no pertany a aquest producte." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 #, fuzzy #| msgid "This product can only be bought using a voucher." msgid "This gift card can only be used in test mode." msgstr "Aquest producte només es pot comprar mitjançant un val." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "En mode de proves només es poden fer servir targetes regal de proves." -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "Aquesta targeta regal ja no és vàlida." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "Ja s'ha fet servir tot el crèdit de la targeta regal." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 #, fuzzy #| msgid "This identifier is already used for a different question." msgid "This gift card is already used for your payment." msgstr "Aquest identificador ja s'està utilitzar per a una pregunta diferent." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." @@ -4639,32 +4651,32 @@ msgstr "" "S'ha bescanviat la targeta regal però encara falten {} per pagar. Si us " "plau, selecciona una forma de pagament." -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "S'ha bescanviat la targeta regal." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "Aquesta targeta regal és desconeguda." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" "Aquesta targeta regal no és acceptada per l'organitzador de l'esdeveniment." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "Aquesta targeta regal ja s'ha fet servir. Si us plau torneu a provar." @@ -11557,7 +11569,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -11655,7 +11667,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Desar" @@ -11830,10 +11842,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Número de la targeta" @@ -12005,7 +12016,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -12872,7 +12883,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -17336,7 +17347,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -18578,7 +18589,7 @@ msgstr "Targes d'identificació" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -18892,19 +18903,20 @@ msgstr "Si us plau, empleneu les dades del vostre compte bancari." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Titular del compte" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "Banc" @@ -19506,7 +19518,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -19524,16 +19536,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -19609,8 +19621,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -19719,7 +19731,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -19736,17 +19748,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -20156,13 +20168,16 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "Stripe" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive payments via bank transfer." +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" +"Aquest complement us permet rebre pagaments via transferència bancària." #: pretix/plugins/stripe/forms.py:19 #, python-format @@ -20171,34 +20186,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "Connectar-se amb Stripe" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "Desconnectar-se de Stripe" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -20206,20 +20221,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "Guia de seguretat de la integració amb Stripe" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -20230,73 +20245,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "Compte de Stripe" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "En directe" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "Proves" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Clau publicable" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Clau secreta" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Pagaments amb targeta de crèdit" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "IDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "Alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -20304,23 +20376,64 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Descripció" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "L'import total es carregarà a la vostra targeta de crèdit." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "Tipus de targeta" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "L'import total es carregarà a la vostra targeta de crèdit." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Titular del compte" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -20592,17 +20813,17 @@ msgstr "" "pagament per a que pogueu efectuar el pagament. Tot seguit tornareu a " "aquesta pàgina automàticament per a obtenir els tiquets." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." @@ -20610,15 +20831,15 @@ msgstr "" "Ja heu introduït un número de targeta que farem servir per a carregar-hi " "l'import del pagament." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "Fer servir una altra targeta" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -20626,97 +20847,153 @@ msgstr "" "El vostre pagament el processarà Stripe, Inc. Les dades de la vostra targeta " "es transmeten directament a Stripe i mai es desen als nostres servidors." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"Ja heu introduït un número de targeta que farem servir per a carregar-hi " +"l'import del pagament." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "Fer servir una altra targeta" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to mark this payment as complete?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Segur que voleu marcar aquest pagament com a complet ?" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Connect" +msgid "Disconnect" +msgstr "Connectar" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "Confirmar pagament" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "La transacció de pagament no s'ha pogut fer per la raó següent:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Motiu desconegut" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, fuzzy, python-format #| msgid "Your order is pending payment: %(code)s" msgid "Confirm payment: %(code)s" msgstr "La vostra comanda està pendent de pagament: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "Confirmant el pagament…" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" "Hi ha hagut un error connectant amb Stripe. Si us plau, torneu-ho a provar." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "Stripe ha tornat un error: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" "El vostre compte de Stripe s'ha connectat a pretix. Podeu canviar-ne la " "configuració aquí a sota." -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "El vostre compte de Stripe ha estat desconnectat." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -20724,7 +21001,7 @@ msgstr "" "Ens sap greu, alguna cosa no ha anat bé durant el procés de pagament. Si us " "plau consulteu el correu electrònic per continuar." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -20733,7 +21010,7 @@ msgstr "" "torneu-ho a provar i poseu-vos en contacte amb nosaltres si el problema " "persisteix." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "Ens sap greu, hi ha hagut un error en el procés de pagament." diff --git a/src/pretix/locale/ca/LC_MESSAGES/djangojs.po b/src/pretix/locale/ca/LC_MESSAGES/djangojs.po index a5db7f449..112b509a8 100644 --- a/src/pretix/locale/ca/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/ca/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-12-19 07:00+0000\n" "Last-Translator: albert \n" "Language-Team: Catalan \n" "Language-Team: Czech " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" @@ -3545,7 +3545,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "" @@ -4114,20 +4114,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "" -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4135,45 +4145,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4182,94 +4192,94 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4278,11 +4288,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4290,87 +4300,87 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "" -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "" -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "" -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "" -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "" -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" @@ -10322,7 +10332,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10416,7 +10426,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -10583,10 +10593,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -10747,7 +10756,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -11545,7 +11554,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -15844,7 +15853,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -17010,7 +17019,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -17317,19 +17326,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -17893,7 +17903,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -17911,16 +17921,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -17994,8 +18004,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -18097,7 +18107,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18114,17 +18124,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -18517,12 +18527,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -18532,34 +18542,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -18567,20 +18577,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -18591,73 +18601,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -18665,23 +18732,64 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Popis" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" -msgstr "" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Line number" +msgid "Account number" +msgstr "Číslo řádku" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/cs/LC_MESSAGES/djangojs.po b/src/pretix/locale/cs/LC_MESSAGES/djangojs.po index c30282d51..4140c473a 100644 --- a/src/pretix/locale/cs/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/cs/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-12-14 10:00+0000\n" "Last-Translator: Ondřej Sokol \n" "Language-Team: Czech \n" "Language-Team: Danish " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Tom hvis dette produkt ikke er en adgangsbillet" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Virksomhedsnavn" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Vælg land" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 #, fuzzy #| msgid "User created." msgctxt "payment_state" msgid "created" msgstr "Bruger oprettet." -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 #, fuzzy #| msgid "pending" msgctxt "payment_state" msgid "pending" msgstr "afventer" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "bekræftet" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 #, fuzzy #| msgid "canceled" msgctxt "payment_state" msgid "canceled" msgstr "annulleret" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 #, fuzzy #| msgid "refunded" msgctxt "payment_state" msgid "refunded" msgstr "tilbagebetalt" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Betalingsoplysninger" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, fuzzy, python-format #| msgid "Order canceled: %(code)s" msgid "Event registration confirmed: %(code)s" msgstr "Bestilling annulleret: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Betaling modtaget for din bestilling: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 #, fuzzy #| msgid "User created." msgctxt "refund_state" msgid "created" msgstr "Bruger oprettet." -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 #, fuzzy #| msgid "canceled" msgctxt "refund_state" msgid "canceled" msgstr "annulleret" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 #, fuzzy #| msgid "Organizer" msgctxt "refund_source" msgid "Organizer" msgstr "Arrangør" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 #, fuzzy #| msgid "Customer actions" msgctxt "refund_source" msgid "Customer" msgstr "Kundehandlinger" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Refund order" msgid "Refund reason" msgstr "Tilbagebetal bestilling" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Betalingsgebyr" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Leveringsgebyr" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Afbestillingsgebyr" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Andre gebyrer" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Gavekort" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Værdi" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, fuzzy, python-format #| msgid "Your order: %(code)s" msgid "Your event registration: %(code)s" msgstr "Din bestilling: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "Kurv-id (fx sessionsnøgle)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Kun for virksomhedskunder inden for EU." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "Denne reference vises på din faktura." @@ -3928,7 +3928,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "Sælgerland" @@ -4595,20 +4595,34 @@ msgstr "Du skal vælge en produktvariant." msgid "Ambiguous option selected." msgstr "Ugyldig valgmulighed valgt." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "Udfør" + +#: pretix/base/payment.py:54 +#, fuzzy +#| msgid "Android (Google Play)" +msgctxt "payment" +msgid "Google Pay" +msgstr "Android (Google Play)" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Aktiver betalingsmetode" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "Brugere vil ikke kunne vælge denne betalingsudbyder efter denne dato." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Tekst på faktura" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4616,49 +4630,49 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 #, fuzzy #| msgid "Order total" msgid "Minimum order total" msgstr "I alt" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 #, fuzzy #| msgid "Order total" msgid "Maximum order total" msgstr "I alt" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Yderligere gebyr" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Absolut værdi" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Beregn gebyret ud fra den samlede værdi inkl. gebyret." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4671,71 +4685,71 @@ msgstr "" "rel=\"noopener\">Læs mere om hvad dette betyder. Husk at sætte det " "korrekte gebyr ovenfor!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 #, fuzzy #| msgid "The settings of a payment provider have been changed." msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "Indstillingerne for en betalingsudbyder er blevet ændret." -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 #, fuzzy #| msgid "Enable payment method" msgid "Hide payment method" msgstr "Aktiver betalingsmetode" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 #, fuzzy #| msgid "Enable payment method" msgid "Link to enable payment method" msgstr "Aktiver betalingsmetode" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "Betalingen for denne faktura er allerede modtaget." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" "Ingen betaling nødvendig da denne bestilling kun indeholder gratis produkter." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Gratis" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 #, fuzzy @@ -4743,33 +4757,33 @@ msgstr "" msgid "Manual payment" msgstr "Ugyldige betalinger" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 #, fuzzy #| msgid "Payment method" msgid "Payment method name" msgstr "Betalingsmetode" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4778,11 +4792,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4790,108 +4804,108 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 #, fuzzy #| msgid "Settings" msgid "Offsetting" msgstr "Indstillinger" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 #, fuzzy #| msgid "Your changes could not be saved." msgid "You entered an order that could not be found." msgstr "Dine ændringer kunne ikke gemmes." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 #, fuzzy #| msgid "This variation does not belong to this product." msgid "This gift card does not support this currency." msgstr "Denne variant hører ikke til dette produkt." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 #, fuzzy #| msgid "This product will not be sold after the given date." msgid "This gift card can only be used in test mode." msgstr "Dette produkt vil ikke blive solgt efter denne dato." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 #, fuzzy #| msgid "This feature is not enabled." msgid "This gift card is no longer valid." msgstr "Denne funktion er ikke aktiveret." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 #, fuzzy #| msgid "The selected configuration has been deleted." msgid "All credit on this gift card has been used." msgstr "Den valgte konfiguration er blevet slettet." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 #, fuzzy #| msgid "This identifier is already used for a different question." msgid "This gift card is already used for your payment." msgstr "Dette id bruges allerede af et andet spørgsmål." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 #, fuzzy #| msgid "Your cart has been updated." msgid "Your gift card has been applied." msgstr "Din kurv er blevet opdateret." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 #, fuzzy #| msgid "This feature is not enabled." msgid "This gift card is not known." msgstr "Denne funktion er ikke aktiveret." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 #, fuzzy #| msgctxt "subevent" #| msgid "This voucher is not valid for this event date." msgid "This gift card is not accepted by this event organizer." msgstr "Voucheren er ikke gyldig for denne dato." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "There was an error sending the mail. Please try again later." msgid "This gift card was used in the meantime. Please try again." @@ -12024,7 +12038,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -12126,7 +12140,7 @@ msgstr "Angiv ny adgangskode" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Gem" @@ -12318,10 +12332,9 @@ msgstr "Korttype" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Kortnummer" @@ -12504,7 +12517,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -13381,7 +13394,7 @@ msgstr "Installerede plugins" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Dine ændringer er blevet gemt." @@ -18185,7 +18198,7 @@ msgstr "Den nye tjek-ind-liste er blevet oprettet." #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "Vi kunne ikke gemme dine ændringer. Se detaljer nedenfor." @@ -19523,7 +19536,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -19873,19 +19886,20 @@ msgstr "Indtast venligst dit navn." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Kontoejer" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -20505,7 +20519,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -20525,16 +20539,16 @@ msgstr "" msgid "PayPal account" msgstr "Samlet beløb" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -20610,8 +20624,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "Fejl ved afsendelse af bekræftelses-e-mail." @@ -20735,7 +20749,7 @@ msgid "Last update" msgstr "Seneste opdatering" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "Samlet værdi" @@ -20752,17 +20766,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "Betalingsprocessen er startet i et nyt vindue." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "Tryk her for at åbne vinduet." @@ -21220,12 +21234,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -21235,38 +21249,38 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 #, fuzzy #| msgid "Stripe Connect: Publishable key" msgid "Stripe Connect: App fee (max)" msgstr "Stripe Connect: Offentlig nøgle" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 #, fuzzy #| msgid "Stripe Connect: Publishable key" msgid "Stripe Connect: App fee (min)" msgstr "Stripe Connect: Offentlig nøgle" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -21274,20 +21288,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -21298,75 +21312,132 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 #, fuzzy #| msgid "Question" msgctxt "stripe" msgid "Testing" msgstr "Spørgsmål" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Offentlig nøgle" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Hemmelig nøgle" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -21374,23 +21445,64 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Beskrivelse" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, " -#| "but the order %(order)s is expired and the product was sold out in the " -#| "meantime. Therefore, the payment could not be accepted. Please contact " -#| "the user and refund the money via Stripe's interface." -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -"Stripe-transaktionen %(charge)s blev gennemført, men " -"bestillingen %(order)s er udløbet og produktet blev udsolgt i mellemtiden. " -"Derfor kunne betalingen ikke godkendes. Kontakt venligt brugeren og " -"tilbagebetal beløbet via Stripes brugergrænseflade." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"Stripe-transaktionen %(charge)s blev gennemført, men " -"bestillingen %(order)s er udløbet og produktet blev udsolgt i mellemtiden. " -"Derfor kunne betalingen ikke godkendes. Kontakt venligt brugeren og " -"tilbagebetal beløbet via Stripes brugergrænseflade." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" +msgstr "Korttype" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" -msgstr "Korttype" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Kontoejer" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "Betalers navn" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Create a new account" +msgid "Use a different account" +msgstr "Opret konto" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "Betalers navn" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "Fejlmeddelelse" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "" +#| "Do you really want to refund this order? You cannot revert this action." +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" +"Er du sikker på at du vil refundere denne bestilling? Du kan ikke fortryde " +"senere." + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 #, fuzzy #| msgid "Invalid payments" msgid "Confirm payment" msgstr "Ugyldige betalinger" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Ukendt årsag" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Betal bestilling" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, fuzzy, python-format #| msgid "Change payment method: %(code)s" msgid "Confirm payment: %(code)s" msgstr "Skift betalingsmetode: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 #, fuzzy #| msgid "An internal error occurred, please try again." msgid "An error occurred during connecting with Stripe, please try again." msgstr "Siden stødte på en uventet intern fejl. Prøv venligst igen." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 #, fuzzy #| msgid "Stripe reported an event: {}" msgid "Stripe returned an error: {}" msgstr "Stripe rapporterede en hændelse: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 #, fuzzy #| msgid "Your cart has been updated." msgid "Your Stripe account has been disconnected." msgstr "Din kurv er blevet opdateret." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" @@ -23873,6 +24125,34 @@ msgstr "" msgid "Kosovo" msgstr "" +#, fuzzy, python-format +#~| msgid "" +#~| "The Stripe transaction %(charge)s has succeeded, " +#~| "but the order %(order)s is expired and the product was sold out in the " +#~| "meantime. Therefore, the payment could not be accepted. Please contact " +#~| "the user and refund the money via Stripe's interface." +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Stripe-transaktionen %(charge)s blev gennemført, " +#~ "men bestillingen %(order)s er udløbet og produktet blev udsolgt i " +#~ "mellemtiden. Derfor kunne betalingen ikke godkendes. Kontakt venligt " +#~ "brugeren og tilbagebetal beløbet via Stripes brugergrænseflade." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Stripe-transaktionen %(charge)s blev gennemført, " +#~ "men bestillingen %(order)s er udløbet og produktet blev udsolgt i " +#~ "mellemtiden. Derfor kunne betalingen ikke godkendes. Kontakt venligt " +#~ "brugeren og tilbagebetal beløbet via Stripes brugergrænseflade." + #, fuzzy #~| msgid "Optional. No products will be sold before this date." #~ msgid "Only include orders issued on or before this date." diff --git a/src/pretix/locale/da/LC_MESSAGES/djangojs.po b/src/pretix/locale/da/LC_MESSAGES/djangojs.po index ce185007e..95bc0fceb 100644 --- a/src/pretix/locale/da/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/da/LC_MESSAGES/djangojs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-09-15 02:00+0000\n" "Last-Translator: Mie Frydensbjerg \n" "Language-Team: Danish event " #~ "ticketing powered by pretix" #~ msgstr "" -#~ "billetsystem drevet af pretix" +#~ "billetsystem drevet af pretix" #~ msgid "" #~ "Your request has been queued on the server and will now be processed. If " diff --git a/src/pretix/locale/de/LC_MESSAGES/django.po b/src/pretix/locale/de/LC_MESSAGES/django.po index f034c8f1f..9b005be3b 100644 --- a/src/pretix/locale/de/LC_MESSAGES/django.po +++ b/src/pretix/locale/de/LC_MESSAGES/django.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2021-03-30 19:44+0000\n" "Last-Translator: Richard Schreiber \n" "Language-Team: German " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Leer, wenn dies kein Eintrittsticket ist" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Firmenname" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Land auswählen" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "erstellt" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "ausstehend" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "bestätigt" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "abgebrochen" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "fehlgeschlagen" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "erstattet" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Zahlungsinformationen" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "Registrierung bestätigt: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Zahlung erhalten für die Bestellung: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "extern gestartet" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "erstellt" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "auf dem Weg" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "erledigt" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "fehlgeschlagen" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "abgebrochen" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Veranstalter" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Kunde" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Extern" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "Grund für die Erstattung" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" @@ -3515,66 +3515,66 @@ msgid "" msgstr "" "Kann dem Nutzer angezeigt werden, z.B. als Teil eines Verwendungszwecks." -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Zahlungsgebühr" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Versandkosten" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Servicegebühr" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Stornogebühr" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Andere Gebühren" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Geschenkgutschein" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Wert" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Bestelltes Produkt" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "Ihre Registrierung: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "Warenkorb-ID (z.B. Session-ID)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Produkt im Warenkorb" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Produkte im Warenkorb" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Nur für Firmenkunden mit Sitz in der EU." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" "Diese Referenz wird auf Ihre Rechnung gedruckt, damit Sie die Rechnung " @@ -3747,7 +3747,7 @@ msgstr "" "Steuerberater aktiviert werden. Wir übernehmen keine Haftung für die " "korrekte Berechnung der Steuern. Benutzung auf eigene Gefahr." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "Land des Händlers" @@ -4369,22 +4369,36 @@ msgstr "Sie müssen einen Sitzplatz auswählen." msgid "Ambiguous option selected." msgstr "Mehrdeutige Option ausgewählt." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "Anwenden" + +#: pretix/base/payment.py:54 +#, fuzzy +#| msgid "Android (Google Play)" +msgctxt "payment" +msgid "Google Pay" +msgstr "Android (Google Play)" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Aktiviere Zahlungsmethode" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Käufer können diese Zahlungsmethode nur bis zu (einschließlich) diesem Datum " "auswählen." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Text auf Rechnungen" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4396,11 +4410,11 @@ msgstr "" "Wird die Rechnung nach Eingang der Zahlung generiert, erscheint stattdessen " "ein Text der sagt, dass die Rechnung bereits bezahlt wurde." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Minimaler Gesamtbetrag" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4410,11 +4424,11 @@ msgstr "" "größer oder gleich dem angegebenen Wert ist. Der Gesamtbetrag wird hierfür " "gegebenenfalls ohne Einbeziehung eventueller Zahlungsgebühren berechnet." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Maximaler Gesamtbetrag" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4424,23 +4438,23 @@ msgstr "" "kleiner oder gleich dem angegebenen Wert ist. Der Gesamtbetrag wird hierfür " "gegebenenfalls ohne Einbeziehung eventueller Zahlungsgebühren berechnet." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Zusätzliche Gebühr" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Fester Betrag" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "Prozentsatz der Bestellsumme." -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Berechne die Gebühr als Anteil vom Endbetrag." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4453,11 +4467,11 @@ msgstr "" "oben die richtigen Gebührensätze des Zahlungsanbieters einzustellen. Weitere Informationen." -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "Auf Länder einschränken" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4468,18 +4482,18 @@ msgstr "" "Zahlungsmethode allen angeboten. Dies ist nur möglich, wenn " "Rechnungsadressen eingegeben werden müssen." -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" "Schränkt die Auswahl dieser Zahlungsmethode auf die ausgewählten " "Verkaufskanäle ein." -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "Zahlungsmethode verstecken" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." @@ -4487,28 +4501,28 @@ msgstr "" "Die Zahlungsmethode wird standardmäßig nicht angezeigt, sondern nur wenn der " "Shop über einen speziellen Link aufgerufen wurde." -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "Link zur Aktivierung" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" "Teilen Sie diesen Link mit Kunden, die diese Zahlungsmethode nutzen können " "sollen." -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "Die Zahlung für diese Rechnung ist bereits eingegangen." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" "Automatische Rückbuchungen werden von dieser Zahlungsmethode nicht " "unterstützt." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4516,21 +4530,21 @@ msgstr "" "Es ist keine Zahlung erforderlich, da diese Bestellung nur kostenlose " "Produkte enthält." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Kostenlos" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Abendkasse" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "Manuelle Zahlung" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." @@ -4538,15 +4552,15 @@ msgstr "" "Im Testmodus können Sie die Bestellung zum Testen einfach im Backend als " "bezahlt markieren." -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "Name der Zahlungsmethode" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "Beschreibung des Zahlungsvorgangs im Bestellprozess" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4555,11 +4569,11 @@ msgstr "" "diese Zahlungsmethode auswählt. Er sollte eine kurze Erklärung der " "Zahlungsmethode enthalten." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "Beschreibung des Zahlungsvorgangs in Bestellbestätigungs-E-Mails" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4572,11 +4586,11 @@ msgstr "" "wie die Zahlung vervollständigt werden kann. Die Platzhalter {order}, " "{amount}, {currency} und {amount_with_currency} können verwendet werden." -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "Beschreibung des Zahlungsvorgangs für ausstehende Bestellungen" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4588,59 +4602,59 @@ msgstr "" "{order}, {amount}, {currency} und {amount_with_currency} können verwendet " "werden." -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "Verrechnung" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "Sie haben eine unbekannte Bestellnummer eingegeben." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "Verrechnet mit: %s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "Im Testmodus funktionieren nur Testgutscheine." -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" "Geschenkgutscheine können nicht benutzt werden um Geschenkgutscheine zu " "erwerben." -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "Dieser Geschenkgutschein unterstützt diese Währung nicht." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "Dieser Geschenkgutschein kann nur im Testmodus verwendet werden." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "Im Testmodus können nur Testgutscheine verwendet werden." -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "Dieser Geschenkgutschein ist nicht mehr gültig." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "Auf diesem Geschenkgutschein ist kein Guthaben mehr vorhanden." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "Dieser Geschenkgutschein ist für diese Zahlung bereits in Verwendung." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." @@ -4648,11 +4662,11 @@ msgstr "" "Der Geschenkgutschein kann eingelöst werden, aber {} müssen noch bezahlt " "werden. Bitte wählen Sie eine Zahlungsmethode für den Restbetrag aus." -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "Ihr Geschenkgutschein wurde angewendet." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." @@ -4661,11 +4675,11 @@ msgstr "" "eingegeben. Solche Gutscheine können auf der ersten Shop-Seite unterhalb der " "Produktauswahl eingegeben werden." -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "Dieser Geschenkgutschein ist nicht bekannt." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." @@ -4673,12 +4687,12 @@ msgstr "" "Dieser Geschenkgutschein kann nicht eingelöst werden, da der Code mehrfach " "existiert. Bitte kontaktieren Sie den Veranstalter für Unterstützung." -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" "Dieser Geschenkgutschein wird von diesem Veranstalter nicht akzeptiert." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" "Dieser Geschenkgutschein wurde zwischenzeitlich verwendet. Bitte erneut " @@ -11579,7 +11593,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -11686,7 +11700,7 @@ msgstr "Neues Passwort setzen" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Speichern" @@ -11864,10 +11878,9 @@ msgstr "Art der Karteneingabe" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Kreditkartennummer" @@ -12027,7 +12040,7 @@ msgstr "Dies löscht auch die %(num)s gespeicherten Check-ins." #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -13019,7 +13032,7 @@ msgstr "Installierte Erweiterungen" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Ihre Änderungen wurden gespeichert." @@ -17890,7 +17903,7 @@ msgstr "Die neue Check-in-Liste wurde erstellt." #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -19165,7 +19178,7 @@ msgstr "Badges" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -19502,19 +19515,20 @@ msgstr "Bitte geben Sie Ihre Bankdaten ein." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Kontoinhaber" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "Bank" @@ -20146,7 +20160,7 @@ msgstr "" "hinzu." #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "PayPal" @@ -20166,16 +20180,16 @@ msgstr "" msgid "PayPal account" msgstr "PayPal-Konto" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "{text}" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "Hier klicken für eine Anleitung" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "API-Endpunkt" @@ -20266,8 +20280,8 @@ msgstr "" "PayPal hat die Bezahlung noch nicht bestätigt. Wir informieren Sie, sobald " "die Bezahlung abgeschlossen ist." -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "Es gab einen Fehler beim Versenden der Bestätigungs-E-Mail." @@ -20386,7 +20400,7 @@ msgid "Last update" msgstr "Letzte Änderung" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "Gesamtbetrag" @@ -20407,19 +20421,19 @@ msgstr "" "kontaktieren Sie uns, falls dies mehr als ein paar Stunden dauert." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "Der Zahlungsvorgang wird in einem neuen Fenster fortgesetzt." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" "Das Fenster zur Eingabe der Zahlungsdaten wurde geschlossen oder nie " "geöffnet?" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "Hier klicken um das Fenster zu öffnen." @@ -20846,12 +20860,14 @@ msgstr "" "Bestellungen eingegangen sind!" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "Stripe" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "Dieses Plugin erlaubt, Kreditkartenzahlungen über Stripe anzunehmen" #: pretix/plugins/stripe/forms.py:19 @@ -20863,37 +20879,42 @@ msgstr "" "Der eingegebene Schlüssel \"%(value)s\" sieht ungültig aus. Er sollte mit " "\"%(prefix)s\" beginnen." -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "Stripe Connect: App-Gebühr (Prozent)" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "Stripe Connect: App-Gebühr (max)" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "Stripe Connect: App-Gebühr (min)" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "Um Zahlungen mit Stripe zu akzeptieren, benötigen Sie ein Konto bei Stripe. " "Mit einem Klick auf diesen Button können Sie entweder ein neues Stripe-Konto " "erstellen, oder pretix mit einem bestehenden Stripe-Konto verknüpfen." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "Mit Stripe verbinden" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "Verbindung mit Stripe trennen" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -20905,21 +20926,21 @@ msgstr "" "automatisch als storniert markiert werden, wenn die Zahlung zurückerstattet " "wird und zur Verarbeitung asynchroner Zahlungsmethoden wie SOFORT." -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "MOTO-Zahlungen für Vorverkaufsstellen aktivieren" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" "Eingeschränktes Feature (muss erst vom Stripe-Support aktiviert werden)" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "Stripe Integration Security Guide" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -20935,21 +20956,21 @@ msgstr "" "verpflichtet, jährlich PCI-DSS-Formulare wie z.B. das 40-seitige SAQ D " "auszufüllen. Bitte überprüfen Sie %s für weitere Infos zum Thema." -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "Stripe-Konto" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "Live" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "Test-System" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." @@ -20957,15 +20978,15 @@ msgstr "" "Wenn Ihre Veranstaltung im Testmodus ist, nutzen wir immer die Stripe-Test-" "API, unabhängig von dieser Einstellung." -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Veröffentlichbarer Schlüssel" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Geheimer Schlüssel" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." @@ -20973,39 +20994,96 @@ msgstr "" "Das Land, in dem Ihr Stripe-Account registriert ist. Normalerweise ist dies " "das Land Ihres Wohn- bzw. Firmensitzes." -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Kreditkartenzahlungen" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "Muss erst im Stripe-Account aktiviert werden." -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "iDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "Alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "SOFORT" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -21018,23 +21096,64 @@ msgstr "" "diese Zahlungsmethode nur, wenn die gesetzte Zahlungsfrist für so eine " "Verzögerung ausreichend ist." -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "EPS" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "Multibanco" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "Przelewy24" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "WeChat Pay" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Beschreibung" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of vielen Testkarten verwenden um eine Transaktion durchzuführen. Es wird " "kein echtes Geld transferiert." -#: pretix/plugins/stripe/payment.py:407 pretix/plugins/stripe/payment.py:757 -#: pretix/plugins/stripe/payment.py:852 +#: pretix/plugins/stripe/payment.py:575 +msgid "No payment information found." +msgstr "Keine Zahlungsinformationen gefunden." + +#: pretix/plugins/stripe/payment.py:591 +msgid "Stripe returned an error" +msgstr "Stripe meldete einen Fehler" + +#: pretix/plugins/stripe/payment.py:616 +msgid "" +"We had trouble communicating with Stripe. Please try again and contact " +"support if the problem persists." +msgstr "" +"Bei der Kommunikation mit Stripe ist ein Problem aufgetreten. Bitte " +"versuchen Sie es erneut und setzen Sie sich mit dem Support in Verbindung, " +"wenn das Problem fortbesteht." + +#: pretix/plugins/stripe/payment.py:689 +msgid "You may need to enable JavaScript for Stripe payments." +msgstr "Sie müssen JavaScript aktivieren, um mit Stripe zu bezahlen." + +#: pretix/plugins/stripe/payment.py:761 pretix/plugins/stripe/payment.py:863 +#: pretix/plugins/stripe/payment.py:922 #, python-format msgid "Stripe reported an error with your card: %s" msgstr "Stripe meldete einen Fehler: %s" -#: pretix/plugins/stripe/payment.py:434 pretix/plugins/stripe/payment.py:567 -#: pretix/plugins/stripe/payment.py:770 pretix/plugins/stripe/payment.py:864 -#: pretix/plugins/stripe/payment.py:1436 +#: pretix/plugins/stripe/payment.py:769 pretix/plugins/stripe/payment.py:875 +#: pretix/plugins/stripe/payment.py:936 pretix/plugins/stripe/payment.py:1002 msgid "" "We had trouble communicating with Stripe. Please try again and get in touch " "with us if this problem persists." @@ -21062,7 +21201,7 @@ msgstr "" "versuchen Sie es erneut und setzen Sie sich mit uns in Verbindung, wenn das " "Problem fortbesteht." -#: pretix/plugins/stripe/payment.py:452 pretix/plugins/stripe/payment.py:804 +#: pretix/plugins/stripe/payment.py:801 msgid "" "Your payment is pending completion. We will inform you as soon as the " "payment completed." @@ -21070,246 +21209,328 @@ msgstr "" "Die Zahlung wurde noch nicht bestätigt. Wir informieren Sie, sobald die " "Bezahlung abgeschlossen ist." -#: pretix/plugins/stripe/payment.py:461 pretix/plugins/stripe/payment.py:818 +#: pretix/plugins/stripe/payment.py:808 +msgid "Your payment failed. Please try again." +msgstr "Ihre Zahlung ist fehlgeschlagen, bitte erneut versuchen." + +#: pretix/plugins/stripe/payment.py:814 pretix/plugins/stripe/payment.py:970 #, python-format msgid "Stripe reported an error: %s" msgstr "Stripe meldete einen Fehler: %s" -#: pretix/plugins/stripe/payment.py:517 -msgid "No payment information found." -msgstr "Keine Zahlungsinformationen gefunden." - -#: pretix/plugins/stripe/payment.py:538 +#: pretix/plugins/stripe/payment.py:963 +#, fuzzy +#| msgid "" +#| "Your payment is pending completion. We will inform you as soon as the " +#| "payment completed." msgid "" -"We had trouble communicating with Stripe. Please try again and contact " -"support if the problem persists." +"Your payment is pending completion. We will inform you as soon as the " +"payment is completed." msgstr "" -"Bei der Kommunikation mit Stripe ist ein Problem aufgetreten. Bitte " -"versuchen Sie es erneut und setzen Sie sich mit dem Support in Verbindung, " -"wenn das Problem fortbesteht." - -#: pretix/plugins/stripe/payment.py:542 -msgid "Stripe returned an error" -msgstr "Stripe meldete einen Fehler" +"Die Zahlung wurde noch nicht bestätigt. Wir informieren Sie, sobald die " +"Bezahlung abgeschlossen ist." -#: pretix/plugins/stripe/payment.py:638 +#: pretix/plugins/stripe/payment.py:1035 msgid "Credit card via Stripe" msgstr "Kreditkarte über Stripe" -#: pretix/plugins/stripe/payment.py:639 +#: pretix/plugins/stripe/payment.py:1036 msgid "Credit card" msgstr "Kreditkarte" -#: pretix/plugins/stripe/payment.py:666 -msgid "You may need to enable JavaScript for Stripe payments." -msgstr "Sie müssen JavaScript aktivieren, um mit Stripe zu bezahlen." +#: pretix/plugins/stripe/payment.py:1116 +#, fuzzy +#| msgid "EPS via Stripe" +msgid "SEPA Debit via Stripe" +msgstr "EPS über Stripe" -#: pretix/plugins/stripe/payment.py:812 -msgid "Your payment failed. Please try again." -msgstr "Ihre Zahlung ist fehlgeschlagen, bitte erneut versuchen." +#: pretix/plugins/stripe/payment.py:1117 +msgid "SEPA Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1155 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Name" +msgstr "Kontoinhaber" + +#: pretix/plugins/stripe/payment.py:1159 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Street" +msgstr "Kontoinhaber" -#: pretix/plugins/stripe/payment.py:885 +#: pretix/plugins/stripe/payment.py:1168 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Postal Code" +msgstr "Kontoinhaber" + +#: pretix/plugins/stripe/payment.py:1177 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder City" +msgstr "Kontoinhaber" + +#: pretix/plugins/stripe/payment.py:1186 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Country" +msgstr "Kontoinhaber" + +#: pretix/plugins/stripe/payment.py:1224 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Affirm via Stripe" +msgstr "Alipay über Stripe" + +#: pretix/plugins/stripe/payment.py:1263 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Klarna via Stripe" +msgstr "Alipay über Stripe" + +#: pretix/plugins/stripe/payment.py:1368 msgid "giropay via Stripe" msgstr "giropay über Stripe" -#: pretix/plugins/stripe/payment.py:917 pretix/plugins/stripe/payment.py:1084 -#: pretix/plugins/stripe/payment.py:1236 +#: pretix/plugins/stripe/payment.py:1372 +msgid "" +"giropay is an online payment method available to all customers of most " +"German banks, usually after one-time activation. Please keep your online " +"banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1383 pretix/plugins/stripe/payment.py:1451 +#: pretix/plugins/stripe/payment.py:1554 msgid "unknown name" msgstr "unbekannter Name" -#: pretix/plugins/stripe/payment.py:949 pretix/plugins/stripe/payment.py:1001 -#: pretix/plugins/stripe/payment.py:1116 pretix/plugins/stripe/payment.py:1268 -#: pretix/plugins/stripe/payment.py:1371 +#: pretix/plugins/stripe/payment.py:1395 pretix/plugins/stripe/payment.py:1415 +#: pretix/plugins/stripe/payment.py:1459 pretix/plugins/stripe/payment.py:1562 +#: pretix/plugins/stripe/payment.py:1654 #, python-brace-format msgid "Bank account at {bank}" msgstr "Bankkonto bei {bank}" -#: pretix/plugins/stripe/payment.py:957 +#: pretix/plugins/stripe/payment.py:1403 msgid "iDEAL via Stripe" msgstr "iDEAL über Stripe" -#: pretix/plugins/stripe/payment.py:1009 +#: pretix/plugins/stripe/payment.py:1407 +msgid "" +"iDEAL is an online payment method available to customers of Dutch banks. " +"Please keep your online banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1428 msgid "Alipay via Stripe" msgstr "Alipay über Stripe" -#: pretix/plugins/stripe/payment.py:1052 +#: pretix/plugins/stripe/payment.py:1433 +msgid "" +"This payment method is available to customers of the Chinese payment system " +"Alipay. Please keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1440 msgid "Bancontact via Stripe" msgstr "Bancontact über Stripe" -#: pretix/plugins/stripe/payment.py:1124 +#: pretix/plugins/stripe/payment.py:1472 msgid "SOFORT via Stripe" msgstr "SOFORT via Stripe" -#: pretix/plugins/stripe/payment.py:1141 +#: pretix/plugins/stripe/payment.py:1473 +#, fuzzy +#| msgid "Payment by bank transfer" +msgid "SOFORT (instant bank transfer)" +msgstr "Zahlung per Banküberweisung" + +#: pretix/plugins/stripe/payment.py:1491 msgid "Country of your bank" msgstr "Land der Bank" -#: pretix/plugins/stripe/payment.py:1142 +#: pretix/plugins/stripe/payment.py:1492 msgid "Germany" msgstr "Deutschland" -#: pretix/plugins/stripe/payment.py:1143 +#: pretix/plugins/stripe/payment.py:1493 msgid "Austria" msgstr "Österreich" -#: pretix/plugins/stripe/payment.py:1144 +#: pretix/plugins/stripe/payment.py:1494 msgid "Belgium" msgstr "Belgien" -#: pretix/plugins/stripe/payment.py:1145 +#: pretix/plugins/stripe/payment.py:1495 msgid "Netherlands" msgstr "Niederlande" -#: pretix/plugins/stripe/payment.py:1146 +#: pretix/plugins/stripe/payment.py:1496 msgid "Spain" msgstr "Spanien" -#: pretix/plugins/stripe/payment.py:1193 +#: pretix/plugins/stripe/payment.py:1532 #, python-brace-format msgid "Bank account {iban} at {bank}" msgstr "Bankkonto {iban} bei {bank}" -#: pretix/plugins/stripe/payment.py:1204 +#: pretix/plugins/stripe/payment.py:1543 msgid "EPS via Stripe" msgstr "EPS über Stripe" -#: pretix/plugins/stripe/payment.py:1276 +#: pretix/plugins/stripe/payment.py:1575 msgid "Multibanco via Stripe" msgstr "Multibanco über Stripe" -#: pretix/plugins/stripe/payment.py:1323 +#: pretix/plugins/stripe/payment.py:1624 msgid "Przelewy24 via Stripe" msgstr "Przelewy24 über Stripe" -#: pretix/plugins/stripe/payment.py:1379 +#: pretix/plugins/stripe/payment.py:1628 +msgid "" +"Przelewy24 is an online payment method available to customers of Polish " +"banks. Please keep your online banking account and login information " +"available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1662 msgid "WeChat Pay via Stripe" msgstr "WeChat Pay über Stripe" -#: pretix/plugins/stripe/signals.py:65 +#: pretix/plugins/stripe/payment.py:1667 +msgid "" +"This payment method is available to users of the Chinese app WeChat. Please " +"keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1690 +#, fuzzy +#| msgid "Payment via Stripe" +msgid "PayPal via Stripe" +msgstr "Zahlung über Stripe" + +#: pretix/plugins/stripe/payment.py:1697 +#, fuzzy +#| msgid "EPS via Stripe" +msgid "Swish via Stripe" +msgstr "EPS über Stripe" + +#: pretix/plugins/stripe/payment.py:1702 +msgid "" +"This payment method is available to users of the Swedish apps Swish and " +"BankID. Please have your app ready." +msgstr "" + +#: pretix/plugins/stripe/signals.py:70 msgid "Charge succeeded." msgstr "Buchung erfolgreich." -#: pretix/plugins/stripe/signals.py:66 +#: pretix/plugins/stripe/signals.py:71 msgid "Charge refunded." msgstr "Buchung erstattet." -#: pretix/plugins/stripe/signals.py:67 +#: pretix/plugins/stripe/signals.py:72 msgid "Charge updated." msgstr "Buchung geändert." -#: pretix/plugins/stripe/signals.py:68 +#: pretix/plugins/stripe/signals.py:73 msgid "Charge pending" msgstr "Zahlung ausstehend" -#: pretix/plugins/stripe/signals.py:69 +#: pretix/plugins/stripe/signals.py:74 msgid "Payment authorized." msgstr "Zahlung autorisiert." -#: pretix/plugins/stripe/signals.py:70 +#: pretix/plugins/stripe/signals.py:75 msgid "Payment authorization canceled." msgstr "Zahlungsautorisierung abgebrochen." -#: pretix/plugins/stripe/signals.py:71 +#: pretix/plugins/stripe/signals.py:76 msgid "Payment authorization failed." msgstr "Zahlungsautorisierung fehlgeschlagen." -#: pretix/plugins/stripe/signals.py:77 +#: pretix/plugins/stripe/signals.py:82 msgid "Charge failed. Reason: {}" msgstr "Buchung fehlgeschlagen. Grund: {}" -#: pretix/plugins/stripe/signals.py:79 +#: pretix/plugins/stripe/signals.py:84 msgid "Dispute created. Reason: {}" msgstr "Buchung durch Kunden angefochten. Grund: {}" -#: pretix/plugins/stripe/signals.py:81 +#: pretix/plugins/stripe/signals.py:86 msgid "Dispute updated. Reason: {}" msgstr "Die Anfechtung hat sich geändert. Grund: {}" -#: pretix/plugins/stripe/signals.py:83 +#: pretix/plugins/stripe/signals.py:88 msgid "Dispute closed. Status: {}" msgstr "Anfechtungsverfahren beendet. Grund. {}" -#: pretix/plugins/stripe/signals.py:86 +#: pretix/plugins/stripe/signals.py:91 msgid "Stripe reported an event: {}" msgstr "Stripe meldete ein Ereignis: {}" -#: pretix/plugins/stripe/signals.py:97 +#: pretix/plugins/stripe/signals.py:102 msgid "Stripe Connect: Client ID" msgstr "Stripe Connect: Client-ID" -#: pretix/plugins/stripe/signals.py:104 +#: pretix/plugins/stripe/signals.py:109 msgid "Stripe Connect: Secret key" msgstr "Stripe Connect: Geheimer Schlüssel" -#: pretix/plugins/stripe/signals.py:111 +#: pretix/plugins/stripe/signals.py:116 msgid "Stripe Connect: Publishable key" msgstr "Stripe Connect: Veröffentlichbarer Schlüssel" -#: pretix/plugins/stripe/signals.py:118 +#: pretix/plugins/stripe/signals.py:123 msgid "Stripe Connect: Secret key (test)" msgstr "Stripe Connect: Geheimer Schlüssel (Testmodus)" -#: pretix/plugins/stripe/signals.py:125 +#: pretix/plugins/stripe/signals.py:130 msgid "Stripe Connect: Publishable key (test)" msgstr "Stripe Connect: Öffentlicher Schlüssel (Testmodus)" -#: pretix/plugins/stripe/signals.py:170 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:6 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:9 +#: pretix/plugins/stripe/signals.py:156 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:3 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:9 msgid "Stripe Connect" msgstr "Stripe Connect" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"Die Stripe-Zahlung %(charge)s war erfolgreich, aber " -"die Bestellung %(order)s wurde bereits mit einer anderen Methode bezahlt. " -"Bitte kontaktieren Sie den Kunden und überweisen Sie das Geld über Stripes " -"Oberfläche zurück." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"Die Stripe-Zahlung %(charge)s war erfolgreich, aber " -"die Bestellung %(order)s war abgelaufen und das Produkt wurde während der " -"Transaktion ausverkauft. Die Zahlung konnte daher nicht akzeptiert werden. " -"Bitte kontaktieren Sie den Kunden und überweisen Sie das Geld über Stripes " -"Oberfläche zurück." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"Stripe hat gemeldet, dass die Zahlung %(charge)s " -"erstattet oder storniert wurde. Soll die passende Bestellung (%(order)s) als " -"erstattet markiert werden?" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "Der Gesamtbetrag wird von Ihrer Kreditkarte eingezogen." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "Kartentyp" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "Der Gesamtbetrag wird von Ihrer Kreditkarte eingezogen." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Kontoinhaber" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -21319,7 +21540,7 @@ msgstr "" "weiterleiten, um Ihre Zahlungsdaten einzugeben. Sie werden danach wieder " "hierher zurückgeleitet, um Ihre Bestellung zu bestätigen." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" @@ -21327,13 +21548,13 @@ msgstr "" "Diese Transaktion wird als Mail Order/Telephone Order markiert, wodurch wenn " "möglich keine Starke Kundenauthentifizierung (SCA) nötig ist" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" "Bitte aktivieren Sie JavaScript in Ihrem Browser, um mit Kreditkarte " "bezahlen zu können." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." @@ -21341,15 +21562,15 @@ msgstr "" "Sie haben bereits eine Kartennummer eingegeben, die wir für die Zahlung " "benutzen werden." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "Andere Kreditkarte verwenden" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "ODER" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -21358,26 +21579,82 @@ msgstr "" "werden direkt an Stripe übertragen und kommen nicht in Kontakt mit unseren " "Servern." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "" +"Bitte aktivieren Sie JavaScript in Ihrem Browser, um mit Kreditkarte " +"bezahlen zu können." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"Sie haben bereits eine Kartennummer eingegeben, die wir für die Zahlung " +"benutzen werden." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "Andere Kreditkarte verwenden" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "Charge-ID" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "Name des Zahlenden" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "MOTO" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "Name des Zahlenden" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "Fehlermeldung" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to regenerate your emergency codes?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Möchten Sie wirklich neue Notfall-Tokens generieren?" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Connect" +msgid "Disconnect" +msgstr "Verbinden" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -21386,7 +21663,7 @@ msgstr "" "Zahlung. Bitte kontaktieren Sie uns, falls dies mehr als ein paar Tage " "dauert." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." @@ -21394,11 +21671,11 @@ msgstr "" "Sie müssen Ihre Zahlung bestätigen. Bitte klicken Sie den Link weiter unten " "um dies zu erledigen oder eine neue Zahlung zu starten." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "Zahlung bestätigen" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." @@ -21406,56 +21683,60 @@ msgstr "" "Bitte scannen Sie den angezeigten Barcode um Ihre WeChat-Zahlung " "durchzuführen. Danach können Sie diese Seite neu laden." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "Die Zahlung konnte aus folgendem Grund nicht abgeschlossen werden:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Unbekannter Grund" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Bestellung bezahlen" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "Zahlung bestätigen: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "Zahlung bestätigen…" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" "Während der Verbindung mit Stripe ist ein Fehler aufgetreten, bitte " "versuchen Sie es erneut." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "Stripe meldete einen Fehler: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" "Ihr Stripe-Konto ist nun mit pretix verbunden. Auf dieser Seite können Sie " "die Einstellungen im Detail anpassen." -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "Das Stripe-Konto wurde getrennt." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -21464,7 +21745,7 @@ msgstr "" "Sie auf den Link in der E-Mail, die wir Ihnen geschickt haben, um " "fortzufahren." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -21472,7 +21753,7 @@ msgstr "" "Wir konnten die Zahlung nicht verarbeiten. Bitte probieren Sie es erneut und " "kontaktieren Sie uns, falls das Problem fortbesteht." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "Im Zahlungsvorgang ist ein Fehler aufgetreten." @@ -23505,6 +23786,40 @@ msgstr "Schreibzugriff" msgid "Kosovo" msgstr "Kosovo" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Die Stripe-Zahlung %(charge)s war erfolgreich, " +#~ "aber die Bestellung %(order)s wurde bereits mit einer anderen Methode " +#~ "bezahlt. Bitte kontaktieren Sie den Kunden und überweisen Sie das Geld " +#~ "über Stripes Oberfläche zurück." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Die Stripe-Zahlung %(charge)s war erfolgreich, " +#~ "aber die Bestellung %(order)s war abgelaufen und das Produkt wurde " +#~ "während der Transaktion ausverkauft. Die Zahlung konnte daher nicht " +#~ "akzeptiert werden. Bitte kontaktieren Sie den Kunden und überweisen Sie " +#~ "das Geld über Stripes Oberfläche zurück." + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "Stripe hat gemeldet, dass die Zahlung %(charge)s " +#~ "erstattet oder storniert wurde. Soll die passende Bestellung (%(order)s) " +#~ "als erstattet markiert werden?" + #~ msgid "Default list" #~ msgstr "Standard-Liste" diff --git a/src/pretix/locale/de/LC_MESSAGES/djangojs.po b/src/pretix/locale/de/LC_MESSAGES/djangojs.po index 91cd5c76a..d62223d9e 100644 --- a/src/pretix/locale/de/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/de/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2021-03-30 19:44+0000\n" "Last-Translator: Richard Schreiber \n" "Language-Team: German \n" "Language-Team: German (informal) " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Leer, wenn dies kein Eintrittsticket ist" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Firmenname" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Land auswählen" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "erstellt" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "ausstehend" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "bestätigt" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "abgebrochen" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "fehlgeschlagen" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "erstattet" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Zahlungsinformationen" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "Registrierung bestätigt: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Zahlung erhalten für die Bestellung: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "extern gestartet" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "erstellt" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "auf dem Weg" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "erledigt" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "fehlgeschlagen" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "abgebrochen" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Veranstalter" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Kunde" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Extern" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "Grund für die Erstattung" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" @@ -3512,66 +3512,66 @@ msgid "" msgstr "" "Kann dem Nutzer angezeigt werden, z.B. als Teil eines Verwendungszwecks." -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Zahlungsgebühr" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Versandkosten" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Servicegebühr" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Stornogebühr" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Andere Gebühren" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Geschenkgutschein" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Wert" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Bestelltes Produkt" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "Deine Registrierung: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "Warenkorb-ID (z.B. Session-ID)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Produkt im Warenkorb" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Produkte im Warenkorb" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Nur für Firmenkunden mit Sitz in der EU." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" "Diese Referenz wird auf deine Rechnung gedruckt, damit du die Rechnung " @@ -3744,7 +3744,7 @@ msgstr "" "Steuerberater aktiviert werden. Wir übernehmen keine Haftung für die " "korrekte Berechnung der Steuern. Benutzung auf eigene Gefahr." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "Land des Händlers" @@ -4363,22 +4363,36 @@ msgstr "Du musst einen Sitzplatz auswählen." msgid "Ambiguous option selected." msgstr "Mehrdeutige Option ausgewählt." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "Anwenden" + +#: pretix/base/payment.py:54 +#, fuzzy +#| msgid "Android (Google Play)" +msgctxt "payment" +msgid "Google Pay" +msgstr "Android (Google Play)" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Aktiviere Zahlungsmethode" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Käufer können diese Zahlungsmethode nur bis zu (einschließlich) diesem Datum " "auswählen." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Text auf Rechnungen" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4390,11 +4404,11 @@ msgstr "" "Wird die Rechnung nach Eingang der Zahlung generiert, erscheint stattdessen " "ein Text der sagt, dass die Rechnung bereits bezahlt wurde." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Minimaler Gesamtbetrag" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4404,11 +4418,11 @@ msgstr "" "größer oder gleich dem angegebenen Wert ist. Der Gesamtbetrag wird hierfür " "gegebenenfalls ohne Einbeziehung eventueller Zahlungsgebühren berechnet." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Maximaler Gesamtbetrag" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4418,23 +4432,23 @@ msgstr "" "kleiner oder gleich dem angegebenen Wert ist. Der Gesamtbetrag wird hierfür " "gegebenenfalls ohne Einbeziehung eventueller Zahlungsgebühren berechnet." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Zusätzliche Gebühr" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Fester Betrag" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "Prozentsatz der Bestellsumme." -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Berechne die Gebühr als Anteil vom Endbetrag." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4447,11 +4461,11 @@ msgstr "" "die richtigen Gebührensätze des Zahlungsanbieters einzustellen. Weitere Informationen." -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "Auf Länder einschränken" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4462,18 +4476,18 @@ msgstr "" "Zahlungsmethode allen angeboten. Dies ist nur möglich, wenn " "Rechnungsadressen eingegeben werden müssen." -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" "Schränkt die Auswahl dieser Zahlungsmethode auf die ausgewählten " "Verkaufskanäle ein." -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "Zahlungsmethode verstecken" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." @@ -4481,27 +4495,27 @@ msgstr "" "Die Zahlungsmethode wird standardmäßig nicht angezeigt, sondern nur wenn der " "Shop über einen speziellen Link aufgerufen wurde." -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "Link zur Aktivierung" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" "Teile diesen Link mit Kunden, die diese Zahlungsmethode nutzen können sollen." -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "Die Zahlung für diese Rechnung ist bereits eingegangen." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" "Automatische Rückbuchungen werden von dieser Zahlungsmethode nicht " "unterstützt." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4509,21 +4523,21 @@ msgstr "" "Es ist keine Zahlung erforderlich, da diese Bestellung nur kostenlose " "Produkte enthält." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Kostenlos" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Abendkasse" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "Manuelle Zahlung" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." @@ -4531,15 +4545,15 @@ msgstr "" "Im Testmodus kannst du die Bestellung zum Testen einfach im Backend als " "bezahlt markieren." -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "Name der Zahlungsmethode" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "Beschreibung des Zahlungsvorgangs im Bestellprozess" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4548,11 +4562,11 @@ msgstr "" "diese Zahlungsmethode auswählt. Er sollte eine kurze Erklärung der " "Zahlungsmethode enthalten." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "Beschreibung des Zahlungsvorgangs in Bestellbestätigungs-E-Mails" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4565,11 +4579,11 @@ msgstr "" "wie die Zahlung vervollständigt werden kann. Die Platzhalter {order}, " "{amount}, {currency} und {amount_with_currency} können verwendet werden." -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "Beschreibung des Zahlungsvorgangs für ausstehende Bestellungen" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4581,59 +4595,59 @@ msgstr "" "{order}, {amount}, {currency} und {amount_with_currency} können verwendet " "werden." -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "Verrechnung" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "Du hast eine unbekannte Bestellnummer eingegeben." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "Verrechnet mit: %s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "Im Testmodus funktionieren nur Testgutscheine." -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" "Geschenkgutscheine können nicht benutzt werden um Geschenkgutscheine zu " "erwerben." -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "Dieser Geschenkgutschein unterstützt diese Währung nicht." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "Dieser Geschenkgutschein kann nur im Testmodus verwendet werden." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "Im Testmodus können nur Testgutscheine verwendet werden." -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "Dieser Geschenkgutschein ist nicht mehr gültig." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "Auf diesem Geschenkgutschein ist kein Guthaben mehr vorhanden." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "Dieser Geschenkgutschein ist für diese Zahlung bereits in Verwendung." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." @@ -4641,11 +4655,11 @@ msgstr "" "Der Geschenkgutschein kann eingelöst werden, aber {} müssen noch bezahlt " "werden. Bitte wähle eine Zahlungsmethode für den Restbetrag aus." -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "Dein Geschenkgutschein wurde angewendet." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." @@ -4654,11 +4668,11 @@ msgstr "" "eingegeben. Solche Gutscheine können auf der ersten Shop-Seite unterhalb der " "Produktauswahl eingegeben werden." -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "Dieser Geschenkgutschein ist nicht bekannt." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." @@ -4666,12 +4680,12 @@ msgstr "" "Dieser Geschenkgutschein kann nicht eingelöst werden, da der Code mehrfach " "existiert. Bitte kontaktiere den Veranstalter für Unterstützung." -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" "Dieser Geschenkgutschein wird von diesem Veranstalter nicht akzeptiert." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" "Dieser Geschenkgutschein wurde zwischenzeitlich verwendet. Bitte erneut " @@ -11561,7 +11575,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -11668,7 +11682,7 @@ msgstr "Neues Passwort setzen" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Speichern" @@ -11845,10 +11859,9 @@ msgstr "Art der Karteneingabe" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Kreditkartennummer" @@ -12008,7 +12021,7 @@ msgstr "Dies löscht auch die %(num)s gespeicherten Check-ins." #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -12998,7 +13011,7 @@ msgstr "Installierte Erweiterungen" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Deine Änderungen wurden gespeichert." @@ -17858,7 +17871,7 @@ msgstr "Die neue Check-in-Liste wurde erstellt." #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -19131,7 +19144,7 @@ msgstr "Badges" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -19467,19 +19480,20 @@ msgstr "Bitte gib deine Bankdaten ein." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Kontoinhaber" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "Bank" @@ -20108,7 +20122,7 @@ msgstr "" "hinzu." #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "PayPal" @@ -20128,16 +20142,16 @@ msgstr "" msgid "PayPal account" msgstr "PayPal-Konto" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "{text}" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "Hier klicken für eine Anleitung" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "Endpunkt" @@ -20227,8 +20241,8 @@ msgstr "" "PayPal hat die Bezahlung noch nicht bestätigt. Wir informieren dich, sobald " "die Bezahlung abgeschlossen ist." -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "Es gab einen Fehler beim Versenden der Bestätigungs-E-Mail." @@ -20345,7 +20359,7 @@ msgid "Last update" msgstr "Letzte Änderung" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "Gesamtbetrag" @@ -20366,19 +20380,19 @@ msgstr "" "kontaktiere uns, falls dies mehr als ein paar Stunden dauert." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "Der Zahlungsvorgang wird in einem neuen Fenster fortgesetzt." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" "Das Fenster zur Eingabe der Zahlungsdaten wurde geschlossen oder nie " "geöffnet?" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "Hier klicken um das Fenster zu öffnen." @@ -20806,12 +20820,14 @@ msgstr "" "Bestellungen eingegangen sind!" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "Stripe" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "Dieses Plugin erlaubt, Kreditkartenzahlungen über Stripe anzunehmen" #: pretix/plugins/stripe/forms.py:19 @@ -20823,37 +20839,42 @@ msgstr "" "Der eingegebene Schlüssel \"%(value)s\" sieht ungültig aus. Er sollte mit " "\"%(prefix)s\" beginnen." -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "Stripe Connect: App-Gebühr (Prozent)" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "Stripe Connect: App-Gebühr (max)" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "Stripe Connect: App-Gebühr (min)" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "Um Zahlungen mit Stripe zu akzeptieren, benötigst du ein Konto bei Stripe. " "Mit einem Klick auf diesen Button kannst du entweder ein neues Stripe-Konto " "erstellen, oder pretix mit einem bestehenden Stripe-Konto verknüpfen." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "Mit Stripe verbinden" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "Verbindung mit Stripe trennen" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -20865,21 +20886,21 @@ msgstr "" "automatisch als storniert markiert werden, wenn die Zahlung zurückerstattet " "wird und zur Verarbeitung asynchroner Zahlungsmethoden wie SOFORT." -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "MOTO-Zahlungen für Vorverkaufsstellen aktivieren" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" "Eingeschränktes Feature (muss erst vom Stripe-Support aktiviert werden)" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "Stripe Integration Security Guide" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -20895,21 +20916,21 @@ msgstr "" "verpflichtet, jährlich PCI-DSS-Formulare wie z.B. das 40-seitige SAQ D " "auszufüllen. Bitte überprüfe %s für weitere Infos zum Thema." -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "Stripe-Konto" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "Live" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "Test-System" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." @@ -20917,15 +20938,15 @@ msgstr "" "Wenn deine Veranstaltung im Testmodus ist, nutzen wir immer die Stripe-Test-" "API, unabhängig von dieser Einstellung." -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Veröffentlichbarer Schlüssel" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Geheimer Schlüssel" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." @@ -20933,39 +20954,96 @@ msgstr "" "Das Land, in dem dein Stripe-Account registriert ist. Normalerweise ist dies " "das Land deines Wohn- bzw. Firmensitzes." -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Kreditkartenzahlungen" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "Muss erst im Stripe-Account aktiviert werden." -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "iDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "Alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "SOFORT" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -20978,23 +21056,64 @@ msgstr "" "Zahlungsmethode nur, wenn die gesetzte Zahlungsfrist für so eine Verzögerung " "ausreichend ist." -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "EPS" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "Multibanco" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "Przelewy24" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "WeChat Pay" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Beschreibung" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of vielen Testkarten verwenden um eine Transaktion durchzuführen. Es wird " "kein echtes Geld transferiert." -#: pretix/plugins/stripe/payment.py:407 pretix/plugins/stripe/payment.py:757 -#: pretix/plugins/stripe/payment.py:852 +#: pretix/plugins/stripe/payment.py:575 +msgid "No payment information found." +msgstr "Keine Zahlungsinformationen gefunden." + +#: pretix/plugins/stripe/payment.py:591 +msgid "Stripe returned an error" +msgstr "Stripe meldete einen Fehler" + +#: pretix/plugins/stripe/payment.py:616 +msgid "" +"We had trouble communicating with Stripe. Please try again and contact " +"support if the problem persists." +msgstr "" +"Bei der Kommunikation mit Stripe ist ein Problem aufgetreten. Bitte versuche " +"es erneut und setz dich mit dem Support in Verbindung, wenn das Problem " +"fortbesteht." + +#: pretix/plugins/stripe/payment.py:689 +msgid "You may need to enable JavaScript for Stripe payments." +msgstr "Du musst JavaScript aktivieren, um mit Stripe zu bezahlen." + +#: pretix/plugins/stripe/payment.py:761 pretix/plugins/stripe/payment.py:863 +#: pretix/plugins/stripe/payment.py:922 #, python-format msgid "Stripe reported an error with your card: %s" msgstr "Stripe meldete einen Fehler: %s" -#: pretix/plugins/stripe/payment.py:434 pretix/plugins/stripe/payment.py:567 -#: pretix/plugins/stripe/payment.py:770 pretix/plugins/stripe/payment.py:864 -#: pretix/plugins/stripe/payment.py:1436 +#: pretix/plugins/stripe/payment.py:769 pretix/plugins/stripe/payment.py:875 +#: pretix/plugins/stripe/payment.py:936 pretix/plugins/stripe/payment.py:1002 msgid "" "We had trouble communicating with Stripe. Please try again and get in touch " "with us if this problem persists." @@ -21021,7 +21160,7 @@ msgstr "" "Bei der Kommunikation mit Stripe ist ein Problem aufgetreten. Bitte versuche " "es erneut und setze dich mit uns in Verbindung, wenn das Problem fortbesteht." -#: pretix/plugins/stripe/payment.py:452 pretix/plugins/stripe/payment.py:804 +#: pretix/plugins/stripe/payment.py:801 msgid "" "Your payment is pending completion. We will inform you as soon as the " "payment completed." @@ -21029,246 +21168,328 @@ msgstr "" "Die Zahlung wurde noch nicht bestätigt. Wir informieren dich, sobald die " "Bezahlung abgeschlossen ist." -#: pretix/plugins/stripe/payment.py:461 pretix/plugins/stripe/payment.py:818 +#: pretix/plugins/stripe/payment.py:808 +msgid "Your payment failed. Please try again." +msgstr "Ihre Zahlung ist fehlgeschlagen, bitte erneut versuchen." + +#: pretix/plugins/stripe/payment.py:814 pretix/plugins/stripe/payment.py:970 #, python-format msgid "Stripe reported an error: %s" msgstr "Stripe meldete einen Fehler: %s" -#: pretix/plugins/stripe/payment.py:517 -msgid "No payment information found." -msgstr "Keine Zahlungsinformationen gefunden." - -#: pretix/plugins/stripe/payment.py:538 +#: pretix/plugins/stripe/payment.py:963 +#, fuzzy +#| msgid "" +#| "Your payment is pending completion. We will inform you as soon as the " +#| "payment completed." msgid "" -"We had trouble communicating with Stripe. Please try again and contact " -"support if the problem persists." +"Your payment is pending completion. We will inform you as soon as the " +"payment is completed." msgstr "" -"Bei der Kommunikation mit Stripe ist ein Problem aufgetreten. Bitte versuche " -"es erneut und setz dich mit dem Support in Verbindung, wenn das Problem " -"fortbesteht." - -#: pretix/plugins/stripe/payment.py:542 -msgid "Stripe returned an error" -msgstr "Stripe meldete einen Fehler" +"Die Zahlung wurde noch nicht bestätigt. Wir informieren dich, sobald die " +"Bezahlung abgeschlossen ist." -#: pretix/plugins/stripe/payment.py:638 +#: pretix/plugins/stripe/payment.py:1035 msgid "Credit card via Stripe" msgstr "Kreditkarte über Stripe" -#: pretix/plugins/stripe/payment.py:639 +#: pretix/plugins/stripe/payment.py:1036 msgid "Credit card" msgstr "Kreditkarte" -#: pretix/plugins/stripe/payment.py:666 -msgid "You may need to enable JavaScript for Stripe payments." -msgstr "Du musst JavaScript aktivieren, um mit Stripe zu bezahlen." +#: pretix/plugins/stripe/payment.py:1116 +#, fuzzy +#| msgid "EPS via Stripe" +msgid "SEPA Debit via Stripe" +msgstr "EPS über Stripe" -#: pretix/plugins/stripe/payment.py:812 -msgid "Your payment failed. Please try again." -msgstr "Ihre Zahlung ist fehlgeschlagen, bitte erneut versuchen." +#: pretix/plugins/stripe/payment.py:1117 +msgid "SEPA Debit" +msgstr "" -#: pretix/plugins/stripe/payment.py:885 +#: pretix/plugins/stripe/payment.py:1155 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Name" +msgstr "Kontoinhaber" + +#: pretix/plugins/stripe/payment.py:1159 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Street" +msgstr "Kontoinhaber" + +#: pretix/plugins/stripe/payment.py:1168 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Postal Code" +msgstr "Kontoinhaber" + +#: pretix/plugins/stripe/payment.py:1177 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder City" +msgstr "Kontoinhaber" + +#: pretix/plugins/stripe/payment.py:1186 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Country" +msgstr "Kontoinhaber" + +#: pretix/plugins/stripe/payment.py:1224 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Affirm via Stripe" +msgstr "Alipay über Stripe" + +#: pretix/plugins/stripe/payment.py:1263 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Klarna via Stripe" +msgstr "Alipay über Stripe" + +#: pretix/plugins/stripe/payment.py:1368 msgid "giropay via Stripe" msgstr "giropay über Stripe" -#: pretix/plugins/stripe/payment.py:917 pretix/plugins/stripe/payment.py:1084 -#: pretix/plugins/stripe/payment.py:1236 +#: pretix/plugins/stripe/payment.py:1372 +msgid "" +"giropay is an online payment method available to all customers of most " +"German banks, usually after one-time activation. Please keep your online " +"banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1383 pretix/plugins/stripe/payment.py:1451 +#: pretix/plugins/stripe/payment.py:1554 msgid "unknown name" msgstr "unbekannter Name" -#: pretix/plugins/stripe/payment.py:949 pretix/plugins/stripe/payment.py:1001 -#: pretix/plugins/stripe/payment.py:1116 pretix/plugins/stripe/payment.py:1268 -#: pretix/plugins/stripe/payment.py:1371 +#: pretix/plugins/stripe/payment.py:1395 pretix/plugins/stripe/payment.py:1415 +#: pretix/plugins/stripe/payment.py:1459 pretix/plugins/stripe/payment.py:1562 +#: pretix/plugins/stripe/payment.py:1654 #, python-brace-format msgid "Bank account at {bank}" msgstr "Bankkonto bei {bank}" -#: pretix/plugins/stripe/payment.py:957 +#: pretix/plugins/stripe/payment.py:1403 msgid "iDEAL via Stripe" msgstr "iDEAL über Stripe" -#: pretix/plugins/stripe/payment.py:1009 +#: pretix/plugins/stripe/payment.py:1407 +msgid "" +"iDEAL is an online payment method available to customers of Dutch banks. " +"Please keep your online banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1428 msgid "Alipay via Stripe" msgstr "Alipay über Stripe" -#: pretix/plugins/stripe/payment.py:1052 +#: pretix/plugins/stripe/payment.py:1433 +msgid "" +"This payment method is available to customers of the Chinese payment system " +"Alipay. Please keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1440 msgid "Bancontact via Stripe" msgstr "Bancontact über Stripe" -#: pretix/plugins/stripe/payment.py:1124 +#: pretix/plugins/stripe/payment.py:1472 msgid "SOFORT via Stripe" msgstr "SOFORT via Stripe" -#: pretix/plugins/stripe/payment.py:1141 +#: pretix/plugins/stripe/payment.py:1473 +#, fuzzy +#| msgid "Payment by bank transfer" +msgid "SOFORT (instant bank transfer)" +msgstr "Zahlung per Banküberweisung" + +#: pretix/plugins/stripe/payment.py:1491 msgid "Country of your bank" msgstr "Land der Bank" -#: pretix/plugins/stripe/payment.py:1142 +#: pretix/plugins/stripe/payment.py:1492 msgid "Germany" msgstr "Deutschland" -#: pretix/plugins/stripe/payment.py:1143 +#: pretix/plugins/stripe/payment.py:1493 msgid "Austria" msgstr "Österreich" -#: pretix/plugins/stripe/payment.py:1144 +#: pretix/plugins/stripe/payment.py:1494 msgid "Belgium" msgstr "Belgien" -#: pretix/plugins/stripe/payment.py:1145 +#: pretix/plugins/stripe/payment.py:1495 msgid "Netherlands" msgstr "Niederlande" -#: pretix/plugins/stripe/payment.py:1146 +#: pretix/plugins/stripe/payment.py:1496 msgid "Spain" msgstr "Spanien" -#: pretix/plugins/stripe/payment.py:1193 +#: pretix/plugins/stripe/payment.py:1532 #, python-brace-format msgid "Bank account {iban} at {bank}" msgstr "Bankkonto {iban} bei {bank}" -#: pretix/plugins/stripe/payment.py:1204 +#: pretix/plugins/stripe/payment.py:1543 msgid "EPS via Stripe" msgstr "EPS über Stripe" -#: pretix/plugins/stripe/payment.py:1276 +#: pretix/plugins/stripe/payment.py:1575 msgid "Multibanco via Stripe" msgstr "Multibanco über Stripe" -#: pretix/plugins/stripe/payment.py:1323 +#: pretix/plugins/stripe/payment.py:1624 msgid "Przelewy24 via Stripe" msgstr "Przelewy24 über Stripe" -#: pretix/plugins/stripe/payment.py:1379 +#: pretix/plugins/stripe/payment.py:1628 +msgid "" +"Przelewy24 is an online payment method available to customers of Polish " +"banks. Please keep your online banking account and login information " +"available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1662 msgid "WeChat Pay via Stripe" msgstr "WeChat Pay über Stripe" -#: pretix/plugins/stripe/signals.py:65 +#: pretix/plugins/stripe/payment.py:1667 +msgid "" +"This payment method is available to users of the Chinese app WeChat. Please " +"keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1690 +#, fuzzy +#| msgid "Payment via Stripe" +msgid "PayPal via Stripe" +msgstr "Zahlung über Stripe" + +#: pretix/plugins/stripe/payment.py:1697 +#, fuzzy +#| msgid "EPS via Stripe" +msgid "Swish via Stripe" +msgstr "EPS über Stripe" + +#: pretix/plugins/stripe/payment.py:1702 +msgid "" +"This payment method is available to users of the Swedish apps Swish and " +"BankID. Please have your app ready." +msgstr "" + +#: pretix/plugins/stripe/signals.py:70 msgid "Charge succeeded." msgstr "Buchung erfolgreich." -#: pretix/plugins/stripe/signals.py:66 +#: pretix/plugins/stripe/signals.py:71 msgid "Charge refunded." msgstr "Buchung erstattet." -#: pretix/plugins/stripe/signals.py:67 +#: pretix/plugins/stripe/signals.py:72 msgid "Charge updated." msgstr "Buchung geändert." -#: pretix/plugins/stripe/signals.py:68 +#: pretix/plugins/stripe/signals.py:73 msgid "Charge pending" msgstr "Zahlung ausstehend" -#: pretix/plugins/stripe/signals.py:69 +#: pretix/plugins/stripe/signals.py:74 msgid "Payment authorized." msgstr "Zahlung autorisiert." -#: pretix/plugins/stripe/signals.py:70 +#: pretix/plugins/stripe/signals.py:75 msgid "Payment authorization canceled." msgstr "Zahlungsautorisierung abgebrochen." -#: pretix/plugins/stripe/signals.py:71 +#: pretix/plugins/stripe/signals.py:76 msgid "Payment authorization failed." msgstr "Zahlungsautorisierung fehlgeschlagen." -#: pretix/plugins/stripe/signals.py:77 +#: pretix/plugins/stripe/signals.py:82 msgid "Charge failed. Reason: {}" msgstr "Buchung fehlgeschlagen. Grund: {}" -#: pretix/plugins/stripe/signals.py:79 +#: pretix/plugins/stripe/signals.py:84 msgid "Dispute created. Reason: {}" msgstr "Buchung durch Kunden angefochten. Grund: {}" -#: pretix/plugins/stripe/signals.py:81 +#: pretix/plugins/stripe/signals.py:86 msgid "Dispute updated. Reason: {}" msgstr "Die Anfechtung hat sich geändert. Grund: {}" -#: pretix/plugins/stripe/signals.py:83 +#: pretix/plugins/stripe/signals.py:88 msgid "Dispute closed. Status: {}" msgstr "Anfechtungsverfahren beendet. Grund. {}" -#: pretix/plugins/stripe/signals.py:86 +#: pretix/plugins/stripe/signals.py:91 msgid "Stripe reported an event: {}" msgstr "Stripe meldete ein Ereignis: {}" -#: pretix/plugins/stripe/signals.py:97 +#: pretix/plugins/stripe/signals.py:102 msgid "Stripe Connect: Client ID" msgstr "Stripe Connect: Client-ID" -#: pretix/plugins/stripe/signals.py:104 +#: pretix/plugins/stripe/signals.py:109 msgid "Stripe Connect: Secret key" msgstr "Stripe Connect: Geheimer Schlüssel" -#: pretix/plugins/stripe/signals.py:111 +#: pretix/plugins/stripe/signals.py:116 msgid "Stripe Connect: Publishable key" msgstr "Stripe Connect: Veröffentlichbarer Schlüssel" -#: pretix/plugins/stripe/signals.py:118 +#: pretix/plugins/stripe/signals.py:123 msgid "Stripe Connect: Secret key (test)" msgstr "Stripe Connect: Geheimer Schlüssel (Testmodus)" -#: pretix/plugins/stripe/signals.py:125 +#: pretix/plugins/stripe/signals.py:130 msgid "Stripe Connect: Publishable key (test)" msgstr "Stripe Connect: Öffentlicher Schlüssel (Testmodus)" -#: pretix/plugins/stripe/signals.py:170 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:6 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:9 +#: pretix/plugins/stripe/signals.py:156 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:3 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:9 msgid "Stripe Connect" msgstr "Stripe Connect" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"Die Stripe-Zahlung %(charge)s war erfolgreich, aber " -"die Bestellung %(order)s wurde bereits mit einer anderen Methode bezahlt. " -"Bitte kontaktiere den Kunden und überweise das Geld über Stripes Oberfläche " -"zurück." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"Die Stripe-Zahlung %(charge)s war erfolgreich, aber " -"die Bestellung %(order)s war abgelaufen und das Produkt wurde während der " -"Transaktion ausverkauft. Die Zahlung konnte daher nicht akzeptiert werden. " -"Bitte kontaktiere den Kunden und überweise das Geld über Stripes Oberfläche " -"zurück." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"Stripe hat gemeldet, dass die Zahlung %(charge)s " -"erstattet oder storniert wurde. Soll die passende Bestellung (%(order)s) als " -"erstattet markiert werden?" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "Der Gesamtbetrag wird von deiner Kreditkarte eingezogen." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "Kartentyp" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "Der Gesamtbetrag wird von deiner Kreditkarte eingezogen." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Kontoinhaber" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -21278,7 +21499,7 @@ msgstr "" "weiterleiten, um deine Zahlungsdaten einzugeben. Danach wirst du wieder " "hierher zurückgeleitet, um deine Bestellung zu bestätigen." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" @@ -21286,11 +21507,11 @@ msgstr "" "Diese Transaktion wird als Mail Order/Telephone Order markiert, wodurch wenn " "möglich keine Starke Kundenauthentifizierung (SCA) nötig ist" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "Bitte aktiviere JavaScript um mit Kreditkarte zahlen zu können." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." @@ -21298,15 +21519,15 @@ msgstr "" "Du hast bereits eine Kartennummer eingegeben, die wir für die Zahlung " "benutzen werden." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "Andere Kreditkarte verwenden" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "ODER" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -21315,26 +21536,80 @@ msgstr "" "werden direkt an Stripe übertragen und kommen nicht in Kontakt mit unseren " "Servern." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "Bitte aktiviere JavaScript um mit Kreditkarte zahlen zu können." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"Du hast bereits eine Kartennummer eingegeben, die wir für die Zahlung " +"benutzen werden." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "Andere Kreditkarte verwenden" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "Charge-ID" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "Name des Zahlenden" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "MOTO" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "Name des Zahlenden" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "Fehlermeldung" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to regenerate your emergency codes?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Möchtest du wirklich neue Notfall-Tokens generieren?" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Connect" +msgid "Disconnect" +msgstr "Verbinden" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -21342,7 +21617,7 @@ msgstr "" "Wir warten auf eine Antwort des Zahlungsdienstleisters bezüglich deiner " "Zahlung. Bitte kontaktiere uns, falls dies mehr als ein paar Tage dauert." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." @@ -21350,11 +21625,11 @@ msgstr "" "Du musst deine Zahlung bestätigen. Bitte klicke den Link weiter unten um " "dies zu erledigen oder eine neue Zahlung zu starten." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "Zahlung bestätigen" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." @@ -21362,56 +21637,60 @@ msgstr "" "Bitte scanne den angezeigten Barcode um deine WeChat-Zahlung durchzuführen. " "Danach kannst du diese Seite neu laden." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "Die Zahlung konnte aus folgendem Grund nicht abgeschlossen werden:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Unbekannter Grund" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Bestellung bezahlen" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "Zahlung bestätigen: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "Zahlung bestätigen…" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" "Während der Verbindung mit Stripe ist ein Fehler aufgetreten, bitte versuche " "es erneut." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "Stripe meldete einen Fehler: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" "Ihr Stripe-Konto ist nun mit pretix verbunden. Auf dieser Seite können Sie " "die Einstellungen im Detail anpassen." -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "Das Stripe-Konto wurde getrennt." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -21419,7 +21698,7 @@ msgstr "" "Sorry, es gab einen Fehler im Bezahlvorgang. Bitte klicke den Link in der E-" "Mail, die wir dir geschickt haben, um fortzufahren." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -21427,7 +21706,7 @@ msgstr "" "Wir konnten die Zahlung nicht verarbeiten. Bitte probiere es erneut und " "kontaktiere uns, falls das Problem fortbesteht." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "Im Zahlungsvorgang ist ein Fehler aufgetreten." @@ -23454,6 +23733,40 @@ msgstr "Schreibzugriff" msgid "Kosovo" msgstr "Kosovo" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Die Stripe-Zahlung %(charge)s war erfolgreich, " +#~ "aber die Bestellung %(order)s wurde bereits mit einer anderen Methode " +#~ "bezahlt. Bitte kontaktiere den Kunden und überweise das Geld über Stripes " +#~ "Oberfläche zurück." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Die Stripe-Zahlung %(charge)s war erfolgreich, " +#~ "aber die Bestellung %(order)s war abgelaufen und das Produkt wurde " +#~ "während der Transaktion ausverkauft. Die Zahlung konnte daher nicht " +#~ "akzeptiert werden. Bitte kontaktiere den Kunden und überweise das Geld " +#~ "über Stripes Oberfläche zurück." + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "Stripe hat gemeldet, dass die Zahlung %(charge)s " +#~ "erstattet oder storniert wurde. Soll die passende Bestellung (%(order)s) " +#~ "als erstattet markiert werden?" + #~ msgid "Default list" #~ msgstr "Standard-Liste" diff --git a/src/pretix/locale/de_Informal/LC_MESSAGES/djangojs.po b/src/pretix/locale/de_Informal/LC_MESSAGES/djangojs.po index b7eb420d4..0863ee192 100644 --- a/src/pretix/locale/de_Informal/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/de_Informal/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2021-03-30 19:44+0000\n" "Last-Translator: Raphael Michel \n" "Language-Team: German (informal) \n" "Language-Team: LANGUAGE \n" @@ -314,7 +314,7 @@ msgstr "" #: pretix/base/auth.py:113 pretix/base/forms/auth.py:207 #: pretix/base/models/auth.py:90 pretix/base/models/notifications.py:25 -#: pretix/base/models/orders.py:146 pretix/control/navigation.py:60 +#: pretix/base/models/orders.py:184 pretix/control/navigation.py:60 #: pretix/control/templates/pretixcontrol/event/settings.html:67 #: pretix/plugins/checkinlists/exporters.py:417 #: pretix/presale/checkoutflow.py:823 pretix/presale/forms/checkout.py:23 @@ -458,8 +458,8 @@ msgid "" "date does not always correspond to the order or payment date." msgstr "" -#: pretix/base/exporters/invoices.py:52 pretix/base/models/orders.py:1354 -#: pretix/base/models/orders.py:1731 pretix/control/forms/filter.py:139 +#: pretix/base/exporters/invoices.py:52 pretix/base/models/orders.py:1395 +#: pretix/base/models/orders.py:1772 pretix/control/forms/filter.py:139 #: pretix/control/forms/filter.py:1541 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:9 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:14 @@ -509,7 +509,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:166 pretix/base/exporters/invoices.py:294 #: pretix/base/exporters/orderlist.py:850 #: pretix/base/exporters/waitinglist.py:84 pretix/base/models/items.py:1024 -#: pretix/base/models/orders.py:158 pretix/base/models/orders.py:2207 +#: pretix/base/models/orders.py:196 pretix/base/models/orders.py:2248 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:63 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:17 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:11 @@ -521,7 +521,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:167 pretix/base/exporters/invoices.py:295 #: pretix/base/exporters/orderlist.py:234 #: pretix/base/exporters/orderlist.py:398 -#: pretix/base/exporters/orderlist.py:500 pretix/base/models/orders.py:128 +#: pretix/base/exporters/orderlist.py:500 pretix/base/models/orders.py:166 #: pretix/base/notifications.py:190 pretix/base/pdf.py:58 #: pretix/control/templates/pretixcontrol/checkin/index.html:65 #: pretix/control/templates/pretixcontrol/order/index.html:162 @@ -576,7 +576,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:172 pretix/base/exporters/invoices.py:180 #: pretix/base/exporters/invoices.py:299 pretix/base/exporters/invoices.py:307 #: pretix/base/exporters/orderlist.py:235 -#: pretix/base/exporters/waitinglist.py:85 pretix/base/forms/questions.py:811 +#: pretix/base/exporters/waitinglist.py:85 pretix/base/forms/questions.py:815 #: pretix/base/models/devices.py:45 pretix/base/models/devices.py:105 #: pretix/base/models/event.py:1123 pretix/base/models/event.py:1376 #: pretix/base/models/items.py:1365 pretix/base/models/items.py:1523 @@ -613,8 +613,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:528 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:412 -#: pretix/base/models/orders.py:1160 pretix/base/models/orders.py:2258 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:416 +#: pretix/base/models/orders.py:1201 pretix/base/models/orders.py:2299 #: pretix/base/orderimport.py:274 pretix/base/orderimport.py:420 #: pretix/control/forms/filter.py:525 pretix/control/forms/filter.py:556 #: pretix/control/templates/pretixcontrol/order/index.html:823 @@ -630,8 +630,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:529 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:423 -#: pretix/base/models/orders.py:1161 pretix/base/models/orders.py:2259 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:427 +#: pretix/base/models/orders.py:1202 pretix/base/models/orders.py:2300 #: pretix/base/orderimport.py:285 pretix/base/orderimport.py:431 #: pretix/base/settings.py:701 pretix/control/forms/filter.py:529 #: pretix/control/forms/filter.py:560 pretix/control/views/item.py:354 @@ -645,8 +645,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:530 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:431 -#: pretix/base/models/orders.py:1162 pretix/base/models/orders.py:2260 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:435 +#: pretix/base/models/orders.py:1203 pretix/base/models/orders.py:2301 #: pretix/base/orderimport.py:296 pretix/base/orderimport.py:442 #: pretix/base/settings.py:713 pretix/control/forms/filter.py:534 #: pretix/control/forms/filter.py:565 pretix/control/views/item.py:364 @@ -660,9 +660,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:531 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:443 -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2261 -#: pretix/base/models/orders.py:2262 pretix/base/orderimport.py:312 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:447 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2302 +#: pretix/base/models/orders.py:2303 pretix/base/orderimport.py:312 #: pretix/base/orderimport.py:458 pretix/base/settings.py:722 #: pretix/control/forms/filter.py:539 pretix/control/forms/filter.py:570 #: pretix/control/templates/pretixcontrol/order/index.html:827 @@ -684,7 +684,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:305 pretix/base/exporters/invoices.py:313 #: pretix/base/exporters/orderlist.py:243 #: pretix/base/exporters/orderlist.py:418 -#: pretix/base/exporters/orderlist.py:566 pretix/base/models/orders.py:2265 +#: pretix/base/exporters/orderlist.py:566 pretix/base/models/orders.py:2306 #: pretix/base/orderimport.py:356 #: pretix/control/templates/pretixcontrol/order/index.html:834 #: pretix/plugins/reports/exporters.py:721 @@ -711,7 +711,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:235 #: pretix/base/exporters/orderlist.py:410 #: pretix/base/exporters/orderlist.py:527 -#: pretix/base/exporters/orderlist.py:559 pretix/base/forms/questions.py:404 +#: pretix/base/exporters/orderlist.py:559 pretix/base/forms/questions.py:408 #: pretix/base/orderimport.py:244 pretix/base/orderimport.py:409 #: pretix/control/forms/filter.py:517 pretix/control/forms/filter.py:552 #: pretix/control/templates/pretixcontrol/order/index.html:819 @@ -732,9 +732,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:532 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:467 -#: pretix/base/forms/questions.py:777 pretix/base/models/orders.py:1164 -#: pretix/base/models/orders.py:2264 pretix/base/orderimport.py:331 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:471 +#: pretix/base/forms/questions.py:781 pretix/base/models/orders.py:1205 +#: pretix/base/models/orders.py:2305 pretix/base/orderimport.py:331 #: pretix/control/templates/pretixcontrol/order/index.html:830 #: pretix/plugins/checkinlists/exporters.py:444 #: pretix/plugins/reports/exporters.py:720 @@ -745,13 +745,13 @@ msgid "State" msgstr "" #: pretix/base/exporters/invoices.py:187 pretix/base/exporters/invoices.py:314 -#: pretix/base/models/orders.py:2275 +#: pretix/base/models/orders.py:2316 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:114 msgid "Beneficiary" msgstr "" #: pretix/base/exporters/invoices.py:188 pretix/base/exporters/invoices.py:315 -#: pretix/base/models/orders.py:2270 pretix/base/orderimport.py:367 +#: pretix/base/models/orders.py:2311 pretix/base/orderimport.py:367 #: pretix/control/templates/pretixcontrol/order/index.html:854 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:121 msgid "Internal reference" @@ -802,7 +802,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:271 pretix/base/exporters/orderlist.py:359 #: pretix/base/exporters/orderlist.py:659 -#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1029 +#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1070 #: pretix/control/forms/filter.py:106 pretix/control/forms/filter.py:426 #: pretix/control/forms/item.py:425 pretix/control/forms/subevents.py:97 #: pretix/control/views/item.py:565 pretix/control/views/vouchers.py:92 @@ -818,7 +818,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:271 pretix/base/exporters/orderlist.py:359 #: pretix/base/exporters/orderlist.py:659 -#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1031 +#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1072 #: pretix/control/forms/filter.py:106 pretix/control/forms/filter.py:427 #: pretix/control/forms/item.py:426 pretix/control/forms/subevents.py:98 #: pretix/control/views/item.py:565 pretix/control/views/vouchers.py:92 @@ -851,14 +851,14 @@ msgid "Net price" msgstr "" #: pretix/base/exporters/invoices.py:289 pretix/base/exporters/orderlist.py:409 -#: pretix/base/exporters/orderlist.py:518 pretix/base/models/orders.py:1879 -#: pretix/base/models/orders.py:1979 +#: pretix/base/exporters/orderlist.py:518 pretix/base/models/orders.py:1920 +#: pretix/base/models/orders.py:2020 msgid "Tax value" msgstr "" #: pretix/base/exporters/invoices.py:290 pretix/base/exporters/orderlist.py:407 -#: pretix/base/exporters/orderlist.py:516 pretix/base/models/orders.py:1870 -#: pretix/base/models/orders.py:1970 pretix/base/models/tax.py:114 +#: pretix/base/exporters/orderlist.py:516 pretix/base/models/orders.py:1911 +#: pretix/base/models/orders.py:2011 pretix/base/models/tax.py:114 #: pretix/plugins/reports/exporters.py:670 #: pretix/plugins/reports/exporters.py:715 msgid "Tax rate" @@ -885,7 +885,7 @@ msgstr "" msgid "Order data" msgstr "" -#: pretix/base/exporters/orderlist.py:45 pretix/base/models/orders.py:209 +#: pretix/base/exporters/orderlist.py:45 pretix/base/models/orders.py:247 #: pretix/control/navigation.py:224 #: pretix/control/templates/pretixcontrol/orders/index.html:7 #: pretix/control/templates/pretixcontrol/orders/index.html:9 @@ -893,7 +893,7 @@ msgstr "" msgid "Orders" msgstr "" -#: pretix/base/exporters/orderlist.py:46 pretix/base/models/orders.py:1995 +#: pretix/base/exporters/orderlist.py:46 pretix/base/models/orders.py:2036 #: pretix/base/notifications.py:196 msgid "Order positions" msgstr "" @@ -959,7 +959,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:744 #: pretix/base/exporters/orderlist.py:899 #: pretix/base/exporters/waitinglist.py:97 -#: pretix/base/exporters/waitinglist.py:145 pretix/base/models/orders.py:134 +#: pretix/base/exporters/waitinglist.py:145 pretix/base/models/orders.py:172 #: pretix/control/forms/filter.py:773 pretix/control/forms/filter.py:1000 #: pretix/control/forms/filter.py:1269 pretix/control/forms/filter.py:1350 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:39 @@ -976,7 +976,7 @@ msgstr "" #: pretix/control/views/waitinglist.py:214 #: pretix/plugins/reports/exporters.py:422 #: pretix/plugins/reports/exporters.py:763 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:61 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:79 #: pretix/presale/templates/pretixpresale/organizers/index.html:67 msgid "Status" msgstr "" @@ -994,7 +994,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:401 #: pretix/base/exporters/orderlist.py:504 #: pretix/base/exporters/waitinglist.py:87 pretix/base/models/items.py:1028 -#: pretix/base/models/orders.py:150 pretix/base/models/waitinglist.py:56 +#: pretix/base/models/orders.py:188 pretix/base/models/waitinglist.py:56 #: pretix/base/pdf.py:252 #: pretix/control/templates/pretixcontrol/order/index.html:210 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:140 @@ -1075,13 +1075,13 @@ msgid "Sales channel" msgstr "" #: pretix/base/exporters/orderlist.py:255 pretix/base/models/items.py:402 -#: pretix/base/models/orders.py:176 +#: pretix/base/models/orders.py:214 #: pretix/plugins/checkinlists/exporters.py:432 msgid "Requires special attention" msgstr "" #: pretix/base/exporters/orderlist.py:256 -#: pretix/base/exporters/orderlist.py:745 pretix/base/models/orders.py:171 +#: pretix/base/exporters/orderlist.py:745 pretix/base/models/orders.py:209 #: pretix/base/models/vouchers.py:197 pretix/base/orderimport.py:623 #: pretix/control/forms/filter.py:463 #: pretix/control/templates/pretixcontrol/order/index.html:772 @@ -1107,7 +1107,7 @@ msgid "Fee type" msgstr "" #: pretix/base/exporters/orderlist.py:406 -#: pretix/base/exporters/orderlist.py:515 pretix/base/models/orders.py:1129 +#: pretix/base/exporters/orderlist.py:515 pretix/base/models/orders.py:1170 #: pretix/base/orderimport.py:499 pretix/base/pdf.py:105 #: pretix/control/templates/pretixcontrol/item/index.html:88 #: pretix/control/templates/pretixcontrol/order/change.html:157 @@ -1139,7 +1139,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:509 #: pretix/base/exporters/orderlist.py:790 pretix/base/models/checkin.py:19 -#: pretix/base/models/items.py:1361 pretix/base/models/orders.py:1111 +#: pretix/base/models/items.py:1361 pretix/base/models/orders.py:1152 #: pretix/base/models/vouchers.py:101 pretix/base/models/waitinglist.py:37 #: pretix/control/forms/event.py:1222 pretix/control/forms/filter.py:331 #: pretix/control/forms/filter.py:1387 pretix/control/forms/filter.py:1501 @@ -1184,13 +1184,13 @@ msgid "Product" msgstr "" #: pretix/base/exporters/orderlist.py:514 -#: pretix/base/exporters/waitinglist.py:89 pretix/base/models/orders.py:1121 +#: pretix/base/exporters/waitinglist.py:89 pretix/base/models/orders.py:1162 msgid "Variation" msgstr "" #: pretix/base/exporters/orderlist.py:519 -#: pretix/base/exporters/orderlist.py:524 pretix/base/forms/questions.py:387 -#: pretix/base/models/orders.py:1133 pretix/base/orderimport.py:381 +#: pretix/base/exporters/orderlist.py:524 pretix/base/forms/questions.py:391 +#: pretix/base/models/orders.py:1174 pretix/base/orderimport.py:381 #: pretix/base/pdf.py:119 pretix/control/forms/filter.py:544 #: pretix/control/templates/pretixcontrol/order/index.html:394 #: pretix/control/views/item.py:308 pretix/plugins/badges/exporters.py:258 @@ -1203,8 +1203,8 @@ msgstr "" msgid "Attendee name" msgstr "" -#: pretix/base/exporters/orderlist.py:526 pretix/base/forms/questions.py:393 -#: pretix/base/models/orders.py:1141 pretix/base/pdf.py:161 +#: pretix/base/exporters/orderlist.py:526 pretix/base/forms/questions.py:397 +#: pretix/base/models/orders.py:1182 pretix/base/pdf.py:161 #: pretix/control/templates/pretixcontrol/order/index.html:399 #: pretix/control/views/item.py:320 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:60 @@ -1266,9 +1266,9 @@ msgid "Refund states" msgstr "" #: pretix/base/exporters/orderlist.py:744 -#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:208 -#: pretix/base/models/orders.py:1341 pretix/base/models/orders.py:1712 -#: pretix/base/models/orders.py:1859 pretix/base/models/orders.py:1964 +#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:246 +#: pretix/base/models/orders.py:1382 pretix/base/models/orders.py:1753 +#: pretix/base/models/orders.py:1900 pretix/base/models/orders.py:2005 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:64 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:15 #: pretix/plugins/checkinlists/exporters.py:295 @@ -1298,8 +1298,8 @@ msgid "Status code" msgstr "" #: pretix/base/exporters/orderlist.py:745 -#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:1337 -#: pretix/base/models/orders.py:1708 +#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:1378 +#: pretix/base/models/orders.py:1749 #: pretix/control/templates/pretixcontrol/order/index.html:618 #: pretix/control/templates/pretixcontrol/order/index.html:714 #: pretix/control/templates/pretixcontrol/orders/refunds.html:67 @@ -1313,7 +1313,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:616 #: pretix/control/templates/pretixcontrol/order/index.html:711 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:84 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:19 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:29 msgid "Payment method" msgstr "" @@ -1480,7 +1480,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:34 #: pretix/plugins/banktransfer/refund_export.py:25 #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:15 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:57 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:75 msgid "Currency" msgstr "" @@ -1611,31 +1611,31 @@ msgstr "" msgid "Repeat password" msgstr "" -#: pretix/base/forms/questions.py:205 +#: pretix/base/forms/questions.py:209 msgid "Please enter a shorter name." msgstr "" -#: pretix/base/forms/questions.py:225 +#: pretix/base/forms/questions.py:229 msgctxt "phonenumber" msgid "International area code" msgstr "" -#: pretix/base/forms/questions.py:249 +#: pretix/base/forms/questions.py:253 msgctxt "phonenumber" msgid "Phone number (without international area code)" msgstr "" -#: pretix/base/forms/questions.py:415 pretix/base/forms/questions.py:719 +#: pretix/base/forms/questions.py:419 pretix/base/forms/questions.py:723 msgid "Street and Number" msgstr "" -#: pretix/base/forms/questions.py:449 pretix/base/forms/questions.py:759 +#: pretix/base/forms/questions.py:453 pretix/base/forms/questions.py:763 msgctxt "address" msgid "Select state" msgstr "" -#: pretix/base/forms/questions.py:672 pretix/base/forms/questions.py:703 -#: pretix/base/forms/questions.py:850 pretix/base/payment.py:51 +#: pretix/base/forms/questions.py:676 pretix/base/forms/questions.py:707 +#: pretix/base/forms/questions.py:854 pretix/base/payment.py:63 #: pretix/control/forms/event.py:637 pretix/control/forms/event.py:643 #: pretix/control/forms/event.py:694 pretix/control/forms/event.py:1133 #: pretix/plugins/banktransfer/payment.py:362 @@ -1643,23 +1643,23 @@ msgstr "" msgid "This field is required." msgstr "" -#: pretix/base/forms/questions.py:841 +#: pretix/base/forms/questions.py:845 msgid "You need to provide a company name." msgstr "" -#: pretix/base/forms/questions.py:843 +#: pretix/base/forms/questions.py:847 msgid "You need to provide your name." msgstr "" -#: pretix/base/forms/questions.py:861 pretix/control/views/orders.py:1234 +#: pretix/base/forms/questions.py:865 pretix/control/views/orders.py:1234 msgid "Your VAT ID does not match the selected country." msgstr "" -#: pretix/base/forms/questions.py:873 +#: pretix/base/forms/questions.py:877 msgid "This VAT ID is not valid. Please re-check your input." msgstr "" -#: pretix/base/forms/questions.py:878 +#: pretix/base/forms/questions.py:882 msgid "" "Your VAT ID could not be checked, as the VAT checking service of your " "country is currently not available. We will therefore need to charge VAT on " @@ -1667,7 +1667,7 @@ msgid "" "process." msgstr "" -#: pretix/base/forms/questions.py:886 +#: pretix/base/forms/questions.py:890 msgid "" "Your VAT ID could not be checked, as the VAT checking service of your " "country returned an incorrect result. We will therefore need to charge VAT " @@ -1740,7 +1740,7 @@ msgid "Invalid placeholder(s): %(value)s" msgstr "" #: pretix/base/forms/widgets.py:153 pretix/base/forms/widgets.py:158 -#: pretix/base/models/orders.py:2254 +#: pretix/base/models/orders.py:2295 msgid "Business customer" msgstr "" @@ -1957,7 +1957,7 @@ msgstr "" msgid "Modern Invoice Renderer" msgstr "" -#: pretix/base/models/auth.py:92 pretix/base/models/orders.py:2256 +#: pretix/base/models/auth.py:92 pretix/base/models/orders.py:2297 #: pretix/base/settings.py:2462 pretix/base/settings.py:2473 #: pretix/control/templates/pretixcontrol/users/index.html:42 msgid "Full name" @@ -2231,7 +2231,7 @@ msgstr "" msgid "Event series" msgstr "" -#: pretix/base/models/event.py:431 pretix/base/payment.py:312 +#: pretix/base/models/event.py:431 pretix/base/payment.py:324 msgid "Restrict to specific sales channels" msgstr "" @@ -2240,8 +2240,8 @@ msgid "Only sell tickets for this event on the following sales channels." msgstr "" #: pretix/base/models/event.py:438 pretix/base/models/items.py:256 -#: pretix/base/models/items.py:1354 pretix/base/models/orders.py:140 -#: pretix/base/models/orders.py:2199 pretix/base/models/vouchers.py:95 +#: pretix/base/models/items.py:1354 pretix/base/models/orders.py:178 +#: pretix/base/models/orders.py:2240 pretix/base/models/vouchers.py:95 #: pretix/base/models/waitinglist.py:31 pretix/base/notifications.py:178 #: pretix/control/templates/pretixcontrol/search/orders.html:44 #: pretix/presale/templates/pretixpresale/event/waitinglist.html:18 @@ -2538,7 +2538,7 @@ msgstr "" msgid "This product will not be sold before the given date." msgstr "" -#: pretix/base/models/items.py:341 pretix/base/payment.py:236 +#: pretix/base/models/items.py:341 pretix/base/payment.py:248 msgid "Available until" msgstr "" @@ -2978,7 +2978,7 @@ msgstr "" msgid "Leave empty for an unlimited number of tickets." msgstr "" -#: pretix/base/models/items.py:1374 pretix/base/models/orders.py:1115 +#: pretix/base/models/items.py:1374 pretix/base/models/orders.py:1156 #: pretix/control/templates/pretixcontrol/checkin/index.html:67 msgid "Item" msgstr "" @@ -3082,43 +3082,43 @@ msgstr "" msgid "Tax rule {val}" msgstr "" -#: pretix/base/models/orders.py:120 +#: pretix/base/models/orders.py:158 msgid "pending" msgstr "" -#: pretix/base/models/orders.py:121 +#: pretix/base/models/orders.py:159 msgid "paid" msgstr "" -#: pretix/base/models/orders.py:122 +#: pretix/base/models/orders.py:160 msgid "expired" msgstr "" -#: pretix/base/models/orders.py:123 +#: pretix/base/models/orders.py:161 msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:154 pretix/control/forms/filter.py:467 +#: pretix/base/models/orders.py:192 pretix/control/forms/filter.py:467 msgid "Locale" msgstr "" -#: pretix/base/models/orders.py:164 pretix/base/models/orders.py:2211 +#: pretix/base/models/orders.py:202 pretix/base/models/orders.py:2252 #: pretix/control/forms/orders.py:41 msgid "Expiration date" msgstr "" -#: pretix/base/models/orders.py:168 pretix/control/forms/filter.py:478 +#: pretix/base/models/orders.py:206 pretix/control/forms/filter.py:478 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:57 msgid "Total amount" msgstr "" -#: pretix/base/models/orders.py:172 pretix/base/models/vouchers.py:198 +#: pretix/base/models/orders.py:210 pretix/base/models/vouchers.py:198 msgid "" "The text entered in this field will not be visible to the user and is " "available for your convenience." msgstr "" -#: pretix/base/models/orders.py:178 +#: pretix/base/models/orders.py:216 msgid "" "If you set this, the check-in app will show a visible warning that tickets " "of this order require special attention. This will not show any details or " @@ -3126,237 +3126,237 @@ msgid "" "cases." msgstr "" -#: pretix/base/models/orders.py:190 pretix/base/models/orders.py:1152 +#: pretix/base/models/orders.py:228 pretix/base/models/orders.py:1193 msgid "Meta information" msgstr "" -#: pretix/base/models/orders.py:202 pretix/control/forms/filter.py:473 +#: pretix/base/models/orders.py:240 pretix/control/forms/filter.py:473 msgid "E-mail address verified" msgstr "" -#: pretix/base/models/orders.py:767 +#: pretix/base/models/orders.py:805 msgid "" "The payment can not be accepted as the last date of payments configured in " "the payment settings is over." msgstr "" -#: pretix/base/models/orders.py:769 +#: pretix/base/models/orders.py:807 msgid "" "The payment can not be accepted as the order is expired and you configured " "that no late payments should be accepted in the payment settings." msgstr "" -#: pretix/base/models/orders.py:771 +#: pretix/base/models/orders.py:809 msgid "This order is not yet approved by the event organizer." msgstr "" -#: pretix/base/models/orders.py:791 +#: pretix/base/models/orders.py:829 #, python-brace-format msgid "The ordered product \"{item}\" is no longer available." msgstr "" -#: pretix/base/models/orders.py:792 +#: pretix/base/models/orders.py:830 #, python-brace-format msgid "The seat \"{seat}\" is no longer available." msgstr "" -#: pretix/base/models/orders.py:793 +#: pretix/base/models/orders.py:831 #, python-brace-format msgid "The voucher \"{voucher}\" no longer has sufficient budget." msgstr "" -#: pretix/base/models/orders.py:794 +#: pretix/base/models/orders.py:832 #, python-brace-format msgid "The voucher \"{voucher}\" has been used in the meantime." msgstr "" -#: pretix/base/models/orders.py:922 pretix/base/services/orders.py:862 +#: pretix/base/models/orders.py:960 pretix/base/services/orders.py:862 #: pretix/control/views/event.py:701 #: pretix/presale/templates/pretixpresale/event/order.html:63 #, python-format msgid "Your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1033 +#: pretix/base/models/orders.py:1074 msgid "" msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" @@ -3510,7 +3510,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "" @@ -4079,20 +4079,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "" -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4100,45 +4110,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4147,94 +4157,94 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4243,11 +4253,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4255,87 +4265,87 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "" -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "" -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "" -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "" -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "" -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" @@ -10254,7 +10264,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10348,7 +10358,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -10513,10 +10523,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -10675,7 +10684,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -11473,7 +11482,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -15748,7 +15757,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -16913,7 +16922,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -17220,19 +17229,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -17795,7 +17805,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -17813,16 +17823,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -17896,8 +17906,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -17999,7 +18009,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18016,17 +18026,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -18419,12 +18429,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -18434,34 +18444,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -18469,20 +18479,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -18493,73 +18503,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -18567,23 +18634,62 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +msgid "Destination" +msgstr "" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +msgid "Account number" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/djangojs.pot b/src/pretix/locale/djangojs.pot index 38d76eda6..e395e5c62 100644 --- a/src/pretix/locale/djangojs.pot +++ b/src/pretix/locale/djangojs.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:20+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -42,20 +42,23 @@ msgstr "" msgid "Total revenue" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:15 msgid "Contacting Stripe …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:60 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:72 msgid "Total" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152 -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:242 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:265 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:282 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:315 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:339 msgid "Confirming your payment …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:159 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:289 msgid "Contacting your bank …" msgstr "" diff --git a/src/pretix/locale/el/LC_MESSAGES/django.po b/src/pretix/locale/el/LC_MESSAGES/django.po index 8d964f7b5..876572b0c 100644 --- a/src/pretix/locale/el/LC_MESSAGES/django.po +++ b/src/pretix/locale/el/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2019-10-31 14:39+0000\n" "Last-Translator: Raphael Michel \n" "Language-Team: Greek " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Άδειo, εάν αυτό το προϊόν δεν είναι εισιτήριο εισόδου" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Επωνυμία εταιρείας" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Επιλέξτε χώρα" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "δημιουργήθηκε" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "εκκρεμής" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "επιβεβαιώθηκε" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "ακυρώθηκε" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "απέτυχε" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "επιστραφεί" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Πληροφορίες πληρωμής" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "Επιβεβαίωση εγγραφής εκδήλωσης: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Η πληρωμή που λάβατε για την παραγγελία σας: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "ξεκίνησε εξωτερικά" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "δημιουργήθηκε" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "υπό διαμετακόμιση(in transit)" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "έγινε" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "απέτυχε" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "ακυρώθηκε" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Διοργανωτής" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Πελάτης" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Εξωτερικός" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Refund only" msgid "Refund reason" msgstr "Μόνο επιστροφή χρημάτων" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Έξοδα πληρωμής" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Έξοδα αποστολής" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Κόστος υπηρεσίας" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Έξοδα ακύρωσης" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Άλλα έξοδα" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Δωροκάρτα" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Αξία" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Θέση παραγγελείας" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "Η εγγραφή σας στην εκδήλωση: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "" "Αναγνωριστικό καλαθιού (π.χ. κλειδί συνεδρίας) ( Cart ID (e.g. session key) )" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Θέση καλαθιού" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Θέσεις καλαθιού" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Μόνο για πελάτες επιχειρήσεων εντός της ΕΕ." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "Αυτή η σχετική αναφορά θα τυπωθεί στο τιμολόγιό σας για διευκόλυνση." @@ -3904,7 +3904,7 @@ msgstr "" "παρέχεται καμία εγγύηση για τον σωστό υπολογισμό του φόρου. ΧΡΗΣΙΜΟΠΟΙΗΣΤΕ " "ΤΟ ΜΕ ΔΙΚΗ ΣΑΣ ΕΥΘΥΝΗ." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "Εμπορική χώρα" @@ -4589,22 +4589,36 @@ msgstr "Πρέπει να επιλέξετε μια ημερομηνία." msgid "Ambiguous option selected." msgstr "Επιλέχθηκε μη έγκυρη επιλογή." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "Εφαρμογή" + +#: pretix/base/payment.py:54 +#, fuzzy +#| msgid "Android (Google Play)" +msgctxt "payment" +msgid "Google Pay" +msgstr "Android (Google Play)" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Ενεργοποιήστε τη μέθοδο πληρωμής" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Οι χρήστες δεν θα μπορούν να επιλέξουν αυτόν τον πάροχο πληρωμών μετά την " "καθορισμένη ημερομηνία." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Κείμενο σχετικά με τα τιμολόγια" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4616,11 +4630,11 @@ msgstr "" "δημιουργηθεί πριν πληρωθεί η παραγγελία. Αν το τιμολόγιο δημιουργηθεί " "αργότερα, θα εμφανιστεί ένα κείμενο που δηλώνει ότι έχει ήδη πληρωθεί." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Ελάχιστο συνολικό ποσό παραγγελίας" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4631,11 +4645,11 @@ msgstr "" "αυτό μπορεί να υπολογιστεί χωρίς να ληφθούν υπόψη τα τέλη που επιβάλλονται " "από αυτή τη μέθοδο πληρωμής." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Μέγιστο συνολικό ποσό παραγγελίας" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4646,25 +4660,25 @@ msgstr "" "σκοπό αυτό μπορεί να υπολογιστεί χωρίς να ληφθούν υπόψη τα τέλη που " "επιβάλλονται από αυτή τη μέθοδο πληρωμής." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Επιπλέον χρέωση" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Απόλυτη τιμή" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" "Υπολογίστε το τέλος(fee) από τη συνολική αξία συμπεριλαμβανομένου του " "τέλους(fee)." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4678,11 +4692,11 @@ msgstr "" "πληροφορίες σχετικά με το τι κάνει αυτό. Μην ξεχάσετε να ορίσετε τις " "σωστές χρεώσεις(fees) παραπάνω!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "Περιορίστε σε χώρες" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4692,46 +4706,46 @@ msgstr "" "τιμολογίου στις επιλεγμένες χώρες. Αν δεν επιλέξετε χώρα, επιτρέπονται όλες " "οι χώρες. Αυτό ενεργοποιείται μόνο αν απαιτείται η διεύθυνση του τιμολογίου." -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 #, fuzzy #| msgid "The settings of a payment provider have been changed." msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "Οι ρυθμίσεις ενός παρόχου πληρωμών έχουν αλλάξει." -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 #, fuzzy #| msgid "Enable payment method" msgid "Hide payment method" msgstr "Ενεργοποιήστε τη μέθοδο πληρωμής" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 #, fuzzy #| msgid "Enable payment method" msgid "Link to enable payment method" msgstr "Ενεργοποιήστε τη μέθοδο πληρωμής" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "Η πληρωμή για αυτό το τιμολόγιο έχει ήδη παραληφθεί." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" "Οι αυτόματες επιστροφές δεν υποστηρίζονται από αυτόν τον πάροχο πληρωμών." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4739,21 +4753,21 @@ msgstr "" "Δεν απαιτείται πληρωμή, καθώς αυτή η παραγγελία περιλαμβάνει μόνο προϊόντα " "που είναι δωρεάν." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Δωρεάν" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Εκδοτήριο" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "Μη αυτόματη πληρωμή" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." @@ -4761,15 +4775,15 @@ msgstr "" "Στη δοκιμαστική λειτουργία, μπορείτε απλώς να επισημάνετε με μη αυτόματο " "τρόπο αυτή την παραγγελία ως πληρωμένη στο backend μετά τη δημιουργία της." -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "Όνομα μεθόδου πληρωμής" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "Περιγραφή διαδικασίας πληρωμής κατά την ολοκλήρωση του ελέγχου" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4778,11 +4792,11 @@ msgstr "" "επιλέξει αυτή τη μέθοδο πληρωμής. Πρέπει να δώσει μια σύντομη εξήγηση " "σχετικά με αυτήν τη μέθοδο πληρωμής." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "Περιγραφή διαδικασίας πληρωμής για emails επιβεβαίωσης παραγγελίας" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, fuzzy, python-brace-format #| msgid "" #| "This text will be included for the {payment_info} placeholder in order " @@ -4800,11 +4814,11 @@ msgstr "" "τρόπο με τον οποίο θα γίνει η πληρωμή. Μπορείτε να χρησιμοποιήσετε τα " "placeholders {order}, {total}, {currency} και {total_with_currency}" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "Περιγραφή διαδικασίας πληρωμής για εκκρεμείς παραγγελίες" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, fuzzy, python-brace-format #| msgid "" #| "This text will be shown on the order confirmation page for pending " @@ -4821,36 +4835,36 @@ msgstr "" "τρόπο με τον οποίο θα γίνει η πληρωμή. Μπορείτε να χρησιμοποιήσετε τα " "placeholders {order}, {total}, {currency} και {total_with_currency}" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "Offsetting" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "Εισαγάγατε μια παραγγελία που δεν βρέθηκε." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "Ισορροπία κατά παραγγελίες: %s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 #, fuzzy #| msgid "This payment method does not support automatic refunds." msgid "This gift card does not support this currency." msgstr "Αυτός ο τρόπος πληρωμής δεν υποστηρίζει αυτόματες επιστροφές χρημάτων." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 #, fuzzy #| msgid "This refund can not be processed at the moment." @@ -4859,7 +4873,7 @@ msgstr "" "Δεν είναι δυνατή η επεξεργασία γι' αυτήν την επιστροφή χρημάτων αυτή τη " "στιγμή." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 #, fuzzy #| msgid "Permanently delete all orders created in test mode" @@ -4868,63 +4882,63 @@ msgstr "" "Διαγράψτε μόνιμα όλες τις παραγγελίες που δημιουργούνται στη λειτουργία " "δοκιμής" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 #, fuzzy #| msgid "This feature is not enabled." msgid "This gift card is no longer valid." msgstr "Αυτή η λειτουργία δεν είναι ενεργοποιημένη." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 #, fuzzy #| msgid "Access for this device has been revoked." msgid "All credit on this gift card has been used." msgstr "Η πρόσβαση αυτής της συσκευής έχει ανακληθεί." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 #, fuzzy #| msgid "This identifier is already used for a different question." msgid "This gift card is already used for your payment." msgstr "Αυτό το αναγνωριστικό χρησιμοποιείται ήδη για μια διαφορετική ερώτηση." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 #, fuzzy #| msgid "Your cart has been updated." msgid "Your gift card has been applied." msgstr "Το καλάθι σας έχει ενημερωθεί." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 #, fuzzy #| msgid "This feature is not enabled." msgid "This gift card is not known." msgstr "Αυτή η λειτουργία δεν είναι ενεργοποιημένη." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 #, fuzzy #| msgid "This order is not yet approved by the event organizer." msgid "This gift card is not accepted by this event organizer." msgstr "" "Αυτή η παραγγελία δεν έχει εγκριθεί ακόμη από τον διοργανωτή της εκδήλωσης." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "There was an error sending the mail. Please try again later." msgid "This gift card was used in the meantime. Please try again." @@ -12216,7 +12230,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -12324,7 +12338,7 @@ msgstr "Ορίστε νέο κωδικό πρόσβασης" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Αποθηκεύση" @@ -12517,10 +12531,9 @@ msgstr "Λειτουργία εισόδου κάρτας" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Αριθμός κάρτας" @@ -12698,7 +12711,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -13710,7 +13723,7 @@ msgstr "Εγκατεστημένα plugin" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Οι αλλαγές σας έχουν αποθηκευτεί." @@ -18816,7 +18829,7 @@ msgstr "Η νέα λίστα ελέγχου έχει δημιουργηθεί." #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -20189,7 +20202,7 @@ msgstr "Ταυτότητες" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -20533,19 +20546,20 @@ msgstr "Καταχωρίστε τα στοιχεία του τραπεζικού #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Κάτοχος λογαριασμού" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "Τράπεζα" @@ -21223,7 +21237,7 @@ msgstr "" "επεξεργασία." #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "PayPal" @@ -21244,18 +21258,18 @@ msgstr "" msgid "PayPal account" msgstr "Λογαριασμός PayPal" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "{text}" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" "Κάντε κλικ εδώ για ένα σεμινάριο σχετικά με τον τρόπο απόκτησης των " "απαιτούμενων κλειδιών" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "Τελικό σημείο" @@ -21340,8 +21354,8 @@ msgstr "" "Το PayPal δεν έχει ακόμη εγκρίνει την πληρωμή. Θα σας ενημερώσουμε μόλις " "ολοκληρωθεί η πληρωμή." -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "Παρουσιάστηκε σφάλμα κατά την αποστολή της αλληλογραφίας επιβεβαίωσης." @@ -21467,7 +21481,7 @@ msgid "Last update" msgstr "Τελευταία ενημέρωση" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "Συνολική αξία" @@ -21488,18 +21502,18 @@ msgstr "" "Επικοινωνήστε μαζί μας, εάν αυτό διαρκέσει περισσότερο από μερικές ώρες." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "Η διαδικασία πληρωμής ξεκίνησε σε ένα νέο παράθυρο." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" "Το παράθυρο για την εισαγωγή δεδομένων πληρωμής δεν ανοίχθηκε ή έκλεισε;" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "Κάντε κλικ εδώ για να ανοίξετε το παράθυρο." @@ -21973,12 +21987,14 @@ msgstr "" "πρώτες παραγγελίες!" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "Stripe" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" "Αυτό το plugin σας επιτρέπει να λαμβάνετε πληρωμές με πιστωτική κάρτα μέσω " "της Stripe" @@ -21992,43 +22008,48 @@ msgstr "" "Το παρεχόμενο κλειδί \"%(value)s\" δεν φαίνεται έγκυρο. Θα πρέπει να ξεκινά " "με το \"%(prefix)s\"." -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 #, fuzzy #| msgid "Stripe Connect: Secret key (test)" msgid "Stripe Connect: App fee (percent)" msgstr "Σύνδεση Stripe: Μυστικό κλειδί (δοκιμή)" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 #, fuzzy #| msgid "Stripe Connect: Secret key" msgid "Stripe Connect: App fee (max)" msgstr "Σύνδεση Stripe: Μυστικό κλειδί" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 #, fuzzy #| msgid "Stripe Connect: Secret key" msgid "Stripe Connect: App fee (min)" msgstr "Σύνδεση Stripe: Μυστικό κλειδί" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "Για να δεχτείτε πληρωμές μέσω της Stripe, θα χρειαστείτε ένα λογαριασμό στη " "Stripe. Κάνοντας κλικ στο ακόλουθο κουμπί, μπορείτε είτε να δημιουργήσετε " "ένα νέο λογαριασμό Stripe ή να συνδέσετε το pretix με ένα υπάρχον." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "Σύνδεση με τη Stripe" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "Αποσύνδεση από τη Stripe" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -22040,22 +22061,22 @@ msgstr "" "παραγγελίες όταν επιστρέφονται εξωτερικά οι χρεώσεις και να επεξεργαστείτε " "μεθόδους ασύγχρονων πληρωμών όπως το SOFORT." -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 #, fuzzy #| msgid "Needs to be enabled in your Stripe account first." msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "Πρέπει πρώτα να ενεργοποιηθεί ο λογαριασμός σας στη Stripe." -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -22066,21 +22087,21 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "Λογαριασμός Stripe" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "Ζωντανά" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "Δοκιμές" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." @@ -22088,15 +22109,15 @@ msgstr "" "Εάν η εκδήλωση σας βρίσκεται σε δοκιμαστική λειτουργία, θα χρησιμοποιούμε " "πάντα το API δοκιμής της Stripe, ανεξάρτητα από αυτή τη ρύθμιση." -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Κλειδί δημοσίευσης" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Μυστικό κλειδί" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." @@ -22104,39 +22125,96 @@ msgstr "" "Η χώρα στην οποία είναι καταχωρημένος ο λογαριασμός σας Stripe. Συνήθως, " "αυτή είναι η χώρα διαμονής σας." -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Πληρωμές με πιστωτική κάρτα" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "Πρέπει πρώτα να ενεργοποιηθεί ο λογαριασμός σας στη Stripe." -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "iDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "Alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "SOFORT" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -22149,23 +22227,64 @@ msgstr "" "μέθοδο πληρωμής μόνο εάν ο όρος πληρωμής σας επιτρέπει αυτό το χρονικό " "διάστημα καθυστέρησης." -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Περιγραφή" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of πολλές κάρτες ελέγχου για να " "πραγματοποιήσετε μια συναλλαγή. Δεν θα μεταφερθούν πραγματικά χρήματα." -#: pretix/plugins/stripe/payment.py:407 pretix/plugins/stripe/payment.py:757 -#: pretix/plugins/stripe/payment.py:852 +#: pretix/plugins/stripe/payment.py:575 +msgid "No payment information found." +msgstr "Δεν βρέθηκαν πληροφορίες πληρωμής." + +#: pretix/plugins/stripe/payment.py:591 +msgid "Stripe returned an error" +msgstr "Το Stripe επέστρεψε ένα σφάλμα" + +#: pretix/plugins/stripe/payment.py:616 +msgid "" +"We had trouble communicating with Stripe. Please try again and contact " +"support if the problem persists." +msgstr "" +"Είχαμε πρόβλημα στην επικοινωνία με το Stripe. Δοκιμάστε ξανά και " +"επικοινωνήστε με την υποστήριξη εάν το πρόβλημα παραμένει." + +#: pretix/plugins/stripe/payment.py:689 +msgid "You may need to enable JavaScript for Stripe payments." +msgstr "" +"Ίσως χρειαστεί να ενεργοποιήσετε την JavaScript για τις πληρωμές Stripe." + +#: pretix/plugins/stripe/payment.py:761 pretix/plugins/stripe/payment.py:863 +#: pretix/plugins/stripe/payment.py:922 #, python-format msgid "Stripe reported an error with your card: %s" msgstr "Η Stripe ανέφερε ένα λάθος με την κάρτα σας: %s" -#: pretix/plugins/stripe/payment.py:434 pretix/plugins/stripe/payment.py:567 -#: pretix/plugins/stripe/payment.py:770 pretix/plugins/stripe/payment.py:864 -#: pretix/plugins/stripe/payment.py:1436 +#: pretix/plugins/stripe/payment.py:769 pretix/plugins/stripe/payment.py:875 +#: pretix/plugins/stripe/payment.py:936 pretix/plugins/stripe/payment.py:1002 msgid "" "We had trouble communicating with Stripe. Please try again and get in touch " "with us if this problem persists." @@ -22192,265 +22331,348 @@ msgstr "" "Είχαμε πρόβλημα στην επικοινωνία με το Stripe. Δοκιμάστε ξανά και " "επικοινωνήστε μαζί μας αν το πρόβλημα παραμένει." -#: pretix/plugins/stripe/payment.py:452 pretix/plugins/stripe/payment.py:804 +#: pretix/plugins/stripe/payment.py:801 msgid "" "Your payment is pending completion. We will inform you as soon as the " "payment completed." msgstr "" "Η πληρωμή σας εκκρεμεί. Θα σας ενημερώσουμε μόλις ολοκληρωθεί η πληρωμή." -#: pretix/plugins/stripe/payment.py:461 pretix/plugins/stripe/payment.py:818 +#: pretix/plugins/stripe/payment.py:808 +#, fuzzy +#| msgid "The password you entered was invalid, please try again." +msgid "Your payment failed. Please try again." +msgstr "Ο κωδικός που εισαγάγατε δεν ήταν έγκυρος, δοκιμάστε ξανά." + +#: pretix/plugins/stripe/payment.py:814 pretix/plugins/stripe/payment.py:970 #, python-format msgid "Stripe reported an error: %s" msgstr "Το Stripe ανέφερε ένα σφάλμα: %s" -#: pretix/plugins/stripe/payment.py:517 -msgid "No payment information found." -msgstr "Δεν βρέθηκαν πληροφορίες πληρωμής." - -#: pretix/plugins/stripe/payment.py:538 +#: pretix/plugins/stripe/payment.py:963 +#, fuzzy +#| msgid "" +#| "Your payment is pending completion. We will inform you as soon as the " +#| "payment completed." msgid "" -"We had trouble communicating with Stripe. Please try again and contact " -"support if the problem persists." +"Your payment is pending completion. We will inform you as soon as the " +"payment is completed." msgstr "" -"Είχαμε πρόβλημα στην επικοινωνία με το Stripe. Δοκιμάστε ξανά και " -"επικοινωνήστε με την υποστήριξη εάν το πρόβλημα παραμένει." - -#: pretix/plugins/stripe/payment.py:542 -msgid "Stripe returned an error" -msgstr "Το Stripe επέστρεψε ένα σφάλμα" +"Η πληρωμή σας εκκρεμεί. Θα σας ενημερώσουμε μόλις ολοκληρωθεί η πληρωμή." -#: pretix/plugins/stripe/payment.py:638 +#: pretix/plugins/stripe/payment.py:1035 msgid "Credit card via Stripe" msgstr "Πιστωτική κάρτα μέσω Stripe" -#: pretix/plugins/stripe/payment.py:639 +#: pretix/plugins/stripe/payment.py:1036 msgid "Credit card" msgstr "Πιστωτική κάρτα" -#: pretix/plugins/stripe/payment.py:666 -msgid "You may need to enable JavaScript for Stripe payments." +#: pretix/plugins/stripe/payment.py:1116 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "SEPA Debit via Stripe" +msgstr "iDEAL μέσω Stripe" + +#: pretix/plugins/stripe/payment.py:1117 +msgid "SEPA Debit" msgstr "" -"Ίσως χρειαστεί να ενεργοποιήσετε την JavaScript για τις πληρωμές Stripe." -#: pretix/plugins/stripe/payment.py:812 +#: pretix/plugins/stripe/payment.py:1155 #, fuzzy -#| msgid "The password you entered was invalid, please try again." -msgid "Your payment failed. Please try again." -msgstr "Ο κωδικός που εισαγάγατε δεν ήταν έγκυρος, δοκιμάστε ξανά." +#| msgid "Account holder" +msgid "Account Holder Name" +msgstr "Κάτοχος λογαριασμού" + +#: pretix/plugins/stripe/payment.py:1159 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Street" +msgstr "Κάτοχος λογαριασμού" -#: pretix/plugins/stripe/payment.py:885 +#: pretix/plugins/stripe/payment.py:1168 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Postal Code" +msgstr "Κάτοχος λογαριασμού" + +#: pretix/plugins/stripe/payment.py:1177 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder City" +msgstr "Κάτοχος λογαριασμού" + +#: pretix/plugins/stripe/payment.py:1186 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Country" +msgstr "Κάτοχος λογαριασμού" + +#: pretix/plugins/stripe/payment.py:1224 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Affirm via Stripe" +msgstr "Alipay μέσω Stripe" + +#: pretix/plugins/stripe/payment.py:1263 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Klarna via Stripe" +msgstr "Alipay μέσω Stripe" + +#: pretix/plugins/stripe/payment.py:1368 msgid "giropay via Stripe" msgstr "giropay μέσω Stripe" -#: pretix/plugins/stripe/payment.py:917 pretix/plugins/stripe/payment.py:1084 -#: pretix/plugins/stripe/payment.py:1236 +#: pretix/plugins/stripe/payment.py:1372 +msgid "" +"giropay is an online payment method available to all customers of most " +"German banks, usually after one-time activation. Please keep your online " +"banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1383 pretix/plugins/stripe/payment.py:1451 +#: pretix/plugins/stripe/payment.py:1554 msgid "unknown name" msgstr "άγνωστο όνομα" -#: pretix/plugins/stripe/payment.py:949 pretix/plugins/stripe/payment.py:1001 -#: pretix/plugins/stripe/payment.py:1116 pretix/plugins/stripe/payment.py:1268 -#: pretix/plugins/stripe/payment.py:1371 +#: pretix/plugins/stripe/payment.py:1395 pretix/plugins/stripe/payment.py:1415 +#: pretix/plugins/stripe/payment.py:1459 pretix/plugins/stripe/payment.py:1562 +#: pretix/plugins/stripe/payment.py:1654 #, fuzzy, python-brace-format #| msgid "Bank account type" msgid "Bank account at {bank}" msgstr "Τύπος τραπεζικού λογαριασμού" -#: pretix/plugins/stripe/payment.py:957 +#: pretix/plugins/stripe/payment.py:1403 msgid "iDEAL via Stripe" msgstr "iDEAL μέσω Stripe" -#: pretix/plugins/stripe/payment.py:1009 +#: pretix/plugins/stripe/payment.py:1407 +msgid "" +"iDEAL is an online payment method available to customers of Dutch banks. " +"Please keep your online banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1428 msgid "Alipay via Stripe" msgstr "Alipay μέσω Stripe" -#: pretix/plugins/stripe/payment.py:1052 +#: pretix/plugins/stripe/payment.py:1433 +msgid "" +"This payment method is available to customers of the Chinese payment system " +"Alipay. Please keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1440 msgid "Bancontact via Stripe" msgstr "Bancontact μέσω Stripe" -#: pretix/plugins/stripe/payment.py:1124 +#: pretix/plugins/stripe/payment.py:1472 msgid "SOFORT via Stripe" msgstr "SOFORT μέσω Stripe" -#: pretix/plugins/stripe/payment.py:1141 +#: pretix/plugins/stripe/payment.py:1473 +#, fuzzy +#| msgid "Payment by bank transfer" +msgid "SOFORT (instant bank transfer)" +msgstr "Πληρωμή με τραπεζικό έμβασμα" + +#: pretix/plugins/stripe/payment.py:1491 msgid "Country of your bank" msgstr "Χώρα της τράπεζάς σας" -#: pretix/plugins/stripe/payment.py:1142 +#: pretix/plugins/stripe/payment.py:1492 msgid "Germany" msgstr "Γερμανία" -#: pretix/plugins/stripe/payment.py:1143 +#: pretix/plugins/stripe/payment.py:1493 msgid "Austria" msgstr "Αυστρία" -#: pretix/plugins/stripe/payment.py:1144 +#: pretix/plugins/stripe/payment.py:1494 msgid "Belgium" msgstr "Βέλγιο" -#: pretix/plugins/stripe/payment.py:1145 +#: pretix/plugins/stripe/payment.py:1495 msgid "Netherlands" msgstr "Ολλανδία" -#: pretix/plugins/stripe/payment.py:1146 +#: pretix/plugins/stripe/payment.py:1496 msgid "Spain" msgstr "Ισπανία" -#: pretix/plugins/stripe/payment.py:1193 +#: pretix/plugins/stripe/payment.py:1532 #, fuzzy, python-brace-format #| msgid "Bank account details" msgid "Bank account {iban} at {bank}" msgstr "Λεπτομέρειες τραπεζικού λογαριασμού" -#: pretix/plugins/stripe/payment.py:1204 +#: pretix/plugins/stripe/payment.py:1543 #, fuzzy #| msgid "iDEAL via Stripe" msgid "EPS via Stripe" msgstr "iDEAL μέσω Stripe" -#: pretix/plugins/stripe/payment.py:1276 +#: pretix/plugins/stripe/payment.py:1575 #, fuzzy #| msgid "Alipay via Stripe" msgid "Multibanco via Stripe" msgstr "Alipay μέσω Stripe" -#: pretix/plugins/stripe/payment.py:1323 +#: pretix/plugins/stripe/payment.py:1624 #, fuzzy #| msgid "Alipay via Stripe" msgid "Przelewy24 via Stripe" msgstr "Alipay μέσω Stripe" -#: pretix/plugins/stripe/payment.py:1379 +#: pretix/plugins/stripe/payment.py:1628 +msgid "" +"Przelewy24 is an online payment method available to customers of Polish " +"banks. Please keep your online banking account and login information " +"available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1662 #, fuzzy #| msgid "Payment via Stripe" msgid "WeChat Pay via Stripe" msgstr "Πληρωμή μέσω Stripe" -#: pretix/plugins/stripe/signals.py:65 +#: pretix/plugins/stripe/payment.py:1667 +msgid "" +"This payment method is available to users of the Chinese app WeChat. Please " +"keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1690 +#, fuzzy +#| msgid "Payment via Stripe" +msgid "PayPal via Stripe" +msgstr "Πληρωμή μέσω Stripe" + +#: pretix/plugins/stripe/payment.py:1697 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "Swish via Stripe" +msgstr "iDEAL μέσω Stripe" + +#: pretix/plugins/stripe/payment.py:1702 +msgid "" +"This payment method is available to users of the Swedish apps Swish and " +"BankID. Please have your app ready." +msgstr "" + +#: pretix/plugins/stripe/signals.py:70 msgid "Charge succeeded." msgstr "Επιτυχής χρέωση." -#: pretix/plugins/stripe/signals.py:66 +#: pretix/plugins/stripe/signals.py:71 msgid "Charge refunded." msgstr "Αποτυχία χρέωσης." -#: pretix/plugins/stripe/signals.py:67 +#: pretix/plugins/stripe/signals.py:72 msgid "Charge updated." msgstr "Ανανέωση χρέωσης." -#: pretix/plugins/stripe/signals.py:68 +#: pretix/plugins/stripe/signals.py:73 msgid "Charge pending" msgstr "Εκκρεμής χρέωση" -#: pretix/plugins/stripe/signals.py:69 +#: pretix/plugins/stripe/signals.py:74 msgid "Payment authorized." msgstr "Η πληρωμή εγκρίθηκε." -#: pretix/plugins/stripe/signals.py:70 +#: pretix/plugins/stripe/signals.py:75 msgid "Payment authorization canceled." msgstr "Η εντολή πληρωμής ακυρώθηκε." -#: pretix/plugins/stripe/signals.py:71 +#: pretix/plugins/stripe/signals.py:76 msgid "Payment authorization failed." msgstr "Η εντολή πληρωμής απέτυχε." -#: pretix/plugins/stripe/signals.py:77 +#: pretix/plugins/stripe/signals.py:82 msgid "Charge failed. Reason: {}" msgstr "Η χρέωση απέτυχε. Αιτία: {}" -#: pretix/plugins/stripe/signals.py:79 +#: pretix/plugins/stripe/signals.py:84 msgid "Dispute created. Reason: {}" msgstr "Δημιουργήθηκε διαφορά. Αιτία: {}" -#: pretix/plugins/stripe/signals.py:81 +#: pretix/plugins/stripe/signals.py:86 msgid "Dispute updated. Reason: {}" msgstr "Η διαφορά ενημερώθηκε. Αιτία: {}" -#: pretix/plugins/stripe/signals.py:83 +#: pretix/plugins/stripe/signals.py:88 msgid "Dispute closed. Status: {}" msgstr "Η διαφορά έκλεισε. Κατάσταση: {}" -#: pretix/plugins/stripe/signals.py:86 +#: pretix/plugins/stripe/signals.py:91 msgid "Stripe reported an event: {}" msgstr "Η Stripe ανέφερε ένα γεγονός: {}" -#: pretix/plugins/stripe/signals.py:97 +#: pretix/plugins/stripe/signals.py:102 msgid "Stripe Connect: Client ID" msgstr "Σύνδεση Stripe: Αναγνωριστικό πελάτη" -#: pretix/plugins/stripe/signals.py:104 +#: pretix/plugins/stripe/signals.py:109 msgid "Stripe Connect: Secret key" msgstr "Σύνδεση Stripe: Μυστικό κλειδί" -#: pretix/plugins/stripe/signals.py:111 +#: pretix/plugins/stripe/signals.py:116 msgid "Stripe Connect: Publishable key" msgstr "Σύνδεση Stripe: Κλειδί δημοσίευσης" -#: pretix/plugins/stripe/signals.py:118 +#: pretix/plugins/stripe/signals.py:123 msgid "Stripe Connect: Secret key (test)" msgstr "Σύνδεση Stripe: Μυστικό κλειδί (δοκιμή)" -#: pretix/plugins/stripe/signals.py:125 +#: pretix/plugins/stripe/signals.py:130 msgid "Stripe Connect: Publishable key (test)" msgstr "Σύνδεση Stripe: Κλειδί για δημοσίευση (δοκιμή)" -#: pretix/plugins/stripe/signals.py:170 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:6 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:9 +#: pretix/plugins/stripe/signals.py:156 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:3 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:9 #, fuzzy #| msgid "Stripe Checkout" msgid "Stripe Connect" msgstr "Έλεγχος Stripe" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"Η συναλλαγή Stripe %(stripe_href)s>%(charge)s πέτυχε, αλλά η " -"παραγγελία %(order)s έχει ήδη πληρωθεί με άλλα μέσα. Κάντε διπλό έλεγχο και " -"επιστρέψτε τα χρήματα μέσω της διασύνδεσης του Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"Η συναλλαγή Stripe %(stripe_href)s>%(charge)s πέτυχε, αλλά η " -"παραγγελία %(order)s έχει λήξει και το προϊόν έχει εξαντληθεί εν τω μεταξύ. " -"Επομένως, η πληρωμή δεν ήταν αποδεκτή. Επικοινωνήστε με τον χρήστη και " -"επιστρέψτε τα χρήματα μέσω της διασύνδεσης του Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"Η Stripe ανέφερε ότι η επιστροφή χρημάτων της %(charge)s της συναλλαγής. Θέλετε να επιστρέψετε την αντίστοιχη παραγγελία " -"(%(order)s) ως επιστροφή χρημάτων;" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "Το συνολικό ποσό θα αφαιρεθεί από την πιστωτική σας κάρτα." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "Τύπος κάρτας" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "Το συνολικό ποσό θα αφαιρεθεί από την πιστωτική σας κάρτα." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Κάτοχος λογαριασμού" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -22460,17 +22682,17 @@ msgstr "" "υπηρεσιών πληρωμών για να ολοκληρώσετε την πληρωμή σας. Στη συνέχεια θα " "μεταφερθείτε εδώ για να λάβετε τα εισιτήριά σας." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "Για πληρωμή με πιστωτική κάρτα, ενεργοποιήστε την JavaScript." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." @@ -22478,15 +22700,15 @@ msgstr "" "Έχετε ήδη εισαγάγει έναν αριθμό κάρτας που θα χρησιμοποιήσουμε για να " "χρεώσουμε το ποσό της πληρωμής." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "Χρησιμοποιήστε μια διαφορετική κάρτα" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "H" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -22495,26 +22717,81 @@ msgstr "" "της πιστωτικής σας κάρτας θα μεταφερθούν απευθείας στην Stripe και δεν θα " "αγγίξουν ποτέ τους διακομιστές μας." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "Για πληρωμή με πιστωτική κάρτα, ενεργοποιήστε την JavaScript." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"Έχετε ήδη εισαγάγει έναν αριθμό κάρτας που θα χρησιμοποιήσουμε για να " +"χρεώσουμε το ποσό της πληρωμής." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "Χρησιμοποιήστε μια διαφορετική κάρτα" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "Αναγνωριστικό χρέωσης" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "Όνομα πληρωτή" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "Όνομα πληρωτή" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "Μήνυμα λάθους" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to regenerate your emergency codes?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" +"Θέλετε πραγματικά να αναδημιουργήσετε τους κωδικούς σας έκτακτης ανάγκης;" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Connect" +msgid "Disconnect" +msgstr "Σύνδεση" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -22522,73 +22799,77 @@ msgstr "" "Περιμένουμε μια απάντηση από τον πάροχο πληρωμής σχετικά με την πληρωμή σας. " "Επικοινωνήστε μαζί μας εάν αυτό διαρκεί περισσότερο από μερικές ημέρες." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 #, fuzzy #| msgid "Cancel payment" msgid "Confirm payment" msgstr "Ακύρωση πληρωμής" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "Η συναλλαγή πληρωμής δεν ολοκληρώθηκε για τον ακόλουθο λόγο:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Άγνωστος λόγος" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Πληρωμή παραγγελίας" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, fuzzy, python-format #| msgid "Change payment method: %(code)s" msgid "Confirm payment: %(code)s" msgstr "Αλλαγή μεθόδου πληρωμής: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "Παρουσιάστηκε σφάλμα κατά τη σύνδεση με την Stripe, δοκιμάστε ξανά." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "Η Stripe επέστρεψε ένα σφάλμα: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" "Ο λογαριασμός σας Stripe είναι πλέον συνδεδεμένος με το pretix. Μπορείτε να " "αλλάξετε τις ρυθμίσεις λεπτομερέστερα παρακάτω." -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "Ο λογαριασμός σας Stripe έχει αποσυνδεθεί." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -22596,7 +22877,7 @@ msgstr "" "Λυπούμαστε, υπήρξε ένα σφάλμα στη διαδικασία πληρωμής. Ελέγξτε τη σύνδεση " "στα μηνύματα ηλεκτρονικού ταχυδρομείου για να συνεχίσετε." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -22604,7 +22885,7 @@ msgstr "" "Είχαμε πρόβλημα με την εξουσιοδότηση της πληρωμής της κάρτας σας. Δοκιμάστε " "ξανά και επικοινωνήστε μαζί μας αν το πρόβλημα παραμένει." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 #, fuzzy #| msgid "" #| "Sorry, there was an error in the payment process. Please check the link " @@ -24806,6 +25087,38 @@ msgstr "Πρόσβαση για εγγραφή" msgid "Kosovo" msgstr "" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Η συναλλαγή Stripe %(stripe_href)s>%(charge)s πέτυχε, αλλά η " +#~ "παραγγελία %(order)s έχει ήδη πληρωθεί με άλλα μέσα. Κάντε διπλό έλεγχο " +#~ "και επιστρέψτε τα χρήματα μέσω της διασύνδεσης του Stripe." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Η συναλλαγή Stripe %(stripe_href)s>%(charge)s πέτυχε, αλλά η " +#~ "παραγγελία %(order)s έχει λήξει και το προϊόν έχει εξαντληθεί εν τω " +#~ "μεταξύ. Επομένως, η πληρωμή δεν ήταν αποδεκτή. Επικοινωνήστε με τον " +#~ "χρήστη και επιστρέψτε τα χρήματα μέσω της διασύνδεσης του Stripe." + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "Η Stripe ανέφερε ότι η επιστροφή χρημάτων της %(charge)s της συναλλαγής. Θέλετε να επιστρέψετε την " +#~ "αντίστοιχη παραγγελία (%(order)s) ως επιστροφή χρημάτων;" + #, fuzzy #~| msgid "Optional. No products will be sold before this date." #~ msgid "Only include orders issued on or before this date." diff --git a/src/pretix/locale/el/LC_MESSAGES/djangojs.po b/src/pretix/locale/el/LC_MESSAGES/djangojs.po index b27fc52e5..09c5b35f0 100644 --- a/src/pretix/locale/el/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/el/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2019-10-03 19:00+0000\n" "Last-Translator: Chris Spy \n" "Language-Team: Greek event " #~ "ticketing powered by pretix" #~ msgstr "" -#~ "εισιτήρια εκδηλώσεων powered by pretix" +#~ "εισιτήρια εκδηλώσεων powered by pretix" diff --git a/src/pretix/locale/es/LC_MESSAGES/django.po b/src/pretix/locale/es/LC_MESSAGES/django.po index d7447212b..1080696d3 100644 --- a/src/pretix/locale/es/LC_MESSAGES/django.po +++ b/src/pretix/locale/es/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2020-07-02 17:25+0000\n" "Last-Translator: oocf \n" "Language-Team: Spanish " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Vacío, si este producto no es un ticket de admisión" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Nombre de la Compañía" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Seleccione país" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "creado" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "pendiente" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "confirmado" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "cancelado" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "fallido" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "reembolsado" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Información de pago" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, fuzzy, python-format #| msgid "Order approved and confirmed: %(code)s" msgid "Event registration confirmed: %(code)s" msgstr "Pedido aprobado y confirmado: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Pago recibido por su pedido: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "iniciado externamente" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "creado" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "en tránsito" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "hecho" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "fallido" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "cancelado" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Organizador" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Cliente" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Externo" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Refund only" msgid "Refund reason" msgstr "Reembolso solamente" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Tarifa de pago" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Tarifa de envío" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Tarifa por servicio" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Tarifa de cancelación" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Otras tarifas" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Tarjeta de regalo" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Valor" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Posición de la orden" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, fuzzy, python-format #| msgid "Your order: %(code)s" msgid "Your event registration: %(code)s" msgstr "Su pedido: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "ID de carrito (p. ej. clave de sesión)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Posición del carrito" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Posiciones del carrito" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Solo para usuarios comerciales en la UE." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "Esta referencia se imprimirá en su factura para su conveniencia." @@ -3858,7 +3858,7 @@ msgstr "" "asesor fiscal. No se da ninguna garantía para el cálculo correcto de los " "impuestos. USO BAJO SU PROPIO RIESGO." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "País mercantil" @@ -4530,22 +4530,36 @@ msgstr "Necesitas seleccionar una fecha." msgid "Ambiguous option selected." msgstr "Selección de opción inválida." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "Aplicar" + +#: pretix/base/payment.py:54 +#, fuzzy +#| msgid "Android (Google Play)" +msgctxt "payment" +msgid "Google Pay" +msgstr "Android (Google Play)" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Habilitar método de pago" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Los usuarios no podrán elegir este proveedor de pago después de la fecha " "indicada." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Texto en las facturas" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4557,11 +4571,11 @@ msgstr "" "del pedido. Si la factura se genera posteriormente, se mostrará un texto " "indicando que ya ha sido pagada." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Mínimo total de la orden" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4571,11 +4585,11 @@ msgstr "" "al valor dado. El total del pedido para este fin puede ser calculado sin " "tener en cuenta los honorarios impuestos por este método de pago." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Máximo total de la orden" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4585,23 +4599,23 @@ msgstr "" "al valor dado. El total del pedido para este fin puede ser calculado sin " "tener en cuenta los honorarios impuestos por este método de pago." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Tarifa adicional" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Impuesto total" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "Porcentaje total de la orden." -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Calcule la tarifa del valor total incluyendo la tarifa." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4615,11 +4629,11 @@ msgstr "" "detallada sobre lo que hace. ¡No olvide establecer las tarifas " "correctas arriba!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "Restringir a países" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4630,46 +4644,46 @@ msgstr "" "permiten todos los países. Esto sólo está habilitado si se requiere la " "dirección de facturación." -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 #, fuzzy #| msgid "The settings of a payment provider have been changed." msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "Se ha modificado la configuración de un proveedor de pagos." -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 #, fuzzy #| msgid "Enable payment method" msgid "Hide payment method" msgstr "Habilitar método de pago" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 #, fuzzy #| msgid "Enable payment method" msgid "Link to enable payment method" msgstr "Habilitar método de pago" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "El pago de esta factura ya se ha recibido." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" "Los reembolsos automáticos no son soportados por este proveedor de pago." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4677,21 +4691,21 @@ msgstr "" "Ningún pago es requerido para esta orden porque solo incluye artículos que " "son sin recargo." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Gratis" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Taquilla" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "Pago manual" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." @@ -4699,15 +4713,15 @@ msgstr "" "En modo de prueba, puedes simplemente marcar manualmente esta orden como " "pagada en el backend después de que haya sido creada." -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "Nombre del método de pago" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "Descripción del proceso de pago durante la compra" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4715,13 +4729,13 @@ msgstr "" "Este texto se mostrará durante la compra cuando el usuario seleccione este " "método de pago. Debe dar una breve explicación sobre este método de pago." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" "Descripción del proceso de pago en los correos electrónicos de confirmación " "de pedido" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, fuzzy, python-brace-format #| msgid "" #| "This text will be included for the {payment_info} placeholder in order " @@ -4739,11 +4753,11 @@ msgstr "" "proceder con el pago. Puede utilizar los marcadores de posición {order}, " "{total}, {currency} y {total_with_currency}" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "Descripción del proceso de pago para pedidos pendientes" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, fuzzy, python-brace-format #| msgid "" #| "This text will be shown on the order confirmation page for pending " @@ -4759,70 +4773,70 @@ msgstr "" "Debe instruir al usuario sobre cómo proceder con el pago. Puede utilizar los " "marcadores de posición {order}, {total}, {currency} y {total_with_currency}" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "Compensación" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "Ha introducido una orden que no se ha podido encontrar." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "Equilibrado con órdenes: %s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "En modo de pruebas, solo tarjetas de prueba funcionaran." -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" "No se puede pagar mediante tarjeta regalo para comprar una tarjeta regalo." -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 #, fuzzy #| msgid "This payment method does not support automatic refunds." msgid "This gift card does not support this currency." msgstr "Este método de pago no admite reembolsos automáticos." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 #, fuzzy #| msgid "This refund can not be processed at the moment." msgid "This gift card can only be used in test mode." msgstr "Este reembolso no puede ser procesado en este momento." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 #, fuzzy #| msgid "Permanently delete all orders created in test mode" msgid "Only test gift cards can be used in test mode." msgstr "Eliminar permanentemente todas las ordenes creadas en modo de prueba" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 #, fuzzy #| msgid "This feature is not enabled." msgid "This gift card is no longer valid." msgstr "Esta función no está habilitada." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 #, fuzzy #| msgid "Access for this device has been revoked." msgid "All credit on this gift card has been used." msgstr "Se ha revocado el acceso a este dispositivo." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 #, fuzzy #| msgid "This identifier is already used for a different question." msgid "This gift card is already used for your payment." msgstr "Este identificador ya se utiliza para una pregunta diferente." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." @@ -4830,13 +4844,13 @@ msgstr "" "La tarjeta regalo se ha aplicado, pero falta {} por pagar. Por favor, " "selecciona un método de pago." -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 #, fuzzy #| msgid "Your cart has been updated." msgid "Your gift card has been applied." msgstr "Su carrito ha sido actualizado." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." @@ -4845,13 +4859,13 @@ msgstr "" "se pueden introducir en la primera página de la tienda, bajo la selección de " "producto." -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 #, fuzzy #| msgid "This feature is not enabled." msgid "This gift card is not known." msgstr "Esta función no está habilitada." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." @@ -4859,13 +4873,13 @@ msgstr "" "Esta tarjeta regalo no se puede canjear dado que su código no es único. Por " "favor, contacta con el organizador del evento." -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 #, fuzzy #| msgid "This order is not yet approved by the event organizer." msgid "This gift card is not accepted by this event organizer." msgstr "Este pedido aún no ha sido aprobado por el organizador del evento." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "There was an error sending the mail. Please try again later." msgid "This gift card was used in the meantime. Please try again." @@ -12235,7 +12249,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -12343,7 +12357,7 @@ msgstr "Establecer nueva contraseña" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Guardar" @@ -12534,10 +12548,9 @@ msgstr "Modo de inserción de tarjeta" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Número de tarjeta" @@ -12715,7 +12728,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -13717,7 +13730,7 @@ msgstr "Plugins instalados" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Tus cambios han sido guardados." @@ -18797,7 +18810,7 @@ msgstr "Se ha creado la nueva lista de registro." #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "No pudimos guardar tus cambios. Mira abajo para detalles." @@ -20153,7 +20166,7 @@ msgstr "Insignias" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -20496,19 +20509,20 @@ msgstr "Por favor ingrese los detalles de su cuenta bancaria." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Titular de la cuenta" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "Banco" @@ -21183,7 +21197,7 @@ msgstr "" "manual." #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "PayPal" @@ -21204,17 +21218,17 @@ msgstr "" msgid "PayPal account" msgstr "Cuenta de PayPal" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "{text}" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" "Haga clic aquí para un tutorial sobre cómo obtener las claves necesarias" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "Punto final" @@ -21299,8 +21313,8 @@ msgstr "" "PayPal aún no ha aprobado el pago. Le informaremos tan pronto como se " "complete el pago." -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "Se ha producido un error al enviar el mail de confirmación." @@ -21425,7 +21439,7 @@ msgid "Last update" msgstr "Última actualización" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "Valor total" @@ -21446,17 +21460,17 @@ msgstr "" "contacto con nosotros, si esto tarda más de unas horas." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "El proceso de pago ha comenzado en una nueva ventana." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "¿La ventana para introducir sus datos de pago no se abrió o se cerró?" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "Haga clic aquí para abrir la ventana." @@ -21945,12 +21959,14 @@ msgstr "" "pronto como se envíen los primeros pedidos!" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "Stripe" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" "Este plugin le permite recibir pagos con tarjeta de crédito a través de " "Stripe" @@ -21964,43 +21980,48 @@ msgstr "" "La clave \"%(value)s\" suministrada no parece válida. Debería comenzar con " "\"%(prefix)s\"." -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 #, fuzzy #| msgid "Stripe Connect: Secret key (test)" msgid "Stripe Connect: App fee (percent)" msgstr "Conexiones a Stripe: Clave secreta (test)" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 #, fuzzy #| msgid "Stripe Connect: Secret key" msgid "Stripe Connect: App fee (max)" msgstr "Conexiones a Stripe: Clave secreta" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 #, fuzzy #| msgid "Stripe Connect: Secret key" msgid "Stripe Connect: App fee (min)" msgstr "Conexiones a Stripe: Clave secreta" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "Para aceptar pagos a través de Stripe, necesitará una cuenta en Stripe. " "Haciendo clic en el siguiente botón, puede crear una nueva cuenta de Stripe " "o conectar el pretix a una ya existente." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "Conectar con Stripe" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "Desconectar de Stripe" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -22012,22 +22033,22 @@ msgstr "" "automáticamente los pedidos cuando los cargos sean reembolsados externamente " "y para procesar métodos de pago asíncronos como SOFORT." -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 #, fuzzy #| msgid "Needs to be enabled in your Stripe account first." msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "Debe habilitarse primero en su cuenta de Stripe." -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -22038,21 +22059,21 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "Cuenta de Stripe" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "En Vivo" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "Pruebas" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." @@ -22060,15 +22081,15 @@ msgstr "" "Si tu evento está en modo de prueba, siempre usaremos el API de prueba de " "Stripe, sin importar esta configuración." -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Clave publicable" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Clave secreta" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." @@ -22076,39 +22097,96 @@ msgstr "" "El país en el que está registrada su cuenta Stripe. Por lo general, este es " "su país de residencia." -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Pagos con tarjeta de crédito" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "Debe habilitarse primero en su cuenta de Stripe." -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "IDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "Alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "SOFORT" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -22120,23 +22198,64 @@ msgstr "" "días para ser confirmados en algunos casos. Por favor, active este " "método de pago sólo si su plazo de pago lo permite." -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Descripción" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of varias tarjetas de prueba para realizar una transacción. No se " "transferirá nada de dinero." -#: pretix/plugins/stripe/payment.py:407 pretix/plugins/stripe/payment.py:757 -#: pretix/plugins/stripe/payment.py:852 +#: pretix/plugins/stripe/payment.py:575 +msgid "No payment information found." +msgstr "No se ha encontrado información de pago." + +#: pretix/plugins/stripe/payment.py:591 +msgid "Stripe returned an error" +msgstr "Stripe ha devuelto un error" + +#: pretix/plugins/stripe/payment.py:616 +msgid "" +"We had trouble communicating with Stripe. Please try again and contact " +"support if the problem persists." +msgstr "" +"Tuvimos problemas para comunicarnos con Stripe. Vuelva a intentarlo y " +"póngase en contacto con el servicio de asistencia técnica si el problema " +"persiste." + +#: pretix/plugins/stripe/payment.py:689 +msgid "You may need to enable JavaScript for Stripe payments." +msgstr "Es posible que necesite habilitar JavaScript para pagos con Stripe." + +#: pretix/plugins/stripe/payment.py:761 pretix/plugins/stripe/payment.py:863 +#: pretix/plugins/stripe/payment.py:922 #, python-format msgid "Stripe reported an error with your card: %s" msgstr "Stripe reportó un error con su tarjeta: %s" -#: pretix/plugins/stripe/payment.py:434 pretix/plugins/stripe/payment.py:567 -#: pretix/plugins/stripe/payment.py:770 pretix/plugins/stripe/payment.py:864 -#: pretix/plugins/stripe/payment.py:1436 +#: pretix/plugins/stripe/payment.py:769 pretix/plugins/stripe/payment.py:875 +#: pretix/plugins/stripe/payment.py:936 pretix/plugins/stripe/payment.py:1002 msgid "" "We had trouble communicating with Stripe. Please try again and get in touch " "with us if this problem persists." @@ -22163,7 +22302,7 @@ msgstr "" "Tuvimos problemas para comunicarnos con Stripe. Por favor, inténtelo de " "nuevo y póngase en contacto con nosotros si este problema persiste." -#: pretix/plugins/stripe/payment.py:452 pretix/plugins/stripe/payment.py:804 +#: pretix/plugins/stripe/payment.py:801 msgid "" "Your payment is pending completion. We will inform you as soon as the " "payment completed." @@ -22171,259 +22310,342 @@ msgstr "" "Su pago está pendiente de completarse. Le informaremos tan pronto como se " "complete el pago." -#: pretix/plugins/stripe/payment.py:461 pretix/plugins/stripe/payment.py:818 +#: pretix/plugins/stripe/payment.py:808 +#, fuzzy +#| msgid "The password you entered was invalid, please try again." +msgid "Your payment failed. Please try again." +msgstr "La contraseña que introdujo no era válida, inténtelo de nuevo." + +#: pretix/plugins/stripe/payment.py:814 pretix/plugins/stripe/payment.py:970 #, python-format msgid "Stripe reported an error: %s" msgstr "Stripe reportó un error: %s" -#: pretix/plugins/stripe/payment.py:517 -msgid "No payment information found." -msgstr "No se ha encontrado información de pago." - -#: pretix/plugins/stripe/payment.py:538 +#: pretix/plugins/stripe/payment.py:963 +#, fuzzy +#| msgid "" +#| "Your payment is pending completion. We will inform you as soon as the " +#| "payment completed." msgid "" -"We had trouble communicating with Stripe. Please try again and contact " -"support if the problem persists." +"Your payment is pending completion. We will inform you as soon as the " +"payment is completed." msgstr "" -"Tuvimos problemas para comunicarnos con Stripe. Vuelva a intentarlo y " -"póngase en contacto con el servicio de asistencia técnica si el problema " -"persiste." - -#: pretix/plugins/stripe/payment.py:542 -msgid "Stripe returned an error" -msgstr "Stripe ha devuelto un error" +"Su pago está pendiente de completarse. Le informaremos tan pronto como se " +"complete el pago." -#: pretix/plugins/stripe/payment.py:638 +#: pretix/plugins/stripe/payment.py:1035 msgid "Credit card via Stripe" msgstr "Tarjeta de crédito a través de Stripe" -#: pretix/plugins/stripe/payment.py:639 +#: pretix/plugins/stripe/payment.py:1036 msgid "Credit card" msgstr "Tarjeta de crédito" -#: pretix/plugins/stripe/payment.py:666 -msgid "You may need to enable JavaScript for Stripe payments." -msgstr "Es posible que necesite habilitar JavaScript para pagos con Stripe." +#: pretix/plugins/stripe/payment.py:1116 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "SEPA Debit via Stripe" +msgstr "iDEAL a través de Stripe" -#: pretix/plugins/stripe/payment.py:812 +#: pretix/plugins/stripe/payment.py:1117 +msgid "SEPA Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1155 #, fuzzy -#| msgid "The password you entered was invalid, please try again." -msgid "Your payment failed. Please try again." -msgstr "La contraseña que introdujo no era válida, inténtelo de nuevo." +#| msgid "Account holder" +msgid "Account Holder Name" +msgstr "Titular de la cuenta" + +#: pretix/plugins/stripe/payment.py:1159 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Street" +msgstr "Titular de la cuenta" + +#: pretix/plugins/stripe/payment.py:1168 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Postal Code" +msgstr "Titular de la cuenta" + +#: pretix/plugins/stripe/payment.py:1177 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder City" +msgstr "Titular de la cuenta" + +#: pretix/plugins/stripe/payment.py:1186 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Country" +msgstr "Titular de la cuenta" + +#: pretix/plugins/stripe/payment.py:1224 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Affirm via Stripe" +msgstr "Alipay vía Stripe" -#: pretix/plugins/stripe/payment.py:885 +#: pretix/plugins/stripe/payment.py:1263 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Klarna via Stripe" +msgstr "Alipay vía Stripe" + +#: pretix/plugins/stripe/payment.py:1368 msgid "giropay via Stripe" msgstr "giropay vía Stripe" -#: pretix/plugins/stripe/payment.py:917 pretix/plugins/stripe/payment.py:1084 -#: pretix/plugins/stripe/payment.py:1236 +#: pretix/plugins/stripe/payment.py:1372 +msgid "" +"giropay is an online payment method available to all customers of most " +"German banks, usually after one-time activation. Please keep your online " +"banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1383 pretix/plugins/stripe/payment.py:1451 +#: pretix/plugins/stripe/payment.py:1554 msgid "unknown name" msgstr "nombre desconocido" -#: pretix/plugins/stripe/payment.py:949 pretix/plugins/stripe/payment.py:1001 -#: pretix/plugins/stripe/payment.py:1116 pretix/plugins/stripe/payment.py:1268 -#: pretix/plugins/stripe/payment.py:1371 +#: pretix/plugins/stripe/payment.py:1395 pretix/plugins/stripe/payment.py:1415 +#: pretix/plugins/stripe/payment.py:1459 pretix/plugins/stripe/payment.py:1562 +#: pretix/plugins/stripe/payment.py:1654 #, fuzzy, python-brace-format #| msgid "Bank account type" msgid "Bank account at {bank}" msgstr "Tipo de la cuenta bancaria" -#: pretix/plugins/stripe/payment.py:957 +#: pretix/plugins/stripe/payment.py:1403 msgid "iDEAL via Stripe" msgstr "iDEAL a través de Stripe" -#: pretix/plugins/stripe/payment.py:1009 +#: pretix/plugins/stripe/payment.py:1407 +msgid "" +"iDEAL is an online payment method available to customers of Dutch banks. " +"Please keep your online banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1428 msgid "Alipay via Stripe" msgstr "Alipay vía Stripe" -#: pretix/plugins/stripe/payment.py:1052 +#: pretix/plugins/stripe/payment.py:1433 +msgid "" +"This payment method is available to customers of the Chinese payment system " +"Alipay. Please keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1440 msgid "Bancontact via Stripe" msgstr "Bancontact vía Stripe" -#: pretix/plugins/stripe/payment.py:1124 +#: pretix/plugins/stripe/payment.py:1472 msgid "SOFORT via Stripe" msgstr "SOFORT vía Stripe" -#: pretix/plugins/stripe/payment.py:1141 +#: pretix/plugins/stripe/payment.py:1473 +#, fuzzy +#| msgid "Payment by bank transfer" +msgid "SOFORT (instant bank transfer)" +msgstr "Pago por transferencia bancaria" + +#: pretix/plugins/stripe/payment.py:1491 msgid "Country of your bank" msgstr "País de tu banco" -#: pretix/plugins/stripe/payment.py:1142 +#: pretix/plugins/stripe/payment.py:1492 msgid "Germany" msgstr "Alemania" -#: pretix/plugins/stripe/payment.py:1143 +#: pretix/plugins/stripe/payment.py:1493 msgid "Austria" msgstr "Austria" -#: pretix/plugins/stripe/payment.py:1144 +#: pretix/plugins/stripe/payment.py:1494 msgid "Belgium" msgstr "Bélgica" -#: pretix/plugins/stripe/payment.py:1145 +#: pretix/plugins/stripe/payment.py:1495 msgid "Netherlands" msgstr "de los Países Bajos" -#: pretix/plugins/stripe/payment.py:1146 +#: pretix/plugins/stripe/payment.py:1496 msgid "Spain" msgstr "España" -#: pretix/plugins/stripe/payment.py:1193 +#: pretix/plugins/stripe/payment.py:1532 #, fuzzy, python-brace-format #| msgid "Bank account details" msgid "Bank account {iban} at {bank}" msgstr "Datos de la cuenta bancaria" -#: pretix/plugins/stripe/payment.py:1204 +#: pretix/plugins/stripe/payment.py:1543 #, fuzzy #| msgid "iDEAL via Stripe" msgid "EPS via Stripe" msgstr "iDEAL a través de Stripe" -#: pretix/plugins/stripe/payment.py:1276 +#: pretix/plugins/stripe/payment.py:1575 #, fuzzy #| msgid "Alipay via Stripe" msgid "Multibanco via Stripe" msgstr "Alipay vía Stripe" -#: pretix/plugins/stripe/payment.py:1323 +#: pretix/plugins/stripe/payment.py:1624 #, fuzzy #| msgid "Alipay via Stripe" msgid "Przelewy24 via Stripe" msgstr "Alipay vía Stripe" -#: pretix/plugins/stripe/payment.py:1379 +#: pretix/plugins/stripe/payment.py:1628 +msgid "" +"Przelewy24 is an online payment method available to customers of Polish " +"banks. Please keep your online banking account and login information " +"available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1662 #, fuzzy #| msgid "Payment via Stripe" msgid "WeChat Pay via Stripe" msgstr "Pago a través de Stripe" -#: pretix/plugins/stripe/signals.py:65 +#: pretix/plugins/stripe/payment.py:1667 +msgid "" +"This payment method is available to users of the Chinese app WeChat. Please " +"keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1690 +#, fuzzy +#| msgid "Payment via Stripe" +msgid "PayPal via Stripe" +msgstr "Pago a través de Stripe" + +#: pretix/plugins/stripe/payment.py:1697 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "Swish via Stripe" +msgstr "iDEAL a través de Stripe" + +#: pretix/plugins/stripe/payment.py:1702 +msgid "" +"This payment method is available to users of the Swedish apps Swish and " +"BankID. Please have your app ready." +msgstr "" + +#: pretix/plugins/stripe/signals.py:70 msgid "Charge succeeded." msgstr "La carga tuvo éxito." -#: pretix/plugins/stripe/signals.py:66 +#: pretix/plugins/stripe/signals.py:71 msgid "Charge refunded." msgstr "Cargo reembolsado." -#: pretix/plugins/stripe/signals.py:67 +#: pretix/plugins/stripe/signals.py:72 msgid "Charge updated." msgstr "Carga actualizada." -#: pretix/plugins/stripe/signals.py:68 +#: pretix/plugins/stripe/signals.py:73 msgid "Charge pending" msgstr "Cargo pendiente" -#: pretix/plugins/stripe/signals.py:69 +#: pretix/plugins/stripe/signals.py:74 msgid "Payment authorized." msgstr "Pago autorizado." -#: pretix/plugins/stripe/signals.py:70 +#: pretix/plugins/stripe/signals.py:75 msgid "Payment authorization canceled." msgstr "Autorización de pago cancelada." -#: pretix/plugins/stripe/signals.py:71 +#: pretix/plugins/stripe/signals.py:76 msgid "Payment authorization failed." msgstr "Falló la autorización de pago." -#: pretix/plugins/stripe/signals.py:77 +#: pretix/plugins/stripe/signals.py:82 msgid "Charge failed. Reason: {}" msgstr "La carga falló. Motivo: {}" -#: pretix/plugins/stripe/signals.py:79 +#: pretix/plugins/stripe/signals.py:84 msgid "Dispute created. Reason: {}" msgstr "Disputa creada. Motivo: {}" -#: pretix/plugins/stripe/signals.py:81 +#: pretix/plugins/stripe/signals.py:86 msgid "Dispute updated. Reason: {}" msgstr "Conflicto actualizado. Motivo: {}" -#: pretix/plugins/stripe/signals.py:83 +#: pretix/plugins/stripe/signals.py:88 msgid "Dispute closed. Status: {}" msgstr "Disputa cerrada. Estado: {}" -#: pretix/plugins/stripe/signals.py:86 +#: pretix/plugins/stripe/signals.py:91 msgid "Stripe reported an event: {}" msgstr "Stripe reportó un evento: {}" -#: pretix/plugins/stripe/signals.py:97 +#: pretix/plugins/stripe/signals.py:102 msgid "Stripe Connect: Client ID" msgstr "Conexiones a Stripe: ID de cliente" -#: pretix/plugins/stripe/signals.py:104 +#: pretix/plugins/stripe/signals.py:109 msgid "Stripe Connect: Secret key" msgstr "Conexiones a Stripe: Clave secreta" -#: pretix/plugins/stripe/signals.py:111 +#: pretix/plugins/stripe/signals.py:116 msgid "Stripe Connect: Publishable key" msgstr "Conexiones a Stripe: Clave publicable" -#: pretix/plugins/stripe/signals.py:118 +#: pretix/plugins/stripe/signals.py:123 msgid "Stripe Connect: Secret key (test)" msgstr "Conexiones a Stripe: Clave secreta (test)" -#: pretix/plugins/stripe/signals.py:125 +#: pretix/plugins/stripe/signals.py:130 msgid "Stripe Connect: Publishable key (test)" msgstr "Conexiones a Stripe: Clave publicable (test)" -#: pretix/plugins/stripe/signals.py:170 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:6 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:9 +#: pretix/plugins/stripe/signals.py:156 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:3 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:9 #, fuzzy #| msgid "Stripe Checkout" msgid "Stripe Connect" msgstr "Pago con Stripe" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"La transacción Stripe %(charge)s ha tenido éxito, " -"pero la orden %(order)s ya ha sido pagada por otros medios. Por favor, " -"vuelva a comprobar y devolver el dinero a través de la interfaz de Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"La transacción Stripe %(charge)s ha tenido éxito, " -"pero el pedido %(order)s ha caducado y el producto se ha agotado mientras " -"tanto. Por lo tanto, el pago no pudo aceptarse. Por favor, póngase en " -"contacto con el usuario y devuélvale el dinero a través de la interfaz de " -"Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"Stripe informó que la transacción %(charge)s ha sido " -"reembolsada. ¿Desea reembolsar la marca de la orden correspondiente " -"(%(order)s) como reembolsado?" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "El monto total será retirado de su tarjeta de crédito." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "Tipo de tarjeta" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "El monto total será retirado de su tarjeta de crédito." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Titular de la cuenta" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -22433,17 +22655,17 @@ msgstr "" "servicios de pago para completar su pago. A continuación, se le redirigirá " "de nuevo aquí para obtener sus entradas." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "Para pagar con tarjeta de crédito, active JavaScript." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." @@ -22451,15 +22673,15 @@ msgstr "" "Ya ha introducido un número de tarjeta que utilizaremos para cargar el " "importe del pago." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "Usar una tarjeta diferente" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "Ó" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -22467,26 +22689,80 @@ msgstr "" "Su pago será procesado por Stripe, Inc. Los datos de su tarjeta de crédito " "serán transmitidos directamente a Stripe y nunca tocan nuestros servidores." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "Para pagar con tarjeta de crédito, active JavaScript." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"Ya ha introducido un número de tarjeta que utilizaremos para cargar el " +"importe del pago." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "Usar una tarjeta diferente" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "ID de carga" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "Nombre del pagador" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "Nombre del pagador" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "Mensaje de error" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to regenerate your emergency codes?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "¿Realmente quieres regenerar tus códigos de emergencia?" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Connect" +msgid "Disconnect" +msgstr "Conectar" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -22494,7 +22770,7 @@ msgstr "" "Estamos esperando una respuesta del proveedor de pagos con respecto a su " "pago. Póngase en contacto con nosotros si esto tarda más de unos días." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 #, fuzzy msgid "" "You need to confirm your payment. Please click the link below to do so or " @@ -22503,68 +22779,72 @@ msgstr "" "Se ha de confirmar el pago. Por favor haz click en el siguiente enlace para " "ello, o inicia un nuevo pago." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 #, fuzzy #| msgid "Cancel payment" msgid "Confirm payment" msgstr "Cancelar el pago" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "La operación de pago no pudo completarse por el siguiente motivo:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Razón desconocida" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Pagar orden" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, fuzzy, python-format #| msgid "Change payment method: %(code)s" msgid "Confirm payment: %(code)s" msgstr "Cambiar método de pago: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "Confirmando tu pago…" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" "Se ha producido un error durante la conexión con Stripe, inténtelo de nuevo." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "Stripe ha devuelto un error: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" "Su cuenta de Stripe está ahora conectada a pretix. A continuación, puede " "modificar los ajustes de forma detallada." -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "Su cuenta de Stripe ha sido desconectada." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -22572,7 +22852,7 @@ msgstr "" "Lo sentimos, hubo un error en el proceso de pago. Por favor, compruebe el " "enlace en sus correos electrónicos para continuar." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -22580,7 +22860,7 @@ msgstr "" "Tuvimos problemas para autorizar el pago con tarjeta. Por favor, inténtelo " "de nuevo y póngase en contacto con nosotros si este problema persiste." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 #, fuzzy #| msgid "" #| "Sorry, there was an error in the payment process. Please check the link " @@ -24765,6 +25045,39 @@ msgstr "Acceso de escritura" msgid "Kosovo" msgstr "" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "La transacción Stripe %(charge)s ha tenido éxito, " +#~ "pero la orden %(order)s ya ha sido pagada por otros medios. Por favor, " +#~ "vuelva a comprobar y devolver el dinero a través de la interfaz de Stripe." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "La transacción Stripe %(charge)s ha tenido éxito, " +#~ "pero el pedido %(order)s ha caducado y el producto se ha agotado mientras " +#~ "tanto. Por lo tanto, el pago no pudo aceptarse. Por favor, póngase en " +#~ "contacto con el usuario y devuélvale el dinero a través de la interfaz de " +#~ "Stripe." + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "Stripe informó que la transacción %(charge)s ha " +#~ "sido reembolsada. ¿Desea reembolsar la marca de la orden correspondiente " +#~ "(%(order)s) como reembolsado?" + #, fuzzy #~| msgid "Optional. No products will be sold before this date." #~ msgid "Only include orders issued on or before this date." diff --git a/src/pretix/locale/es/LC_MESSAGES/djangojs.po b/src/pretix/locale/es/LC_MESSAGES/djangojs.po index 4be2d40ae..e2b27c590 100644 --- a/src/pretix/locale/es/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/es/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-04-27 20:00+0000\n" "Last-Translator: Gonzalo Gabriel Perez \n" "Language-Team: Spanish \n" "Language-Team: Finnish " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Tyhjä, jos tämä tuote ei ole pääsylippu" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Yrityksen nimi" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Valitse maa" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "luotu" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "vahvistettu" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "peruutettu" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "epäonnistunut" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "hyvitetty" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Maksutiedot" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Tilauksesi %(code)s maksu vastaanotettu" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "luotu" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "valmis" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "epäonnistunut" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "peruutettu" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Järjestäjä" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Asiakas" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Ulkoinen" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "Hyvityksen syy" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Palvelumaksu" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Peruutusmaksu" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Muut maksut" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Lahjakortti" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Arvo" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "Korin ID (esim. istuntoavain)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" @@ -3551,7 +3551,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "Myyjän maa" @@ -4120,20 +4120,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "" -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4141,45 +4151,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4188,94 +4198,94 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4284,11 +4294,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4296,87 +4306,87 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "" -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "" -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "" -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "" -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "" -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" @@ -10371,7 +10381,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10468,7 +10478,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -10633,10 +10643,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -10795,7 +10804,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -11603,7 +11612,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -15903,7 +15912,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -17076,7 +17085,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -17383,19 +17392,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -17958,7 +17968,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -17976,16 +17986,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -18059,8 +18069,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -18162,7 +18172,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18179,17 +18189,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -18582,12 +18592,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -18597,34 +18607,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -18632,20 +18642,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -18656,73 +18666,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -18730,23 +18797,64 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Kuvaus" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" -msgstr "" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Phone numbers" +msgid "Account number" +msgstr "Puhelinnumerot" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to mark this payment as complete?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Haluatko varmasti merkitä tämän maksun valmiiksi?" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/fi/LC_MESSAGES/djangojs.po b/src/pretix/locale/fi/LC_MESSAGES/djangojs.po index c4cf3b097..c7bdc893a 100644 --- a/src/pretix/locale/fi/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/fi/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2021-01-20 16:10+0000\n" "Last-Translator: Jaakko Rinta-Filppula \n" "Language-Team: Finnish \n" "Language-Team: French " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Vide, si ce produit n'est pas un billet d'entrée" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Nom de la société" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Sélectionnez le pays" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 #, fuzzy #| msgid "User created." msgctxt "payment_state" msgid "created" msgstr "Utilisateur créé." -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 #, fuzzy #| msgid "pending" msgctxt "payment_state" msgid "pending" msgstr "en attente" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 #, fuzzy #| msgctxt "checkoutflow" #| msgid "Order confirmed" @@ -3599,173 +3599,173 @@ msgctxt "payment_state" msgid "confirmed" msgstr "Commande validée" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 #, fuzzy #| msgid "canceled" msgctxt "payment_state" msgid "canceled" msgstr "annulé" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 #, fuzzy #| msgid "refunded" msgctxt "payment_state" msgid "refunded" msgstr "remboursé" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Informations de paiement" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, fuzzy, python-format #| msgid "Order canceled: %(code)s" msgid "Event registration confirmed: %(code)s" msgstr "Commande annulée: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Paiement reçu pour votre commande: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 #, fuzzy #| msgid "User created." msgctxt "refund_state" msgid "created" msgstr "Utilisateur créé." -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 #, fuzzy #| msgid "Bank transfer" msgctxt "refund_state" msgid "in transit" msgstr "Virement bancaire" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 #, fuzzy #| msgid "canceled" msgctxt "refund_state" msgid "canceled" msgstr "annulé" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 #, fuzzy #| msgid "Organizer" msgctxt "refund_source" msgid "Organizer" msgstr "Organisateur" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 #, fuzzy #| msgid "Any customer" msgctxt "refund_source" msgid "Customer" msgstr "Tout client" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Refund order" msgid "Refund reason" msgstr "Demande de remboursement" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Frais de paiement" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Frais d'expédition" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Frais de service" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 #, fuzzy #| msgid "Cancellation" msgid "Cancellation fee" msgstr "Annulation" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Autres frais" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Carte-cadeau" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Valeur" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Position de l'ordre" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, fuzzy, python-format #| msgid "Your order: %(code)s" msgid "Your event registration: %(code)s" msgstr "Votre commande: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "ID du panier (par ex. clé de session)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Position du panier" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Positions du panier" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Uniquement pour les clients professionnels dans l'UE." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "Cette référence sera imprimée sur votre facture pour votre commodité." @@ -3941,7 +3941,7 @@ msgstr "" "n'est donnée pour le calcul correct des taxes. À UTILISER À VOS RISQUES ET " "PÉRILS." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "Pays commerçant" @@ -4632,22 +4632,36 @@ msgstr "Vous devez sélectionner une date." msgid "Ambiguous option selected." msgstr "Option non valide sélectionnée." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "Appliquer" + +#: pretix/base/payment.py:54 +#, fuzzy +#| msgid "Android (Google Play)" +msgctxt "payment" +msgid "Google Pay" +msgstr "Android (Google Play)" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Activer le mode de paiement" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Les utilisateurs ne pourront plus choisir ce fournisseur de paiement après " "la date indiquée." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Texte sur les factures" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4659,11 +4673,11 @@ msgstr "" "générée avant le paiement de la commande. Si la facture est générée plus " "tard, elle affichera un texte indiquant qu'elle a déjà été payée." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Total minimum de commande" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4674,11 +4688,11 @@ msgstr "" "peut être calculé sans tenir compte des frais imposés par ce mode de " "paiement." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Total maximum de commande" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4689,23 +4703,23 @@ msgstr "" "peut être calculé sans tenir compte des frais imposés par ce mode de " "paiement." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Frais supplémentaires" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Valeur absolue" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Calculez les frais à partir de la valeur totale incluant les frais." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4719,56 +4733,56 @@ msgstr "" "détaillées sur ce que cela fait. N'oubliez pas de définir les frais " "corrects ci-dessus !" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 #, fuzzy #| msgid "The settings of a payment provider have been changed." msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "Les options d'un prestataire de paiement ont été modifiées." -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 #, fuzzy #| msgid "Enable payment method" msgid "Hide payment method" msgstr "Activer le mode de paiement" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 #, fuzzy #| msgid "Enable payment method" msgid "Link to enable payment method" msgstr "Activer le mode de paiement" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "Le paiement de cette facture a déjà été reçu." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4776,15 +4790,15 @@ msgstr "" "Aucun paiement n'est exigé car cette commande ne comprend que des produits " "gratuits." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Gratuitement" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Guichet" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 #, fuzzy @@ -4792,33 +4806,33 @@ msgstr "Guichet" msgid "Manual payment" msgstr "Paiements non valables" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 #, fuzzy #| msgid "Payment method" msgid "Payment method name" msgstr "Mode de paiement" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4827,11 +4841,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4839,108 +4853,108 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 #, fuzzy #| msgid "Settings" msgid "Offsetting" msgstr "Réglages" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 #, fuzzy #| msgid "Your changes could not be saved." msgid "You entered an order that could not be found." msgstr "Vos modifications n'ont pas pu être sauvegardées." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 #, fuzzy #| msgid "The payment method for this order cannot be changed." msgid "This gift card does not support this currency." msgstr "Le mode de paiement de cet ordre ne peut pas être modifié." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 #, fuzzy #| msgid "This event can not be deleted." msgid "This gift card can only be used in test mode." msgstr "Cet événement ne peut pas être supprimé." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 #, fuzzy #| msgid "This feature is not enabled." msgid "This gift card is no longer valid." msgstr "Cette fonction n'est pas activée." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 #, fuzzy #| msgid "The selected configuration has been deleted." msgid "All credit on this gift card has been used." msgstr "La configuration sélectionnée a été supprimée." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 #, fuzzy #| msgid "This identifier is already used for a different question." msgid "This gift card is already used for your payment." msgstr "Cet identificateur est déjà utilisé pour une autre question." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 #, fuzzy #| msgid "Your cart has been updated." msgid "Your gift card has been applied." msgstr "Votre panier a été mis à jour." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 #, fuzzy #| msgid "This feature is not enabled." msgid "This gift card is not known." msgstr "Cette fonction n'est pas activée." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 #, fuzzy #| msgctxt "subevent" #| msgid "This voucher is not valid for this event date." msgid "This gift card is not accepted by this event organizer." msgstr "Ce bon n'est pas valable pour cette date." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "There was an error sending the mail. Please try again later." msgid "This gift card was used in the meantime. Please try again." @@ -12450,7 +12464,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -12558,7 +12572,7 @@ msgstr "Définir un nouveau mot de passe" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Sauvegarder" @@ -12758,10 +12772,9 @@ msgstr "Type de carte" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Numéro de carte" @@ -12946,7 +12959,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -13949,7 +13962,7 @@ msgstr "Plugins installés" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Vos modifications ont été sauvegardées." @@ -19197,7 +19210,7 @@ msgstr "La nouvelle liste d'enregistrement a été créée." #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -20664,7 +20677,7 @@ msgstr "Badges" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -21051,19 +21064,20 @@ msgstr "Veuillez entrer votre nom." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Titulaire du compte" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "Banque" @@ -21728,7 +21742,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "PayPal" @@ -21748,16 +21762,16 @@ msgstr "" msgid "PayPal account" msgstr "Montant total" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "{text}" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "Cliquez ici pour un tutoriel sur la façon d'obtenir les clés requises" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "Endpoint" @@ -21850,8 +21864,8 @@ msgstr "" "PayPal n' a pas encore approuvé le paiement. Nous vous informerons dès que " "le paiement sera effectué." -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "Il y a eu une erreur lors de l'envoi du mail de confirmation." @@ -21984,7 +21998,7 @@ msgid "Last update" msgstr "Dernière mise à jour" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "Valeur totale" @@ -22005,19 +22019,19 @@ msgstr "" "nous contacter, si cela prend plus de quelques heures." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "Le processus de paiement s'est lancé dans une nouvelle fenêtre." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" "La fenêtre de saisie de vos données de paiement n' a pas été ouverte ou a " "été fermée" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "Cliquez ici pour ouvrir la fenêtre." @@ -22487,12 +22501,14 @@ msgstr "" "les premières commandes !" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "Stripe" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" "Ce plugin vous permet de recevoir les paiements par carte de crédit via " "Stripe" @@ -22504,43 +22520,48 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 #, fuzzy msgid "Stripe Connect: App fee (max)" msgstr "Clé publiable" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 #, fuzzy msgid "Stripe Connect: App fee (min)" msgstr "Clé publiable" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "Pour accepter les paiements via Stripe, vous aurez besoin d'un compte chez " "Stripe. En cliquant sur le bouton suivant, vous pouvez soit créer un nouveau " "compte Stripe, soit connecter pretix à un compte existant." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 #, fuzzy #| msgid "Connect with pretixdesk" msgid "Connect with Stripe" msgstr "Connectez-vous avec pretixdesk" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 #, fuzzy #| msgid "Bancontact via Stripe" msgid "Disconnect from Stripe" msgstr "Bancontact via Stripe" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -22552,22 +22573,22 @@ msgstr "" "lorsque les frais sont remboursés en externe et pour traiter les modes de " "paiement asynchrones comme SOFORT." -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 #, fuzzy #| msgid "Needs to be enabled in your Stripe account first." msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "Doit d'abord être activé dans votre compte Stripe." -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -22578,77 +22599,134 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 #, fuzzy #| msgid "Stripe Checkout" msgid "Stripe account" msgstr "Stripe Checkout" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 #, fuzzy #| msgid "Question" msgctxt "stripe" msgid "Testing" msgstr "Question" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Clé publiable" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Clé secrète" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Paiements par carte de crédit" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "Doit d'abord être activé dans votre compte Stripe." -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "iDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "Alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "SOFORT" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -22656,23 +22734,64 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Description" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, " -#| "but the order %(order)s is expired and the product was sold out in the " -#| "meantime. Therefore, the payment could not be accepted. Please contact " -#| "the user and refund the money via Stripe's interface." -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"La transaction Stripe %(charge)s a réussi, mais la " -"commande %(order)s a expirée et le produit a été épuisé entre-temps. Le " -"paiement n' a donc pas pu être accepté. Veuillez contacter l'utilisateur et " -"rembourser l'argent via l'interface de Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"La transaction Stripe %(charge)s a réussi, mais la " -"commande %(order)s a expirée et le produit a été épuisé entre-temps. Le " -"paiement n' a donc pas pu être accepté. Veuillez contacter l'utilisateur et " -"rembourser l'argent via l'interface de Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"Stripe a signalé que la transaction %(charge)s a été " -"remboursée. Voulez-vous marquer la commande correspondante (%(order)s) comme " -"remboursée?" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "Le montant total sera prélevé sur votre carte de crédit." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "Type de carte" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "Le montant total sera prélevé sur votre carte de crédit." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Titulaire du compte" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -22975,17 +23192,17 @@ msgstr "" "prestataire de services de paiement pour effectuer votre paiement. Vous " "serez ensuite redirigé ici pour récupérer vos billets." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "Pour un paiement par carte de crédit, veuillez activer JavaScript." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." @@ -22993,15 +23210,15 @@ msgstr "" "Vous avez déjà entré un numéro de carte que nous utiliserons pour débiter le " "montant du paiement." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "Utiliser une autre carte" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -23010,26 +23227,80 @@ msgstr "" "seront transmises directement à Stripe et ne concerneront jamais nos " "serveurs." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "Pour un paiement par carte de crédit, veuillez activer JavaScript." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"Vous avez déjà entré un numéro de carte que nous utiliserons pour débiter le " +"montant du paiement." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "Utiliser une autre carte" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "Numéro d'identification" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "Nom du payeur" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "Nom du payeur" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "Message d'erreur" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to regenerate your emergency codes?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Voulez-vous vraiment régénérer vos codes d'urgence ?" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Bancontact via Stripe" +msgid "Disconnect" +msgstr "Bancontact via Stripe" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -23037,77 +23308,77 @@ msgstr "" "Nous attendons une réponse du fournisseur de paiement concernant votre " "paiement. Veuillez nous contacter si cela prend plus de quelques jours." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 #, fuzzy #| msgid "Invalid payments" msgid "Confirm payment" msgstr "Paiements non valables" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "La transaction n'a pas pu être exécutée pour la raison suivante:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Raison inconnue" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Ordre de paiement" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, fuzzy, python-format #| msgid "Change payment method: %(code)s" msgid "Confirm payment: %(code)s" msgstr "Modifier le mode de paiement: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 #, fuzzy #| msgid "An internal error occurred, please try again." msgid "An error occurred during connecting with Stripe, please try again." msgstr "Une erreur interne s'est produite, veuillez réessayer." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 #, fuzzy #| msgid "Stripe reported an error: %s" msgid "Stripe returned an error: {}" msgstr "Stripe a signalé une erreur: %s" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 #, fuzzy #| msgid "Your cart has been updated." msgid "Your Stripe account has been disconnected." msgstr "Votre panier a été mis à jour." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -23115,7 +23386,7 @@ msgstr "" "Désolé, il y a eu une erreur dans le processus de paiement. Veuillez " "vérifier le lien dans vos emails pour continuer." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -23123,7 +23394,7 @@ msgstr "" "Nous avons eu des difficultés à autoriser le paiement par carte. Veuillez " "réessayer et nous contacter si ce problème persiste." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 #, fuzzy #| msgid "" #| "Sorry, there was an error in the payment process. Please check the link " @@ -25286,6 +25557,44 @@ msgstr "Accès en écriture" msgid "Kosovo" msgstr "" +#, fuzzy, python-format +#~| msgid "" +#~| "The Stripe transaction %(charge)s has succeeded, " +#~| "but the order %(order)s is expired and the product was sold out in the " +#~| "meantime. Therefore, the payment could not be accepted. Please contact " +#~| "the user and refund the money via Stripe's interface." +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "La transaction Stripe %(charge)s a réussi, mais la " +#~ "commande %(order)s a expirée et le produit a été épuisé entre-temps. Le " +#~ "paiement n' a donc pas pu être accepté. Veuillez contacter l'utilisateur " +#~ "et rembourser l'argent via l'interface de Stripe." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "La transaction Stripe %(charge)s a réussi, mais la " +#~ "commande %(order)s a expirée et le produit a été épuisé entre-temps. Le " +#~ "paiement n' a donc pas pu être accepté. Veuillez contacter l'utilisateur " +#~ "et rembourser l'argent via l'interface de Stripe." + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "Stripe a signalé que la transaction %(charge)s a " +#~ "été remboursée. Voulez-vous marquer la commande correspondante " +#~ "(%(order)s) comme remboursée?" + #, fuzzy #~| msgid "Optional. No products will be sold before this date." #~ msgid "Only include orders issued on or before this date." diff --git a/src/pretix/locale/fr/LC_MESSAGES/djangojs.po b/src/pretix/locale/fr/LC_MESSAGES/djangojs.po index e86241d27..90c9c7723 100644 --- a/src/pretix/locale/fr/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/fr/LC_MESSAGES/djangojs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: French\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-09-15 17:00+0000\n" "Last-Translator: Martin Gross \n" "Language-Team: French event " #~ "ticketing powered by pretix" #~ msgstr "" -#~ "Billetterie en ligne propulsée par Pretix" +#~ "Billetterie en ligne propulsée par Pretix" #~ msgid "" #~ "Your request has been queued on the server and will now be processed. If " diff --git a/src/pretix/locale/hu/LC_MESSAGES/django.po b/src/pretix/locale/hu/LC_MESSAGES/django.po index d5140aa09..caf6c4436 100644 --- a/src/pretix/locale/hu/LC_MESSAGES/django.po +++ b/src/pretix/locale/hu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2020-01-26 04:00+0000\n" "Last-Translator: András Veres-Szentkirályi \n" "Language-Team: Hungarian " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" @@ -3549,7 +3549,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "" @@ -4124,20 +4124,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "Nincs dátum kiválasztva." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4145,45 +4155,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4192,94 +4202,94 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4288,11 +4298,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4300,87 +4310,87 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "" -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "" -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "" -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "" -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "" -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" @@ -10351,7 +10361,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10445,7 +10455,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -10614,10 +10624,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -10778,7 +10787,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -11578,7 +11587,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -15880,7 +15889,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -17059,7 +17068,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -17366,19 +17375,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -17947,7 +17957,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -17965,16 +17975,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -18048,8 +18058,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -18153,7 +18163,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18170,17 +18180,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -18575,12 +18585,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -18590,34 +18600,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -18625,20 +18635,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -18649,73 +18659,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -18723,23 +18790,62 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +msgid "Destination" +msgstr "" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" -msgstr "" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Count" +msgid "Account number" +msgstr "Számítás" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/hu/LC_MESSAGES/djangojs.po b/src/pretix/locale/hu/LC_MESSAGES/djangojs.po index 2b9864c7c..f93c41ecb 100644 --- a/src/pretix/locale/hu/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/hu/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-01-24 08:00+0000\n" "Last-Translator: Prokaj Miklós \n" "Language-Team: Hungarian \n" "Language-Team: Italian " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Ragione sociale" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "creato" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "in attesa" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "confermato" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "cancellato" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "fallito" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "rimborsato" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Informazioni sul pagamento" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Pagamento ricevuto per il tuo ordine: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Pending orders" msgid "Refund reason" msgstr "Ordini pendenti" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "Il tuo evento: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "Questo testo verrà riportato nella tua fattura." @@ -3636,7 +3636,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "" @@ -4208,20 +4208,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "" -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4229,45 +4239,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4276,50 +4286,50 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "Nascondi metodo di pagamento" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "Link per abilitare metodo di pagamento" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4327,45 +4337,45 @@ msgstr "" "Il pagamento non è richiesto per questo ordine perchè include solo prodotti " "gratuiti." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "Pagamento manuale" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "Nome del metodo di pagamento" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4374,11 +4384,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4386,57 +4396,57 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "Hai inserito un ordine che non è stato trovato." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "Nella modalità test funzionano solo carte di test." -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "Non puoi pagare con una gift card quando stai comprando una gift card." -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "Questa gift card non supporta questa valuta." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "Questa gift card può essere utilizzata solo in modalità test." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "Questa gift card non è più valida." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "Tutti i crediti di questa gift card sono stati utilizzati." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "Questa gift card è già stata utilizzzta per il tuo pagamento." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." @@ -4444,31 +4454,31 @@ msgstr "" "La tua gift card è stata applicata, ma rimane ancora da pagare {}. Scegli un " "metodo di pagamento." -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "La tua gift card è stata applicata." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "This gift card was used in the meantime. Please try again" msgid "This gift card was used in the meantime. Please try again." @@ -10784,7 +10794,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10878,7 +10888,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Salva" @@ -11057,10 +11067,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -11224,7 +11233,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -12050,7 +12059,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Le tue modifiche sono state salvate." @@ -16433,7 +16442,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "Non abbiamo potuto salvere le tue modifiche. Leggi i dettagli sotto." @@ -17649,7 +17658,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -17960,19 +17969,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -18580,7 +18590,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -18598,16 +18608,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -18685,8 +18695,8 @@ msgstr "" "PayPal non ha ancora approvato il pagamento. Ti informeremo non appena il " "pagamento verrà completato." -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -18798,7 +18808,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18819,18 +18829,18 @@ msgstr "" "contattaci se dovessero passare diversi giorni senza risposta." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "Il processo di pagamento è stato inziato in una nuova finestra." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" "La finestra di inserimento dati di PayPal non è stata aperta o si è chiusa?" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -19250,12 +19260,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -19265,37 +19275,42 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "Per accettare pagamenti con Stripe, hai bisogno di un account Stripe. " "Cliccando sul bottone, potrai creare un nuovo conto Stripe o connetterne uno " "esistente." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -19303,20 +19318,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -19327,73 +19342,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Pagamenti con carta di credito" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -19401,23 +19473,64 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Descrizione" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -"La transazione Stripe %(charge)s è andata a buon " -"fine, ma l'ordine %(order)s è scaduto e il prodotto è stato venduto nel " -"frattempo. Il pagamento non può essere accettato. Contatta l'utente ed " -"effettua un rimborso tramite l'interfaccia di Stripe." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "" +#| "The total amount listed above will be withdrawn from your PayPal account " +#| "after the confirmation of your purchase." +msgid "The total amount will be withdrawn from your bank account." msgstr "" +"Il totale verrà addebitato dal tuo account PayPal dopo la conferma " +"dell'acquisto." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" -msgstr "" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Phone number" +msgid "Account number" +msgstr "Numero di telefono" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "Per il pagamento con carta ti preghiamo di attivare JavaScript." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." @@ -19700,15 +19907,15 @@ msgstr "" "Hai già inserito un numero di carta che verrà usato per processare il " "pagamento." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -19716,26 +19923,77 @@ msgstr "" "Il tuo pagamento verrà processato da Stripe, Inc. I dati della tua carta " "verranno trasmessi direttamente a Stripe e non passeranno dai nostri servers." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "Per il pagamento con carta ti preghiamo di attivare JavaScript." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." msgstr "" +"Hai già inserito un numero di carta che verrà usato per processare il " +"pagamento." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "" +#| "Do you really want to cancel this payment? You cannot revert this action." +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Vuoi veramente annullare il pagamento? L'operazione non è reversibile." + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -19743,7 +20001,7 @@ msgstr "" "Siamo in attesa di risposta dal provider riguardo il tuo pagamento. " "Contattaci se dovessero passare alcuni giorni senza risposta." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." @@ -19751,62 +20009,62 @@ msgstr "" "Devi confermare il tuo pagamento. Clicca il link sottostante o effettua un " "nuovo pagamento." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "Conferma pagamento" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "Il pagamento non può essere completato per i seguenti motivi:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "Conferma pagamento: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "Stiamo confermando il tuo pagamento..." -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -19814,7 +20072,7 @@ msgstr "" "Spiacenti, c'è stato un problema durante il pagamento. Segui il link " "nell'email per continuare." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -19822,7 +20080,7 @@ msgstr "" "C'è stato un problema durante l'autorizzazione della tua carta. Prova di " "nuovo e nel caso il problema persista, contattaci." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "Spiacenti, c'è stato un problema durante il pagamento." @@ -21762,6 +22020,18 @@ msgstr "" msgid "Kosovo" msgstr "" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "La transazione Stripe %(charge)s è andata a buon " +#~ "fine, ma l'ordine %(order)s è scaduto e il prodotto è stato venduto nel " +#~ "frattempo. Il pagamento non può essere accettato. Contatta l'utente ed " +#~ "effettua un rimborso tramite l'interfaccia di Stripe." + #, fuzzy #~| msgid "Order date:" #~ msgid "Order status:" diff --git a/src/pretix/locale/it/LC_MESSAGES/djangojs.po b/src/pretix/locale/it/LC_MESSAGES/djangojs.po index 54a4d4204..67e2a429b 100644 --- a/src/pretix/locale/it/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/it/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-06-12 20:00+0000\n" "Last-Translator: Frank \n" "Language-Team: Italian \n" "Language-Team: Latvian " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Tukšs, ja šis produkts nav ieejas biļete" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Izvēlieties valsti" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "izveidots" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "gaida" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "apstiprināts" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "atcelts" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "neizdevās" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "atmaksāts" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Informācija par maksājumu" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "Pasākuma reģistrācija apstiprināta: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Maksājums par pasūtījumu saņemts: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "aizsākts ārēji" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "izveidots" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "tranzītā" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "izdarīts" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "neizdevās" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "atcelts" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Organizators" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Klients" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Ārējs" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Pending amount" msgid "Refund reason" msgstr "Neapmaksātā summa" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Maksājuma maksa" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Piegādes maksa" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Apkalpošanas maksa" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Atcelšanas maksa" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Citas maksas" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Dāvanu karte" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Pasūtījuma pozīcija" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "Jūsu pasākuma reģistrācija: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "Groza ID (piemēram, sesijas atslēga)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Groza pozīcija" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Groza pozīcijas" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Tikai korporatīvajiem klientiem ES." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "Šī atsauce jūsu ērtībām tiks uzdrukāta uz jūsu rēķina." @@ -3783,7 +3783,7 @@ msgstr "" "pēc konsultēšanās ar nodokļu konsultantu. Par pareizu nodokļu aprēķinu " "netiek dota garantija. LIETOT UZŅEMOTIES RISKU UZ SEVI." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "Tirgotājvalsts" @@ -4429,22 +4429,32 @@ msgstr "Jums jāizvēlas konkrēta sēdvieta." msgid "Ambiguous option selected." msgstr "Atlasīta nederīga opcija." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Iespējot maksājuma veidu" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Lietotāji nevarēs izvēlēties šo norēķinu pakalpojumu sniedzēju pēc noteiktā " "datuma." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Teksts rēķinos" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4456,11 +4466,11 @@ msgstr "" "pasūtījuma apmaksas. Ja rēķins tiek ģenerēts vēlāk, tas parādīs tekstu, kurā " "norādīts, ka tas jau ir samaksāts." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Minimālā pasūtījumu kopsumma" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4470,11 +4480,11 @@ msgstr "" "pārsniedz norādīto vērtību. Šim nolūkam kopējo pasūtījumu var aprēķināt, " "neņemot vērā maksas, kuras uzliek šī maksājuma metode." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Maksimālā pasūtījumu kopsumma" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4484,23 +4494,23 @@ msgstr "" "norādīto vērtību vai mazāka par to. Šim nolūkam pasūtījuma kopsummu var " "aprēķināt, neņemot vērā maksas, kuras uzliek šī maksājuma metode." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Papildu maksa" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Absolūtā vērtība" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "Procenti no pasūtījuma kopsummas." -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Aprēķiniet maksu no kopējās vērtības, kas jau iekļauj maksu." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4514,11 +4524,11 @@ msgstr "" "informāciju par to, ko tas dara. \n" "Neaizmirstiet augstāk iestatīt pareizo maksu!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "Ierobežot uz konkrētām valstīm" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4528,43 +4538,43 @@ msgstr "" "izvēlētajās valstīs. Ja neizvēlaties nevienu valsti, ir atļautas visas " "valstis. Šis ir iespējots tikai tad, ja ir nepieciešama rēķina adrese." -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 #, fuzzy #| msgid "Enable payment method" msgid "Hide payment method" msgstr "Iespējot maksājuma veidu" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 #, fuzzy #| msgid "Enable payment method" msgid "Link to enable payment method" msgstr "Iespējot maksājuma veidu" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "Maksājums par šo rēķinu jau ir saņemts." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "Šis maksājumu nodrošinātājs neatbalsta automātisko atmaksu." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4572,35 +4582,35 @@ msgstr "" "Maksājums nav nepieciešams, jo šajā pasūtījumā ietilpst tikai tie produkti, " "kas ir bez maksas." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Bez maksas" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Kase" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "Maksājuma procesa apraksts pirkuma veikšanas laikā" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4609,11 +4619,11 @@ msgstr "" "maksājuma veidu. Tam vajadzētu sniegt īsu paskaidrojumu par šo maksājuma " "veidu." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "Maksājuma procesa apraksts pasūtījuma apstiprināšanas e-pastā" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, fuzzy, python-brace-format #| msgid "" #| "This text will be included for the {payment_info} placeholder in order " @@ -4630,11 +4640,11 @@ msgstr "" "e-pastā. Tam vajadzētu norādīt lietotājam, kā veikt maksājumu. Jūs varat " "izmantot vietturus {order}, {total}, {currency} un {total_with_currency}" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "Maksājuma procesa apraksts par neapstiprinātajiem pasūtījumiem" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, fuzzy, python-brace-format #| msgid "" #| "This text will be shown on the order confirmation page for pending " @@ -4651,59 +4661,59 @@ msgstr "" "varat izmantot vietturus {order}, {total}, {currency} un " "{total_with_currency}" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "Neitralizējošs" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "Līdzsvarots pēc pasūtījumiem: %s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "Pārbaudes režīmā, darbosies tikai testa kartes." -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "Pērkot dāvanu karti, nevar norēķināties ar dāvanu kartēm." -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "Šī dāvanu karte neatbalsta šo valūtu." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "Šo dāvanu karti var izmantot tikai testa režīmā." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "Pārbaudes režīmā var izmantot tikai testa dāvanu kartes." -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 #, fuzzy #| msgid "This gift card is not known." msgid "This gift card is no longer valid." msgstr "Šī dāvanu karte nav zināma." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "Viss dāvanu kartes vērtība ir izmantota." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "Šī dāvanu karte jau tiek izmantota jūsu maksājumam. " -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." @@ -4711,11 +4721,11 @@ msgstr "" "Jūsu dāvanu karte ir piemērota, taču {} joprojām ir jāmaksā atlikusī summa. " "Lūdzu, atlasiet maksājuma veidu." -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "Jūsu dāvanu karte ir piemērota." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." @@ -4723,11 +4733,11 @@ msgstr "" "Dāvanu kartes vietā ievadījāt kuponu. Kuponus var ievadīt tikai veikala " "pirmajā lapā zem preces izvēles." -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "Šī dāvanu karte nav zināma." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." @@ -4735,11 +4745,11 @@ msgstr "" "Šo dāvanu karti nevar izmantot, jo tās kods nav unikāls. Lūdzu, sazinieties " "ar šī pasākuma rīkotāju." -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "Šis pasākumu rīkotājs nepieņem šāda veida dāvanu kartes." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "This gift card was used in the meantime. Please try again" msgid "This gift card was used in the meantime. Please try again." @@ -11022,7 +11032,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -11116,7 +11126,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -11295,10 +11305,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Kartes numurs" @@ -11462,7 +11471,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -12268,7 +12277,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Jūsu veiktās izmaiņas ir saglabātas." @@ -16692,7 +16701,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -17904,7 +17913,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -18219,19 +18228,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Konta īpašnieks" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "Banka" @@ -18842,7 +18852,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -18860,17 +18870,17 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr " {text} " -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" "Noklikšķiniet šeit, lai iegūtu apmācību par nepieciešamo atslēgu iegūšanu" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "Galapunkts" @@ -18946,8 +18956,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "Nosūtot apstiprinājuma epastu, radās kļūda." @@ -19051,7 +19061,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "Kopējā vērtība" @@ -19068,17 +19078,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "Apmaksas process ir sācies jaunā logā." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "Jūsu maksājuma datu ievadīšanas logs netika atvērts vai tika aizvērts?" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "Noklikšķiniet šeit, lai atvērtu logu." @@ -19495,12 +19505,14 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "Stripe" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" "Šis spraudnis ļauj saņemt kredītkaršu, debatkaršu maksājumus, izmantojot " "Stripe" @@ -19514,37 +19526,42 @@ msgstr "" "Iesniegtā atslēga \"%(value)s\" neizskatās derīga. Tai jāsākas ar " "\"%(prefix)s\"." -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "Stripe Connect: maksa par lietotni (procentos)" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "Stripe Connect: maksa par lietotni (maks.)" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "Stripe Connect: maksa par lietotni (min)" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "Lai pieņemtu maksājumus, izmantojot Stripe, jums būs nepieciešams konts " "Stripe. Noklikšķinot uz šīs pogas, jūs varat izveidot jaunu Stripe kontu, " "lai pievienotu pretix esošajam." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "Savienot ar Stripe" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "Atvienot no Stripe" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -19556,22 +19573,22 @@ msgstr "" "pasūtījumus, kad maksa tiek atmaksāta ārēji, un apstrādātu asinhronās " "maksājuma metodes kā SOFORT." -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 #, fuzzy #| msgid "Needs to be enabled in your Stripe account first." msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "Vispirms jāiespējo Stripe kontā." -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -19582,21 +19599,21 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "Stripe konts" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "Publiskots" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "Testa režīmā" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." @@ -19604,15 +19621,15 @@ msgstr "" "Ja jūsu pasākums ir testa režīmā, mēs vienmēr izmantosim Stripe testa API, " "neatkarīgi no šī iestatījuma." -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Publicējama atslēga" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Slepenā atslēga" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." @@ -19620,39 +19637,96 @@ msgstr "" "Valsts, kurā reģistrēts jūsu Stripe konts. Parasti tā ir jūsu reģistrācijas " "valsts." -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Maksājumi ar kredītkarti, debatkarti" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "Vispirms jāiespējo Stripe kontā." -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "iDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "Alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "SOFORT" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -19664,23 +19738,64 @@ msgstr "" "apstiprināšana var aizņemt pat14 dienas . Lūdzu, " "aktivizējiet šo maksājuma veidu tikai tad, ja maksājuma termiņš to atļauj." -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Apraksts" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of testa kartēm . Nauda faktiski netiks pārskaitīta." -#: pretix/plugins/stripe/payment.py:407 pretix/plugins/stripe/payment.py:757 -#: pretix/plugins/stripe/payment.py:852 +#: pretix/plugins/stripe/payment.py:575 +msgid "No payment information found." +msgstr "Netika atrasta maksājuma informācija." + +#: pretix/plugins/stripe/payment.py:591 +msgid "Stripe returned an error" +msgstr "Stripe uzrādīja kļūdu" + +#: pretix/plugins/stripe/payment.py:616 +msgid "" +"We had trouble communicating with Stripe. Please try again and contact " +"support if the problem persists." +msgstr "" +"Mums bija grūtības savienoties ar Stripe. Lūdzu, mēģiniet vēlreiz un " +"sazinieties ar atbalsta dienestu, ja problēma joprojām pastāv." + +#: pretix/plugins/stripe/payment.py:689 +msgid "You may need to enable JavaScript for Stripe payments." +msgstr "" +"Jums, iespējams, būs jāiespējo JavaScript, lai veiktu Stripe maksājumus." + +#: pretix/plugins/stripe/payment.py:761 pretix/plugins/stripe/payment.py:863 +#: pretix/plugins/stripe/payment.py:922 #, python-format msgid "Stripe reported an error with your card: %s" msgstr "Stripe ziņoja par kļūdu ar jūsu karti: %s" -#: pretix/plugins/stripe/payment.py:434 pretix/plugins/stripe/payment.py:567 -#: pretix/plugins/stripe/payment.py:770 pretix/plugins/stripe/payment.py:864 -#: pretix/plugins/stripe/payment.py:1436 +#: pretix/plugins/stripe/payment.py:769 pretix/plugins/stripe/payment.py:875 +#: pretix/plugins/stripe/payment.py:936 pretix/plugins/stripe/payment.py:1002 msgid "" "We had trouble communicating with Stripe. Please try again and get in touch " "with us if this problem persists." @@ -19706,7 +19841,7 @@ msgstr "" "Mums bija grūtības saslēgties ar Stripe. Lūdzu, mēģiniet vēlreiz un " "sazinieties ar mums, ja šī problēma joprojām pastāv." -#: pretix/plugins/stripe/payment.py:452 pretix/plugins/stripe/payment.py:804 +#: pretix/plugins/stripe/payment.py:801 msgid "" "Your payment is pending completion. We will inform you as soon as the " "payment completed." @@ -19714,251 +19849,334 @@ msgstr "" "Jūsu maksājums ir procesā. Mēs jūs informēsim, tiklīdz maksājums būs " "pabeigts." -#: pretix/plugins/stripe/payment.py:461 pretix/plugins/stripe/payment.py:818 +#: pretix/plugins/stripe/payment.py:808 +msgid "Your payment failed. Please try again." +msgstr "Jūsu maksājums neizdevās. Lūdzu mēģiniet vēlreiz." + +#: pretix/plugins/stripe/payment.py:814 pretix/plugins/stripe/payment.py:970 #, python-format msgid "Stripe reported an error: %s" msgstr "Stripe ziņoja par kļūdu: %s" -#: pretix/plugins/stripe/payment.py:517 -msgid "No payment information found." -msgstr "Netika atrasta maksājuma informācija." - -#: pretix/plugins/stripe/payment.py:538 +#: pretix/plugins/stripe/payment.py:963 +#, fuzzy +#| msgid "" +#| "Your payment is pending completion. We will inform you as soon as the " +#| "payment completed." msgid "" -"We had trouble communicating with Stripe. Please try again and contact " -"support if the problem persists." +"Your payment is pending completion. We will inform you as soon as the " +"payment is completed." msgstr "" -"Mums bija grūtības savienoties ar Stripe. Lūdzu, mēģiniet vēlreiz un " -"sazinieties ar atbalsta dienestu, ja problēma joprojām pastāv." - -#: pretix/plugins/stripe/payment.py:542 -msgid "Stripe returned an error" -msgstr "Stripe uzrādīja kļūdu" +"Jūsu maksājums ir procesā. Mēs jūs informēsim, tiklīdz maksājums būs " +"pabeigts." -#: pretix/plugins/stripe/payment.py:638 +#: pretix/plugins/stripe/payment.py:1035 msgid "Credit card via Stripe" msgstr "Kredītkarte, debetkarte caur Stripe" -#: pretix/plugins/stripe/payment.py:639 +#: pretix/plugins/stripe/payment.py:1036 msgid "Credit card" msgstr "Kredītkarte, debetkarte" -#: pretix/plugins/stripe/payment.py:666 -msgid "You may need to enable JavaScript for Stripe payments." +#: pretix/plugins/stripe/payment.py:1116 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "SEPA Debit via Stripe" +msgstr "iDEAL caur Stripe" + +#: pretix/plugins/stripe/payment.py:1117 +msgid "SEPA Debit" msgstr "" -"Jums, iespējams, būs jāiespējo JavaScript, lai veiktu Stripe maksājumus." -#: pretix/plugins/stripe/payment.py:812 -msgid "Your payment failed. Please try again." -msgstr "Jūsu maksājums neizdevās. Lūdzu mēģiniet vēlreiz." +#: pretix/plugins/stripe/payment.py:1155 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Name" +msgstr "Konta īpašnieks" -#: pretix/plugins/stripe/payment.py:885 +#: pretix/plugins/stripe/payment.py:1159 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Street" +msgstr "Konta īpašnieks" + +#: pretix/plugins/stripe/payment.py:1168 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Postal Code" +msgstr "Konta īpašnieks" + +#: pretix/plugins/stripe/payment.py:1177 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder City" +msgstr "Konta īpašnieks" + +#: pretix/plugins/stripe/payment.py:1186 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Country" +msgstr "Konta īpašnieks" + +#: pretix/plugins/stripe/payment.py:1224 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Affirm via Stripe" +msgstr "Alipay caur Stripe" + +#: pretix/plugins/stripe/payment.py:1263 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Klarna via Stripe" +msgstr "Alipay caur Stripe" + +#: pretix/plugins/stripe/payment.py:1368 msgid "giropay via Stripe" msgstr "giropay caur Stripe" -#: pretix/plugins/stripe/payment.py:917 pretix/plugins/stripe/payment.py:1084 -#: pretix/plugins/stripe/payment.py:1236 +#: pretix/plugins/stripe/payment.py:1372 +msgid "" +"giropay is an online payment method available to all customers of most " +"German banks, usually after one-time activation. Please keep your online " +"banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1383 pretix/plugins/stripe/payment.py:1451 +#: pretix/plugins/stripe/payment.py:1554 msgid "unknown name" msgstr "nezināms vārds" -#: pretix/plugins/stripe/payment.py:949 pretix/plugins/stripe/payment.py:1001 -#: pretix/plugins/stripe/payment.py:1116 pretix/plugins/stripe/payment.py:1268 -#: pretix/plugins/stripe/payment.py:1371 +#: pretix/plugins/stripe/payment.py:1395 pretix/plugins/stripe/payment.py:1415 +#: pretix/plugins/stripe/payment.py:1459 pretix/plugins/stripe/payment.py:1562 +#: pretix/plugins/stripe/payment.py:1654 #, python-brace-format msgid "Bank account at {bank}" msgstr "" -#: pretix/plugins/stripe/payment.py:957 +#: pretix/plugins/stripe/payment.py:1403 msgid "iDEAL via Stripe" msgstr "iDEAL caur Stripe" -#: pretix/plugins/stripe/payment.py:1009 +#: pretix/plugins/stripe/payment.py:1407 +msgid "" +"iDEAL is an online payment method available to customers of Dutch banks. " +"Please keep your online banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1428 msgid "Alipay via Stripe" msgstr "Alipay caur Stripe" -#: pretix/plugins/stripe/payment.py:1052 +#: pretix/plugins/stripe/payment.py:1433 +msgid "" +"This payment method is available to customers of the Chinese payment system " +"Alipay. Please keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1440 msgid "Bancontact via Stripe" msgstr "Bancontact caur Stripe" -#: pretix/plugins/stripe/payment.py:1124 +#: pretix/plugins/stripe/payment.py:1472 msgid "SOFORT via Stripe" msgstr "SOFORT caur Stripe" -#: pretix/plugins/stripe/payment.py:1141 +#: pretix/plugins/stripe/payment.py:1473 +msgid "SOFORT (instant bank transfer)" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1491 msgid "Country of your bank" msgstr "Jūsu bankas valsts" -#: pretix/plugins/stripe/payment.py:1142 +#: pretix/plugins/stripe/payment.py:1492 msgid "Germany" msgstr "Latvija" -#: pretix/plugins/stripe/payment.py:1143 +#: pretix/plugins/stripe/payment.py:1493 msgid "Austria" msgstr "Austrija" -#: pretix/plugins/stripe/payment.py:1144 +#: pretix/plugins/stripe/payment.py:1494 msgid "Belgium" msgstr "Beļģija" -#: pretix/plugins/stripe/payment.py:1145 +#: pretix/plugins/stripe/payment.py:1495 msgid "Netherlands" msgstr "Nīderlande" -#: pretix/plugins/stripe/payment.py:1146 +#: pretix/plugins/stripe/payment.py:1496 msgid "Spain" msgstr "Spānija" -#: pretix/plugins/stripe/payment.py:1193 +#: pretix/plugins/stripe/payment.py:1532 #, python-brace-format msgid "Bank account {iban} at {bank}" msgstr "" -#: pretix/plugins/stripe/payment.py:1204 +#: pretix/plugins/stripe/payment.py:1543 #, fuzzy #| msgid "iDEAL via Stripe" msgid "EPS via Stripe" msgstr "iDEAL caur Stripe" -#: pretix/plugins/stripe/payment.py:1276 +#: pretix/plugins/stripe/payment.py:1575 #, fuzzy #| msgid "Alipay via Stripe" msgid "Multibanco via Stripe" msgstr "Alipay caur Stripe" -#: pretix/plugins/stripe/payment.py:1323 +#: pretix/plugins/stripe/payment.py:1624 #, fuzzy #| msgid "Alipay via Stripe" msgid "Przelewy24 via Stripe" msgstr "Alipay caur Stripe" -#: pretix/plugins/stripe/payment.py:1379 +#: pretix/plugins/stripe/payment.py:1628 +msgid "" +"Przelewy24 is an online payment method available to customers of Polish " +"banks. Please keep your online banking account and login information " +"available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1662 #, fuzzy #| msgid "Credit card via Stripe" msgid "WeChat Pay via Stripe" msgstr "Kredītkarte, debetkarte caur Stripe" -#: pretix/plugins/stripe/signals.py:65 +#: pretix/plugins/stripe/payment.py:1667 +msgid "" +"This payment method is available to users of the Chinese app WeChat. Please " +"keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1690 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "PayPal via Stripe" +msgstr "iDEAL caur Stripe" + +#: pretix/plugins/stripe/payment.py:1697 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "Swish via Stripe" +msgstr "iDEAL caur Stripe" + +#: pretix/plugins/stripe/payment.py:1702 +msgid "" +"This payment method is available to users of the Swedish apps Swish and " +"BankID. Please have your app ready." +msgstr "" + +#: pretix/plugins/stripe/signals.py:70 msgid "Charge succeeded." msgstr "Maksas noņemšana izdevās." -#: pretix/plugins/stripe/signals.py:66 +#: pretix/plugins/stripe/signals.py:71 msgid "Charge refunded." msgstr "Maksa ir atmaksāta." -#: pretix/plugins/stripe/signals.py:67 +#: pretix/plugins/stripe/signals.py:72 msgid "Charge updated." msgstr "Maksa ir atjaunināta." -#: pretix/plugins/stripe/signals.py:68 +#: pretix/plugins/stripe/signals.py:73 msgid "Charge pending" msgstr "Maksa ir apstrādes procesā" -#: pretix/plugins/stripe/signals.py:69 +#: pretix/plugins/stripe/signals.py:74 msgid "Payment authorized." msgstr "Maksājums autorizēts." -#: pretix/plugins/stripe/signals.py:70 +#: pretix/plugins/stripe/signals.py:75 msgid "Payment authorization canceled." msgstr "Maksājuma autorizācija atcelta." -#: pretix/plugins/stripe/signals.py:71 +#: pretix/plugins/stripe/signals.py:76 msgid "Payment authorization failed." msgstr "Maksājuma autorizācija neizdevās." -#: pretix/plugins/stripe/signals.py:77 +#: pretix/plugins/stripe/signals.py:82 msgid "Charge failed. Reason: {}" msgstr "Uzlāde neizdevās. Iemesls: {}" -#: pretix/plugins/stripe/signals.py:79 +#: pretix/plugins/stripe/signals.py:84 msgid "Dispute created. Reason: {}" msgstr "Izveidojies pretējs arguments. Iemesls: {}" -#: pretix/plugins/stripe/signals.py:81 +#: pretix/plugins/stripe/signals.py:86 msgid "Dispute updated. Reason: {}" msgstr "Pretējs arguments ir atjaunināts. Iemesls: {}" -#: pretix/plugins/stripe/signals.py:83 +#: pretix/plugins/stripe/signals.py:88 msgid "Dispute closed. Status: {}" msgstr "Pretējs arguments slēgts. Statuss: {}" -#: pretix/plugins/stripe/signals.py:86 +#: pretix/plugins/stripe/signals.py:91 msgid "Stripe reported an event: {}" msgstr "Stripe ziņoja par notikumu: {}" -#: pretix/plugins/stripe/signals.py:97 +#: pretix/plugins/stripe/signals.py:102 msgid "Stripe Connect: Client ID" msgstr "Stripe Connect: klienta ID" -#: pretix/plugins/stripe/signals.py:104 +#: pretix/plugins/stripe/signals.py:109 msgid "Stripe Connect: Secret key" msgstr "Stripe Connect: slepenā atslēga" -#: pretix/plugins/stripe/signals.py:111 +#: pretix/plugins/stripe/signals.py:116 msgid "Stripe Connect: Publishable key" msgstr "Stripe Connect: publicējamā atslēga" -#: pretix/plugins/stripe/signals.py:118 +#: pretix/plugins/stripe/signals.py:123 msgid "Stripe Connect: Secret key (test)" msgstr "Stripe Connect: slepenā atslēga (tests)" -#: pretix/plugins/stripe/signals.py:125 +#: pretix/plugins/stripe/signals.py:130 msgid "Stripe Connect: Publishable key (test)" msgstr "Stripe Connect: publicējamā atslēga (tests)" -#: pretix/plugins/stripe/signals.py:170 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:6 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:9 +#: pretix/plugins/stripe/signals.py:156 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:3 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:9 msgid "Stripe Connect" msgstr "Stripe Connect" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"Stripe darījums %(charge)s ir izdevies, bet " -"pasūtījums %(order)s jau ir samaksāts ar citiem līdzekļiem. Lūdzu, vēlreiz " -"pārbaudiet un atmaksājiet naudu, izmantojot Stripe interfeisu." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"Stripe darījums %(charge)s ir izdevies, taču " -"pasūtījuma %(order)s termiņš ir beidzies, un produkts pa to laiku tika " -"izpārdots. Tāpēc maksājumu nevarēja pieņemt. Lūdzu, sazinieties ar lietotāju " -"un atmaksājiet naudu, izmantojot Stripe interfeisu." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"Stripe ziņoja, ka %(charge)s ir atmaksāts. Vai " -"vēlaties atzīmēt atbilstošo pasūtījumu (%(order)s) kā atmaksātu?" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "Kopējā summa tiks izņemta no jūsu kredītkartes." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "Kartes veids" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "Kopējā summa tiks izņemta no jūsu kredītkartes." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Konta īpašnieks" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -19968,17 +20186,17 @@ msgstr "" "nodrošinātāju, lai pabeigtu jūsu maksājumu. Pēc tam jūs tiksiet novirzīts " "atpakaļ šeit, lai saņemtu biļetes." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "Lai veiktu maksājumu ar karti, lūdzu, ieslēdziet JavaScript." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." @@ -19986,15 +20204,15 @@ msgstr "" "Jūs jau esat ievadījis kartes numuru, kuru mēs izmantosim, lai iekasētu " "maksājuma summu." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "Izmantojiet citu karti" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "VAI" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -20002,26 +20220,81 @@ msgstr "" "Jūsu maksājumu apstrādā Stripe, Inc. Jūsu maksājumu kartes dati tiks " "pārsūtīti pa tiešo uz Stripe, Inc., garantējot pilnīgu to privātumu." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "Lai veiktu maksājumu ar karti, lūdzu, ieslēdziet JavaScript." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"Jūs jau esat ievadījis kartes numuru, kuru mēs izmantosim, lai iekasētu " +"maksājuma summu." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "Izmantojiet citu karti" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "Maksas ID" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "Maksātāja vārds" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "Maksātāja vārds" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "Kļūdas ziņojums" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "" +#| "Do you really want to cancel this order? You cannot revert this action." +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Vai tiešām vēlaties atcelt šo pasūtījumu? Šo darbību nevar atsaukt." + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Disconnect from Stripe" +msgid "Disconnect" +msgstr "Atvienot no Stripe" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -20029,7 +20302,7 @@ msgstr "" "Mēs gaidām atbildi no maksājumu pakalpojumu sniedzēja par jūsu maksājumu. " "Lūdzu, sazinieties ar mums, ja tas prasa vairāk nekā dažas dienas." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." @@ -20037,64 +20310,68 @@ msgstr "" "Jums jāapstiprina savs maksājums. Lūdzu, noklikšķiniet uz tālāk esošās " "saites, lai to izdarītu, vai sāciet jaunu maksājumu." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "Apstiprināt samaksu" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "Maksājuma darījumu nevarēja pabeigt šāda iemesla dēļ:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Nezināms iemesls" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Apmaksāt pasūtījumu" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "Apstiprināt maksājumu: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "Notiek maksājuma apstiprināšana ..." -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "Veidojot savienojumu ar Stripe, radās kļūda. Lūdzu, mēģiniet vēlreiz." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "Stripe parādīja kļūdu: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" "Jūsu Stripe konts tagad ir savienots ar pretix. Tālāk varat detalizēti " "mainīt iestatījumus." -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "Jūsu Stripe konts ir atvienots." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -20102,7 +20379,7 @@ msgstr "" "Diemžēl maksājuma procesā radās kļūda. Lūdzu, pārbaudiet saiti savos e-pasta " "ziņojumos, lai turpinātu." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -20110,7 +20387,7 @@ msgstr "" "Mums radās problēmas ar jūsu kartes maksājuma autorizēšanu. Lūdzu, mēģiniet " "vēlreiz un sazinieties ar mums, ja šī problēma joprojām pastāv." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "Diemžēl maksājuma procesā radās kļūda." @@ -22201,6 +22478,37 @@ msgstr "" msgid "Kosovo" msgstr "" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Stripe darījums %(charge)s ir izdevies, bet " +#~ "pasūtījums %(order)s jau ir samaksāts ar citiem līdzekļiem. Lūdzu, " +#~ "vēlreiz pārbaudiet un atmaksājiet naudu, izmantojot Stripe interfeisu." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Stripe darījums %(charge)s ir izdevies, taču " +#~ "pasūtījuma %(order)s termiņš ir beidzies, un produkts pa to laiku tika " +#~ "izpārdots. Tāpēc maksājumu nevarēja pieņemt. Lūdzu, sazinieties ar " +#~ "lietotāju un atmaksājiet naudu, izmantojot Stripe interfeisu." + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "Stripe ziņoja, ka %(charge)s ir atmaksāts. Vai " +#~ "vēlaties atzīmēt atbilstošo pasūtījumu (%(order)s) kā atmaksātu?" + #~ msgid "Default list" #~ msgstr "Noklusējuma saraksts" diff --git a/src/pretix/locale/lv/LC_MESSAGES/djangojs.po b/src/pretix/locale/lv/LC_MESSAGES/djangojs.po index 1d819d4c1..1ad02e1a4 100644 --- a/src/pretix/locale/lv/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/lv/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2019-11-13 06:00+0000\n" "Last-Translator: Zane Smite \n" "Language-Team: Latvian " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" @@ -3509,7 +3509,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "" @@ -4078,20 +4078,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "" -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4099,45 +4109,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4146,94 +4156,94 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4242,11 +4252,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4254,87 +4264,87 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "" -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "" -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "" -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "" -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "" -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" @@ -10253,7 +10263,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10347,7 +10357,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -10512,10 +10522,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -10674,7 +10683,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -11472,7 +11481,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -15747,7 +15756,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -16912,7 +16921,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -17219,19 +17228,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -17794,7 +17804,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -17812,16 +17822,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -17895,8 +17905,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -17998,7 +18008,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18015,17 +18025,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -18418,12 +18428,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -18433,34 +18443,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -18468,20 +18478,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -18492,73 +18502,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -18566,23 +18633,62 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +msgid "Destination" +msgstr "" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +msgid "Account number" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/nb_NO/LC_MESSAGES/djangojs.po b/src/pretix/locale/nb_NO/LC_MESSAGES/djangojs.po index f9b582e7f..e395e5c62 100644 --- a/src/pretix/locale/nb_NO/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/nb_NO/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -42,20 +42,23 @@ msgstr "" msgid "Total revenue" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:15 msgid "Contacting Stripe …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:60 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:72 msgid "Total" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152 -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:242 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:265 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:282 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:315 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:339 msgid "Confirming your payment …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:159 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:289 msgid "Contacting your bank …" msgstr "" diff --git a/src/pretix/locale/nl/LC_MESSAGES/django.po b/src/pretix/locale/nl/LC_MESSAGES/django.po index 3fcdff042..73fd9a8b2 100644 --- a/src/pretix/locale/nl/LC_MESSAGES/django.po +++ b/src/pretix/locale/nl/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2021-03-14 17:33+0000\n" "Last-Translator: Raphael Michel \n" "Language-Team: Dutch " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Leeg, als dit product geen toegangsbewijs is" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Bedrijfsnaam" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Selecteer land" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "aangemaakt" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "openstaand" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "bevestigd" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "geannuleerd" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "mislukt" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "terugbetaald" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Betalingsinformatie" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "Aanmelding voor evenement bevestigd: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Betaling ontvangen voor uw bestelling: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "extern begonnen" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "aangemaakt" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "onderweg" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "klaar" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "mislukt" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "geannuleerd" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Organisator" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Klant" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Extern" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "Reden voor de terugbetaling" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" @@ -3527,66 +3527,66 @@ msgstr "" "Deze tekst kan aan de gebruiker getoond worden, bijvoorbeeld als deel van de " "betalingsinformatie." -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Betalingskosten" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Verzendkosten" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Servicekosten" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Annuleringskosten" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Overige kosten" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Cadeaubon" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Waarde" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Besteld product" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "Uw aanmelding:%(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "Winkelwagen-ID (bijv. sessiesleutel)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Winkelwagenpositie" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Producten in winkelwagen" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Alleen voor zakelijke klanten binnen de EU." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" "Deze referentie wordt voor u op de factuur afgedrukt en kunt u voor uw eigen " @@ -3758,7 +3758,7 @@ msgstr "" "alleen in na overleg met een belastingadviseur. Er wordt geen garantie " "gegeven voor juiste belastingberekening. GEBRUIK OP EIGEN RISICO." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "Land van handelaar" @@ -4374,22 +4374,36 @@ msgstr "U moet een specifieke stoel kiezen." msgid "Ambiguous option selected." msgstr "Onduidelijke optie geselecteerd." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "Toepassen" + +#: pretix/base/payment.py:54 +#, fuzzy +#| msgid "Android (Google Play)" +msgctxt "payment" +msgid "Google Pay" +msgstr "Android (Google Play)" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Betaalmethode inschakelen" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Gebruikers zullen na de opgegeven datum deze betalingsprovider niet kunnen " "kiezen." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Tekst op facturen" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4401,11 +4415,11 @@ msgstr "" "de bestelling is betaald. Als de factuur later wordt gegenereerd wordt er " "een tekst weergegeven die aangeeft dat de bestelling al is betaald." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Minimum totaalbedrag bestelling" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4416,11 +4430,11 @@ msgstr "" "voor deze vergelijking kan worden berekend zonder rekening te houden met de " "kosten die zijn ingesteld voor deze betalingsmethode." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Maximum totaalbedrag bestelling" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4431,23 +4445,23 @@ msgstr "" "voor deze vergelijking kan worden berekend zonder rekening te houden met de " "kosten die zijn ingesteld voor deze betalingsmethode." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Extra kosten" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Absolute waarde" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "Percentage van het totaalbedrag." -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Bereken de toeslag op basis van de totale waarde inclusief toeslag." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4461,11 +4475,11 @@ msgstr "" "over wat dit doet. Vergeet niet om hierboven de juiste toeslagen in te " "stellen!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "Beperk tot landen" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4475,18 +4489,18 @@ msgstr "" "de gekozen landen. Alle landen zijn toegestaan als u geen landen selecteert. " "Dit is alleen mogelijk als het factuuradres verplicht is." -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" "Sta het gebruik van deze betalingsprovider alleen toe voor de geselecteerde " "verkoopkanalen." -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "Betaalmethode verbergen" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." @@ -4494,27 +4508,27 @@ msgstr "" "De betalingsmethode zal standaard niet getoond worden, maar alleen aan " "mensen die de winkel openen via een speciale link." -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "Link om betalingsmethode in te schakelen" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" "Deel deze link met klanten die deze betalingsmethode moeten kunnen gebruiken." -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "De betaling voor deze factuur is al ontvangen." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" "Automatische terugbetalingen worden niet ondersteund door deze " "betalingsprovider." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4522,21 +4536,21 @@ msgstr "" "Er is geen betaling nodig omdat deze bestelling alleen gratis producten " "omvat." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Gratis" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Ticketbureau" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "Handmatige betaling" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." @@ -4544,15 +4558,15 @@ msgstr "" "In de testmodus kunt u de bestelling handmatig als betaald markeren in de " "backend." -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "Naam van betalingsmethode" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "Beschrijving van betalingproces tijdens afrekenen" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4561,11 +4575,11 @@ msgstr "" "deze betalingsmethode selecteert. De tekst moet een korte beschrijving over " "deze betaalmethode geven." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "Beschrijving van betalingsproces in bevestigingsmails" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4579,11 +4593,11 @@ msgstr "" "plaatsaanduidingen {order}, {amount}, {currency} en {amount_with_currency} " "gebruiken." -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "Beschrijving van betalingsproces voor openstaande bestellingen" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4595,57 +4609,57 @@ msgstr "" "de betaling. U kunt hier de plaatsaanduidingen {order}, {amount}, {currency} " "en {amount_with_currency} gebruiken." -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "Verrekening" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "U voerde een bestelling in die niet kon worden gevonden." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "Verrekend met bestellingen: %s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "In de testmodus zullen alleen testcadeaubonnen bruikbaar zijn." -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "U kunt niet met cadeaubonnen betalen wanneer u een cadeaubon koopt." -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "Deze cadeaubon ondersteunt deze munteenheid niet." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "Deze cadeaubon kan alleen in de testmodus worden gebruikt." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "Alleen testcadeaubonnen kunnen in de testmodus worden gebruikt." -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "Deze cadeaubon is niet meer geldig." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "Het tegoed van deze cadeaubon is verbruikt." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "Deze cadeaubon wordt al voor uw betaling gebruikt." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." @@ -4653,11 +4667,11 @@ msgstr "" "Uw cadeaubon is gebruikt, maar er moet nog {} worden betaald. Kies een " "betalingmethode voor het resterende bedrag." -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "Uw cadeaubon is succesvol gebruikt." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." @@ -4666,11 +4680,11 @@ msgstr "" "kunnen alleen op de eerste pagina van de winkel worden ingevoerd, onder de " "productkeuze." -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "Deze cadeauboncode is onbekend." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." @@ -4678,12 +4692,12 @@ msgstr "" "Deze cadeaubon kan niet worden gebruikt, omdat de code niet uniek is. Neem " "contact op met de organisator van dit evenement." -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" "Deze cadeaubon wordt niet geaccepteerd door de organisator van dit evenement." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "Deze cadeaubon is in de tussentijd gebruikt. Probeer het opnieuw." @@ -11569,7 +11583,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -11676,7 +11690,7 @@ msgstr "Stel nieuw wachtwoord in" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Opslaan" @@ -11853,10 +11867,9 @@ msgstr "Soort kaartinvoer" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Kaartnummer" @@ -12018,7 +12031,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -13007,7 +13020,7 @@ msgstr "Geïnstalleerde plugins" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Uw wijzigingen zijn opgeslagen." @@ -17865,7 +17878,7 @@ msgstr "De nieuwe inchecklijst is aangemaakt." #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "We konden uw wijzigingen niet opslaan. Zie hieronder voor details." @@ -19136,7 +19149,7 @@ msgstr "Badges" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -19475,19 +19488,20 @@ msgstr "Vul uw bankrekeninggegevens in." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Rekeninghouder" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "Bank" @@ -20120,7 +20134,7 @@ msgstr "" "verwerking toe." #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "PayPal" @@ -20141,16 +20155,16 @@ msgstr "" msgid "PayPal account" msgstr "PayPal-account" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "{text}" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "Klik hier voor instructies over hoe de benodigde sleutels te krijgen" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "Endpoint" @@ -20242,8 +20256,8 @@ msgstr "" "PayPal heeft de betaling nog niet goedgekeurd. We zullen het aan u melden " "zodra de betaling is voltooid." -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "Er is een fout opgetreden bij het versturen van de bevestigingsmail." @@ -20359,7 +20373,7 @@ msgid "Last update" msgstr "Laatste update" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "Totaalwaarde" @@ -20380,17 +20394,17 @@ msgstr "" "op als dit langer dan een paar uur duurt." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "Het betalingsproces is begonnen in een nieuw venster." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "Is het venster om uw betaling uit te voeren niet geopend?" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "Klik hier om het venster te openen." @@ -20817,12 +20831,14 @@ msgstr "" "zodra u de eerste bestellingen ontvangt!" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "Stripe" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" "Deze plug-in staat u toe om creditcardbetalingen te ontvangen via Stripe" @@ -20835,37 +20851,42 @@ msgstr "" "De opgegeven key \"%(value)s\" ziet er niet geldig uit. Hij moet beginnen " "met \"%(prefix)s\"." -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "Stripe Connect: App-toeslag (procent)" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "Stripe Connect: App-toeslag (max.)" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "Stripe Connect: App-toeslag (min.)" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "Om betalingen via Stripe te accepteren heeft u een account bij Stripe nodig. " "Door te klikken op de volgende knop kunt u een nieuw Stripe-account " "aanmaken, of pretix met een bestaand account verbinden." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "Verbinden met Stripe" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "Verbinding met Stripe verbreken" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -20877,22 +20898,22 @@ msgstr "" "annuleren wanneer betalingen extern worden terugbetaald, en om asynchrone " "betalingsmethoden zoals SOFORT te verwerken." -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "MOTO-betalingen voor wederverkopers inschakelen" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" "Beperkte functie (moet eerst door Stripe-support voor uw account worden " "ingeschakeld)" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "Stripe Integration Security Guide" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -20909,21 +20930,21 @@ msgstr "" "verplicht worden om jaarlijkse PCI-DSS-evaluaties in te voeren, zoals het 40 " "pagina's tellende SAQ D. Zie de %s voor meer informatie over dit onderwerp." -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "Stripe-account" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "Live" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "Testing" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." @@ -20931,15 +20952,15 @@ msgstr "" "Als uw evenement in testmodus is zullen we altijd de test-API van Stripe " "gebruiken, onafhankelijk van deze instelling." -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Publiceerbare sleutel" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Geheime sleutel" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." @@ -20947,39 +20968,96 @@ msgstr "" "Het land waarin uw Stripe-account is geregistreerd. Dit is meestal het land " "waarin u woont of gevestigd bent." -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Creditcardbetalingen" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "Moet eerst in uw Stripe-account worden aangezet." -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "iDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "Alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "SOFORT" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -20991,23 +21069,64 @@ msgstr "" "gevallen tot 14 dagen duren om verwerkt te worden. Activeer " "deze betalingsmethode alleen als uw betalingstermijn deze vertraging toelaat." -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "EPS" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "Multibanco" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "Przelewy24" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "WeChat Pay" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Beschrijving" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of gebruiken om een betaling uit te voeren. Er zal geen echt " "geld worden overgemaakt." -#: pretix/plugins/stripe/payment.py:407 pretix/plugins/stripe/payment.py:757 -#: pretix/plugins/stripe/payment.py:852 +#: pretix/plugins/stripe/payment.py:575 +msgid "No payment information found." +msgstr "Geen betalingsinformatie gevonden." + +#: pretix/plugins/stripe/payment.py:591 +msgid "Stripe returned an error" +msgstr "Stripe meldde een fout" + +#: pretix/plugins/stripe/payment.py:616 +msgid "" +"We had trouble communicating with Stripe. Please try again and contact " +"support if the problem persists." +msgstr "" +"We hadden problemen met het communiceren met Stripe. Probeer het opnieuw, en " +"neem contact op met ons als het probleem aanhoudt." + +#: pretix/plugins/stripe/payment.py:689 +msgid "You may need to enable JavaScript for Stripe payments." +msgstr "U moet mogelijk JavaScript inschakelen voor Stripe-betalingen." + +#: pretix/plugins/stripe/payment.py:761 pretix/plugins/stripe/payment.py:863 +#: pretix/plugins/stripe/payment.py:922 #, python-format msgid "Stripe reported an error with your card: %s" msgstr "Stripe meldde een fout met uw kaart: %s" -#: pretix/plugins/stripe/payment.py:434 pretix/plugins/stripe/payment.py:567 -#: pretix/plugins/stripe/payment.py:770 pretix/plugins/stripe/payment.py:864 -#: pretix/plugins/stripe/payment.py:1436 +#: pretix/plugins/stripe/payment.py:769 pretix/plugins/stripe/payment.py:875 +#: pretix/plugins/stripe/payment.py:936 pretix/plugins/stripe/payment.py:1002 msgid "" "We had trouble communicating with Stripe. Please try again and get in touch " "with us if this problem persists." @@ -21034,7 +21172,7 @@ msgstr "" "We hadden problemen met het communiceren met Stripe. Probeer het opnieuw, en " "neem contact op met ons als het probleem aanhoudt." -#: pretix/plugins/stripe/payment.py:452 pretix/plugins/stripe/payment.py:804 +#: pretix/plugins/stripe/payment.py:801 msgid "" "Your payment is pending completion. We will inform you as soon as the " "payment completed." @@ -21042,244 +21180,328 @@ msgstr "" "Uw betaling wacht op voltooiing. We zullen het aan u melden wanneer uw " "betaling is gelukt." -#: pretix/plugins/stripe/payment.py:461 pretix/plugins/stripe/payment.py:818 +#: pretix/plugins/stripe/payment.py:808 +msgid "Your payment failed. Please try again." +msgstr "Uw betaling is mislukt. Probeer het alstublieft opnieuw." + +#: pretix/plugins/stripe/payment.py:814 pretix/plugins/stripe/payment.py:970 #, python-format msgid "Stripe reported an error: %s" msgstr "Stripe meldde een fout: %s" -#: pretix/plugins/stripe/payment.py:517 -msgid "No payment information found." -msgstr "Geen betalingsinformatie gevonden." - -#: pretix/plugins/stripe/payment.py:538 +#: pretix/plugins/stripe/payment.py:963 +#, fuzzy +#| msgid "" +#| "Your payment is pending completion. We will inform you as soon as the " +#| "payment completed." msgid "" -"We had trouble communicating with Stripe. Please try again and contact " -"support if the problem persists." +"Your payment is pending completion. We will inform you as soon as the " +"payment is completed." msgstr "" -"We hadden problemen met het communiceren met Stripe. Probeer het opnieuw, en " -"neem contact op met ons als het probleem aanhoudt." - -#: pretix/plugins/stripe/payment.py:542 -msgid "Stripe returned an error" -msgstr "Stripe meldde een fout" +"Uw betaling wacht op voltooiing. We zullen het aan u melden wanneer uw " +"betaling is gelukt." -#: pretix/plugins/stripe/payment.py:638 +#: pretix/plugins/stripe/payment.py:1035 msgid "Credit card via Stripe" msgstr "Creditcard via Stripe" -#: pretix/plugins/stripe/payment.py:639 +#: pretix/plugins/stripe/payment.py:1036 msgid "Credit card" msgstr "Creditcard" -#: pretix/plugins/stripe/payment.py:666 -msgid "You may need to enable JavaScript for Stripe payments." -msgstr "U moet mogelijk JavaScript inschakelen voor Stripe-betalingen." +#: pretix/plugins/stripe/payment.py:1116 +#, fuzzy +#| msgid "EPS via Stripe" +msgid "SEPA Debit via Stripe" +msgstr "EPS via Stripe" -#: pretix/plugins/stripe/payment.py:812 -msgid "Your payment failed. Please try again." -msgstr "Uw betaling is mislukt. Probeer het alstublieft opnieuw." +#: pretix/plugins/stripe/payment.py:1117 +msgid "SEPA Debit" +msgstr "" -#: pretix/plugins/stripe/payment.py:885 +#: pretix/plugins/stripe/payment.py:1155 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Name" +msgstr "Rekeninghouder" + +#: pretix/plugins/stripe/payment.py:1159 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Street" +msgstr "Rekeninghouder" + +#: pretix/plugins/stripe/payment.py:1168 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Postal Code" +msgstr "Rekeninghouder" + +#: pretix/plugins/stripe/payment.py:1177 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder City" +msgstr "Rekeninghouder" + +#: pretix/plugins/stripe/payment.py:1186 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Country" +msgstr "Rekeninghouder" + +#: pretix/plugins/stripe/payment.py:1224 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Affirm via Stripe" +msgstr "Alipay via Stripe" + +#: pretix/plugins/stripe/payment.py:1263 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Klarna via Stripe" +msgstr "Alipay via Stripe" + +#: pretix/plugins/stripe/payment.py:1368 msgid "giropay via Stripe" msgstr "giropay via Stripe" -#: pretix/plugins/stripe/payment.py:917 pretix/plugins/stripe/payment.py:1084 -#: pretix/plugins/stripe/payment.py:1236 +#: pretix/plugins/stripe/payment.py:1372 +msgid "" +"giropay is an online payment method available to all customers of most " +"German banks, usually after one-time activation. Please keep your online " +"banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1383 pretix/plugins/stripe/payment.py:1451 +#: pretix/plugins/stripe/payment.py:1554 msgid "unknown name" msgstr "onbekende naam" -#: pretix/plugins/stripe/payment.py:949 pretix/plugins/stripe/payment.py:1001 -#: pretix/plugins/stripe/payment.py:1116 pretix/plugins/stripe/payment.py:1268 -#: pretix/plugins/stripe/payment.py:1371 +#: pretix/plugins/stripe/payment.py:1395 pretix/plugins/stripe/payment.py:1415 +#: pretix/plugins/stripe/payment.py:1459 pretix/plugins/stripe/payment.py:1562 +#: pretix/plugins/stripe/payment.py:1654 #, python-brace-format msgid "Bank account at {bank}" msgstr "Bankrekening bij {bank}" -#: pretix/plugins/stripe/payment.py:957 +#: pretix/plugins/stripe/payment.py:1403 msgid "iDEAL via Stripe" msgstr "iDEAL via Stripe" -#: pretix/plugins/stripe/payment.py:1009 +#: pretix/plugins/stripe/payment.py:1407 +msgid "" +"iDEAL is an online payment method available to customers of Dutch banks. " +"Please keep your online banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1428 msgid "Alipay via Stripe" msgstr "Alipay via Stripe" -#: pretix/plugins/stripe/payment.py:1052 +#: pretix/plugins/stripe/payment.py:1433 +msgid "" +"This payment method is available to customers of the Chinese payment system " +"Alipay. Please keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1440 msgid "Bancontact via Stripe" msgstr "Bancontact via Stripe" -#: pretix/plugins/stripe/payment.py:1124 +#: pretix/plugins/stripe/payment.py:1472 msgid "SOFORT via Stripe" msgstr "SOFORT via Stripe" -#: pretix/plugins/stripe/payment.py:1141 +#: pretix/plugins/stripe/payment.py:1473 +#, fuzzy +#| msgid "Payment by bank transfer" +msgid "SOFORT (instant bank transfer)" +msgstr "Betaling via bankoverschrijving" + +#: pretix/plugins/stripe/payment.py:1491 msgid "Country of your bank" msgstr "Land van uw bank" -#: pretix/plugins/stripe/payment.py:1142 +#: pretix/plugins/stripe/payment.py:1492 msgid "Germany" msgstr "Duitsland" -#: pretix/plugins/stripe/payment.py:1143 +#: pretix/plugins/stripe/payment.py:1493 msgid "Austria" msgstr "Oostenrijk" -#: pretix/plugins/stripe/payment.py:1144 +#: pretix/plugins/stripe/payment.py:1494 msgid "Belgium" msgstr "België" -#: pretix/plugins/stripe/payment.py:1145 +#: pretix/plugins/stripe/payment.py:1495 msgid "Netherlands" msgstr "Nederland" -#: pretix/plugins/stripe/payment.py:1146 +#: pretix/plugins/stripe/payment.py:1496 msgid "Spain" msgstr "Spanje" -#: pretix/plugins/stripe/payment.py:1193 +#: pretix/plugins/stripe/payment.py:1532 #, python-brace-format msgid "Bank account {iban} at {bank}" msgstr "Bankrekening {iban} bij {bank}" -#: pretix/plugins/stripe/payment.py:1204 +#: pretix/plugins/stripe/payment.py:1543 msgid "EPS via Stripe" msgstr "EPS via Stripe" -#: pretix/plugins/stripe/payment.py:1276 +#: pretix/plugins/stripe/payment.py:1575 msgid "Multibanco via Stripe" msgstr "Multibanco via Stripe" -#: pretix/plugins/stripe/payment.py:1323 +#: pretix/plugins/stripe/payment.py:1624 msgid "Przelewy24 via Stripe" msgstr "Przelewy24 via Stripe" -#: pretix/plugins/stripe/payment.py:1379 +#: pretix/plugins/stripe/payment.py:1628 +msgid "" +"Przelewy24 is an online payment method available to customers of Polish " +"banks. Please keep your online banking account and login information " +"available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1662 msgid "WeChat Pay via Stripe" msgstr "WeChat Pay via Stripe" -#: pretix/plugins/stripe/signals.py:65 +#: pretix/plugins/stripe/payment.py:1667 +msgid "" +"This payment method is available to users of the Chinese app WeChat. Please " +"keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1690 +#, fuzzy +#| msgid "Payment via Stripe" +msgid "PayPal via Stripe" +msgstr "Betaling via Stripe" + +#: pretix/plugins/stripe/payment.py:1697 +#, fuzzy +#| msgid "EPS via Stripe" +msgid "Swish via Stripe" +msgstr "EPS via Stripe" + +#: pretix/plugins/stripe/payment.py:1702 +msgid "" +"This payment method is available to users of the Swedish apps Swish and " +"BankID. Please have your app ready." +msgstr "" + +#: pretix/plugins/stripe/signals.py:70 msgid "Charge succeeded." msgstr "Betaling geslaagd." -#: pretix/plugins/stripe/signals.py:66 +#: pretix/plugins/stripe/signals.py:71 msgid "Charge refunded." msgstr "Transactie teruggestort." -#: pretix/plugins/stripe/signals.py:67 +#: pretix/plugins/stripe/signals.py:72 msgid "Charge updated." msgstr "Transactie bijgewerkt." -#: pretix/plugins/stripe/signals.py:68 +#: pretix/plugins/stripe/signals.py:73 msgid "Charge pending" msgstr "Transactie staat open" -#: pretix/plugins/stripe/signals.py:69 +#: pretix/plugins/stripe/signals.py:74 msgid "Payment authorized." msgstr "Betaling goedgekeurd." -#: pretix/plugins/stripe/signals.py:70 +#: pretix/plugins/stripe/signals.py:75 msgid "Payment authorization canceled." msgstr "Betalingsgoedkeuring geannuleerd." -#: pretix/plugins/stripe/signals.py:71 +#: pretix/plugins/stripe/signals.py:76 msgid "Payment authorization failed." msgstr "Betalingsgoedkeuring mislukt." -#: pretix/plugins/stripe/signals.py:77 +#: pretix/plugins/stripe/signals.py:82 msgid "Charge failed. Reason: {}" msgstr "Transactie mislukt. Reden: {}" -#: pretix/plugins/stripe/signals.py:79 +#: pretix/plugins/stripe/signals.py:84 msgid "Dispute created. Reason: {}" msgstr "Geschil aangemaakt. Reden: {}" -#: pretix/plugins/stripe/signals.py:81 +#: pretix/plugins/stripe/signals.py:86 msgid "Dispute updated. Reason: {}" msgstr "Geschil bijgewerkt. Reden: {}" -#: pretix/plugins/stripe/signals.py:83 +#: pretix/plugins/stripe/signals.py:88 msgid "Dispute closed. Status: {}" msgstr "Geschil gesloten. Status: {}" -#: pretix/plugins/stripe/signals.py:86 +#: pretix/plugins/stripe/signals.py:91 msgid "Stripe reported an event: {}" msgstr "Stripe meldde een gebeurtenis: {}" -#: pretix/plugins/stripe/signals.py:97 +#: pretix/plugins/stripe/signals.py:102 msgid "Stripe Connect: Client ID" msgstr "Stripe Connect: Client ID" -#: pretix/plugins/stripe/signals.py:104 +#: pretix/plugins/stripe/signals.py:109 msgid "Stripe Connect: Secret key" msgstr "Stripe Connect: Geheime sleutel" -#: pretix/plugins/stripe/signals.py:111 +#: pretix/plugins/stripe/signals.py:116 msgid "Stripe Connect: Publishable key" msgstr "Stripe Connect: Publiceerbare sleutel" -#: pretix/plugins/stripe/signals.py:118 +#: pretix/plugins/stripe/signals.py:123 msgid "Stripe Connect: Secret key (test)" msgstr "Stripe Connect: Geheime sleutel (test)" -#: pretix/plugins/stripe/signals.py:125 +#: pretix/plugins/stripe/signals.py:130 msgid "Stripe Connect: Publishable key (test)" msgstr "Stripe Connect: Publiceerbare sleutel (test)" -#: pretix/plugins/stripe/signals.py:170 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:6 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:9 +#: pretix/plugins/stripe/signals.py:156 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:3 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:9 msgid "Stripe Connect" msgstr "Stripe Connect" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"De Stripe-transactie %(charge)s is gelukt, maar de " -"bestelling %(order)s is ondertussen al op een andere manier betaald. " -"Controleer uw informatie en restitueer de betaling via de interface van " -"Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"De Stripe-transactie %(charge)s is gelukt, maar de " -"bestelling %(order)s is verlopen en het product is ondertussen uitverkocht. " -"Hierom kon de betaling niet worden geaccepteerd. Neem contact op met de " -"gebruiker en restitueer de betaling via de website van Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"Stripe meldde dat de transactie %(charge)s is " -"gerestitueerd. Wilt u de bijbehorende bestelling (%(order)s) als " -"terugbetaald aanmerken?" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "Het totaalbedrag zal worden afgeschreven van uw creditcard." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "Kaarttype" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "Het totaalbedrag zal worden afgeschreven van uw creditcard." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Rekeninghouder" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -21289,7 +21511,7 @@ msgstr "" "betalingsprovider om de betaling te voldoen. Hierna wordt u teruggeleid en " "kunt u de tickets downloaden." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" @@ -21298,11 +21520,11 @@ msgstr "" "de betaling waar mogelijk uitgesloten zal zijn van Strong Customer " "Authentication (SCA)" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "Zet JavaScript aan om een creditcardbetaling uit te voeren." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." @@ -21310,15 +21532,15 @@ msgstr "" "U heeft al een creditcardnummer opgegeven dat we zullen gebruiken om de " "betaling te voltooien." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "Gebruik een andere kaart" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "OF" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -21326,26 +21548,80 @@ msgstr "" "Uw betaling zal worden verwerkt door Stripe, Inc. Uw creditcardgegevens " "zullen direct naar Stripe worden verzonden, en nooit op onze servers komen." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "Zet JavaScript aan om een creditcardbetaling uit te voeren." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"U heeft al een creditcardnummer opgegeven dat we zullen gebruiken om de " +"betaling te voltooien." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "Gebruik een andere kaart" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "Transactienummer" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "Naam betaler" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "MOTO" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "Naam betaler" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "Foutmelding" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to regenerate your emergency codes?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Wilt u echt uw noodherstelcodes opnieuw genereren?" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Connect" +msgid "Disconnect" +msgstr "Verbinden" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -21353,7 +21629,7 @@ msgstr "" "We wachten op een antwoord van de betalingsprovider over uw betaling. Neem " "contact met ons op als dit langer dan een paar dagen duurt." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." @@ -21361,11 +21637,11 @@ msgstr "" "U moet uw betaling bevestigen. Klik op de link hieronder om dit te doen of " "om een nieuwe betaling te starten." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "Bevestig betaling" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." @@ -21373,55 +21649,59 @@ msgstr "" "Scan de QR-code hieronder om uw WeChat-betaling uit te voeren. Als u de " "betaling heeft afgerond kunt u deze pagina verversen." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "De betalingstransactie kon om de volgende reden niet voltooid worden:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Onbekende reden" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Betaal bestelling" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "Betaling bevestigen: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "Betaling bevestigen…" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" "Er trad een fout op tijdens het verbinden met Stripe, probeer het opnieuw." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "Stripe meldde een fout: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" "Uw Stripe-account is nu verbonden met pretix. U kunt hieronder de " "instellingen wijzigen." -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "De verbinding met uw Stripe-account is verbroken." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -21429,7 +21709,7 @@ msgstr "" "Sorry, er trad een fout op in het betalingsproces. Klik op de link in uw " "email om door te gaan." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -21437,7 +21717,7 @@ msgstr "" "We konden uw creditcardbetaling niet autoriseren. Probeer het opnieuw, en " "neem contact met ons op als het probleem aanhoudt." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "Sorry, is iets misgegaan in het betalingsproces." @@ -23494,6 +23774,40 @@ msgstr "Schrijftoegang" msgid "Kosovo" msgstr "Kosovo" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "De Stripe-transactie %(charge)s is gelukt, maar de " +#~ "bestelling %(order)s is ondertussen al op een andere manier betaald. " +#~ "Controleer uw informatie en restitueer de betaling via de interface van " +#~ "Stripe." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "De Stripe-transactie %(charge)s is gelukt, maar de " +#~ "bestelling %(order)s is verlopen en het product is ondertussen " +#~ "uitverkocht. Hierom kon de betaling niet worden geaccepteerd. Neem " +#~ "contact op met de gebruiker en restitueer de betaling via de website van " +#~ "Stripe." + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "Stripe meldde dat de transactie %(charge)s is " +#~ "gerestitueerd. Wilt u de bijbehorende bestelling (%(order)s) als " +#~ "terugbetaald aanmerken?" + #, fuzzy #~| msgid "Only include tickets for dates on or before this date." #~ msgid "Only include orders issued on or before this date." diff --git a/src/pretix/locale/nl/LC_MESSAGES/djangojs.po b/src/pretix/locale/nl/LC_MESSAGES/djangojs.po index b93633ce5..d9cecc39c 100644 --- a/src/pretix/locale/nl/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/nl/LC_MESSAGES/djangojs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-08-05 06:00+0000\n" "Last-Translator: Maarten van den Berg \n" "Language-Team: Dutch event " #~ "ticketing powered by pretix" #~ msgstr "" -#~ "ticketsysteem mogelijk gemaakt door pretix" +#~ "ticketsysteem mogelijk gemaakt door pretix" #~ msgid "" #~ "Your request has been queued on the server and will now be processed. If " diff --git a/src/pretix/locale/nl_BE/LC_MESSAGES/django.po b/src/pretix/locale/nl_BE/LC_MESSAGES/django.po index 5c836c798..d9af39c89 100644 --- a/src/pretix/locale/nl_BE/LC_MESSAGES/django.po +++ b/src/pretix/locale/nl_BE/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -313,7 +313,7 @@ msgstr "" #: pretix/base/auth.py:113 pretix/base/forms/auth.py:207 #: pretix/base/models/auth.py:90 pretix/base/models/notifications.py:25 -#: pretix/base/models/orders.py:146 pretix/control/navigation.py:60 +#: pretix/base/models/orders.py:184 pretix/control/navigation.py:60 #: pretix/control/templates/pretixcontrol/event/settings.html:67 #: pretix/plugins/checkinlists/exporters.py:417 #: pretix/presale/checkoutflow.py:823 pretix/presale/forms/checkout.py:23 @@ -457,8 +457,8 @@ msgid "" "date does not always correspond to the order or payment date." msgstr "" -#: pretix/base/exporters/invoices.py:52 pretix/base/models/orders.py:1354 -#: pretix/base/models/orders.py:1731 pretix/control/forms/filter.py:139 +#: pretix/base/exporters/invoices.py:52 pretix/base/models/orders.py:1395 +#: pretix/base/models/orders.py:1772 pretix/control/forms/filter.py:139 #: pretix/control/forms/filter.py:1541 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:9 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:14 @@ -508,7 +508,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:166 pretix/base/exporters/invoices.py:294 #: pretix/base/exporters/orderlist.py:850 #: pretix/base/exporters/waitinglist.py:84 pretix/base/models/items.py:1024 -#: pretix/base/models/orders.py:158 pretix/base/models/orders.py:2207 +#: pretix/base/models/orders.py:196 pretix/base/models/orders.py:2248 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:63 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:17 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:11 @@ -520,7 +520,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:167 pretix/base/exporters/invoices.py:295 #: pretix/base/exporters/orderlist.py:234 #: pretix/base/exporters/orderlist.py:398 -#: pretix/base/exporters/orderlist.py:500 pretix/base/models/orders.py:128 +#: pretix/base/exporters/orderlist.py:500 pretix/base/models/orders.py:166 #: pretix/base/notifications.py:190 pretix/base/pdf.py:58 #: pretix/control/templates/pretixcontrol/checkin/index.html:65 #: pretix/control/templates/pretixcontrol/order/index.html:162 @@ -575,7 +575,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:172 pretix/base/exporters/invoices.py:180 #: pretix/base/exporters/invoices.py:299 pretix/base/exporters/invoices.py:307 #: pretix/base/exporters/orderlist.py:235 -#: pretix/base/exporters/waitinglist.py:85 pretix/base/forms/questions.py:811 +#: pretix/base/exporters/waitinglist.py:85 pretix/base/forms/questions.py:815 #: pretix/base/models/devices.py:45 pretix/base/models/devices.py:105 #: pretix/base/models/event.py:1123 pretix/base/models/event.py:1376 #: pretix/base/models/items.py:1365 pretix/base/models/items.py:1523 @@ -612,8 +612,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:528 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:412 -#: pretix/base/models/orders.py:1160 pretix/base/models/orders.py:2258 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:416 +#: pretix/base/models/orders.py:1201 pretix/base/models/orders.py:2299 #: pretix/base/orderimport.py:274 pretix/base/orderimport.py:420 #: pretix/control/forms/filter.py:525 pretix/control/forms/filter.py:556 #: pretix/control/templates/pretixcontrol/order/index.html:823 @@ -629,8 +629,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:529 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:423 -#: pretix/base/models/orders.py:1161 pretix/base/models/orders.py:2259 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:427 +#: pretix/base/models/orders.py:1202 pretix/base/models/orders.py:2300 #: pretix/base/orderimport.py:285 pretix/base/orderimport.py:431 #: pretix/base/settings.py:701 pretix/control/forms/filter.py:529 #: pretix/control/forms/filter.py:560 pretix/control/views/item.py:354 @@ -644,8 +644,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:530 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:431 -#: pretix/base/models/orders.py:1162 pretix/base/models/orders.py:2260 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:435 +#: pretix/base/models/orders.py:1203 pretix/base/models/orders.py:2301 #: pretix/base/orderimport.py:296 pretix/base/orderimport.py:442 #: pretix/base/settings.py:713 pretix/control/forms/filter.py:534 #: pretix/control/forms/filter.py:565 pretix/control/views/item.py:364 @@ -659,9 +659,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:531 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:443 -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2261 -#: pretix/base/models/orders.py:2262 pretix/base/orderimport.py:312 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:447 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2302 +#: pretix/base/models/orders.py:2303 pretix/base/orderimport.py:312 #: pretix/base/orderimport.py:458 pretix/base/settings.py:722 #: pretix/control/forms/filter.py:539 pretix/control/forms/filter.py:570 #: pretix/control/templates/pretixcontrol/order/index.html:827 @@ -683,7 +683,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:305 pretix/base/exporters/invoices.py:313 #: pretix/base/exporters/orderlist.py:243 #: pretix/base/exporters/orderlist.py:418 -#: pretix/base/exporters/orderlist.py:566 pretix/base/models/orders.py:2265 +#: pretix/base/exporters/orderlist.py:566 pretix/base/models/orders.py:2306 #: pretix/base/orderimport.py:356 #: pretix/control/templates/pretixcontrol/order/index.html:834 #: pretix/plugins/reports/exporters.py:721 @@ -710,7 +710,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:235 #: pretix/base/exporters/orderlist.py:410 #: pretix/base/exporters/orderlist.py:527 -#: pretix/base/exporters/orderlist.py:559 pretix/base/forms/questions.py:404 +#: pretix/base/exporters/orderlist.py:559 pretix/base/forms/questions.py:408 #: pretix/base/orderimport.py:244 pretix/base/orderimport.py:409 #: pretix/control/forms/filter.py:517 pretix/control/forms/filter.py:552 #: pretix/control/templates/pretixcontrol/order/index.html:819 @@ -731,9 +731,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:532 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:467 -#: pretix/base/forms/questions.py:777 pretix/base/models/orders.py:1164 -#: pretix/base/models/orders.py:2264 pretix/base/orderimport.py:331 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:471 +#: pretix/base/forms/questions.py:781 pretix/base/models/orders.py:1205 +#: pretix/base/models/orders.py:2305 pretix/base/orderimport.py:331 #: pretix/control/templates/pretixcontrol/order/index.html:830 #: pretix/plugins/checkinlists/exporters.py:444 #: pretix/plugins/reports/exporters.py:720 @@ -744,13 +744,13 @@ msgid "State" msgstr "" #: pretix/base/exporters/invoices.py:187 pretix/base/exporters/invoices.py:314 -#: pretix/base/models/orders.py:2275 +#: pretix/base/models/orders.py:2316 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:114 msgid "Beneficiary" msgstr "" #: pretix/base/exporters/invoices.py:188 pretix/base/exporters/invoices.py:315 -#: pretix/base/models/orders.py:2270 pretix/base/orderimport.py:367 +#: pretix/base/models/orders.py:2311 pretix/base/orderimport.py:367 #: pretix/control/templates/pretixcontrol/order/index.html:854 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:121 msgid "Internal reference" @@ -801,7 +801,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:271 pretix/base/exporters/orderlist.py:359 #: pretix/base/exporters/orderlist.py:659 -#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1029 +#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1070 #: pretix/control/forms/filter.py:106 pretix/control/forms/filter.py:426 #: pretix/control/forms/item.py:425 pretix/control/forms/subevents.py:97 #: pretix/control/views/item.py:565 pretix/control/views/vouchers.py:92 @@ -817,7 +817,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:271 pretix/base/exporters/orderlist.py:359 #: pretix/base/exporters/orderlist.py:659 -#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1031 +#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1072 #: pretix/control/forms/filter.py:106 pretix/control/forms/filter.py:427 #: pretix/control/forms/item.py:426 pretix/control/forms/subevents.py:98 #: pretix/control/views/item.py:565 pretix/control/views/vouchers.py:92 @@ -850,14 +850,14 @@ msgid "Net price" msgstr "" #: pretix/base/exporters/invoices.py:289 pretix/base/exporters/orderlist.py:409 -#: pretix/base/exporters/orderlist.py:518 pretix/base/models/orders.py:1879 -#: pretix/base/models/orders.py:1979 +#: pretix/base/exporters/orderlist.py:518 pretix/base/models/orders.py:1920 +#: pretix/base/models/orders.py:2020 msgid "Tax value" msgstr "" #: pretix/base/exporters/invoices.py:290 pretix/base/exporters/orderlist.py:407 -#: pretix/base/exporters/orderlist.py:516 pretix/base/models/orders.py:1870 -#: pretix/base/models/orders.py:1970 pretix/base/models/tax.py:114 +#: pretix/base/exporters/orderlist.py:516 pretix/base/models/orders.py:1911 +#: pretix/base/models/orders.py:2011 pretix/base/models/tax.py:114 #: pretix/plugins/reports/exporters.py:670 #: pretix/plugins/reports/exporters.py:715 msgid "Tax rate" @@ -884,7 +884,7 @@ msgstr "" msgid "Order data" msgstr "" -#: pretix/base/exporters/orderlist.py:45 pretix/base/models/orders.py:209 +#: pretix/base/exporters/orderlist.py:45 pretix/base/models/orders.py:247 #: pretix/control/navigation.py:224 #: pretix/control/templates/pretixcontrol/orders/index.html:7 #: pretix/control/templates/pretixcontrol/orders/index.html:9 @@ -892,7 +892,7 @@ msgstr "" msgid "Orders" msgstr "" -#: pretix/base/exporters/orderlist.py:46 pretix/base/models/orders.py:1995 +#: pretix/base/exporters/orderlist.py:46 pretix/base/models/orders.py:2036 #: pretix/base/notifications.py:196 msgid "Order positions" msgstr "" @@ -958,7 +958,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:744 #: pretix/base/exporters/orderlist.py:899 #: pretix/base/exporters/waitinglist.py:97 -#: pretix/base/exporters/waitinglist.py:145 pretix/base/models/orders.py:134 +#: pretix/base/exporters/waitinglist.py:145 pretix/base/models/orders.py:172 #: pretix/control/forms/filter.py:773 pretix/control/forms/filter.py:1000 #: pretix/control/forms/filter.py:1269 pretix/control/forms/filter.py:1350 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:39 @@ -975,7 +975,7 @@ msgstr "" #: pretix/control/views/waitinglist.py:214 #: pretix/plugins/reports/exporters.py:422 #: pretix/plugins/reports/exporters.py:763 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:61 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:79 #: pretix/presale/templates/pretixpresale/organizers/index.html:67 msgid "Status" msgstr "" @@ -993,7 +993,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:401 #: pretix/base/exporters/orderlist.py:504 #: pretix/base/exporters/waitinglist.py:87 pretix/base/models/items.py:1028 -#: pretix/base/models/orders.py:150 pretix/base/models/waitinglist.py:56 +#: pretix/base/models/orders.py:188 pretix/base/models/waitinglist.py:56 #: pretix/base/pdf.py:252 #: pretix/control/templates/pretixcontrol/order/index.html:210 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:140 @@ -1074,13 +1074,13 @@ msgid "Sales channel" msgstr "" #: pretix/base/exporters/orderlist.py:255 pretix/base/models/items.py:402 -#: pretix/base/models/orders.py:176 +#: pretix/base/models/orders.py:214 #: pretix/plugins/checkinlists/exporters.py:432 msgid "Requires special attention" msgstr "" #: pretix/base/exporters/orderlist.py:256 -#: pretix/base/exporters/orderlist.py:745 pretix/base/models/orders.py:171 +#: pretix/base/exporters/orderlist.py:745 pretix/base/models/orders.py:209 #: pretix/base/models/vouchers.py:197 pretix/base/orderimport.py:623 #: pretix/control/forms/filter.py:463 #: pretix/control/templates/pretixcontrol/order/index.html:772 @@ -1106,7 +1106,7 @@ msgid "Fee type" msgstr "" #: pretix/base/exporters/orderlist.py:406 -#: pretix/base/exporters/orderlist.py:515 pretix/base/models/orders.py:1129 +#: pretix/base/exporters/orderlist.py:515 pretix/base/models/orders.py:1170 #: pretix/base/orderimport.py:499 pretix/base/pdf.py:105 #: pretix/control/templates/pretixcontrol/item/index.html:88 #: pretix/control/templates/pretixcontrol/order/change.html:157 @@ -1138,7 +1138,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:509 #: pretix/base/exporters/orderlist.py:790 pretix/base/models/checkin.py:19 -#: pretix/base/models/items.py:1361 pretix/base/models/orders.py:1111 +#: pretix/base/models/items.py:1361 pretix/base/models/orders.py:1152 #: pretix/base/models/vouchers.py:101 pretix/base/models/waitinglist.py:37 #: pretix/control/forms/event.py:1222 pretix/control/forms/filter.py:331 #: pretix/control/forms/filter.py:1387 pretix/control/forms/filter.py:1501 @@ -1183,13 +1183,13 @@ msgid "Product" msgstr "" #: pretix/base/exporters/orderlist.py:514 -#: pretix/base/exporters/waitinglist.py:89 pretix/base/models/orders.py:1121 +#: pretix/base/exporters/waitinglist.py:89 pretix/base/models/orders.py:1162 msgid "Variation" msgstr "" #: pretix/base/exporters/orderlist.py:519 -#: pretix/base/exporters/orderlist.py:524 pretix/base/forms/questions.py:387 -#: pretix/base/models/orders.py:1133 pretix/base/orderimport.py:381 +#: pretix/base/exporters/orderlist.py:524 pretix/base/forms/questions.py:391 +#: pretix/base/models/orders.py:1174 pretix/base/orderimport.py:381 #: pretix/base/pdf.py:119 pretix/control/forms/filter.py:544 #: pretix/control/templates/pretixcontrol/order/index.html:394 #: pretix/control/views/item.py:308 pretix/plugins/badges/exporters.py:258 @@ -1202,8 +1202,8 @@ msgstr "" msgid "Attendee name" msgstr "" -#: pretix/base/exporters/orderlist.py:526 pretix/base/forms/questions.py:393 -#: pretix/base/models/orders.py:1141 pretix/base/pdf.py:161 +#: pretix/base/exporters/orderlist.py:526 pretix/base/forms/questions.py:397 +#: pretix/base/models/orders.py:1182 pretix/base/pdf.py:161 #: pretix/control/templates/pretixcontrol/order/index.html:399 #: pretix/control/views/item.py:320 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:60 @@ -1265,9 +1265,9 @@ msgid "Refund states" msgstr "" #: pretix/base/exporters/orderlist.py:744 -#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:208 -#: pretix/base/models/orders.py:1341 pretix/base/models/orders.py:1712 -#: pretix/base/models/orders.py:1859 pretix/base/models/orders.py:1964 +#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:246 +#: pretix/base/models/orders.py:1382 pretix/base/models/orders.py:1753 +#: pretix/base/models/orders.py:1900 pretix/base/models/orders.py:2005 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:64 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:15 #: pretix/plugins/checkinlists/exporters.py:295 @@ -1297,8 +1297,8 @@ msgid "Status code" msgstr "" #: pretix/base/exporters/orderlist.py:745 -#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:1337 -#: pretix/base/models/orders.py:1708 +#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:1378 +#: pretix/base/models/orders.py:1749 #: pretix/control/templates/pretixcontrol/order/index.html:618 #: pretix/control/templates/pretixcontrol/order/index.html:714 #: pretix/control/templates/pretixcontrol/orders/refunds.html:67 @@ -1312,7 +1312,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:616 #: pretix/control/templates/pretixcontrol/order/index.html:711 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:84 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:19 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:29 msgid "Payment method" msgstr "" @@ -1479,7 +1479,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:34 #: pretix/plugins/banktransfer/refund_export.py:25 #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:15 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:57 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:75 msgid "Currency" msgstr "" @@ -1610,31 +1610,31 @@ msgstr "" msgid "Repeat password" msgstr "" -#: pretix/base/forms/questions.py:205 +#: pretix/base/forms/questions.py:209 msgid "Please enter a shorter name." msgstr "" -#: pretix/base/forms/questions.py:225 +#: pretix/base/forms/questions.py:229 msgctxt "phonenumber" msgid "International area code" msgstr "" -#: pretix/base/forms/questions.py:249 +#: pretix/base/forms/questions.py:253 msgctxt "phonenumber" msgid "Phone number (without international area code)" msgstr "" -#: pretix/base/forms/questions.py:415 pretix/base/forms/questions.py:719 +#: pretix/base/forms/questions.py:419 pretix/base/forms/questions.py:723 msgid "Street and Number" msgstr "" -#: pretix/base/forms/questions.py:449 pretix/base/forms/questions.py:759 +#: pretix/base/forms/questions.py:453 pretix/base/forms/questions.py:763 msgctxt "address" msgid "Select state" msgstr "" -#: pretix/base/forms/questions.py:672 pretix/base/forms/questions.py:703 -#: pretix/base/forms/questions.py:850 pretix/base/payment.py:51 +#: pretix/base/forms/questions.py:676 pretix/base/forms/questions.py:707 +#: pretix/base/forms/questions.py:854 pretix/base/payment.py:63 #: pretix/control/forms/event.py:637 pretix/control/forms/event.py:643 #: pretix/control/forms/event.py:694 pretix/control/forms/event.py:1133 #: pretix/plugins/banktransfer/payment.py:362 @@ -1642,23 +1642,23 @@ msgstr "" msgid "This field is required." msgstr "" -#: pretix/base/forms/questions.py:841 +#: pretix/base/forms/questions.py:845 msgid "You need to provide a company name." msgstr "" -#: pretix/base/forms/questions.py:843 +#: pretix/base/forms/questions.py:847 msgid "You need to provide your name." msgstr "" -#: pretix/base/forms/questions.py:861 pretix/control/views/orders.py:1234 +#: pretix/base/forms/questions.py:865 pretix/control/views/orders.py:1234 msgid "Your VAT ID does not match the selected country." msgstr "" -#: pretix/base/forms/questions.py:873 +#: pretix/base/forms/questions.py:877 msgid "This VAT ID is not valid. Please re-check your input." msgstr "" -#: pretix/base/forms/questions.py:878 +#: pretix/base/forms/questions.py:882 msgid "" "Your VAT ID could not be checked, as the VAT checking service of your " "country is currently not available. We will therefore need to charge VAT on " @@ -1666,7 +1666,7 @@ msgid "" "process." msgstr "" -#: pretix/base/forms/questions.py:886 +#: pretix/base/forms/questions.py:890 msgid "" "Your VAT ID could not be checked, as the VAT checking service of your " "country returned an incorrect result. We will therefore need to charge VAT " @@ -1739,7 +1739,7 @@ msgid "Invalid placeholder(s): %(value)s" msgstr "" #: pretix/base/forms/widgets.py:153 pretix/base/forms/widgets.py:158 -#: pretix/base/models/orders.py:2254 +#: pretix/base/models/orders.py:2295 msgid "Business customer" msgstr "" @@ -1956,7 +1956,7 @@ msgstr "" msgid "Modern Invoice Renderer" msgstr "" -#: pretix/base/models/auth.py:92 pretix/base/models/orders.py:2256 +#: pretix/base/models/auth.py:92 pretix/base/models/orders.py:2297 #: pretix/base/settings.py:2462 pretix/base/settings.py:2473 #: pretix/control/templates/pretixcontrol/users/index.html:42 msgid "Full name" @@ -2230,7 +2230,7 @@ msgstr "" msgid "Event series" msgstr "" -#: pretix/base/models/event.py:431 pretix/base/payment.py:312 +#: pretix/base/models/event.py:431 pretix/base/payment.py:324 msgid "Restrict to specific sales channels" msgstr "" @@ -2239,8 +2239,8 @@ msgid "Only sell tickets for this event on the following sales channels." msgstr "" #: pretix/base/models/event.py:438 pretix/base/models/items.py:256 -#: pretix/base/models/items.py:1354 pretix/base/models/orders.py:140 -#: pretix/base/models/orders.py:2199 pretix/base/models/vouchers.py:95 +#: pretix/base/models/items.py:1354 pretix/base/models/orders.py:178 +#: pretix/base/models/orders.py:2240 pretix/base/models/vouchers.py:95 #: pretix/base/models/waitinglist.py:31 pretix/base/notifications.py:178 #: pretix/control/templates/pretixcontrol/search/orders.html:44 #: pretix/presale/templates/pretixpresale/event/waitinglist.html:18 @@ -2537,7 +2537,7 @@ msgstr "" msgid "This product will not be sold before the given date." msgstr "" -#: pretix/base/models/items.py:341 pretix/base/payment.py:236 +#: pretix/base/models/items.py:341 pretix/base/payment.py:248 msgid "Available until" msgstr "" @@ -2977,7 +2977,7 @@ msgstr "" msgid "Leave empty for an unlimited number of tickets." msgstr "" -#: pretix/base/models/items.py:1374 pretix/base/models/orders.py:1115 +#: pretix/base/models/items.py:1374 pretix/base/models/orders.py:1156 #: pretix/control/templates/pretixcontrol/checkin/index.html:67 msgid "Item" msgstr "" @@ -3081,43 +3081,43 @@ msgstr "" msgid "Tax rule {val}" msgstr "" -#: pretix/base/models/orders.py:120 +#: pretix/base/models/orders.py:158 msgid "pending" msgstr "" -#: pretix/base/models/orders.py:121 +#: pretix/base/models/orders.py:159 msgid "paid" msgstr "" -#: pretix/base/models/orders.py:122 +#: pretix/base/models/orders.py:160 msgid "expired" msgstr "" -#: pretix/base/models/orders.py:123 +#: pretix/base/models/orders.py:161 msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:154 pretix/control/forms/filter.py:467 +#: pretix/base/models/orders.py:192 pretix/control/forms/filter.py:467 msgid "Locale" msgstr "" -#: pretix/base/models/orders.py:164 pretix/base/models/orders.py:2211 +#: pretix/base/models/orders.py:202 pretix/base/models/orders.py:2252 #: pretix/control/forms/orders.py:41 msgid "Expiration date" msgstr "" -#: pretix/base/models/orders.py:168 pretix/control/forms/filter.py:478 +#: pretix/base/models/orders.py:206 pretix/control/forms/filter.py:478 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:57 msgid "Total amount" msgstr "" -#: pretix/base/models/orders.py:172 pretix/base/models/vouchers.py:198 +#: pretix/base/models/orders.py:210 pretix/base/models/vouchers.py:198 msgid "" "The text entered in this field will not be visible to the user and is " "available for your convenience." msgstr "" -#: pretix/base/models/orders.py:178 +#: pretix/base/models/orders.py:216 msgid "" "If you set this, the check-in app will show a visible warning that tickets " "of this order require special attention. This will not show any details or " @@ -3125,237 +3125,237 @@ msgid "" "cases." msgstr "" -#: pretix/base/models/orders.py:190 pretix/base/models/orders.py:1152 +#: pretix/base/models/orders.py:228 pretix/base/models/orders.py:1193 msgid "Meta information" msgstr "" -#: pretix/base/models/orders.py:202 pretix/control/forms/filter.py:473 +#: pretix/base/models/orders.py:240 pretix/control/forms/filter.py:473 msgid "E-mail address verified" msgstr "" -#: pretix/base/models/orders.py:767 +#: pretix/base/models/orders.py:805 msgid "" "The payment can not be accepted as the last date of payments configured in " "the payment settings is over." msgstr "" -#: pretix/base/models/orders.py:769 +#: pretix/base/models/orders.py:807 msgid "" "The payment can not be accepted as the order is expired and you configured " "that no late payments should be accepted in the payment settings." msgstr "" -#: pretix/base/models/orders.py:771 +#: pretix/base/models/orders.py:809 msgid "This order is not yet approved by the event organizer." msgstr "" -#: pretix/base/models/orders.py:791 +#: pretix/base/models/orders.py:829 #, python-brace-format msgid "The ordered product \"{item}\" is no longer available." msgstr "" -#: pretix/base/models/orders.py:792 +#: pretix/base/models/orders.py:830 #, python-brace-format msgid "The seat \"{seat}\" is no longer available." msgstr "" -#: pretix/base/models/orders.py:793 +#: pretix/base/models/orders.py:831 #, python-brace-format msgid "The voucher \"{voucher}\" no longer has sufficient budget." msgstr "" -#: pretix/base/models/orders.py:794 +#: pretix/base/models/orders.py:832 #, python-brace-format msgid "The voucher \"{voucher}\" has been used in the meantime." msgstr "" -#: pretix/base/models/orders.py:922 pretix/base/services/orders.py:862 +#: pretix/base/models/orders.py:960 pretix/base/services/orders.py:862 #: pretix/control/views/event.py:701 #: pretix/presale/templates/pretixpresale/event/order.html:63 #, python-format msgid "Your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1033 +#: pretix/base/models/orders.py:1074 msgid "" msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" @@ -3509,7 +3509,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "" @@ -4078,20 +4078,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "" -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4099,45 +4109,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4146,94 +4156,94 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4242,11 +4252,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4254,87 +4264,87 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "" -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "" -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "" -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "" -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "" -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" @@ -10253,7 +10263,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10347,7 +10357,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -10512,10 +10522,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -10674,7 +10683,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -11472,7 +11481,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -15747,7 +15756,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -16912,7 +16921,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -17219,19 +17228,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -17794,7 +17804,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -17812,16 +17822,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -17895,8 +17905,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -17998,7 +18008,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18015,17 +18025,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -18418,12 +18428,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -18433,34 +18443,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -18468,20 +18478,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -18492,73 +18502,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -18566,23 +18633,62 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +msgid "Destination" +msgstr "" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +msgid "Account number" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/nl_BE/LC_MESSAGES/djangojs.po b/src/pretix/locale/nl_BE/LC_MESSAGES/djangojs.po index 81ddb2c3d..5ab08bb59 100644 --- a/src/pretix/locale/nl_BE/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/nl_BE/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -41,20 +41,23 @@ msgstr "" msgid "Total revenue" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:15 msgid "Contacting Stripe …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:60 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:72 msgid "Total" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152 -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:242 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:265 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:282 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:315 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:339 msgid "Confirming your payment …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:159 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:289 msgid "Contacting your bank …" msgstr "" diff --git a/src/pretix/locale/nl_Informal/LC_MESSAGES/django.po b/src/pretix/locale/nl_Informal/LC_MESSAGES/django.po index f10963da1..34ea18381 100644 --- a/src/pretix/locale/nl_Informal/LC_MESSAGES/django.po +++ b/src/pretix/locale/nl_Informal/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2021-01-29 11:23+0000\n" "Last-Translator: Maarten van den Berg \n" "Language-Team: Dutch (informal) " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Leeg, als dit product geen toegangsbewijs is" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Bedrijfsnaam" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Selecteer land" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "aangemaakt" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "openstaand" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "bevestigd" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "geannuleerd" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "mislukt" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "terugbetaald" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Betalingsinformatie" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "Aanmelding voor evenement bevestigd: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Betaling ontvangen voor je bestelling: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "extern begonnen" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "aangemaakt" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "onderweg" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "klaar" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "mislukt" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "geannuleerd" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Organisator" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Klant" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Extern" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "Reden voor de terugbetaling" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" @@ -3529,66 +3529,66 @@ msgstr "" "Deze tekst kan aan de gebruiker getoond worden, bijvoorbeeld als deel van de " "betalingsinformatie." -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Betalingskosten" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Verzendkosten" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Servicekosten" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Annuleringskosten" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Overige kosten" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Cadeaubon" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Waarde" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Besteld product" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "Je aanmelding: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "Winkelwagen-ID (bijv. sessiesleutel)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Product in winkelwagen" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Producten in winkelwagen" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Alleen voor zakelijke klanten binnen de EU." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" "Deze referentie wordt voor je op de factuur afgedrukt en kan je voor je " @@ -3760,7 +3760,7 @@ msgstr "" "alleen in na overleg met een belastingadviseur. Er wordt geen garantie " "gegeven voor juiste belastingberekening. GEBRUIK OP EIGEN RISICO." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "Land van handelaar" @@ -4374,22 +4374,36 @@ msgstr "Je moet een specifieke stoel kiezen." msgid "Ambiguous option selected." msgstr "Onduidelijke optie geselecteerd." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "Toepassen" + +#: pretix/base/payment.py:54 +#, fuzzy +#| msgid "Android (Google Play)" +msgctxt "payment" +msgid "Google Pay" +msgstr "Android (Google Play)" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Betaalmethode inschakelen" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Gebruikers zullen na de opgegeven datum deze betalingsprovider niet kunnen " "kiezen." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Tekst op facturen" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4401,11 +4415,11 @@ msgstr "" "de bestelling is betaald. Als de factuur later wordt gegenereerd wordt er " "een tekst weergegeven die aangeeft dat de bestelling al is betaald." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Minimum totaalbedrag bestelling" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4416,11 +4430,11 @@ msgstr "" "voor deze vergelijking kan worden berekend zonder rekening te houden met de " "kosten die zijn ingesteld voor deze betalingsmethode." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Maximum totaalbedrag bestelling" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4431,23 +4445,23 @@ msgstr "" "voor deze vergelijking kan worden berekend zonder rekening te houden met de " "kosten die zijn ingesteld voor deze betalingsmethode." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Extra kosten" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Absolute waarde" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "Percentage van het totaalbedrag." -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Bereken de toeslag op basis van de totale waarde inclusief toeslag." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4461,11 +4475,11 @@ msgstr "" "over wat dit doet. Vergeet niet om hierboven de juiste toeslagen in te " "stellen!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "Beperk tot landen" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4475,18 +4489,18 @@ msgstr "" "de gekozen landen. Alle landen zijn toegestaan als je geen landen " "selecteert. Dit is alleen mogelijk als het factuuradres verplicht is." -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" "Sta het gebruik van deze betalingsprovider alleen toe voor de geselecteerde " "verkoopkanalen." -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "Betaalmethode verbergen" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." @@ -4494,27 +4508,27 @@ msgstr "" "De betalingsmethode zal standaard niet getoond worden, maar alleen aan " "mensen die de winkel openen via een speciale link." -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "Link om betalingsmethode in te schakelen" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" "Deel deze link met klanten die deze betalingsmethode moeten kunnen gebruiken." -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "De betaling voor deze factuur is al ontvangen." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" "Automatische terugbetalingen worden niet ondersteund door deze " "betalingsprovider." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4522,21 +4536,21 @@ msgstr "" "Er is geen betaling nodig omdat deze bestelling alleen gratis producten " "omvat." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Gratis" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Kaartjesbureau" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "Handmatige betaling" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." @@ -4544,15 +4558,15 @@ msgstr "" "In de testmodus kan je bestellingen handmatig als betaald markeren in de " "backend." -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "Naam van betalingsmethode" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "Beschrijving van betalingproces tijdens afrekenen" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4561,11 +4575,11 @@ msgstr "" "deze betalingsmethode selecteert. De tekst moet een korte beschrijving van " "deze betaalmethode geven." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "Beschrijving van betalingsproces in bevestigingsmails" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, fuzzy, python-brace-format #| msgid "" #| "This text will be included for the {payment_info} placeholder in order " @@ -4584,11 +4598,11 @@ msgstr "" "plaatsaanduidingen {order}, {total}, {currency} en {total_with_currency} " "gebruiken." -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "Beschrijving van betalingsproces voor openstaande bestellingen" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, fuzzy, python-brace-format #| msgid "" #| "This text will be shown on the order confirmation page for pending " @@ -4605,57 +4619,57 @@ msgstr "" "de betaling. Je kan hier de plaatsaanduidingen {order}, {total}, {currency} " "en {total_with_currency} gebruiken." -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "Verrekening" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "Je voerde een bestelling in die niet kon worden gevonden." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "Verrekend met bestellingen: %s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "In de testmodus kunnen alleen testcadeaubonnen worden gebruikt." -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "Je kan niet met een cadeaubon betalen wanneer je een cadeaubon koopt." -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "Deze cadeaubon ondersteunt deze munteenheid niet." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "Deze cadeaubon kan alleen in de testmodus worden gebruikt." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "Alleen testcadeaubonnen kunnen in de testmodus worden gebruikt." -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "Deze cadeaubon is niet meer geldig." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "Deze cadeaubon heeft geen tegoed meer." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "Deze cadeaubon wordt al voor je betaling gebruikt." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." @@ -4663,11 +4677,11 @@ msgstr "" "Je cadeaubon wordt gebruikt, maar er moet nog {} worden betaald. Kies een " "betaalmethode voor het restbedrag." -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "Je cadeaubon is succesvol gebruikt." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." @@ -4676,11 +4690,11 @@ msgstr "" "alleen op de eerste pagina van de winkel worden gebruikt, onder de " "productkeuze." -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "Deze cadeauboncode is onbekend." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." @@ -4688,12 +4702,12 @@ msgstr "" "Deze cadeaubon kan niet worden gebruikt, omdat de code niet uniek is. Neem " "contact op met de organisator van dit evenement." -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" "Deze cadeaubon wordt niet geaccepteerd door de organisator van dit evenement." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "Deze cadeaubon is in de tussentijd gebruikt. Probeer het opnieuw." @@ -11620,7 +11634,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -11727,7 +11741,7 @@ msgstr "Stel nieuw wachtwoord in" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Opslaan" @@ -11904,10 +11918,9 @@ msgstr "Soort kaartinvoer" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Kaartnummer" @@ -12069,7 +12082,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -13065,7 +13078,7 @@ msgstr "Geïnstalleerde plugins" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Je wijzigingen zijn opgeslagen." @@ -17946,7 +17959,7 @@ msgstr "De nieuwe inchecklijst is aangemaakt." #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "We konden je wijzigingen niet opslaan. Zie hieronder voor details." @@ -19220,7 +19233,7 @@ msgstr "Badges" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -19560,19 +19573,20 @@ msgstr "Vul je bankrekeninggegevens in." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Rekeninghouder" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "Bank" @@ -20205,7 +20219,7 @@ msgstr "" "verwerking toe." #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "PayPal" @@ -20226,16 +20240,16 @@ msgstr "" msgid "PayPal account" msgstr "PayPal-account" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "{text}" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "Klik hier voor instructies over hoe de benodigde sleutels te krijgen" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "Endpoint" @@ -20327,8 +20341,8 @@ msgstr "" "PayPal heeft de betaling nog niet goedgekeurd. We zullen het aan je melden " "zodra de betaling is voltooid." -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "Er is een fout opgetreden bij het versturen van de bevestigingsmail." @@ -20444,7 +20458,7 @@ msgid "Last update" msgstr "Laatste update" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "Totaalwaarde" @@ -20465,17 +20479,17 @@ msgstr "" "op als dit langer dan een paar uur duurt." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "Het betalingsproces is begonnen in een nieuw venster." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "Is het venster om je betaling uit te voeren niet geopend?" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "Klik hier om het venster te openen." @@ -20910,12 +20924,14 @@ msgstr "" "zodra je de eerste bestellingen ontvangt!" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "Stripe" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" "Deze plug-in staat je toe om creditcardbetalingen te ontvangen via Stripe" @@ -20928,37 +20944,42 @@ msgstr "" "De opgegeven key \"%(value)s\" ziet er niet geldig uit. Hij moet beginnen " "met \"%(prefix)s\"." -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "Stripe Connect: App-toeslag (procent)" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "Stripe Connect: App-toeslag (max.)" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "Stripe Connect: App-toeslag (min.)" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "Om betalingen via Stripe te accepteren heb je een account bij Stripe nodig. " "Door te klikken op de volgende knop kan je een nieuw Stripe-account " "aanmaken, of pretix met een bestaand account verbinden." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "Verbinden met Stripe" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "Verbinding met Stripe verbreken" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -20970,22 +20991,22 @@ msgstr "" "annuleren wanneer betalingen extern worden terugbetaald, en om asynchrone " "betalingsmethoden zoals SOFORT te verwerken." -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "MOTO-betalingen voor wederverkopers inschakelen" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" "Beperkte functie (moet eerst door Stripe-support voor jouw account worden " "ingeschakeld)" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "Stripe Integration security guide" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -21002,21 +21023,21 @@ msgstr "" "verplicht worden om jaarlijkse PCI-DSS-evaluaties in te voeren, zoals het 40 " "pagina's tellende SAQ D. Zie de %s voor meer informatie over dit onderwerp." -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "Stripe-account" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "Live" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "Testing" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." @@ -21024,15 +21045,15 @@ msgstr "" "Als uw evenement in testmodus is zullen we altijd de test-API van Stripe " "gebruiken, onafhankelijk van deze instelling." -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Publiceerbare sleutel" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Geheime sleutel" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." @@ -21040,39 +21061,96 @@ msgstr "" "Het land waarin je Stripe-account is geregistreerd. Dit is meestal het land " "waarin je woont of gevestigd bent." -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Creditcardbetalingen" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "Moet eerst in je Stripe-account worden aangezet." -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "iDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "Alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "SOFORT" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -21084,23 +21162,64 @@ msgstr "" "gevallen tot 14 dagen duren om verwerkt te worden. Activeer " "deze betalingsmethode alleen als je betalingstermijn deze vertraging toelaat." -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "EPS" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "Multibanco" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "Przelewy24" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "WeChat Pay" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Beschrijving" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of gebruiken om een betaling uit te voeren. Er zal geen echt " "geld worden overgemaakt." -#: pretix/plugins/stripe/payment.py:407 pretix/plugins/stripe/payment.py:757 -#: pretix/plugins/stripe/payment.py:852 +#: pretix/plugins/stripe/payment.py:575 +msgid "No payment information found." +msgstr "Geen betalingsinformatie gevonden." + +#: pretix/plugins/stripe/payment.py:591 +msgid "Stripe returned an error" +msgstr "Stripe meldde een fout" + +#: pretix/plugins/stripe/payment.py:616 +msgid "" +"We had trouble communicating with Stripe. Please try again and contact " +"support if the problem persists." +msgstr "" +"We hadden problemen met het communiceren met Stripe. Probeer het opnieuw, en " +"neem contact op met ons als het probleem aanhoudt." + +#: pretix/plugins/stripe/payment.py:689 +msgid "You may need to enable JavaScript for Stripe payments." +msgstr "Je moet mogelijk JavaScript inschakelen voor Stripe-betalingen." + +#: pretix/plugins/stripe/payment.py:761 pretix/plugins/stripe/payment.py:863 +#: pretix/plugins/stripe/payment.py:922 #, python-format msgid "Stripe reported an error with your card: %s" msgstr "Stripe meldde een fout met je kaart: %s" -#: pretix/plugins/stripe/payment.py:434 pretix/plugins/stripe/payment.py:567 -#: pretix/plugins/stripe/payment.py:770 pretix/plugins/stripe/payment.py:864 -#: pretix/plugins/stripe/payment.py:1436 +#: pretix/plugins/stripe/payment.py:769 pretix/plugins/stripe/payment.py:875 +#: pretix/plugins/stripe/payment.py:936 pretix/plugins/stripe/payment.py:1002 msgid "" "We had trouble communicating with Stripe. Please try again and get in touch " "with us if this problem persists." @@ -21127,7 +21265,7 @@ msgstr "" "We hadden problemen met het communiceren met Stripe. Probeer het opnieuw, en " "neem contact op met ons als het probleem aanhoudt." -#: pretix/plugins/stripe/payment.py:452 pretix/plugins/stripe/payment.py:804 +#: pretix/plugins/stripe/payment.py:801 msgid "" "Your payment is pending completion. We will inform you as soon as the " "payment completed." @@ -21135,244 +21273,328 @@ msgstr "" "We wachten tot je betaling is voltooid. We zullen het aan je melden wanneer " "je betaling is gelukt." -#: pretix/plugins/stripe/payment.py:461 pretix/plugins/stripe/payment.py:818 +#: pretix/plugins/stripe/payment.py:808 +msgid "Your payment failed. Please try again." +msgstr "Je betaling is mislukt. Probeer het alsjeblieft opnieuw." + +#: pretix/plugins/stripe/payment.py:814 pretix/plugins/stripe/payment.py:970 #, python-format msgid "Stripe reported an error: %s" msgstr "Stripe meldde een fout: %s" -#: pretix/plugins/stripe/payment.py:517 -msgid "No payment information found." -msgstr "Geen betalingsinformatie gevonden." - -#: pretix/plugins/stripe/payment.py:538 +#: pretix/plugins/stripe/payment.py:963 +#, fuzzy +#| msgid "" +#| "Your payment is pending completion. We will inform you as soon as the " +#| "payment completed." msgid "" -"We had trouble communicating with Stripe. Please try again and contact " -"support if the problem persists." +"Your payment is pending completion. We will inform you as soon as the " +"payment is completed." msgstr "" -"We hadden problemen met het communiceren met Stripe. Probeer het opnieuw, en " -"neem contact op met ons als het probleem aanhoudt." - -#: pretix/plugins/stripe/payment.py:542 -msgid "Stripe returned an error" -msgstr "Stripe meldde een fout" +"We wachten tot je betaling is voltooid. We zullen het aan je melden wanneer " +"je betaling is gelukt." -#: pretix/plugins/stripe/payment.py:638 +#: pretix/plugins/stripe/payment.py:1035 msgid "Credit card via Stripe" msgstr "Creditcard via Stripe" -#: pretix/plugins/stripe/payment.py:639 +#: pretix/plugins/stripe/payment.py:1036 msgid "Credit card" msgstr "Creditcard" -#: pretix/plugins/stripe/payment.py:666 -msgid "You may need to enable JavaScript for Stripe payments." -msgstr "Je moet mogelijk JavaScript inschakelen voor Stripe-betalingen." +#: pretix/plugins/stripe/payment.py:1116 +#, fuzzy +#| msgid "EPS via Stripe" +msgid "SEPA Debit via Stripe" +msgstr "EPS via Stripe" -#: pretix/plugins/stripe/payment.py:812 -msgid "Your payment failed. Please try again." -msgstr "Je betaling is mislukt. Probeer het alsjeblieft opnieuw." +#: pretix/plugins/stripe/payment.py:1117 +msgid "SEPA Debit" +msgstr "" -#: pretix/plugins/stripe/payment.py:885 +#: pretix/plugins/stripe/payment.py:1155 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Name" +msgstr "Rekeninghouder" + +#: pretix/plugins/stripe/payment.py:1159 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Street" +msgstr "Rekeninghouder" + +#: pretix/plugins/stripe/payment.py:1168 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Postal Code" +msgstr "Rekeninghouder" + +#: pretix/plugins/stripe/payment.py:1177 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder City" +msgstr "Rekeninghouder" + +#: pretix/plugins/stripe/payment.py:1186 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Country" +msgstr "Rekeninghouder" + +#: pretix/plugins/stripe/payment.py:1224 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Affirm via Stripe" +msgstr "Alipay via Stripe" + +#: pretix/plugins/stripe/payment.py:1263 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Klarna via Stripe" +msgstr "Alipay via Stripe" + +#: pretix/plugins/stripe/payment.py:1368 msgid "giropay via Stripe" msgstr "giropay via Stripe" -#: pretix/plugins/stripe/payment.py:917 pretix/plugins/stripe/payment.py:1084 -#: pretix/plugins/stripe/payment.py:1236 +#: pretix/plugins/stripe/payment.py:1372 +msgid "" +"giropay is an online payment method available to all customers of most " +"German banks, usually after one-time activation. Please keep your online " +"banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1383 pretix/plugins/stripe/payment.py:1451 +#: pretix/plugins/stripe/payment.py:1554 msgid "unknown name" msgstr "onbekende naam" -#: pretix/plugins/stripe/payment.py:949 pretix/plugins/stripe/payment.py:1001 -#: pretix/plugins/stripe/payment.py:1116 pretix/plugins/stripe/payment.py:1268 -#: pretix/plugins/stripe/payment.py:1371 +#: pretix/plugins/stripe/payment.py:1395 pretix/plugins/stripe/payment.py:1415 +#: pretix/plugins/stripe/payment.py:1459 pretix/plugins/stripe/payment.py:1562 +#: pretix/plugins/stripe/payment.py:1654 #, python-brace-format msgid "Bank account at {bank}" msgstr "Bankrekening bij {bank}" -#: pretix/plugins/stripe/payment.py:957 +#: pretix/plugins/stripe/payment.py:1403 msgid "iDEAL via Stripe" msgstr "iDEAL via Stripe" -#: pretix/plugins/stripe/payment.py:1009 +#: pretix/plugins/stripe/payment.py:1407 +msgid "" +"iDEAL is an online payment method available to customers of Dutch banks. " +"Please keep your online banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1428 msgid "Alipay via Stripe" msgstr "Alipay via Stripe" -#: pretix/plugins/stripe/payment.py:1052 +#: pretix/plugins/stripe/payment.py:1433 +msgid "" +"This payment method is available to customers of the Chinese payment system " +"Alipay. Please keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1440 msgid "Bancontact via Stripe" msgstr "Bancontact via Stripe" -#: pretix/plugins/stripe/payment.py:1124 +#: pretix/plugins/stripe/payment.py:1472 msgid "SOFORT via Stripe" msgstr "SOFORT via Stripe" -#: pretix/plugins/stripe/payment.py:1141 +#: pretix/plugins/stripe/payment.py:1473 +#, fuzzy +#| msgid "Payment by bank transfer" +msgid "SOFORT (instant bank transfer)" +msgstr "Betaling via bankoverschrijving" + +#: pretix/plugins/stripe/payment.py:1491 msgid "Country of your bank" msgstr "Land van je bank" -#: pretix/plugins/stripe/payment.py:1142 +#: pretix/plugins/stripe/payment.py:1492 msgid "Germany" msgstr "Duitsland" -#: pretix/plugins/stripe/payment.py:1143 +#: pretix/plugins/stripe/payment.py:1493 msgid "Austria" msgstr "Oostenrijk" -#: pretix/plugins/stripe/payment.py:1144 +#: pretix/plugins/stripe/payment.py:1494 msgid "Belgium" msgstr "België" -#: pretix/plugins/stripe/payment.py:1145 +#: pretix/plugins/stripe/payment.py:1495 msgid "Netherlands" msgstr "Nederland" -#: pretix/plugins/stripe/payment.py:1146 +#: pretix/plugins/stripe/payment.py:1496 msgid "Spain" msgstr "Spanje" -#: pretix/plugins/stripe/payment.py:1193 +#: pretix/plugins/stripe/payment.py:1532 #, python-brace-format msgid "Bank account {iban} at {bank}" msgstr "Bankrekening {iban} bij {bank}" -#: pretix/plugins/stripe/payment.py:1204 +#: pretix/plugins/stripe/payment.py:1543 msgid "EPS via Stripe" msgstr "EPS via Stripe" -#: pretix/plugins/stripe/payment.py:1276 +#: pretix/plugins/stripe/payment.py:1575 msgid "Multibanco via Stripe" msgstr "Multibanco via Stripe" -#: pretix/plugins/stripe/payment.py:1323 +#: pretix/plugins/stripe/payment.py:1624 msgid "Przelewy24 via Stripe" msgstr "Przelewy24 via Stripe" -#: pretix/plugins/stripe/payment.py:1379 +#: pretix/plugins/stripe/payment.py:1628 +msgid "" +"Przelewy24 is an online payment method available to customers of Polish " +"banks. Please keep your online banking account and login information " +"available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1662 msgid "WeChat Pay via Stripe" msgstr "WeChat Pay via Stripe" -#: pretix/plugins/stripe/signals.py:65 +#: pretix/plugins/stripe/payment.py:1667 +msgid "" +"This payment method is available to users of the Chinese app WeChat. Please " +"keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1690 +#, fuzzy +#| msgid "Payment via Stripe" +msgid "PayPal via Stripe" +msgstr "Betaling via Stripe" + +#: pretix/plugins/stripe/payment.py:1697 +#, fuzzy +#| msgid "EPS via Stripe" +msgid "Swish via Stripe" +msgstr "EPS via Stripe" + +#: pretix/plugins/stripe/payment.py:1702 +msgid "" +"This payment method is available to users of the Swedish apps Swish and " +"BankID. Please have your app ready." +msgstr "" + +#: pretix/plugins/stripe/signals.py:70 msgid "Charge succeeded." msgstr "Betaling geslaagd." -#: pretix/plugins/stripe/signals.py:66 +#: pretix/plugins/stripe/signals.py:71 msgid "Charge refunded." msgstr "Transactie teruggestort." -#: pretix/plugins/stripe/signals.py:67 +#: pretix/plugins/stripe/signals.py:72 msgid "Charge updated." msgstr "Transactie bijgewerkt." -#: pretix/plugins/stripe/signals.py:68 +#: pretix/plugins/stripe/signals.py:73 msgid "Charge pending" msgstr "Transactie staat open" -#: pretix/plugins/stripe/signals.py:69 +#: pretix/plugins/stripe/signals.py:74 msgid "Payment authorized." msgstr "Betaling goedgekeurd." -#: pretix/plugins/stripe/signals.py:70 +#: pretix/plugins/stripe/signals.py:75 msgid "Payment authorization canceled." msgstr "Betalingsgoedkeuring geannuleerd." -#: pretix/plugins/stripe/signals.py:71 +#: pretix/plugins/stripe/signals.py:76 msgid "Payment authorization failed." msgstr "Betalingsgoedkeuring mislukt." -#: pretix/plugins/stripe/signals.py:77 +#: pretix/plugins/stripe/signals.py:82 msgid "Charge failed. Reason: {}" msgstr "Transactie mislukt. Reden: {}" -#: pretix/plugins/stripe/signals.py:79 +#: pretix/plugins/stripe/signals.py:84 msgid "Dispute created. Reason: {}" msgstr "Geschil aangemaakt. Reden: {}" -#: pretix/plugins/stripe/signals.py:81 +#: pretix/plugins/stripe/signals.py:86 msgid "Dispute updated. Reason: {}" msgstr "Geschil bijgewerkt. Reden: {}" -#: pretix/plugins/stripe/signals.py:83 +#: pretix/plugins/stripe/signals.py:88 msgid "Dispute closed. Status: {}" msgstr "Geschil gesloten. Status: {}" -#: pretix/plugins/stripe/signals.py:86 +#: pretix/plugins/stripe/signals.py:91 msgid "Stripe reported an event: {}" msgstr "Stripe meldde een gebeurtenis: {}" -#: pretix/plugins/stripe/signals.py:97 +#: pretix/plugins/stripe/signals.py:102 msgid "Stripe Connect: Client ID" msgstr "Stripe Connect: Client ID" -#: pretix/plugins/stripe/signals.py:104 +#: pretix/plugins/stripe/signals.py:109 msgid "Stripe Connect: Secret key" msgstr "Stripe Connect: Geheime sleutel" -#: pretix/plugins/stripe/signals.py:111 +#: pretix/plugins/stripe/signals.py:116 msgid "Stripe Connect: Publishable key" msgstr "Stripe Connect: Publiceerbare sleutel" -#: pretix/plugins/stripe/signals.py:118 +#: pretix/plugins/stripe/signals.py:123 msgid "Stripe Connect: Secret key (test)" msgstr "Stripe Connect: Geheime sleutel (test)" -#: pretix/plugins/stripe/signals.py:125 +#: pretix/plugins/stripe/signals.py:130 msgid "Stripe Connect: Publishable key (test)" msgstr "Stripe Connect: Publiceerbare sleutel (test)" -#: pretix/plugins/stripe/signals.py:170 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:6 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:9 +#: pretix/plugins/stripe/signals.py:156 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:3 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:9 msgid "Stripe Connect" msgstr "Stripe Connect" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"De Stripe-transactie %(charge)s is gelukt, maar de " -"bestelling %(order)s is ondertussen al op een andere manier betaald. " -"Controleer je informatie en betaal het geld terug via de interface van " -"Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"De Stripe-transactie %(charge)s is gelukt, maar de " -"bestelling %(order)s is verlopen en het product is ondertussen uitverkocht. " -"Hierom kon de betaling niet worden geaccepteerd. Neem contact op met de " -"gebruiker en betaal het geld terug via de website van Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"Stripe meldde dat de transactie %(charge)s is " -"terugbetaald. Wil je de bijbehorende bestelling (%(order)s) als terugbetaald " -"aanmerken?" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "Het totaalbedrag zal worden afgeschreven van je creditcard." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "Kaarttype" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "Het totaalbedrag zal worden afgeschreven van je creditcard." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Rekeninghouder" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -21382,7 +21604,7 @@ msgstr "" "betalingsprovider om de betaling uit te voeren. Hierna word je naar deze " "website teruggestuurd, en kan je de kaartjes downloaden." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" @@ -21391,11 +21613,11 @@ msgstr "" "de betaling waar mogelijk uitgesloten zal zijn van Strong Customer " "Authentication (SCA)" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "Zet JavaScript aan om een creditcardbetaling uit te voeren." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." @@ -21403,15 +21625,15 @@ msgstr "" "Je hebt al een creditcardnummer opgegeven dat we zullen gebruiken om de " "betaling te voltooien." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "Gebruik een andere kaart" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "OF" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -21419,26 +21641,80 @@ msgstr "" "Je betaling zal worden verwerkt door Stripe, Inc. Je creditcardgegevens " "zullen direct naar Stripe worden verzonden, en nooit op onze servers komen." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "Zet JavaScript aan om een creditcardbetaling uit te voeren." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"Je hebt al een creditcardnummer opgegeven dat we zullen gebruiken om de " +"betaling te voltooien." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "Gebruik een andere kaart" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "Transactienummer" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "Naam betaler" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "MOTO" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "Naam betaler" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "Foutmelding" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to regenerate your emergency codes?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Wil je echt je noodherstelcodes opnieuw genereren?" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Connect" +msgid "Disconnect" +msgstr "Verbinden" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -21446,7 +21722,7 @@ msgstr "" "We wachten op een antwoord van de betalingsprovider over je betaling. Neem " "contact met ons op als dit langer dan een paar dagen duurt." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." @@ -21454,11 +21730,11 @@ msgstr "" "Je moet je betaling bevestigen. Klik op de link hieronder om dit te doen of " "om een nieuwe betaling te starten." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "Bevestig betaling" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." @@ -21466,55 +21742,59 @@ msgstr "" "Scan de QR-code hieronder om je WeChat-betaling uit te voeren. Als je de " "betaling hebt afgerond kan je deze pagina verversen." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "De betalingstransactie kon om de volgende reden niet voltooid worden:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Onbekende reden" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Betaal bestelling" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "Betaling bevestigen: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "Betaling bevestigen…" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" "Er trad een fout op tijdens het verbinden met Stripe, probeer het opnieuw." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "Stripe meldde een fout: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" "Je Stripe-account is nu verbonden met pretix. Je kan hieronder de " "instellingen wijzigen." -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "De verbinding met je Stripe-account is verbroken." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -21522,7 +21802,7 @@ msgstr "" "Sorry, er is iets misgegaan in het betalingsproces. Klik op de link in je " "email om door te gaan." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -21530,7 +21810,7 @@ msgstr "" "We konden je creditcardbetaling niet autoriseren. Probeer het opnieuw, en " "neem contact met ons op als het probleem aanhoudt." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "Sorry, er is iets misgegaan in het betalingsproces." @@ -23613,6 +23893,40 @@ msgstr "Schrijftoegang" msgid "Kosovo" msgstr "Kosovo" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "De Stripe-transactie %(charge)s is gelukt, maar de " +#~ "bestelling %(order)s is ondertussen al op een andere manier betaald. " +#~ "Controleer je informatie en betaal het geld terug via de interface van " +#~ "Stripe." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "De Stripe-transactie %(charge)s is gelukt, maar de " +#~ "bestelling %(order)s is verlopen en het product is ondertussen " +#~ "uitverkocht. Hierom kon de betaling niet worden geaccepteerd. Neem " +#~ "contact op met de gebruiker en betaal het geld terug via de website van " +#~ "Stripe." + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "Stripe meldde dat de transactie %(charge)s is " +#~ "terugbetaald. Wil je de bijbehorende bestelling (%(order)s) als " +#~ "terugbetaald aanmerken?" + #, fuzzy #~| msgid "Only include tickets for dates on or before this date." #~ msgid "Only include orders issued on or before this date." diff --git a/src/pretix/locale/nl_Informal/LC_MESSAGES/djangojs.po b/src/pretix/locale/nl_Informal/LC_MESSAGES/djangojs.po index a53cbbb5d..bf9f28039 100644 --- a/src/pretix/locale/nl_Informal/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/nl_Informal/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-08-09 00:00+0000\n" "Last-Translator: Maarten van den Berg \n" "Language-Team: Dutch (informal) event " #~ "ticketing powered by pretix" #~ msgstr "" -#~ "ticketsysteem mogelijk gemaakt door pretix" +#~ "ticketsysteem mogelijk gemaakt door pretix" diff --git a/src/pretix/locale/pl/LC_MESSAGES/django.po b/src/pretix/locale/pl/LC_MESSAGES/django.po index 6f545bee7..ec244d78e 100644 --- a/src/pretix/locale/pl/LC_MESSAGES/django.po +++ b/src/pretix/locale/pl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2019-09-24 19:00+0000\n" "Last-Translator: Serge Bazanski \n" "Language-Team: Polish " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Puste jeśli przedmiot nie jest biletem wejściowym" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Nazwa firmy" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Proszę wybrać kraj" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "stworzone" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "w toku" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "potwierdzone" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "anulowane" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "nieudane" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "zwrócone" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Informacje o płatności" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Płatność otrzymana dla zamówienia: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "rozpoczęty zewnętrznie" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "stworzony" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "w tranzycie" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "skończony" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "nieudany" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "anulowany" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Organizator" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Klient" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Zewnętrzne" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Question option" msgid "Refund reason" msgstr "Opcja pytania" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Prowizja płatności" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Koszt dostawy" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Koszt dostarczenie usługi" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Koszt anulowania" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Inne opłaty" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Karta prezentowa" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Wartość" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Pozycja zamówienia" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, fuzzy, python-format #| msgid "Presale not started" msgid "Your event registration: %(code)s" msgstr "Przedsprzedaż nierozpoczęta" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "ID wózka (np. klucz sesji)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Pozycja wózka" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Pozycje wózka" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Tylko dla klientów biznesowych wewnątrz UE." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "Ta adnotacja zostanie wydrukowana na fakturze." @@ -3817,7 +3817,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "" @@ -4438,20 +4438,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "Wybrano nieprawidłową opcję." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4459,45 +4469,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4506,98 +4516,98 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 #, fuzzy #| msgid "Payment method" msgid "Hide payment method" msgstr "Metoda płatności" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 #, fuzzy #| msgid "Payment method" msgid "Link to enable payment method" msgstr "Metoda płatności" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4606,11 +4616,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4618,97 +4628,97 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 #, fuzzy #| msgid "This variation does not belong to this product." msgid "This gift card does not support this currency." msgstr "Ten wariant nie należy do tego produktu." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 #, fuzzy #| msgid "This product can only be bought using a voucher." msgid "This gift card can only be used in test mode." msgstr "Produkt może być kupiony tylko przy użyciu vouchera." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 #, fuzzy #| msgid "This product can only be bought using a voucher." msgid "This gift card is no longer valid." msgstr "Produkt może być kupiony tylko przy użyciu vouchera." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 #, fuzzy #| msgid "This identifier is already used for a different question." msgid "This gift card is already used for your payment." msgstr "Identyfikator użyty przy innym pytaniu." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "" -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 #, fuzzy #| msgid "This order is not yet approved by the event organizer." msgid "This gift card is not accepted by this event organizer." msgstr "Zamówienie nie zostało jeszcze potwierdzone przez organizatora." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "This product can only be bought using a voucher." msgid "This gift card was used in the meantime. Please try again." @@ -10852,7 +10862,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10946,7 +10956,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -11125,10 +11135,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -11296,7 +11305,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -12108,7 +12117,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -16526,7 +16535,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -17730,7 +17739,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -18042,19 +18051,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -18649,7 +18659,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -18667,16 +18677,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -18750,8 +18760,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -18857,7 +18867,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18874,17 +18884,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -19313,12 +19323,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -19328,34 +19338,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -19363,20 +19373,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -19387,73 +19397,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -19461,23 +19528,64 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Opis" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" -msgstr "" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Line number" +msgid "Account number" +msgstr "Numer linii" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 #, fuzzy #| msgid "Comment" msgid "Confirm payment" msgstr "Komentarz" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/pl/LC_MESSAGES/djangojs.po b/src/pretix/locale/pl/LC_MESSAGES/djangojs.po index 8331d228e..a47ac89c6 100644 --- a/src/pretix/locale/pl/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/pl/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2019-09-24 19:00+0000\n" "Last-Translator: Serge Bazanski \n" "Language-Team: Polish " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" @@ -3510,7 +3510,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "" @@ -4079,20 +4079,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "" -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4100,45 +4110,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4147,94 +4157,94 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4243,11 +4253,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4255,87 +4265,87 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "" -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "" -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "" -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "" -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "" -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" @@ -10254,7 +10264,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10348,7 +10358,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -10513,10 +10523,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -10675,7 +10684,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -11473,7 +11482,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -15750,7 +15759,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -16916,7 +16925,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -17223,19 +17232,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -17799,7 +17809,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -17817,16 +17827,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -17900,8 +17910,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -18003,7 +18013,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18020,17 +18030,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -18423,12 +18433,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -18438,34 +18448,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -18473,20 +18483,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -18497,73 +18507,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -18571,23 +18638,62 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +msgid "Destination" +msgstr "" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +msgid "Account number" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/pl_Informal/LC_MESSAGES/djangojs.po b/src/pretix/locale/pl_Informal/LC_MESSAGES/djangojs.po index 6197ad118..f60971d1a 100644 --- a/src/pretix/locale/pl_Informal/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/pl_Informal/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -42,20 +42,23 @@ msgstr "" msgid "Total revenue" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:15 msgid "Contacting Stripe …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:60 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:72 msgid "Total" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152 -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:242 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:265 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:282 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:315 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:339 msgid "Confirming your payment …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:159 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:289 msgid "Contacting your bank …" msgstr "" diff --git a/src/pretix/locale/pt/LC_MESSAGES/django.po b/src/pretix/locale/pt/LC_MESSAGES/django.po index 2ba92a9fa..1160dfd34 100644 --- a/src/pretix/locale/pt/LC_MESSAGES/django.po +++ b/src/pretix/locale/pt/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -314,7 +314,7 @@ msgstr "" #: pretix/base/auth.py:113 pretix/base/forms/auth.py:207 #: pretix/base/models/auth.py:90 pretix/base/models/notifications.py:25 -#: pretix/base/models/orders.py:146 pretix/control/navigation.py:60 +#: pretix/base/models/orders.py:184 pretix/control/navigation.py:60 #: pretix/control/templates/pretixcontrol/event/settings.html:67 #: pretix/plugins/checkinlists/exporters.py:417 #: pretix/presale/checkoutflow.py:823 pretix/presale/forms/checkout.py:23 @@ -458,8 +458,8 @@ msgid "" "date does not always correspond to the order or payment date." msgstr "" -#: pretix/base/exporters/invoices.py:52 pretix/base/models/orders.py:1354 -#: pretix/base/models/orders.py:1731 pretix/control/forms/filter.py:139 +#: pretix/base/exporters/invoices.py:52 pretix/base/models/orders.py:1395 +#: pretix/base/models/orders.py:1772 pretix/control/forms/filter.py:139 #: pretix/control/forms/filter.py:1541 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:9 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:14 @@ -509,7 +509,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:166 pretix/base/exporters/invoices.py:294 #: pretix/base/exporters/orderlist.py:850 #: pretix/base/exporters/waitinglist.py:84 pretix/base/models/items.py:1024 -#: pretix/base/models/orders.py:158 pretix/base/models/orders.py:2207 +#: pretix/base/models/orders.py:196 pretix/base/models/orders.py:2248 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:63 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:17 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:11 @@ -521,7 +521,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:167 pretix/base/exporters/invoices.py:295 #: pretix/base/exporters/orderlist.py:234 #: pretix/base/exporters/orderlist.py:398 -#: pretix/base/exporters/orderlist.py:500 pretix/base/models/orders.py:128 +#: pretix/base/exporters/orderlist.py:500 pretix/base/models/orders.py:166 #: pretix/base/notifications.py:190 pretix/base/pdf.py:58 #: pretix/control/templates/pretixcontrol/checkin/index.html:65 #: pretix/control/templates/pretixcontrol/order/index.html:162 @@ -576,7 +576,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:172 pretix/base/exporters/invoices.py:180 #: pretix/base/exporters/invoices.py:299 pretix/base/exporters/invoices.py:307 #: pretix/base/exporters/orderlist.py:235 -#: pretix/base/exporters/waitinglist.py:85 pretix/base/forms/questions.py:811 +#: pretix/base/exporters/waitinglist.py:85 pretix/base/forms/questions.py:815 #: pretix/base/models/devices.py:45 pretix/base/models/devices.py:105 #: pretix/base/models/event.py:1123 pretix/base/models/event.py:1376 #: pretix/base/models/items.py:1365 pretix/base/models/items.py:1523 @@ -613,8 +613,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:528 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:412 -#: pretix/base/models/orders.py:1160 pretix/base/models/orders.py:2258 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:416 +#: pretix/base/models/orders.py:1201 pretix/base/models/orders.py:2299 #: pretix/base/orderimport.py:274 pretix/base/orderimport.py:420 #: pretix/control/forms/filter.py:525 pretix/control/forms/filter.py:556 #: pretix/control/templates/pretixcontrol/order/index.html:823 @@ -630,8 +630,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:529 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:423 -#: pretix/base/models/orders.py:1161 pretix/base/models/orders.py:2259 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:427 +#: pretix/base/models/orders.py:1202 pretix/base/models/orders.py:2300 #: pretix/base/orderimport.py:285 pretix/base/orderimport.py:431 #: pretix/base/settings.py:701 pretix/control/forms/filter.py:529 #: pretix/control/forms/filter.py:560 pretix/control/views/item.py:354 @@ -645,8 +645,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:530 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:431 -#: pretix/base/models/orders.py:1162 pretix/base/models/orders.py:2260 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:435 +#: pretix/base/models/orders.py:1203 pretix/base/models/orders.py:2301 #: pretix/base/orderimport.py:296 pretix/base/orderimport.py:442 #: pretix/base/settings.py:713 pretix/control/forms/filter.py:534 #: pretix/control/forms/filter.py:565 pretix/control/views/item.py:364 @@ -660,9 +660,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:531 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:443 -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2261 -#: pretix/base/models/orders.py:2262 pretix/base/orderimport.py:312 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:447 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2302 +#: pretix/base/models/orders.py:2303 pretix/base/orderimport.py:312 #: pretix/base/orderimport.py:458 pretix/base/settings.py:722 #: pretix/control/forms/filter.py:539 pretix/control/forms/filter.py:570 #: pretix/control/templates/pretixcontrol/order/index.html:827 @@ -684,7 +684,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:305 pretix/base/exporters/invoices.py:313 #: pretix/base/exporters/orderlist.py:243 #: pretix/base/exporters/orderlist.py:418 -#: pretix/base/exporters/orderlist.py:566 pretix/base/models/orders.py:2265 +#: pretix/base/exporters/orderlist.py:566 pretix/base/models/orders.py:2306 #: pretix/base/orderimport.py:356 #: pretix/control/templates/pretixcontrol/order/index.html:834 #: pretix/plugins/reports/exporters.py:721 @@ -711,7 +711,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:235 #: pretix/base/exporters/orderlist.py:410 #: pretix/base/exporters/orderlist.py:527 -#: pretix/base/exporters/orderlist.py:559 pretix/base/forms/questions.py:404 +#: pretix/base/exporters/orderlist.py:559 pretix/base/forms/questions.py:408 #: pretix/base/orderimport.py:244 pretix/base/orderimport.py:409 #: pretix/control/forms/filter.py:517 pretix/control/forms/filter.py:552 #: pretix/control/templates/pretixcontrol/order/index.html:819 @@ -732,9 +732,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:532 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:467 -#: pretix/base/forms/questions.py:777 pretix/base/models/orders.py:1164 -#: pretix/base/models/orders.py:2264 pretix/base/orderimport.py:331 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:471 +#: pretix/base/forms/questions.py:781 pretix/base/models/orders.py:1205 +#: pretix/base/models/orders.py:2305 pretix/base/orderimport.py:331 #: pretix/control/templates/pretixcontrol/order/index.html:830 #: pretix/plugins/checkinlists/exporters.py:444 #: pretix/plugins/reports/exporters.py:720 @@ -745,13 +745,13 @@ msgid "State" msgstr "" #: pretix/base/exporters/invoices.py:187 pretix/base/exporters/invoices.py:314 -#: pretix/base/models/orders.py:2275 +#: pretix/base/models/orders.py:2316 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:114 msgid "Beneficiary" msgstr "" #: pretix/base/exporters/invoices.py:188 pretix/base/exporters/invoices.py:315 -#: pretix/base/models/orders.py:2270 pretix/base/orderimport.py:367 +#: pretix/base/models/orders.py:2311 pretix/base/orderimport.py:367 #: pretix/control/templates/pretixcontrol/order/index.html:854 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:121 msgid "Internal reference" @@ -802,7 +802,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:271 pretix/base/exporters/orderlist.py:359 #: pretix/base/exporters/orderlist.py:659 -#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1029 +#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1070 #: pretix/control/forms/filter.py:106 pretix/control/forms/filter.py:426 #: pretix/control/forms/item.py:425 pretix/control/forms/subevents.py:97 #: pretix/control/views/item.py:565 pretix/control/views/vouchers.py:92 @@ -818,7 +818,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:271 pretix/base/exporters/orderlist.py:359 #: pretix/base/exporters/orderlist.py:659 -#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1031 +#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1072 #: pretix/control/forms/filter.py:106 pretix/control/forms/filter.py:427 #: pretix/control/forms/item.py:426 pretix/control/forms/subevents.py:98 #: pretix/control/views/item.py:565 pretix/control/views/vouchers.py:92 @@ -851,14 +851,14 @@ msgid "Net price" msgstr "" #: pretix/base/exporters/invoices.py:289 pretix/base/exporters/orderlist.py:409 -#: pretix/base/exporters/orderlist.py:518 pretix/base/models/orders.py:1879 -#: pretix/base/models/orders.py:1979 +#: pretix/base/exporters/orderlist.py:518 pretix/base/models/orders.py:1920 +#: pretix/base/models/orders.py:2020 msgid "Tax value" msgstr "" #: pretix/base/exporters/invoices.py:290 pretix/base/exporters/orderlist.py:407 -#: pretix/base/exporters/orderlist.py:516 pretix/base/models/orders.py:1870 -#: pretix/base/models/orders.py:1970 pretix/base/models/tax.py:114 +#: pretix/base/exporters/orderlist.py:516 pretix/base/models/orders.py:1911 +#: pretix/base/models/orders.py:2011 pretix/base/models/tax.py:114 #: pretix/plugins/reports/exporters.py:670 #: pretix/plugins/reports/exporters.py:715 msgid "Tax rate" @@ -885,7 +885,7 @@ msgstr "" msgid "Order data" msgstr "" -#: pretix/base/exporters/orderlist.py:45 pretix/base/models/orders.py:209 +#: pretix/base/exporters/orderlist.py:45 pretix/base/models/orders.py:247 #: pretix/control/navigation.py:224 #: pretix/control/templates/pretixcontrol/orders/index.html:7 #: pretix/control/templates/pretixcontrol/orders/index.html:9 @@ -893,7 +893,7 @@ msgstr "" msgid "Orders" msgstr "" -#: pretix/base/exporters/orderlist.py:46 pretix/base/models/orders.py:1995 +#: pretix/base/exporters/orderlist.py:46 pretix/base/models/orders.py:2036 #: pretix/base/notifications.py:196 msgid "Order positions" msgstr "" @@ -959,7 +959,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:744 #: pretix/base/exporters/orderlist.py:899 #: pretix/base/exporters/waitinglist.py:97 -#: pretix/base/exporters/waitinglist.py:145 pretix/base/models/orders.py:134 +#: pretix/base/exporters/waitinglist.py:145 pretix/base/models/orders.py:172 #: pretix/control/forms/filter.py:773 pretix/control/forms/filter.py:1000 #: pretix/control/forms/filter.py:1269 pretix/control/forms/filter.py:1350 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:39 @@ -976,7 +976,7 @@ msgstr "" #: pretix/control/views/waitinglist.py:214 #: pretix/plugins/reports/exporters.py:422 #: pretix/plugins/reports/exporters.py:763 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:61 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:79 #: pretix/presale/templates/pretixpresale/organizers/index.html:67 msgid "Status" msgstr "" @@ -994,7 +994,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:401 #: pretix/base/exporters/orderlist.py:504 #: pretix/base/exporters/waitinglist.py:87 pretix/base/models/items.py:1028 -#: pretix/base/models/orders.py:150 pretix/base/models/waitinglist.py:56 +#: pretix/base/models/orders.py:188 pretix/base/models/waitinglist.py:56 #: pretix/base/pdf.py:252 #: pretix/control/templates/pretixcontrol/order/index.html:210 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:140 @@ -1075,13 +1075,13 @@ msgid "Sales channel" msgstr "" #: pretix/base/exporters/orderlist.py:255 pretix/base/models/items.py:402 -#: pretix/base/models/orders.py:176 +#: pretix/base/models/orders.py:214 #: pretix/plugins/checkinlists/exporters.py:432 msgid "Requires special attention" msgstr "" #: pretix/base/exporters/orderlist.py:256 -#: pretix/base/exporters/orderlist.py:745 pretix/base/models/orders.py:171 +#: pretix/base/exporters/orderlist.py:745 pretix/base/models/orders.py:209 #: pretix/base/models/vouchers.py:197 pretix/base/orderimport.py:623 #: pretix/control/forms/filter.py:463 #: pretix/control/templates/pretixcontrol/order/index.html:772 @@ -1107,7 +1107,7 @@ msgid "Fee type" msgstr "" #: pretix/base/exporters/orderlist.py:406 -#: pretix/base/exporters/orderlist.py:515 pretix/base/models/orders.py:1129 +#: pretix/base/exporters/orderlist.py:515 pretix/base/models/orders.py:1170 #: pretix/base/orderimport.py:499 pretix/base/pdf.py:105 #: pretix/control/templates/pretixcontrol/item/index.html:88 #: pretix/control/templates/pretixcontrol/order/change.html:157 @@ -1139,7 +1139,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:509 #: pretix/base/exporters/orderlist.py:790 pretix/base/models/checkin.py:19 -#: pretix/base/models/items.py:1361 pretix/base/models/orders.py:1111 +#: pretix/base/models/items.py:1361 pretix/base/models/orders.py:1152 #: pretix/base/models/vouchers.py:101 pretix/base/models/waitinglist.py:37 #: pretix/control/forms/event.py:1222 pretix/control/forms/filter.py:331 #: pretix/control/forms/filter.py:1387 pretix/control/forms/filter.py:1501 @@ -1184,13 +1184,13 @@ msgid "Product" msgstr "" #: pretix/base/exporters/orderlist.py:514 -#: pretix/base/exporters/waitinglist.py:89 pretix/base/models/orders.py:1121 +#: pretix/base/exporters/waitinglist.py:89 pretix/base/models/orders.py:1162 msgid "Variation" msgstr "" #: pretix/base/exporters/orderlist.py:519 -#: pretix/base/exporters/orderlist.py:524 pretix/base/forms/questions.py:387 -#: pretix/base/models/orders.py:1133 pretix/base/orderimport.py:381 +#: pretix/base/exporters/orderlist.py:524 pretix/base/forms/questions.py:391 +#: pretix/base/models/orders.py:1174 pretix/base/orderimport.py:381 #: pretix/base/pdf.py:119 pretix/control/forms/filter.py:544 #: pretix/control/templates/pretixcontrol/order/index.html:394 #: pretix/control/views/item.py:308 pretix/plugins/badges/exporters.py:258 @@ -1203,8 +1203,8 @@ msgstr "" msgid "Attendee name" msgstr "" -#: pretix/base/exporters/orderlist.py:526 pretix/base/forms/questions.py:393 -#: pretix/base/models/orders.py:1141 pretix/base/pdf.py:161 +#: pretix/base/exporters/orderlist.py:526 pretix/base/forms/questions.py:397 +#: pretix/base/models/orders.py:1182 pretix/base/pdf.py:161 #: pretix/control/templates/pretixcontrol/order/index.html:399 #: pretix/control/views/item.py:320 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:60 @@ -1266,9 +1266,9 @@ msgid "Refund states" msgstr "" #: pretix/base/exporters/orderlist.py:744 -#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:208 -#: pretix/base/models/orders.py:1341 pretix/base/models/orders.py:1712 -#: pretix/base/models/orders.py:1859 pretix/base/models/orders.py:1964 +#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:246 +#: pretix/base/models/orders.py:1382 pretix/base/models/orders.py:1753 +#: pretix/base/models/orders.py:1900 pretix/base/models/orders.py:2005 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:64 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:15 #: pretix/plugins/checkinlists/exporters.py:295 @@ -1298,8 +1298,8 @@ msgid "Status code" msgstr "" #: pretix/base/exporters/orderlist.py:745 -#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:1337 -#: pretix/base/models/orders.py:1708 +#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:1378 +#: pretix/base/models/orders.py:1749 #: pretix/control/templates/pretixcontrol/order/index.html:618 #: pretix/control/templates/pretixcontrol/order/index.html:714 #: pretix/control/templates/pretixcontrol/orders/refunds.html:67 @@ -1313,7 +1313,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:616 #: pretix/control/templates/pretixcontrol/order/index.html:711 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:84 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:19 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:29 msgid "Payment method" msgstr "" @@ -1480,7 +1480,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:34 #: pretix/plugins/banktransfer/refund_export.py:25 #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:15 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:57 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:75 msgid "Currency" msgstr "" @@ -1611,31 +1611,31 @@ msgstr "" msgid "Repeat password" msgstr "" -#: pretix/base/forms/questions.py:205 +#: pretix/base/forms/questions.py:209 msgid "Please enter a shorter name." msgstr "" -#: pretix/base/forms/questions.py:225 +#: pretix/base/forms/questions.py:229 msgctxt "phonenumber" msgid "International area code" msgstr "" -#: pretix/base/forms/questions.py:249 +#: pretix/base/forms/questions.py:253 msgctxt "phonenumber" msgid "Phone number (without international area code)" msgstr "" -#: pretix/base/forms/questions.py:415 pretix/base/forms/questions.py:719 +#: pretix/base/forms/questions.py:419 pretix/base/forms/questions.py:723 msgid "Street and Number" msgstr "" -#: pretix/base/forms/questions.py:449 pretix/base/forms/questions.py:759 +#: pretix/base/forms/questions.py:453 pretix/base/forms/questions.py:763 msgctxt "address" msgid "Select state" msgstr "" -#: pretix/base/forms/questions.py:672 pretix/base/forms/questions.py:703 -#: pretix/base/forms/questions.py:850 pretix/base/payment.py:51 +#: pretix/base/forms/questions.py:676 pretix/base/forms/questions.py:707 +#: pretix/base/forms/questions.py:854 pretix/base/payment.py:63 #: pretix/control/forms/event.py:637 pretix/control/forms/event.py:643 #: pretix/control/forms/event.py:694 pretix/control/forms/event.py:1133 #: pretix/plugins/banktransfer/payment.py:362 @@ -1643,23 +1643,23 @@ msgstr "" msgid "This field is required." msgstr "" -#: pretix/base/forms/questions.py:841 +#: pretix/base/forms/questions.py:845 msgid "You need to provide a company name." msgstr "" -#: pretix/base/forms/questions.py:843 +#: pretix/base/forms/questions.py:847 msgid "You need to provide your name." msgstr "" -#: pretix/base/forms/questions.py:861 pretix/control/views/orders.py:1234 +#: pretix/base/forms/questions.py:865 pretix/control/views/orders.py:1234 msgid "Your VAT ID does not match the selected country." msgstr "" -#: pretix/base/forms/questions.py:873 +#: pretix/base/forms/questions.py:877 msgid "This VAT ID is not valid. Please re-check your input." msgstr "" -#: pretix/base/forms/questions.py:878 +#: pretix/base/forms/questions.py:882 msgid "" "Your VAT ID could not be checked, as the VAT checking service of your " "country is currently not available. We will therefore need to charge VAT on " @@ -1667,7 +1667,7 @@ msgid "" "process." msgstr "" -#: pretix/base/forms/questions.py:886 +#: pretix/base/forms/questions.py:890 msgid "" "Your VAT ID could not be checked, as the VAT checking service of your " "country returned an incorrect result. We will therefore need to charge VAT " @@ -1740,7 +1740,7 @@ msgid "Invalid placeholder(s): %(value)s" msgstr "" #: pretix/base/forms/widgets.py:153 pretix/base/forms/widgets.py:158 -#: pretix/base/models/orders.py:2254 +#: pretix/base/models/orders.py:2295 msgid "Business customer" msgstr "" @@ -1957,7 +1957,7 @@ msgstr "" msgid "Modern Invoice Renderer" msgstr "" -#: pretix/base/models/auth.py:92 pretix/base/models/orders.py:2256 +#: pretix/base/models/auth.py:92 pretix/base/models/orders.py:2297 #: pretix/base/settings.py:2462 pretix/base/settings.py:2473 #: pretix/control/templates/pretixcontrol/users/index.html:42 msgid "Full name" @@ -2231,7 +2231,7 @@ msgstr "" msgid "Event series" msgstr "" -#: pretix/base/models/event.py:431 pretix/base/payment.py:312 +#: pretix/base/models/event.py:431 pretix/base/payment.py:324 msgid "Restrict to specific sales channels" msgstr "" @@ -2240,8 +2240,8 @@ msgid "Only sell tickets for this event on the following sales channels." msgstr "" #: pretix/base/models/event.py:438 pretix/base/models/items.py:256 -#: pretix/base/models/items.py:1354 pretix/base/models/orders.py:140 -#: pretix/base/models/orders.py:2199 pretix/base/models/vouchers.py:95 +#: pretix/base/models/items.py:1354 pretix/base/models/orders.py:178 +#: pretix/base/models/orders.py:2240 pretix/base/models/vouchers.py:95 #: pretix/base/models/waitinglist.py:31 pretix/base/notifications.py:178 #: pretix/control/templates/pretixcontrol/search/orders.html:44 #: pretix/presale/templates/pretixpresale/event/waitinglist.html:18 @@ -2538,7 +2538,7 @@ msgstr "" msgid "This product will not be sold before the given date." msgstr "" -#: pretix/base/models/items.py:341 pretix/base/payment.py:236 +#: pretix/base/models/items.py:341 pretix/base/payment.py:248 msgid "Available until" msgstr "" @@ -2978,7 +2978,7 @@ msgstr "" msgid "Leave empty for an unlimited number of tickets." msgstr "" -#: pretix/base/models/items.py:1374 pretix/base/models/orders.py:1115 +#: pretix/base/models/items.py:1374 pretix/base/models/orders.py:1156 #: pretix/control/templates/pretixcontrol/checkin/index.html:67 msgid "Item" msgstr "" @@ -3082,43 +3082,43 @@ msgstr "" msgid "Tax rule {val}" msgstr "" -#: pretix/base/models/orders.py:120 +#: pretix/base/models/orders.py:158 msgid "pending" msgstr "" -#: pretix/base/models/orders.py:121 +#: pretix/base/models/orders.py:159 msgid "paid" msgstr "" -#: pretix/base/models/orders.py:122 +#: pretix/base/models/orders.py:160 msgid "expired" msgstr "" -#: pretix/base/models/orders.py:123 +#: pretix/base/models/orders.py:161 msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:154 pretix/control/forms/filter.py:467 +#: pretix/base/models/orders.py:192 pretix/control/forms/filter.py:467 msgid "Locale" msgstr "" -#: pretix/base/models/orders.py:164 pretix/base/models/orders.py:2211 +#: pretix/base/models/orders.py:202 pretix/base/models/orders.py:2252 #: pretix/control/forms/orders.py:41 msgid "Expiration date" msgstr "" -#: pretix/base/models/orders.py:168 pretix/control/forms/filter.py:478 +#: pretix/base/models/orders.py:206 pretix/control/forms/filter.py:478 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:57 msgid "Total amount" msgstr "" -#: pretix/base/models/orders.py:172 pretix/base/models/vouchers.py:198 +#: pretix/base/models/orders.py:210 pretix/base/models/vouchers.py:198 msgid "" "The text entered in this field will not be visible to the user and is " "available for your convenience." msgstr "" -#: pretix/base/models/orders.py:178 +#: pretix/base/models/orders.py:216 msgid "" "If you set this, the check-in app will show a visible warning that tickets " "of this order require special attention. This will not show any details or " @@ -3126,237 +3126,237 @@ msgid "" "cases." msgstr "" -#: pretix/base/models/orders.py:190 pretix/base/models/orders.py:1152 +#: pretix/base/models/orders.py:228 pretix/base/models/orders.py:1193 msgid "Meta information" msgstr "" -#: pretix/base/models/orders.py:202 pretix/control/forms/filter.py:473 +#: pretix/base/models/orders.py:240 pretix/control/forms/filter.py:473 msgid "E-mail address verified" msgstr "" -#: pretix/base/models/orders.py:767 +#: pretix/base/models/orders.py:805 msgid "" "The payment can not be accepted as the last date of payments configured in " "the payment settings is over." msgstr "" -#: pretix/base/models/orders.py:769 +#: pretix/base/models/orders.py:807 msgid "" "The payment can not be accepted as the order is expired and you configured " "that no late payments should be accepted in the payment settings." msgstr "" -#: pretix/base/models/orders.py:771 +#: pretix/base/models/orders.py:809 msgid "This order is not yet approved by the event organizer." msgstr "" -#: pretix/base/models/orders.py:791 +#: pretix/base/models/orders.py:829 #, python-brace-format msgid "The ordered product \"{item}\" is no longer available." msgstr "" -#: pretix/base/models/orders.py:792 +#: pretix/base/models/orders.py:830 #, python-brace-format msgid "The seat \"{seat}\" is no longer available." msgstr "" -#: pretix/base/models/orders.py:793 +#: pretix/base/models/orders.py:831 #, python-brace-format msgid "The voucher \"{voucher}\" no longer has sufficient budget." msgstr "" -#: pretix/base/models/orders.py:794 +#: pretix/base/models/orders.py:832 #, python-brace-format msgid "The voucher \"{voucher}\" has been used in the meantime." msgstr "" -#: pretix/base/models/orders.py:922 pretix/base/services/orders.py:862 +#: pretix/base/models/orders.py:960 pretix/base/services/orders.py:862 #: pretix/control/views/event.py:701 #: pretix/presale/templates/pretixpresale/event/order.html:63 #, python-format msgid "Your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1033 +#: pretix/base/models/orders.py:1074 msgid "" msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" @@ -3510,7 +3510,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "" @@ -4079,20 +4079,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "" -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4100,45 +4110,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4147,94 +4157,94 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4243,11 +4253,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4255,87 +4265,87 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "" -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "" -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "" -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "" -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "" -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" @@ -10254,7 +10264,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10348,7 +10358,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -10513,10 +10523,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -10675,7 +10684,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -11473,7 +11482,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -15748,7 +15757,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -16913,7 +16922,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -17220,19 +17229,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -17795,7 +17805,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -17813,16 +17823,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -17896,8 +17906,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -17999,7 +18009,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18016,17 +18026,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -18419,12 +18429,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -18434,34 +18444,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -18469,20 +18479,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -18493,73 +18503,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -18567,23 +18634,62 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +msgid "Destination" +msgstr "" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +msgid "Account number" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/pt/LC_MESSAGES/djangojs.po b/src/pretix/locale/pt/LC_MESSAGES/djangojs.po index acceff328..0424aaabc 100644 --- a/src/pretix/locale/pt/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/pt/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -42,20 +42,23 @@ msgstr "" msgid "Total revenue" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:15 msgid "Contacting Stripe …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:60 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:72 msgid "Total" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152 -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:242 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:265 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:282 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:315 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:339 msgid "Confirming your payment …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:159 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:289 msgid "Contacting your bank …" msgstr "" diff --git a/src/pretix/locale/pt_BR/LC_MESSAGES/django.po b/src/pretix/locale/pt_BR/LC_MESSAGES/django.po index 64e2fde4f..51d2deedf 100644 --- a/src/pretix/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/pretix/locale/pt_BR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2019-07-10 16:02+0000\n" "Last-Translator: Vitor Piedras \n" "Language-Team: Portuguese (Brazil) " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Vazio, se este produto não for um ingresso de admissão" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Nome da empresa" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Selecione o pais" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "criado" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "pendente" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "confirmado" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "cancelado" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "falhou" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "recusado" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Informações de pagamento" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, fuzzy, python-format #| msgid "Order code" msgid "Event registration confirmed: %(code)s" msgstr "Código do pedido" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Pagamento recebido pelo seu pedido: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "começou externamente" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "criado" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "em andamento" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "concluído" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "falhou" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "cancelado" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 #, fuzzy #| msgid "Organizer" msgctxt "refund_source" msgid "Organizer" msgstr "Organizador" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Cliente" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Externa" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Payment date" msgid "Refund reason" msgstr "Data de pagamento" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Taxa de pagamento" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Taxa de envio" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Taxa de serviço" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Taxa de cancelamento" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Outras taxas" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Cartão Presente" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Valor" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Posição do pedido" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, fuzzy, python-format #| msgid "Presale not started" msgid "Your event registration: %(code)s" msgstr "Pré-venda não iniciada" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "ID do carrinho (por exemplo, chave de sessão)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Posição do carrinho" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Posições do carrinho" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Apenas para clientes empresariais na UE." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "Esta referência será impressa na sua fatura para sua conveniência." @@ -3878,7 +3878,7 @@ msgstr "" "Nenhuma garantia dada para o cálculo correto do imposto. USE POR SUA CONTA E " "RISCO." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "País mercante" @@ -4525,20 +4525,30 @@ msgstr "Você precisa selecionar uma data." msgid "Ambiguous option selected." msgstr "Opção inválida selecionada." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4546,49 +4556,49 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 #, fuzzy #| msgid "Order total" msgid "Minimum order total" msgstr "Total do pedido" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 #, fuzzy #| msgid "Order total" msgid "Maximum order total" msgstr "Total do pedido" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4597,100 +4607,100 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 #, fuzzy #| msgid "Payment method" msgid "Hide payment method" msgstr "Meio de pagamento" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 #, fuzzy #| msgid "Payment method" msgid "Link to enable payment method" msgstr "Meio de pagamento" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 #, fuzzy #| msgid "Payment date" msgid "Payment method name" msgstr "Data de pagamento" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4699,11 +4709,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4711,103 +4721,103 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 #, fuzzy #| msgid "The payment method for this order cannot be changed." msgid "This gift card does not support this currency." msgstr "O método de pagamento para este pedido não pode ser alterado." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 #, fuzzy #| msgid "This product will not be sold after the given date." msgid "This gift card can only be used in test mode." msgstr "Este produto não será vendido após a data indicada." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 #, fuzzy #| msgid "This feature is not enabled." msgid "This gift card is no longer valid." msgstr "Este recurso não está habilitado." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 #, fuzzy #| msgid "Your cart has been updated." msgid "All credit on this gift card has been used." msgstr "Seu carrinho foi atualizado." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 #, fuzzy #| msgid "This identifier is already used for a different question." msgid "This gift card is already used for your payment." msgstr "Esse identificador já é usado para uma pergunta diferente." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 #, fuzzy #| msgid "Your cart has been updated." msgid "Your gift card has been applied." msgstr "Seu carrinho foi atualizado." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 #, fuzzy #| msgid "This feature is not enabled." msgid "This gift card is not known." msgstr "Este recurso não está habilitado." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 #, fuzzy #| msgid "This order is not yet approved by the event organizer." msgid "This gift card is not accepted by this event organizer." msgstr "Este pedido ainda não foi aprovado pelo organizador do evento." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "There was an error sending the mail. Please try again later." msgid "This gift card was used in the meantime. Please try again." @@ -11160,7 +11170,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -11254,7 +11264,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Salvar" @@ -11444,10 +11454,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -11618,7 +11627,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -12473,7 +12482,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -17029,7 +17038,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -18307,7 +18316,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -18635,19 +18644,20 @@ msgstr "Por favor insira apenas números." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -19252,7 +19262,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -19270,16 +19280,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -19353,8 +19363,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -19464,7 +19474,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -19481,17 +19491,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -19924,12 +19934,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -19939,34 +19949,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -19974,20 +19984,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -19998,75 +20008,132 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 #, fuzzy #| msgid "Questions" msgctxt "stripe" msgid "Testing" msgstr "Perguntas" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -20074,23 +20141,64 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Descrição" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" -msgstr "" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Minimum number" +msgid "Account number" +msgstr "Número mínimo" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Organizer" +msgid "Use a different account" +msgstr "Organizador" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 #, fuzzy #| msgctxt "invoice" #| msgid "Cancellation" msgid "Confirm payment" msgstr "Cancelamento" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 #, fuzzy #| msgid "Your cart has been updated." msgid "Your Stripe account has been disconnected." msgstr "Seu carrinho foi atualizado." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/pt_BR/LC_MESSAGES/djangojs.po b/src/pretix/locale/pt_BR/LC_MESSAGES/djangojs.po index bc496509b..7fcb50c16 100644 --- a/src/pretix/locale/pt_BR/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/pt_BR/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2019-03-19 09:00+0000\n" "Last-Translator: Vitor Reis \n" "Language-Team: Portuguese (Brazil) \n" "Language-Team: Portuguese (Portugal) " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Esvaziar, se este produto não é um bilhete" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Nome da empresa" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Selecione o pais" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "criado" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "pendente" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "confirmado" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "cancelado" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "falhou" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "devolvido" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Informação de pagamento" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "Registro de Evento confirmado: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Pagamento recebido para a sua encomenda: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "começou externamente" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "criado" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "em trânsito" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "feito" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "falhou" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "cancelado" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Organizador" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Cliente" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Externo" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Refund only" msgid "Refund reason" msgstr "Apenas reembolso" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Taxa de pagamento" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Taxa de envio" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Taxa de serviço" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Taxa de cancelamento" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Outras taxas" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Cartão-Presente" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Valor" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Posição da encomenda" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "O seu registo no evento: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "Cart ID (por exemplo, chave de sessão)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Posição do carrinho" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Posições do carrinho" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Apenas para clientes empresariais na UE." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "Esta referência será impressa na sua factura para sua conveniência." @@ -3776,7 +3776,7 @@ msgstr "" "contabilista. Nenhuma garantia é dada para o cálculo do imposto correto. USE " "POR SUA CONTA E RISCO." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "País de venda" @@ -4389,22 +4389,36 @@ msgstr "Precisa selecionar um lugar específico." msgid "Ambiguous option selected." msgstr "Opção ambígua selecionada." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "Aplicar" + +#: pretix/base/payment.py:54 +#, fuzzy +#| msgid "Android (Google Play)" +msgctxt "payment" +msgid "Google Pay" +msgstr "Android (Google Play)" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Habilitar método de pagamento" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Os utilizadores não serão capazes de escolher este metodo de pagamento após " "a data indicada." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Texto nas facturas" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4416,11 +4430,11 @@ msgstr "" "ser paga. Se a factura é gerada mais tarde, ela irá mostrar um texto " "informando que já foi paga." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Total mínimo de encomenda" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4430,11 +4444,11 @@ msgstr "" "superior ao valor dado. O total da encomenda para este fim pode ser " "calculado sem tomar as taxas impostas por este método de pagamento em conta." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Máximo total da encomenda" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4444,23 +4458,23 @@ msgstr "" "inferior ao valor dado. O total da encomenda para este fim pode ser " "calculado sem tomar as taxas impostas por este método de pagamento em conta." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Taxa adicional" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Valor absoluto" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "Percentagem do total da encomenda." -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Calcular a taxa do valor total, incluindo a taxa." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4474,11 +4488,11 @@ msgstr "" "detalhadas sobre o que faz. Não se esqueça de definir as taxas corretas " "acima!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "Restringir a países" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4489,18 +4503,18 @@ msgstr "" "os países são permitidos. Isso só está disponível se o endereço da " "facturação é necessário." -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" "Só permitir o uso deste provedor de pagamento nos canais de vendas " "selecionados." -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "Esconder método de pagamento" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." @@ -4508,27 +4522,27 @@ msgstr "" "O método de pagamento não será exibido por padrão, mas apenas para as " "pessoas que entram na loja através de um link especial." -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "Link para ativar método de pagamento" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" "Compartilhe este link com os clientes quem deve usar este método de " "pagamento." -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "O pagamento para esta factura já foi recebido." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" "Reembolsos automáticos não são suportados por este provedor de pagamento." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4536,21 +4550,21 @@ msgstr "" "Nenhum pagamento é exigido porque esta encomenda inclui apenas produtos que " "são gratuitos." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Grátis" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Bilheteria" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "Pagamento manual" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." @@ -4558,15 +4572,15 @@ msgstr "" "No modo de teste, pode apenas marcar manualmente essa encomenda como paga no " "backend após ter sido criada." -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "Nome do método de pagamento" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "Descrição do processo de pagamento durante o checkout" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4575,13 +4589,13 @@ msgstr "" "este método de pagamento. Deve dar uma breve explicação sobre este método de " "pagamento." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" "Descrição do processo de pagamento nos e-mails de de confirmação de " "encomendas" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, fuzzy, python-brace-format #| msgid "" #| "This text will be included for the {payment_info} placeholder in order " @@ -4599,11 +4613,11 @@ msgstr "" "com o pagamento. Pode usar os espaços reservados {order}, {total}, " "{currency} e {total_with_currency}." -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "Descrição do processo de pagamento para encomendas pendentes" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, fuzzy, python-brace-format #| msgid "" #| "This text will be shown on the order confirmation page for pending " @@ -4620,57 +4634,57 @@ msgstr "" "pagamento. Pode usar os espaços reservados {order}, {total}, {currency} e " "{total_with_currency}." -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "Offsetting" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "Digitou uma encomenda que não pode ser encontrada." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "Equilibrado contra encomendas: %s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "No modo de teste, apenas cartões de teste funcionarão." -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "Não pode pagar com cartões-presente ao comprar um cartão-presente." -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "Este cartão-presente não suporta esta moeda." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "Este cartão-presente só pode ser usado em modo de teste." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "Somente cartões-presente de teste podem ser usado em modo de teste." -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "Este cartão-presente já não é válido." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "Todo o crédito deste cartão-presente já foi usado." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "Este cartão-presente já foi usado para o seu pagamento." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." @@ -4678,11 +4692,11 @@ msgstr "" "O seu cartão-presente foi aplicado, mas {} ainda precisa ser pago. Por " "favor, selecione um método de pagamento." -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "O seu cartão-presente foi aplicado." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." @@ -4690,11 +4704,11 @@ msgstr "" "Você digitou um voucher em vez de um cartão-presente. Vouchers só podem ser " "inseridos na primeira página da loja abaixo a seleção do produto." -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "Este cartão-presente não é conhecido." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." @@ -4702,11 +4716,11 @@ msgstr "" "Este cartão-presente não pode ser trocado porque o seu código não é único. " "Entre em contato com o organizador deste evento." -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "Este cartão-presente não é aceite por este organizador do evento." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" "Este cartão-presente foi utilizada no mesmo período. Por favor, tente " @@ -11656,7 +11670,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -11764,7 +11778,7 @@ msgstr "Definir nova palavra-passe" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Salve" @@ -11941,10 +11955,9 @@ msgstr "Modo de entrada de cartão" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Número do cartão" @@ -12106,7 +12119,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -13094,7 +13107,7 @@ msgstr "Plugins instalados" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Suas alterações foram salvas." @@ -18009,7 +18022,7 @@ msgstr "A nova lista de check-in foi criada." #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -19274,7 +19287,7 @@ msgstr "Crachá" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -19617,19 +19630,20 @@ msgstr "Por favor, informe seus dados de conta bancária." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Titular da conta" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "Banco" @@ -20268,7 +20282,7 @@ msgstr "" "processamento manual." #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "PayPal" @@ -20288,17 +20302,17 @@ msgstr "" msgid "PayPal account" msgstr "Conta PayPal" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "{text}" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" "Clique aqui para obter um tutorial sobre como obter as chaves necessárias" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "Endpoint" @@ -20390,8 +20404,8 @@ msgstr "" "PayPal ainda não aprovou o pagamento. Vamos informá-lo assim que o pagamento " "esteja completo." -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "Houve um erro ao enviar o e-mail de confirmação." @@ -20507,7 +20521,7 @@ msgid "Last update" msgstr "Última atualização" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "Valor total" @@ -20528,19 +20542,19 @@ msgstr "" "contacte-nos, se isto demorar mais do que algumas horas." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "O processo de pagamento começou numa nova janela." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" "A janela para introduzir os seus dados de pagamento não foi aberta ou foi " "fechada?" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "Clique aqui para abrir a janela." @@ -20984,12 +20998,14 @@ msgstr "" "assim que as primeiras encomendas sejam submetidas!" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "Stripe" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" "Este plugin permite que receber pagamentos com cartão de crédito via Stripe" @@ -21002,37 +21018,42 @@ msgstr "" "A chave fornecida \"%(value)s\" não parece válida. Deve começar com " "\"%(prefix)s\"." -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "Stripe Connect: taxa de app (por cento)" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "Stripe Connect: taxa de app (max)" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "Listra Connect: taxa de app (min)" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "Para aceitar pagamentos via Stripe, precisará de uma conta Stripe. Ao clicar " "no botão a seguir, pode criar uma nova conta Stripe ou ligar o pretix a uma " "já existente." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "Conecte-se com o Stripe" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "Desligar do Stripe" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -21044,22 +21065,22 @@ msgstr "" "automaticamente as encomendas quando os pagamentos são reembolsados " "externamente e para processar métodos de pagamento assíncronos como SOFORT." -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "Permitir pagamentos MOTO para revendedores" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" "Gated feature (precisa de ser ativada para a sua conta pelo suporte Stripe " "primeiro)" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "Guia de segurança de integração Stripe" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -21076,21 +21097,21 @@ msgstr "" "auto-avaliação, como o de 40 páginas SAQ D. Por favor, consultar o %s para " "mais informações sobre este assunto." -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "Conta Stripe" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "Ativo" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "Em teste" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." @@ -21098,15 +21119,15 @@ msgstr "" "Se o evento está em modo de teste, vamos sempre usar a API do teste do " "Stripe, independentemente desta definição." -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Chave publicável" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Chave secreta" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." @@ -21114,39 +21135,96 @@ msgstr "" "O país em que sua conta Stripe está registada. Normalmente, este é o seu " "país de residência." -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Pagamentos com cartão de crédito" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "Precisa ser ativo na sua conta Stripe primeiro." -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "iDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "Alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "SOFORT" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -21158,23 +21236,64 @@ msgstr "" "a ser confirmados em alguns casos. Por favor, só ativar este método de " "pagamento se o seu prazo de pagamento permite para este atraso." -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "EPS" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "Multibanco" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "Przelewy24" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "WeChat Pay" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Descrição" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of para realizar uma transação. Nenhum dinheiro " "vai realmente ser transferido." -#: pretix/plugins/stripe/payment.py:407 pretix/plugins/stripe/payment.py:757 -#: pretix/plugins/stripe/payment.py:852 +#: pretix/plugins/stripe/payment.py:575 +msgid "No payment information found." +msgstr "Nenhuma informação de pagamento encontrada." + +#: pretix/plugins/stripe/payment.py:591 +msgid "Stripe returned an error" +msgstr "O Stripe reportou um erro" + +#: pretix/plugins/stripe/payment.py:616 +msgid "" +"We had trouble communicating with Stripe. Please try again and contact " +"support if the problem persists." +msgstr "" +"Tivemos problemas a comunicar com o Stripe. Por favor tente novamente e " +"contacte o suporte se os problemas persistirem." + +#: pretix/plugins/stripe/payment.py:689 +msgid "You may need to enable JavaScript for Stripe payments." +msgstr "Precisa de ativar o JavaScript para pagamentos Stripe." + +#: pretix/plugins/stripe/payment.py:761 pretix/plugins/stripe/payment.py:863 +#: pretix/plugins/stripe/payment.py:922 #, python-format msgid "Stripe reported an error with your card: %s" msgstr "O Stripe reportou um erro com o seu cartão: %s" -#: pretix/plugins/stripe/payment.py:434 pretix/plugins/stripe/payment.py:567 -#: pretix/plugins/stripe/payment.py:770 pretix/plugins/stripe/payment.py:864 -#: pretix/plugins/stripe/payment.py:1436 +#: pretix/plugins/stripe/payment.py:769 pretix/plugins/stripe/payment.py:875 +#: pretix/plugins/stripe/payment.py:936 pretix/plugins/stripe/payment.py:1002 msgid "" "We had trouble communicating with Stripe. Please try again and get in touch " "with us if this problem persists." @@ -21201,7 +21339,7 @@ msgstr "" "Tivemos problemas a comunicar com o Stripe. Por favor tente novamente e " "contacte-nos se este problema persistir." -#: pretix/plugins/stripe/payment.py:452 pretix/plugins/stripe/payment.py:804 +#: pretix/plugins/stripe/payment.py:801 msgid "" "Your payment is pending completion. We will inform you as soon as the " "payment completed." @@ -21209,245 +21347,330 @@ msgstr "" "O seu pagamento está pendente de conclusão. Vamos informá-lo assim que o " "pagamento seja completo." -#: pretix/plugins/stripe/payment.py:461 pretix/plugins/stripe/payment.py:818 +#: pretix/plugins/stripe/payment.py:808 +msgid "Your payment failed. Please try again." +msgstr "O pagamento falhou. Por favor, tente novamente." + +#: pretix/plugins/stripe/payment.py:814 pretix/plugins/stripe/payment.py:970 #, python-format msgid "Stripe reported an error: %s" msgstr "O Stripe reportou um erro: %s" -#: pretix/plugins/stripe/payment.py:517 -msgid "No payment information found." -msgstr "Nenhuma informação de pagamento encontrada." - -#: pretix/plugins/stripe/payment.py:538 +#: pretix/plugins/stripe/payment.py:963 +#, fuzzy +#| msgid "" +#| "Your payment is pending completion. We will inform you as soon as the " +#| "payment completed." msgid "" -"We had trouble communicating with Stripe. Please try again and contact " -"support if the problem persists." +"Your payment is pending completion. We will inform you as soon as the " +"payment is completed." msgstr "" -"Tivemos problemas a comunicar com o Stripe. Por favor tente novamente e " -"contacte o suporte se os problemas persistirem." - -#: pretix/plugins/stripe/payment.py:542 -msgid "Stripe returned an error" -msgstr "O Stripe reportou um erro" +"O seu pagamento está pendente de conclusão. Vamos informá-lo assim que o " +"pagamento seja completo." -#: pretix/plugins/stripe/payment.py:638 +#: pretix/plugins/stripe/payment.py:1035 msgid "Credit card via Stripe" msgstr "Cartão de crédito via Stripe" -#: pretix/plugins/stripe/payment.py:639 +#: pretix/plugins/stripe/payment.py:1036 msgid "Credit card" msgstr "Cartão de crédito" -#: pretix/plugins/stripe/payment.py:666 -msgid "You may need to enable JavaScript for Stripe payments." -msgstr "Precisa de ativar o JavaScript para pagamentos Stripe." +#: pretix/plugins/stripe/payment.py:1116 +#, fuzzy +#| msgid "EPS via Stripe" +msgid "SEPA Debit via Stripe" +msgstr "EPS via Stripe" -#: pretix/plugins/stripe/payment.py:812 -msgid "Your payment failed. Please try again." -msgstr "O pagamento falhou. Por favor, tente novamente." +#: pretix/plugins/stripe/payment.py:1117 +msgid "SEPA Debit" +msgstr "" -#: pretix/plugins/stripe/payment.py:885 +#: pretix/plugins/stripe/payment.py:1155 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Name" +msgstr "Titular da conta" + +#: pretix/plugins/stripe/payment.py:1159 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Street" +msgstr "Titular da conta" + +#: pretix/plugins/stripe/payment.py:1168 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Postal Code" +msgstr "Titular da conta" + +#: pretix/plugins/stripe/payment.py:1177 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder City" +msgstr "Titular da conta" + +#: pretix/plugins/stripe/payment.py:1186 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Country" +msgstr "Titular da conta" + +#: pretix/plugins/stripe/payment.py:1224 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Affirm via Stripe" +msgstr "Alipay via Stripe" + +#: pretix/plugins/stripe/payment.py:1263 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Klarna via Stripe" +msgstr "Alipay via Stripe" + +#: pretix/plugins/stripe/payment.py:1368 msgid "giropay via Stripe" msgstr "giropay via Stripe" -#: pretix/plugins/stripe/payment.py:917 pretix/plugins/stripe/payment.py:1084 -#: pretix/plugins/stripe/payment.py:1236 +#: pretix/plugins/stripe/payment.py:1372 +msgid "" +"giropay is an online payment method available to all customers of most " +"German banks, usually after one-time activation. Please keep your online " +"banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1383 pretix/plugins/stripe/payment.py:1451 +#: pretix/plugins/stripe/payment.py:1554 msgid "unknown name" msgstr "nome desconhecido" -#: pretix/plugins/stripe/payment.py:949 pretix/plugins/stripe/payment.py:1001 -#: pretix/plugins/stripe/payment.py:1116 pretix/plugins/stripe/payment.py:1268 -#: pretix/plugins/stripe/payment.py:1371 +#: pretix/plugins/stripe/payment.py:1395 pretix/plugins/stripe/payment.py:1415 +#: pretix/plugins/stripe/payment.py:1459 pretix/plugins/stripe/payment.py:1562 +#: pretix/plugins/stripe/payment.py:1654 #, fuzzy, python-brace-format #| msgid "Bank account type" msgid "Bank account at {bank}" msgstr "Tipo de conta bancária" -#: pretix/plugins/stripe/payment.py:957 +#: pretix/plugins/stripe/payment.py:1403 msgid "iDEAL via Stripe" msgstr "iDEAL via Stripe" -#: pretix/plugins/stripe/payment.py:1009 +#: pretix/plugins/stripe/payment.py:1407 +msgid "" +"iDEAL is an online payment method available to customers of Dutch banks. " +"Please keep your online banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1428 msgid "Alipay via Stripe" msgstr "Alipay via Stripe" -#: pretix/plugins/stripe/payment.py:1052 +#: pretix/plugins/stripe/payment.py:1433 +msgid "" +"This payment method is available to customers of the Chinese payment system " +"Alipay. Please keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1440 msgid "Bancontact via Stripe" msgstr "Bancontact via Stripe" -#: pretix/plugins/stripe/payment.py:1124 +#: pretix/plugins/stripe/payment.py:1472 msgid "SOFORT via Stripe" msgstr "SOFORT via Stripe" -#: pretix/plugins/stripe/payment.py:1141 +#: pretix/plugins/stripe/payment.py:1473 +#, fuzzy +#| msgid "Payment by bank transfer" +msgid "SOFORT (instant bank transfer)" +msgstr "Pagamento por transferência bancária" + +#: pretix/plugins/stripe/payment.py:1491 msgid "Country of your bank" msgstr "País do seu banco" -#: pretix/plugins/stripe/payment.py:1142 +#: pretix/plugins/stripe/payment.py:1492 msgid "Germany" msgstr "Alemanha" -#: pretix/plugins/stripe/payment.py:1143 +#: pretix/plugins/stripe/payment.py:1493 msgid "Austria" msgstr "Áustria" -#: pretix/plugins/stripe/payment.py:1144 +#: pretix/plugins/stripe/payment.py:1494 msgid "Belgium" msgstr "Bélgica" -#: pretix/plugins/stripe/payment.py:1145 +#: pretix/plugins/stripe/payment.py:1495 msgid "Netherlands" msgstr "Países Baixos" -#: pretix/plugins/stripe/payment.py:1146 +#: pretix/plugins/stripe/payment.py:1496 msgid "Spain" msgstr "Espanha" -#: pretix/plugins/stripe/payment.py:1193 +#: pretix/plugins/stripe/payment.py:1532 #, fuzzy, python-brace-format #| msgid "Bank account details" msgid "Bank account {iban} at {bank}" msgstr "Detalhes da conta bancária" -#: pretix/plugins/stripe/payment.py:1204 +#: pretix/plugins/stripe/payment.py:1543 msgid "EPS via Stripe" msgstr "EPS via Stripe" -#: pretix/plugins/stripe/payment.py:1276 +#: pretix/plugins/stripe/payment.py:1575 msgid "Multibanco via Stripe" msgstr "Multibanco via Stripe" -#: pretix/plugins/stripe/payment.py:1323 +#: pretix/plugins/stripe/payment.py:1624 msgid "Przelewy24 via Stripe" msgstr "Przelewy24 via Stripe" -#: pretix/plugins/stripe/payment.py:1379 +#: pretix/plugins/stripe/payment.py:1628 +msgid "" +"Przelewy24 is an online payment method available to customers of Polish " +"banks. Please keep your online banking account and login information " +"available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1662 msgid "WeChat Pay via Stripe" msgstr "WeChat Pay via Stripe" -#: pretix/plugins/stripe/signals.py:65 +#: pretix/plugins/stripe/payment.py:1667 +msgid "" +"This payment method is available to users of the Chinese app WeChat. Please " +"keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1690 +#, fuzzy +#| msgid "Payment via Stripe" +msgid "PayPal via Stripe" +msgstr "Pagamento via Stripe" + +#: pretix/plugins/stripe/payment.py:1697 +#, fuzzy +#| msgid "EPS via Stripe" +msgid "Swish via Stripe" +msgstr "EPS via Stripe" + +#: pretix/plugins/stripe/payment.py:1702 +msgid "" +"This payment method is available to users of the Swedish apps Swish and " +"BankID. Please have your app ready." +msgstr "" + +#: pretix/plugins/stripe/signals.py:70 msgid "Charge succeeded." msgstr "Pagamento com sucesso." -#: pretix/plugins/stripe/signals.py:66 +#: pretix/plugins/stripe/signals.py:71 msgid "Charge refunded." msgstr "Pagamento devolvido." -#: pretix/plugins/stripe/signals.py:67 +#: pretix/plugins/stripe/signals.py:72 msgid "Charge updated." msgstr "Pagamento atualizado." -#: pretix/plugins/stripe/signals.py:68 +#: pretix/plugins/stripe/signals.py:73 msgid "Charge pending" msgstr "Pagamento pendente" -#: pretix/plugins/stripe/signals.py:69 +#: pretix/plugins/stripe/signals.py:74 msgid "Payment authorized." msgstr "Pagamento autorizado." -#: pretix/plugins/stripe/signals.py:70 +#: pretix/plugins/stripe/signals.py:75 msgid "Payment authorization canceled." msgstr "Autorização de pagamento cancelada." -#: pretix/plugins/stripe/signals.py:71 +#: pretix/plugins/stripe/signals.py:76 msgid "Payment authorization failed." msgstr "A autorização de pagamento falhou." -#: pretix/plugins/stripe/signals.py:77 +#: pretix/plugins/stripe/signals.py:82 msgid "Charge failed. Reason: {}" msgstr "O pagamento falhou. Motivo: {}" -#: pretix/plugins/stripe/signals.py:79 +#: pretix/plugins/stripe/signals.py:84 msgid "Dispute created. Reason: {}" msgstr "Disputa criada. Motivo: {}" -#: pretix/plugins/stripe/signals.py:81 +#: pretix/plugins/stripe/signals.py:86 msgid "Dispute updated. Reason: {}" msgstr "Disputa atualizada. Motivo: {}" -#: pretix/plugins/stripe/signals.py:83 +#: pretix/plugins/stripe/signals.py:88 msgid "Dispute closed. Status: {}" msgstr "Disputa fechada. Estado: {}" -#: pretix/plugins/stripe/signals.py:86 +#: pretix/plugins/stripe/signals.py:91 msgid "Stripe reported an event: {}" msgstr "Stripe reportou um evento: {}" -#: pretix/plugins/stripe/signals.py:97 +#: pretix/plugins/stripe/signals.py:102 msgid "Stripe Connect: Client ID" msgstr "Stripe Connect: ID do cliente" -#: pretix/plugins/stripe/signals.py:104 +#: pretix/plugins/stripe/signals.py:109 msgid "Stripe Connect: Secret key" msgstr "Stripe Connect: Chave secreta" -#: pretix/plugins/stripe/signals.py:111 +#: pretix/plugins/stripe/signals.py:116 msgid "Stripe Connect: Publishable key" msgstr "Stripe Connect: Chave publicável" -#: pretix/plugins/stripe/signals.py:118 +#: pretix/plugins/stripe/signals.py:123 msgid "Stripe Connect: Secret key (test)" msgstr "Stripe Connect: Chave secreta (teste)" -#: pretix/plugins/stripe/signals.py:125 +#: pretix/plugins/stripe/signals.py:130 msgid "Stripe Connect: Publishable key (test)" msgstr "Stripe Connect: Chave publicável (teste)" -#: pretix/plugins/stripe/signals.py:170 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:6 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:9 +#: pretix/plugins/stripe/signals.py:156 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:3 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:9 msgid "Stripe Connect" msgstr "Stripe Connect" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"A transação Stripe %(charge)s sucedeu, mas a " -"encomenda %(order)s já foi paga por outros meios. Por favor, reembolse o " -"dinheiro via interface de Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"A transação Stripe %(charge)s teve sucesso, mas a " -"encomenda %(order)s expirou e o produto foi vendido no mesmo período. " -"Portanto, o pagamento não pôde ser aceite. Entre em contato com o utilizador " -"e reembolse o dinheiro via interface de Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"Stripe informou que a transação %(charge)s foi " -"reembolsada. Você quer marca a encomenda correspondente (%(order)s) como " -"reembolsada?" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "O montante total será debitado do seu cartão de crédito." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "Tipo de cartão" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "O montante total será debitado do seu cartão de crédito." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Titular da conta" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -21457,7 +21680,7 @@ msgstr "" "serviços de pagamento para concluir o pagamento. Em seguida, será " "redirecionado de volta aqui para obter os seus bilhetes." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" @@ -21466,11 +21689,11 @@ msgstr "" "telefoner, isentando-o de Strong Customer Authentication (SCA), sempre que " "possível" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "Para pagamentos com cartão de crédito, por favor ative o JavaScript." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." @@ -21478,15 +21701,15 @@ msgstr "" "Você já entrou um número de cartão que iremos utilizar para carregar o valor " "do pagamento." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "Use um cartão diferente" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "OU" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -21495,26 +21718,80 @@ msgstr "" "crédito serão transmitidos diretamente para o Stripe e nunca chega aos " "nossos servidores." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "Para pagamentos com cartão de crédito, por favor ative o JavaScript." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"Você já entrou um número de cartão que iremos utilizar para carregar o valor " +"do pagamento." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "Use um cartão diferente" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "ID da cobrança" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "Nome do pagador" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "MOTO" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "Nome do pagador" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "Mensagem de erro" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to regenerate your emergency codes?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Quer mesmo regenerar os seus códigos de emergência?" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Connect" +msgid "Disconnect" +msgstr "Conectar" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -21522,7 +21799,7 @@ msgstr "" "Estamos à espera de uma resposta do provedor de pagamento sobre o seu " "pagamento. Entre em contato connosco se isso leva mais do que alguns dias." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." @@ -21530,11 +21807,11 @@ msgstr "" "Precisa confirmar o seu pagamento. Por favor, clique no link abaixo para " "fazer isso ou inicie um novo pagamento." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "Confirme o pagamento" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." @@ -21543,55 +21820,59 @@ msgstr "" "pagamento WeChat. Uma vez concluído o seu pagamento, pode atualizar esta " "página." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "A operação de pagamento não pode ser concluída pelo seguinte motivo:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Razão desconhecida" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Ordem de pagamento" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "Confirmar pagamento: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "A confirmar pagamento …" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" "Ocorreu um erro durante a conexão com o Stripe, por favor tente novamente." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "O Stripe retornou um erro: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" "A sua conta Stripe está agora ligada ao pretix. Pode alterar as " "configurações em detalhe abaixo." -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "A sua conta Stripe foi removida." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -21599,7 +21880,7 @@ msgstr "" "Desculpe, houve um erro no processo de pagamento. Verifique o link nos seus " "e-mails para continuar." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -21607,7 +21888,7 @@ msgstr "" "Tivemos problemas em autorizar o pagamento com cartão. Por favor tente " "novamente e entre em contato connosco, se este problema pressistir." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "Pedimos desculpa, houve um erro a processar o pagamento." @@ -23664,6 +23945,38 @@ msgstr "Permissão de escrita" msgid "Kosovo" msgstr "Kosovo" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "A transação Stripe %(charge)s sucedeu, mas a " +#~ "encomenda %(order)s já foi paga por outros meios. Por favor, reembolse o " +#~ "dinheiro via interface de Stripe." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "A transação Stripe %(charge)s teve sucesso, mas a " +#~ "encomenda %(order)s expirou e o produto foi vendido no mesmo período. " +#~ "Portanto, o pagamento não pôde ser aceite. Entre em contato com o " +#~ "utilizador e reembolse o dinheiro via interface de Stripe." + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "Stripe informou que a transação %(charge)s foi " +#~ "reembolsada. Você quer marca a encomenda correspondente (%(order)s) como " +#~ "reembolsada?" + #, fuzzy #~| msgid "Only include tickets for dates on or before this date." #~ msgid "Only include orders issued on or before this date." diff --git a/src/pretix/locale/pt_PT/LC_MESSAGES/djangojs.po b/src/pretix/locale/pt_PT/LC_MESSAGES/djangojs.po index b55099da3..4223d19f5 100644 --- a/src/pretix/locale/pt_PT/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/pt_PT/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-10-27 06:00+0000\n" "Last-Translator: David Vaz \n" "Language-Team: Portuguese (Portugal) \n" "Language-Team: LANGUAGE \n" @@ -315,7 +315,7 @@ msgstr "" #: pretix/base/auth.py:113 pretix/base/forms/auth.py:207 #: pretix/base/models/auth.py:90 pretix/base/models/notifications.py:25 -#: pretix/base/models/orders.py:146 pretix/control/navigation.py:60 +#: pretix/base/models/orders.py:184 pretix/control/navigation.py:60 #: pretix/control/templates/pretixcontrol/event/settings.html:67 #: pretix/plugins/checkinlists/exporters.py:417 #: pretix/presale/checkoutflow.py:823 pretix/presale/forms/checkout.py:23 @@ -459,8 +459,8 @@ msgid "" "date does not always correspond to the order or payment date." msgstr "" -#: pretix/base/exporters/invoices.py:52 pretix/base/models/orders.py:1354 -#: pretix/base/models/orders.py:1731 pretix/control/forms/filter.py:139 +#: pretix/base/exporters/invoices.py:52 pretix/base/models/orders.py:1395 +#: pretix/base/models/orders.py:1772 pretix/control/forms/filter.py:139 #: pretix/control/forms/filter.py:1541 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:9 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:14 @@ -510,7 +510,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:166 pretix/base/exporters/invoices.py:294 #: pretix/base/exporters/orderlist.py:850 #: pretix/base/exporters/waitinglist.py:84 pretix/base/models/items.py:1024 -#: pretix/base/models/orders.py:158 pretix/base/models/orders.py:2207 +#: pretix/base/models/orders.py:196 pretix/base/models/orders.py:2248 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:63 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:17 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:11 @@ -522,7 +522,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:167 pretix/base/exporters/invoices.py:295 #: pretix/base/exporters/orderlist.py:234 #: pretix/base/exporters/orderlist.py:398 -#: pretix/base/exporters/orderlist.py:500 pretix/base/models/orders.py:128 +#: pretix/base/exporters/orderlist.py:500 pretix/base/models/orders.py:166 #: pretix/base/notifications.py:190 pretix/base/pdf.py:58 #: pretix/control/templates/pretixcontrol/checkin/index.html:65 #: pretix/control/templates/pretixcontrol/order/index.html:162 @@ -577,7 +577,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:172 pretix/base/exporters/invoices.py:180 #: pretix/base/exporters/invoices.py:299 pretix/base/exporters/invoices.py:307 #: pretix/base/exporters/orderlist.py:235 -#: pretix/base/exporters/waitinglist.py:85 pretix/base/forms/questions.py:811 +#: pretix/base/exporters/waitinglist.py:85 pretix/base/forms/questions.py:815 #: pretix/base/models/devices.py:45 pretix/base/models/devices.py:105 #: pretix/base/models/event.py:1123 pretix/base/models/event.py:1376 #: pretix/base/models/items.py:1365 pretix/base/models/items.py:1523 @@ -614,8 +614,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:528 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:412 -#: pretix/base/models/orders.py:1160 pretix/base/models/orders.py:2258 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:416 +#: pretix/base/models/orders.py:1201 pretix/base/models/orders.py:2299 #: pretix/base/orderimport.py:274 pretix/base/orderimport.py:420 #: pretix/control/forms/filter.py:525 pretix/control/forms/filter.py:556 #: pretix/control/templates/pretixcontrol/order/index.html:823 @@ -631,8 +631,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:529 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:423 -#: pretix/base/models/orders.py:1161 pretix/base/models/orders.py:2259 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:427 +#: pretix/base/models/orders.py:1202 pretix/base/models/orders.py:2300 #: pretix/base/orderimport.py:285 pretix/base/orderimport.py:431 #: pretix/base/settings.py:701 pretix/control/forms/filter.py:529 #: pretix/control/forms/filter.py:560 pretix/control/views/item.py:354 @@ -646,8 +646,8 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:530 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:431 -#: pretix/base/models/orders.py:1162 pretix/base/models/orders.py:2260 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:435 +#: pretix/base/models/orders.py:1203 pretix/base/models/orders.py:2301 #: pretix/base/orderimport.py:296 pretix/base/orderimport.py:442 #: pretix/base/settings.py:713 pretix/control/forms/filter.py:534 #: pretix/control/forms/filter.py:565 pretix/control/views/item.py:364 @@ -661,9 +661,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:531 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:443 -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2261 -#: pretix/base/models/orders.py:2262 pretix/base/orderimport.py:312 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:447 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2302 +#: pretix/base/models/orders.py:2303 pretix/base/orderimport.py:312 #: pretix/base/orderimport.py:458 pretix/base/settings.py:722 #: pretix/control/forms/filter.py:539 pretix/control/forms/filter.py:570 #: pretix/control/templates/pretixcontrol/order/index.html:827 @@ -685,7 +685,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:305 pretix/base/exporters/invoices.py:313 #: pretix/base/exporters/orderlist.py:243 #: pretix/base/exporters/orderlist.py:418 -#: pretix/base/exporters/orderlist.py:566 pretix/base/models/orders.py:2265 +#: pretix/base/exporters/orderlist.py:566 pretix/base/models/orders.py:2306 #: pretix/base/orderimport.py:356 #: pretix/control/templates/pretixcontrol/order/index.html:834 #: pretix/plugins/reports/exporters.py:721 @@ -712,7 +712,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:235 #: pretix/base/exporters/orderlist.py:410 #: pretix/base/exporters/orderlist.py:527 -#: pretix/base/exporters/orderlist.py:559 pretix/base/forms/questions.py:404 +#: pretix/base/exporters/orderlist.py:559 pretix/base/forms/questions.py:408 #: pretix/base/orderimport.py:244 pretix/base/orderimport.py:409 #: pretix/control/forms/filter.py:517 pretix/control/forms/filter.py:552 #: pretix/control/templates/pretixcontrol/order/index.html:819 @@ -733,9 +733,9 @@ msgstr "" #: pretix/base/exporters/orderlist.py:242 #: pretix/base/exporters/orderlist.py:418 #: pretix/base/exporters/orderlist.py:532 -#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:467 -#: pretix/base/forms/questions.py:777 pretix/base/models/orders.py:1164 -#: pretix/base/models/orders.py:2264 pretix/base/orderimport.py:331 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:471 +#: pretix/base/forms/questions.py:781 pretix/base/models/orders.py:1205 +#: pretix/base/models/orders.py:2305 pretix/base/orderimport.py:331 #: pretix/control/templates/pretixcontrol/order/index.html:830 #: pretix/plugins/checkinlists/exporters.py:444 #: pretix/plugins/reports/exporters.py:720 @@ -746,13 +746,13 @@ msgid "State" msgstr "" #: pretix/base/exporters/invoices.py:187 pretix/base/exporters/invoices.py:314 -#: pretix/base/models/orders.py:2275 +#: pretix/base/models/orders.py:2316 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:114 msgid "Beneficiary" msgstr "" #: pretix/base/exporters/invoices.py:188 pretix/base/exporters/invoices.py:315 -#: pretix/base/models/orders.py:2270 pretix/base/orderimport.py:367 +#: pretix/base/models/orders.py:2311 pretix/base/orderimport.py:367 #: pretix/control/templates/pretixcontrol/order/index.html:854 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:121 msgid "Internal reference" @@ -803,7 +803,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:271 pretix/base/exporters/orderlist.py:359 #: pretix/base/exporters/orderlist.py:659 -#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1029 +#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1070 #: pretix/control/forms/filter.py:106 pretix/control/forms/filter.py:426 #: pretix/control/forms/item.py:425 pretix/control/forms/subevents.py:97 #: pretix/control/views/item.py:565 pretix/control/views/vouchers.py:92 @@ -819,7 +819,7 @@ msgstr "" #: pretix/base/exporters/invoices.py:271 pretix/base/exporters/orderlist.py:359 #: pretix/base/exporters/orderlist.py:659 -#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1031 +#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1072 #: pretix/control/forms/filter.py:106 pretix/control/forms/filter.py:427 #: pretix/control/forms/item.py:426 pretix/control/forms/subevents.py:98 #: pretix/control/views/item.py:565 pretix/control/views/vouchers.py:92 @@ -852,14 +852,14 @@ msgid "Net price" msgstr "" #: pretix/base/exporters/invoices.py:289 pretix/base/exporters/orderlist.py:409 -#: pretix/base/exporters/orderlist.py:518 pretix/base/models/orders.py:1879 -#: pretix/base/models/orders.py:1979 +#: pretix/base/exporters/orderlist.py:518 pretix/base/models/orders.py:1920 +#: pretix/base/models/orders.py:2020 msgid "Tax value" msgstr "" #: pretix/base/exporters/invoices.py:290 pretix/base/exporters/orderlist.py:407 -#: pretix/base/exporters/orderlist.py:516 pretix/base/models/orders.py:1870 -#: pretix/base/models/orders.py:1970 pretix/base/models/tax.py:114 +#: pretix/base/exporters/orderlist.py:516 pretix/base/models/orders.py:1911 +#: pretix/base/models/orders.py:2011 pretix/base/models/tax.py:114 #: pretix/plugins/reports/exporters.py:670 #: pretix/plugins/reports/exporters.py:715 msgid "Tax rate" @@ -886,7 +886,7 @@ msgstr "" msgid "Order data" msgstr "" -#: pretix/base/exporters/orderlist.py:45 pretix/base/models/orders.py:209 +#: pretix/base/exporters/orderlist.py:45 pretix/base/models/orders.py:247 #: pretix/control/navigation.py:224 #: pretix/control/templates/pretixcontrol/orders/index.html:7 #: pretix/control/templates/pretixcontrol/orders/index.html:9 @@ -894,7 +894,7 @@ msgstr "" msgid "Orders" msgstr "" -#: pretix/base/exporters/orderlist.py:46 pretix/base/models/orders.py:1995 +#: pretix/base/exporters/orderlist.py:46 pretix/base/models/orders.py:2036 #: pretix/base/notifications.py:196 msgid "Order positions" msgstr "" @@ -960,7 +960,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:744 #: pretix/base/exporters/orderlist.py:899 #: pretix/base/exporters/waitinglist.py:97 -#: pretix/base/exporters/waitinglist.py:145 pretix/base/models/orders.py:134 +#: pretix/base/exporters/waitinglist.py:145 pretix/base/models/orders.py:172 #: pretix/control/forms/filter.py:773 pretix/control/forms/filter.py:1000 #: pretix/control/forms/filter.py:1269 pretix/control/forms/filter.py:1350 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:39 @@ -977,7 +977,7 @@ msgstr "" #: pretix/control/views/waitinglist.py:214 #: pretix/plugins/reports/exporters.py:422 #: pretix/plugins/reports/exporters.py:763 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:61 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:79 #: pretix/presale/templates/pretixpresale/organizers/index.html:67 msgid "Status" msgstr "" @@ -995,7 +995,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:401 #: pretix/base/exporters/orderlist.py:504 #: pretix/base/exporters/waitinglist.py:87 pretix/base/models/items.py:1028 -#: pretix/base/models/orders.py:150 pretix/base/models/waitinglist.py:56 +#: pretix/base/models/orders.py:188 pretix/base/models/waitinglist.py:56 #: pretix/base/pdf.py:252 #: pretix/control/templates/pretixcontrol/order/index.html:210 #: pretix/control/templates/pretixcontrol/waitinglist/index.html:140 @@ -1076,13 +1076,13 @@ msgid "Sales channel" msgstr "" #: pretix/base/exporters/orderlist.py:255 pretix/base/models/items.py:402 -#: pretix/base/models/orders.py:176 +#: pretix/base/models/orders.py:214 #: pretix/plugins/checkinlists/exporters.py:432 msgid "Requires special attention" msgstr "" #: pretix/base/exporters/orderlist.py:256 -#: pretix/base/exporters/orderlist.py:745 pretix/base/models/orders.py:171 +#: pretix/base/exporters/orderlist.py:745 pretix/base/models/orders.py:209 #: pretix/base/models/vouchers.py:197 pretix/base/orderimport.py:623 #: pretix/control/forms/filter.py:463 #: pretix/control/templates/pretixcontrol/order/index.html:772 @@ -1108,7 +1108,7 @@ msgid "Fee type" msgstr "" #: pretix/base/exporters/orderlist.py:406 -#: pretix/base/exporters/orderlist.py:515 pretix/base/models/orders.py:1129 +#: pretix/base/exporters/orderlist.py:515 pretix/base/models/orders.py:1170 #: pretix/base/orderimport.py:499 pretix/base/pdf.py:105 #: pretix/control/templates/pretixcontrol/item/index.html:88 #: pretix/control/templates/pretixcontrol/order/change.html:157 @@ -1140,7 +1140,7 @@ msgstr "" #: pretix/base/exporters/orderlist.py:509 #: pretix/base/exporters/orderlist.py:790 pretix/base/models/checkin.py:19 -#: pretix/base/models/items.py:1361 pretix/base/models/orders.py:1111 +#: pretix/base/models/items.py:1361 pretix/base/models/orders.py:1152 #: pretix/base/models/vouchers.py:101 pretix/base/models/waitinglist.py:37 #: pretix/control/forms/event.py:1222 pretix/control/forms/filter.py:331 #: pretix/control/forms/filter.py:1387 pretix/control/forms/filter.py:1501 @@ -1185,13 +1185,13 @@ msgid "Product" msgstr "" #: pretix/base/exporters/orderlist.py:514 -#: pretix/base/exporters/waitinglist.py:89 pretix/base/models/orders.py:1121 +#: pretix/base/exporters/waitinglist.py:89 pretix/base/models/orders.py:1162 msgid "Variation" msgstr "" #: pretix/base/exporters/orderlist.py:519 -#: pretix/base/exporters/orderlist.py:524 pretix/base/forms/questions.py:387 -#: pretix/base/models/orders.py:1133 pretix/base/orderimport.py:381 +#: pretix/base/exporters/orderlist.py:524 pretix/base/forms/questions.py:391 +#: pretix/base/models/orders.py:1174 pretix/base/orderimport.py:381 #: pretix/base/pdf.py:119 pretix/control/forms/filter.py:544 #: pretix/control/templates/pretixcontrol/order/index.html:394 #: pretix/control/views/item.py:308 pretix/plugins/badges/exporters.py:258 @@ -1204,8 +1204,8 @@ msgstr "" msgid "Attendee name" msgstr "" -#: pretix/base/exporters/orderlist.py:526 pretix/base/forms/questions.py:393 -#: pretix/base/models/orders.py:1141 pretix/base/pdf.py:161 +#: pretix/base/exporters/orderlist.py:526 pretix/base/forms/questions.py:397 +#: pretix/base/models/orders.py:1182 pretix/base/pdf.py:161 #: pretix/control/templates/pretixcontrol/order/index.html:399 #: pretix/control/views/item.py:320 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:60 @@ -1267,9 +1267,9 @@ msgid "Refund states" msgstr "" #: pretix/base/exporters/orderlist.py:744 -#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:208 -#: pretix/base/models/orders.py:1341 pretix/base/models/orders.py:1712 -#: pretix/base/models/orders.py:1859 pretix/base/models/orders.py:1964 +#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:246 +#: pretix/base/models/orders.py:1382 pretix/base/models/orders.py:1753 +#: pretix/base/models/orders.py:1900 pretix/base/models/orders.py:2005 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:64 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:15 #: pretix/plugins/checkinlists/exporters.py:295 @@ -1299,8 +1299,8 @@ msgid "Status code" msgstr "" #: pretix/base/exporters/orderlist.py:745 -#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:1337 -#: pretix/base/models/orders.py:1708 +#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:1378 +#: pretix/base/models/orders.py:1749 #: pretix/control/templates/pretixcontrol/order/index.html:618 #: pretix/control/templates/pretixcontrol/order/index.html:714 #: pretix/control/templates/pretixcontrol/orders/refunds.html:67 @@ -1314,7 +1314,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/order/index.html:616 #: pretix/control/templates/pretixcontrol/order/index.html:711 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:84 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:19 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:29 msgid "Payment method" msgstr "" @@ -1481,7 +1481,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:34 #: pretix/plugins/banktransfer/refund_export.py:25 #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:15 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:57 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:75 msgid "Currency" msgstr "" @@ -1612,31 +1612,31 @@ msgstr "" msgid "Repeat password" msgstr "" -#: pretix/base/forms/questions.py:205 +#: pretix/base/forms/questions.py:209 msgid "Please enter a shorter name." msgstr "" -#: pretix/base/forms/questions.py:225 +#: pretix/base/forms/questions.py:229 msgctxt "phonenumber" msgid "International area code" msgstr "" -#: pretix/base/forms/questions.py:249 +#: pretix/base/forms/questions.py:253 msgctxt "phonenumber" msgid "Phone number (without international area code)" msgstr "" -#: pretix/base/forms/questions.py:415 pretix/base/forms/questions.py:719 +#: pretix/base/forms/questions.py:419 pretix/base/forms/questions.py:723 msgid "Street and Number" msgstr "" -#: pretix/base/forms/questions.py:449 pretix/base/forms/questions.py:759 +#: pretix/base/forms/questions.py:453 pretix/base/forms/questions.py:763 msgctxt "address" msgid "Select state" msgstr "" -#: pretix/base/forms/questions.py:672 pretix/base/forms/questions.py:703 -#: pretix/base/forms/questions.py:850 pretix/base/payment.py:51 +#: pretix/base/forms/questions.py:676 pretix/base/forms/questions.py:707 +#: pretix/base/forms/questions.py:854 pretix/base/payment.py:63 #: pretix/control/forms/event.py:637 pretix/control/forms/event.py:643 #: pretix/control/forms/event.py:694 pretix/control/forms/event.py:1133 #: pretix/plugins/banktransfer/payment.py:362 @@ -1644,23 +1644,23 @@ msgstr "" msgid "This field is required." msgstr "" -#: pretix/base/forms/questions.py:841 +#: pretix/base/forms/questions.py:845 msgid "You need to provide a company name." msgstr "" -#: pretix/base/forms/questions.py:843 +#: pretix/base/forms/questions.py:847 msgid "You need to provide your name." msgstr "" -#: pretix/base/forms/questions.py:861 pretix/control/views/orders.py:1234 +#: pretix/base/forms/questions.py:865 pretix/control/views/orders.py:1234 msgid "Your VAT ID does not match the selected country." msgstr "" -#: pretix/base/forms/questions.py:873 +#: pretix/base/forms/questions.py:877 msgid "This VAT ID is not valid. Please re-check your input." msgstr "" -#: pretix/base/forms/questions.py:878 +#: pretix/base/forms/questions.py:882 msgid "" "Your VAT ID could not be checked, as the VAT checking service of your " "country is currently not available. We will therefore need to charge VAT on " @@ -1668,7 +1668,7 @@ msgid "" "process." msgstr "" -#: pretix/base/forms/questions.py:886 +#: pretix/base/forms/questions.py:890 msgid "" "Your VAT ID could not be checked, as the VAT checking service of your " "country returned an incorrect result. We will therefore need to charge VAT " @@ -1741,7 +1741,7 @@ msgid "Invalid placeholder(s): %(value)s" msgstr "" #: pretix/base/forms/widgets.py:153 pretix/base/forms/widgets.py:158 -#: pretix/base/models/orders.py:2254 +#: pretix/base/models/orders.py:2295 msgid "Business customer" msgstr "" @@ -1958,7 +1958,7 @@ msgstr "" msgid "Modern Invoice Renderer" msgstr "" -#: pretix/base/models/auth.py:92 pretix/base/models/orders.py:2256 +#: pretix/base/models/auth.py:92 pretix/base/models/orders.py:2297 #: pretix/base/settings.py:2462 pretix/base/settings.py:2473 #: pretix/control/templates/pretixcontrol/users/index.html:42 msgid "Full name" @@ -2232,7 +2232,7 @@ msgstr "" msgid "Event series" msgstr "" -#: pretix/base/models/event.py:431 pretix/base/payment.py:312 +#: pretix/base/models/event.py:431 pretix/base/payment.py:324 msgid "Restrict to specific sales channels" msgstr "" @@ -2241,8 +2241,8 @@ msgid "Only sell tickets for this event on the following sales channels." msgstr "" #: pretix/base/models/event.py:438 pretix/base/models/items.py:256 -#: pretix/base/models/items.py:1354 pretix/base/models/orders.py:140 -#: pretix/base/models/orders.py:2199 pretix/base/models/vouchers.py:95 +#: pretix/base/models/items.py:1354 pretix/base/models/orders.py:178 +#: pretix/base/models/orders.py:2240 pretix/base/models/vouchers.py:95 #: pretix/base/models/waitinglist.py:31 pretix/base/notifications.py:178 #: pretix/control/templates/pretixcontrol/search/orders.html:44 #: pretix/presale/templates/pretixpresale/event/waitinglist.html:18 @@ -2539,7 +2539,7 @@ msgstr "" msgid "This product will not be sold before the given date." msgstr "" -#: pretix/base/models/items.py:341 pretix/base/payment.py:236 +#: pretix/base/models/items.py:341 pretix/base/payment.py:248 msgid "Available until" msgstr "" @@ -2979,7 +2979,7 @@ msgstr "" msgid "Leave empty for an unlimited number of tickets." msgstr "" -#: pretix/base/models/items.py:1374 pretix/base/models/orders.py:1115 +#: pretix/base/models/items.py:1374 pretix/base/models/orders.py:1156 #: pretix/control/templates/pretixcontrol/checkin/index.html:67 msgid "Item" msgstr "" @@ -3083,43 +3083,43 @@ msgstr "" msgid "Tax rule {val}" msgstr "" -#: pretix/base/models/orders.py:120 +#: pretix/base/models/orders.py:158 msgid "pending" msgstr "" -#: pretix/base/models/orders.py:121 +#: pretix/base/models/orders.py:159 msgid "paid" msgstr "" -#: pretix/base/models/orders.py:122 +#: pretix/base/models/orders.py:160 msgid "expired" msgstr "" -#: pretix/base/models/orders.py:123 +#: pretix/base/models/orders.py:161 msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:154 pretix/control/forms/filter.py:467 +#: pretix/base/models/orders.py:192 pretix/control/forms/filter.py:467 msgid "Locale" msgstr "" -#: pretix/base/models/orders.py:164 pretix/base/models/orders.py:2211 +#: pretix/base/models/orders.py:202 pretix/base/models/orders.py:2252 #: pretix/control/forms/orders.py:41 msgid "Expiration date" msgstr "" -#: pretix/base/models/orders.py:168 pretix/control/forms/filter.py:478 +#: pretix/base/models/orders.py:206 pretix/control/forms/filter.py:478 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:57 msgid "Total amount" msgstr "" -#: pretix/base/models/orders.py:172 pretix/base/models/vouchers.py:198 +#: pretix/base/models/orders.py:210 pretix/base/models/vouchers.py:198 msgid "" "The text entered in this field will not be visible to the user and is " "available for your convenience." msgstr "" -#: pretix/base/models/orders.py:178 +#: pretix/base/models/orders.py:216 msgid "" "If you set this, the check-in app will show a visible warning that tickets " "of this order require special attention. This will not show any details or " @@ -3127,237 +3127,237 @@ msgid "" "cases." msgstr "" -#: pretix/base/models/orders.py:190 pretix/base/models/orders.py:1152 +#: pretix/base/models/orders.py:228 pretix/base/models/orders.py:1193 msgid "Meta information" msgstr "" -#: pretix/base/models/orders.py:202 pretix/control/forms/filter.py:473 +#: pretix/base/models/orders.py:240 pretix/control/forms/filter.py:473 msgid "E-mail address verified" msgstr "" -#: pretix/base/models/orders.py:767 +#: pretix/base/models/orders.py:805 msgid "" "The payment can not be accepted as the last date of payments configured in " "the payment settings is over." msgstr "" -#: pretix/base/models/orders.py:769 +#: pretix/base/models/orders.py:807 msgid "" "The payment can not be accepted as the order is expired and you configured " "that no late payments should be accepted in the payment settings." msgstr "" -#: pretix/base/models/orders.py:771 +#: pretix/base/models/orders.py:809 msgid "This order is not yet approved by the event organizer." msgstr "" -#: pretix/base/models/orders.py:791 +#: pretix/base/models/orders.py:829 #, python-brace-format msgid "The ordered product \"{item}\" is no longer available." msgstr "" -#: pretix/base/models/orders.py:792 +#: pretix/base/models/orders.py:830 #, python-brace-format msgid "The seat \"{seat}\" is no longer available." msgstr "" -#: pretix/base/models/orders.py:793 +#: pretix/base/models/orders.py:831 #, python-brace-format msgid "The voucher \"{voucher}\" no longer has sufficient budget." msgstr "" -#: pretix/base/models/orders.py:794 +#: pretix/base/models/orders.py:832 #, python-brace-format msgid "The voucher \"{voucher}\" has been used in the meantime." msgstr "" -#: pretix/base/models/orders.py:922 pretix/base/services/orders.py:862 +#: pretix/base/models/orders.py:960 pretix/base/services/orders.py:862 #: pretix/control/views/event.py:701 #: pretix/presale/templates/pretixpresale/event/order.html:63 #, python-format msgid "Your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1033 +#: pretix/base/models/orders.py:1074 msgid "" msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" @@ -3511,7 +3511,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "" @@ -4080,20 +4080,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "" -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4101,45 +4111,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4148,94 +4158,94 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4244,11 +4254,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4256,87 +4266,87 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "" -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "" -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "" -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "" -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "" -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" @@ -10255,7 +10265,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10349,7 +10359,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -10514,10 +10524,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -10676,7 +10685,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -11474,7 +11483,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -15749,7 +15758,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -16914,7 +16923,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -17221,19 +17230,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -17797,7 +17807,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -17815,16 +17825,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -17898,8 +17908,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -18001,7 +18011,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18018,17 +18028,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -18421,12 +18431,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -18436,34 +18446,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -18471,20 +18481,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -18495,73 +18505,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -18569,23 +18636,62 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +msgid "Destination" +msgstr "" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +msgid "Account number" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/ro/LC_MESSAGES/djangojs.po b/src/pretix/locale/ro/LC_MESSAGES/djangojs.po index 0067156ed..b7ba19fd5 100644 --- a/src/pretix/locale/ro/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/ro/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -42,20 +42,23 @@ msgstr "" msgid "Total revenue" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:15 msgid "Contacting Stripe …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:60 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:72 msgid "Total" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152 -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:242 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:265 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:282 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:315 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:339 msgid "Confirming your payment …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:159 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:289 msgid "Contacting your bank …" msgstr "" diff --git a/src/pretix/locale/ru/LC_MESSAGES/django.po b/src/pretix/locale/ru/LC_MESSAGES/django.po index a147e7857..c1cad5425 100644 --- a/src/pretix/locale/ru/LC_MESSAGES/django.po +++ b/src/pretix/locale/ru/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2020-09-23 17:00+0000\n" "Last-Translator: Svyatoslav \n" "Language-Team: Russian " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Пусто, если данный продукт не является входным билетом" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Выбрать страну" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "создано" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "не завершено" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "подтверждено" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "отменено" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "не удалось" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "возвращено" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Информация о платеже" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "Регистрация мероприятия подтверждена: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Получена оплата за ваш заказ: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "начато извне" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "создано" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "в пути" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "готово" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "не удалось" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "отменено" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Организатор" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Клиент" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Внешний" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Pending amount" msgid "Refund reason" msgstr "Неуплаченная сумма" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Платёжный сбор" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Плата за доставку" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Плата за обслуживание" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Плата за отмену" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Другие сборы" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Подарочный сертификат" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Позиция заказа" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "Регистрация вашего мероприятия: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "ID корзины (например, сеансовый ключ)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Позиция корзины" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Позиции корзины" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Только для корпоративных клиентов в ЕС." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "Данная ссылка будет напечатана на вашем счёте для вашего удобства." @@ -3808,7 +3808,7 @@ msgstr "" "консультации с налоговым консультантом. Не предоставляется гарантия " "правильного расчёта налога. ИСПОЛЬЗУЙТЕ НА СВОЙ РИСК." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "Страна коммерсанта" @@ -4466,22 +4466,32 @@ msgstr "Вам необходимо выбрать конкретное мест msgid "Ambiguous option selected." msgstr "Выбрана неверная опция." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Активировать способ оплаты" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Пользователи не смогут выбрать этого поставщика платёжных услуг после " "указанной даты." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Текст в счетах" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4493,11 +4503,11 @@ msgstr "" "оплаты заказа. Если счёт будет сгенерирован позже, на нём будет отображён " "текст, подтверждающий, что он уже оплачен." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Минимальная общая сумма заказа" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4507,11 +4517,11 @@ msgstr "" "превышает заданную величину. Общая сумма заказа для этой цели может быть " "рассчитана без учёта сборов, взимаемых данным способом оплаты." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Максимальная общая сумма заказа" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4521,23 +4531,23 @@ msgstr "" "равна или ниже заданной величины. Общая сумма заказа для этой цели может " "быть рассчитана без учёта сборов, взимаемых данным способом оплаты." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Дополнительный сбор" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Абсолютная величина" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "Процент от общей суммы заказа." -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Рассчитать сбор из общей стоимости, включающей сбор." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4551,11 +4561,11 @@ msgstr "" "получить об этом подробную информацию. Не забудьте установить выше " "правильные сборы!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "Ограничить следующими странами" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4566,44 +4576,44 @@ msgstr "" "все страны будут разрешены. Этот параметр активируется только в том случае, " "если требуется адрес выставления счёта." -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 #, fuzzy #| msgid "Enable payment method" msgid "Hide payment method" msgstr "Активировать способ оплаты" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 #, fuzzy #| msgid "Enable payment method" msgid "Link to enable payment method" msgstr "Активировать способ оплаты" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "Оплата по этому счёту уже получена." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" "Автоматический возврат не поддерживается этим поставщиком платёжных услуг." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4611,35 +4621,35 @@ msgstr "" "Оплата не требуется, так как этот заказ включает в себя только бесплатные " "продукты." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Бесплатно" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Касса" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "Описание процесса оплаты при оформлении заказа" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4648,13 +4658,13 @@ msgstr "" "выбирает этот способ оплаты. Следует предоставить краткое объяснение этого " "способа оплаты." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" "Описание процесса оплаты в письмах по электронной почте с подтверждением " "заказа" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, fuzzy, python-brace-format #| msgid "" #| "This text will be included for the {payment_info} placeholder in order " @@ -4672,11 +4682,11 @@ msgstr "" "пользователя о том, как приступить к оплате. Вы можете использовать " "заполнители {order}, {total}, {currency} и {total_with_currency}" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "Описание процесса оплаты для незавершённых заказов" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, fuzzy, python-brace-format #| msgid "" #| "This text will be shown on the order confirmation page for pending " @@ -4693,62 +4703,62 @@ msgstr "" "приступить к оплате. Вы можете использовать заполнители {order}, {total}, " "{currency} и {total_with_currency}" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "Взаимозачёт" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "Сопоставлено с заказами: %s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "В тестовом режиме, будут работать только тестовые карты." -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" "Покупку подарочного сертификата нельзя оплатить подарочными сертификатами." -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "Этот подарочный сертификат не поддерживает данную валюту." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "" "Этот подарочный сертификат можно использовать только в тестовом режиме." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" "В тестовом режиме можно использовать только тестовые подарочные сертификаты." -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 #, fuzzy #| msgid "This gift card is not known." msgid "This gift card is no longer valid." msgstr "Этот подарочный сертификат неизвестен." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "По этому подарочному сертификату был использован весь кредит." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "Этот подарочный сертификат уже используется для вашей оплаты." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." @@ -4756,11 +4766,11 @@ msgstr "" "Ваш подарочный сертификат использован, но всё еще необходимо доплатить {}. " "Пожалуйста, выберите способ оплаты." -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "Ваш подарочный сертификат использован." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." @@ -4768,11 +4778,11 @@ msgstr "" "Вы ввели ваучер вместо подарочного сертификата. Ваучеры можно вводить только " "на первой странице магазина под ассортиментом продуктов." -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "Этот подарочный сертификат неизвестен." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." @@ -4780,11 +4790,11 @@ msgstr "" "Этот подарочный сертификат не может быть использован, поскольку его код не " "является уникальным. Пожалуйста, свяжитесь с организатором этого мероприятия." -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "Этот подарочный сертификат не принят организатором мероприятия." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "This gift card was used in the meantime. Please try again" msgid "This gift card was used in the meantime. Please try again." @@ -11087,7 +11097,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -11181,7 +11191,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -11360,10 +11370,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Номер карты" @@ -11527,7 +11536,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -12339,7 +12348,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Ваши изменения сохранены." @@ -16765,7 +16774,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -17977,7 +17986,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -18291,19 +18300,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Владелец счёта" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "Банк" @@ -18914,7 +18924,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -18932,18 +18942,18 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "{text}" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" "Нажмите здесь, чтобы включить инструкцию о том, как получить необходимые " "ключи" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "Конечная точка" @@ -19019,8 +19029,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "При отправке письма с подтверждением произошла ошибка." @@ -19124,7 +19134,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "Общая стоимость" @@ -19141,18 +19151,18 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "Процесс оплаты начался в новом окне." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" "Окно для ввода ваших платёжных данных не было открыто или было закрыто?" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "Нажмите здесь, чтобы открыть окно." @@ -19569,12 +19579,14 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "Stripe" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" "Этот плагин позволяет получать платежи по кредитным картам через Stripe" @@ -19587,37 +19599,42 @@ msgstr "" "Предоставленный ключ \"%(value)s\" выглядит как недействительный. Он должен " "начинаться с \"%(prefix)s\"." -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "Stripe Connect: плата за приложение (в процентах)" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "Stripe Connect: плата за приложение (макс.)" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "Stripe Connect: плата за приложение (мин.)" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "Для приёма платежей через Stripe вам понадобится аккаунт в Stripe. Нажав на " "следующую кнопку, вы можете либо создать новый аккаунт в Stripe, либо " "подключить pretix к имеющемуся аккаунту." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "Соединиться со Stripe" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "Отсоединиться от Stripe" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -19629,22 +19646,22 @@ msgstr "" "при внешнем возврате платежей и обрабатывать асинхронные способы оплаты, " "такие как SOFORT." -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 #, fuzzy #| msgid "Needs to be enabled in your Stripe account first." msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "Сначала необходимо активировать в вашем аккаунте в Stripe." -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -19655,21 +19672,21 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "Аккаунт в Stripe" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "Действующий" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "Тестирование" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." @@ -19677,15 +19694,15 @@ msgstr "" "Если ваше мероприятие находится в тестовом режиме, мы всегда будем " "использовать тестовый API Stripe, независимо от этого параметра." -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Публикуемый ключ" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Секретный ключ" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." @@ -19693,39 +19710,96 @@ msgstr "" "Страна, в которой зарегистрирован ваш аккаунт в Stripe. Обычно это страна " "вашего проживания." -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Платежи по кредитным картам" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "Сначала необходимо активировать в вашем аккаунте в Stripe." -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "iDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "Alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "SOFORT" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -19737,23 +19811,64 @@ msgstr "" "14 дней. Пожалуйста, активируйте этот способ оплаты только " "в том случае, если ваш срок оплаты позволяет такое отставание." -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Описание" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of множества тестовых карточек . " "Фактически деньги не будут переведены." -#: pretix/plugins/stripe/payment.py:407 pretix/plugins/stripe/payment.py:757 -#: pretix/plugins/stripe/payment.py:852 +#: pretix/plugins/stripe/payment.py:575 +msgid "No payment information found." +msgstr "Информация об оплате не найдена." + +#: pretix/plugins/stripe/payment.py:591 +msgid "Stripe returned an error" +msgstr "Stripe выдал ошибку" + +#: pretix/plugins/stripe/payment.py:616 +msgid "" +"We had trouble communicating with Stripe. Please try again and contact " +"support if the problem persists." +msgstr "" +"У нас возникли проблемы с обращением к Stripe. Пожалуйста, попробуйте ещё " +"раз и обратитесь в службу поддержки, если проблема не устраняется." + +#: pretix/plugins/stripe/payment.py:689 +msgid "You may need to enable JavaScript for Stripe payments." +msgstr "Вам может потребоваться активировать JavaScript для платежей Stripe." + +#: pretix/plugins/stripe/payment.py:761 pretix/plugins/stripe/payment.py:863 +#: pretix/plugins/stripe/payment.py:922 #, python-format msgid "Stripe reported an error with your card: %s" msgstr "Stripe сообщил об ошибке с вашей картой: %s" -#: pretix/plugins/stripe/payment.py:434 pretix/plugins/stripe/payment.py:567 -#: pretix/plugins/stripe/payment.py:770 pretix/plugins/stripe/payment.py:864 -#: pretix/plugins/stripe/payment.py:1436 +#: pretix/plugins/stripe/payment.py:769 pretix/plugins/stripe/payment.py:875 +#: pretix/plugins/stripe/payment.py:936 pretix/plugins/stripe/payment.py:1002 msgid "" "We had trouble communicating with Stripe. Please try again and get in touch " "with us if this problem persists." @@ -19780,7 +19914,7 @@ msgstr "" "У нас возникли проблемы с обращением к Stripe. Пожалуйста, попробуйте ещё " "раз и свяжитесь с нами, если проблема не устраняется." -#: pretix/plugins/stripe/payment.py:452 pretix/plugins/stripe/payment.py:804 +#: pretix/plugins/stripe/payment.py:801 msgid "" "Your payment is pending completion. We will inform you as soon as the " "payment completed." @@ -19788,251 +19922,334 @@ msgstr "" "Ваш платёж ещё не завершён. Мы сообщим вам, как только оплата будет " "завершена." -#: pretix/plugins/stripe/payment.py:461 pretix/plugins/stripe/payment.py:818 +#: pretix/plugins/stripe/payment.py:808 +msgid "Your payment failed. Please try again." +msgstr "Ваш платёж не прошёл. Пожалуйста, попробуйте ещё раз." + +#: pretix/plugins/stripe/payment.py:814 pretix/plugins/stripe/payment.py:970 #, python-format msgid "Stripe reported an error: %s" msgstr "Stripe сообщил об ошибке: %s" -#: pretix/plugins/stripe/payment.py:517 -msgid "No payment information found." -msgstr "Информация об оплате не найдена." - -#: pretix/plugins/stripe/payment.py:538 +#: pretix/plugins/stripe/payment.py:963 +#, fuzzy +#| msgid "" +#| "Your payment is pending completion. We will inform you as soon as the " +#| "payment completed." msgid "" -"We had trouble communicating with Stripe. Please try again and contact " -"support if the problem persists." +"Your payment is pending completion. We will inform you as soon as the " +"payment is completed." msgstr "" -"У нас возникли проблемы с обращением к Stripe. Пожалуйста, попробуйте ещё " -"раз и обратитесь в службу поддержки, если проблема не устраняется." - -#: pretix/plugins/stripe/payment.py:542 -msgid "Stripe returned an error" -msgstr "Stripe выдал ошибку" +"Ваш платёж ещё не завершён. Мы сообщим вам, как только оплата будет " +"завершена." -#: pretix/plugins/stripe/payment.py:638 +#: pretix/plugins/stripe/payment.py:1035 msgid "Credit card via Stripe" msgstr "Кредитная / дебетная карта через Stripe" -#: pretix/plugins/stripe/payment.py:639 +#: pretix/plugins/stripe/payment.py:1036 msgid "Credit card" msgstr "Кредитная / дебетная карта" -#: pretix/plugins/stripe/payment.py:666 -msgid "You may need to enable JavaScript for Stripe payments." -msgstr "Вам может потребоваться активировать JavaScript для платежей Stripe." +#: pretix/plugins/stripe/payment.py:1116 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "SEPA Debit via Stripe" +msgstr "iDEAL через Stripe" -#: pretix/plugins/stripe/payment.py:812 -msgid "Your payment failed. Please try again." -msgstr "Ваш платёж не прошёл. Пожалуйста, попробуйте ещё раз." +#: pretix/plugins/stripe/payment.py:1117 +msgid "SEPA Debit" +msgstr "" -#: pretix/plugins/stripe/payment.py:885 +#: pretix/plugins/stripe/payment.py:1155 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Name" +msgstr "Владелец счёта" + +#: pretix/plugins/stripe/payment.py:1159 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Street" +msgstr "Владелец счёта" + +#: pretix/plugins/stripe/payment.py:1168 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Postal Code" +msgstr "Владелец счёта" + +#: pretix/plugins/stripe/payment.py:1177 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder City" +msgstr "Владелец счёта" + +#: pretix/plugins/stripe/payment.py:1186 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Country" +msgstr "Владелец счёта" + +#: pretix/plugins/stripe/payment.py:1224 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Affirm via Stripe" +msgstr "Alipay через Stripe" + +#: pretix/plugins/stripe/payment.py:1263 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Klarna via Stripe" +msgstr "Alipay через Stripe" + +#: pretix/plugins/stripe/payment.py:1368 msgid "giropay via Stripe" msgstr "giropay через Stripe" -#: pretix/plugins/stripe/payment.py:917 pretix/plugins/stripe/payment.py:1084 -#: pretix/plugins/stripe/payment.py:1236 +#: pretix/plugins/stripe/payment.py:1372 +msgid "" +"giropay is an online payment method available to all customers of most " +"German banks, usually after one-time activation. Please keep your online " +"banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1383 pretix/plugins/stripe/payment.py:1451 +#: pretix/plugins/stripe/payment.py:1554 msgid "unknown name" msgstr "неизвестное имя" -#: pretix/plugins/stripe/payment.py:949 pretix/plugins/stripe/payment.py:1001 -#: pretix/plugins/stripe/payment.py:1116 pretix/plugins/stripe/payment.py:1268 -#: pretix/plugins/stripe/payment.py:1371 +#: pretix/plugins/stripe/payment.py:1395 pretix/plugins/stripe/payment.py:1415 +#: pretix/plugins/stripe/payment.py:1459 pretix/plugins/stripe/payment.py:1562 +#: pretix/plugins/stripe/payment.py:1654 #, python-brace-format msgid "Bank account at {bank}" msgstr "" -#: pretix/plugins/stripe/payment.py:957 +#: pretix/plugins/stripe/payment.py:1403 msgid "iDEAL via Stripe" msgstr "iDEAL через Stripe" -#: pretix/plugins/stripe/payment.py:1009 +#: pretix/plugins/stripe/payment.py:1407 +msgid "" +"iDEAL is an online payment method available to customers of Dutch banks. " +"Please keep your online banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1428 msgid "Alipay via Stripe" msgstr "Alipay через Stripe" -#: pretix/plugins/stripe/payment.py:1052 +#: pretix/plugins/stripe/payment.py:1433 +msgid "" +"This payment method is available to customers of the Chinese payment system " +"Alipay. Please keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1440 msgid "Bancontact via Stripe" msgstr "Bancontact через Stripe" -#: pretix/plugins/stripe/payment.py:1124 +#: pretix/plugins/stripe/payment.py:1472 msgid "SOFORT via Stripe" msgstr "SOFORT через Stripe" -#: pretix/plugins/stripe/payment.py:1141 +#: pretix/plugins/stripe/payment.py:1473 +msgid "SOFORT (instant bank transfer)" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1491 msgid "Country of your bank" msgstr "Страна вашего банка" -#: pretix/plugins/stripe/payment.py:1142 +#: pretix/plugins/stripe/payment.py:1492 msgid "Germany" msgstr "Германия" -#: pretix/plugins/stripe/payment.py:1143 +#: pretix/plugins/stripe/payment.py:1493 msgid "Austria" msgstr "Австрия" -#: pretix/plugins/stripe/payment.py:1144 +#: pretix/plugins/stripe/payment.py:1494 msgid "Belgium" msgstr "Бельгия" -#: pretix/plugins/stripe/payment.py:1145 +#: pretix/plugins/stripe/payment.py:1495 msgid "Netherlands" msgstr "Нидерланды" -#: pretix/plugins/stripe/payment.py:1146 +#: pretix/plugins/stripe/payment.py:1496 msgid "Spain" msgstr "Испания" -#: pretix/plugins/stripe/payment.py:1193 +#: pretix/plugins/stripe/payment.py:1532 #, python-brace-format msgid "Bank account {iban} at {bank}" msgstr "" -#: pretix/plugins/stripe/payment.py:1204 +#: pretix/plugins/stripe/payment.py:1543 #, fuzzy #| msgid "iDEAL via Stripe" msgid "EPS via Stripe" msgstr "iDEAL через Stripe" -#: pretix/plugins/stripe/payment.py:1276 +#: pretix/plugins/stripe/payment.py:1575 #, fuzzy #| msgid "Alipay via Stripe" msgid "Multibanco via Stripe" msgstr "Alipay через Stripe" -#: pretix/plugins/stripe/payment.py:1323 +#: pretix/plugins/stripe/payment.py:1624 #, fuzzy #| msgid "Alipay via Stripe" msgid "Przelewy24 via Stripe" msgstr "Alipay через Stripe" -#: pretix/plugins/stripe/payment.py:1379 +#: pretix/plugins/stripe/payment.py:1628 +msgid "" +"Przelewy24 is an online payment method available to customers of Polish " +"banks. Please keep your online banking account and login information " +"available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1662 #, fuzzy #| msgid "Credit card via Stripe" msgid "WeChat Pay via Stripe" msgstr "Кредитная / дебетная карта через Stripe" -#: pretix/plugins/stripe/signals.py:65 +#: pretix/plugins/stripe/payment.py:1667 +msgid "" +"This payment method is available to users of the Chinese app WeChat. Please " +"keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1690 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "PayPal via Stripe" +msgstr "iDEAL через Stripe" + +#: pretix/plugins/stripe/payment.py:1697 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "Swish via Stripe" +msgstr "iDEAL через Stripe" + +#: pretix/plugins/stripe/payment.py:1702 +msgid "" +"This payment method is available to users of the Swedish apps Swish and " +"BankID. Please have your app ready." +msgstr "" + +#: pretix/plugins/stripe/signals.py:70 msgid "Charge succeeded." msgstr "Оплата удалась." -#: pretix/plugins/stripe/signals.py:66 +#: pretix/plugins/stripe/signals.py:71 msgid "Charge refunded." msgstr "Оплата возвращена." -#: pretix/plugins/stripe/signals.py:67 +#: pretix/plugins/stripe/signals.py:72 msgid "Charge updated." msgstr "Оплата обновлена." -#: pretix/plugins/stripe/signals.py:68 +#: pretix/plugins/stripe/signals.py:73 msgid "Charge pending" msgstr "Оплата не завершена." -#: pretix/plugins/stripe/signals.py:69 +#: pretix/plugins/stripe/signals.py:74 msgid "Payment authorized." msgstr "Платёж разрешён." -#: pretix/plugins/stripe/signals.py:70 +#: pretix/plugins/stripe/signals.py:75 msgid "Payment authorization canceled." msgstr "Авторизация платежа отменена." -#: pretix/plugins/stripe/signals.py:71 +#: pretix/plugins/stripe/signals.py:76 msgid "Payment authorization failed." msgstr "Авторизация платежа не удалась." -#: pretix/plugins/stripe/signals.py:77 +#: pretix/plugins/stripe/signals.py:82 msgid "Charge failed. Reason: {}" msgstr "Оплата не удалась. Причина: {}" -#: pretix/plugins/stripe/signals.py:79 +#: pretix/plugins/stripe/signals.py:84 msgid "Dispute created. Reason: {}" msgstr "Возник спор. Причина: {}" -#: pretix/plugins/stripe/signals.py:81 +#: pretix/plugins/stripe/signals.py:86 msgid "Dispute updated. Reason: {}" msgstr "Спор обновлён. Причина: {}" -#: pretix/plugins/stripe/signals.py:83 +#: pretix/plugins/stripe/signals.py:88 msgid "Dispute closed. Status: {}" msgstr "Спор закрыт. Статус: {}" -#: pretix/plugins/stripe/signals.py:86 +#: pretix/plugins/stripe/signals.py:91 msgid "Stripe reported an event: {}" msgstr "Stripe сообщил о мероприятии: {}" -#: pretix/plugins/stripe/signals.py:97 +#: pretix/plugins/stripe/signals.py:102 msgid "Stripe Connect: Client ID" msgstr "Stripe Connect: ID клиента" -#: pretix/plugins/stripe/signals.py:104 +#: pretix/plugins/stripe/signals.py:109 msgid "Stripe Connect: Secret key" msgstr "Stripe Connect: Секретный ключ" -#: pretix/plugins/stripe/signals.py:111 +#: pretix/plugins/stripe/signals.py:116 msgid "Stripe Connect: Publishable key" msgstr "Stripe Connect: Публикуемый ключ" -#: pretix/plugins/stripe/signals.py:118 +#: pretix/plugins/stripe/signals.py:123 msgid "Stripe Connect: Secret key (test)" msgstr "Stripe Connect: Секретный ключ (тест)" -#: pretix/plugins/stripe/signals.py:125 +#: pretix/plugins/stripe/signals.py:130 msgid "Stripe Connect: Publishable key (test)" msgstr "Stripe Connect: Публикуемый ключ (тест)" -#: pretix/plugins/stripe/signals.py:170 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:6 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:9 +#: pretix/plugins/stripe/signals.py:156 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:3 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:9 msgid "Stripe Connect" msgstr "Stripe Connect" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"Транзакция Stripe %(charge)s удалась, но заказ " -"%(order)s уже был оплачен другими средствами. Пожалуйста, перепроверьте и " -"верните деньги через интерфейс Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"Транзакция Stripe %(charge)s удалась, но заказ " -"%(order)s уже истёк, и за это время продукт уже был продан. Поэтому платёж " -"не может быть принят. Пожалуйста, свяжитесь с пользователем и верните деньги " -"через интерфейс Stripe." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"Stripe сообщил, что по транзакции %(charge)s был " -"осуществлён возврат. Вы хотите поставить пометку о возврате у " -"соответствующего заказа (%(order)s)?" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "Общая сумма будет снята с вашей кредитной карты." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "Тип карты" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "Общая сумма будет снята с вашей кредитной карты." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Владелец счёта" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -20042,17 +20259,17 @@ msgstr "" "платёжных услуг, чтобы завершить ваш платёж. Затем вы будете обратно " "перенаправлены сюда, чтобы получить билеты." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "Для оплаты кредитной картой, пожалуйста, включите JavaScript." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." @@ -20060,15 +20277,15 @@ msgstr "" "Вы уже ввели номер карты, которую мы будем использовать для снятия суммы " "платежа." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "Используйте другую карту" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "ИЛИ" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -20076,26 +20293,81 @@ msgstr "" "Ваш платёж будет обработан Stripe, Inc. Данные вашей карты будут переданы " "непосредственно в Stripe и никогда не поступят на наши серверы." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "Для оплаты кредитной картой, пожалуйста, включите JavaScript." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"Вы уже ввели номер карты, которую мы будем использовать для снятия суммы " +"платежа." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "Используйте другую карту" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "ID платы" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "Имя плательщика" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "Имя плательщика" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "Сообщение об ошибке" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "" +#| "Do you really want to cancel this order? You cannot revert this action." +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Вы действительно хотите отменить этот заказ? Это действие необратимое." + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Disconnect from Stripe" +msgid "Disconnect" +msgstr "Отсоединиться от Stripe" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -20103,7 +20375,7 @@ msgstr "" "Мы ждём ответа от поставщика платёжных услуг относительно вашего платежа. " "Пожалуйста, свяжитесь с нами, если это займёт более нескольких дней." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." @@ -20111,65 +20383,69 @@ msgstr "" "Вам необходимо подтвердить свой платёж. Пожалуйста, нажмите на ссылку ниже, " "чтобы подтвердить платёж, или начните новый платёж." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "Подтвердить платёж" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "Платёжная операция не может быть завершена по следующей причине:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Причина неизвестна" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Оплатить заказ" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "Подтвердить платёж: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "Подтверждение вашего платежа …" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" "Произошла ошибка при соединении со Stripe, пожалуйста, попробуйте ещё раз." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "Stripe выдал ошибку: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" "Ваш аккаунт в Stripe теперь подключён к pretix. Вы можете изменить настройки " "ниже." -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "Ваш аккаунт в Stripe был отключён." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -20177,7 +20453,7 @@ msgstr "" "Извините, произошла ошибка в процессе оплаты. Пожалуйста, проверьте ссылку в " "ваших сообщениях по электронной почте, чтобы продолжить процесс оплаты." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -20185,7 +20461,7 @@ msgstr "" "У нас возникли проблемы с авторизацией платежа с вашей карты. Пожалуйста, " "попробуйте ещё раз и свяжитесь с нами, если проблема не устраняется." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "Извините, произошла ошибка в процессе оплаты." @@ -22286,6 +22562,38 @@ msgstr "" msgid "Kosovo" msgstr "" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Транзакция Stripe %(charge)s удалась, но заказ " +#~ "%(order)s уже был оплачен другими средствами. Пожалуйста, перепроверьте и " +#~ "верните деньги через интерфейс Stripe." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Транзакция Stripe %(charge)s удалась, но заказ " +#~ "%(order)s уже истёк, и за это время продукт уже был продан. Поэтому " +#~ "платёж не может быть принят. Пожалуйста, свяжитесь с пользователем и " +#~ "верните деньги через интерфейс Stripe." + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "Stripe сообщил, что по транзакции %(charge)s был " +#~ "осуществлён возврат. Вы хотите поставить пометку о возврате у " +#~ "соответствующего заказа (%(order)s)?" + #~ msgid "Default list" #~ msgstr "Список по умолчанию" diff --git a/src/pretix/locale/ru/LC_MESSAGES/djangojs.po b/src/pretix/locale/ru/LC_MESSAGES/djangojs.po index f5a03f86f..023b28ee4 100644 --- a/src/pretix/locale/ru/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/ru/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-09-23 17:00+0000\n" "Last-Translator: Svyatoslav \n" "Language-Team: Russian =2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 3.10.3\n" #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 @@ -44,20 +44,23 @@ msgstr "Оплаченные заказы" msgid "Total revenue" msgstr "Общая выручка" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:15 msgid "Contacting Stripe …" msgstr "Идёт обращение к Stripe…" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:60 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:72 msgid "Total" msgstr "Итого" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152 -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:242 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:265 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:282 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:315 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:339 msgid "Confirming your payment …" msgstr "Подтверждается ваш платёж…" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:159 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:289 msgid "Contacting your bank …" msgstr "Идёт обращение к вашему банку…" diff --git a/src/pretix/locale/si/LC_MESSAGES/django.po b/src/pretix/locale/si/LC_MESSAGES/django.po index bc30d35c6..d4e585ba2 100644 --- a/src/pretix/locale/si/LC_MESSAGES/django.po +++ b/src/pretix/locale/si/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2021-03-03 06:00+0000\n" "Last-Translator: helabasa \n" "Language-Team: Sinhala " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" @@ -3511,7 +3511,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "" @@ -4080,20 +4080,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "" -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4101,45 +4111,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4148,94 +4158,94 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4244,11 +4254,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4256,87 +4266,87 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "" -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "" -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "" -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "" -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "" -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "" @@ -10255,7 +10265,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10349,7 +10359,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "සුරකින්න" @@ -10514,10 +10524,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -10676,7 +10685,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -11474,7 +11483,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -15749,7 +15758,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -16914,7 +16923,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -17221,19 +17230,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -17796,7 +17806,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -17814,16 +17824,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -17897,8 +17907,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -18000,7 +18010,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18017,17 +18027,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -18420,12 +18430,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -18435,34 +18445,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -18470,20 +18480,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -18494,73 +18504,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -18568,23 +18635,62 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +msgid "Destination" +msgstr "" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +msgid "Account number" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/si/LC_MESSAGES/djangojs.po b/src/pretix/locale/si/LC_MESSAGES/djangojs.po index 88d7d3050..f0fb2adfb 100644 --- a/src/pretix/locale/si/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/si/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -41,20 +41,23 @@ msgstr "" msgid "Total revenue" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:15 msgid "Contacting Stripe …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:60 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:72 msgid "Total" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152 -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:242 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:265 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:282 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:315 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:339 msgid "Confirming your payment …" msgstr "" -#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:159 +#: pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js:289 msgid "Contacting your bank …" msgstr "" diff --git a/src/pretix/locale/sl/LC_MESSAGES/django.po b/src/pretix/locale/sl/LC_MESSAGES/django.po index f52e7e261..51406ed52 100644 --- a/src/pretix/locale/sl/LC_MESSAGES/django.po +++ b/src/pretix/locale/sl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2021-03-04 03:00+0000\n" "Last-Translator: lapor-kris \n" "Language-Team: Slovenian " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Prazno, če ta izdelek ni vstopnica" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Ime podjetja" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Izberite državo" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "ustvarjeno" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "v teku" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "potrjeno" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "preklicano" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "z napako" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "povrnjeno" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Podatki o plačilu" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "Registracija na dogodek potrjena: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Plačilo naročila prejeto: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "začeto zunaj" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "ustvarjeno" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "v tranzitu" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "opravljeno" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "neuspelo" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "preklicano" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Organizator" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Stranka" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Zunanje" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 msgid "Refund reason" msgstr "Razlog vračila" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" @@ -3472,66 +3472,66 @@ msgstr "" "Lahko je prikazan končnemu uporabniku ali uporabljen npr. kot del sklica na " "plačilo." -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Stroški plačila" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Stroški pošiljanja" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Stroški storitve" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "Stroški preklica" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Drugi stroški" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Darilna kartica" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Vrednost" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Vrstni red naročila" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "Registracija vašega dogodka: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "ID košarice (e.g. session key)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Pozicija košarice" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Pozicije košarice" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Samo za poslovne stranke v EU." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "Ta referenca bo za vaše udobje natisnjena na računu." @@ -3698,7 +3698,7 @@ msgstr "" "davčnim zastopnikom. Za pravilen izračun davka ni dano garancije. UPORABITE " "NA LASTNEM TVEGANJU." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "Država trgovca" @@ -4298,21 +4298,31 @@ msgstr "Izbrati morate določen sedež." msgid "Ambiguous option selected." msgstr "Izbrana je dvoumna možnost." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Omogoči način plačila" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Uporabniki po določenem datumu ne bodo mogli izbrati tega ponudnika plačil." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Besedilo na računih" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4324,11 +4334,11 @@ msgstr "" "naročila. Če se račun ustvari pozneje, bo izšlo besedilo, ki navaja, da je " "že plačan." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Najmanjše skupno naročilo" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4338,11 +4348,11 @@ msgstr "" "vrednost. V ta namen je mogoče izračunati skupno naročilo brez upoštevanja " "pristojbin, naloženih s tem načinom plačila." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Največje skupno naročilo" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4352,23 +4362,23 @@ msgstr "" "dano vrednostjo. V ta namen je mogoče izračunati skupno naročilo brez " "upoštevanja pristojbin, naloženih s tem načinom plačila." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Dodatna pristojbina" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Absolutna vrednost" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "Odstotek celotnega naročila." -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Izračunajte pristojbino od skupne vrednosti, vključno s pristojbino." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4381,11 +4391,11 @@ msgstr "" "target=\"_blank\" rel=\"noopener\"> Za podrobne informacije o tem, kaj to " "počne, kliknite tukaj. Ne pozabite nastaviti zgornjih pravil!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "Omeji na države" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4395,17 +4405,17 @@ msgstr "" "državah. Če ne izberete nobene države, so dovoljene vse države. To je " "omogočeno le, če je potreben naslov računa." -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" "Uporabo tega ponudnika plačil dovoli samo v izbranih prodajnih kanalih." -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 msgid "Hide payment method" msgstr "Skrij način plačila" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." @@ -4413,25 +4423,25 @@ msgstr "" "Način plačila ne bo prikazan privzeto, temveč samo ljudem, ki vstopijo v " "trgovino prek posebne povezave." -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 msgid "Link to enable payment method" msgstr "Povezava za omogočanje načina plačila" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" "Povezavo delite s strankami, ki bi morale uporabljati ta način plačila." -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "Plačilo za ta račun je že prejeto." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "Ta ponudnik plačil ne podpira samodejnih povračil." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." @@ -4439,21 +4449,21 @@ msgstr "" "Plačilo ni potrebno, saj to naročilo vključuje samo izdelke, ki so " "brezplačni." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Zastonj" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Blagajna" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "Ročno plačilo" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." @@ -4461,15 +4471,15 @@ msgstr "" "V preizkusnem načinu lahko to naročilo preprosto ročno označite kot plačano " "v zaledju, ko je bilo ustvarjeno." -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "Ime načina plačila" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "Opis postopka plačila med plačevanjem na blagajni" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4477,11 +4487,11 @@ msgstr "" "To besedilo bo prikazano med izplačilom, ko uporabnik izbere to plačilno " "sredstvo. Podajte kratek opis načina plačila." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "Opis postopka plačila za potrditev v e-poštnih sporočilih" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, fuzzy, python-brace-format #| msgid "" #| "This text will be included for the {payment_info} placeholder in order " @@ -4499,11 +4509,11 @@ msgstr "" "plačilom. Uporabite lahko vsebnike: {order}, {total}, {currency} in " "{total_with_currency}." -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "Opis postopka plačila za čakajoča naročila" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, fuzzy, python-brace-format #| msgid "" #| "This text will be shown on the order confirmation page for pending " @@ -4520,57 +4530,57 @@ msgstr "" "plačilom. Uporabite lahko vsebnike: {order}, {total}, {currency} in " "{total_with_currency}." -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "Kompenzacija" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "Vpisali ste naročilo, ki ga ni bilo mogoče najti." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "Uravnoteženo z naročili:%s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "V testnem načinu bodo delovale samo testne kartice." -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "Pri nakupu darilne kartice ne morete plačati z darilnimi karticami." -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "Ta darilna kartica ne podpira te valute." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "To darilno kartico lahko uporabljate samo v preskusnem načinu." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "V testnem načinu lahko uporabljate samo testne darilne kartice." -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 msgid "This gift card is no longer valid." msgstr "Ta darilna kartica ni več veljavna." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "Vso dobroimetje na tej darilni kartici je bilo porabljeno." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "Ta darilna kartica se že uporablja za vaše plačilo." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." @@ -4578,11 +4588,11 @@ msgstr "" "Vaša darilna kartica je bila uporabljena, vendar je {} treba še plačati. " "Izberite način plačila." -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "Vaša darilna kartica je bila uporabljena." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." @@ -4590,11 +4600,11 @@ msgstr "" "Namesto darilne kartice ste vnesli bon. Bone lahko vnesete samo na prvi " "strani trgovine pod izbiro izdelka." -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "Ta darilna kartica ni znana." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." @@ -4602,11 +4612,11 @@ msgstr "" "Te darilne kartice ni mogoče unovčiti, ker njena koda ni edinstvena. Obrnite " "se na organizatorja tega dogodka." -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "Organizator prireditve ne sprejema te darilne kartice." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 msgid "This gift card was used in the meantime. Please try again." msgstr "Ta darilna kartica je bila medtem uporabljena. Poskusite ponovno." @@ -10745,7 +10755,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10839,7 +10849,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Shrani" @@ -11018,10 +11028,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -11188,7 +11197,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -11992,7 +12001,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "" @@ -16405,7 +16414,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -17614,7 +17623,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -17925,19 +17934,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -18533,7 +18543,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -18551,16 +18561,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -18634,8 +18644,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -18744,7 +18754,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18761,17 +18771,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -19187,12 +19197,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -19202,34 +19212,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -19237,20 +19247,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -19261,73 +19271,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -19335,23 +19402,64 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Opis" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" -msgstr "" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Phone number" +msgid "Account number" +msgstr "Telefonska številka" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +msgid "Do you really want to disconnect your Stripe account?" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/sl/LC_MESSAGES/djangojs.po b/src/pretix/locale/sl/LC_MESSAGES/djangojs.po index e28adda2f..19e03e194 100644 --- a/src/pretix/locale/sl/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/sl/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2019-08-27 08:00+0000\n" "Last-Translator: Bostjan Marusic \n" "Language-Team: Slovenian \n" "Language-Team: Swedish " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Betalning mottagen för din beställning: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Net total" msgid "Refund reason" msgstr "Totalt" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "Förköp har inte startat: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" @@ -3612,7 +3612,7 @@ msgid "" "calculation. USE AT YOUR OWN RISK." msgstr "" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "" @@ -4202,20 +4202,30 @@ msgstr "" msgid "Ambiguous option selected." msgstr "" -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +msgctxt "payment" +msgid "Apple Pay" +msgstr "" + +#: pretix/base/payment.py:54 +msgctxt "payment" +msgid "Google Pay" +msgstr "" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4223,45 +4233,45 @@ msgid "" "stating that it has already been paid." msgstr "" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " "without taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " "taking the fees imposed by this payment method into account." msgstr "" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4270,98 +4280,98 @@ msgid "" "Don't forget to set the correct fees above!" msgstr "" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 #, fuzzy #| msgid "Please select a payment method." msgid "Hide payment method" msgstr "Välj ett betalsätt" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 #, fuzzy #| msgid "Please select a payment method." msgid "Link to enable payment method" msgstr "Välj ett betalsätt" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, python-brace-format msgid "" "This text will be included for the {payment_info} placeholder in order " @@ -4370,11 +4380,11 @@ msgid "" "{amount_with_currency}." msgstr "" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, python-brace-format msgid "" "This text will be shown on the order confirmation page for pending orders. " @@ -4382,91 +4392,91 @@ msgid "" "the placeholders {order}, {amount}, {currency} and {amount_with_currency}." msgstr "" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "" -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "" -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 #, fuzzy #| msgid "Your changes have been saved." msgid "This gift card is no longer valid." msgstr "Dina ändringar har sparats." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "" -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 #, fuzzy #| msgid "Your changes have been saved." msgid "Your gift card has been applied." msgstr "Dina ändringar har sparats." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "" #| "There was an error sending the confirmation mail. Please try again later." @@ -10796,7 +10806,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -10890,7 +10900,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "" @@ -11067,10 +11077,9 @@ msgstr "" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "" @@ -11234,7 +11243,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -12130,7 +12139,7 @@ msgstr "" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Dina ändringar har sparats." @@ -16490,7 +16499,7 @@ msgstr "" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "" @@ -17715,7 +17724,7 @@ msgstr "" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -18024,19 +18033,20 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "" @@ -18623,7 +18633,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "" @@ -18641,16 +18651,16 @@ msgstr "" msgid "PayPal account" msgstr "" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "" @@ -18724,8 +18734,8 @@ msgid "" "payment completed." msgstr "" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "" @@ -18831,7 +18841,7 @@ msgid "Last update" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "" @@ -18848,17 +18858,17 @@ msgid "" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "" @@ -19265,12 +19275,12 @@ msgid "" msgstr "" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "" #: pretix/plugins/stripe/forms.py:19 @@ -19280,34 +19290,34 @@ msgid "" "\"%(prefix)s\"." msgstr "" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 msgid "Stripe Connect: App fee (percent)" msgstr "" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 msgid "Stripe Connect: App fee (max)" msgstr "" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 msgid "Stripe Connect: App fee (min)" msgstr "" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -19315,20 +19325,20 @@ msgid "" "process asynchronous payment methods like SOFORT." msgstr "" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -19339,73 +19349,130 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -19413,23 +19480,64 @@ msgid "" "payment term allows for this lag." msgstr "" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Beskrivning" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 +msgid "Card type" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +msgid "The total amount will be withdrawn from your bank account." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 -msgid "The total amount will be withdrawn from your credit card." +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 -msgid "Card type" -msgstr "" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Line number" +msgid "Account number" +msgstr "Radnummer" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " "get your tickets." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 -msgid "Charge ID" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +msgid "For a SEPA Debit payment, please turn on JavaScript." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +msgid "Use a different account" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 +msgid "Charge ID" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "" +#| "Do you really want to cancel this order? You cannot revert this action." +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Vill du verkligen avbryta denna beställning? Du kan inte ångra detta." + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +msgid "Disconnect" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 msgid "Confirm payment" msgstr "Bekräfta betalning" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Betala beställning" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, python-format msgid "Confirm payment: %(code)s" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 msgid "Sorry, there was an error in the payment process." msgstr "" diff --git a/src/pretix/locale/sv/LC_MESSAGES/djangojs.po b/src/pretix/locale/sv/LC_MESSAGES/djangojs.po index 0125d6eed..5fd3cebae 100644 --- a/src/pretix/locale/sv/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/sv/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2020-09-18 14:26+0000\n" "Last-Translator: Tobias Sundgren \n" "Language-Team: Swedish event " #~ "ticketing powered by pretix" #~ msgstr "" -#~ "Biljettsystem av pretix" +#~ "Biljettsystem av pretix" diff --git a/src/pretix/locale/tr/LC_MESSAGES/django.po b/src/pretix/locale/tr/LC_MESSAGES/django.po index 0a336f930..dfcd24f01 100644 --- a/src/pretix/locale/tr/LC_MESSAGES/django.po +++ b/src/pretix/locale/tr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2019-10-31 14:39+0000\n" "Last-Translator: Raphael Michel \n" "Language-Team: Turkish " msgstr "" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "Boş, eğer bu ürün giriş bileti değilse" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "Şirket Adı" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "Ülke seçin" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "Oluşturuldu" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "bekleniyor" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "onaylandı" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "iptal edildi" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "başarısız oldu" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "iade edildi" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "Ödeme bilgileri" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, fuzzy, python-format #| msgid "Order approved and confirmed: %(code)s" msgid "Event registration confirmed: %(code)s" msgstr "Sipariş onaylandı ve onaylandı: %(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "Siparişiniz için ödeme alındı: %(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "dışarıdan başladı" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "oluşturuldu" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "transit olarak" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "tamam" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "başarısız oldu" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "iptal edildi" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "Organizatör" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "Müşteri" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "Harici" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Refund only" msgid "Refund reason" msgstr "Sadece iade" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "Ödeme ücreti" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "Nakliye ücreti" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "Servis ücreti" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 #, fuzzy #| msgid "Cancellation" msgid "Cancellation fee" msgstr "İptal" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "Diğer ücretler" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "Hediye kartı" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "Değer" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "Sipariş pozisyonu" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, fuzzy, python-format #| msgid "Your order: %(code)s" msgid "Your event registration: %(code)s" msgstr "Siparişiniz: %(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "Sepet kimliği (ör. oturum anahtarı)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "Sepet pozisyonu" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "Sepet pozisyonları" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "Sadece AB içindeki kurumsal müşteriler için." -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "" "Bu referans, sizin için rahat olması amacıyla faturanızda yazdırılacaktır." @@ -3976,7 +3976,7 @@ msgstr "" "hesaplaması için herhangi bir garanti verilmemiştir. KENDİ RİSKİNİZDE " "KULLANIN." -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "Satıcı ülke" @@ -4646,21 +4646,35 @@ msgstr "Bir tarih seçmeniz gerekiyor." msgid "Ambiguous option selected." msgstr "Geçersiz seçenek seçildi." -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "Uygula" + +#: pretix/base/payment.py:54 +#, fuzzy +#| msgid "Android (Google Play)" +msgctxt "payment" +msgid "Google Pay" +msgstr "Android (Google Play)" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "Ödeme yöntemini etkinleştir" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "" "Kullanıcılar, bu ödeme sağlayıcısını belirtilen tarihten sonra seçemez." -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "Faturalardaki metin" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4672,11 +4686,11 @@ msgstr "" "kullanılacaktır. Fatura daha sonra üretilirse, daha önce ödenmiş olduğunu " "belirten bir metin gösterecektir." -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "Minimum sipariş toplamı" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4686,11 +4700,11 @@ msgstr "" "kullanılabilir olacaktır.Bu amaca yönelik sipariş toplamı, bu ödeme " "yönteminin uyguladığı ücretler dikkate alınmaksızın hesaplanabilir." -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "Maksimum sipariş toplamı" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4700,23 +4714,23 @@ msgstr "" "altındaysa kullanılabilir. Bu amaca yönelik sipariş toplamı, bu ödeme " "yönteminin uyguladığı ücretler dikkate alınmaksızın hesaplanabilir." -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "Ek ücret" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "Mutlak değer" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "Ücret dahil olmak üzere toplam değerden ücreti hesaplayın." -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4730,91 +4744,91 @@ msgstr "" "bilgi için buraya tıklayın. Yukarıdaki doğru ücretleri ayarlamayı " "unutmayın!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " "allowed. This is only enabled if the invoice address is required." msgstr "" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 #, fuzzy #| msgid "The settings of a payment provider have been changed." msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "Bir ödeme sağlayıcısının ayarları değiştirildi." -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 #, fuzzy #| msgid "Enable payment method" msgid "Hide payment method" msgstr "Ödeme yöntemini etkinleştir" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 #, fuzzy #| msgid "Enable payment method" msgid "Link to enable payment method" msgstr "Ödeme yöntemini etkinleştir" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "Bu faturanın ödemesi zaten alındı." -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "Otomatik ödeme bu ödeme sağlayıcısı tarafından desteklenmez." -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "" "Bu sipariş yalnızca ücretsiz olan ürünleri içerdiği için ödeme gerekmez." -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "Ücretsiz" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "Gişe" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "Manuel ödeme" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "Ödeme yöntemi adı" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "Ödeme sırasında ödeme işlemi açıklaması" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." @@ -4822,11 +4836,11 @@ msgstr "" "Bu metin, kullanıcı ödeme yöntemini seçtiğinde ödeme sırasında gösterilir. " "Bu ödeme yöntemi hakkında kısa bir açıklama yapmalıdır." -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "Sipariş onay e-postalarında ödeme süreci açıklaması" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, fuzzy, python-brace-format #| msgid "" #| "This text will be included for the {payment_info} placeholder in order " @@ -4844,11 +4858,11 @@ msgstr "" "vermelidir. {order}, {total}, {currency} ve {total_with_currency} yer " "tutucularını kullanabilirsiniz" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "Bekleyen siparişler için ödeme süreci açıklaması" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, fuzzy, python-brace-format #| msgid "" #| "This text will be shown on the order confirmation page for pending " @@ -4865,103 +4879,103 @@ msgstr "" "{order}, {total},{currency} ve {total_with_currency} yer tutucularını " "kullanabilirsiniz" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "Denkleştirme" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "Bulunamayan bir sipariş girdiniz." -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "Siparişlere göre dengelendi: %s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 #, fuzzy #| msgid "This payment method does not support automatic refunds." msgid "This gift card does not support this currency." msgstr "Bu ödeme yöntemi otomatik geri ödemeleri desteklemez." -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 #, fuzzy #| msgid "This refund can not be processed at the moment." msgid "This gift card can only be used in test mode." msgstr "Bu geri ödeme şu anda işleme alınamaz." -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 #, fuzzy #| msgid "This feature is not enabled." msgid "This gift card is no longer valid." msgstr "Bu özellik etkin değil." -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 #, fuzzy #| msgid "Access for the selected application has been revoked." msgid "All credit on this gift card has been used." msgstr "Seçilen uygulama için erişim iptal edildi." -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 #, fuzzy #| msgid "This identifier is already used for a different question." msgid "This gift card is already used for your payment." msgstr "Bu tanımlayıcı zaten farklı bir soru için kullanılıyor." -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 #, fuzzy #| msgid "Your cart has been updated." msgid "Your gift card has been applied." msgstr "Alışveriş sepetiniz güncellendi." -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 #, fuzzy #| msgid "This feature is not enabled." msgid "This gift card is not known." msgstr "Bu özellik etkin değil." -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 #, fuzzy #| msgid "This order is not yet approved by the event organizer." msgid "This gift card is not accepted by this event organizer." msgstr "Bu sipariş etkinlik düzenleyici tarafından henüz onaylanmadı." -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "There was an error sending the mail. Please try again later." msgid "This gift card was used in the meantime. Please try again." @@ -12325,7 +12339,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -12431,7 +12445,7 @@ msgstr "Yeni şifre belirle" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "Kaydet" @@ -12631,10 +12645,9 @@ msgstr "Kart türü" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "Kart numarası" @@ -12810,7 +12823,7 @@ msgstr "Bu, %(num)s check-in bilgisini de silecektir." #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -13808,7 +13821,7 @@ msgstr "Yüklü eklentiler" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "Değişiklikleriniz kaydedildi." @@ -18870,7 +18883,7 @@ msgstr "Yeni check-in listesi oluşturuldu." #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "Değişikliklerinizi kaydedemedik. Detaylar için aşağıya bakın." @@ -20242,7 +20255,7 @@ msgstr "Rozetler" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -20598,19 +20611,20 @@ msgstr "Lütfen adınızı giriniz." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "Hesap sahibi" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "Banka" @@ -21273,7 +21287,7 @@ msgstr "" "Bu eklenti, manuel işleme için özelleştirilebilir bir ödeme yöntemi ekler." #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "PayPal" @@ -21293,18 +21307,18 @@ msgstr "" msgid "PayPal account" msgstr "Toplam tutar" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "{text}" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "" "Gerekli anahtarların nasıl elde edileceğiyle ilgili bir eğitim için buraya " "tıklayın" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "Son nokta" @@ -21397,8 +21411,8 @@ msgstr "" "PayPal henüz ödemeyi onaylamadı. Ödeme tamamlanır tamamlanmaz sizi " "bilgilendireceğiz." -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "Onay postası gönderilirken bir hata oluştu." @@ -21530,7 +21544,7 @@ msgid "Last update" msgstr "Son Güncelleme" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "Toplam değer" @@ -21551,17 +21565,17 @@ msgstr "" "sürerse, lütfen bize ulaşın." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "Ödeme işlemi yeni bir pencerede başladı." #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "Ödeme verilerinizi girmek için pencere açılmamış veya kapatılmamış mı?" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "Pencereyi açmak için buraya tıklayın." @@ -22047,12 +22061,14 @@ msgstr "" "istatistikler göstereceğiz!" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "Stripe" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "Bu eklenti, Stripe ile kredi kartı ödemeleri almanızı sağlar" #: pretix/plugins/stripe/forms.py:19 @@ -22064,43 +22080,48 @@ msgstr "" "Sağlanan \"%(value)s\" anahtarı geçerli görünmüyor. \"%(prefix)s\" ile " "başlamalıdır." -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 #, fuzzy #| msgid "Stripe Connect: Secret key (test)" msgid "Stripe Connect: App fee (percent)" msgstr "Stripe Bağlantısı: Gizli anahtar (test)" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 #, fuzzy #| msgid "Stripe Connect: Secret key" msgid "Stripe Connect: App fee (max)" msgstr "Stripe Bağlantısı: Gizli anahtar" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 #, fuzzy #| msgid "Stripe Connect: Secret key" msgid "Stripe Connect: App fee (min)" msgstr "Stripe Bağlantısı: Gizli anahtar" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "Stripe ile ödeme kabul etmek için Stripe'de bir hesaba ihtiyacınız olacak. " "Aşağıdaki düğmeye tıklayarak, varolan birine yeni bir Stripe hesabı " "takabilirsiniz." -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "Stripe ile iletişime geç" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "Stripe ile bağlantısını kes" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -22112,22 +22133,22 @@ msgstr "" "href=\"https://dashboard.stripe.com/account/webhooks\"> Stripe Webhook 'yi aşağıdaki uç noktaya yapılandırın. SOFORT gibi yöntemler." -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 #, fuzzy #| msgid "Needs to be enabled in your Stripe account first." msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "İlk önce Stripe hesabınızda etkinleştirilmiş olması gerekir." -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -22138,35 +22159,35 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "Stripe hesabı" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "Canlı" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "Test yapmak" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "Yayılabilir anahtar" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "Gizli anahtar" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." @@ -22174,39 +22195,96 @@ msgstr "" "Stripe hesabınızın kayıtlı olduğu ülke. Genellikle burası sizin ikamet " "ettiğiniz ülkedir." -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "Kredi kartı ödemeleri" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "İlk önce Stripe hesabınızda etkinleştirilmiş olması gerekir." -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "iDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "Alipay" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "SOFORT" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -22218,23 +22296,64 @@ msgstr "" "14 güne kadar alabilir. Ödeme süreniz bu gecikmeye izin " "veriyorsa lütfen yalnızca bu ödeme yöntemini etkinleştirin." -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "Açıklama" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"Stripe işlemi %(charge)s başardı, ancak %(order)s " -"başka yollarla zaten ödendi. Lütfen Stripe'in arayüzü ile parayı iki kez " -"kontrol edin ve para iadesi yapın." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"Stripe işlemi %(charge)s başardı, ancak %(order)s " -"süresi doldu ve bu sırada ürün satıldı. Bu nedenle ödeme kabul edilemedi. " -"Lütfen kullanıcıyla iletişime geçin ve Stripe'in arayüzü ile paranızı iade " -"edin." - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"Stripe, %(charge)s işleminin iade edildiğini " -"bildirdi. Eşleşen siparişi (%(order)s) iadeli olarak işaretlemek mi " -"istiyorsunuz?" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "Toplam tutar kredi kartınızdan çekilecektir." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "Kart türü" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "Toplam tutar kredi kartınızdan çekilecektir." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "Hesap sahibi" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -22525,32 +22747,32 @@ msgstr "" "hizmeti sağlayıcısına yönlendireceğiz. Biletlerinizi almak için buraya geri " "yönlendirileceksiniz." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "Kredi kartı ödemesi için lütfen JavaScript'i açın." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "" "Ödeme tutarını ödemek için kullanacağımız bir kart numarası zaten girdiniz." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "Farklı bir kart kullan" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "VEYA" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -22558,26 +22780,79 @@ msgstr "" "Ödemeniz Stripe, Inc. tarafından işlenecektir. Kredi kartı verileriniz " "doğrudan Stripe'e iletilecek ve sunucularımıza asla dokunmayacaktır." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "Kredi kartı ödemesi için lütfen JavaScript'i açın." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "" +"Ödeme tutarını ödemek için kullanacağımız bir kart numarası zaten girdiniz." + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "Farklı bir kart kullan" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "Ücret numarası" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "Ödeyenin adı" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "Ödeyenin adı" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "Hata mesajı" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to regenerate your emergency codes?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "Acil durum kodlarını gerçekten yenilemek istiyor musun?" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Disconnect from Stripe" +msgid "Disconnect" +msgstr "Stripe ile bağlantısını kes" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." @@ -22585,73 +22860,77 @@ msgstr "" "Ödemenizle ilgili olarak ödeme sağlayıcısından cevap bekliyoruz. Bu, birkaç " "günden fazla sürerse lütfen bizimle iletişime geçin." -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 #, fuzzy #| msgid "Cancel payment" msgid "Confirm payment" msgstr "Ödemeyi iptal et" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "Ödeme işlemi aşağıdaki nedenlerden dolayı tamamlanamadı:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "Bilinmeyen sebep" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "Ödeme emri" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, fuzzy, python-format #| msgid "Change payment method: %(code)s" msgid "Confirm payment: %(code)s" msgstr "Ödeme yöntemini değiştir: %(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "Stripe ile bağlantı sırasında bir hata oluştu, lütfen tekrar deneyin." -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "Stripe bir hata verdi: {}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "" "Stripe hesabınız artık pretix'e bağlı. Ayarları aşağıda ayrıntılı olarak " "değiştirebilirsiniz." -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "Stripe hesabınızın bağlantısı kesildi." -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." @@ -22659,7 +22938,7 @@ msgstr "" "Üzgünüz, ödeme sürecinde bir hata oluştu. Devam etmek için lütfen e-" "postalarınızdaki bağlantıyı kontrol edin." -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." @@ -22667,7 +22946,7 @@ msgstr "" "Kart ödemeniz için yetkilendirme konusunda sorun yaşadık. Lütfen tekrar " "deneyin ve bu sorun devam ederse bizimle iletişime geçin." -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 #, fuzzy #| msgid "" #| "Sorry, there was an error in the payment process. Please check the link " @@ -24793,6 +25072,38 @@ msgstr "Yazma erişimi" msgid "Kosovo" msgstr "" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Stripe işlemi %(charge)s başardı, ancak " +#~ "%(order)s başka yollarla zaten ödendi. Lütfen Stripe'in arayüzü ile " +#~ "parayı iki kez kontrol edin ve para iadesi yapın." + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Stripe işlemi %(charge)s başardı, ancak " +#~ "%(order)s süresi doldu ve bu sırada ürün satıldı. Bu nedenle ödeme kabul " +#~ "edilemedi. Lütfen kullanıcıyla iletişime geçin ve Stripe'in arayüzü ile " +#~ "paranızı iade edin." + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "Stripe, %(charge)s işleminin iade edildiğini " +#~ "bildirdi. Eşleşen siparişi (%(order)s) iadeli olarak işaretlemek mi " +#~ "istiyorsunuz?" + #, fuzzy #~| msgid "Optional. No products will be sold before this date." #~ msgid "Only include orders issued on or before this date." diff --git a/src/pretix/locale/tr/LC_MESSAGES/djangojs.po b/src/pretix/locale/tr/LC_MESSAGES/djangojs.po index ebfb15b19..53c272a84 100644 --- a/src/pretix/locale/tr/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/tr/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2018-09-03 06:36+0000\n" "Last-Translator: Yunus Fırat Pişkin \n" "Language-Team: Turkish , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-20 17:03+0530\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#: pretix/api/auth/devicesecurity.py:6 +msgid "" +"Full device access (reading and changing orders and gift cards, reading of " +"products and settings)" +msgstr "" +"Повний доступ до пристрою (читання та змінення замовлень та подарункових карток, читання " +"продуктів та налаштувань)" + +#: pretix/api/auth/devicesecurity.py:22 +msgid "pretixSCAN" +msgstr "pretixSCAN" + +#: pretix/api/auth/devicesecurity.py:52 +msgid "pretixSCAN (kiosk mode, online only)" +msgstr "" + +#: pretix/api/auth/devicesecurity.py:80 +msgid "pretixPOS" +msgstr "" + +#: pretix/api/models.py:18 +msgid "Application name" +msgstr "" + +#: pretix/api/models.py:21 +msgid "Redirection URIs" +msgstr "" + +#: pretix/api/models.py:22 +msgid "Allowed URIs list, space separated" +msgstr "" + +#: pretix/api/models.py:25 pretix/plugins/paypal/payment.py:78 +msgid "Client ID" +msgstr "" + +#: pretix/api/models.py:29 +msgid "Client secret" +msgstr "" + +#: pretix/api/models.py:89 +msgid "Enable webhook" +msgstr "" + +#: pretix/api/models.py:90 +#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:36 +msgid "Target URL" +msgstr "" + +#: pretix/api/models.py:91 pretix/base/models/devices.py:100 +#: pretix/base/models/organizer.py:187 +msgid "All events (including newly created ones)" +msgstr "" + +#: pretix/api/models.py:92 pretix/base/models/devices.py:101 +#: pretix/base/models/organizer.py:188 +msgid "Limit to events" +msgstr "" + +#: pretix/api/serializers/cart.py:60 pretix/api/serializers/order.py:1124 +msgid "The product \"{}\" is not assigned to a quota." +msgstr "" + +#: pretix/api/serializers/cart.py:68 pretix/api/serializers/order.py:1136 +msgid "" +"There is not enough quota available on quota \"{}\" to perform the operation." +msgstr "" + +#: pretix/api/serializers/cart.py:95 pretix/api/serializers/order.py:1096 +#: pretix/base/services/orders.py:1183 +#, python-brace-format +msgid "The selected seat \"{seat}\" is not available." +msgstr "" + +#: pretix/api/serializers/checkin.py:44 pretix/base/models/event.py:1278 +#: pretix/base/models/items.py:1252 pretix/base/models/items.py:1483 +msgid "One or more items do not belong to this event." +msgstr "" + +#: pretix/api/serializers/checkin.py:48 pretix/api/serializers/checkin.py:51 +#: pretix/base/models/items.py:1494 pretix/base/models/items.py:1497 +#: pretix/base/models/waitinglist.py:187 pretix/base/models/waitinglist.py:190 +msgid "The subevent does not belong to this event." +msgstr "" + +#: pretix/api/serializers/checkin.py:55 +msgid "Unknown sales channel." +msgstr "" + +#: pretix/api/serializers/event.py:164 +msgid "" +"Events cannot be created as 'live'. Quotas and payment must be added to the " +"event before sales can go live." +msgstr "" + +#: pretix/api/serializers/event.py:179 pretix/api/serializers/event.py:463 +#, python-brace-format +msgid "Meta data property '{name}' does not exist." +msgstr "" + +#: pretix/api/serializers/event.py:182 pretix/api/serializers/event.py:466 +#, python-brace-format +msgid "Meta data property '{name}' does not allow value '{value}'." +msgstr "" + +#: pretix/api/serializers/event.py:225 +#, python-brace-format +msgid "Unknown plugin: '{name}'." +msgstr "" + +#: pretix/api/serializers/item.py:69 pretix/control/forms/item.py:796 +msgid "The bundled item must not be the same item as the bundling one." +msgstr "" + +#: pretix/api/serializers/item.py:72 pretix/control/forms/item.py:798 +msgid "The bundled item must not have bundles on its own." +msgstr "" + +#: pretix/api/serializers/item.py:135 +msgid "" +"Updating add-ons, bundles, or variations via PATCH/PUT is not supported. " +"Please use the dedicated nested endpoint." +msgstr "" + +#: pretix/api/serializers/item.py:144 pretix/control/forms/item.py:495 +msgid "" +"Gift card products should not be associated with non-zero tax rates since " +"sales tax will be applied when the gift card is redeemed." +msgstr "" + +#: pretix/api/serializers/item.py:149 pretix/control/forms/item.py:501 +msgid "Gift card products should not be admission products at the same time." +msgstr "" + +#: pretix/api/serializers/item.py:186 +#, python-brace-format +msgid "Item meta data property '{name}' does not exist." +msgstr "" + +#: pretix/api/serializers/item.py:303 +msgid "" +"Updating options via PATCH/PUT is not supported. Please use the dedicated " +"nested endpoint." +msgstr "" + +#: pretix/api/serializers/item.py:317 pretix/control/forms/item.py:74 +msgid "Question cannot depend on a question asked during check-in." +msgstr "" + +#: pretix/api/serializers/item.py:322 pretix/control/forms/item.py:79 +msgid "Circular dependency between questions detected." +msgstr "" + +#: pretix/api/serializers/item.py:327 pretix/control/forms/item.py:88 +msgid "This type of question cannot be asked during check-in." +msgstr "" + +#: pretix/api/serializers/order.py:1109 pretix/api/serializers/order.py:1116 +msgid "The product \"{}\" is not available on this date." +msgstr "" + +#: pretix/api/serializers/organizer.py:60 pretix/control/forms/organizer.py:315 +msgid "" +"A gift card with the same secret already exists in your or an affiliated " +"organizer account." +msgstr "" + +#: pretix/api/serializers/organizer.py:142 +#: pretix/control/views/organizer.py:511 +msgid "pretix account invitation" +msgstr "" + +#: pretix/api/serializers/organizer.py:164 +#: pretix/control/views/organizer.py:610 +msgid "This user already has been invited for this team." +msgstr "" + +#: pretix/api/serializers/organizer.py:180 +#: pretix/control/views/organizer.py:627 +msgid "This user already has permissions for this team." +msgstr "" + +#: pretix/api/views/oauth.py:85 pretix/control/logdisplay.py:363 +#, python-brace-format +msgid "" +"The application \"{application_name}\" has been authorized to access your " +"account." +msgstr "" + +#: pretix/api/views/order.py:464 pretix/control/views/orders.py:1195 +#: pretix/presale/views/order.py:663 pretix/presale/views/order.py:728 +msgid "You cannot generate an invoice for this order." +msgstr "" + +#: pretix/api/views/order.py:469 pretix/control/views/orders.py:1197 +#: pretix/presale/views/order.py:665 pretix/presale/views/order.py:730 +msgid "An invoice for this order already exists." +msgstr "" + +#: pretix/api/views/order.py:495 pretix/control/views/orders.py:1323 +#: pretix/control/views/users.py:97 +msgid "There was an error sending the mail. Please try again later." +msgstr "" + +#: pretix/api/views/order.py:573 pretix/base/services/cart.py:109 +#: pretix/base/services/orders.py:94 pretix/presale/views/order.py:712 +msgid "One of the selected products is not available in the selected country." +msgstr "" + +#: pretix/api/webhooks.py:179 pretix/base/notifications.py:224 +msgid "New order placed" +msgstr "" + +#: pretix/api/webhooks.py:183 pretix/base/notifications.py:230 +msgid "New order requires approval" +msgstr "" + +#: pretix/api/webhooks.py:187 pretix/base/notifications.py:236 +msgid "Order marked as paid" +msgstr "" + +#: pretix/api/webhooks.py:191 pretix/base/notifications.py:242 +#: pretix/control/templates/pretixcontrol/event/mail.html:68 +#: pretix/control/views/orders.py:1161 +msgid "Order canceled" +msgstr "" + +#: pretix/api/webhooks.py:195 pretix/base/notifications.py:248 +msgid "Order reactivated" +msgstr "" + +#: pretix/api/webhooks.py:199 pretix/base/notifications.py:254 +msgid "Order expired" +msgstr "" + +#: pretix/api/webhooks.py:203 pretix/base/notifications.py:260 +msgid "Order information changed" +msgstr "" + +#: pretix/api/webhooks.py:207 pretix/base/notifications.py:266 +msgid "Order contact address changed" +msgstr "" + +#: pretix/api/webhooks.py:211 pretix/base/notifications.py:272 +#: pretix/control/templates/pretixcontrol/event/mail.html:59 +msgid "Order changed" +msgstr "" + +#: pretix/api/webhooks.py:215 pretix/base/notifications.py:284 +msgid "External refund of payment" +msgstr "" + +#: pretix/api/webhooks.py:219 +msgid "Order approved" +msgstr "" + +#: pretix/api/webhooks.py:223 +msgid "Order denied" +msgstr "" + +#: pretix/api/webhooks.py:227 +msgid "Ticket checked in" +msgstr "" + +#: pretix/api/webhooks.py:231 +msgid "Ticket check-in reverted" +msgstr "" + +#: pretix/api/webhooks.py:235 +msgid "Event created" +msgstr "" + +#: pretix/api/webhooks.py:239 pretix/api/webhooks.py:243 +msgid "Event details changed" +msgstr "" + +#: pretix/api/webhooks.py:247 +msgctxt "subevent" +msgid "Event series date added" +msgstr "" + +#: pretix/api/webhooks.py:251 +msgctxt "subevent" +msgid "Event series date changed" +msgstr "" + +#: pretix/api/webhooks.py:255 +msgctxt "subevent" +msgid "Event series date deleted" +msgstr "" + +#: pretix/base/auth.py:104 +#, python-brace-format +msgid "{system} User" +msgstr "" + +#: pretix/base/auth.py:113 pretix/base/forms/auth.py:207 +#: pretix/base/models/auth.py:90 pretix/base/models/notifications.py:25 +#: pretix/base/models/orders.py:146 pretix/control/navigation.py:60 +#: pretix/control/templates/pretixcontrol/event/settings.html:67 +#: pretix/plugins/checkinlists/exporters.py:417 +#: pretix/presale/checkoutflow.py:823 pretix/presale/forms/checkout.py:23 +#: pretix/presale/forms/user.py:6 +#: pretix/presale/templates/pretixpresale/event/order.html:297 +msgid "E-mail" +msgstr "" + +#: pretix/base/auth.py:115 pretix/base/forms/auth.py:118 +#: pretix/base/forms/auth.py:170 pretix/control/forms/event.py:1008 +msgid "Password" +msgstr "" + +#: pretix/base/channels.py:84 +msgid "Online shop" +msgstr "" + +#: pretix/base/email.py:155 pretix/control/views/main.py:261 +#: pretix/plugins/badges/apps.py:24 pretix/plugins/badges/models.py:27 +#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:35 +#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:55 +#: pretix/plugins/ticketoutputpdf/models.py:27 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:33 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:53 +msgid "Default" +msgstr "" + +#: pretix/base/email.py:162 +msgid "Simple with logo" +msgstr "" + +#: pretix/base/email.py:436 pretix/base/email.py:502 pretix/base/email.py:518 +#: pretix/base/email.py:523 pretix/base/pdf.py:120 pretix/base/pdf.py:263 +#: pretix/base/services/invoices.py:365 pretix/control/views/event.py:696 +msgid "John Doe" +msgstr "" + +#: pretix/base/email.py:440 +msgid "Sample Corporation" +msgstr "" + +#: pretix/base/email.py:480 +msgid "Sample Admission Ticket" +msgstr "" + +#: pretix/base/email.py:506 +msgid "An individual text with a reason can be inserted here." +msgstr "" + +#: pretix/base/email.py:510 +msgid "The amount has been charged to your card." +msgstr "" + +#: pretix/base/email.py:514 +msgid "Please transfer money to this bank account: 9999-9999-9999-9999" +msgstr "" + +#: pretix/base/exporter.py:117 pretix/base/exporter.py:244 +msgid "Export format" +msgstr "" + +#: pretix/base/exporter.py:119 +msgid "Excel (.xlsx)" +msgstr "" + +#: pretix/base/exporter.py:120 pretix/base/exporter.py:236 +msgid "CSV (with commas)" +msgstr "" + +#: pretix/base/exporter.py:121 pretix/base/exporter.py:237 +msgid "CSV (Excel-style)" +msgstr "" + +#: pretix/base/exporter.py:122 pretix/base/exporter.py:238 +msgid "CSV (with semicolons)" +msgstr "" + +#: pretix/base/exporter.py:232 +msgid "Combined Excel (.xlsx)" +msgstr "" + +#: pretix/base/exporters/answers.py:18 +msgid "Answers to file upload questions" +msgstr "" + +#: pretix/base/exporters/answers.py:27 pretix/base/models/items.py:1113 +#: pretix/control/navigation.py:161 +#: pretix/control/templates/pretixcontrol/items/questions.html:3 +#: pretix/control/templates/pretixcontrol/items/questions.html:5 +msgid "Questions" +msgstr "" + +#: pretix/base/exporters/dekodi.py:82 +#, python-brace-format +msgid "Event ticket {event}-{code}" +msgstr "" + +#: pretix/base/exporters/dekodi.py:202 pretix/base/exporters/invoices.py:36 +#: pretix/base/exporters/orderlist.py:73 pretix/base/exporters/orderlist.py:510 +#: pretix/base/exporters/orderlist.py:791 +#: pretix/base/exporters/waitinglist.py:93 +#: pretix/control/forms/subevents.py:386 +#: pretix/control/templates/pretixcontrol/events/index.html:74 +#: pretix/control/templates/pretixcontrol/order/index.html:614 +#: pretix/control/templates/pretixcontrol/order/index.html:708 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:52 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:54 +#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:19 +#: pretix/control/templates/pretixcontrol/user/staff_session_list.html:18 +#: pretix/plugins/badges/exporters.py:242 +#: pretix/plugins/checkinlists/exporters.py:48 +#: pretix/plugins/checkinlists/exporters.py:422 +#: pretix/plugins/ticketoutputpdf/exporters.py:42 +msgid "Start date" +msgstr "" + +#: pretix/base/exporters/dekodi.py:205 pretix/base/exporters/invoices.py:39 +msgid "" +"Only include invoices issued on or after this date. Note that the invoice " +"date does not always correspond to the order or payment date." +msgstr "" + +#: pretix/base/exporters/dekodi.py:210 pretix/base/exporters/invoices.py:44 +#: pretix/base/exporters/orderlist.py:80 pretix/base/exporters/orderlist.py:511 +#: pretix/base/exporters/orderlist.py:792 +#: pretix/base/exporters/waitinglist.py:94 +#: pretix/control/templates/pretixcontrol/events/index.html:78 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:56 +#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:21 +#: pretix/control/templates/pretixcontrol/user/staff_session_list.html:20 +#: pretix/plugins/badges/exporters.py:249 +#: pretix/plugins/checkinlists/exporters.py:55 +#: pretix/plugins/checkinlists/exporters.py:423 +#: pretix/plugins/ticketoutputpdf/exporters.py:49 +msgid "End date" +msgstr "" + +#: pretix/base/exporters/dekodi.py:213 pretix/base/exporters/invoices.py:47 +msgid "" +"Only include invoices issued on or before this date. Note that the invoice " +"date does not always correspond to the order or payment date." +msgstr "" + +#: pretix/base/exporters/invoices.py:52 pretix/base/models/orders.py:1354 +#: pretix/base/models/orders.py:1731 pretix/control/forms/filter.py:139 +#: pretix/control/forms/filter.py:1541 +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:9 +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:14 +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:31 +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:50 +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:59 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:47 +msgid "Payment provider" +msgstr "" + +#: pretix/base/exporters/invoices.py:54 pretix/base/exporters/invoices.py:56 +#: pretix/control/forms/filter.py:141 pretix/control/forms/filter.py:1543 +msgid "All payment providers" +msgstr "" + +#: pretix/base/exporters/invoices.py:61 +msgid "" +"Only include invoices for orders that have at least one payment attempt with " +"this payment provider. Note that this might include some invoices of orders " +"which in the end have been fully or partially paid with a different provider." +msgstr "" + +#: pretix/base/exporters/invoices.py:97 +msgid "All invoices" +msgstr "" + +#: pretix/base/exporters/invoices.py:148 +msgid "Invoice data" +msgstr "" + +#: pretix/base/exporters/invoices.py:157 pretix/base/shredder.py:356 +#: pretix/control/templates/pretixcontrol/order/index.html:219 +#: pretix/control/templates/pretixcontrol/order/index.html:268 +#: pretix/presale/templates/pretixpresale/event/order.html:230 +#: pretix/presale/templates/pretixpresale/event/order.html:251 +msgid "Invoices" +msgstr "" + +#: pretix/base/exporters/invoices.py:158 +msgid "Invoice lines" +msgstr "" + +#: pretix/base/exporters/invoices.py:165 pretix/base/exporters/invoices.py:284 +msgid "Invoice number" +msgstr "" + +#: pretix/base/exporters/invoices.py:166 pretix/base/exporters/invoices.py:294 +#: pretix/base/exporters/orderlist.py:850 +#: pretix/base/exporters/waitinglist.py:84 pretix/base/models/items.py:1024 +#: pretix/base/models/orders.py:158 pretix/base/models/orders.py:2207 +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:63 +#: 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:571 +#: pretix/presale/templates/pretixpresale/organizers/index.html:64 +msgid "Date" +msgstr "" + +#: pretix/base/exporters/invoices.py:167 pretix/base/exporters/invoices.py:295 +#: pretix/base/exporters/orderlist.py:234 +#: pretix/base/exporters/orderlist.py:398 +#: pretix/base/exporters/orderlist.py:500 pretix/base/models/orders.py:128 +#: pretix/base/notifications.py:190 pretix/base/pdf.py:58 +#: pretix/control/templates/pretixcontrol/checkin/index.html:65 +#: pretix/control/templates/pretixcontrol/order/index.html:162 +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:115 +#: pretix/control/templates/pretixcontrol/orders/index.html:46 +#: pretix/control/templates/pretixcontrol/orders/index.html:106 +#: pretix/control/templates/pretixcontrol/search/orders.html:41 +#: pretix/plugins/badges/exporters.py:259 +#: 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:76 +#: pretix/plugins/checkinlists/exporters.py:399 +#: pretix/plugins/checkinlists/exporters.py:575 +#: pretix/plugins/reports/exporters.py:422 +#: pretix/plugins/reports/exporters.py:761 +#: pretix/plugins/ticketoutputpdf/exporters.py:59 +msgid "Order code" +msgstr "" + +#: pretix/base/exporters/invoices.py:168 pretix/base/exporters/invoices.py:296 +#: pretix/base/models/waitinglist.py:52 pretix/base/orderimport.py:126 +#: pretix/control/forms/filter.py:459 +#: pretix/control/templates/pretixcontrol/users/index.html:37 +#: pretix/control/views/waitinglist.py:214 +msgid "E-mail address" +msgstr "" + +#: pretix/base/exporters/invoices.py:169 pretix/base/exporters/invoices.py:297 +msgid "Invoice type" +msgstr "" + +#: pretix/base/exporters/invoices.py:170 pretix/base/exporters/invoices.py:298 +msgid "Cancellation of" +msgstr "" + +#: pretix/base/exporters/invoices.py:171 +#: pretix/base/exporters/waitinglist.py:95 pretix/base/models/auth.py:102 +#: pretix/control/forms/event.py:1227 pretix/control/views/waitinglist.py:215 +msgid "Language" +msgstr "" + +#: pretix/base/exporters/invoices.py:172 pretix/base/exporters/invoices.py:173 +#: pretix/base/exporters/invoices.py:174 pretix/base/exporters/invoices.py:175 +#: pretix/base/exporters/invoices.py:176 pretix/base/exporters/invoices.py:177 +#: pretix/base/exporters/invoices.py:178 pretix/base/exporters/invoices.py:299 +#: pretix/base/exporters/invoices.py:300 pretix/base/exporters/invoices.py:301 +#: pretix/base/exporters/invoices.py:302 pretix/base/exporters/invoices.py:303 +#: pretix/base/exporters/invoices.py:304 pretix/base/exporters/invoices.py:305 +msgid "Invoice sender:" +msgstr "" + +#: pretix/base/exporters/invoices.py:172 pretix/base/exporters/invoices.py:180 +#: pretix/base/exporters/invoices.py:299 pretix/base/exporters/invoices.py:307 +#: pretix/base/exporters/orderlist.py:235 +#: pretix/base/exporters/waitinglist.py:85 pretix/base/forms/questions.py:811 +#: pretix/base/models/devices.py:45 pretix/base/models/devices.py:105 +#: pretix/base/models/event.py:1123 pretix/base/models/event.py:1376 +#: pretix/base/models/items.py:1366 pretix/base/models/items.py:1524 +#: pretix/base/models/organizer.py:35 pretix/base/models/seating.py:40 +#: pretix/base/models/tax.py:107 pretix/base/models/waitinglist.py:45 +#: pretix/base/settings.py:2201 pretix/base/settings.py:2211 +#: pretix/base/settings.py:2450 pretix/control/forms/filter.py:521 +#: pretix/control/forms/item.py:297 +#: pretix/control/templates/pretixcontrol/checkin/index.html:79 +#: 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:821 +#: pretix/control/templates/pretixcontrol/organizers/devices.html:35 +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:96 +#: pretix/control/templates/pretixcontrol/subevents/index.html:74 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:136 +#: pretix/control/views/waitinglist.py:214 pretix/plugins/badges/models.py:32 +#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:34 +#: pretix/plugins/checkinlists/exporters.py:296 +#: pretix/plugins/checkinlists/exporters.py:579 +#: pretix/plugins/reports/exporters.py:762 +#: pretix/plugins/ticketoutputpdf/models.py:32 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:32 +#: pretix/presale/forms/waitinglist.py:32 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:97 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:144 +#: pretix/presale/templates/pretixpresale/event/order.html:309 +#: pretix/presale/templates/pretixpresale/organizers/index.html:61 +msgid "Name" +msgstr "" + +#: pretix/base/exporters/invoices.py:173 pretix/base/exporters/invoices.py:300 +#: pretix/base/exporters/orderlist.py:242 +#: pretix/base/exporters/orderlist.py:418 +#: pretix/base/exporters/orderlist.py:528 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:412 +#: pretix/base/models/orders.py:1160 pretix/base/models/orders.py:2258 +#: pretix/base/orderimport.py:274 pretix/base/orderimport.py:420 +#: pretix/control/forms/filter.py:525 pretix/control/forms/filter.py:556 +#: pretix/control/templates/pretixcontrol/order/index.html:823 +#: pretix/plugins/checkinlists/exporters.py:440 +#: pretix/plugins/reports/exporters.py:717 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:99 +#: pretix/presale/templates/pretixpresale/event/order.html:313 +msgid "Address" +msgstr "" + +#: pretix/base/exporters/invoices.py:174 pretix/base/exporters/invoices.py:182 +#: pretix/base/exporters/invoices.py:301 pretix/base/exporters/invoices.py:309 +#: pretix/base/exporters/orderlist.py:242 +#: pretix/base/exporters/orderlist.py:418 +#: pretix/base/exporters/orderlist.py:529 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:423 +#: pretix/base/models/orders.py:1161 pretix/base/models/orders.py:2259 +#: pretix/base/orderimport.py:285 pretix/base/orderimport.py:431 +#: pretix/base/settings.py:701 pretix/control/forms/filter.py:529 +#: pretix/control/forms/filter.py:560 pretix/control/views/item.py:354 +#: pretix/plugins/checkinlists/exporters.py:441 +#: pretix/plugins/reports/exporters.py:718 +msgid "ZIP code" +msgstr "" + +#: pretix/base/exporters/invoices.py:175 pretix/base/exporters/invoices.py:183 +#: pretix/base/exporters/invoices.py:302 pretix/base/exporters/invoices.py:310 +#: pretix/base/exporters/orderlist.py:242 +#: pretix/base/exporters/orderlist.py:418 +#: pretix/base/exporters/orderlist.py:530 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:431 +#: pretix/base/models/orders.py:1162 pretix/base/models/orders.py:2260 +#: pretix/base/orderimport.py:296 pretix/base/orderimport.py:442 +#: pretix/base/settings.py:713 pretix/control/forms/filter.py:534 +#: pretix/control/forms/filter.py:565 pretix/control/views/item.py:364 +#: pretix/plugins/checkinlists/exporters.py:442 +#: pretix/plugins/reports/exporters.py:719 +msgid "City" +msgstr "" + +#: pretix/base/exporters/invoices.py:176 pretix/base/exporters/invoices.py:184 +#: pretix/base/exporters/invoices.py:303 pretix/base/exporters/invoices.py:311 +#: pretix/base/exporters/orderlist.py:242 +#: pretix/base/exporters/orderlist.py:418 +#: pretix/base/exporters/orderlist.py:531 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:443 +#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2261 +#: pretix/base/models/orders.py:2262 pretix/base/orderimport.py:312 +#: pretix/base/orderimport.py:458 pretix/base/settings.py:722 +#: pretix/control/forms/filter.py:539 pretix/control/forms/filter.py:570 +#: pretix/control/templates/pretixcontrol/order/index.html:827 +#: pretix/control/views/item.py:374 +#: pretix/plugins/checkinlists/exporters.py:443 +#: pretix/plugins/reports/exporters.py:669 +#: pretix/plugins/reports/exporters.py:714 +#: pretix/plugins/reports/exporters.py:763 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:103 +#: pretix/presale/templates/pretixpresale/event/order.html:317 +msgid "Country" +msgstr "" + +#: pretix/base/exporters/invoices.py:177 pretix/base/exporters/invoices.py:304 +msgid "Tax ID" +msgstr "" + +#: pretix/base/exporters/invoices.py:178 pretix/base/exporters/invoices.py:186 +#: pretix/base/exporters/invoices.py:305 pretix/base/exporters/invoices.py:313 +#: pretix/base/exporters/orderlist.py:243 +#: pretix/base/exporters/orderlist.py:418 +#: pretix/base/exporters/orderlist.py:566 pretix/base/models/orders.py:2265 +#: pretix/base/orderimport.py:356 +#: pretix/control/templates/pretixcontrol/order/index.html:834 +#: pretix/plugins/reports/exporters.py:721 +#: pretix/plugins/reports/exporters.py:763 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:110 +#: pretix/presale/templates/pretixpresale/event/order.html:324 +msgid "VAT ID" +msgstr "" + +#: pretix/base/exporters/invoices.py:179 pretix/base/exporters/invoices.py:180 +#: pretix/base/exporters/invoices.py:181 pretix/base/exporters/invoices.py:182 +#: pretix/base/exporters/invoices.py:183 pretix/base/exporters/invoices.py:184 +#: pretix/base/exporters/invoices.py:185 pretix/base/exporters/invoices.py:186 +#: pretix/base/exporters/invoices.py:187 pretix/base/exporters/invoices.py:188 +#: pretix/base/exporters/invoices.py:306 pretix/base/exporters/invoices.py:307 +#: pretix/base/exporters/invoices.py:308 pretix/base/exporters/invoices.py:309 +#: pretix/base/exporters/invoices.py:310 pretix/base/exporters/invoices.py:311 +#: pretix/base/exporters/invoices.py:312 pretix/base/exporters/invoices.py:313 +#: pretix/base/exporters/invoices.py:314 pretix/base/exporters/invoices.py:315 +msgid "Invoice recipient:" +msgstr "" + +#: pretix/base/exporters/invoices.py:179 pretix/base/exporters/invoices.py:306 +#: pretix/base/exporters/orderlist.py:235 +#: pretix/base/exporters/orderlist.py:410 +#: pretix/base/exporters/orderlist.py:527 +#: pretix/base/exporters/orderlist.py:559 pretix/base/forms/questions.py:404 +#: pretix/base/orderimport.py:244 pretix/base/orderimport.py:409 +#: pretix/control/forms/filter.py:517 pretix/control/forms/filter.py:552 +#: pretix/control/templates/pretixcontrol/order/index.html:819 +#: pretix/control/views/item.py:332 +#: pretix/plugins/checkinlists/exporters.py:428 +#: pretix/plugins/reports/exporters.py:716 +#: pretix/plugins/reports/exporters.py:762 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:94 +#: pretix/presale/templates/pretixpresale/event/order.html:305 +msgid "Company" +msgstr "" + +#: pretix/base/exporters/invoices.py:181 pretix/base/exporters/invoices.py:308 +msgid "Street address" +msgstr "" + +#: pretix/base/exporters/invoices.py:185 pretix/base/exporters/invoices.py:312 +#: pretix/base/exporters/orderlist.py:242 +#: pretix/base/exporters/orderlist.py:418 +#: pretix/base/exporters/orderlist.py:532 +#: pretix/base/exporters/orderlist.py:566 pretix/base/forms/questions.py:467 +#: pretix/base/forms/questions.py:777 pretix/base/models/orders.py:1164 +#: pretix/base/models/orders.py:2264 pretix/base/orderimport.py:331 +#: pretix/control/templates/pretixcontrol/order/index.html:830 +#: pretix/plugins/checkinlists/exporters.py:444 +#: pretix/plugins/reports/exporters.py:720 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:106 +#: pretix/presale/templates/pretixpresale/event/order.html:320 +msgctxt "address" +msgid "State" +msgstr "" + +#: pretix/base/exporters/invoices.py:187 pretix/base/exporters/invoices.py:314 +#: pretix/base/models/orders.py:2275 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:114 +msgid "Beneficiary" +msgstr "" + +#: pretix/base/exporters/invoices.py:188 pretix/base/exporters/invoices.py:315 +#: pretix/base/models/orders.py:2270 pretix/base/orderimport.py:367 +#: pretix/control/templates/pretixcontrol/order/index.html:854 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:121 +msgid "Internal reference" +msgstr "" + +#: pretix/base/exporters/invoices.py:189 pretix/control/forms/event.py:1181 +msgid "Reverse charge" +msgstr "" + +#: pretix/base/exporters/invoices.py:190 +msgid "Shown foreign currency" +msgstr "" + +#: pretix/base/exporters/invoices.py:191 +msgid "Foreign currency rate" +msgstr "" + +#: pretix/base/exporters/invoices.py:192 +msgid "Total value (with taxes)" +msgstr "" + +#: pretix/base/exporters/invoices.py:193 +msgid "Total value (without taxes)" +msgstr "" + +#: pretix/base/exporters/invoices.py:194 +msgid "Payment matching IDs" +msgstr "" + +#: pretix/base/exporters/invoices.py:195 pretix/base/exporters/invoices.py:316 +#: pretix/base/exporters/orderlist.py:258 +#: pretix/base/exporters/orderlist.py:421 +#: pretix/base/exporters/orderlist.py:570 +#: pretix/control/templates/pretixcontrol/event/payment.html:10 +#: pretix/control/views/event.py:290 +msgid "Payment providers" +msgstr "" + +#: pretix/base/exporters/invoices.py:251 pretix/base/exporters/invoices.py:353 +msgid "Cancellation" +msgstr "" + +#: pretix/base/exporters/invoices.py:251 pretix/base/exporters/invoices.py:353 +#: pretix/control/templates/pretixcontrol/order/index.html:223 +#: pretix/presale/templates/pretixpresale/event/order.html:238 +msgid "Invoice" +msgstr "" + +#: pretix/base/exporters/invoices.py:271 pretix/base/exporters/orderlist.py:359 +#: pretix/base/exporters/orderlist.py:659 +#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1029 +#: pretix/control/forms/filter.py:106 pretix/control/forms/filter.py:426 +#: pretix/control/forms/item.py:425 pretix/control/forms/subevents.py:97 +#: pretix/control/views/item.py:565 pretix/control/views/vouchers.py:92 +#: pretix/control/views/vouchers.py:93 +#: pretix/plugins/checkinlists/exporters.py:492 +#: pretix/plugins/checkinlists/exporters.py:495 +#: pretix/plugins/checkinlists/exporters.py:532 +#: pretix/plugins/checkinlists/exporters.py:617 +#: pretix/plugins/checkinlists/exporters.py:618 +#: pretix/presale/checkoutflow.py:836 +msgid "Yes" +msgstr "" + +#: pretix/base/exporters/invoices.py:271 pretix/base/exporters/orderlist.py:359 +#: pretix/base/exporters/orderlist.py:659 +#: pretix/base/exporters/orderlist.py:967 pretix/base/models/orders.py:1031 +#: pretix/control/forms/filter.py:106 pretix/control/forms/filter.py:427 +#: pretix/control/forms/item.py:426 pretix/control/forms/subevents.py:98 +#: pretix/control/views/item.py:565 pretix/control/views/vouchers.py:92 +#: pretix/control/views/vouchers.py:93 +#: pretix/plugins/checkinlists/exporters.py:492 +#: pretix/plugins/checkinlists/exporters.py:495 +#: pretix/plugins/checkinlists/exporters.py:532 +#: pretix/plugins/checkinlists/exporters.py:617 +#: pretix/plugins/checkinlists/exporters.py:618 +#: pretix/presale/checkoutflow.py:838 +msgid "No" +msgstr "" + +#: pretix/base/exporters/invoices.py:285 +msgid "Line number" +msgstr "" + +#: pretix/base/exporters/invoices.py:286 pretix/base/exporters/orderlist.py:405 +#: pretix/base/models/items.py:280 pretix/base/models/items.py:645 +#: pretix/base/models/items.py:652 +msgid "Description" +msgstr "" + +#: pretix/base/exporters/invoices.py:287 pretix/control/forms/orders.py:262 +msgid "Gross price" +msgstr "" + +#: pretix/base/exporters/invoices.py:288 +msgid "Net price" +msgstr "" + +#: pretix/base/exporters/invoices.py:289 pretix/base/exporters/orderlist.py:409 +#: pretix/base/exporters/orderlist.py:518 pretix/base/models/orders.py:1879 +#: pretix/base/models/orders.py:1979 +msgid "Tax value" +msgstr "" + +#: pretix/base/exporters/invoices.py:290 pretix/base/exporters/orderlist.py:407 +#: pretix/base/exporters/orderlist.py:516 pretix/base/models/orders.py:1870 +#: pretix/base/models/orders.py:1970 pretix/base/models/tax.py:114 +#: pretix/plugins/reports/exporters.py:670 +#: pretix/plugins/reports/exporters.py:715 +msgid "Tax rate" +msgstr "" + +#: pretix/base/exporters/invoices.py:291 +msgid "Tax name" +msgstr "" + +#: pretix/base/exporters/invoices.py:292 +msgid "Event start date" +msgstr "" + +#: pretix/base/exporters/mail.py:18 +msgid "Email addresses (text file)" +msgstr "" + +#: pretix/base/exporters/mail.py:40 pretix/plugins/reports/exporters.py:348 +#: pretix/plugins/reports/exporters.py:528 +msgid "Filter by status" +msgstr "" + +#: pretix/base/exporters/orderlist.py:36 +msgid "Order data" +msgstr "" + +#: pretix/base/exporters/orderlist.py:45 pretix/base/models/orders.py:209 +#: pretix/control/navigation.py:224 +#: pretix/control/templates/pretixcontrol/orders/index.html:7 +#: pretix/control/templates/pretixcontrol/orders/index.html:9 +#: pretix/plugins/reports/exporters.py:516 +msgid "Orders" +msgstr "" + +#: pretix/base/exporters/orderlist.py:46 pretix/base/models/orders.py:1995 +#: pretix/base/notifications.py:196 +msgid "Order positions" +msgstr "" + +#: pretix/base/exporters/orderlist.py:47 +msgid "Order fees" +msgstr "" + +#: pretix/base/exporters/orderlist.py:55 +msgid "Only paid orders" +msgstr "" + +#: pretix/base/exporters/orderlist.py:61 +msgid "Include payment amounts" +msgstr "" + +#: pretix/base/exporters/orderlist.py:67 +msgid "Show multiple choice answers grouped in one column" +msgstr "" + +#: pretix/base/exporters/orderlist.py:76 +msgid "Only include orders created on or after this date." +msgstr "" + +#: pretix/base/exporters/orderlist.py:83 +msgid "Only include orders created on or before this date." +msgstr "" + +#: pretix/base/exporters/orderlist.py:87 +msgid "Start event date" +msgstr "" + +#: pretix/base/exporters/orderlist.py:90 pretix/base/exporters/orderlist.py:98 +msgid "" +"Only include orders including at least one ticket for a date on or after " +"this date. Will also include other dates in case of mixed orders!" +msgstr "" + +#: pretix/base/exporters/orderlist.py:95 +msgid "End event date" +msgstr "" + +#: pretix/base/exporters/orderlist.py:234 +#: pretix/base/exporters/orderlist.py:397 +#: pretix/base/exporters/orderlist.py:499 +#: pretix/base/exporters/orderlist.py:744 +#: pretix/base/exporters/orderlist.py:850 +#: pretix/base/exporters/waitinglist.py:90 pretix/control/forms/event.py:1273 +#: pretix/control/forms/organizer.py:49 +msgid "Event slug" +msgstr "" + +#: pretix/base/exporters/orderlist.py:234 pretix/base/notifications.py:192 +#: pretix/control/templates/pretixcontrol/search/orders.html:53 +#: pretix/plugins/reports/exporters.py:422 +#: pretix/plugins/reports/exporters.py:763 +msgid "Order total" +msgstr "" + +#: pretix/base/exporters/orderlist.py:234 +#: pretix/base/exporters/orderlist.py:399 +#: pretix/base/exporters/orderlist.py:502 +#: pretix/base/exporters/orderlist.py:744 +#: pretix/base/exporters/orderlist.py:899 +#: pretix/base/exporters/waitinglist.py:97 +#: pretix/base/exporters/waitinglist.py:145 pretix/base/models/orders.py:134 +#: pretix/control/forms/filter.py:773 pretix/control/forms/filter.py:1000 +#: pretix/control/forms/filter.py:1269 pretix/control/forms/filter.py:1350 +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:39 +#: pretix/control/templates/pretixcontrol/checkin/index.html:82 +#: pretix/control/templates/pretixcontrol/events/index.html:86 +#: pretix/control/templates/pretixcontrol/order/index.html:617 +#: pretix/control/templates/pretixcontrol/order/index.html:713 +#: pretix/control/templates/pretixcontrol/orders/index.html:120 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:62 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:58 +#: pretix/control/templates/pretixcontrol/search/orders.html:56 +#: pretix/control/templates/pretixcontrol/subevents/index.html:85 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:147 +#: pretix/control/views/waitinglist.py:214 +#: pretix/plugins/reports/exporters.py:422 +#: pretix/plugins/reports/exporters.py:763 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:61 +#: pretix/presale/templates/pretixpresale/organizers/index.html:67 +msgid "Status" +msgstr "" + +#: pretix/base/exporters/orderlist.py:234 +#: pretix/base/exporters/orderlist.py:400 +#: pretix/base/exporters/orderlist.py:503 +#: pretix/base/exporters/waitinglist.py:86 pretix/base/pdf.py:257 +#: pretix/control/templates/pretixcontrol/checkin/index.html:77 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:138 +msgid "Email" +msgstr "" + +#: pretix/base/exporters/orderlist.py:234 +#: pretix/base/exporters/orderlist.py:401 +#: pretix/base/exporters/orderlist.py:504 +#: pretix/base/exporters/waitinglist.py:87 pretix/base/models/items.py:1028 +#: pretix/base/models/orders.py:150 pretix/base/models/waitinglist.py:56 +#: pretix/base/pdf.py:252 +#: pretix/control/templates/pretixcontrol/order/index.html:210 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:140 +#: pretix/control/views/waitinglist.py:214 +#: pretix/plugins/checkinlists/exporters.py:418 +#: pretix/presale/checkoutflow.py:829 pretix/presale/forms/checkout.py:53 +#: pretix/presale/forms/waitinglist.py:48 +#: pretix/presale/templates/pretixpresale/event/order.html:301 +msgid "Phone number" +msgstr "" + +#: pretix/base/exporters/orderlist.py:234 +#: pretix/base/exporters/orderlist.py:402 +#: pretix/base/exporters/orderlist.py:505 pretix/base/notifications.py:194 +#: pretix/control/forms/filter.py:1594 +#: pretix/control/templates/pretixcontrol/order/index.html:164 +#: pretix/control/templates/pretixcontrol/orders/index.html:112 +#: pretix/control/templates/pretixcontrol/search/orders.html:50 +#: pretix/plugins/checkinlists/exporters.py:430 +#: pretix/plugins/reports/exporters.py:359 +#: pretix/plugins/reports/exporters.py:422 +#: pretix/plugins/reports/exporters.py:539 +#: pretix/plugins/reports/exporters.py:550 +#: pretix/plugins/reports/exporters.py:761 +msgid "Order date" +msgstr "" + +#: pretix/base/exporters/orderlist.py:235 +#: pretix/base/exporters/orderlist.py:403 +#: pretix/base/exporters/orderlist.py:506 +#: pretix/plugins/checkinlists/exporters.py:431 +msgid "Order time" +msgstr "" + +#: pretix/base/exporters/orderlist.py:243 pretix/base/settings.py:301 +msgid "Custom address field" +msgstr "" + +#: pretix/base/exporters/orderlist.py:243 +msgid "Date of last payment" +msgstr "" + +#: pretix/base/exporters/orderlist.py:243 pretix/base/services/stats.py:195 +msgid "Fees" +msgstr "" + +#: pretix/base/exporters/orderlist.py:243 +#: pretix/base/exporters/orderlist.py:569 pretix/base/orderimport.py:548 +#: pretix/control/templates/pretixcontrol/order/index.html:174 +#: pretix/control/templates/pretixcontrol/pdf/index.html:212 +msgid "Order locale" +msgstr "" + +#: pretix/base/exporters/orderlist.py:248 +#, python-brace-format +msgid "Gross at {rate} % tax" +msgstr "" + +#: pretix/base/exporters/orderlist.py:249 +#, python-brace-format +msgid "Net at {rate} % tax" +msgstr "" + +#: pretix/base/exporters/orderlist.py:250 +#, python-brace-format +msgid "Tax value at {rate} % tax" +msgstr "" + +#: pretix/base/exporters/orderlist.py:253 +msgid "Invoice numbers" +msgstr "" + +#: pretix/base/exporters/orderlist.py:254 +#: pretix/base/exporters/orderlist.py:569 pretix/base/orderimport.py:574 +#: pretix/control/forms/filter.py:491 +#: pretix/control/templates/pretixcontrol/order/index.html:171 +msgid "Sales channel" +msgstr "" + +#: pretix/base/exporters/orderlist.py:255 pretix/base/models/items.py:402 +#: pretix/base/models/orders.py:176 +#: pretix/plugins/checkinlists/exporters.py:432 +msgid "Requires special attention" +msgstr "" + +#: pretix/base/exporters/orderlist.py:256 +#: pretix/base/exporters/orderlist.py:745 pretix/base/models/orders.py:171 +#: pretix/base/models/vouchers.py:197 pretix/base/orderimport.py:623 +#: pretix/control/forms/filter.py:463 +#: pretix/control/templates/pretixcontrol/order/index.html:772 +#: pretix/control/templates/pretixcontrol/user/staff_session_list.html:21 +#: pretix/control/views/vouchers.py:74 +#: pretix/plugins/banktransfer/refund_export.py:25 +#: pretix/plugins/checkinlists/exporters.py:433 +msgid "Comment" +msgstr "" + +#: pretix/base/exporters/orderlist.py:257 +#: pretix/control/templates/pretixcontrol/orders/index.html:119 +msgid "Positions" +msgstr "" + +#: pretix/base/exporters/orderlist.py:262 +#, python-brace-format +msgid "Paid by {method}" +msgstr "" + +#: pretix/base/exporters/orderlist.py:404 +msgid "Fee type" +msgstr "" + +#: pretix/base/exporters/orderlist.py:406 +#: pretix/base/exporters/orderlist.py:515 pretix/base/models/orders.py:1129 +#: pretix/base/orderimport.py:499 pretix/base/pdf.py:105 +#: pretix/control/templates/pretixcontrol/item/index.html:88 +#: pretix/control/templates/pretixcontrol/order/change.html:157 +#: pretix/control/templates/pretixcontrol/order/change.html:307 +#: pretix/plugins/checkinlists/exporters.py:297 +#: pretix/plugins/checkinlists/exporters.py:406 +msgid "Price" +msgstr "" + +#: pretix/base/exporters/orderlist.py:408 +#: pretix/base/exporters/orderlist.py:517 +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:9 +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:16 +#: pretix/control/templates/pretixcontrol/order/change.html:145 +msgid "Tax rule" +msgstr "" + +#: pretix/base/exporters/orderlist.py:411 +#: pretix/base/exporters/orderlist.py:416 +#: pretix/base/exporters/orderlist.py:560 +#: pretix/base/exporters/orderlist.py:564 pretix/base/pdf.py:262 +msgid "Invoice address name" +msgstr "" + +#: pretix/base/exporters/orderlist.py:501 +#: pretix/plugins/checkinlists/exporters.py:576 +msgid "Position ID" +msgstr "" + +#: pretix/base/exporters/orderlist.py:509 +#: pretix/base/exporters/orderlist.py:790 pretix/base/models/checkin.py:19 +#: pretix/base/models/items.py:1362 pretix/base/models/orders.py:1111 +#: pretix/base/models/vouchers.py:101 pretix/base/models/waitinglist.py:37 +#: pretix/control/forms/event.py:1222 pretix/control/forms/filter.py:331 +#: pretix/control/forms/filter.py:1387 pretix/control/forms/filter.py:1501 +#: pretix/control/forms/filter.py:1585 pretix/control/forms/item.py:187 +#: pretix/control/forms/orders.py:267 pretix/control/forms/orders.py:319 +#: pretix/control/forms/orders.py:610 pretix/control/forms/vouchers.py:78 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:75 +#: pretix/control/templates/pretixcontrol/items/quotas.html:47 +#: pretix/control/templates/pretixcontrol/order/change.html:104 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:8 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:7 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:12 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:126 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:144 +#: pretix/control/views/waitinglist.py:218 +#: pretix/plugins/checkinlists/exporters.py:421 +#: pretix/plugins/sendmail/forms.py:177 +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:112 +#: pretix/presale/templates/pretixpresale/event/order_change.html:29 +msgctxt "subevent" +msgid "Date" +msgstr "" + +#: pretix/base/exporters/orderlist.py:513 pretix/base/models/items.py:430 +#: pretix/base/models/vouchers.py:156 pretix/base/models/waitinglist.py:67 +#: pretix/base/orderimport.py:177 pretix/control/forms/filter.py:1393 +#: pretix/control/forms/orders.py:246 pretix/control/forms/vouchers.py:29 +#: pretix/control/templates/pretixcontrol/item/base.html:3 +#: pretix/control/templates/pretixcontrol/order/change.html:130 +#: pretix/control/templates/pretixcontrol/orders/overview.html:65 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:120 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:142 +#: pretix/control/views/vouchers.py:72 pretix/control/views/waitinglist.py:214 +#: pretix/plugins/checkinlists/exporters.py:297 +#: pretix/plugins/checkinlists/exporters.py:406 +#: pretix/plugins/checkinlists/exporters.py:578 +#: pretix/plugins/reports/exporters.py:252 +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:100 +#: pretix/presale/forms/order.py:15 +#: pretix/presale/templates/pretixpresale/event/waitinglist.html:10 +msgid "Product" +msgstr "" + +#: pretix/base/exporters/orderlist.py:514 +#: pretix/base/exporters/waitinglist.py:89 pretix/base/models/orders.py:1121 +msgid "Variation" +msgstr "" + +#: pretix/base/exporters/orderlist.py:519 +#: pretix/base/exporters/orderlist.py:524 pretix/base/forms/questions.py:387 +#: pretix/base/models/orders.py:1133 pretix/base/orderimport.py:381 +#: pretix/base/pdf.py:119 pretix/control/forms/filter.py:544 +#: pretix/control/templates/pretixcontrol/order/index.html:394 +#: pretix/control/views/item.py:308 pretix/plugins/badges/exporters.py:258 +#: pretix/plugins/checkinlists/exporters.py:75 +#: pretix/plugins/checkinlists/exporters.py:400 +#: pretix/plugins/ticketoutputpdf/exporters.py:58 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:50 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:53 +#: pretix/presale/templates/pretixpresale/event/order_change.html:51 +msgid "Attendee name" +msgstr "" + +#: pretix/base/exporters/orderlist.py:526 pretix/base/forms/questions.py:393 +#: pretix/base/models/orders.py:1141 pretix/base/pdf.py:161 +#: pretix/control/templates/pretixcontrol/order/index.html:399 +#: pretix/control/views/item.py:320 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:60 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:63 +msgid "Attendee email" +msgstr "" + +#: pretix/base/exporters/orderlist.py:533 pretix/base/models/vouchers.py:209 +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:5 +#: pretix/control/templates/pretixcontrol/vouchers/detail.html:6 +#: pretix/control/templates/pretixcontrol/vouchers/detail.html:8 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:148 +msgid "Voucher" +msgstr "" + +#: pretix/base/exporters/orderlist.py:534 +msgid "Pseudonymization ID" +msgstr "" + +#: pretix/base/exporters/orderlist.py:535 pretix/base/orderimport.py:594 +#: pretix/plugins/checkinlists/exporters.py:434 +msgid "Seat ID" +msgstr "" + +#: pretix/base/exporters/orderlist.py:536 +#: pretix/plugins/checkinlists/exporters.py:435 +msgid "Seat name" +msgstr "" + +#: pretix/base/exporters/orderlist.py:537 +#: pretix/plugins/checkinlists/exporters.py:436 +msgid "Seat zone" +msgstr "" + +#: pretix/base/exporters/orderlist.py:538 +#: pretix/plugins/checkinlists/exporters.py:437 +msgid "Seat row" +msgstr "" + +#: pretix/base/exporters/orderlist.py:539 +#: pretix/plugins/checkinlists/exporters.py:438 +msgid "Seat number" +msgstr "" + +#: pretix/base/exporters/orderlist.py:540 +msgid "Order comment" +msgstr "" + +#: pretix/base/exporters/orderlist.py:703 +msgid "Order payments and refunds" +msgstr "" + +#: pretix/base/exporters/orderlist.py:711 +msgid "Payment states" +msgstr "" + +#: pretix/base/exporters/orderlist.py:719 +msgid "Refund states" +msgstr "" + +#: pretix/base/exporters/orderlist.py:744 +#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:208 +#: pretix/base/models/orders.py:1341 pretix/base/models/orders.py:1712 +#: pretix/base/models/orders.py:1859 pretix/base/models/orders.py:1964 +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:64 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:15 +#: pretix/plugins/checkinlists/exporters.py:295 +msgid "Order" +msgstr "" + +#: pretix/base/exporters/orderlist.py:744 +#: pretix/base/exporters/orderlist.py:850 +#: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:5 +msgid "Payment ID" +msgstr "" + +#: pretix/base/exporters/orderlist.py:744 +#: pretix/base/exporters/orderlist.py:943 +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:30 +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:54 +msgid "Creation date" +msgstr "" + +#: pretix/base/exporters/orderlist.py:744 +#: pretix/control/templates/pretixcontrol/order/index.html:709 +msgid "Completion date" +msgstr "" + +#: pretix/base/exporters/orderlist.py:745 +msgid "Status code" +msgstr "" + +#: pretix/base/exporters/orderlist.py:745 +#: pretix/base/exporters/orderlist.py:850 pretix/base/models/orders.py:1337 +#: pretix/base/models/orders.py:1708 +#: pretix/control/templates/pretixcontrol/order/index.html:618 +#: pretix/control/templates/pretixcontrol/order/index.html:714 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:67 +#: pretix/plugins/banktransfer/refund_export.py:25 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:25 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:13 +msgid "Amount" +msgstr "" + +#: pretix/base/exporters/orderlist.py:745 +#: pretix/control/templates/pretixcontrol/order/index.html:616 +#: pretix/control/templates/pretixcontrol/order/index.html:711 +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:84 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:19 +msgid "Payment method" +msgstr "" + +#: pretix/base/exporters/orderlist.py:781 +msgid "Quota availabilities" +msgstr "" + +#: pretix/base/exporters/orderlist.py:786 +#: pretix/control/templates/pretixcontrol/items/quotas.html:41 +msgid "Quota name" +msgstr "" + +#: pretix/base/exporters/orderlist.py:786 +#: pretix/control/templates/pretixcontrol/items/quota.html:56 +msgid "Total quota" +msgstr "" + +#: pretix/base/exporters/orderlist.py:786 +#: pretix/control/templates/pretixcontrol/event/cancel.html:16 +#: pretix/control/views/item.py:797 +msgid "Paid orders" +msgstr "" + +#: pretix/base/exporters/orderlist.py:786 pretix/control/views/item.py:802 +msgid "Pending orders" +msgstr "" + +#: pretix/base/exporters/orderlist.py:786 +msgid "Blocking vouchers" +msgstr "" + +#: pretix/base/exporters/orderlist.py:787 pretix/control/views/item.py:821 +msgid "Current user's carts" +msgstr "" + +#: pretix/base/exporters/orderlist.py:787 +#: pretix/base/exporters/waitinglist.py:20 pretix/base/shredder.py:205 +#: pretix/control/forms/event.py:1297 pretix/control/navigation.py:206 +#: pretix/control/templates/pretixcontrol/event/settings.html:251 +#: pretix/control/templates/pretixcontrol/orders/cancel.html:62 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:6 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:8 +#: pretix/presale/templates/pretixpresale/event/fragment_availability.html:14 +#: pretix/presale/templates/pretixpresale/event/fragment_availability.html:27 +#: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:25 +#: pretix/presale/templates/pretixpresale/event/waitinglist.html:3 +#: pretix/presale/templates/pretixpresale/fragment_calendar.html:76 +#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:62 +#: pretix/presale/templates/pretixpresale/organizers/index.html:107 +#: pretix/presale/views/widget.py:323 +msgid "Waiting list" +msgstr "" + +#: pretix/base/exporters/orderlist.py:787 +msgid "Exited orders" +msgstr "" + +#: pretix/base/exporters/orderlist.py:787 +msgid "Current availability" +msgstr "" + +#: pretix/base/exporters/orderlist.py:804 +#: pretix/base/exporters/orderlist.py:811 +#: pretix/control/templates/pretixcontrol/items/quota.html:58 +#: pretix/control/views/item.py:828 +msgid "Infinite" +msgstr "" + +#: pretix/base/exporters/orderlist.py:833 +msgid "Gift card redemptions" +msgstr "" + +#: pretix/base/exporters/orderlist.py:850 +#: pretix/base/exporters/orderlist.py:941 pretix/base/models/giftcards.py:54 +#: pretix/control/templates/pretixcontrol/giftcards/checkout.html:10 +#: pretix/control/templates/pretixcontrol/giftcards/payment.html:4 +#: pretix/control/templates/pretixcontrol/order/index.html:386 +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:28 +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:51 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:41 +msgid "Gift card code" +msgstr "" + +#: pretix/base/exporters/orderlist.py:850 +#: pretix/control/templates/pretixcontrol/giftcards/payment.html:10 +msgid "Issuer" +msgstr "" + +#: pretix/base/exporters/orderlist.py:878 pretix/control/navigation.py:459 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:71 +msgid "Gift cards" +msgstr "" + +#: pretix/base/exporters/orderlist.py:885 +msgid "Show value at" +msgstr "" + +#: pretix/base/exporters/orderlist.py:889 +#: pretix/base/exporters/orderlist.py:892 pretix/control/forms/filter.py:173 +#: pretix/control/forms/filter.py:928 pretix/control/forms/filter.py:931 +#: pretix/control/templates/pretixcontrol/event/live.html:75 +msgid "Test mode" +msgstr "" + +#: pretix/base/exporters/orderlist.py:891 +#: pretix/base/exporters/orderlist.py:901 pretix/control/forms/filter.py:425 +#: pretix/control/forms/filter.py:775 pretix/control/forms/filter.py:930 +#: pretix/control/forms/filter.py:939 pretix/control/forms/filter.py:1271 +#: pretix/control/forms/filter.py:1280 pretix/control/forms/filter.py:1352 +#: pretix/control/forms/filter.py:1365 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:106 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:118 +#: pretix/control/templates/pretixcontrol/organizers/devices.html:74 +#: pretix/control/templates/pretixcontrol/organizers/teams.html:40 +#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:51 +msgid "All" +msgstr "" + +#: pretix/base/exporters/orderlist.py:893 pretix/control/forms/filter.py:932 +msgid "Live" +msgstr "" + +#: pretix/base/exporters/orderlist.py:902 pretix/control/forms/filter.py:937 +#: pretix/control/forms/filter.py:940 +#: pretix/control/templates/pretixcontrol/pdf/index.html:351 +msgid "Empty" +msgstr "" + +#: pretix/base/exporters/orderlist.py:903 pretix/control/forms/filter.py:941 +msgid "Valid and with value" +msgstr "" + +#: pretix/base/exporters/orderlist.py:904 pretix/control/forms/filter.py:942 +msgid "Expired and with value" +msgstr "" + +#: pretix/base/exporters/orderlist.py:905 pretix/control/forms/filter.py:161 +#: pretix/control/forms/filter.py:943 pretix/control/forms/filter.py:1357 +#: pretix/control/templates/pretixcontrol/items/question.html:24 +#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:31 +#: pretix/control/templates/pretixcontrol/orders/overview.html:67 +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:76 +#: pretix/plugins/reports/exporters.py:255 +#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:22 +msgid "Expired" +msgstr "" + +#: pretix/base/exporters/orderlist.py:942 pretix/base/models/giftcards.py:63 +msgid "Test mode card" +msgstr "" + +#: pretix/base/exporters/orderlist.py:944 pretix/base/models/giftcards.py:67 +#: pretix/control/templates/pretixcontrol/order/index.html:182 +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:57 +msgid "Expiry date" +msgstr "" + +#: pretix/base/exporters/orderlist.py:945 pretix/control/forms/orders.py:661 +msgid "Special terms and conditions" +msgstr "" + +#: pretix/base/exporters/orderlist.py:946 +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:37 +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:34 +#: pretix/plugins/banktransfer/refund_export.py:25 +#: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:15 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:57 +msgid "Currency" +msgstr "" + +#: pretix/base/exporters/orderlist.py:947 +#: pretix/control/templates/pretixcontrol/order/change.html:94 +#: pretix/control/templates/pretixcontrol/order/change.html:299 +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:32 +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:60 +msgid "Current value" +msgstr "" + +#: pretix/base/exporters/orderlist.py:948 +msgid "Created in order" +msgstr "" + +#: pretix/base/exporters/orderlist.py:949 +msgid "Last invoice number of order" +msgstr "" + +#: pretix/base/exporters/orderlist.py:950 +msgid "Last invoice date of order" +msgstr "" + +#: pretix/base/exporters/waitinglist.py:26 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:87 +msgid "All entries" +msgstr "" + +#: pretix/base/exporters/waitinglist.py:31 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:90 +msgid "Waiting for a voucher" +msgstr "" + +#: pretix/base/exporters/waitinglist.py:36 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:92 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:187 +#: pretix/control/views/waitinglist.py:233 +msgid "Voucher assigned" +msgstr "" + +#: pretix/base/exporters/waitinglist.py:41 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:95 +msgid "Waiting for redemption" +msgstr "" + +#: pretix/base/exporters/waitinglist.py:49 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:183 +#: pretix/control/views/waitinglist.py:229 +msgid "Voucher redeemed" +msgstr "" + +#: pretix/base/exporters/waitinglist.py:57 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:101 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:185 +#: pretix/control/views/waitinglist.py:231 +msgid "Voucher expired" +msgstr "" + +#: pretix/base/exporters/waitinglist.py:88 pretix/base/pdf.py:68 +#: pretix/control/forms/event.py:1379 +#: pretix/control/templates/pretixcontrol/items/index.html:33 +msgid "Product name" +msgstr "" + +#: pretix/base/exporters/waitinglist.py:91 pretix/base/models/event.py:350 +#: pretix/base/pdf.py:166 pretix/control/forms/filter.py:809 +#: pretix/control/forms/filter.py:811 pretix/control/forms/filter.py:1028 +#: pretix/control/forms/filter.py:1030 +#: pretix/control/templates/pretixcontrol/events/index.html:64 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:52 +msgid "Event name" +msgstr "" + +#: pretix/base/exporters/waitinglist.py:92 pretix/base/orderimport.py:139 +#: pretix/control/templates/pretixcontrol/checkin/index.html:70 +msgctxt "subevents" +msgid "Date" +msgstr "" + +#: pretix/base/exporters/waitinglist.py:96 +#: pretix/control/views/waitinglist.py:215 +msgid "Priority" +msgstr "" + +#: pretix/base/exporters/waitinglist.py:98 pretix/base/models/vouchers.py:104 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:19 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:100 +#: pretix/control/views/vouchers.py:72 pretix/control/views/waitinglist.py:214 +#: pretix/plugins/checkinlists/exporters.py:429 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:311 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:313 +#: pretix/presale/templates/pretixpresale/event/index.html:307 +#: pretix/presale/templates/pretixpresale/event/index.html:311 +msgid "Voucher code" +msgstr "" + +#: pretix/base/forms/auth.py:22 pretix/base/forms/auth.py:131 +msgid "Keep me logged in" +msgstr "" + +#: pretix/base/forms/auth.py:25 pretix/base/forms/auth.py:222 +msgid "This combination of credentials is not known to our system." +msgstr "" + +#: pretix/base/forms/auth.py:26 pretix/base/forms/user.py:23 +msgid "For security reasons, please wait 5 minutes before you try again." +msgstr "" + +#: pretix/base/forms/auth.py:27 pretix/base/forms/auth.py:223 +msgid "This account is inactive." +msgstr "" + +#: pretix/base/forms/auth.py:110 +msgid "" +"You already registered with that email address, please use the login form." +msgstr "" + +#: pretix/base/forms/auth.py:111 pretix/base/forms/auth.py:167 +#: pretix/base/forms/user.py:22 pretix/control/forms/users.py:24 +msgid "Please enter the same password twice" +msgstr "" + +#: pretix/base/forms/auth.py:114 +msgid "Email address" +msgstr "" + +#: pretix/base/forms/auth.py:125 pretix/base/forms/auth.py:175 +msgid "Repeat password" +msgstr "" + +#: pretix/base/forms/questions.py:205 +msgid "Please enter a shorter name." +msgstr "" + +#: pretix/base/forms/questions.py:225 +msgctxt "phonenumber" +msgid "International area code" +msgstr "" + +#: pretix/base/forms/questions.py:249 +msgctxt "phonenumber" +msgid "Phone number (without international area code)" +msgstr "" + +#: pretix/base/forms/questions.py:415 pretix/base/forms/questions.py:719 +msgid "Street and Number" +msgstr "" + +#: pretix/base/forms/questions.py:449 pretix/base/forms/questions.py:759 +msgctxt "address" +msgid "Select state" +msgstr "" + +#: pretix/base/forms/questions.py:672 pretix/base/forms/questions.py:703 +#: pretix/base/forms/questions.py:850 pretix/base/payment.py:51 +#: pretix/control/forms/event.py:637 pretix/control/forms/event.py:643 +#: pretix/control/forms/event.py:694 pretix/control/forms/event.py:1133 +#: pretix/plugins/banktransfer/payment.py:362 +#: pretix/plugins/banktransfer/payment.py:368 +msgid "This field is required." +msgstr "" + +#: pretix/base/forms/questions.py:841 +msgid "You need to provide a company name." +msgstr "" + +#: pretix/base/forms/questions.py:843 +msgid "You need to provide your name." +msgstr "" + +#: pretix/base/forms/questions.py:861 pretix/control/views/orders.py:1234 +msgid "Your VAT ID does not match the selected country." +msgstr "" + +#: pretix/base/forms/questions.py:873 +msgid "This VAT ID is not valid. Please re-check your input." +msgstr "" + +#: pretix/base/forms/questions.py:878 +msgid "" +"Your VAT ID could not be checked, as the VAT checking service of your " +"country is currently not available. We will therefore need to charge VAT on " +"your invoice. You can get the tax amount back via the VAT reimbursement " +"process." +msgstr "" + +#: pretix/base/forms/questions.py:886 +msgid "" +"Your VAT ID could not be checked, as the VAT checking service of your " +"country returned an incorrect result. We will therefore need to charge VAT " +"on your invoice. Please contact support to resolve this manually." +msgstr "" + +#: pretix/base/forms/user.py:17 pretix/control/forms/users.py:22 +msgid "" +"There already is an account associated with this e-mail address. Please " +"choose a different one." +msgstr "" + +#: pretix/base/forms/user.py:19 +msgid "" +"Please enter your current password if you want to change your e-mail address " +"or password." +msgstr "" + +#: pretix/base/forms/user.py:21 +msgid "The current password you entered was not correct." +msgstr "" + +#: pretix/base/forms/user.py:28 +msgid "Your current password" +msgstr "" + +#: pretix/base/forms/user.py:32 pretix/control/forms/users.py:29 +msgid "New password" +msgstr "" + +#: pretix/base/forms/user.py:36 pretix/control/forms/users.py:33 +msgid "Repeat new password" +msgstr "" + +#: pretix/base/forms/user.py:40 pretix/control/forms/users.py:37 +msgid "Default timezone" +msgstr "" + +#: pretix/base/forms/user.py:41 pretix/control/forms/users.py:38 +msgid "" +"Only used for views that are not bound to an event. For all event views, the " +"event timezone is used instead." +msgstr "" + +#: pretix/base/forms/user.py:134 +msgid "Device name" +msgstr "" + +#: pretix/base/forms/user.py:135 +msgid "Device type" +msgstr "" + +#: pretix/base/forms/user.py:136 +msgid "Smartphone with the Authenticator application" +msgstr "" + +#: pretix/base/forms/user.py:137 +msgid "WebAuthn-compatible hardware token (e.g. Yubikey)" +msgstr "" + +#: pretix/base/forms/validators.py:28 +msgid "" +"Invalid placeholder syntax: You used a different number of \"{\" than of " +"\"}\"." +msgstr "" + +#: pretix/base/forms/validators.py:39 +#, python-format +msgid "Invalid placeholder(s): %(value)s" +msgstr "" + +#: pretix/base/forms/widgets.py:153 pretix/base/forms/widgets.py:158 +#: pretix/base/models/orders.py:2254 +msgid "Business customer" +msgstr "" + +#: pretix/base/forms/widgets.py:157 +msgid "Individual customer" +msgstr "" + +#: pretix/base/invoice.py:58 +#, python-format +msgctxt "invoice" +msgid "Page %d of %d" +msgstr "" + +#: pretix/base/invoice.py:225 +msgctxt "invoice" +msgid "Classic renderer (pretix 1.0)" +msgstr "" + +#: pretix/base/invoice.py:269 +msgctxt "invoice" +msgid "Invoice from" +msgstr "" + +#: pretix/base/invoice.py:275 +msgctxt "invoice" +msgid "Invoice to" +msgstr "" + +#: pretix/base/invoice.py:303 pretix/base/invoice.py:752 +msgctxt "invoice" +msgid "Order code" +msgstr "" + +#: pretix/base/invoice.py:312 pretix/base/invoice.py:761 +msgctxt "invoice" +msgid "Cancellation number" +msgstr "" + +#: pretix/base/invoice.py:318 pretix/base/invoice.py:769 +msgctxt "invoice" +msgid "Original invoice" +msgstr "" + +#: pretix/base/invoice.py:323 pretix/base/invoice.py:776 +msgctxt "invoice" +msgid "Invoice number" +msgstr "" + +#: pretix/base/invoice.py:331 pretix/base/invoice.py:791 +msgctxt "invoice" +msgid "Cancellation date" +msgstr "" + +#: pretix/base/invoice.py:337 +msgctxt "invoice" +msgid "Original invoice date" +msgstr "" + +#: pretix/base/invoice.py:344 pretix/base/invoice.py:793 +msgctxt "invoice" +msgid "Invoice date" +msgstr "" + +#: pretix/base/invoice.py:360 +msgctxt "invoice" +msgid "Event" +msgstr "" + +#: pretix/base/invoice.py:380 +#, python-brace-format +msgctxt "invoice" +msgid "" +"{from_date}\n" +"until {to_date}" +msgstr "" + +#: pretix/base/invoice.py:408 +#: pretix/control/templates/pretixcontrol/base.html:278 +#: pretix/control/templates/pretixcontrol/checkin/index.html:102 +#: pretix/control/templates/pretixcontrol/order/index.html:23 +#: pretix/control/templates/pretixcontrol/orders/index.html:135 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:83 +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:11 +#: pretix/control/templates/pretixcontrol/organizers/giftcard_edit.html:10 +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:73 +#: pretix/control/templates/pretixcontrol/search/orders.html:70 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:67 +#: pretix/presale/templates/pretixpresale/event/order.html:67 +#: pretix/presale/templates/pretixpresale/event/position.html:14 +msgid "TEST MODE" +msgstr "" + +#: pretix/base/invoice.py:413 pretix/base/services/mail.py:366 +#, python-brace-format +msgctxt "invoice" +msgid "Invoice {num}" +msgstr "" + +#: pretix/base/invoice.py:456 +#, python-brace-format +msgctxt "invoice" +msgid "Customer reference: {reference}" +msgstr "" + +#: pretix/base/invoice.py:464 +msgctxt "invoice" +msgid "Customer VAT ID" +msgstr "" + +#: pretix/base/invoice.py:471 +msgctxt "invoice" +msgid "Beneficiary" +msgstr "" + +#: pretix/base/invoice.py:492 +msgctxt "invoice" +msgid "Tax Invoice" +msgstr "" + +#: pretix/base/invoice.py:493 +msgctxt "invoice" +msgid "Invoice" +msgstr "" + +#: pretix/base/invoice.py:494 +#: pretix/control/templates/pretixcontrol/order/index.html:223 +#: pretix/presale/templates/pretixpresale/event/order.html:238 +msgctxt "invoice" +msgid "Cancellation" +msgstr "" + +#: pretix/base/invoice.py:515 pretix/base/invoice.py:523 +msgctxt "invoice" +msgid "Description" +msgstr "" + +#: pretix/base/invoice.py:516 pretix/base/invoice.py:524 +msgctxt "invoice" +msgid "Qty" +msgstr "" + +#: pretix/base/invoice.py:517 pretix/base/invoice.py:600 +msgctxt "invoice" +msgid "Tax rate" +msgstr "" + +#: pretix/base/invoice.py:518 +msgctxt "invoice" +msgid "Net" +msgstr "" + +#: pretix/base/invoice.py:519 +msgctxt "invoice" +msgid "Gross" +msgstr "" + +#: pretix/base/invoice.py:525 +msgctxt "invoice" +msgid "Amount" +msgstr "" + +#: pretix/base/invoice.py:550 pretix/base/invoice.py:555 +msgctxt "invoice" +msgid "Invoice total" +msgstr "" + +#: pretix/base/invoice.py:563 +msgctxt "invoice" +msgid "Received payments" +msgstr "" + +#: pretix/base/invoice.py:566 +msgctxt "invoice" +msgid "Outstanding payments" +msgstr "" + +#: pretix/base/invoice.py:601 +msgctxt "invoice" +msgid "Net value" +msgstr "" + +#: pretix/base/invoice.py:602 +msgctxt "invoice" +msgid "Gross value" +msgstr "" + +#: pretix/base/invoice.py:603 +msgctxt "invoice" +msgid "Tax" +msgstr "" + +#: pretix/base/invoice.py:633 +msgctxt "invoice" +msgid "Included taxes" +msgstr "" + +#: pretix/base/invoice.py:661 +#, python-brace-format +msgctxt "invoice" +msgid "" +"Using the conversion rate of 1:{rate} as published by the European Central " +"Bank on {date}, this corresponds to:" +msgstr "" + +#: pretix/base/invoice.py:675 +#, python-brace-format +msgctxt "invoice" +msgid "" +"Using the conversion rate of 1:{rate} as published by the European Central " +"Bank on {date}, the invoice total corresponds to {total}." +msgstr "" + +#: pretix/base/invoice.py:688 +msgid "Modern Invoice Renderer (pretix 2.7)" +msgstr "" + +#: pretix/base/models/auth.py:92 pretix/base/models/orders.py:2256 +#: pretix/base/settings.py:2461 pretix/base/settings.py:2472 +#: pretix/control/templates/pretixcontrol/users/index.html:42 +msgid "Full name" +msgstr "" + +#: pretix/base/models/auth.py:94 +msgid "Is active" +msgstr "" + +#: pretix/base/models/auth.py:96 +msgid "Is site admin" +msgstr "" + +#: pretix/base/models/auth.py:98 +msgid "Date joined" +msgstr "" + +#: pretix/base/models/auth.py:105 +msgid "Timezone" +msgstr "" + +#: pretix/base/models/auth.py:108 +msgid "Two-factor authentication is required to log in" +msgstr "" + +#: pretix/base/models/auth.py:112 +msgid "Receive notifications according to my settings below" +msgstr "" + +#: pretix/base/models/auth.py:113 +msgid "If turned off, you will not get any notifications." +msgstr "" + +#: pretix/base/models/auth.py:126 +#: pretix/control/templates/pretixcontrol/order/index.html:185 +#: pretix/control/templates/pretixcontrol/orders/index.html:109 +#: pretix/control/templates/pretixcontrol/search/orders.html:47 +#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:23 +#: pretix/control/templates/pretixcontrol/user/staff_session_list.html:15 +#: pretix/control/templates/pretixcontrol/users/form.html:4 +#: pretix/control/templates/pretixcontrol/users/form.html:6 +#: pretix/control/views/organizer.py:90 +msgid "User" +msgstr "" + +#: pretix/base/models/auth.py:127 pretix/control/navigation.py:358 +#: pretix/control/templates/pretixcontrol/users/index.html:5 +#: pretix/control/templates/pretixcontrol/users/index.html:7 +msgid "Users" +msgstr "" + +#: pretix/base/models/auth.py:184 +msgid "Account information changed" +msgstr "" + +#: pretix/base/models/auth.py:202 +#: pretix/control/templates/pretixcontrol/auth/forgot.html:7 +msgid "Password recovery" +msgstr "" + +#: pretix/base/models/checkin.py:16 +msgid "All products (including newly created ones)" +msgstr "" + +#: pretix/base/models/checkin.py:17 pretix/plugins/badges/exporters.py:213 +#: pretix/plugins/checkinlists/exporters.py:639 +msgid "Limit to products" +msgstr "" + +#: pretix/base/models/checkin.py:20 +msgctxt "checkin" +msgid "Include pending orders" +msgstr "" + +#: pretix/base/models/checkin.py:22 +msgid "" +"With this option, people will be able to check in even if the order has not " +"been paid." +msgstr "" + +#: pretix/base/models/checkin.py:25 pretix/control/navigation.py:483 +#: pretix/control/templates/pretixcontrol/organizers/gates.html:5 +msgid "Gates" +msgstr "" + +#: pretix/base/models/checkin.py:26 +msgid "" +"Does not have any effect for the validation of tickets, only for the " +"automatic configuration of check-in devices." +msgstr "" + +#: pretix/base/models/checkin.py:30 +msgid "Allow re-entering after an exit scan" +msgstr "" + +#: pretix/base/models/checkin.py:34 +msgid "Allow multiple entries per ticket" +msgstr "" + +#: pretix/base/models/checkin.py:35 +msgid "" +"Use this option to turn off warnings if a ticket is scanned a second time." +msgstr "" + +#: pretix/base/models/checkin.py:39 +msgid "Automatically check out everyone at" +msgstr "" + +#: pretix/base/models/checkin.py:45 +msgid "Sales channels to automatically check in" +msgstr "" + +#: pretix/base/models/checkin.py:46 +msgid "" +"All items on this check-in list will be automatically marked as checked-in " +"when purchased through any of the selected sales channels. This option can " +"be useful when tickets sold at the box office are not checked again before " +"entry and should be considered validated directly upon purchase." +msgstr "" + +#: pretix/base/models/checkin.py:201 +msgid "Entry" +msgstr "" + +#: pretix/base/models/checkin.py:202 +msgid "Exit" +msgstr "" + +#: pretix/base/models/devices.py:50 pretix/base/models/items.py:1043 +msgid "Internal identifier" +msgstr "" + +#: pretix/base/models/devices.py:51 pretix/base/models/items.py:1044 +msgid "" +"You can enter any value here to make it easier to match the data with other " +"sources. If you do not input one, we will generate one automatically." +msgstr "" + +#: pretix/base/models/devices.py:70 pretix/base/models/items.py:1133 +msgid "This identifier is already used for a different question." +msgstr "" + +#: pretix/base/models/devices.py:91 +#: pretix/control/templates/pretixcontrol/organizers/gates.html:16 +msgid "Gate" +msgstr "" + +#: pretix/base/models/devices.py:109 +#: pretix/control/templates/pretixcontrol/organizers/devices.html:38 +msgid "Setup date" +msgstr "" + +#: pretix/base/models/devices.py:112 +msgid "Initialization date" +msgstr "" + +#: pretix/base/models/event.py:45 +msgid "The end of the presale period has to be later than its start." +msgstr "" + +#: pretix/base/models/event.py:47 +msgid "The end of the event has to be later than its start." +msgstr "" + +#: pretix/base/models/event.py:355 +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 " +"or a date with less than 10 characters that can be easily remembered, but " +"you can also choose to use a random value. This will be used in URLs, order " +"codes, invoice numbers, and bank transfer references." +msgstr "" + +#: pretix/base/models/event.py:365 pretix/base/models/organizer.py:47 +msgid "The slug may only contain letters, numbers, dots and dashes." +msgstr "" + +#: pretix/base/models/event.py:369 pretix/base/models/organizer.py:51 +#: pretix/control/templates/pretixcontrol/organizers/index.html:40 +msgid "Short form" +msgstr "" + +#: pretix/base/models/event.py:371 +msgid "Shop is live" +msgstr "" + +#: pretix/base/models/event.py:373 +msgid "Event currency" +msgstr "" + +#: pretix/base/models/event.py:376 pretix/base/models/event.py:1125 +#: pretix/base/settings.py:2199 pretix/base/settings.py:2209 +#: pretix/control/forms/subevents.py:530 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:268 +msgid "Event start time" +msgstr "" + +#: pretix/base/models/event.py:378 pretix/base/models/event.py:1127 +#: pretix/base/pdf.py:223 pretix/control/forms/subevents.py:535 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:270 +msgid "Event end time" +msgstr "" + +#: pretix/base/models/event.py:380 pretix/base/models/event.py:1129 +#: pretix/control/forms/subevents.py:540 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:274 +msgid "Admission time" +msgstr "" + +#: pretix/base/models/event.py:382 pretix/base/models/event.py:1118 +msgid "Show in lists" +msgstr "" + +#: pretix/base/models/event.py:383 +msgid "" +"If selected, this event will show up publicly on the list of events for your " +"organizer account." +msgstr "" + +#: pretix/base/models/event.py:386 pretix/base/models/event.py:1132 +#: pretix/control/forms/subevents.py:77 +msgid "End of presale" +msgstr "" + +#: pretix/base/models/event.py:387 pretix/base/models/event.py:1133 +#: pretix/control/forms/subevents.py:78 +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:392 pretix/base/models/event.py:1138 +#: pretix/control/forms/subevents.py:71 +msgid "Start of presale" +msgstr "" + +#: pretix/base/models/event.py:393 pretix/base/models/event.py:1139 +#: pretix/control/forms/subevents.py:72 +msgid "Optional. No products will be sold before this date." +msgstr "" + +#: pretix/base/models/event.py:398 pretix/base/models/event.py:1144 +#: pretix/presale/templates/pretixpresale/event/index.html:197 +msgid "Location" +msgstr "" + +#: pretix/base/models/event.py:401 pretix/base/models/event.py:1147 +msgid "Latitude" +msgstr "" + +#: pretix/base/models/event.py:409 pretix/base/models/event.py:1155 +msgid "Longitude" +msgstr "" + +#: pretix/base/models/event.py:418 pretix/control/navigation.py:44 +msgid "Plugins" +msgstr "" + +#: pretix/base/models/event.py:421 +#: pretix/control/templates/pretixcontrol/event/index.html:143 +#: pretix/control/templates/pretixcontrol/order/index.html:865 +msgid "Internal comment" +msgstr "" + +#: pretix/base/models/event.py:425 pretix/base/pdf.py:171 +#: pretix/control/forms/event.py:211 pretix/control/forms/filter.py:1010 +#: pretix/control/templates/pretixcontrol/event/index.html:13 +#: pretix/control/views/dashboards.py:507 +#: pretix/presale/templates/pretixpresale/organizers/index.html:102 +#: pretix/presale/views/widget.py:544 +msgid "Event series" +msgstr "" + +#: pretix/base/models/event.py:431 pretix/base/payment.py:312 +msgid "Restrict to specific sales channels" +msgstr "" + +#: pretix/base/models/event.py:432 +msgid "Only sell tickets for this event on the following sales channels." +msgstr "" + +#: pretix/base/models/event.py:438 pretix/base/models/items.py:256 +#: pretix/base/models/items.py:1355 pretix/base/models/orders.py:140 +#: pretix/base/models/orders.py:2199 pretix/base/models/vouchers.py:95 +#: pretix/base/models/waitinglist.py:31 pretix/base/notifications.py:178 +#: pretix/control/templates/pretixcontrol/search/orders.html:44 +#: pretix/presale/templates/pretixpresale/event/waitinglist.html:18 +msgid "Event" +msgstr "" + +#: pretix/base/models/event.py:439 pretix/control/navigation.py:305 +#: pretix/control/navigation.py:407 +#: pretix/control/templates/pretixcontrol/events/index.html:5 +#: pretix/control/templates/pretixcontrol/events/index.html:7 +#: pretix/control/templates/pretixcontrol/organizers/devices.html:39 +#: pretix/control/templates/pretixcontrol/organizers/teams.html:18 +#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:37 +#: pretix/control/views/organizer.py:1179 +msgid "Events" +msgstr "" + +#: pretix/base/models/event.py:951 +msgid "" +"You have configured at least one paid product but have not enabled any " +"payment methods." +msgstr "" + +#: pretix/base/models/event.py:954 +msgid "You need to configure at least one quota to sell anything." +msgstr "" + +#: pretix/base/models/event.py:959 +#, python-brace-format +msgid "You need to fill the meta parameter \"{property}\"." +msgstr "" + +#: pretix/base/models/event.py:1064 +msgid "" +"Once created an event cannot change between an series and a single event." +msgstr "" + +#: pretix/base/models/event.py:1070 +msgid "The event slug cannot be changed." +msgstr "" + +#: pretix/base/models/event.py:1073 +msgid "This slug has already been used for a different event." +msgstr "" + +#: pretix/base/models/event.py:1079 +msgid "The event cannot end before it starts." +msgstr "" + +#: pretix/base/models/event.py:1085 +msgid "The event's presale cannot end before it starts." +msgstr "" + +#: pretix/base/models/event.py:1114 pretix/base/models/items.py:277 +#: pretix/base/models/items.py:649 pretix/control/forms/filter.py:776 +#: pretix/control/forms/filter.py:1272 +#: pretix/control/templates/pretixcontrol/users/index.html:46 +msgid "Active" +msgstr "" + +#: pretix/base/models/event.py:1115 +msgid "" +"Only with this checkbox enabled, this date is visible in the frontend to " +"users." +msgstr "" + +#: pretix/base/models/event.py:1119 +msgid "" +"If selected, this event will show up publicly on the list of dates for your " +"event." +msgstr "" + +#: pretix/base/models/event.py:1164 pretix/base/settings.py:2008 +msgid "Frontpage text" +msgstr "" + +#: pretix/base/models/event.py:1178 +msgid "Date in event series" +msgstr "" + +#: pretix/base/models/event.py:1179 +msgid "Dates in event series" +msgstr "" + +#: pretix/base/models/event.py:1284 +msgid "One or more variations do not belong to this event." +msgstr "" + +#: pretix/base/models/event.py:1368 pretix/base/models/items.py:1516 +msgid "Can not contain spaces or special characters except underscores" +msgstr "" + +#: pretix/base/models/event.py:1373 pretix/base/models/items.py:1521 +msgid "The property name may only contain letters, numbers and underscores." +msgstr "" + +#: pretix/base/models/event.py:1378 +msgid "Default value" +msgstr "" + +#: pretix/base/models/event.py:1380 +msgid "Can only be changed by organizer-level administrators" +msgstr "" + +#: pretix/base/models/event.py:1382 +msgid "Required for events" +msgstr "" + +#: pretix/base/models/event.py:1383 +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:1388 +msgid "Valid values" +msgstr "" + +#: pretix/base/models/event.py:1389 +msgid "" +"If you keep this empty, any value is allowed. Otherwise, enter one possible " +"value per line." +msgstr "" + +#: pretix/base/models/event.py:1395 +msgid "A property can either be required or have a default value, not both." +msgstr "" + +#: pretix/base/models/event.py:1397 +msgid "You cannot set a default value that is not a valid value." +msgstr "" + +#: pretix/base/models/fields.py:12 +msgid "No value can contain the delimiter character." +msgstr "" + +#: pretix/base/models/giftcards.py:58 +msgid "The gift card code may only contain letters, numbers, dots and dashes." +msgstr "" + +#: pretix/base/models/giftcards.py:70 +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:39 +msgctxt "giftcard" +msgid "Special terms and conditions" +msgstr "" + +#: pretix/base/models/invoices.py:129 +#, python-format +msgctxt "invoice" +msgid "Tax ID: %s" +msgstr "" + +#: pretix/base/models/invoices.py:135 pretix/base/services/invoices.py:103 +#, python-format +msgctxt "invoice" +msgid "VAT-ID: %s" +msgstr "" + +#: pretix/base/models/items.py:51 +msgid "Category name" +msgstr "" + +#: pretix/base/models/items.py:54 pretix/base/models/items.py:271 +msgid "Internal name" +msgstr "" + +#: pretix/base/models/items.py:55 pretix/base/models/items.py:272 +msgid "" +"If you set this, this will be used instead of the public name in the backend." +msgstr "" + +#: pretix/base/models/items.py:59 +msgid "Category description" +msgstr "" + +#: pretix/base/models/items.py:66 +msgid "Products in this category are add-on products" +msgstr "" + +#: pretix/base/models/items.py:67 +msgid "" +"If selected, the products belonging to this category are not for sale on " +"their own. They can only be bought in combination with a product that has " +"this category configured as a possible source for add-ons." +msgstr "" + +#: pretix/base/models/items.py:73 pretix/base/pdf.py:98 +#: pretix/control/templates/pretixcontrol/items/category.html:4 +#: pretix/control/templates/pretixcontrol/items/category.html:6 +msgid "Product category" +msgstr "" + +#: pretix/base/models/items.py:74 +#: pretix/control/templates/pretixcontrol/items/categories.html:3 +#: pretix/control/templates/pretixcontrol/items/categories.html:5 +#: pretix/control/templates/pretixcontrol/items/categories.html:31 +msgid "Product categories" +msgstr "" + +#: pretix/base/models/items.py:80 +#, python-brace-format +msgid "{category} (Add-On products)" +msgstr "" + +#: pretix/base/models/items.py:123 +msgid "Disable product for this date" +msgstr "" + +#: pretix/base/models/items.py:263 pretix/base/models/items.py:829 +#: pretix/control/templates/pretixcontrol/items/index.html:38 +msgid "Category" +msgstr "" + +#: pretix/base/models/items.py:264 +msgid "" +"If you have many products, you can optionally sort them into categories to " +"keep things organized." +msgstr "" + +#: pretix/base/models/items.py:268 +msgid "Item name" +msgstr "" + +#: pretix/base/models/items.py:281 +msgid "This is shown below the product name in lists." +msgstr "" + +#: pretix/base/models/items.py:285 pretix/base/models/items.py:663 +msgid "Default price" +msgstr "" + +#: pretix/base/models/items.py:286 +msgid "" +"If this product has multiple variations, you can set different prices for " +"each of the variations. If a variation does not have a special price or if " +"you do not have variations, this price will be used." +msgstr "" + +#: pretix/base/models/items.py:293 +msgid "Free price input" +msgstr "" + +#: pretix/base/models/items.py:294 +msgid "" +"If this option is active, your users can choose the price themselves. The " +"price configured above is then interpreted as the minimum price a user has " +"to enter. You could use this e.g. to collect additional donations for your " +"event. This is currently not supported for products that are bought as an " +"add-on to other products." +msgstr "" + +#: pretix/base/models/items.py:301 +msgid "Sales tax" +msgstr "" + +#: pretix/base/models/items.py:306 +msgid "Is an admission ticket" +msgstr "" + +#: pretix/base/models/items.py:308 +msgid "Whether or not buying this product allows a person to enter your event" +msgstr "" + +#: pretix/base/models/items.py:314 +msgid "Generate tickets" +msgstr "" + +#: pretix/base/models/items.py:318 +msgid "Show a waiting list for this ticket" +msgstr "" + +#: pretix/base/models/items.py:319 +msgid "This will only work if waiting lists are enabled for this event." +msgstr "" + +#: pretix/base/models/items.py:323 pretix/base/settings.py:917 +#: pretix/control/forms/event.py:1292 +msgid "Show number of tickets left" +msgstr "" + +#: pretix/base/models/items.py:324 +msgid "Publicly show how many tickets are still available." +msgstr "" + +#: pretix/base/models/items.py:331 +msgid "Product picture" +msgstr "" + +#: pretix/base/models/items.py:336 +msgid "Available from" +msgstr "" + +#: pretix/base/models/items.py:338 +msgid "This product will not be sold before the given date." +msgstr "" + +#: pretix/base/models/items.py:341 pretix/base/payment.py:236 +msgid "Available until" +msgstr "" + +#: pretix/base/models/items.py:343 +msgid "This product will not be sold after the given date." +msgstr "" + +#: pretix/base/models/items.py:349 +msgid "Only show after sellout of" +msgstr "" + +#: pretix/base/models/items.py:350 +msgid "" +"If you select a quota here, this product will only be shown when that quota " +"is unavailable. If combined with the option to hide sold-out products, this " +"allows you to swap out products for more expensive ones once they are sold " +"out. There might be a short period in which both products are visible while " +"all tickets in the referenced quota are reserved, but not yet sold." +msgstr "" + +#: pretix/base/models/items.py:357 +msgid "This product can only be bought using a voucher." +msgstr "" + +#: pretix/base/models/items.py:359 +msgid "" +"To buy this product, the user needs a voucher that applies to this product " +"either directly or via a quota." +msgstr "" + +#: pretix/base/models/items.py:363 +msgid "Buying this product requires approval" +msgstr "" + +#: pretix/base/models/items.py:365 +msgid "" +"If this product is part of an order, the order will be put into an " +"\"approval\" state and will need to be confirmed by you before it can be " +"paid and completed. You can use this e.g. for discounted tickets that are " +"only available to specific groups." +msgstr "" + +#: pretix/base/models/items.py:370 +msgid "" +"This product will only be shown if a voucher matching the product is " +"redeemed." +msgstr "" + +#: pretix/base/models/items.py:372 +msgid "" +"This product will be hidden from the event page until the user enters a " +"voucher that unlocks this product." +msgstr "" + +#: pretix/base/models/items.py:376 +msgid "Only sell this product as part of a bundle" +msgstr "" + +#: pretix/base/models/items.py:378 +msgid "" +"If this option is set, the product will only be sold as part of bundle " +"products. Do not check this option if you want to use this " +"product as an add-on product, but only for fixed bundles!" +msgstr "" + +#: pretix/base/models/items.py:383 +msgid "Allow product to be canceled or changed" +msgstr "" + +#: pretix/base/models/items.py:385 +msgid "" +"If this is checked, the usual cancellation and order change settings of this " +"event apply. If this is unchecked, orders containing this product can not be " +"canceled by users but only by you." +msgstr "" + +#: pretix/base/models/items.py:389 +msgid "Minimum amount per order" +msgstr "" + +#: pretix/base/models/items.py:391 +msgid "" +"This product can only be bought if it is added to the cart at least this " +"many times. If you keep the field empty or set it to 0, there is no special " +"limit for this product." +msgstr "" + +#: pretix/base/models/items.py:395 +msgid "Maximum amount per order" +msgstr "" + +#: pretix/base/models/items.py:397 +msgid "" +"This product can only be bought at most this many times within one order. If " +"you keep the field empty or set it to 0, there is no special limit for this " +"product. The limit for the maximum number of items in the whole order " +"applies regardless." +msgstr "" + +#: pretix/base/models/items.py:404 +msgid "" +"If you set this, the check-in app will show a visible warning that this " +"ticket requires special attention. You can use this for example for student " +"tickets to indicate to the person at check-in that the student ID card still " +"needs to be checked." +msgstr "" + +#: pretix/base/models/items.py:409 pretix/base/models/items.py:666 +msgid "Original price" +msgstr "" + +#: pretix/base/models/items.py:412 pretix/base/models/items.py:669 +msgid "" +"If set, this will be displayed next to the current price to show that the " +"current price is a discounted one. This is just a cosmetic setting and will " +"not actually impact pricing." +msgstr "" + +#: pretix/base/models/items.py:416 pretix/control/forms/event.py:814 +#: pretix/control/forms/item.py:454 +msgid "Sales channels" +msgstr "" + +#: pretix/base/models/items.py:421 +msgid "This product is a gift card" +msgstr "" + +#: pretix/base/models/items.py:422 +msgid "" +"When a customer buys this product, they will get a gift card with a value " +"corresponding to the product price." +msgstr "" + +#: pretix/base/models/items.py:431 pretix/base/models/items.py:1064 +#: pretix/control/forms/filter.py:327 pretix/control/forms/filter.py:1199 +#: pretix/control/forms/item.py:172 pretix/control/navigation.py:127 +#: pretix/control/navigation.py:136 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:78 +#: pretix/control/templates/pretixcontrol/items/base.html:3 +#: pretix/control/templates/pretixcontrol/items/index.html:3 +#: pretix/control/templates/pretixcontrol/items/index.html:5 +#: pretix/control/templates/pretixcontrol/items/questions.html:26 +#: pretix/control/templates/pretixcontrol/items/quotas.html:45 +msgid "Products" +msgstr "" + +#: pretix/base/models/items.py:590 +msgid "" +"The maximum number per order can not be lower than the minimum number per " +"order." +msgstr "" + +#: pretix/base/models/items.py:596 +msgid "The item's category must belong to the same event as the item." +msgstr "" + +#: pretix/base/models/items.py:601 +msgid "The item's tax rule must belong to the same event as the item." +msgstr "" + +#: pretix/base/models/items.py:607 +msgid "The item's availability cannot end before it starts." +msgstr "" + +#: pretix/base/models/items.py:653 +msgid "This is shown below the variation name in lists." +msgstr "" + +#: pretix/base/models/items.py:658 pretix/base/models/items.py:852 +#: pretix/base/models/items.py:1070 +msgid "Position" +msgstr "" + +#: pretix/base/models/items.py:676 pretix/base/models/vouchers.py:168 +#: pretix/base/models/waitinglist.py:75 pretix/base/orderimport.py:207 +msgid "Product variation" +msgstr "" + +#: pretix/base/models/items.py:677 +#: pretix/control/templates/pretixcontrol/item/create.html:63 +msgid "Product variations" +msgstr "" + +#: pretix/base/models/items.py:834 +msgid "Minimum number" +msgstr "" + +#: pretix/base/models/items.py:838 +msgid "Maximum number" +msgstr "" + +#: pretix/base/models/items.py:842 +msgid "Add-Ons are included in the price" +msgstr "" + +#: pretix/base/models/items.py:843 +msgid "" +"If selected, adding add-ons to this ticket is free, even if the add-ons " +"would normally cost money individually." +msgstr "" + +#: pretix/base/models/items.py:848 +msgid "Allow the same product to be selected multiple times" +msgstr "" + +#: pretix/base/models/items.py:867 +msgid "The add-on's category must belong to the same event as the item." +msgstr "" + +#: pretix/base/models/items.py:872 +msgid "The item already has an add-on of this category." +msgstr "" + +#: pretix/base/models/items.py:877 +msgid "The minimum count needs to be equal to or greater than zero." +msgstr "" + +#: pretix/base/models/items.py:882 +msgid "The maximum count needs to be equal to or greater than zero." +msgstr "" + +#: pretix/base/models/items.py:887 +msgid "The maximum count needs to be greater than the minimum count." +msgstr "" + +#: pretix/base/models/items.py:914 +msgid "Bundled item" +msgstr "" + +#: pretix/base/models/items.py:920 +msgid "Bundled variation" +msgstr "" + +#: pretix/base/models/items.py:926 pretix/base/models/items.py:1017 +msgid "Number" +msgstr "" + +#: pretix/base/models/items.py:931 +msgid "Designated price part" +msgstr "" + +#: pretix/base/models/items.py:932 +msgid "" +"If set, it will be shown that this bundled item is responsible for the given " +"value of the total gross price. This might be important in cases of mixed " +"taxation, but can be kept blank otherwise. This value will NOT be added to " +"the base item's price." +msgstr "" + +#: pretix/base/models/items.py:955 +msgid "The bundled item must belong to the same event as the item." +msgstr "" + +#: pretix/base/models/items.py:957 +msgid "A variation needs to be set for this item." +msgstr "" + +#: pretix/base/models/items.py:959 +msgid "The chosen variation does not belong to this item." +msgstr "" + +#: pretix/base/models/items.py:964 +msgid "The count needs to be equal to or greater than zero." +msgstr "" + +#: pretix/base/models/items.py:1018 +msgid "Text (one line)" +msgstr "" + +#: pretix/base/models/items.py:1019 +msgid "Multiline text" +msgstr "" + +#: pretix/base/models/items.py:1020 +msgid "Yes/No" +msgstr "" + +#: pretix/base/models/items.py:1021 +msgid "Choose one from a list" +msgstr "" + +#: pretix/base/models/items.py:1022 +msgid "Choose multiple from a list" +msgstr "" + +#: pretix/base/models/items.py:1023 +msgid "File upload" +msgstr "" + +#: pretix/base/models/items.py:1025 pretix/base/reldate.py:162 +#: pretix/plugins/checkinlists/exporters.py:572 +msgid "Time" +msgstr "" + +#: pretix/base/models/items.py:1026 +msgid "Date and time" +msgstr "" + +#: pretix/base/models/items.py:1027 +msgid "Country code (ISO 3166-1 alpha-2)" +msgstr "" + +#: pretix/base/models/items.py:1039 pretix/base/models/items.py:1112 +#: pretix/base/orderimport.py:652 pretix/control/forms/item.py:45 +#: pretix/control/templates/pretixcontrol/items/question_edit.html:10 +#: pretix/control/templates/pretixcontrol/items/question_edit.html:17 +#: pretix/control/templates/pretixcontrol/items/questions.html:21 +msgid "Question" +msgstr "" + +#: pretix/base/models/items.py:1048 +msgid "Help text" +msgstr "" + +#: pretix/base/models/items.py:1049 +msgid "If the question needs to be explained or clarified, do it here!" +msgstr "" + +#: pretix/base/models/items.py:1055 +msgid "Question type" +msgstr "" + +#: pretix/base/models/items.py:1059 +#: pretix/control/templates/pretixcontrol/items/questions.html:55 +msgid "Required question" +msgstr "" + +#: pretix/base/models/items.py:1066 +msgid "This question will be asked to buyers of the selected products" +msgstr "" + +#: pretix/base/models/items.py:1073 +msgid "Ask during check-in instead of in the ticket buying process" +msgstr "" + +#: pretix/base/models/items.py:1074 +msgid "Not supported by all check-in apps for all question types." +msgstr "" + +#: pretix/base/models/items.py:1078 +#: pretix/control/templates/pretixcontrol/items/questions.html:66 +msgid "Hidden question" +msgstr "" + +#: pretix/base/models/items.py:1079 +msgid "This question will only show up in the backend." +msgstr "" + +#: pretix/base/models/items.py:1083 +msgid "Print answer on invoices" +msgstr "" + +#: pretix/base/models/items.py:1091 pretix/base/models/items.py:1097 +#: pretix/base/models/items.py:1103 +msgid "Minimum value" +msgstr "" + +#: pretix/base/models/items.py:1092 pretix/base/models/items.py:1095 +#: pretix/base/models/items.py:1098 pretix/base/models/items.py:1101 +#: pretix/base/models/items.py:1104 pretix/base/models/items.py:1107 +msgid "Currently not supported in our apps and during check-in" +msgstr "" + +#: pretix/base/models/items.py:1094 pretix/base/models/items.py:1100 +#: pretix/base/models/items.py:1106 +msgid "Maximum value" +msgstr "" + +#: pretix/base/models/items.py:1157 +msgid "An answer to this question is required to proceed." +msgstr "" + +#: pretix/base/models/items.py:1171 pretix/base/models/items.py:1189 +#: pretix/base/orderimport.py:662 pretix/base/orderimport.py:670 +msgid "Invalid option selected." +msgstr "" + +#: pretix/base/models/items.py:1199 +msgid "The number is to low." +msgstr "" + +#: pretix/base/models/items.py:1201 +msgid "The number is to high." +msgstr "" + +#: pretix/base/models/items.py:1204 +msgid "Invalid number input." +msgstr "" + +#: pretix/base/models/items.py:1211 pretix/base/models/items.py:1235 +msgid "Please choose a later date." +msgstr "" + +#: pretix/base/models/items.py:1213 pretix/base/models/items.py:1237 +msgid "Please choose an earlier date." +msgstr "" + +#: pretix/base/models/items.py:1216 +msgid "Invalid date input." +msgstr "" + +#: pretix/base/models/items.py:1223 +msgid "Invalid time input." +msgstr "" + +#: pretix/base/models/items.py:1232 +msgid "Invalid datetime input." +msgstr "" + +#: pretix/base/models/items.py:1244 +msgid "Unknown country code." +msgstr "" + +#: pretix/base/models/items.py:1258 +#: pretix/control/templates/pretixcontrol/items/question.html:68 +msgid "Answer" +msgstr "" + +#: pretix/base/models/items.py:1280 +msgid "The identifier \"{}\" is already used for a different option." +msgstr "" + +#: pretix/base/models/items.py:1283 +msgid "Question option" +msgstr "" + +#: pretix/base/models/items.py:1284 +msgid "Question options" +msgstr "" + +#: pretix/base/models/items.py:1369 pretix/control/forms/event.py:1326 +#: pretix/control/templates/pretixcontrol/items/quotas.html:52 +msgid "Total capacity" +msgstr "" + +#: pretix/base/models/items.py:1371 pretix/control/forms/item.py:307 +msgid "Leave empty for an unlimited number of tickets." +msgstr "" + +#: pretix/base/models/items.py:1375 pretix/base/models/orders.py:1115 +#: pretix/control/templates/pretixcontrol/checkin/index.html:67 +msgid "Item" +msgstr "" + +#: pretix/base/models/items.py:1383 pretix/control/forms/item.py:553 +msgid "Variations" +msgstr "" + +#: pretix/base/models/items.py:1387 +msgid "Close this quota permanently once it is sold out" +msgstr "" + +#: pretix/base/models/items.py:1388 +msgid "" +"If you enable this, when the quota is sold out once, no more tickets will be " +"sold, even if tickets become available again through cancellations or " +"expiring orders. Of course, you can always re-open it manually." +msgstr "" + +#: pretix/base/models/items.py:1396 +msgid "Allow to sell more tickets once people have checked out" +msgstr "" + +#: pretix/base/models/items.py:1397 +msgid "" +"With this option, quota will be released as soon as people are scanned at an " +"exit of your event. This will only happen if they have been scanned both at " +"an entry and at an exit and the exit is the more recent scan. It does not " +"matter which check-in list either of the scans was on, but check-in lists " +"are ignored if they are set to \"Allow re-entering after an exit scan\" to " +"prevent accidental overbooking." +msgstr "" + +#: pretix/base/models/items.py:1408 pretix/base/models/vouchers.py:177 +#: pretix/control/templates/pretixcontrol/items/quota_edit.html:8 +#: pretix/control/templates/pretixcontrol/items/quota_edit.html:15 +msgid "Quota" +msgstr "" + +#: pretix/base/models/items.py:1409 pretix/control/navigation.py:145 +#: pretix/control/templates/pretixcontrol/items/quotas.html:4 +#: pretix/control/templates/pretixcontrol/items/quotas.html:6 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:416 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:168 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:58 +msgid "Quotas" +msgstr "" + +#: pretix/base/models/items.py:1477 +msgid "All variations must belong to an item contained in the items list." +msgstr "" + +#: pretix/base/models/items.py:1486 +msgid "" +"One or more items has variations but none of these are in the variations " +"list." +msgstr "" + +#: pretix/base/models/items.py:1492 pretix/base/models/waitinglist.py:185 +msgid "Subevent cannot be null for event series." +msgstr "" + +#: pretix/base/models/log.py:122 +#, python-brace-format +msgid "Order {val}" +msgstr "" + +#: pretix/base/models/log.py:132 +#, python-brace-format +msgid "Voucher {val}…" +msgstr "" + +#: pretix/base/models/log.py:142 +#, python-brace-format +msgid "Product {val}" +msgstr "" + +#: pretix/base/models/log.py:152 +#, python-brace-format +msgctxt "subevent" +msgid "Date {val}" +msgstr "" + +#: pretix/base/models/log.py:162 +#, python-brace-format +msgid "Quota {val}" +msgstr "" + +#: pretix/base/models/log.py:172 +#, python-brace-format +msgid "Category {val}" +msgstr "" + +#: pretix/base/models/log.py:182 +#, python-brace-format +msgid "Question {val}" +msgstr "" + +#: pretix/base/models/log.py:192 +#, python-brace-format +msgid "Tax rule {val}" +msgstr "" + +#: pretix/base/models/orders.py:120 +msgid "pending" +msgstr "" + +#: pretix/base/models/orders.py:121 +msgid "paid" +msgstr "" + +#: pretix/base/models/orders.py:122 +msgid "expired" +msgstr "" + +#: pretix/base/models/orders.py:123 +msgid "canceled" +msgstr "" + +#: pretix/base/models/orders.py:154 pretix/control/forms/filter.py:467 +msgid "Locale" +msgstr "" + +#: pretix/base/models/orders.py:164 pretix/base/models/orders.py:2211 +#: pretix/control/forms/orders.py:41 +msgid "Expiration date" +msgstr "" + +#: pretix/base/models/orders.py:168 pretix/control/forms/filter.py:478 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:57 +msgid "Total amount" +msgstr "" + +#: pretix/base/models/orders.py:172 pretix/base/models/vouchers.py:198 +msgid "" +"The text entered in this field will not be visible to the user and is " +"available for your convenience." +msgstr "" + +#: pretix/base/models/orders.py:178 +msgid "" +"If you set this, the check-in app will show a visible warning that tickets " +"of this order require special attention. This will not show any details or " +"custom message, so you need to brief your check-in staff how to handle these " +"cases." +msgstr "" + +#: pretix/base/models/orders.py:190 pretix/base/models/orders.py:1152 +msgid "Meta information" +msgstr "" + +#: pretix/base/models/orders.py:202 pretix/control/forms/filter.py:473 +msgid "E-mail address verified" +msgstr "" + +#: pretix/base/models/orders.py:767 +msgid "" +"The payment can not be accepted as the last date of payments configured in " +"the payment settings is over." +msgstr "" + +#: pretix/base/models/orders.py:769 +msgid "" +"The payment can not be accepted as the order is expired and you configured " +"that no late payments should be accepted in the payment settings." +msgstr "" + +#: pretix/base/models/orders.py:771 +msgid "This order is not yet approved by the event organizer." +msgstr "" + +#: pretix/base/models/orders.py:791 +#, python-brace-format +msgid "The ordered product \"{item}\" is no longer available." +msgstr "" + +#: pretix/base/models/orders.py:792 +#, python-brace-format +msgid "The seat \"{seat}\" is no longer available." +msgstr "" + +#: pretix/base/models/orders.py:793 +#, python-brace-format +msgid "The voucher \"{voucher}\" no longer has sufficient budget." +msgstr "" + +#: pretix/base/models/orders.py:794 +#, python-brace-format +msgid "The voucher \"{voucher}\" has been used in the meantime." +msgstr "" + +#: pretix/base/models/orders.py:922 pretix/base/services/orders.py:862 +#: pretix/control/views/event.py:701 +#: pretix/presale/templates/pretixpresale/event/order.html:63 +#, python-format +msgid "Your order: %(code)s" +msgstr "" + +#: pretix/base/models/orders.py:1033 +msgid "" +msgstr "" + +#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +msgid "Empty, if this product is not an admission ticket" +msgstr "" + +#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/settings.py:689 +msgid "Company name" +msgstr "" + +#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +msgid "Select country" +msgstr "" + +#: pretix/base/models/orders.py:1324 +msgctxt "payment_state" +msgid "created" +msgstr "" + +#: pretix/base/models/orders.py:1325 +msgctxt "payment_state" +msgid "pending" +msgstr "" + +#: pretix/base/models/orders.py:1326 +msgctxt "payment_state" +msgid "confirmed" +msgstr "" + +#: pretix/base/models/orders.py:1327 +msgctxt "payment_state" +msgid "canceled" +msgstr "" + +#: pretix/base/models/orders.py:1328 +msgctxt "payment_state" +msgid "failed" +msgstr "" + +#: pretix/base/models/orders.py:1329 +msgctxt "payment_state" +msgid "refunded" +msgstr "" + +#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/shredder.py:400 +msgid "Payment information" +msgstr "" + +#: pretix/base/models/orders.py:1552 +#, python-format +msgid "Event registration confirmed: %(code)s" +msgstr "" + +#: pretix/base/models/orders.py:1570 +#, python-format +msgid "Payment received for your order: %(code)s" +msgstr "" + +#: pretix/base/models/orders.py:1680 +msgctxt "refund_state" +msgid "started externally" +msgstr "" + +#: pretix/base/models/orders.py:1681 +msgctxt "refund_state" +msgid "created" +msgstr "" + +#: pretix/base/models/orders.py:1682 +msgctxt "refund_state" +msgid "in transit" +msgstr "" + +#: pretix/base/models/orders.py:1683 +msgctxt "refund_state" +msgid "done" +msgstr "" + +#: pretix/base/models/orders.py:1684 +msgctxt "refund_state" +msgid "failed" +msgstr "" + +#: pretix/base/models/orders.py:1686 +msgctxt "refund_state" +msgid "canceled" +msgstr "" + +#: pretix/base/models/orders.py:1694 +msgctxt "refund_source" +msgid "Organizer" +msgstr "" + +#: pretix/base/models/orders.py:1695 +msgctxt "refund_source" +msgid "Customer" +msgstr "" + +#: pretix/base/models/orders.py:1696 +msgctxt "refund_source" +msgid "External" +msgstr "" + +#: pretix/base/models/orders.py:1734 +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 +msgid "Refund reason" +msgstr "" + +#: pretix/base/models/orders.py:1735 +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 +msgid "" +"May be shown to the end user or used e.g. as part of a payment reference." +msgstr "" + +#: pretix/base/models/orders.py:1845 +msgid "Payment fee" +msgstr "" + +#: pretix/base/models/orders.py:1846 +msgid "Shipping fee" +msgstr "" + +#: pretix/base/models/orders.py:1847 +msgid "Service fee" +msgstr "" + +#: pretix/base/models/orders.py:1848 +#: pretix/control/templates/pretixcontrol/order/index.html:138 +msgid "Cancellation fee" +msgstr "" + +#: pretix/base/models/orders.py:1849 +msgid "Other fees" +msgstr "" + +#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/control/templates/pretixcontrol/items/index.html:84 +#: pretix/control/templates/pretixcontrol/order/index.html:133 +msgid "Gift card" +msgstr "" + +#: pretix/base/models/orders.py:1855 +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 +#: pretix/control/views/vouchers.py:73 +msgid "Value" +msgstr "" + +#: pretix/base/models/orders.py:1994 +msgid "Order position" +msgstr "" + +#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#, python-format +msgid "Your event registration: %(code)s" +msgstr "" + +#: pretix/base/models/orders.py:2204 +msgid "Cart ID (e.g. session key)" +msgstr "" + +#: pretix/base/models/orders.py:2226 +msgid "Cart position" +msgstr "" + +#: pretix/base/models/orders.py:2227 +msgid "Cart positions" +msgstr "" + +#: pretix/base/models/orders.py:2266 +msgid "Only for business customers within the EU." +msgstr "" + +#: pretix/base/models/orders.py:2271 +msgid "This reference will be printed on your invoice for your convenience." +msgstr "" + +#: pretix/base/models/organizer.py:39 +msgid "" +"Should be short, only contain lowercase letters, numbers, dots, and dashes. " +"Every slug can only be used once. This is being used in URLs to refer to " +"your organizer accounts and your events." +msgstr "" + +#: pretix/base/models/organizer.py:56 pretix/control/forms/event.py:62 +#: pretix/control/forms/event.py:68 pretix/control/forms/filter.py:680 +#: pretix/control/forms/filter.py:1015 +#: pretix/control/templates/pretixcontrol/events/index.html:68 +#: pretix/control/templates/pretixcontrol/organizers/base.html:4 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:9 +msgid "Organizer" +msgstr "" + +#: pretix/base/models/organizer.py:57 pretix/control/navigation.py:311 +#: pretix/control/templates/pretixcontrol/oauth/authorized.html:19 +#: pretix/control/templates/pretixcontrol/organizers/index.html:6 +#: pretix/control/templates/pretixcontrol/organizers/index.html:8 +msgid "Organizers" +msgstr "" + +#: pretix/base/models/organizer.py:185 +#: pretix/control/templates/pretixcontrol/organizers/teams.html:16 +msgid "Team name" +msgstr "" + +#: pretix/base/models/organizer.py:186 +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:13 +msgid "Team members" +msgstr "" + +#: pretix/base/models/organizer.py:192 +msgid "Can create events" +msgstr "" + +#: pretix/base/models/organizer.py:196 +msgid "Can change teams and permissions" +msgstr "" + +#: pretix/base/models/organizer.py:200 +msgid "Can change organizer settings" +msgstr "" + +#: pretix/base/models/organizer.py:201 +msgid "" +"Someone with this setting can get access to most data of all of your events, " +"i.e. via privacy reports, so be careful who you add to this team!" +msgstr "" + +#: pretix/base/models/organizer.py:206 +msgid "Can manage gift cards" +msgstr "" + +#: pretix/base/models/organizer.py:211 +msgid "Can change event settings" +msgstr "" + +#: pretix/base/models/organizer.py:215 +msgid "Can change product settings" +msgstr "" + +#: pretix/base/models/organizer.py:219 +msgid "Can view orders" +msgstr "" + +#: pretix/base/models/organizer.py:223 +msgid "Can change orders" +msgstr "" + +#: pretix/base/models/organizer.py:227 +msgid "Can perform check-ins" +msgstr "" + +#: pretix/base/models/organizer.py:228 +msgid "" +"This includes searching for attendees, which can be used to obtain personal " +"information about attendees. Users with \"can change orders\" can also " +"perform check-ins." +msgstr "" + +#: pretix/base/models/organizer.py:233 +msgid "Can view vouchers" +msgstr "" + +#: pretix/base/models/organizer.py:237 +msgid "Can change vouchers" +msgstr "" + +#: pretix/base/models/organizer.py:241 +#, python-format +msgid "%(name)s on %(object)s" +msgstr "" + +#: pretix/base/models/organizer.py:273 +#: pretix/control/templates/pretixcontrol/events/create_basics.html:61 +msgid "Team" +msgstr "" + +#: pretix/base/models/organizer.py:274 pretix/control/navigation.py:449 +#: pretix/control/templates/pretixcontrol/organizers/teams.html:5 +msgid "Teams" +msgstr "" + +#: pretix/base/models/organizer.py:294 +#, python-brace-format +msgid "Invite to team '{team}' for '{email}'" +msgstr "" + +#: pretix/base/models/seating.py:24 +msgid "Your layout file is not a valid JSON file." +msgstr "" + +#: pretix/base/models/seating.py:33 +msgid "Your layout file is not a valid seating plan. Error message: {}" +msgstr "" + +#: pretix/base/models/seating.py:154 +#, python-brace-format +msgid "Row {number}" +msgstr "" + +#: pretix/base/models/seating.py:159 +#, python-brace-format +msgid "Seat {number}" +msgstr "" + +#: pretix/base/models/tax.py:108 +msgid "Should be short, e.g. \"VAT\"" +msgstr "" + +#: pretix/base/models/tax.py:117 +msgid "The configured product prices include the tax amount" +msgstr "" + +#: pretix/base/models/tax.py:121 +msgid "Use EU reverse charge taxation rules" +msgstr "" + +#: pretix/base/models/tax.py:123 +msgid "" +"Not recommended. Most events will NOT be qualified for reverse charge since " +"the place of taxation is the location of the event. This option disables " +"charging VAT for all customers outside the EU and for business customers in " +"different EU countries who entered a valid EU VAT ID. Only enable this " +"option after consulting a tax counsel. No warranty given for correct tax " +"calculation. USE AT YOUR OWN RISK." +msgstr "" + +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +msgid "Merchant country" +msgstr "" + +#: pretix/base/models/tax.py:132 +msgid "" +"Your country of residence. This is the country the EU reverse charge rule " +"will not apply in, if configured above." +msgstr "" + +#: pretix/base/models/tax.py:165 +msgid "You need to set your home country to use the reverse charge feature." +msgstr "" + +#: pretix/base/models/tax.py:169 +#, python-brace-format +msgid "incl. {rate}% {name}" +msgstr "" + +#: pretix/base/models/tax.py:171 +#, python-brace-format +msgid "plus {rate}% {name}" +msgstr "" + +#: pretix/base/models/tax.py:173 +msgid "reverse charge enabled" +msgstr "" + +#: pretix/base/models/tax.py:282 +msgctxt "invoice" +msgid "" +"Reverse Charge: According to Article 194, 196 of Council Directive 2006/112/" +"EEC, VAT liability rests with the service recipient." +msgstr "" + +#: pretix/base/models/tax.py:288 +msgctxt "invoice" +msgid "VAT liability rests with the service recipient." +msgstr "" + +#: pretix/base/models/vouchers.py:85 +msgid "No effect" +msgstr "" + +#: pretix/base/models/vouchers.py:86 +msgid "Set product price to" +msgstr "" + +#: pretix/base/models/vouchers.py:87 +msgid "Subtract from product price" +msgstr "" + +#: pretix/base/models/vouchers.py:88 +msgid "Reduce product price by (%)" +msgstr "" + +#: pretix/base/models/vouchers.py:110 pretix/control/views/vouchers.py:73 +msgid "Maximum usages" +msgstr "" + +#: pretix/base/models/vouchers.py:111 +msgid "Number of times this voucher can be redeemed." +msgstr "" + +#: pretix/base/models/vouchers.py:115 pretix/control/views/vouchers.py:73 +msgid "Redeemed" +msgstr "" + +#: pretix/base/models/vouchers.py:119 +msgid "Maximum discount budget" +msgstr "" + +#: pretix/base/models/vouchers.py:120 +msgid "" +"This is the maximum monetary amount that will be discounted using this " +"voucher across all usages. If this is sum reached, the voucher can no longer " +"be used." +msgstr "" + +#: pretix/base/models/vouchers.py:127 pretix/control/views/vouchers.py:72 +msgid "Valid until" +msgstr "" + +#: pretix/base/models/vouchers.py:131 pretix/control/forms/filter.py:1366 +msgid "Reserve ticket from quota" +msgstr "" + +#: pretix/base/models/vouchers.py:133 +msgid "" +"If activated, this voucher will be substracted from the affected product's " +"quotas, such that it is guaranteed that anyone with this voucher code does " +"receive a ticket." +msgstr "" + +#: pretix/base/models/vouchers.py:139 +msgid "Allow to bypass quota" +msgstr "" + +#: pretix/base/models/vouchers.py:141 +msgid "" +"If activated, a holder of this voucher code can buy tickets, even if there " +"are none left." +msgstr "" + +#: pretix/base/models/vouchers.py:145 +msgid "Price mode" +msgstr "" + +#: pretix/base/models/vouchers.py:151 +msgid "Voucher value" +msgstr "" + +#: pretix/base/models/vouchers.py:160 pretix/control/forms/vouchers.py:31 +msgid "This product is added to the user's cart if the voucher is redeemed." +msgstr "" + +#: pretix/base/models/vouchers.py:170 +msgid "This variation of the product select above is being used." +msgstr "" + +#: pretix/base/models/vouchers.py:179 +msgid "" +"If enabled, the voucher is valid for any product affected by this quota." +msgstr "" + +#: pretix/base/models/vouchers.py:186 +msgid "Specific seat" +msgstr "" + +#: pretix/base/models/vouchers.py:190 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:115 +#: pretix/control/templates/pretixcontrol/vouchers/tags.html:42 +#: pretix/control/views/vouchers.py:73 +msgid "Tag" +msgstr "" + +#: pretix/base/models/vouchers.py:193 +msgid "" +"You can use this field to group multiple vouchers together. If you enter the " +"same value for multiple vouchers, you can get statistics on how many of them " +"have been redeemed etc." +msgstr "" + +#: pretix/base/models/vouchers.py:202 +msgid "Shows hidden products that match this voucher" +msgstr "" + +#: pretix/base/models/vouchers.py:210 pretix/control/navigation.py:236 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:6 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:8 +msgid "Vouchers" +msgstr "" + +#: pretix/base/models/vouchers.py:236 +msgid "You cannot select a quota that belongs to a different event." +msgstr "" + +#: pretix/base/models/vouchers.py:238 +msgid "You cannot select a quota and a specific product at the same time." +msgstr "" + +#: pretix/base/models/vouchers.py:241 +msgid "You cannot select an item that belongs to a different event." +msgstr "" + +#: pretix/base/models/vouchers.py:243 pretix/base/models/vouchers.py:256 +msgid "" +"You cannot select a variation without having selected a product that " +"provides variations." +msgstr "" + +#: pretix/base/models/vouchers.py:246 +msgid "This variation does not belong to this product." +msgstr "" + +#: pretix/base/models/vouchers.py:248 pretix/base/models/vouchers.py:339 +msgid "" +"You can only block quota if you specify a specific product variation. " +"Otherwise it might be unclear which quotas to block." +msgstr "" + +#: pretix/base/models/vouchers.py:251 +msgid "It is currently not possible to create vouchers for add-on products." +msgstr "" + +#: pretix/base/models/vouchers.py:253 pretix/base/models/vouchers.py:346 +msgid "" +"You need to select a specific product or quota if this voucher should " +"reserve tickets." +msgstr "" + +#: pretix/base/models/vouchers.py:263 +#, python-format +msgid "" +"This voucher has already been redeemed %(redeemed)s times. You cannot reduce " +"the maximum number of usages below this number." +msgstr "" + +#: pretix/base/models/vouchers.py:273 pretix/base/models/vouchers.py:331 +msgid "" +"If you want this voucher to block quota, you need to select a specific date." +msgstr "" + +#: pretix/base/models/vouchers.py:275 +msgid "You can not select a subevent if your event is not an event series." +msgstr "" + +#: pretix/base/models/vouchers.py:350 +msgid "" +"You cannot create a voucher that blocks quota as the selected product or " +"quota is currently sold out or completely reserved." +msgstr "" + +#: pretix/base/models/vouchers.py:356 +msgid "A voucher with this code already exists." +msgstr "" + +#: pretix/base/models/vouchers.py:363 +msgid "You need to choose a date if you select a seat." +msgstr "" + +#: pretix/base/models/vouchers.py:372 +#, python-brace-format +msgid "The specified seat ID \"{id}\" does not exist for this event." +msgstr "" + +#: pretix/base/models/vouchers.py:376 +#, python-brace-format +msgid "" +"The seat \"{id}\" is currently unavailable (blocked, already sold or a " +"different voucher)." +msgstr "" + +#: pretix/base/models/vouchers.py:381 +msgid "You need to choose a specific product if you select a seat." +msgstr "" + +#: pretix/base/models/vouchers.py:384 +msgid "Seat-specific vouchers can only be used once." +msgstr "" + +#: pretix/base/models/vouchers.py:387 +#, python-brace-format +msgid "You need to choose the product \"{prod}\" for this seat." +msgstr "" + +#: pretix/base/models/vouchers.py:390 +#, python-brace-format +msgid "The seat \"{id}\" is already sold or currently blocked." +msgstr "" + +#: pretix/base/models/waitinglist.py:40 +msgid "On waiting list since" +msgstr "" + +#: pretix/base/models/waitinglist.py:60 +msgid "Assigned voucher" +msgstr "" + +#: pretix/base/models/waitinglist.py:69 +msgid "The product the user waits for." +msgstr "" + +#: pretix/base/models/waitinglist.py:77 +msgid "The variation of the product selected above." +msgstr "" + +#: pretix/base/models/waitinglist.py:89 +msgid "Waiting list entry" +msgstr "" + +#: pretix/base/models/waitinglist.py:90 +msgid "Waiting list entries" +msgstr "" + +#: pretix/base/models/waitinglist.py:129 +msgid "This product is currently not available." +msgstr "" + +#: pretix/base/models/waitinglist.py:131 +msgid "A voucher has already been sent to this person." +msgstr "" + +#: pretix/base/models/waitinglist.py:133 +msgid "This entry is anonymized and can no longer be used." +msgstr "" + +#: pretix/base/models/waitinglist.py:143 +#, python-brace-format +msgid "Automatically created from waiting list entry for {email}" +msgstr "" + +#: pretix/base/models/waitinglist.py:167 +#, python-brace-format +msgid "You have been selected from the waitinglist for {event}" +msgstr "" + +#: pretix/base/models/waitinglist.py:177 +msgid "The selected item does not belong to this event." +msgstr "" + +#: pretix/base/models/waitinglist.py:179 +msgid "Please select a specific variation of this product." +msgstr "" + +#: pretix/base/models/waitinglist.py:197 +msgid "" +"You are already on this waiting list! We will notify you as soon as we have " +"a ticket available for you." +msgstr "" + +#: pretix/base/notifications.py:122 pretix/base/notifications.py:135 +msgid "Administrative action required" +msgstr "" + +#: pretix/base/notifications.py:136 +msgid "" +"Something happened in your event that our system cannot handle " +"automatically, e.g. an external refund. You need to resolve it manually or " +"choose to ignore it, depending on the issue at hand." +msgstr "" + +#: pretix/base/notifications.py:140 +msgid "View all unresolved problems" +msgstr "" + +#: pretix/base/notifications.py:183 pretix/control/navigation.py:116 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:20 +#: pretix/control/templates/pretixcontrol/subevents/index.html:5 +#: pretix/control/templates/pretixcontrol/subevents/index.html:7 +#: pretix/presale/templates/pretixpresale/event/index.html:131 +msgctxt "subevent" +msgid "Dates" +msgstr "" + +#: pretix/base/notifications.py:185 pretix/base/pdf.py:176 +#: pretix/plugins/badges/exporters.py:260 +#: pretix/plugins/ticketoutputpdf/exporters.py:60 +msgid "Event date" +msgstr "" + +#: pretix/base/notifications.py:191 +#: pretix/control/templates/pretixcontrol/order/index.html:552 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:261 +msgid "Net total" +msgstr "" + +#: pretix/base/notifications.py:193 +msgid "Pending amount" +msgstr "" + +#: pretix/base/notifications.py:195 pretix/control/forms/filter.py:146 +#: pretix/control/forms/orderimport.py:16 +msgid "Order status" +msgstr "" + +#: pretix/base/notifications.py:213 +msgid "Purchased products" +msgstr "" + +#: pretix/base/notifications.py:214 +#: pretix/base/templates/pretixbase/email/order_details.html:139 +msgid "View order details" +msgstr "" + +#: pretix/base/notifications.py:225 +#, python-brace-format +msgid "A new order has been placed: {order.code}" +msgstr "" + +#: pretix/base/notifications.py:231 +#, python-brace-format +msgid "A new order has been placed that requires approval: {order.code}" +msgstr "" + +#: pretix/base/notifications.py:237 +#, python-brace-format +msgid "Order {order.code} has been marked as paid." +msgstr "" + +#: pretix/base/notifications.py:243 +#, python-brace-format +msgid "Order {order.code} has been canceled." +msgstr "" + +#: pretix/base/notifications.py:249 +#, python-brace-format +msgid "Order {order.code} has been reactivated." +msgstr "" + +#: pretix/base/notifications.py:255 +#, python-brace-format +msgid "Order {order.code} has been marked as expired." +msgstr "" + +#: pretix/base/notifications.py:261 +#, python-brace-format +msgid "The ticket information of order {order.code} has been changed." +msgstr "" + +#: pretix/base/notifications.py:267 +#, python-brace-format +msgid "The contact address of order {order.code} has been changed." +msgstr "" + +#: pretix/base/notifications.py:273 +#, python-brace-format +msgid "Order {order.code} has been changed." +msgstr "" + +#: pretix/base/notifications.py:278 +msgid "Order has been overpaid" +msgstr "" + +#: pretix/base/notifications.py:279 +#, python-brace-format +msgid "Order {order.code} has been overpaid." +msgstr "" + +#: pretix/base/notifications.py:285 +#, python-brace-format +msgid "An external refund for {order.code} has occurred." +msgstr "" + +#: pretix/base/notifications.py:290 +msgid "Refund requested" +msgstr "" + +#: pretix/base/notifications.py:291 +#, python-brace-format +msgid "You have been requested to issue a refund for {order.code}." +msgstr "" + +#: pretix/base/orderimport.py:66 +msgid "Keep empty" +msgstr "" + +#: pretix/base/orderimport.py:93 +#, python-brace-format +msgid "Invalid setting for column \"{header}\"." +msgstr "" + +#: pretix/base/orderimport.py:153 pretix/presale/views/waiting.py:94 +msgctxt "subevent" +msgid "You need to select a date." +msgstr "" + +#: pretix/base/orderimport.py:160 +msgctxt "subevent" +msgid "No matching date was found." +msgstr "" + +#: pretix/base/orderimport.py:162 +msgctxt "subevent" +msgid "Multiple matching dates were found." +msgstr "" + +#: pretix/base/orderimport.py:196 +msgid "No matching product was found." +msgstr "" + +#: pretix/base/orderimport.py:198 +msgid "Multiple matching products were found." +msgstr "" + +#: pretix/base/orderimport.py:227 +msgid "No matching variation was found." +msgstr "" + +#: pretix/base/orderimport.py:229 +msgid "Multiple matching variations were found." +msgstr "" + +#: pretix/base/orderimport.py:232 +msgid "You need to select a variation for this product." +msgstr "" + +#: pretix/base/orderimport.py:244 pretix/base/orderimport.py:259 +#: pretix/base/orderimport.py:274 pretix/base/orderimport.py:285 +#: pretix/base/orderimport.py:296 pretix/base/orderimport.py:312 +#: pretix/base/orderimport.py:331 pretix/base/orderimport.py:356 +#: pretix/base/orderimport.py:367 pretix/control/forms/filter.py:517 +#: pretix/control/forms/filter.py:521 pretix/control/forms/filter.py:525 +#: pretix/control/forms/filter.py:529 pretix/control/forms/filter.py:534 +#: pretix/control/forms/filter.py:539 +msgid "Invoice address" +msgstr "" + +#: pretix/base/orderimport.py:319 pretix/base/orderimport.py:465 +msgid "Please enter a valid country code." +msgstr "" + +#: pretix/base/orderimport.py:336 pretix/base/orderimport.py:482 +msgid "States are not supported for this country." +msgstr "" + +#: pretix/base/orderimport.py:344 pretix/base/orderimport.py:490 +msgid "Please enter a valid state." +msgstr "" + +#: pretix/base/orderimport.py:393 pretix/control/forms/filter.py:548 +msgid "Attendee e-mail address" +msgstr "" + +#: pretix/base/orderimport.py:409 pretix/base/orderimport.py:420 +#: pretix/base/orderimport.py:431 pretix/base/orderimport.py:442 +#: pretix/base/orderimport.py:458 pretix/base/orderimport.py:477 +#: pretix/control/forms/filter.py:552 pretix/control/forms/filter.py:556 +#: pretix/control/forms/filter.py:560 pretix/control/forms/filter.py:565 +#: pretix/control/forms/filter.py:570 +#: pretix/control/templates/pretixcontrol/order/index.html:431 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:84 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:87 +msgid "Attendee address" +msgstr "" + +#: pretix/base/orderimport.py:477 +msgid "State" +msgstr "" + +#: pretix/base/orderimport.py:500 +msgid "Calculate from product" +msgstr "" + +#: pretix/base/orderimport.py:508 pretix/control/views/orders.py:797 +#: pretix/control/views/orders.py:821 pretix/control/views/orders.py:851 +#: pretix/control/views/orders.py:883 pretix/control/views/orders.py:906 +msgid "You entered an invalid number." +msgstr "" + +#: pretix/base/orderimport.py:526 +#: pretix/control/templates/pretixcontrol/checkin/index.html:81 +#: pretix/control/templates/pretixcontrol/order/index.html:371 +msgid "Ticket code" +msgstr "" + +#: pretix/base/orderimport.py:527 +msgid "Generate automatically" +msgstr "" + +#: pretix/base/orderimport.py:536 +msgid "You cannot assign a position secret that already exists." +msgstr "" + +#: pretix/base/orderimport.py:565 +msgid "Please enter a valid language code." +msgstr "" + +#: pretix/base/orderimport.py:585 +msgid "Please enter a valid sales channel." +msgstr "" + +#: pretix/base/orderimport.py:608 +msgid "No matching seat was found." +msgstr "" + +#: pretix/base/orderimport.py:611 pretix/base/services/cart.py:106 +msgid "" +"The seat you selected has already been taken. Please select a different seat." +msgstr "" + +#: pretix/base/orderimport.py:614 pretix/base/services/cart.py:103 +msgid "You need to select a specific seat." +msgstr "" + +#: pretix/base/orderimport.py:664 pretix/base/orderimport.py:672 +msgid "Ambiguous option selected." +msgstr "" + +#: pretix/base/payment.py:231 +msgid "Enable payment method" +msgstr "" + +#: pretix/base/payment.py:237 +msgid "" +"Users will not be able to choose this payment provider after the given date." +msgstr "" + +#: pretix/base/payment.py:242 +msgid "Text on invoices" +msgstr "" + +#: pretix/base/payment.py:243 +msgid "" +"Will be printed just below the payment figures and above the closing text on " +"invoices. This will only be used if the invoice is generated before the " +"order is paid. If the invoice is generated later, it will show a text " +"stating that it has already been paid." +msgstr "" + +#: pretix/base/payment.py:252 +msgid "Minimum order total" +msgstr "" + +#: pretix/base/payment.py:253 +msgid "" +"This payment will be available only if the order total is equal to or " +"exceeds the given value. The order total for this purpose may be computed " +"without taking the fees imposed by this payment method into account." +msgstr "" + +#: pretix/base/payment.py:263 +msgid "Maximum order total" +msgstr "" + +#: pretix/base/payment.py:264 +msgid "" +"This payment will be available only if the order total is equal to or below " +"the given value. The order total for this purpose may be computed without " +"taking the fees imposed by this payment method into account." +msgstr "" + +#: pretix/base/payment.py:274 pretix/base/payment.py:283 +msgid "Additional fee" +msgstr "" + +#: pretix/base/payment.py:275 +msgid "Absolute value" +msgstr "" + +#: pretix/base/payment.py:284 +msgid "Percentage of the order total." +msgstr "" + +#: pretix/base/payment.py:290 +msgid "Calculate the fee from the total value including the fee." +msgstr "" + +#: pretix/base/payment.py:291 +#, python-brace-format +msgid "" +"We recommend to enable this if you want your users to pay the payment fees " +"of your payment provider. Click here for detailed information on what this does. " +"Don't forget to set the correct fees above!" +msgstr "" + +#: pretix/base/payment.py:299 +msgid "Restrict to countries" +msgstr "" + +#: pretix/base/payment.py:301 +msgid "" +"Only allow choosing this payment provider for invoice addresses in the " +"selected countries. If you don't select any country, all countries are " +"allowed. This is only enabled if the invoice address is required." +msgstr "" + +#: pretix/base/payment.py:320 +msgid "" +"Only allow the usage of this payment provider in the selected sales channels." +msgstr "" + +#: pretix/base/payment.py:324 +msgid "Hide payment method" +msgstr "" + +#: pretix/base/payment.py:327 +msgid "" +"The payment method will not be shown by default but only to people who enter " +"the shop through a special link." +msgstr "" + +#: pretix/base/payment.py:333 +msgid "Link to enable payment method" +msgstr "" + +#: pretix/base/payment.py:342 +msgid "Share this link with customers who should use this payment method." +msgstr "" + +#: pretix/base/payment.py:375 +msgctxt "invoice" +msgid "The payment for this invoice has already been received." +msgstr "" + +#: pretix/base/payment.py:786 +msgid "Automatic refunds are not supported by this payment provider." +msgstr "" + +#: pretix/base/payment.py:857 +msgid "" +"No payment is required as this order only includes products which are free " +"of charge." +msgstr "" + +#: pretix/base/payment.py:864 +msgid "Free of charge" +msgstr "" + +#: pretix/base/payment.py:892 +msgid "Box office" +msgstr "" + +#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/plugins/manualpayment/apps.py:9 +#: pretix/plugins/manualpayment/apps.py:12 +msgid "Manual payment" +msgstr "" + +#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +msgid "" +"In test mode, you can just manually mark this order as paid in the backend " +"after it has been created." +msgstr "" + +#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +msgid "Payment method name" +msgstr "" + +#: pretix/base/payment.py:964 +msgid "Payment process description during checkout" +msgstr "" + +#: pretix/base/payment.py:965 +msgid "" +"This text will be shown during checkout when the user selects this payment " +"method. It should give a short explanation on this payment method." +msgstr "" + +#: pretix/base/payment.py:970 +msgid "Payment process description in order confirmation emails" +msgstr "" + +#: pretix/base/payment.py:971 +#, python-brace-format +msgid "" +"This text will be included for the {payment_info} placeholder in order " +"confirmation mails. It should instruct the user on how to proceed with the " +"payment. You can use the placeholders {order}, {amount}, {currency} and " +"{amount_with_currency}." +msgstr "" + +#: pretix/base/payment.py:978 +msgid "Payment process description for pending orders" +msgstr "" + +#: pretix/base/payment.py:979 +#, python-brace-format +msgid "" +"This text will be shown on the order confirmation page for pending orders. " +"It should instruct the user on how to proceed with the payment. You can use " +"the placeholders {order}, {amount}, {currency} and {amount_with_currency}." +msgstr "" + +#: pretix/base/payment.py:1028 +msgid "Offsetting" +msgstr "" + +#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +msgid "You entered an order that could not be found." +msgstr "" + +#: pretix/base/payment.py:1071 +#, python-format +msgid "Balanced against orders: %s" +msgstr "" + +#: pretix/base/payment.py:1092 +msgid "In test mode, only test cards will work." +msgstr "" + +#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 +#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +msgid "You cannot pay with gift cards when buying a gift card." +msgstr "" + +#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 +#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +msgid "This gift card does not support this currency." +msgstr "" + +#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/services/orders.py:766 +msgid "This gift card can only be used in test mode." +msgstr "" + +#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/services/orders.py:768 +msgid "Only test gift cards can be used in test mode." +msgstr "" + +#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 +#: pretix/base/payment.py:1278 +msgid "This gift card is no longer valid." +msgstr "" + +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +msgid "All credit on this gift card has been used." +msgstr "" + +#: pretix/base/payment.py:1183 +msgid "This gift card is already used for your payment." +msgstr "" + +#: pretix/base/payment.py:1198 +msgid "" +"Your gift card has been applied, but {} still need to be paid. Please select " +"a payment method." +msgstr "" + +#: pretix/base/payment.py:1202 +msgid "Your gift card has been applied." +msgstr "" + +#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +msgid "" +"You entered a voucher instead of a gift card. Vouchers can only be entered " +"on the first page of the shop below the product selection." +msgstr "" + +#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +msgid "This gift card is not known." +msgstr "" + +#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +msgid "" +"This gift card can not be redeemed since its code is not unique. Please " +"contact the organizer of this event." +msgstr "" + +#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +msgid "This gift card is not accepted by this event organizer." +msgstr "" + +#: pretix/base/payment.py:1276 +msgid "This gift card was used in the meantime. Please try again." +msgstr "" + +#: pretix/base/pdf.py:51 +msgid "Ticket code (barcode content)" +msgstr "" + +#: pretix/base/pdf.py:63 +msgid "Order position number" +msgstr "" + +#: pretix/base/pdf.py:69 pretix/base/services/tickets.py:79 +#: pretix/control/views/event.py:694 pretix/control/views/pdf.py:64 +msgid "Sample product" +msgstr "" + +#: pretix/base/pdf.py:73 +msgid "Variation name" +msgstr "" + +#: pretix/base/pdf.py:74 +msgid "Sample variation" +msgstr "" + +#: pretix/base/pdf.py:78 +msgid "Product description" +msgstr "" + +#: pretix/base/pdf.py:79 pretix/base/services/tickets.py:80 +#: pretix/control/views/event.py:695 pretix/control/views/pdf.py:65 +msgid "Sample product description" +msgstr "" + +#: pretix/base/pdf.py:83 +msgid "Product name and variation" +msgstr "" + +#: pretix/base/pdf.py:84 +msgid "Sample product – sample variation" +msgstr "" + +#: pretix/base/pdf.py:91 +msgid "Product variation description" +msgstr "" + +#: pretix/base/pdf.py:92 +msgid "Sample product variation description" +msgstr "" + +#: pretix/base/pdf.py:99 +msgid "Ticket category" +msgstr "" + +#: pretix/base/pdf.py:106 pretix/base/pdf.py:111 +msgid "123.45 EUR" +msgstr "" + +#: pretix/base/pdf.py:110 +msgid "Price including add-ons" +msgstr "" + +#: pretix/base/pdf.py:124 +#: pretix/control/templates/pretixcontrol/order/index.html:423 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:73 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:76 +msgid "Attendee company" +msgstr "" + +#: pretix/base/pdf.py:125 pretix/base/pdf.py:268 +#: pretix/base/services/tickets.py:96 pretix/control/views/pdf.py:80 +msgid "Sample company" +msgstr "" + +#: pretix/base/pdf.py:129 +msgid "Full attendee address" +msgstr "" + +#: pretix/base/pdf.py:130 +msgid "" +"John Doe\n" +"Sample company\n" +"Sesame Street 42\n" +"12345 Any City\n" +"Atlantis" +msgstr "" + +#: pretix/base/pdf.py:134 +msgid "Attendee street" +msgstr "" + +#: pretix/base/pdf.py:139 +msgid "Attendee ZIP code" +msgstr "" + +#: pretix/base/pdf.py:144 +msgid "Attendee city" +msgstr "" + +#: pretix/base/pdf.py:149 +msgid "Attendee state" +msgstr "" + +#: pretix/base/pdf.py:154 +msgid "Attendee country" +msgstr "" + +#: pretix/base/pdf.py:167 pretix/base/pdf.py:172 +msgid "Sample event name" +msgstr "" + +#: pretix/base/pdf.py:177 +msgid "May 31st, 2017" +msgstr "" + +#: pretix/base/pdf.py:181 +msgid "Event date range" +msgstr "" + +#: pretix/base/pdf.py:182 +msgid "May 31st – June 4th, 2017" +msgstr "" + +#: pretix/base/pdf.py:186 +msgid "Event begin date and time" +msgstr "" + +#: pretix/base/pdf.py:187 +msgid "2017-05-31 20:00" +msgstr "" + +#: pretix/base/pdf.py:194 +msgid "Event begin date" +msgstr "" + +#: pretix/base/pdf.py:195 pretix/base/pdf.py:216 pretix/base/pdf.py:325 +msgid "2017-05-31" +msgstr "" + +#: pretix/base/pdf.py:202 +msgid "Event begin time" +msgstr "" + +#: pretix/base/pdf.py:203 +msgid "20:00" +msgstr "" + +#: pretix/base/pdf.py:207 +msgid "Event end date and time" +msgstr "" + +#: pretix/base/pdf.py:208 +msgid "2017-05-31 22:00" +msgstr "" + +#: pretix/base/pdf.py:215 +msgid "Event end date" +msgstr "" + +#: pretix/base/pdf.py:224 +msgid "22:00" +msgstr "" + +#: pretix/base/pdf.py:231 +msgid "Event admission date and time" +msgstr "" + +#: pretix/base/pdf.py:232 pretix/base/pdf.py:333 +msgid "2017-05-31 19:00" +msgstr "" + +#: pretix/base/pdf.py:239 +msgid "Event admission time" +msgstr "" + +#: pretix/base/pdf.py:240 pretix/base/pdf.py:341 +msgid "19:00" +msgstr "" + +#: pretix/base/pdf.py:247 +msgid "Event location" +msgstr "" + +#: pretix/base/pdf.py:248 pretix/base/settings.py:711 +msgid "Random City" +msgstr "" + +#: pretix/base/pdf.py:267 +msgid "Invoice address company" +msgstr "" + +#: pretix/base/pdf.py:272 +msgid "Invoice address street" +msgstr "" + +#: pretix/base/pdf.py:273 +msgid "Sesame Street 42" +msgstr "" + +#: pretix/base/pdf.py:277 +msgid "Invoice address ZIP code" +msgstr "" + +#: pretix/base/pdf.py:278 +msgid "12345" +msgstr "" + +#: pretix/base/pdf.py:282 +msgid "Invoice address city" +msgstr "" + +#: pretix/base/pdf.py:283 pretix/base/services/invoices.py:368 +msgid "Sample city" +msgstr "" + +#: pretix/base/pdf.py:287 +msgid "Invoice address state" +msgstr "" + +#: pretix/base/pdf.py:288 +msgid "Sample State" +msgstr "" + +#: pretix/base/pdf.py:292 +msgid "Invoice address country" +msgstr "" + +#: pretix/base/pdf.py:293 +msgid "Atlantis" +msgstr "" + +#: pretix/base/pdf.py:297 +msgid "List of Add-Ons" +msgstr "" + +#: pretix/base/pdf.py:298 +msgid "" +"Add-on 1\n" +"Add-on 2" +msgstr "" + +#: pretix/base/pdf.py:309 pretix/control/forms/filter.py:892 +#: pretix/control/forms/filter.py:894 +#: pretix/control/templates/pretixcontrol/organizers/index.html:35 +msgid "Organizer name" +msgstr "" + +#: pretix/base/pdf.py:310 +msgid "Event organizer company" +msgstr "" + +#: pretix/base/pdf.py:314 +msgid "Organizer info text" +msgstr "" + +#: pretix/base/pdf.py:315 +msgid "Event organizer info text" +msgstr "" + +#: pretix/base/pdf.py:319 pretix/base/pdf.py:320 +msgid "Event info text" +msgstr "" + +#: pretix/base/pdf.py:324 +msgid "Printing date" +msgstr "" + +#: pretix/base/pdf.py:332 +msgid "Printing date and time" +msgstr "" + +#: pretix/base/pdf.py:340 +msgid "Printing time" +msgstr "" + +#: pretix/base/pdf.py:348 +msgid "Seat: Full name" +msgstr "" + +#: pretix/base/pdf.py:349 +msgid "Ground floor, Row 3, Seat 4" +msgstr "" + +#: pretix/base/pdf.py:351 pretix/base/pdf.py:357 +#: pretix/control/forms/orders.py:255 +msgid "General admission" +msgstr "" + +#: pretix/base/pdf.py:354 +msgid "Seat: zone" +msgstr "" + +#: pretix/base/pdf.py:355 +msgid "Ground floor" +msgstr "" + +#: pretix/base/pdf.py:360 +msgid "Seat: row" +msgstr "" + +#: pretix/base/pdf.py:365 +msgid "Seat: seat number" +msgstr "" + +#: pretix/base/pdf.py:406 pretix/base/pdf.py:444 +#, python-brace-format +msgid "Question: {question}" +msgstr "" + +#: pretix/base/pdf.py:445 +#, python-brace-format +msgid "" +msgstr "" + +#: pretix/base/pdf.py:476 pretix/base/pdf.py:483 +#: pretix/plugins/badges/exporters.py:262 +#: pretix/plugins/checkinlists/exporters.py:78 +#: pretix/plugins/checkinlists/exporters.py:404 +#: pretix/plugins/ticketoutputpdf/exporters.py:62 +#, python-brace-format +msgid "Attendee name: {part}" +msgstr "" + +#: pretix/base/pdf.py:493 +#, python-brace-format +msgid "Invoice address name: {part}" +msgstr "" + +#: pretix/base/pdf.py:708 pretix/plugins/ticketoutputpdf/ticketoutput.py:78 +msgid "Ticket" +msgstr "" + +#: pretix/base/reldate.py:14 +msgid "Event start" +msgstr "" + +#: pretix/base/reldate.py:15 +msgid "Event end" +msgstr "" + +#: pretix/base/reldate.py:16 +msgid "Event admission" +msgstr "" + +#: pretix/base/reldate.py:17 +msgid "Presale start" +msgstr "" + +#: pretix/base/reldate.py:18 +msgid "Presale end" +msgstr "" + +#: pretix/base/reldate.py:187 pretix/base/reldate.py:295 +msgid "Fixed date:" +msgstr "" + +#: pretix/base/reldate.py:188 pretix/base/reldate.py:296 +msgid "Relative date:" +msgstr "" + +#: pretix/base/reldate.py:189 +msgid "Relative time:" +msgstr "" + +#: pretix/base/reldate.py:197 pretix/base/reldate.py:299 +msgid "Not set" +msgstr "" + +#: pretix/base/secrets.py:84 +msgid "Random (default, works with all pretix apps)" +msgstr "" + +#: pretix/base/secrets.py:114 +msgid "" +"pretix signature scheme 1 (for very large events, does not work with " +"pretixSCAN on iOS and changes semantics of offline scanning – please refer " +"to documentation or support for details)" +msgstr "" + +#: pretix/base/services/cancelevent.py:200 +#: pretix/base/services/cancelevent.py:258 +msgid "Event canceled" +msgstr "" + +#: pretix/base/services/cart.py:52 pretix/base/services/orders.py:73 +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:54 pretix/presale/views/cart.py:196 +msgid "You did not select any products." +msgstr "" + +#: pretix/base/services/cart.py:55 +msgid "Unknown cart position." +msgstr "" + +#: pretix/base/services/cart.py:56 +msgctxt "subevent" +msgid "No date was specified." +msgstr "" + +#: pretix/base/services/cart.py:57 +msgid "You selected a product which is not available for sale." +msgstr "" + +#: pretix/base/services/cart.py:58 +msgid "" +"Some of the products you selected are no longer available. Please see below " +"for details." +msgstr "" + +#: pretix/base/services/cart.py:60 +msgid "" +"Some of the products you selected are no longer available in the quantity " +"you selected. Please see below for details." +msgstr "" + +#: pretix/base/services/cart.py:62 +#, python-format +msgid "You cannot select more than %s items per order." +msgstr "" + +#: pretix/base/services/cart.py:63 +#, python-format +msgid "You cannot select more than %(max)s items of the product %(product)s." +msgstr "" + +#: pretix/base/services/cart.py:64 +#, python-format +msgid "You need to select at least %(min)s items of the product %(product)s." +msgstr "" + +#: pretix/base/services/cart.py:65 +#, python-format +msgid "" +"We removed %(product)s from your cart as you can not buy less than %(min)s " +"items of it." +msgstr "" + +#: pretix/base/services/cart.py:67 pretix/base/services/orders.py:75 +msgid "The presale period for this event has not yet started." +msgstr "" + +#: pretix/base/services/cart.py:68 +msgid "The presale period for this event has ended." +msgstr "" + +#: pretix/base/services/cart.py:69 +msgid "" +"All payments for this event need to be confirmed already, so no new orders " +"can be created." +msgstr "" + +#: pretix/base/services/cart.py:70 +msgid "" +"The presale period for this event has not yet started. The affected " +"positions have been removed from your cart." +msgstr "" + +#: pretix/base/services/cart.py:72 pretix/base/services/orders.py:90 +msgid "" +"The presale period for one of the events in your cart has ended. The " +"affected positions have been removed from your cart." +msgstr "" + +#: pretix/base/services/cart.py:74 +msgid "The entered price is to high." +msgstr "" + +#: pretix/base/services/cart.py:75 +msgid "This voucher code is not known in our database." +msgstr "" + +#: pretix/base/services/cart.py:76 +msgid "" +"This voucher code has already been used the maximum number of times allowed." +msgstr "" + +#: pretix/base/services/cart.py:77 +#, python-format +msgid "" +"This voucher code is currently locked since it is already contained in a " +"cart. This might mean that someone else is redeeming this voucher right now, " +"or that you tried to redeem it before but did not complete the checkout " +"process. You can try to use it again in %d minutes." +msgstr "" + +#: pretix/base/services/cart.py:81 +#, python-format +msgid "This voucher code can only be redeemed %d more times." +msgstr "" + +#: pretix/base/services/cart.py:82 +msgid "" +"You already used this voucher code. Remove the associated line from your " +"cart if you want to use it for a different product." +msgstr "" + +#: pretix/base/services/cart.py:84 +msgid "This voucher is expired." +msgstr "" + +#: pretix/base/services/cart.py:85 +msgid "This voucher is not valid for this product." +msgstr "" + +#: pretix/base/services/cart.py:86 +msgid "This voucher is not valid for this seat." +msgstr "" + +#: pretix/base/services/cart.py:87 +msgid "" +"We did not find any position in your cart that we could use this voucher " +"for. If you want to add something new to your cart using that voucher, you " +"can do so with the voucher redemption option on the bottom of the page." +msgstr "" + +#: pretix/base/services/cart.py:91 +msgid "Your voucher is valid for a product that is currently not for sale." +msgstr "" + +#: pretix/base/services/cart.py:92 +msgctxt "subevent" +msgid "This voucher is not valid for this event date." +msgstr "" + +#: pretix/base/services/cart.py:93 +msgid "You need a valid voucher code to order this product." +msgstr "" + +#: pretix/base/services/cart.py:94 +msgctxt "subevent" +msgid "The selected event date is not active." +msgstr "" + +#: pretix/base/services/cart.py:95 +msgid "You can not select an add-on for the selected product." +msgstr "" + +#: pretix/base/services/cart.py:96 +msgid "You can not select two variations of the same add-on product." +msgstr "" + +#: pretix/base/services/cart.py:97 +#, python-format +msgid "" +"You can select at most %(max)s add-ons from the category %(cat)s for the " +"product %(base)s." +msgstr "" + +#: pretix/base/services/cart.py:98 +#, python-format +msgid "" +"You need to select at least %(min)s add-ons from the category %(cat)s for " +"the product %(base)s." +msgstr "" + +#: pretix/base/services/cart.py:100 +#, python-format +msgid "" +"You can select every add-ons from the category %(cat)s for the product " +"%(base)s at most once." +msgstr "" + +#: pretix/base/services/cart.py:101 +msgid "" +"One of the products you selected can only be bought as an add-on to another " +"project." +msgstr "" + +#: pretix/base/services/cart.py:102 +msgid "One of the products you selected can only be bought part of a bundle." +msgstr "" + +#: pretix/base/services/cart.py:104 +msgid "Please select a valid seat." +msgstr "" + +#: pretix/base/services/cart.py:105 +msgid "You can not select a seat for this position." +msgstr "" + +#: pretix/base/services/cart.py:107 +msgid "You can not select the same seat multiple times." +msgstr "" + +#: pretix/base/services/cart.py:108 +msgid "" +"You entered a gift card instead of a voucher. Gift cards can be entered " +"later on when you're asked for your payment details." +msgstr "" + +#: pretix/base/services/checkin.py:364 +msgid "This order position has been canceled." +msgstr "" + +#: pretix/base/services/checkin.py:387 +msgid "This order position has an invalid product for this check-in list." +msgstr "" + +#: pretix/base/services/checkin.py:392 +msgid "This order position has an invalid date for this check-in list." +msgstr "" + +#: pretix/base/services/checkin.py:399 +msgid "This order is not marked as paid." +msgstr "" + +#: pretix/base/services/checkin.py:404 +msgid "You need to answer questions to complete this check-in." +msgstr "" + +#: pretix/base/services/checkin.py:414 +msgid "This entry is not permitted due to custom rules." +msgstr "" + +#: pretix/base/services/checkin.py:456 +msgid "This ticket has already been redeemed." +msgstr "" + +#: pretix/base/services/export.py:43 pretix/base/services/export.py:96 +msgid "Your export did not contain any data." +msgstr "" + +#: pretix/base/services/invoices.py:68 +#, python-brace-format +msgctxt "invoice" +msgid "Please complete your payment before {expire_date}." +msgstr "" + +#: pretix/base/services/invoices.py:79 +#, python-brace-format +msgctxt "invoice" +msgid "" +"{i.company}\n" +"{i.name}\n" +"{i.street}\n" +"{i.zipcode} {i.city} {state}\n" +"{country}" +msgstr "" + +#: pretix/base/services/invoices.py:157 +#, python-brace-format +msgctxt "invoice" +msgid "Attendee: {name}" +msgstr "" + +#: pretix/base/services/invoices.py:172 pretix/plugins/reports/exporters.py:248 +msgctxt "subevent" +msgid "Date: {}" +msgstr "" + +#: pretix/base/services/invoices.py:359 +msgid "A payment provider specific text might appear here." +msgstr "" + +#: pretix/base/services/invoices.py:366 +msgid "214th Example Street" +msgstr "" + +#: pretix/base/services/invoices.py:367 +msgid "012345" +msgstr "" + +#: pretix/base/services/invoices.py:383 +msgid "Sample product {}" +msgstr "" + +#: pretix/base/services/invoices.py:389 +msgid "Sample product A" +msgstr "" + +#: pretix/base/services/mail.py:177 +#, python-brace-format +msgid "" +"You are receiving this email because someone placed an order for {event} for " +"you." +msgstr "" + +#: pretix/base/services/mail.py:181 pretix/base/services/mail.py:197 +#, python-brace-format +msgid "" +"You can view your order details at the following URL:\n" +"{orderurl}." +msgstr "" + +#: pretix/base/services/mail.py:193 +#, python-brace-format +msgid "You are receiving this email because you placed an order for {event}." +msgstr "" + +#: pretix/base/services/orderimport.py:85 +#, python-brace-format +msgid "" +"Error while importing value \"{value}\" for column \"{column}\" in line " +"\"{line}\": {message}" +msgstr "" + +#: pretix/base/services/orderimport.py:117 +#, python-brace-format +msgid "Invalid data in row {row}: {message}" +msgstr "" + +#: pretix/base/services/orders.py:63 +msgid "" +"Some of the products you selected were no longer available. Please see below " +"for details." +msgstr "" + +#: pretix/base/services/orders.py:65 +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:67 +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:69 +msgid "An internal error occurred, please try again." +msgstr "" + +#: pretix/base/services/orders.py:70 +msgid "Your cart is empty." +msgstr "" + +#: pretix/base/services/orders.py:71 +#, python-format +msgid "" +"You cannot select more than %(max)s items of the product %(product)s. We " +"removed the surplus items from your cart." +msgstr "" + +#: pretix/base/services/orders.py:76 +msgid "The presale period has ended." +msgstr "" + +#: pretix/base/services/orders.py:77 +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:78 +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:80 +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:82 +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:84 +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:86 +msgid "" +"You need a valid voucher code to order one of the products in your cart. We " +"removed this item from your cart." +msgstr "" + +#: pretix/base/services/orders.py:88 +msgid "" +"The presale 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:92 +msgid "" +"One of the seats in your order was invalid, we removed the position from " +"your cart." +msgstr "" + +#: pretix/base/services/orders.py:93 +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:159 pretix/control/forms/orders.py:70 +msgid "The new expiry date needs to be in the future." +msgstr "" + +#: pretix/base/services/orders.py:234 pretix/base/services/orders.py:294 +msgid "This order is not pending approval." +msgstr "" + +#: pretix/base/services/orders.py:268 +#, python-format +msgid "Order approved and confirmed: %(code)s" +msgstr "" + +#: pretix/base/services/orders.py:271 +#, python-format +msgid "Order approved and awaiting payment: %(code)s" +msgstr "" + +#: pretix/base/services/orders.py:317 +#, python-format +msgid "Order denied: %(code)s" +msgstr "" + +#: pretix/base/services/orders.py:352 pretix/presale/views/order.py:780 +#: pretix/presale/views/order.py:829 +msgid "You cannot cancel this order." +msgstr "" + +#: pretix/base/services/orders.py:364 +#, 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:401 pretix/control/forms/orders.py:152 +msgid "" +"The cancellation fee cannot be higher than the payment credit of this order." +msgstr "" + +#: pretix/base/services/orders.py:430 +#, python-format +msgid "Order canceled: %(code)s" +msgstr "" + +#: pretix/base/services/orders.py:834 +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:1046 +#, python-format +msgid "Your order is about to expire: %(code)s" +msgstr "" + +#: pretix/base/services/orders.py:1048 +#, python-format +msgid "Your order is pending payment: %(code)s" +msgstr "" + +#: pretix/base/services/orders.py:1122 +#, python-format +msgid "Your ticket is ready for download: %(code)s" +msgstr "" + +#: pretix/base/services/orders.py:1160 +#, python-format +msgid "Your order has been changed: %(code)s" +msgstr "" + +#: pretix/base/services/orders.py:1172 +msgid "You need to select a variation of the product." +msgstr "" + +#: pretix/base/services/orders.py:1173 +#, python-brace-format +msgid "" +"The quota {name} does not have enough capacity left to perform the operation." +msgstr "" + +#: pretix/base/services/orders.py:1174 +msgid "There is no quota defined that allows this operation." +msgstr "" + +#: pretix/base/services/orders.py:1175 +msgid "The selected product is not active or has no price set." +msgstr "" + +#: pretix/base/services/orders.py:1176 +msgid "" +"This operation would leave the order empty. Please cancel the order itself " +"instead." +msgstr "" + +#: pretix/base/services/orders.py:1177 +msgid "Only pending or paid orders can be changed." +msgstr "" + +#: pretix/base/services/orders.py:1178 +msgid "" +"This operation would make the order free and therefore immediately paid, " +"however no quota is available." +msgstr "" + +#: pretix/base/services/orders.py:1180 +msgid "" +"This is an add-on product, please select the base position it should be " +"added to." +msgstr "" + +#: pretix/base/services/orders.py:1181 +msgid "" +"The selected base position does not allow you to add this product as an add-" +"on." +msgstr "" + +#: pretix/base/services/orders.py:1182 +msgid "You need to choose a subevent for the new position." +msgstr "" + +#: pretix/base/services/orders.py:1184 +#, 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:1185 +msgid "The selected product requires you to select a seat." +msgstr "" + +#: pretix/base/services/orders.py:1186 +msgid "The selected product does not allow to select a seat." +msgstr "" + +#: pretix/base/services/orders.py:1187 +msgid "The selected country is blocked by your tax rule." +msgstr "" + +#: pretix/base/services/orders.py:1188 +msgid "" +"You cannot change the price of a position that has been used to issue a gift " +"card." +msgstr "" + +#: pretix/base/services/orders.py:1697 +#, 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:2148 +msgid "" +"There was an error while trying to send the money back to you. Please " +"contact the event organizer for further information." +msgstr "" + +#: pretix/base/services/seating.py:35 pretix/base/services/seating.py:96 +#, python-format +msgid "" +"You can not change the plan since seat \"%s\" is not present in the new plan " +"and is already sold." +msgstr "" + +#: pretix/base/services/seating.py:99 +#, python-format +msgid "" +"You can not change the plan since seat \"%s\" is not present in the new plan " +"and is already used in a voucher." +msgstr "" + +#: pretix/base/services/shredder.py:73 pretix/control/views/shredder.py:51 +msgid "" +"The download file could no longer be found on the server, please try to " +"start again." +msgstr "" + +#: pretix/base/services/shredder.py:77 pretix/control/views/shredder.py:57 +msgid "This file is from a different event." +msgstr "" + +#: pretix/base/services/shredder.py:86 +msgid "The confirm code you entered was incorrect." +msgstr "" + +#: pretix/base/services/shredder.py:88 +msgid "Something happened in your event after the export, please try again." +msgstr "" + +#: pretix/base/services/stats.py:173 +msgid "Uncategorized" +msgstr "" + +#: pretix/base/services/tickets.py:81 pretix/control/views/pdf.py:66 +msgid "Sample workshop" +msgstr "" + +#: pretix/base/services/update_check.py:92 +msgid "pretix update available" +msgstr "" + +#: pretix/base/services/update_check.py:95 +#, python-brace-format +msgid "" +"Hi!\n" +"\n" +"An update is available for pretix or for one of the plugins you installed in " +"your pretix installation. Please click on the following link for more " +"information:\n" +"\n" +" {url} \n" +"\n" +"You can always find information on the latest updates on the pretix.eu " +"blog:\n" +"\n" +"https://pretix.eu/about/en/blog/\n" +"\n" +"Best,\n" +"\n" +"your pretix developers" +msgstr "" + +#: pretix/base/services/update_check.py:124 +#: pretix/base/services/update_check.py:126 +#, python-format +msgid "Plugin: %s" +msgstr "" + +#: pretix/base/services/vouchers.py:35 pretix/control/logdisplay.py:371 +#, python-brace-format +msgid "The voucher has been sent to {recipient}." +msgstr "" + +#: pretix/base/settings.py:82 +msgid "Maximum number of items per order" +msgstr "" + +#: pretix/base/settings.py:83 +msgid "Add-on products will not be counted." +msgstr "" + +#: pretix/base/settings.py:92 +msgid "" +"Show net prices instead of gross prices in the product list (not " +"recommended!)" +msgstr "" + +#: pretix/base/settings.py:93 +msgid "" +"Independent of your choice, the cart will show gross prices as this is the " +"price that needs to be paid." +msgstr "" + +#: pretix/base/settings.py:108 +msgid "Ask for attendee names" +msgstr "" + +#: pretix/base/settings.py:109 +msgid "Ask for a name for all tickets which include admission to the event." +msgstr "" + +#: pretix/base/settings.py:118 +msgid "Require attendee names" +msgstr "" + +#: pretix/base/settings.py:119 +msgid "Require customers to fill in the names of all attendees." +msgstr "" + +#: pretix/base/settings.py:129 +msgid "Ask for email addresses per ticket" +msgstr "" + +#: pretix/base/settings.py:130 +msgid "" +"Normally, eventyay asks for one email address per order and the order " +"confirmation will be sent only to that email address. If you enable this " +"option, the system will additionally ask for individual email addresses for " +"every admission ticket. This might be useful if you want to obtain " +"individual addresses for every attendee even in case of group orders. " +"However, eventyay will send the order confirmation by default only to the " +"primary email address, not to the per-attendee addresses. You can however " +"enable this in the E-mail settings." +msgstr "" + +#: pretix/base/settings.py:144 +msgid "Require email addresses per ticket" +msgstr "" + +#: pretix/base/settings.py:145 +msgid "" +"Require customers to fill in individual e-mail addresses for all admission " +"tickets. See the above option for more details. One email address for the " +"order confirmation will always be required regardless of this setting." +msgstr "" + +#: pretix/base/settings.py:157 +msgid "Ask for company per ticket" +msgstr "" + +#: pretix/base/settings.py:166 +msgid "Require company per ticket" +msgstr "" + +#: pretix/base/settings.py:176 +msgid "Ask for postal addresses per ticket" +msgstr "" + +#: pretix/base/settings.py:185 +msgid "Require postal addresses per ticket" +msgstr "" + +#: pretix/base/settings.py:195 +msgid "Ask for the order email address twice" +msgstr "" + +#: pretix/base/settings.py:196 +msgid "" +"Require customers to fill in the primary email address twice to avoid errors." +msgstr "" + +#: pretix/base/settings.py:205 +msgid "Ask for a phone number per order" +msgstr "" + +#: pretix/base/settings.py:214 +msgid "Require a phone number per order" +msgstr "" + +#: pretix/base/settings.py:224 +msgid "Ask for invoice address" +msgstr "" + +#: pretix/base/settings.py:233 +msgid "Do not ask for invoice address if an order is free" +msgstr "" + +#: pretix/base/settings.py:242 +msgid "Require customer name" +msgstr "" + +#: pretix/base/settings.py:251 +msgid "Show attendee names on invoices" +msgstr "" + +#: pretix/base/settings.py:260 +msgid "" +"On invoices from one EU country into another EU country with a different " +"currency, print the tax amounts in both currencies if possible" +msgstr "" + +#: pretix/base/settings.py:270 +msgid "Require invoice address" +msgstr "" + +#: pretix/base/settings.py:280 +msgid "Require a business addresses" +msgstr "" + +#: pretix/base/settings.py:281 +msgid "This will require users to enter a company name." +msgstr "" + +#: pretix/base/settings.py:291 +msgid "Ask for beneficiary" +msgstr "" + +#: pretix/base/settings.py:303 +msgid "" +"If you want to add a custom text field, e.g. for a country-specific " +"registration number, to your invoice address form, please fill in the label " +"here. This label will both be used for asking the user to input their " +"details as well as for displaying the value on the invoice. The field will " +"not be required." +msgstr "" + +#: pretix/base/settings.py:315 +msgid "Ask for VAT ID" +msgstr "" + +#: pretix/base/settings.py:316 +msgid "" +"Does only work if an invoice address is asked for. VAT ID is not required." +msgstr "" + +#: pretix/base/settings.py:326 +msgid "Invoice address explanation" +msgstr "" + +#: pretix/base/settings.py:329 +msgid "This text will be shown above the invoice address form during checkout." +msgstr "" + +#: pretix/base/settings.py:338 +msgid "Show paid amount on partially paid invoices" +msgstr "" + +#: pretix/base/settings.py:339 +msgid "" +"If an invoice has already been paid partially, this option will add the paid " +"and pending amount to the invoice." +msgstr "" + +#: pretix/base/settings.py:349 +msgid "Show free products on invoices" +msgstr "" + +#: pretix/base/settings.py:350 +msgid "" +"Note that invoices will never be generated for orders that contain only free " +"products." +msgstr "" + +#: pretix/base/settings.py:360 +msgid "Show expiration date of order" +msgstr "" + +#: pretix/base/settings.py:361 +msgid "" +"The expiration date will not be shown if the invoice is generated after the " +"order is paid." +msgstr "" + +#: pretix/base/settings.py:370 +msgid "Minimum length of invoice number after prefix" +msgstr "" + +#: pretix/base/settings.py:371 +msgid "" +"The part of your invoice number after your prefix will be filled up with " +"leading zeros up to this length, e.g. INV-001 or INV-00001." +msgstr "" + +#: pretix/base/settings.py:380 +msgid "Generate invoices with consecutive numbers" +msgstr "" + +#: pretix/base/settings.py:381 +msgid "If deactivated, the order code will be used in the invoice number." +msgstr "" + +#: pretix/base/settings.py:390 +msgid "Invoice number prefix" +msgstr "" + +#: pretix/base/settings.py:391 +msgid "" +"This will be prepended to invoice numbers. If you leave this field empty, " +"your event slug will be used followed by a dash. Attention: If multiple " +"events within the same organization use the same value in this field, they " +"will share their number range, i.e. every full number will be used at most " +"once over all of your events. This setting only affects future invoices. You " +"can use %Y (with century) %y (without century) to insert the year of the " +"invoice, or %m and %d for the day of month." +msgstr "" + +#: pretix/base/settings.py:405 +msgid "Invoice number prefix for cancellations" +msgstr "" + +#: pretix/base/settings.py:406 +msgid "" +"This will be prepended to invoice numbers of cancellations. If you leave " +"this field empty, the same numbering scheme will be used that you configured " +"for regular invoices." +msgstr "" + +#: pretix/base/settings.py:425 +msgid "Reservation period" +msgstr "" + +#: pretix/base/settings.py:426 +msgid "" +"The number of minutes the items in a user's cart are reserved for this user." +msgstr "" + +#: pretix/base/settings.py:435 +msgid "" +"Directly redirect to check-out after a product has been added to the cart." +msgstr "" + +#: pretix/base/settings.py:444 +msgid "End of presale text" +msgstr "" + +#: pretix/base/settings.py:447 +msgid "" +"This text will be shown above the ticket shop once the designated sales " +"timeframe for this event is over. You can use it to describe other options " +"to get a ticket, such as a box office." +msgstr "" + +#: pretix/base/settings.py:461 +msgid "Guidance text" +msgstr "" + +#: pretix/base/settings.py:462 +msgid "" +"This text will be shown above the payment options. You can explain the " +"choices to the user here, if you want." +msgstr "" + +#: pretix/base/settings.py:473 pretix/base/settings.py:481 +msgid "in days" +msgstr "" + +#: pretix/base/settings.py:474 pretix/base/settings.py:482 +msgid "in minutes" +msgstr "" + +#: pretix/base/settings.py:478 +msgid "Set payment term" +msgstr "" + +#: pretix/base/settings.py:484 +msgid "" +"If using days, the order will expire at the end of the last day. Using " +"minutes is more exact, but should only be used for real-time payment methods." +msgstr "" + +#: pretix/base/settings.py:494 +msgid "Payment term in days" +msgstr "" + +#: pretix/base/settings.py:501 +msgid "" +"The number of days after placing an order the user has to pay to preserve " +"their reservation. If you use slow payment methods like bank transfer, we " +"recommend 14 days. If you only use real-time payment methods, we recommend " +"still setting two or three days to allow people to retry failed payments." +msgstr "" + +#: pretix/base/settings.py:519 +msgid "Only end payment terms on weekdays" +msgstr "" + +#: pretix/base/settings.py:520 +msgid "" +"If this is activated and the payment term of any order ends on a Saturday or " +"Sunday, it will be moved to the next Monday instead. This is required in " +"some countries by civil law. This will not effect the last date of payments " +"configured below." +msgstr "" + +#: pretix/base/settings.py:536 +msgid "Payment term in minutes" +msgstr "" + +#: pretix/base/settings.py:537 +msgid "" +"The number of minutes after placing an order the user has to pay to preserve " +"their reservation. Only use this if you exclusively offer real-time payment " +"methods. Please note that for technical reasons, the actual time frame might " +"be a few minutes longer before the order is marked as expired." +msgstr "" + +#: pretix/base/settings.py:560 +msgid "Last date of payments" +msgstr "" + +#: pretix/base/settings.py:561 +msgid "" +"The last date any payments are accepted. This has precedence over the terms " +"configured above. If you use the event series feature and an order contains " +"tickets for multiple dates, the earliest date will be used." +msgstr "" + +#: pretix/base/settings.py:572 +msgid "Automatically expire unpaid orders" +msgstr "" + +#: pretix/base/settings.py:573 +msgid "" +"If checked, all unpaid orders will automatically go from 'pending' to " +"'expired' after the end of their payment deadline. This means that those " +"tickets go back to the pool and can be ordered by other people." +msgstr "" + +#: pretix/base/settings.py:584 +msgid "Hide \"payment pending\" state on customer-facing pages" +msgstr "" + +#: pretix/base/settings.py:585 +msgid "" +"The payment instructions panel will still be shown to the primary customer, " +"but no indication of missing payment will be visible on the ticket pages of " +"attendees who did not buy the ticket themselves." +msgstr "" + +#: pretix/base/settings.py:604 +msgid "Accept late payments" +msgstr "" + +#: pretix/base/settings.py:605 +msgid "" +"Accept payments for orders even when they are in 'expired' state as long as " +"enough capacity is available. No payments will ever be accepted after the " +"'Last date of payments' configured above." +msgstr "" + +#: pretix/base/settings.py:616 +msgid "Show start date" +msgstr "" + +#: pretix/base/settings.py:617 +msgid "Show the presale start date before presale has started." +msgstr "" + +#: pretix/base/settings.py:632 pretix/base/settings.py:643 +msgid "Do not generate invoices" +msgstr "" + +#: pretix/base/settings.py:633 pretix/base/settings.py:644 +msgid "Only manually in admin panel" +msgstr "" + +#: pretix/base/settings.py:634 pretix/base/settings.py:645 +msgid "Automatically on user request" +msgstr "" + +#: pretix/base/settings.py:635 pretix/base/settings.py:646 +msgid "Automatically for all created orders" +msgstr "" + +#: pretix/base/settings.py:636 pretix/base/settings.py:647 +msgid "Automatically on payment or when required by payment method" +msgstr "" + +#: pretix/base/settings.py:640 +msgid "Generate invoices" +msgstr "" + +#: pretix/base/settings.py:649 +msgid "Invoices will never be automatically generated for free orders." +msgstr "" + +#: pretix/base/settings.py:658 +msgid "Automatically cancel and reissue invoice on address changes" +msgstr "" + +#: pretix/base/settings.py:659 +msgid "" +"If customers change their invoice address on an existing order, the invoice " +"will automatically be canceled and a new invoice will be issued. This " +"setting does not affect changes made through the backend." +msgstr "" + +#: pretix/base/settings.py:674 +msgid "Address line" +msgstr "" + +#: pretix/base/settings.py:678 +msgid "Albert Einstein Road 52" +msgstr "" + +#: pretix/base/settings.py:730 +msgid "Domestic tax ID" +msgstr "" + +#: pretix/base/settings.py:731 +msgid "e.g. tax number in Germany, ABN in Australia, …" +msgstr "" + +#: pretix/base/settings.py:740 +msgid "EU VAT ID" +msgstr "" + +#: pretix/base/settings.py:753 +msgid "e.g. With this document, we sent you the invoice for your ticket order." +msgstr "" + +#: pretix/base/settings.py:756 +msgid "Introductory text" +msgstr "" + +#: pretix/base/settings.py:757 +msgid "Will be printed on every invoice above the invoice rows." +msgstr "" + +#: pretix/base/settings.py:770 +msgid "" +"e.g. Thank you for your purchase! You can find more information on the event " +"at ..." +msgstr "" + +#: pretix/base/settings.py:773 +msgid "Additional text" +msgstr "" + +#: pretix/base/settings.py:774 +msgid "Will be printed on every invoice below the invoice total." +msgstr "" + +#: pretix/base/settings.py:787 +msgid "" +"e.g. your bank details, legal details like your VAT ID, registration " +"numbers, etc." +msgstr "" + +#: pretix/base/settings.py:790 +msgid "Footer" +msgstr "" + +#: pretix/base/settings.py:791 +msgid "" +"Will be printed centered and in a smaller font at the end of every invoice " +"page." +msgstr "" + +#: pretix/base/settings.py:804 +msgid "Attach invoices to emails" +msgstr "" + +#: pretix/base/settings.py:805 +msgid "" +"If invoices are automatically generated for all orders, they will be " +"attached to the order confirmation mail. If they are automatically generated " +"on payment, they will be attached to the payment confirmation mail. If they " +"are not automatically generated, they will not be attached to emails." +msgstr "" + +#: pretix/base/settings.py:817 +msgid "Show items outside presale period" +msgstr "" + +#: pretix/base/settings.py:818 +msgid "" +"Show item details before presale has started and after presale has ended" +msgstr "" + +#: pretix/base/settings.py:838 +msgid "Available languages" +msgstr "" + +#: pretix/base/settings.py:854 pretix/control/forms/event.py:90 +msgid "Default language" +msgstr "" + +#: pretix/base/settings.py:864 +msgid "Region" +msgstr "" + +#: pretix/base/settings.py:865 +msgid "" +"Will be used to determine date and time formatting as well as default " +"country for customer addresses and phone numbers. For formatting, this takes " +"less priority than the language and is therefore mostly relevant for " +"languages used in different regions globally (like English)." +msgstr "" + +#: pretix/base/settings.py:877 +msgid "Show event times and dates on the ticket shop" +msgstr "" + +#: pretix/base/settings.py:878 +msgid "" +"If disabled, no date or time will be shown on the ticket shop's front page. " +"This settings does however not affect the display in other locations." +msgstr "" + +#: pretix/base/settings.py:888 +msgid "Show event end date" +msgstr "" + +#: pretix/base/settings.py:889 +msgid "If disabled, only event's start date will be displayed to the public." +msgstr "" + +#: pretix/base/settings.py:898 +msgid "Show dates with time" +msgstr "" + +#: pretix/base/settings.py:899 +msgid "" +"If disabled, the event's start and end date will be displayed without the " +"time of day." +msgstr "" + +#: pretix/base/settings.py:908 +msgid "Hide all products that are sold out" +msgstr "" + +#: pretix/base/settings.py:918 pretix/control/forms/event.py:1293 +msgid "Publicly show how many tickets of a certain type are still available." +msgstr "" + +#: pretix/base/settings.py:927 +msgid "Ask search engines not to index the ticket shop" +msgstr "" + +#: pretix/base/settings.py:936 +msgid "Show variations of a product expanded by default" +msgstr "" + +#: pretix/base/settings.py:945 +msgid "Enable waiting list" +msgstr "" + +#: pretix/base/settings.py:946 pretix/control/forms/event.py:1298 +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 " +"person on the waiting list and this person will receive an email " +"notification with a voucher that can be used to buy a ticket." +msgstr "" + +#: pretix/base/settings.py:957 +msgid "Automatic waiting list assignments" +msgstr "" + +#: pretix/base/settings.py:958 +msgid "" +"If ticket capacity becomes free, automatically create a voucher and send it " +"to the first person on the waiting list for that product. If this is not " +"active, mails will not be send automatically but you can send them manually " +"via the control panel. If you disable the waiting list but keep this option " +"enabled, tickets will still be sent out." +msgstr "" + +#: pretix/base/settings.py:971 +msgid "Waiting list response time" +msgstr "" + +#: pretix/base/settings.py:973 +msgid "" +"If a ticket voucher is sent to a person on the waiting list, it has to be " +"redeemed within this number of hours until it expires and can be re-assigned " +"to the next person on the list." +msgstr "" + +#: pretix/base/settings.py:984 +msgid "Ask for a name" +msgstr "" + +#: pretix/base/settings.py:985 +msgid "Ask for a name when signing up to the waiting list." +msgstr "" + +#: pretix/base/settings.py:994 +msgid "Require name" +msgstr "" + +#: pretix/base/settings.py:995 +msgid "Require a name when signing up to the waiting list.." +msgstr "" + +#: pretix/base/settings.py:1005 +msgid "Ask for a phone number" +msgstr "" + +#: pretix/base/settings.py:1006 +msgid "Ask for a phone number when signing up to the waiting list." +msgstr "" + +#: pretix/base/settings.py:1015 +msgid "Require phone number" +msgstr "" + +#: pretix/base/settings.py:1016 +msgid "Require a phone number when signing up to the waiting list.." +msgstr "" + +#: pretix/base/settings.py:1026 +msgid "Phone number explanation" +msgstr "" + +#: pretix/base/settings.py:1029 +msgid "" +"If you ask for a phone number, explain why you do so and what you will use " +"the phone number for." +msgstr "" + +#: pretix/base/settings.py:1039 +msgid "Allow users to download tickets" +msgstr "" + +#: pretix/base/settings.py:1040 +msgid "If this is off, nobody can download a ticket." +msgstr "" + +#: pretix/base/settings.py:1049 +msgid "Download date" +msgstr "" + +#: pretix/base/settings.py:1050 +msgid "" +"Ticket download will be offered after this date. If you use the event series " +"feature and an order contains tickets for multiple event dates, download of " +"all tickets will be available if at least one of the event dates allows it." +msgstr "" + +#: pretix/base/settings.py:1061 +msgid "Generate tickets for add-on products" +msgstr "" + +#: pretix/base/settings.py:1062 +msgid "" +"By default, tickets are only issued for products selected individually, not " +"for add-on products. With this option, a separate ticket is issued for every " +"add-on product as well." +msgstr "" + +#: pretix/base/settings.py:1074 +msgid "Generate tickets for all products" +msgstr "" + +#: pretix/base/settings.py:1075 +msgid "" +"If turned off, tickets are only issued for products that are marked as an " +"\"admission ticket\"in the product settings. You can also turn off ticket " +"issuing in every product separately." +msgstr "" + +#: pretix/base/settings.py:1087 +msgid "Generate tickets for pending orders" +msgstr "" + +#: pretix/base/settings.py:1088 +msgid "" +"If turned off, ticket downloads are only possible after an order has been " +"marked as paid." +msgstr "" + +#: pretix/base/settings.py:1099 +msgid "Do not issue ticket before email address is validated" +msgstr "" + +#: pretix/base/settings.py:1100 +msgid "" +"If turned on, tickets will not be offered for download directly after " +"purchase. They will be attached to the payment confirmation email (if the " +"file size is not too large), and the customer will be able to download them " +"from the page as soon as they clicked a link in the email. Does not affect " +"orders performed through other sales channels." +msgstr "" + +#: pretix/base/settings.py:1112 +msgid "Show availability in event overviews" +msgstr "" + +#: pretix/base/settings.py:1113 +msgid "" +"If checked, the list of events will show if events are sold out. This might " +"make for longer page loading times if you have lots of events and the shown " +"status might be out of date for up to two minutes." +msgstr "" + +#: pretix/base/settings.py:1126 pretix/base/settings.py:1134 +#: pretix/presale/templates/pretixpresale/organizers/calendar.html:25 +#: pretix/presale/templates/pretixpresale/organizers/calendar_week.html:27 +#: pretix/presale/templates/pretixpresale/organizers/index.html:34 +msgid "List" +msgstr "" + +#: pretix/base/settings.py:1127 pretix/base/settings.py:1135 +msgid "Week calendar" +msgstr "" + +#: pretix/base/settings.py:1128 pretix/base/settings.py:1136 +msgid "Month calendar" +msgstr "" + +#: pretix/base/settings.py:1132 +msgid "Default overview style" +msgstr "" + +#: pretix/base/settings.py:1138 +msgid "" +"If your event series has more than 50 dates in the future, only the month or " +"week calendar can be used." +msgstr "" + +#: pretix/base/settings.py:1147 +msgid "Hide all unavailable dates from calendar or list views" +msgstr "" + +#: pretix/base/settings.py:1156 +msgid "Allow customers to modify their information after they checked in." +msgstr "" + +#: pretix/base/settings.py:1165 +msgid "Last date of modifications" +msgstr "" + +#: pretix/base/settings.py:1166 +msgid "" +"The last date users can modify details of their orders, such as attendee " +"names or answers to questions. If you use the event series feature and an " +"order contains tickets for multiple event dates, the earliest date will be " +"used." +msgstr "" + +#: pretix/base/settings.py:1177 +msgid "Customers can change the variation of the products they purchased" +msgstr "" + +#: pretix/base/settings.py:1187 pretix/base/settings.py:1196 +msgid "" +"Only allow changes if the resulting price is higher or equal than the " +"previous price." +msgstr "" + +#: pretix/base/settings.py:1188 pretix/base/settings.py:1197 +msgid "" +"Only allow changes if the resulting price is higher than the previous price." +msgstr "" + +#: pretix/base/settings.py:1189 pretix/base/settings.py:1198 +msgid "" +"Only allow changes if the resulting price is equal to the previous price." +msgstr "" + +#: pretix/base/settings.py:1190 pretix/base/settings.py:1199 +msgid "Allow changes regardless of price, even if this results in a refund." +msgstr "" + +#: pretix/base/settings.py:1194 +msgid "Requirement for changed prices" +msgstr "" + +#: pretix/base/settings.py:1210 +msgid "Do not allow changes after" +msgstr "" + +#: pretix/base/settings.py:1219 +msgid "Customers can cancel their unpaid orders" +msgstr "" + +#: pretix/base/settings.py:1228 pretix/base/settings.py:1356 +msgid "Do not allow cancellations after" +msgstr "" + +#: pretix/base/settings.py:1237 +msgid "Customers can cancel their paid orders" +msgstr "" + +#: pretix/base/settings.py:1238 +msgid "" +"Paid money will be automatically paid back if the payment method allows it. " +"Otherwise, a manual refund will be created for you to process manually." +msgstr "" + +#: pretix/base/settings.py:1251 pretix/control/forms/orders.py:668 +msgid "Keep a fixed cancellation fee" +msgstr "" + +#: pretix/base/settings.py:1260 +msgid "Keep payment, shipping and service fees" +msgstr "" + +#: pretix/base/settings.py:1272 pretix/control/forms/orders.py:679 +msgid "Keep a percentual cancellation fee" +msgstr "" + +#: pretix/base/settings.py:1281 +msgid "Allow customers to voluntarily choose a lower refund" +msgstr "" + +#: pretix/base/settings.py:1282 +msgid "" +"With this option enabled, your customers can choose to get a smaller refund " +"to support you." +msgstr "" + +#: pretix/base/settings.py:1287 +msgid "" +"However, if you want us to help keep the lights on here, please consider " +"using the slider below to request a smaller refund. Thank you!" +msgstr "" + +#: pretix/base/settings.py:1294 +msgid "Voluntary lower refund explanation" +msgstr "" + +#: pretix/base/settings.py:1297 +msgid "" +"This text will be shown in between the explanation of how the refunds work " +"and the slider which your customers can use to choose the amount they would " +"like to receive. You can use it e.g. to explain choosing a lower refund will " +"help your organization." +msgstr "" + +#: pretix/base/settings.py:1312 +msgid "Step size for reduction amount" +msgstr "" + +#: pretix/base/settings.py:1313 +msgid "" +"By default, customers can choose an arbitrary amount for you to keep. If you " +"set this to e.g. 10, they will only be able to choose values in increments " +"of 10." +msgstr "" + +#: pretix/base/settings.py:1323 +msgid "" +"Customers can only request a cancellation that needs to be approved by the " +"event organizer before the order is canceled and a refund is issued." +msgstr "" + +#: pretix/base/settings.py:1333 pretix/base/settings.py:1342 +msgid "All refunds are issued to the original payment method" +msgstr "" + +#: pretix/base/settings.py:1334 pretix/base/settings.py:1343 +msgid "" +"Customers can choose between a gift card and a refund to their payment method" +msgstr "" + +#: pretix/base/settings.py:1335 pretix/base/settings.py:1344 +msgid "All refunds are issued as gift cards" +msgstr "" + +#: pretix/base/settings.py:1340 +#: pretix/control/templates/pretixcontrol/order/index.html:130 +msgid "Refund method" +msgstr "" + +#: pretix/base/settings.py:1365 pretix/control/forms/event.py:1321 +msgid "Contact address" +msgstr "" + +#: pretix/base/settings.py:1366 pretix/control/forms/event.py:1323 +msgid "We'll show this publicly to allow attendees to contact you." +msgstr "" + +#: pretix/base/settings.py:1374 pretix/control/forms/event.py:1315 +msgid "Imprint URL" +msgstr "" + +#: pretix/base/settings.py:1375 pretix/control/forms/event.py:1316 +msgid "" +"This should point e.g. to a part of your website that has your contact " +"details and legal information." +msgstr "" + +#: pretix/base/settings.py:1396 +msgid "Attach ticket files" +msgstr "" + +#: pretix/base/settings.py:1398 +#, python-brace-format +msgid "" +"Tickets will never be attached if they're larger than {size} to avoid email " +"delivery problems." +msgstr "" + +#: pretix/base/settings.py:1409 +msgid "Attach calendar files" +msgstr "" + +#: pretix/base/settings.py:1410 +msgid "" +"If enabled, we will attach an .ics calendar file to order confirmation " +"emails." +msgstr "" + +#: pretix/base/settings.py:1419 +msgid "Subject prefix" +msgstr "" + +#: pretix/base/settings.py:1420 +msgid "" +"This will be prepended to the subject of all outgoing emails, formatted as " +"[prefix]. Choose, for example, a short form of your event name." +msgstr "" + +#: pretix/base/settings.py:1434 +msgid "Sender address" +msgstr "" + +#: pretix/base/settings.py:1435 +msgid "Sender address for outgoing emails" +msgstr "" + +#: pretix/base/settings.py:1444 +msgid "Sender name" +msgstr "" + +#: pretix/base/settings.py:1445 +msgid "" +"Sender name used in conjunction with the sender address for outgoing emails. " +"Defaults to your event name." +msgstr "" + +#: pretix/base/settings.py:1463 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"you receive this message because you asked us to send you the link\n" +"to your order for {event}.\n" +"\n" +"You can change your order details and view the status of your order at\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1476 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"somebody requested a list of your orders for {event}.\n" +"The list is as follows:\n" +"\n" +"{orders}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1488 +#, python-brace-format +msgid "" +"Hello {attendee_name},\n" +"\n" +"you have been registered for {event} successfully.\n" +"\n" +"You can view the details and status of your ticket here:\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1500 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"your order for {event} was successful. As you only ordered free products,\n" +"no payment is required.\n" +"\n" +"You can change your order details and view the status of your order at\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1517 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"we successfully received your order for {event}. Since you ordered\n" +"a product that requires approval by the event organizer, we ask you to\n" +"be patient and wait for our next email.\n" +"\n" +"You can change your order details and view the status of your order at\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1531 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"we successfully received your order for {event} with a total value\n" +"of {total_with_currency}. Please complete your payment before " +"{expire_date}.\n" +"\n" +"{payment_info}\n" +"\n" +"You can change your order details and view the status of your order at\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1550 +#, python-brace-format +msgid "" +"Hello {attendee_name},\n" +"\n" +"a ticket for {event} has been ordered for you.\n" +"\n" +"You can view the details and status of your ticket here:\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1562 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"your order for {event} has been changed.\n" +"\n" +"You can view the status of your order at\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1574 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"we successfully received your payment for {event}. Thank you!\n" +"\n" +"{payment_info}\n" +"\n" +"You can change your order details and view the status of your order at\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1592 +#, python-brace-format +msgid "" +"Hello {attendee_name},\n" +"\n" +"a ticket for {event} that has been ordered for you is now paid.\n" +"\n" +"You can view the details and status of your ticket here:\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1608 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"we did not yet receive a full payment for your order for {event}.\n" +"Please keep in mind that we only guarantee your order if we receive\n" +"your payment before {expire_date}.\n" +"\n" +"You can view the payment information and the status of your order at\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1622 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"you submitted yourself to the waiting list for {event},\n" +"for the product {product}.\n" +"\n" +"We now have a ticket ready for you! You can redeem it in our ticket shop\n" +"within the next {hours} hours by entering the following voucher code:\n" +"\n" +"{code}\n" +"\n" +"Alternatively, you can just click on the following link:\n" +"\n" +"{url}\n" +"\n" +"Please note that this link is only valid within the next {hours} hours!\n" +"We will reassign the ticket to the next person on the list if you do not\n" +"redeem the voucher within that timeframe.\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1645 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"your order {code} for {event} has been canceled.\n" +"\n" +"You can view the details of your order at\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1657 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"we approved your order for {event} and will be happy to welcome you\n" +"at our event.\n" +"\n" +"Please continue by paying for your order before {expire_date}.\n" +"\n" +"You can select a payment method and perform the payment here:\n" +"\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1673 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"we approved your order for {event} and will be happy to welcome you\n" +"at our event. As you only ordered free products, no payment is required.\n" +"\n" +"You can change your order details and view the status of your order at\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1686 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"unfortunately, we denied your order request for {event}.\n" +"\n" +"{comment}\n" +"\n" +"You can view the details of your order here:\n" +"\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1701 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"You can change your order details and view the status of your order at\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1719 +#, python-brace-format +msgid "" +"Hello {attendee_name},\n" +"\n" +"you are registered for {event}.\n" +"\n" +"If you did not do so already, you can download your ticket here:\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1731 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"you bought a ticket for {event}.\n" +"\n" +"If you did not do so already, you can download your ticket here:\n" +"{url}\n" +"\n" +"Best regards,\n" +"Your {event} team" +msgstr "" + +#: pretix/base/settings.py:1777 pretix/base/settings.py:1784 +#: pretix/base/settings.py:1797 pretix/base/settings.py:1805 +#: pretix/base/settings.py:1818 pretix/base/settings.py:1826 +#: pretix/base/settings.py:1839 pretix/base/settings.py:1846 +msgid "Please enter the hexadecimal code of a color, e.g. #990000." +msgstr "" + +#: pretix/base/settings.py:1781 +msgid "Primary color" +msgstr "" + +#: pretix/base/settings.py:1801 +msgid "Accent color for success" +msgstr "" + +#: pretix/base/settings.py:1802 +msgid "We strongly suggest to use a shade of green." +msgstr "" + +#: pretix/base/settings.py:1822 +msgid "Accent color for errors" +msgstr "" + +#: pretix/base/settings.py:1823 +msgid "We strongly suggest to use a shade of red." +msgstr "" + +#: pretix/base/settings.py:1843 +msgid "Page background color" +msgstr "" + +#: pretix/base/settings.py:1857 +msgid "Use round edges" +msgstr "" + +#: pretix/base/settings.py:1867 +#: pretix/control/templates/pretixcontrol/pdf/index.html:317 +msgid "Font" +msgstr "" + +#: pretix/base/settings.py:1868 +msgid "Only respected by modern browsers." +msgstr "" + +#: pretix/base/settings.py:1894 pretix/base/settings.py:1936 +#: pretix/control/forms/organizer.py:243 +msgid "Header image" +msgstr "" + +#: pretix/base/settings.py:1897 +msgid "" +"If you provide a logo image, we will by default not show your event name and " +"date in the page header. By default, we show your logo with a size of up to " +"1140x120 pixels. You can increase the size with the setting below. We " +"recommend not using small details on the picture as it will be resized on " +"smaller screens." +msgstr "" + +#: pretix/base/settings.py:1917 pretix/base/settings.py:1958 +msgid "Use header image in its full size" +msgstr "" + +#: pretix/base/settings.py:1918 pretix/base/settings.py:1959 +msgid "We recommend to upload a picture at least 1170 pixels wide." +msgstr "" + +#: pretix/base/settings.py:1927 +msgid "Show event title even if a header image is present" +msgstr "" + +#: pretix/base/settings.py:1928 +msgid "The title will only be shown on the event front page." +msgstr "" + +#: pretix/base/settings.py:1939 pretix/control/forms/organizer.py:247 +msgid "" +"If you provide a logo image, we will by default not show your organization " +"name in the page header. By default, we show your logo with a size of up to " +"1140x120 pixels. You can increase the size with the setting below. We " +"recommend not using small details on the picture as it will be resized on " +"smaller screens." +msgstr "" + +#: pretix/base/settings.py:1967 +msgid "Social media image" +msgstr "" + +#: pretix/base/settings.py:1970 +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 " +"square is shown. If you do not fill this, we will use the logo given above." +msgstr "" + +#: pretix/base/settings.py:1988 +msgid "Logo image" +msgstr "" + +#: pretix/base/settings.py:1992 +msgid "We will show your logo with a maximal height and width of 2.5 cm." +msgstr "" + +#: pretix/base/settings.py:2018 pretix/base/settings.py:2124 +msgid "Info text" +msgstr "" + +#: pretix/base/settings.py:2021 pretix/base/settings.py:2126 +msgid "" +"Not displayed anywhere by default, but if you want to, you can use this e.g. " +"in ticket templates." +msgstr "" + +#: pretix/base/settings.py:2030 +msgid "Banner text (top)" +msgstr "" + +#: pretix/base/settings.py:2033 +msgid "" +"This text will be shown above every page of your shop. Please only use this " +"for very important messages." +msgstr "" + +#: pretix/base/settings.py:2043 +msgid "Banner text (bottom)" +msgstr "" + +#: pretix/base/settings.py:2046 +msgid "" +"This text will be shown below every page of your shop. Please only use this " +"for very important messages." +msgstr "" + +#: pretix/base/settings.py:2056 +msgid "Voucher explanation" +msgstr "" + +#: pretix/base/settings.py:2059 +msgid "" +"This text will be shown next to the input for a voucher code. You can use it " +"e.g. to explain how to obtain a voucher code." +msgstr "" + +#: pretix/base/settings.py:2069 +msgid "Attendee data explanation" +msgstr "" + +#: pretix/base/settings.py:2072 +msgid "" +"This text will be shown above the questions asked for every admission " +"product. You can use it e.g. to explain why you need information from them." +msgstr "" + +#: pretix/base/settings.py:2082 +msgid "Additional success message" +msgstr "" + +#: pretix/base/settings.py:2083 +msgid "" +"This message will be shown after an order has been created successfully. It " +"will be shown in additional to the default text." +msgstr "" + +#: pretix/base/settings.py:2095 +msgid "Help text of the phone number field" +msgstr "" + +#: pretix/base/settings.py:2102 +msgid "" +"Make sure to enter a valid email address. We will send you an order " +"confirmation including a link that you need to access your order later." +msgstr "" + +#: pretix/base/settings.py:2109 +msgid "Help text of the email field" +msgstr "" + +#: pretix/base/settings.py:2135 +msgid "Allow creating a new team during event creation" +msgstr "" + +#: pretix/base/settings.py:2136 +msgid "" +"Users that do not have access to all events under this organizer, must " +"select one of their teams to have access to the created event. This setting " +"allows users to create an event-specified team on-the-fly, even when they do " +"not have \"Can change teams and permissions\" permission." +msgstr "" + +#: pretix/base/settings.py:2200 pretix/base/settings.py:2210 +msgid "Event start time (descending)" +msgstr "" + +#: pretix/base/settings.py:2202 pretix/base/settings.py:2212 +msgid "Name (descending)" +msgstr "" + +#: pretix/base/settings.py:2207 +msgctxt "subevent" +msgid "Date ordering" +msgstr "" + +#: pretix/base/settings.py:2223 +msgid "Link back to organizer overview on all event pages" +msgstr "" + +#: pretix/base/settings.py:2232 +msgid "Homepage text" +msgstr "" + +#: pretix/base/settings.py:2234 +msgid "This will be displayed on the organizer homepage." +msgstr "" + +#: pretix/base/settings.py:2247 +msgid "Length of gift card codes" +msgstr "" + +#: pretix/base/settings.py:2248 +msgid "" +"The system generates by default {}-character long gift card codes. However, " +"if a different length is required, it can be set here." +msgstr "" + +#: pretix/base/settings.py:2258 +msgid "Validity of gift card codes in years" +msgstr "" + +#: pretix/base/settings.py:2259 +msgid "" +"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." +msgstr "" + +#: pretix/base/settings.py:2268 +msgid "Customers can choose their own seats" +msgstr "" + +#: pretix/base/settings.py:2269 +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:2293 +msgid "Show button to copy user input from other products" +msgstr "" + +#: pretix/base/settings.py:2302 +msgid "Most common English titles" +msgstr "" + +#: pretix/base/settings.py:2312 +msgid "Most common German titles" +msgstr "" + +#: pretix/base/settings.py:2320 +msgctxt "person_name_salutation" +msgid "Ms" +msgstr "" + +#: pretix/base/settings.py:2321 +msgctxt "person_name_salutation" +msgid "Mr" +msgstr "" + +#: pretix/base/settings.py:2328 pretix/base/settings.py:2341 +#: pretix/base/settings.py:2357 pretix/base/settings.py:2407 +#: pretix/base/settings.py:2420 pretix/base/settings.py:2434 +#: pretix/base/settings.py:2485 pretix/base/settings.py:2502 +#: pretix/base/settings.py:2520 +msgid "Given name" +msgstr "" + +#: pretix/base/settings.py:2329 pretix/base/settings.py:2342 +#: pretix/base/settings.py:2358 pretix/base/settings.py:2374 +#: pretix/base/settings.py:2391 pretix/base/settings.py:2406 +#: pretix/base/settings.py:2421 pretix/base/settings.py:2435 +#: pretix/base/settings.py:2486 pretix/base/settings.py:2503 +#: pretix/base/settings.py:2521 +msgid "Family name" +msgstr "" + +#: pretix/base/settings.py:2333 pretix/base/settings.py:2349 +#: pretix/base/settings.py:2365 pretix/base/settings.py:2380 +#: pretix/base/settings.py:2398 pretix/base/settings.py:2413 +#: pretix/base/settings.py:2443 pretix/base/settings.py:2466 +#: pretix/base/settings.py:2493 pretix/base/settings.py:2511 +#: pretix/base/settings.py:2534 +msgctxt "person_name_sample" +msgid "John" +msgstr "" + +#: pretix/base/settings.py:2334 pretix/base/settings.py:2350 +#: pretix/base/settings.py:2366 pretix/base/settings.py:2382 +#: pretix/base/settings.py:2400 pretix/base/settings.py:2414 +#: pretix/base/settings.py:2444 pretix/base/settings.py:2494 +#: pretix/base/settings.py:2512 pretix/base/settings.py:2535 +msgctxt "person_name_sample" +msgid "Doe" +msgstr "" + +#: pretix/base/settings.py:2340 pretix/base/settings.py:2356 +#: pretix/base/settings.py:2388 pretix/base/settings.py:2501 +#: pretix/base/settings.py:2519 +msgctxt "person_name" +msgid "Title" +msgstr "" + +#: pretix/base/settings.py:2348 pretix/base/settings.py:2364 +#: pretix/base/settings.py:2397 pretix/base/settings.py:2510 +#: pretix/base/settings.py:2533 +msgctxt "person_name_sample" +msgid "Dr" +msgstr "" + +#: pretix/base/settings.py:2372 pretix/base/settings.py:2389 +msgid "First name" +msgstr "" + +#: pretix/base/settings.py:2373 pretix/base/settings.py:2390 +msgid "Middle name" +msgstr "" + +#: pretix/base/settings.py:2454 pretix/base/settings.py:2465 +msgctxt "person_name_sample" +msgid "John Doe" +msgstr "" + +#: pretix/base/settings.py:2460 +msgid "Calling name" +msgstr "" + +#: pretix/base/settings.py:2473 +msgid "Latin transcription" +msgstr "" + +#: pretix/base/settings.py:2484 pretix/base/settings.py:2500 +#: pretix/base/settings.py:2518 +msgctxt "person_name" +msgid "Salutation" +msgstr "" + +#: pretix/base/settings.py:2492 pretix/base/settings.py:2509 +#: pretix/base/settings.py:2532 +msgctxt "person_name_sample" +msgid "Mr" +msgstr "" + +#: pretix/base/settings.py:2522 +msgctxt "person_name" +msgid "Degree (after name)" +msgstr "" + +#: pretix/base/settings.py:2536 +msgctxt "person_name_sample" +msgid "MA" +msgstr "" + +#: pretix/base/settings.py:2637 pretix/control/forms/event.py:171 +msgid "" +"Your default locale must also be enabled for your event (see box above)." +msgstr "" + +#: pretix/base/settings.py:2641 +msgid "" +"You cannot require specifying attendee names if you do not ask for them." +msgstr "" + +#: pretix/base/settings.py:2645 +msgid "You have to ask for attendee emails if you want to make them required." +msgstr "" + +#: pretix/base/settings.py:2649 +msgid "" +"You have to ask for invoice addresses if you want to make them required." +msgstr "" + +#: pretix/base/settings.py:2653 +msgid "You have to require invoice addresses to require for company names." +msgstr "" + +#: pretix/base/settings.py:2660 +msgid "The last payment date cannot be before the end of presale." +msgstr "" + +#: pretix/base/shredder.py:40 pretix/base/shredder.py:43 +msgid "Your event needs to be over for at least 30 days to use this feature." +msgstr "" + +#: pretix/base/shredder.py:45 +msgid "Your ticket shop needs to be offline to use this feature." +msgstr "" + +#: pretix/base/shredder.py:135 +msgid "Phone numbers" +msgstr "" + +#: pretix/base/shredder.py:137 +msgid "This will remove all phone numbers from orders." +msgstr "" + +#: pretix/base/shredder.py:160 +msgid "E-mails" +msgstr "" + +#: pretix/base/shredder.py:162 +msgid "" +"This will remove all e-mail addresses from orders and attendees, as well as " +"logged email contents." +msgstr "" + +#: pretix/base/shredder.py:207 +msgid "" +"This will remove all names, email addresses, and phone numbers from the " +"waiting list." +msgstr "" + +#: pretix/base/shredder.py:240 +msgid "Attendee info" +msgstr "" + +#: pretix/base/shredder.py:242 +msgid "" +"This will remove all attendee names and postal addresses from order " +"positions, as well as logged changes to them." +msgstr "" + +#: pretix/base/shredder.py:296 +msgid "Invoice addresses" +msgstr "" + +#: pretix/base/shredder.py:299 +msgid "" +"This will remove all invoice addresses from orders, as well as logged " +"changes to them." +msgstr "" + +#: pretix/base/shredder.py:323 +msgid "Question answers" +msgstr "" + +#: pretix/base/shredder.py:325 +msgid "" +"This will remove all answers to questions, as well as logged changes to them." +msgstr "" + +#: pretix/base/shredder.py:359 +msgid "" +"This will remove all invoice PDFs, as well as any of their text content that " +"might contain personal data from the database. Invoice numbers and totals " +"will be conserved." +msgstr "" + +#: pretix/base/shredder.py:386 +msgid "Cached ticket files" +msgstr "" + +#: pretix/base/shredder.py:388 +msgid "This will remove all cached ticket files. No download will be offered." +msgstr "" + +#: pretix/base/shredder.py:403 +msgid "" +"This will remove payment-related information. Depending on the payment " +"method, all data will be removed or personal data only. No download will be " +"offered." +msgstr "" + +#: pretix/base/templates/400.html:4 pretix/base/templates/400.html:8 +msgid "Bad Request" +msgstr "" + +#: pretix/base/templates/400.html:9 +msgid "We were unable to parse your request." +msgstr "" + +#: pretix/base/templates/400.html:12 pretix/base/templates/403.html:12 +#: pretix/base/templates/404.html:12 pretix/base/templates/500.html:22 +#: pretix/base/templates/csrffail.html:26 +msgid "Take a step back" +msgstr "" + +#: pretix/base/templates/400.html:13 pretix/base/templates/403.html:13 +#: pretix/base/templates/500.html:23 +#: pretix/presale/templates/pretixpresale/event/cookies.html:40 +msgid "Try again" +msgstr "" + +#: pretix/base/templates/403.html:4 pretix/base/templates/403.html:8 +msgid "Permission denied" +msgstr "" + +#: pretix/base/templates/403.html:9 +msgid "You do not have access to this page." +msgstr "" + +#: pretix/base/templates/403.html:20 pretix/base/templates/404.html:19 +#: pretix/control/templates/pretixcontrol/base.html:192 +#: pretix/control/templates/pretixcontrol/user/staff_session_start.html:4 +#: pretix/control/templates/pretixcontrol/user/staff_session_start.html:6 +msgid "Admin mode" +msgstr "" + +#: pretix/base/templates/404.html:4 pretix/base/templates/404.html:8 +msgid "Not found" +msgstr "" + +#: pretix/base/templates/404.html:9 +msgid "I'm afraid we could not find the the resource you requested." +msgstr "" + +#: pretix/base/templates/500.html:4 pretix/base/templates/500.html:8 +msgid "Internal Server Error" +msgstr "" + +#: pretix/base/templates/500.html:9 +msgid "We had trouble processing your request." +msgstr "" + +#: pretix/base/templates/500.html:10 +msgid "If this problem persists, please contact us." +msgstr "" + +#: pretix/base/templates/500.html:13 +msgid "If you contact us, please send us the following code:" +msgstr "" + +#: pretix/base/templates/csrffail.html:4 pretix/base/templates/csrffail.html:8 +msgid "Verification failed" +msgstr "" + +#: pretix/base/templates/csrffail.html:9 +msgid "" +"We could not verify that this request really was sent from you. For security " +"reasons, we therefore cannot process it." +msgstr "" + +#: pretix/base/templates/csrffail.html:20 +msgid "" +"Please go back to the last page, refresh this page and then try again. If " +"the problem persists, please get in touch with us." +msgstr "" + +#: pretix/base/templates/pretixbase/cachedfiles/pending.html:21 +msgid "We are preparing your file for download …" +msgstr "" + +#: pretix/base/templates/pretixbase/cachedfiles/pending.html:23 +msgid "" +"If this takes longer than a few minutes, please refresh this page or contact " +"us." +msgstr "" + +#: pretix/base/templates/pretixbase/email/email_footer.html:3 +#: pretix/control/templates/pretixcontrol/auth/base.html:60 +#: pretix/control/templates/pretixcontrol/base.html:410 +#, python-format +msgid "powered by eventyay" +msgstr "" + +#: pretix/base/templates/pretixbase/email/notification.html:55 +#: pretix/base/templates/pretixbase/email/notification.txt:14 +msgid "You receive these emails based on your notification settings." +msgstr "" + +#: pretix/base/templates/pretixbase/email/notification.html:57 +msgid "Click here to view and change your notification settings" +msgstr "" + +#: pretix/base/templates/pretixbase/email/notification.html:60 +msgid "Click here disable all notifications immediately." +msgstr "" + +#: pretix/base/templates/pretixbase/email/notification.txt:15 +msgid "Click here to view and change your notification settings:" +msgstr "" + +#: pretix/base/templates/pretixbase/email/notification.txt:17 +msgid "Click here disable all notifications immediately:" +msgstr "" + +#: pretix/base/templates/pretixbase/email/order_details.html:6 +msgid "" +"You are receiving this email because someone signed you up for the following " +"event:" +msgstr "" + +#: pretix/base/templates/pretixbase/email/order_details.html:11 +#: pretix/base/templates/pretixbase/email/order_details.html:61 +msgid "Event:" +msgstr "" + +#: pretix/base/templates/pretixbase/email/order_details.html:25 +#: pretix/base/templates/pretixbase/email/order_details.html:76 +msgid "Order code:" +msgstr "" + +#: pretix/base/templates/pretixbase/email/order_details.html:30 +msgid "created by" +msgstr "" + +#: pretix/base/templates/pretixbase/email/order_details.html:36 +#: pretix/base/templates/pretixbase/email/order_details.html:124 +msgid "Organizer:" +msgstr "" + +#: pretix/base/templates/pretixbase/email/order_details.html:51 +msgid "View registration details" +msgstr "" + +#: pretix/base/templates/pretixbase/email/order_details.html:56 +msgid "" +"You are receiving this email because you placed an order for the following " +"event:" +msgstr "" + +#: pretix/base/templates/pretixbase/email/order_details.html:85 +msgid "Details:" +msgstr "" + +#: pretix/base/templates/pretixbase/forms/widgets/reldate.html:15 +#: pretix/base/templates/pretixbase/forms/widgets/reldatetime.html:19 +msgid "days before" +msgstr "" + +#: pretix/base/templates/pretixbase/forms/widgets/reldatetime.html:15 +msgid "minutes before" +msgstr "" + +#: pretix/base/templates/pretixbase/forms/widgets/reldatetime.html:21 +msgid "at" +msgstr "" + +#: pretix/base/ticketoutput.py:145 +msgid "Enable ticket format" +msgstr "" + +#: pretix/base/ticketoutput.py:163 +msgid "Download ticket" +msgstr "" + +#: pretix/base/timeline.py:37 +msgctxt "timeline" +msgid "Your event starts" +msgstr "" + +#: pretix/base/timeline.py:45 +msgctxt "timeline" +msgid "Your event ends" +msgstr "" + +#: pretix/base/timeline.py:53 +msgctxt "timeline" +msgid "Admissions for your event start" +msgstr "" + +#: pretix/base/timeline.py:61 +msgctxt "timeline" +msgid "Start of ticket sales" +msgstr "" + +#: pretix/base/timeline.py:69 +msgctxt "timeline" +msgid "End of ticket sales" +msgstr "" + +#: pretix/base/timeline.py:78 +msgctxt "timeline" +msgid "Customers can no longer modify their orders" +msgstr "" + +#: pretix/base/timeline.py:91 +msgctxt "timeline" +msgid "No more payments can be completed" +msgstr "" + +#: pretix/base/timeline.py:103 +msgctxt "timeline" +msgid "Tickets can be downloaded" +msgstr "" + +#: pretix/base/timeline.py:115 +msgctxt "timeline" +msgid "Customers can no longer cancel free or unpaid orders" +msgstr "" + +#: pretix/base/timeline.py:127 +msgctxt "timeline" +msgid "Customers can no longer cancel paid orders" +msgstr "" + +#: pretix/base/timeline.py:141 +msgctxt "timeline" +msgid "Download reminders are being sent out" +msgstr "" + +#: pretix/base/timeline.py:153 +#, python-brace-format +msgctxt "timeline" +msgid "Product \"{name}\" becomes available" +msgstr "" + +#: pretix/base/timeline.py:164 +#, python-brace-format +msgctxt "timeline" +msgid "Product \"{name}\" becomes unavailable" +msgstr "" + +#: pretix/base/timeline.py:192 +#, python-brace-format +msgctxt "timeline" +msgid "Payment provider \"{name}\" can no longer be selected" +msgstr "" + +#: pretix/base/validators.py:15 +#, python-format +msgid "This field has an invalid value: %(value)s." +msgstr "" + +#: pretix/base/views/errors.py:19 +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +#: pretix/base/views/errors.py:24 +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +#: pretix/base/views/errors.py:29 +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +#: pretix/base/views/errors.py:34 +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +#: pretix/base/views/tasks.py:135 +msgid "An unexpected error has occurred, please try again later." +msgstr "" + +#: pretix/base/views/tasks.py:138 +msgid "The task has been completed." +msgstr "" + +#: pretix/control/forms/__init__.py:164 +#, python-brace-format +msgid "Please do not upload files larger than {size}!" +msgstr "" + +#: pretix/control/forms/__init__.py:185 +msgid "Filetype not allowed!" +msgstr "" + +#: pretix/control/forms/checkin.py:68 pretix/control/forms/filter.py:334 +#: pretix/control/forms/filter.py:361 pretix/control/forms/filter.py:1390 +#: pretix/control/forms/filter.py:1410 pretix/control/forms/filter.py:1504 +#: pretix/control/forms/filter.py:1520 pretix/control/forms/filter.py:1588 +#: pretix/control/forms/filter.py:1623 pretix/control/forms/orders.py:612 +#: pretix/control/forms/orders.py:788 +#: pretix/control/templates/pretixcontrol/event/fragment_subevent_choice_simple.html:5 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:52 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:114 +#: pretix/plugins/sendmail/forms.py:56 +msgctxt "subevent" +msgid "All dates" +msgstr "" + +#: pretix/control/forms/event.py:43 +msgid "Use languages" +msgstr "" + +#: pretix/control/forms/event.py:45 +msgid "Choose all languages that your event should be available in." +msgstr "" + +#: pretix/control/forms/event.py:48 +msgid "This is an event series" +msgstr "" + +#: pretix/control/forms/event.py:82 +msgid "" +"You already used this slug for a different event. Please choose a new one." +msgstr "" + +#: pretix/control/forms/event.py:86 pretix/control/forms/event.py:418 +msgid "Event timezone" +msgstr "" + +#: pretix/control/forms/event.py:93 +msgid "Sales tax rate" +msgstr "" + +#: pretix/control/forms/event.py:94 +msgid "" +"Do you need to pay sales tax on your tickets? In this case, please enter the " +"applicable tax rate here in percent. If you have a more complicated tax " +"situation, you can add more tax rates and detailed configuration later." +msgstr "" + +#: pretix/control/forms/event.py:101 +msgid "Grant access to team" +msgstr "" + +#: pretix/control/forms/event.py:102 +msgid "" +"You are allowed to create events under this organizer, however you do not " +"have permission to edit all events under this organizer. Please select one " +"of your existing teams that will be granted access to this event." +msgstr "" + +#: pretix/control/forms/event.py:107 +msgid "Create a new team for this event with me as the only member" +msgstr "" + +#: pretix/control/forms/event.py:150 pretix/control/forms/event.py:321 +msgid "" +"Sample Conference Center\n" +"Heidelberg, Germany" +msgstr "" + +#: pretix/control/forms/event.py:175 +msgid "Your default locale must be specified." +msgstr "" + +#: pretix/control/forms/event.py:249 +msgid "Copy configuration from" +msgstr "" + +#: pretix/control/forms/event.py:255 pretix/control/forms/event.py:258 +#: pretix/control/forms/item.py:266 +msgid "Do not copy" +msgstr "" + +#: pretix/control/forms/event.py:274 pretix/control/forms/subevents.py:309 +#, python-brace-format +msgid "Default ({value})" +msgstr "" + +#: pretix/control/forms/event.py:326 pretix/control/forms/organizer.py:84 +msgid "Custom domain" +msgstr "" + +#: pretix/control/forms/event.py:328 pretix/control/forms/organizer.py:86 +msgid "You need to configure the custom domain in the webserver beforehand." +msgstr "" + +#: pretix/control/forms/event.py:346 pretix/control/forms/organizer.py:94 +msgid "You cannot choose the base domain of this installation." +msgstr "" + +#: pretix/control/forms/event.py:350 pretix/control/forms/organizer.py:99 +msgid "This domain is already in use for a different event or organizer." +msgstr "" + +#: pretix/control/forms/event.py:421 +msgid "Name format" +msgstr "" + +#: pretix/control/forms/event.py:422 +msgid "" +"This defines how pretix will ask for human names. Changing this after you " +"already received orders might lead to unexpected behavior when sorting or " +"changing names." +msgstr "" + +#: pretix/control/forms/event.py:427 +msgid "Allowed titles" +msgstr "" + +#: pretix/control/forms/event.py:428 +msgid "" +"If the naming scheme you defined above allows users to input a title, you " +"can use this to restrict the set of selectable titles." +msgstr "" + +#: pretix/control/forms/event.py:535 +#, python-brace-format +msgid "Ask for {fields}, display like {example}" +msgstr "" + +#: pretix/control/forms/event.py:541 +msgid "Free text input" +msgstr "" + +#: pretix/control/forms/event.py:572 +msgid "Do not ask" +msgstr "" + +#: pretix/control/forms/event.py:573 +msgid "Ask, but do not require input" +msgstr "" + +#: pretix/control/forms/event.py:574 +#: pretix/control/templates/pretixcontrol/event/settings.html:71 +msgid "Ask and require input" +msgstr "" + +#: pretix/control/forms/event.py:610 +msgid "" +"You have configured gift cards to be valid {} years plus the year the gift " +"card is issued in." +msgstr "" + +#: pretix/control/forms/event.py:628 +msgid "Tax rule for payment fees" +msgstr "" + +#: pretix/control/forms/event.py:630 +msgid "" +"The tax rule that applies for additional fees you configured for single " +"payment methods. This will set the tax rate and reverse charge rules, other " +"settings of the tax rule are ignored." +msgstr "" + +#: pretix/control/forms/event.py:738 +msgid "Generate invoices for Sales channels" +msgstr "" + +#: pretix/control/forms/event.py:741 +msgid "" +"If you have enabled invoice generation in the previous setting, you can " +"limit it here to specific sales channels." +msgstr "" + +#: pretix/control/forms/event.py:745 +msgid "Invoice style" +msgstr "" + +#: pretix/control/forms/event.py:751 +msgid "Invoice language" +msgstr "" + +#: pretix/control/forms/event.py:752 pretix/control/forms/event.py:767 +msgid "The user's language" +msgstr "" + +#: pretix/control/forms/event.py:789 +msgid "The online shop must be selected to receive these emails." +msgstr "" + +#: pretix/control/forms/event.py:803 +msgid "Sales channels for checkout emails" +msgstr "" + +#: pretix/control/forms/event.py:804 +msgid "" +"The order placed and paid emails will only be send to orders from these " +"sales channels. The online shop must be enabled." +msgstr "" + +#: pretix/control/forms/event.py:815 +msgid "" +"This email will only be send to orders from these sales channels. The online " +"shop must be enabled." +msgstr "" + +#: pretix/control/forms/event.py:823 +msgid "Bcc address" +msgstr "" + +#: pretix/control/forms/event.py:824 +msgid "All emails will be sent to this address as a Bcc copy" +msgstr "" + +#: pretix/control/forms/event.py:830 +msgid "Signature" +msgstr "" + +#: pretix/control/forms/event.py:833 +#, python-brace-format +msgid "This will be attached to every email. Available placeholders: {event}" +msgstr "" + +#: pretix/control/forms/event.py:838 +msgid "e.g. your contact details" +msgstr "" + +#: pretix/control/forms/event.py:843 +msgid "HTML mail renderer" +msgstr "" + +#: pretix/control/forms/event.py:848 pretix/control/forms/event.py:865 +#: pretix/control/forms/event.py:882 pretix/control/forms/event.py:941 +msgid "Text sent to order contact address" +msgstr "" + +#: pretix/control/forms/event.py:853 pretix/control/forms/event.py:870 +#: pretix/control/forms/event.py:887 pretix/control/forms/event.py:946 +msgid "Send an email to attendees" +msgstr "" + +#: pretix/control/forms/event.py:854 pretix/control/forms/event.py:871 +#: pretix/control/forms/event.py:888 pretix/control/forms/event.py:947 +msgid "" +"If the order contains attendees with email addresses different from the " +"person who orders the tickets, the following email will be sent out to the " +"attendees." +msgstr "" + +#: pretix/control/forms/event.py:859 pretix/control/forms/event.py:876 +#: pretix/control/forms/event.py:893 pretix/control/forms/event.py:952 +msgid "Text sent to attendees" +msgstr "" + +#: pretix/control/forms/event.py:899 pretix/control/forms/event.py:921 +#: pretix/control/forms/event.py:926 pretix/control/forms/event.py:931 +#: pretix/control/forms/event.py:936 +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:99 +#: pretix/control/templates/pretixcontrol/pdf/index.html:390 +msgid "Text" +msgstr "" + +#: pretix/control/forms/event.py:904 +msgid "Text (sent by admin)" +msgstr "" + +#: pretix/control/forms/event.py:909 +msgid "Text (requested by user)" +msgstr "" + +#: pretix/control/forms/event.py:914 pretix/control/forms/event.py:957 +msgid "Number of days" +msgstr "" + +#: pretix/control/forms/event.py:917 +msgid "" +"This email will be sent out this many days before the order expires. If the " +"value is 0, the mail will never be sent." +msgstr "" + +#: pretix/control/forms/event.py:960 +msgid "" +"This email will be sent out this many days before the order event starts. If " +"the field is empty, the mail will never be sent." +msgstr "" + +#: pretix/control/forms/event.py:964 +msgid "Received order" +msgstr "" + +#: pretix/control/forms/event.py:969 +msgid "Approved order" +msgstr "" + +#: pretix/control/forms/event.py:972 +msgid "" +"This will only be sent out for non-free orders. Free orders will receive the " +"free order template from below instead." +msgstr "" + +#: pretix/control/forms/event.py:976 +msgid "Approved free order" +msgstr "" + +#: pretix/control/forms/event.py:979 +msgid "" +"This will only be sent out for free orders. Non-free orders will receive the " +"non-free order template from above instead." +msgstr "" + +#: pretix/control/forms/event.py:983 +msgid "Denied order" +msgstr "" + +#: pretix/control/forms/event.py:988 +msgid "Use custom SMTP server" +msgstr "" + +#: pretix/control/forms/event.py:989 +msgid "" +"All mail related to your event will be sent over the smtp server specified " +"by you." +msgstr "" + +#: pretix/control/forms/event.py:993 +msgid "Hostname" +msgstr "" + +#: pretix/control/forms/event.py:998 +msgid "Port" +msgstr "" + +#: pretix/control/forms/event.py:1003 +msgid "Username" +msgstr "" + +#: pretix/control/forms/event.py:1015 +msgid "Use STARTTLS" +msgstr "" + +#: pretix/control/forms/event.py:1016 +msgid "Commonly enabled on port 587." +msgstr "" + +#: pretix/control/forms/event.py:1020 +msgid "Use SSL" +msgstr "" + +#: pretix/control/forms/event.py:1021 +msgid "Commonly enabled on port 465." +msgstr "" + +#: pretix/control/forms/event.py:1051 pretix/control/forms/orders.py:519 +#: pretix/control/forms/orders.py:710 pretix/control/forms/vouchers.py:261 +#: pretix/plugins/sendmail/forms.py:92 +#, python-brace-format +msgid "Available placeholders: {list}" +msgstr "" + +#: pretix/control/forms/event.py:1086 +msgid "" +"You can activate either SSL or STARTTLS security, but not both at the same " +"time." +msgstr "" + +#: pretix/control/forms/event.py:1099 +msgid "Ticket code generator" +msgstr "" + +#: pretix/control/forms/event.py:1100 +msgid "For advanced users, usually does not need to be changed." +msgstr "" + +#: pretix/control/forms/event.py:1157 +msgid "Any country" +msgstr "" + +#: pretix/control/forms/event.py:1158 +msgid "European Union" +msgstr "" + +#: pretix/control/forms/event.py:1171 +msgid "Any customer" +msgstr "" + +#: pretix/control/forms/event.py:1172 +msgid "Individual" +msgstr "" + +#: pretix/control/forms/event.py:1173 +msgid "Business" +msgstr "" + +#: pretix/control/forms/event.py:1174 +msgid "Business with valid VAT ID" +msgstr "" + +#: pretix/control/forms/event.py:1180 +msgid "Charge VAT" +msgstr "" + +#: pretix/control/forms/event.py:1182 +msgid "No VAT" +msgstr "" + +#: pretix/control/forms/event.py:1183 +msgid "Sale not allowed" +msgstr "" + +#: pretix/control/forms/event.py:1187 +msgid "Deviating tax rate" +msgstr "" + +#: pretix/control/forms/event.py:1192 +msgid "Text on invoice" +msgstr "" + +#: pretix/control/forms/event.py:1232 +msgid "Pre-selected voucher" +msgstr "" + +#: pretix/control/forms/event.py:1234 +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 " +"can for example be used to provide widgets that give discounts or unlock " +"secret products." +msgstr "" + +#: pretix/control/forms/event.py:1239 +msgid "Compatibility mode" +msgstr "" + +#: pretix/control/forms/event.py:1241 +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:1262 +msgid "The given voucher code does not exist." +msgstr "" + +#: pretix/control/forms/event.py:1269 pretix/control/forms/organizer.py:45 +#: pretix/control/views/shredder.py:129 +msgid "The slug you entered was not correct." +msgstr "" + +#: pretix/control/forms/event.py:1304 +msgid "Ticket downloads" +msgstr "" + +#: pretix/control/forms/event.py:1305 +msgid "Your customers will be able to download their tickets in PDF format." +msgstr "" + +#: pretix/control/forms/event.py:1309 +msgid "Require all attendees to fill in their names" +msgstr "" + +#: pretix/control/forms/event.py:1310 +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:1336 +msgid "Payment via Stripe" +msgstr "" + +#: pretix/control/forms/event.py:1337 +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 " +"up an account with them, which takes less than five minutes using their " +"simple interface." +msgstr "" + +#: pretix/control/forms/event.py:1343 +msgid "Payment by bank transfer" +msgstr "" + +#: pretix/control/forms/event.py:1344 +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:1383 +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:45 +msgid "Price (optional)" +msgstr "" + +#: pretix/control/forms/event.py:1388 +msgid "Free" +msgstr "" + +#: pretix/control/forms/event.py:1393 +msgid "Quantity available" +msgstr "" + +#: pretix/control/forms/filter.py:131 pretix/control/forms/filter.py:133 +msgid "Search for…" +msgstr "" + +#: pretix/control/forms/filter.py:148 pretix/control/navigation.py:174 +#: pretix/control/templates/pretixcontrol/items/question.html:19 +msgid "All orders" +msgstr "" + +#: pretix/control/forms/filter.py:149 +msgid "Valid orders" +msgstr "" + +#: pretix/control/forms/filter.py:150 +msgid "Paid (or canceled with paid fee)" +msgstr "" + +#: pretix/control/forms/filter.py:151 +#: pretix/control/templates/pretixcontrol/items/question.html:21 +#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:13 +#: pretix/control/templates/pretixcontrol/orders/overview.html:76 +#: pretix/plugins/reports/exporters.py:263 +msgid "Pending" +msgstr "" + +#: pretix/control/forms/filter.py:152 +#: pretix/control/templates/pretixcontrol/items/question.html:22 +msgid "Pending or paid" +msgstr "" + +#: pretix/control/forms/filter.py:154 +msgid "Cancellations" +msgstr "" + +#: pretix/control/forms/filter.py:155 +msgid "Canceled (fully)" +msgstr "" + +#: pretix/control/forms/filter.py:156 +msgid "Canceled (fully or with paid fee)" +msgstr "" + +#: pretix/control/forms/filter.py:157 +msgid "Cancellation requested" +msgstr "" + +#: pretix/control/forms/filter.py:158 +msgid "Fully canceled but invoice not canceled" +msgstr "" + +#: pretix/control/forms/filter.py:160 +msgid "Payment process" +msgstr "" + +#: pretix/control/forms/filter.py:162 +#: pretix/control/templates/pretixcontrol/items/question.html:25 +msgid "Pending or expired" +msgstr "" + +#: pretix/control/forms/filter.py:163 +#: pretix/control/templates/pretixcontrol/items/question.html:23 +msgid "Pending (overdue)" +msgstr "" + +#: pretix/control/forms/filter.py:164 +msgid "Overpaid" +msgstr "" + +#: pretix/control/forms/filter.py:165 +msgid "Partially paid" +msgstr "" + +#: pretix/control/forms/filter.py:166 +msgid "Underpaid (but confirmed)" +msgstr "" + +#: pretix/control/forms/filter.py:167 +msgid "Pending (but fully paid)" +msgstr "" + +#: pretix/control/forms/filter.py:169 +msgid "Approval process" +msgstr "" + +#: pretix/control/forms/filter.py:170 +msgid "Approved, payment pending" +msgstr "" + +#: pretix/control/forms/filter.py:171 +#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:7 +#: pretix/control/templates/pretixcontrol/orders/overview.html:68 +#: pretix/plugins/reports/exporters.py:257 +#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:5 +msgid "Approval pending" +msgstr "" + +#: pretix/control/forms/filter.py:368 pretix/control/forms/filter.py:1202 +#: pretix/control/forms/filter.py:1417 pretix/control/forms/vouchers.py:112 +#: pretix/control/templates/pretixcontrol/items/question.html:29 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:104 +msgid "All products" +msgstr "" + +#: pretix/control/forms/filter.py:372 pretix/control/forms/filter.py:1421 +#: pretix/control/forms/vouchers.py:100 pretix/control/views/typeahead.py:518 +#, python-brace-format +msgid "{product} – Any variation" +msgstr "" + +#: pretix/control/forms/filter.py:436 pretix/control/forms/orders.py:623 +msgctxt "subevent" +msgid "All dates starting at or after" +msgstr "" + +#: pretix/control/forms/filter.py:442 pretix/control/forms/orders.py:630 +msgctxt "subevent" +msgid "All dates starting before" +msgstr "" + +#: pretix/control/forms/filter.py:448 +msgid "Order placed at or after" +msgstr "" + +#: pretix/control/forms/filter.py:454 +msgid "Order placed before" +msgstr "" + +#: pretix/control/forms/filter.py:483 +msgid "Minimal sum of payments and refunds" +msgstr "" + +#: pretix/control/forms/filter.py:488 +msgid "Maximal sum of payments and refunds" +msgstr "" + +#: pretix/control/forms/filter.py:530 pretix/control/forms/filter.py:535 +#: pretix/control/forms/filter.py:561 pretix/control/forms/filter.py:566 +#: pretix/control/forms/filter.py:581 +msgid "Exact matches only" +msgstr "" + +#: pretix/control/forms/filter.py:574 +#: pretix/control/templates/pretixcontrol/order/change.html:177 +msgid "Ticket secret" +msgstr "" + +#: pretix/control/forms/filter.py:683 pretix/control/forms/filter.py:688 +#: pretix/control/forms/filter.py:1018 pretix/control/forms/filter.py:1023 +msgid "All organizers" +msgstr "" + +#: pretix/control/forms/filter.py:777 pretix/control/forms/filter.py:1004 +msgid "Shop live and presale running" +msgstr "" + +#: pretix/control/forms/filter.py:778 pretix/control/forms/filter.py:1273 +msgid "Inactive" +msgstr "" + +#: pretix/control/forms/filter.py:779 pretix/control/forms/filter.py:1006 +#: pretix/control/templates/pretixcontrol/events/index.html:146 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:102 +#: pretix/control/templates/pretixcontrol/subevents/index.html:135 +msgid "Presale not started" +msgstr "" + +#: pretix/control/forms/filter.py:780 pretix/control/forms/filter.py:1007 +#: pretix/control/templates/pretixcontrol/events/index.html:144 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:100 +#: pretix/control/templates/pretixcontrol/subevents/index.html:133 +msgid "Presale over" +msgstr "" + +#: pretix/control/forms/filter.py:785 pretix/control/forms/filter.py:1600 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:73 +#: pretix/plugins/reports/exporters.py:556 +msgid "Date from" +msgstr "" + +#: pretix/control/forms/filter.py:790 pretix/control/forms/filter.py:1605 +#: pretix/plugins/reports/exporters.py:561 +msgid "Date until" +msgstr "" + +#: pretix/control/forms/filter.py:795 pretix/control/forms/subevents.py:447 +#: pretix/control/forms/subevents.py:486 +msgid "Weekday" +msgstr "" + +#: pretix/control/forms/filter.py:797 +msgid "All days" +msgstr "" + +#: pretix/control/forms/filter.py:798 +msgid "Monday" +msgstr "" + +#: pretix/control/forms/filter.py:799 +msgid "Tuesday" +msgstr "" + +#: pretix/control/forms/filter.py:800 +msgid "Wednesday" +msgstr "" + +#: pretix/control/forms/filter.py:801 +msgid "Thursday" +msgstr "" + +#: pretix/control/forms/filter.py:802 +msgid "Friday" +msgstr "" + +#: pretix/control/forms/filter.py:803 +msgid "Saturday" +msgstr "" + +#: pretix/control/forms/filter.py:804 +msgid "Sunday" +msgstr "" + +#: pretix/control/forms/filter.py:948 pretix/control/forms/filter.py:950 +#: pretix/control/forms/filter.py:1287 pretix/control/forms/filter.py:1289 +msgid "Search query" +msgstr "" + +#: pretix/control/forms/filter.py:1002 +msgid "All events" +msgstr "" + +#: pretix/control/forms/filter.py:1003 +msgid "Shop live" +msgstr "" + +#: pretix/control/forms/filter.py:1005 +msgid "Shop not live" +msgstr "" + +#: pretix/control/forms/filter.py:1008 +msgid "Single event running or in the future" +msgstr "" + +#: pretix/control/forms/filter.py:1009 +msgid "Single event in the past" +msgstr "" + +#: pretix/control/forms/filter.py:1180 pretix/control/forms/filter.py:1182 +msgid "Search attendee…" +msgstr "" + +#: pretix/control/forms/filter.py:1188 +msgid "Check-in status" +msgstr "" + +#: pretix/control/forms/filter.py:1190 +msgid "All attendees" +msgstr "" + +#: pretix/control/forms/filter.py:1191 +msgctxt "checkin state" +msgid "Checked in but left" +msgstr "" + +#: pretix/control/forms/filter.py:1192 +msgctxt "checkin state" +msgid "Present" +msgstr "" + +#: pretix/control/forms/filter.py:1193 +#: pretix/control/templates/pretixcontrol/checkin/index.html:140 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:73 +#: pretix/plugins/checkinlists/exporters.py:406 +msgid "Checked in" +msgstr "" + +#: pretix/control/forms/filter.py:1194 +#: pretix/control/templates/pretixcontrol/checkin/index.html:135 +msgid "Not checked in" +msgstr "" + +#: pretix/control/forms/filter.py:1278 pretix/control/forms/filter.py:1281 +#: pretix/control/templates/pretixcontrol/users/index.html:47 +msgid "Administrator" +msgstr "" + +#: pretix/control/forms/filter.py:1282 +msgid "No administrator" +msgstr "" + +#: pretix/control/forms/filter.py:1353 +msgid "Valid" +msgstr "" + +#: pretix/control/forms/filter.py:1354 +msgid "Unredeemed" +msgstr "" + +#: pretix/control/forms/filter.py:1355 +msgid "Redeemed at least once" +msgstr "" + +#: pretix/control/forms/filter.py:1356 +msgid "Fully redeemed" +msgstr "" + +#: pretix/control/forms/filter.py:1358 +msgid "Redeemed and checked in with ticket" +msgstr "" + +#: pretix/control/forms/filter.py:1363 +msgid "Quota handling" +msgstr "" + +#: pretix/control/forms/filter.py:1367 +msgid "Allow to ignore quota" +msgstr "" + +#: pretix/control/forms/filter.py:1372 pretix/control/forms/filter.py:1374 +msgid "Filter by tag" +msgstr "" + +#: pretix/control/forms/filter.py:1379 pretix/control/forms/filter.py:1381 +msgid "Search voucher" +msgstr "" + +#: pretix/control/forms/filter.py:1427 pretix/control/forms/vouchers.py:91 +#: pretix/control/views/typeahead.py:526 pretix/control/views/typeahead.py:530 +#: pretix/control/views/vouchers.py:85 +#, python-brace-format +msgid "Any product in quota \"{quota}\"" +msgstr "" + +#: pretix/control/forms/filter.py:1548 +msgid "Refund status" +msgstr "" + +#: pretix/control/forms/filter.py:1550 +msgid "All open refunds" +msgstr "" + +#: pretix/control/forms/filter.py:1551 +msgid "All refunds" +msgstr "" + +#: pretix/control/forms/filter.py:1591 pretix/plugins/reports/exporters.py:547 +msgid "Date filter" +msgstr "" + +#: pretix/control/forms/filter.py:1593 pretix/plugins/reports/exporters.py:549 +msgid "Filter by…" +msgstr "" + +#: pretix/control/forms/filter.py:1595 pretix/plugins/reports/exporters.py:551 +msgid "Date of last successful payment" +msgstr "" + +#: pretix/control/forms/global_settings.py:25 +msgid "Additional footer text" +msgstr "" + +#: pretix/control/forms/global_settings.py:26 +msgid "Will be included as additional text in the footer, site-wide." +msgstr "" + +#: pretix/control/forms/global_settings.py:31 +msgid "Additional footer link" +msgstr "" + +#: pretix/control/forms/global_settings.py:32 +msgid "Will be included as the link in the additional footer text." +msgstr "" + +#: pretix/control/forms/global_settings.py:37 +msgid "Global message banner" +msgstr "" + +#: pretix/control/forms/global_settings.py:42 +msgid "Global message banner detail text" +msgstr "" + +#: pretix/control/forms/global_settings.py:46 +msgid "OpenCage API key for geocoding" +msgstr "" + +#: pretix/control/forms/global_settings.py:50 +msgid "MapQuest API key for geocoding" +msgstr "" + +#: pretix/control/forms/global_settings.py:54 +msgid "Leaflet tiles URL pattern" +msgstr "" + +#: pretix/control/forms/global_settings.py:55 +#: pretix/control/forms/global_settings.py:60 +#, python-brace-format +msgid "e.g. {sample}" +msgstr "" + +#: pretix/control/forms/global_settings.py:59 +msgid "Leaflet tiles attribution" +msgstr "" + +#: pretix/control/forms/global_settings.py:76 +msgid "Perform update checks" +msgstr "" + +#: pretix/control/forms/global_settings.py:77 +msgid "" +"During the update check, eventyay will report an anonymous, unique " +"installation ID, the current version of the system and your installed " +"plugins and the number of active and inactive events in your installation to " +"servers operated by the eventyay developers. We will only store anonymous " +"data, never any IP addresses and we will not know who you are or where to " +"find your instance. You can disable this behavior here at any time." +msgstr "" + +#: pretix/control/forms/global_settings.py:85 +msgid "E-mail notifications" +msgstr "" + +#: pretix/control/forms/global_settings.py:86 +msgid "" +"We will notify you at this address if we detect that a new update is " +"available. This address will not be transmitted to eventyay.com, the emails " +"will be sent by this server locally." +msgstr "" + +#: pretix/control/forms/item.py:95 +msgid "This field is required" +msgstr "" + +#: pretix/control/forms/item.py:97 +msgid "Dependencies between questions are not supported during check-in." +msgstr "" + +#: pretix/control/forms/item.py:234 +msgid "The product should exist in multiple variations" +msgstr "" + +#: pretix/control/forms/item.py:235 +msgid "" +"Select this option e.g. for t-shirts that come in multiple sizes. You can " +"select the variations in the next step." +msgstr "" + +#: pretix/control/forms/item.py:254 pretix/control/forms/item.py:484 +msgid "No category" +msgstr "" + +#: pretix/control/forms/item.py:261 +msgid "No taxation" +msgstr "" + +#: pretix/control/forms/item.py:263 +msgid "Copy product information" +msgstr "" + +#: pretix/control/forms/item.py:274 +msgid "Do not add to a quota now" +msgstr "" + +#: pretix/control/forms/item.py:275 +msgid "Add product to an existing quota" +msgstr "" + +#: pretix/control/forms/item.py:276 +msgid "Create a new quota for this product" +msgstr "" + +#: pretix/control/forms/item.py:282 +msgid "Quota options" +msgstr "" + +#: pretix/control/forms/item.py:290 +msgid "Add to existing quota" +msgstr "" + +#: pretix/control/forms/item.py:299 +msgid "New quota name" +msgstr "" + +#: pretix/control/forms/item.py:305 +msgid "Size" +msgstr "" + +#: pretix/control/forms/item.py:306 +msgid "Number of tickets" +msgstr "" + +#: pretix/control/forms/item.py:398 +msgid "Quota name is required." +msgstr "" + +#: pretix/control/forms/item.py:403 +msgid "Please select a quota." +msgstr "" + +#: pretix/control/forms/item.py:424 pretix/plugins/badges/forms.py:54 +#: pretix/plugins/ticketoutputpdf/forms.py:31 +msgid "(Event default)" +msgstr "" + +#: pretix/control/forms/item.py:434 +msgid "Choose automatically depending on event settings" +msgstr "" + +#: pretix/control/forms/item.py:435 +msgid "Yes, if ticket generation is enabled in general" +msgstr "" + +#: pretix/control/forms/item.py:436 +msgid "Never" +msgstr "" + +#: pretix/control/forms/item.py:446 +msgid "" +"e.g. This reduced price is available for full-time students, jobless and " +"people over 65. This ticket includes access to all parts of the event, " +"except the VIP area." +msgstr "" + +#: pretix/control/forms/item.py:470 +msgid "Shown independently of other products" +msgstr "" + +#: pretix/control/forms/item.py:562 +#, python-format +msgid "" +"The variation \"%s\" cannot be deleted because it has already been ordered " +"by a user or currently is in a user's cart. Please set the variation as " +"\"inactive\" instead." +msgstr "" + +#: pretix/control/forms/item.py:611 +msgid "Add-ons" +msgstr "" + +#: pretix/control/forms/item.py:639 +msgid "You added the same add-on category twice" +msgstr "" + +#: pretix/control/forms/item.py:684 +msgid "" +"Be aware that setting a minimal number makes it impossible to buy this " +"product if all available add-ons are sold out." +msgstr "" + +#: pretix/control/forms/item.py:691 +msgid "Bundled products" +msgstr "" + +#: pretix/control/forms/item.py:735 +msgid "You added the same bundled product twice." +msgstr "" + +#: pretix/control/forms/item.py:741 +#: pretix/control/templates/pretixcontrol/item/include_bundles.html:23 +#: pretix/control/templates/pretixcontrol/item/include_bundles.html:50 +msgid "Bundled product" +msgstr "" + +#: pretix/control/forms/item.py:765 pretix/control/forms/orders.py:286 +#: pretix/control/forms/orders.py:434 +msgid "inactive" +msgstr "" + +#: pretix/control/forms/orderimport.py:9 +msgid "Import mode" +msgstr "" + +#: pretix/control/forms/orderimport.py:11 +msgid "Create a separate order for each line" +msgstr "" + +#: pretix/control/forms/orderimport.py:12 +msgid "Create one order with one position per line" +msgstr "" + +#: pretix/control/forms/orderimport.py:18 +msgid "Create orders as fully paid" +msgstr "" + +#: pretix/control/forms/orderimport.py:19 +msgid "Create orders as pending and still require payment" +msgstr "" + +#: pretix/control/forms/orderimport.py:23 +msgid "Create orders as test mode orders" +msgstr "" + +#: pretix/control/forms/orderimport.py:36 +#, python-brace-format +msgid "CSV column: \"{name}\"" +msgstr "" + +#: pretix/control/forms/orders.py:35 +msgid "Overbook quota" +msgstr "" + +#: pretix/control/forms/orders.py:36 +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:80 +msgid "Overbook quota and ignore late payment" +msgstr "" + +#: pretix/control/forms/orders.py:81 +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 " +"operation will also be performed regardless of the settings for late " +"payments." +msgstr "" + +#: pretix/control/forms/orders.py:115 pretix/control/forms/orders.py:159 +msgid "Notify customer by email" +msgstr "" + +#: pretix/control/forms/orders.py:122 +msgid "Keep a cancellation fee of" +msgstr "" + +#: pretix/control/forms/orders.py:123 +msgid "" +"If you keep a fee, all positions within this order will be canceled and the " +"order will be reduced to a paid cancellation fee. Payment and shipping fees " +"will be canceled as well, so include them in your cancellation fee if you " +"want to keep them. Please always enter a gross value, tax will be calculated " +"automatically." +msgstr "" + +#: pretix/control/forms/orders.py:129 +msgid "Generate cancellation for invoice" +msgstr "" + +#: pretix/control/forms/orders.py:166 +msgid "Payment amount" +msgstr "" + +#: pretix/control/forms/orders.py:170 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/control.html:18 +#: pretix/plugins/reports/exporters.py:360 +#: pretix/plugins/reports/exporters.py:422 +#: pretix/plugins/reports/exporters.py:540 +#: pretix/plugins/reports/exporters.py:763 +msgid "Payment date" +msgstr "" + +#: pretix/control/forms/orders.py:208 +msgid "Re-calculate taxes" +msgstr "" + +#: pretix/control/forms/orders.py:211 +msgid "Do not re-calculate taxes" +msgstr "" + +#: pretix/control/forms/orders.py:212 +msgid "" +"Re-calculate taxes based on address and product settings, keep gross amount " +"the same." +msgstr "" + +#: pretix/control/forms/orders.py:213 +msgid "" +"Re-calculate taxes based on address and product settings, keep net amount " +"the same." +msgstr "" + +#: pretix/control/forms/orders.py:218 +msgid "Issue a new invoice if required" +msgstr "" + +#: pretix/control/forms/orders.py:222 +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:227 +msgid "Notify user" +msgstr "" + +#: pretix/control/forms/orders.py:231 +msgid "" +"Send an email to the customer notifying that their order has been changed." +msgstr "" + +#: pretix/control/forms/orders.py:235 +msgid "Allow to overbook quotas when performing this operation" +msgstr "" + +#: pretix/control/forms/orders.py:251 +msgid "Add-on to" +msgstr "" + +#: pretix/control/forms/orders.py:256 +#: pretix/control/templates/pretixcontrol/checkin/index.html:74 +#: pretix/control/templates/pretixcontrol/order/change.html:118 +#: pretix/control/views/vouchers.py:73 +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:84 +msgid "Seat" +msgstr "" + +#: pretix/control/forms/orders.py:263 +msgid "Including taxes, if any. Keep empty for the product's default price" +msgstr "" + +#: pretix/control/forms/orders.py:361 pretix/control/forms/orders.py:365 +#: pretix/control/forms/orders.py:376 pretix/control/forms/orders.py:413 +#: pretix/control/forms/orders.py:429 pretix/control/forms/orders.py:457 +msgid "(Unchanged)" +msgstr "" + +#: pretix/control/forms/orders.py:371 pretix/control/forms/orders.py:452 +msgid "New price (gross)" +msgstr "" + +#: pretix/control/forms/orders.py:380 +msgid "Generate a new secret" +msgstr "" + +#: pretix/control/forms/orders.py:384 +msgid "Cancel this position" +msgstr "" + +#: pretix/control/forms/orders.py:388 +msgid "Split into new order" +msgstr "" + +#: pretix/control/forms/orders.py:461 +msgid "Remove this fee" +msgstr "" + +#: pretix/control/forms/orders.py:476 +msgid "Invalidate secrets" +msgstr "" + +#: pretix/control/forms/orders.py:477 +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:510 pretix/control/forms/orders.py:727 +#: pretix/control/forms/orders.py:754 pretix/control/forms/vouchers.py:228 +#: pretix/plugins/sendmail/forms.py:24 pretix/plugins/sendmail/forms.py:119 +msgid "Subject" +msgstr "" + +#: pretix/control/forms/orders.py:534 +msgid "Recipient" +msgstr "" + +#: pretix/control/forms/orders.py:540 pretix/control/forms/orders.py:554 +#: pretix/control/forms/orders.py:735 pretix/control/forms/orders.py:762 +#: pretix/control/forms/vouchers.py:234 pretix/plugins/sendmail/forms.py:25 +#: pretix/plugins/sendmail/forms.py:124 +msgid "Message" +msgstr "" + +#: pretix/control/forms/orders.py:567 +msgid "" +"Cancel the order. All tickets will no longer work. This can not be reverted." +msgstr "" + +#: pretix/control/forms/orders.py:568 +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:570 +msgid "Do nothing and keep the order as it is." +msgstr "" + +#: pretix/control/forms/orders.py:597 +msgid "The refund amount needs to be positive and less than {}." +msgstr "" + +#: pretix/control/forms/orders.py:603 +msgid "You need to specify an amount for a partial refund." +msgstr "" + +#: pretix/control/forms/orders.py:615 +msgid "Cancel all dates" +msgstr "" + +#: pretix/control/forms/orders.py:634 +msgid "Automatically refund money if possible" +msgstr "" + +#: pretix/control/forms/orders.py:639 +msgid "" +"Create manual refund if the payment method does not support automatic refunds" +msgstr "" + +#: pretix/control/forms/orders.py:643 +msgid "" +"If checked, all payments with a payment method not supporting automatic " +"refunds will be on your manual refund to-do list. Do not check if you want " +"to refund some of the orders by offsetting with different orders or issuing " +"gift cards." +msgstr "" + +#: pretix/control/forms/orders.py:648 +msgid "" +"Refund order value to a gift card instead instead of the original payment " +"method" +msgstr "" + +#: pretix/control/forms/orders.py:654 +msgid "Gift card validity" +msgstr "" + +#: pretix/control/forms/orders.py:673 +msgid "Keep a fixed cancellation fee per ticket" +msgstr "" + +#: pretix/control/forms/orders.py:674 +msgid "Free tickets and add-on products are not counted" +msgstr "" + +#: pretix/control/forms/orders.py:684 +msgid "Keep fees" +msgstr "" + +#: pretix/control/forms/orders.py:687 +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 " +"series is only partially canceled since it consists of tickets for multiple " +"dates." +msgstr "" + +#: pretix/control/forms/orders.py:693 +msgid "Send information via email" +msgstr "" + +#: pretix/control/forms/orders.py:699 +msgid "Send information to waiting list" +msgstr "" + +#: pretix/control/forms/orders.py:730 pretix/control/forms/orders.py:756 +#, python-brace-format +msgid "Canceled: {event}" +msgstr "" + +#: pretix/control/forms/orders.py:741 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"with this email, we regret to inform you that {event} has been canceled.\n" +"\n" +"We will refund you {refund_amount} to your original payment method.\n" +"\n" +"You can view the current state of your order here:\n" +"\n" +"{url}\n" +"\n" +"Best regards,\n" +"\n" +"Your {event} team" +msgstr "" + +#: pretix/control/forms/orders.py:768 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"with this email, we regret to inform you that {event} has been canceled.\n" +"\n" +"You will therefore not receive a ticket from the waiting list.\n" +"\n" +"Best regards,\n" +"\n" +"Your {event} team" +msgstr "" + +#: pretix/control/forms/orders.py:800 pretix/plugins/sendmail/forms.py:82 +msgctxt "subevent" +msgid "Please either select a specific date or a date range, not both." +msgstr "" + +#: pretix/control/forms/orders.py:802 +msgctxt "subevent" +msgid "Please either select all dates or a date range, not both." +msgstr "" + +#: pretix/control/forms/orders.py:804 pretix/plugins/sendmail/forms.py:84 +msgctxt "subevent" +msgid "If you set a date range, please set both a start and an end." +msgstr "" + +#: pretix/control/forms/orders.py:806 +msgid "Please confirm that you want to cancel ALL dates in this event series." +msgstr "" + +#: pretix/control/forms/organizer.py:26 +msgid "This slug is already in use. Please choose a different one." +msgstr "" + +#: pretix/control/forms/organizer.py:170 +msgid "" +"The changes could not be saved because there would be no remaining team with " +"the permission to change teams and permissions." +msgstr "" + +#: pretix/control/forms/organizer.py:200 +msgid "" +"Your device will not have access to anything, please select some events." +msgstr "" + +#: pretix/control/forms/organizer.py:253 +msgid "Favicon" +msgstr "" + +#: pretix/control/forms/organizer.py:257 +msgid "" +"If you provide a favicon, we will show it instead of the default pretix " +"icon. We recommend a size of at least 200x200px to accommodate most devices." +msgstr "" + +#: pretix/control/forms/organizer.py:265 +msgctxt "webhooks" +msgid "Event types" +msgstr "" + +#: pretix/control/forms/organizer.py:296 +msgid "Gift card value" +msgstr "" + +#: pretix/control/forms/renderers.py:33 +#: pretix/control/templates/pretixcontrol/items/question_edit.html:132 +msgctxt "form" +msgid "Optional" +msgstr "" + +#: pretix/control/forms/renderers.py:85 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:48 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:181 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:266 +msgctxt "form_bulk" +msgid "change" +msgstr "" + +#: pretix/control/forms/subevents.py:96 +msgid "Keep the current values" +msgstr "" + +#: pretix/control/forms/subevents.py:113 pretix/control/forms/subevents.py:121 +msgid "Selection contains various values" +msgstr "" + +#: pretix/control/forms/subevents.py:369 +msgid "Exclude these dates instead of adding them." +msgstr "" + +#: pretix/control/forms/subevents.py:374 +msgid "year(s)" +msgstr "" + +#: pretix/control/forms/subevents.py:375 +msgid "month(s)" +msgstr "" + +#: pretix/control/forms/subevents.py:376 +msgid "week(s)" +msgstr "" + +#: pretix/control/forms/subevents.py:377 +msgid "day(s)" +msgstr "" + +#: pretix/control/forms/subevents.py:382 +msgid "Interval" +msgstr "" + +#: pretix/control/forms/subevents.py:405 +msgid "Number of repetitions" +msgstr "" + +#: pretix/control/forms/subevents.py:415 +msgid "Last date" +msgstr "" + +#: pretix/control/forms/subevents.py:422 pretix/control/forms/subevents.py:469 +msgctxt "rrule" +msgid "first" +msgstr "" + +#: pretix/control/forms/subevents.py:423 pretix/control/forms/subevents.py:470 +msgctxt "rrule" +msgid "second" +msgstr "" + +#: pretix/control/forms/subevents.py:424 pretix/control/forms/subevents.py:471 +msgctxt "rrule" +msgid "third" +msgstr "" + +#: pretix/control/forms/subevents.py:425 pretix/control/forms/subevents.py:472 +msgctxt "rrule" +msgid "last" +msgstr "" + +#: pretix/control/forms/subevents.py:446 pretix/control/forms/subevents.py:485 +msgid "Day" +msgstr "" + +#: pretix/control/forms/subevents.py:448 pretix/control/forms/subevents.py:487 +msgid "Weekend day" +msgstr "" + +#: pretix/control/forms/users.py:100 pretix/control/views/user.py:178 +msgid "Your changes could not be saved. See below for details." +msgstr "" + +#: pretix/control/forms/vouchers.py:120 +msgid "Specific seat ID" +msgstr "" + +#: pretix/control/forms/vouchers.py:161 +msgid "Invalid product selected." +msgstr "" + +#: pretix/control/forms/vouchers.py:181 +msgid "" +"The voucher only matches hidden products but you have not selected that it " +"should show them." +msgstr "" + +#: pretix/control/forms/vouchers.py:217 +msgid "Codes" +msgstr "" + +#: pretix/control/forms/vouchers.py:219 +msgid "" +"Add one voucher code per line. We suggest that you copy this list and save " +"it into a file." +msgstr "" + +#: pretix/control/forms/vouchers.py:224 +msgid "Send vouchers via email" +msgstr "" + +#: pretix/control/forms/vouchers.py:231 +#, python-brace-format +msgid "Your voucher for {event}" +msgstr "" + +#: pretix/control/forms/vouchers.py:237 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"with this email, we're sending you one or more vouchers for {event}:\n" +"\n" +"{voucher_list}\n" +"\n" +"You can redeem them here in our ticket shop:\n" +"\n" +"{url}\n" +"\n" +"Best regards,\n" +"\n" +"Your {event} team" +msgstr "" + +#: pretix/control/forms/vouchers.py:243 +msgid "Recipients" +msgstr "" + +#: pretix/control/forms/vouchers.py:247 +msgid "or" +msgstr "" + +#: pretix/control/forms/vouchers.py:251 +msgid "" +"You can either supply a list of email addresses with one email address per " +"line, or a CSV file with a title column and one or more of the columns " +"\"email\", \"number\", \"name\", or \"tag\"." +msgstr "" + +#: pretix/control/forms/vouchers.py:287 +msgid "Maximum usages per voucher" +msgstr "" + +#: pretix/control/forms/vouchers.py:290 +msgid "Number of times times EACH of these vouchers can be redeemed." +msgstr "" + +#: pretix/control/forms/vouchers.py:299 +msgid "Specific seat IDs" +msgstr "" + +#: pretix/control/forms/vouchers.py:313 +msgid "CSV input needs to contain a header row in the first line." +msgstr "" + +#: pretix/control/forms/vouchers.py:317 +#, python-brace-format +msgid "CSV input needs to contain a field with the header \"{header}\"." +msgstr "" + +#: pretix/control/forms/vouchers.py:320 +#, python-brace-format +msgid "CSV input contains an unknown field with the header \"{header}\"." +msgstr "" + +#: pretix/control/forms/vouchers.py:325 pretix/control/forms/vouchers.py:340 +#, python-brace-format +msgid "{value} is not a valid email address." +msgstr "" + +#: pretix/control/forms/vouchers.py:334 +#, python-brace-format +msgid "Invalid value in row {number}." +msgstr "" + +#: pretix/control/forms/vouchers.py:352 +msgid "A voucher with one of these codes already exists." +msgstr "" + +#: pretix/control/forms/vouchers.py:355 +msgid "" +"If vouchers should be sent by email, subject, message and recipients need to " +"be specified." +msgstr "" + +#: pretix/control/forms/vouchers.py:362 +#, python-brace-format +msgid "" +"You generated {codes} vouchers, but entered recipients for {recp} vouchers." +msgstr "" + +#: pretix/control/forms/vouchers.py:367 +msgid "You need to specify as many seats as voucher codes." +msgstr "" + +#: pretix/control/logdisplay.py:31 +msgid "The order has been changed:" +msgstr "" + +#: pretix/control/logdisplay.py:39 +#, python-brace-format +msgid "" +"Position #{posid}: {old_item} ({old_price}) changed to {new_item} " +"({new_price})." +msgstr "" + +#: pretix/control/logdisplay.py:47 +#, python-brace-format +msgid "Position #{posid}: Seat \"{old_seat}\" changed to \"{new_seat}\"." +msgstr "" + +#: pretix/control/logdisplay.py:55 +#, python-brace-format +msgid "" +"Position #{posid}: Event date \"{old_event}\" ({old_price}) changed to " +"\"{new_event}\" ({new_price})." +msgstr "" + +#: pretix/control/logdisplay.py:63 +#, python-brace-format +msgid "Price of position #{posid} changed from {old_price} to {new_price}." +msgstr "" + +#: pretix/control/logdisplay.py:71 +#, python-brace-format +msgid "Tax rule of position #{posid} changed from {old_rule} to {new_rule}." +msgstr "" + +#: pretix/control/logdisplay.py:78 +#, python-brace-format +msgid "Tax rule of fee #{fee} changed from {old_rule} to {new_rule}." +msgstr "" + +#: pretix/control/logdisplay.py:85 +msgid "A fee has been added" +msgstr "" + +#: pretix/control/logdisplay.py:87 +#, python-brace-format +msgid "A fee was changed from {old_price} to {new_price}." +msgstr "" + +#: pretix/control/logdisplay.py:92 +#, python-brace-format +msgid "A fee of {old_price} was removed." +msgstr "" + +#: pretix/control/logdisplay.py:99 +#, python-brace-format +msgid "Position #{posid} ({old_item}, {old_price}) canceled." +msgstr "" + +#: pretix/control/logdisplay.py:110 +#, python-brace-format +msgid "" +"Position #{posid} created: {item} ({price}) as an add-on to position " +"#{addon_to}." +msgstr "" + +#: pretix/control/logdisplay.py:117 +#, python-brace-format +msgid "Position #{posid} created: {item} ({price})." +msgstr "" + +#: pretix/control/logdisplay.py:123 +#, python-brace-format +msgid "A new secret has been generated for position #{posid}." +msgstr "" + +#: pretix/control/logdisplay.py:135 +#, python-brace-format +msgid "" +"Position #{posid} ({old_item}, {old_price}) split into new order: {order}" +msgstr "" + +#: pretix/control/logdisplay.py:142 +#, python-brace-format +msgid "This order has been created by splitting the order {order}" +msgstr "" + +#: pretix/control/logdisplay.py:161 pretix/control/logdisplay.py:163 +#: pretix/control/logdisplay.py:493 pretix/control/logdisplay.py:495 +#: pretix/control/logdisplay.py:514 pretix/control/logdisplay.py:516 +msgid "(unknown)" +msgstr "" + +#: pretix/control/logdisplay.py:168 +#, python-brace-format +msgid "" +"Unknown scan of code \"{barcode}…\" at {datetime} for list \"{list}\", type " +"\"{type}\"." +msgstr "" + +#: pretix/control/logdisplay.py:178 +#, python-brace-format +msgid "" +"Unknown scan of code \"{barcode}…\" for list \"{list}\", type \"{type}\"." +msgstr "" + +#: pretix/control/logdisplay.py:189 +#, python-brace-format +msgid "" +"Scan scan of revoked code \"{barcode}…\" at {datetime} for list \"{list}\", " +"type \"{type}\", was uploaded." +msgstr "" + +#: pretix/control/logdisplay.py:199 +#, python-brace-format +msgid "" +"Scan of revoked code \"{barcode}\" for list \"{list}\", type \"{type}\", was " +"uploaded." +msgstr "" + +#: pretix/control/logdisplay.py:210 +#, python-brace-format +msgid "" +"Denied scan of position #{posid} at {datetime} for list \"{list}\", type " +"\"{type}\", error code \"{errorcode}\"." +msgstr "" + +#: pretix/control/logdisplay.py:221 +#, python-brace-format +msgid "" +"Denied scan of position #{posid} for list \"{list}\", type \"{type}\", error " +"code \"{errorcode}\"." +msgstr "" + +#: pretix/control/logdisplay.py:231 +#, python-brace-format +msgid "" +"Position #{posid} has been checked out at {datetime} for list \"{list}\"." +msgstr "" + +#: pretix/control/logdisplay.py:237 +#, python-brace-format +msgid "Position #{posid} has been checked out for list \"{list}\"." +msgstr "" + +#: pretix/control/logdisplay.py:243 +#, python-brace-format +msgid "" +"Position #{posid} has been checked in at {datetime} for list \"{list}\"." +msgstr "" + +#: pretix/control/logdisplay.py:249 +#, python-brace-format +msgid "Position #{posid} has been checked in for list \"{list}\"." +msgstr "" + +#: pretix/control/logdisplay.py:256 +#, 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:264 +#, 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:275 +msgid "This object has been created by cloning." +msgstr "" + +#: pretix/control/logdisplay.py:276 +msgid "The organizer has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:277 +msgid "The organizer settings have been changed." +msgstr "" + +#: pretix/control/logdisplay.py:278 +msgid "Gift card acceptance for another organizer has been added." +msgstr "" + +#: pretix/control/logdisplay.py:279 +msgid "Gift card acceptance for another organizer has been removed." +msgstr "" + +#: pretix/control/logdisplay.py:280 +msgid "The webhook has been created." +msgstr "" + +#: pretix/control/logdisplay.py:281 +msgid "The webhook has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:282 +msgid "The event's internal comment has been updated." +msgstr "" + +#: pretix/control/logdisplay.py:283 +msgid "The event has been canceled." +msgstr "" + +#: pretix/control/logdisplay.py:284 +msgid "An event has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:285 +msgid "The order details have been changed." +msgstr "" + +#: pretix/control/logdisplay.py:286 +msgid "The order has been marked as unpaid." +msgstr "" + +#: pretix/control/logdisplay.py:287 +msgid "The order's secret has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:288 +msgid "The order's expiry date has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:289 pretix/control/views/orders.py:1167 +msgid "The order has been marked as expired." +msgstr "" + +#: pretix/control/logdisplay.py:290 +msgid "The order has been marked as paid." +msgstr "" + +#: pretix/control/logdisplay.py:291 +msgid "The cancellation request has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:292 +msgid "The order has been refunded." +msgstr "" + +#: pretix/control/logdisplay.py:293 pretix/control/views/orders.py:1164 +#: pretix/presale/views/order.py:882 +msgid "The order has been canceled." +msgstr "" + +#: pretix/control/logdisplay.py:294 pretix/control/views/orders.py:1446 +msgid "The order has been reactivated." +msgstr "" + +#: pretix/control/logdisplay.py:295 +#, python-brace-format +msgid "The test mode order {code} has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:296 +msgid "The order has been created." +msgstr "" + +#: pretix/control/logdisplay.py:297 +msgid "The order requires approval before it can continue to be processed." +msgstr "" + +#: pretix/control/logdisplay.py:298 pretix/control/views/orders.py:478 +msgid "The order has been approved." +msgstr "" + +#: pretix/control/logdisplay.py:299 +msgid "The order has been denied." +msgstr "" + +#: pretix/control/logdisplay.py:300 +#, python-brace-format +msgid "" +"The email address has been changed from \"{old_email}\" to \"{new_email}\"." +msgstr "" + +#: pretix/control/logdisplay.py:302 +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:304 +#, python-brace-format +msgid "" +"The phone number has been changed from \"{old_phone}\" to \"{new_phone}\"." +msgstr "" + +#: pretix/control/logdisplay.py:306 +msgid "The order locale has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:307 pretix/control/views/orders.py:1203 +#: pretix/presale/views/order.py:671 pretix/presale/views/order.py:736 +msgid "The invoice has been generated." +msgstr "" + +#: pretix/control/logdisplay.py:308 pretix/control/views/orders.py:1276 +msgid "The invoice has been regenerated." +msgstr "" + +#: pretix/control/logdisplay.py:309 pretix/control/views/orders.py:1305 +#: pretix/presale/views/order.py:749 +msgid "The invoice has been reissued." +msgstr "" + +#: pretix/control/logdisplay.py:310 +msgid "The order's internal comment has been updated." +msgstr "" + +#: pretix/control/logdisplay.py:311 +msgid "The order's flag to require attention at check-in has been toggled." +msgstr "" + +#: pretix/control/logdisplay.py:313 +#, python-brace-format +msgid "A new payment {local_id} has been started instead of the previous one." +msgstr "" + +#: pretix/control/logdisplay.py:314 +msgid "An unidentified type email has been sent." +msgstr "" + +#: pretix/control/logdisplay.py:315 +msgid "Sending of an email has failed." +msgstr "" + +#: pretix/control/logdisplay.py:316 +msgid "" +"The email has been sent without attachments since they would have been too " +"large to be likely to arrive." +msgstr "" + +#: pretix/control/logdisplay.py:318 +msgid "A custom email has been sent." +msgstr "" + +#: pretix/control/logdisplay.py:319 +msgid "A custom email has been sent to an attendee." +msgstr "" + +#: pretix/control/logdisplay.py:320 +msgid "" +"An email has been sent with a reminder that the ticket is available for " +"download." +msgstr "" + +#: pretix/control/logdisplay.py:322 +msgid "" +"An email has been sent with a warning that the order is about to expire." +msgstr "" + +#: pretix/control/logdisplay.py:324 +msgid "" +"An email has been sent to notify the user that the order has been canceled." +msgstr "" + +#: pretix/control/logdisplay.py:325 +msgid "" +"An email has been sent to notify the user that the event has been canceled." +msgstr "" + +#: pretix/control/logdisplay.py:327 +msgid "" +"An email has been sent to notify the user that the order has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:328 +msgid "" +"An email has been sent to notify the user that the order has been received." +msgstr "" + +#: pretix/control/logdisplay.py:329 +msgid "" +"An email has been sent to notify the user that payment has been received." +msgstr "" + +#: pretix/control/logdisplay.py:330 +msgid "" +"An email has been sent to notify the user that the order has been denied." +msgstr "" + +#: pretix/control/logdisplay.py:331 +msgid "" +"An email has been sent to notify the user that the order has been approved." +msgstr "" + +#: pretix/control/logdisplay.py:333 +msgid "" +"An email has been sent to notify the user that the order has been received " +"and requires payment." +msgstr "" + +#: pretix/control/logdisplay.py:334 +msgid "" +"An email has been sent to notify the user that the order has been received " +"and requires approval." +msgstr "" + +#: pretix/control/logdisplay.py:337 +msgid "" +"An email with a link to the order detail page has been resent to the user." +msgstr "" + +#: pretix/control/logdisplay.py:338 +#, python-brace-format +msgid "Payment {local_id} has been confirmed." +msgstr "" + +#: pretix/control/logdisplay.py:339 +#, python-brace-format +msgid "Payment {local_id} has been canceled." +msgstr "" + +#: pretix/control/logdisplay.py:340 +#, python-brace-format +msgid "Canceling payment {local_id} has failed." +msgstr "" + +#: pretix/control/logdisplay.py:341 +#, python-brace-format +msgid "Payment {local_id} has been started." +msgstr "" + +#: pretix/control/logdisplay.py:342 +#, python-brace-format +msgid "Payment {local_id} has failed." +msgstr "" + +#: pretix/control/logdisplay.py:343 +#, python-brace-format +msgid "The order could not be marked as paid: {message}" +msgstr "" + +#: pretix/control/logdisplay.py:344 +msgid "The order has been overpaid." +msgstr "" + +#: pretix/control/logdisplay.py:345 +#, python-brace-format +msgid "Refund {local_id} has been created." +msgstr "" + +#: pretix/control/logdisplay.py:346 +#, python-brace-format +msgid "Refund {local_id} has been created by an external entity." +msgstr "" + +#: pretix/control/logdisplay.py:347 +msgid "The customer requested you to issue a refund." +msgstr "" + +#: pretix/control/logdisplay.py:348 +#, python-brace-format +msgid "Refund {local_id} has been completed." +msgstr "" + +#: pretix/control/logdisplay.py:349 +#, python-brace-format +msgid "Refund {local_id} has been canceled." +msgstr "" + +#: pretix/control/logdisplay.py:350 +#, python-brace-format +msgid "Refund {local_id} has failed." +msgstr "" + +#: pretix/control/logdisplay.py:351 +msgid "The user has been created." +msgstr "" + +#: pretix/control/logdisplay.py:352 pretix/control/views/user.py:440 +#: pretix/control/views/user.py:500 pretix/control/views/user.py:537 +msgid "Two-factor authentication has been enabled." +msgstr "" + +#: pretix/control/logdisplay.py:353 pretix/control/views/user.py:327 +#: pretix/control/views/user.py:553 +msgid "Two-factor authentication has been disabled." +msgstr "" + +#: pretix/control/logdisplay.py:354 pretix/control/views/user.py:570 +msgid "Your two-factor emergency codes have been regenerated." +msgstr "" + +#: pretix/control/logdisplay.py:355 +#, python-brace-format +msgid "" +"A new two-factor authentication device \"{name}\" has been added to your " +"account." +msgstr "" + +#: pretix/control/logdisplay.py:357 +#, python-brace-format +msgid "" +"The two-factor authentication device \"{name}\" has been removed from your " +"account." +msgstr "" + +#: pretix/control/logdisplay.py:359 +msgid "Notifications have been enabled." +msgstr "" + +#: pretix/control/logdisplay.py:360 +msgid "Notifications have been disabled." +msgstr "" + +#: pretix/control/logdisplay.py:361 +msgid "Your notification settings have been changed." +msgstr "" + +#: pretix/control/logdisplay.py:362 +msgid "This user has been anonymized." +msgstr "" + +#: pretix/control/logdisplay.py:365 +msgid "Password reset mail sent." +msgstr "" + +#: pretix/control/logdisplay.py:366 +msgid "The password has been reset." +msgstr "" + +#: pretix/control/logdisplay.py:367 +msgid "" +"A repeated password reset has been denied, as the last request was less than " +"24 hours ago." +msgstr "" + +#: pretix/control/logdisplay.py:369 +#, python-brace-format +msgid "The organizer \"{name}\" has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:370 +msgid "The voucher has been created." +msgstr "" + +#: pretix/control/logdisplay.py:372 +msgid "The voucher has been created and sent to a person on the waiting list." +msgstr "" + +#: pretix/control/logdisplay.py:373 +msgid "The voucher has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:374 +msgid "The voucher has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:375 +#, python-brace-format +msgid "The voucher has been redeemed in order {order_code}." +msgstr "" + +#: pretix/control/logdisplay.py:376 +msgid "The product has been created." +msgstr "" + +#: pretix/control/logdisplay.py:377 +msgid "The product has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:378 +msgid "The product has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:379 +#, python-brace-format +msgid "The variation \"{value}\" has been created." +msgstr "" + +#: pretix/control/logdisplay.py:380 +#, python-brace-format +msgid "The variation \"{value}\" has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:381 +#, python-brace-format +msgid "The variation \"{value}\" has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:382 +msgid "An add-on has been added to this product." +msgstr "" + +#: pretix/control/logdisplay.py:383 +msgid "An add-on has been removed from this product." +msgstr "" + +#: pretix/control/logdisplay.py:384 +msgid "An add-on has been changed on this product." +msgstr "" + +#: pretix/control/logdisplay.py:385 +msgid "A bundled item has been added to this product." +msgstr "" + +#: pretix/control/logdisplay.py:386 +msgid "A bundled item has been removed from this product." +msgstr "" + +#: pretix/control/logdisplay.py:387 +msgid "A bundled item has been changed on this product." +msgstr "" + +#: pretix/control/logdisplay.py:388 +msgid "The quota has been added." +msgstr "" + +#: pretix/control/logdisplay.py:389 +msgid "The quota has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:390 +msgid "The quota has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:391 +msgid "The quota has closed." +msgstr "" + +#: pretix/control/logdisplay.py:392 pretix/control/views/item.py:908 +msgid "The quota has been re-opened." +msgstr "" + +#: pretix/control/logdisplay.py:393 +msgid "The category has been added." +msgstr "" + +#: pretix/control/logdisplay.py:394 +msgid "The category has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:395 +msgid "The category has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:396 +msgid "The question has been added." +msgstr "" + +#: pretix/control/logdisplay.py:397 +msgid "The question has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:398 +msgid "The question has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:399 +msgid "The tax rule has been added." +msgstr "" + +#: pretix/control/logdisplay.py:400 +msgid "The tax rule has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:401 +msgid "The tax rule has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:402 +msgid "The check-in list has been added." +msgstr "" + +#: pretix/control/logdisplay.py:403 +msgid "The check-in list has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:404 +msgid "The check-in list has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:405 +msgid "The event settings have been changed." +msgstr "" + +#: pretix/control/logdisplay.py:406 +msgid "The ticket download settings have been changed." +msgstr "" + +#: pretix/control/logdisplay.py:407 +msgid "A plugin has been enabled." +msgstr "" + +#: pretix/control/logdisplay.py:408 +msgid "A plugin has been disabled." +msgstr "" + +#: pretix/control/logdisplay.py:409 +msgid "The shop has been taken live." +msgstr "" + +#: pretix/control/logdisplay.py:410 +msgid "The shop has been taken offline." +msgstr "" + +#: pretix/control/logdisplay.py:411 +msgid "The shop has been taken into test mode." +msgstr "" + +#: pretix/control/logdisplay.py:412 +msgid "The test mode has been disabled." +msgstr "" + +#: pretix/control/logdisplay.py:413 +msgid "The event has been created." +msgstr "" + +#: pretix/control/logdisplay.py:414 +msgid "The event details have been changed." +msgstr "" + +#: pretix/control/logdisplay.py:415 +msgid "An answer option has been added to the question." +msgstr "" + +#: pretix/control/logdisplay.py:416 +msgid "An answer option has been removed from the question." +msgstr "" + +#: pretix/control/logdisplay.py:417 +msgid "An answer option has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:418 +msgid "A user has been added to the event team." +msgstr "" + +#: pretix/control/logdisplay.py:419 +msgid "A user has been invited to the event team." +msgstr "" + +#: pretix/control/logdisplay.py:420 +msgid "A user's permissions have been changed." +msgstr "" + +#: pretix/control/logdisplay.py:421 +msgid "A user has been removed from the event team." +msgstr "" + +#: pretix/control/logdisplay.py:422 +msgid "A voucher has been sent to a person on the waiting list." +msgstr "" + +#: pretix/control/logdisplay.py:423 +msgid "An entry has been removed from the waiting list." +msgstr "" + +#: pretix/control/logdisplay.py:424 +msgid "An entry has been changed on the waiting list." +msgstr "" + +#: pretix/control/logdisplay.py:425 +msgid "An entry has been added to the waiting list." +msgstr "" + +#: pretix/control/logdisplay.py:426 +msgid "The team has been created." +msgstr "" + +#: pretix/control/logdisplay.py:427 +msgid "The team settings have been changed." +msgstr "" + +#: pretix/control/logdisplay.py:428 +msgid "The team has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:429 pretix/control/views/organizer.py:1279 +msgid "The gate has been created." +msgstr "" + +#: pretix/control/logdisplay.py:430 +msgid "The gate has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:431 +msgid "The gate has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:432 +msgctxt "subevent" +msgid "The event date has been deleted." +msgstr "" + +#: pretix/control/logdisplay.py:433 +msgctxt "subevent" +msgid "The event date has been canceled." +msgstr "" + +#: pretix/control/logdisplay.py:434 +msgctxt "subevent" +msgid "The event date has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:435 +msgctxt "subevent" +msgid "The event date has been created." +msgstr "" + +#: pretix/control/logdisplay.py:436 +msgctxt "subevent" +msgid "A quota has been added to the event date." +msgstr "" + +#: pretix/control/logdisplay.py:437 +msgctxt "subevent" +msgid "A quota has been changed on the event date." +msgstr "" + +#: pretix/control/logdisplay.py:438 +msgctxt "subevent" +msgid "A quota has been removed from the event date." +msgstr "" + +#: pretix/control/logdisplay.py:439 +msgid "The device has been created." +msgstr "" + +#: pretix/control/logdisplay.py:440 +msgid "The device has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:441 +msgid "Access of the device has been revoked." +msgstr "" + +#: pretix/control/logdisplay.py:442 +msgid "The device has been initialized." +msgstr "" + +#: pretix/control/logdisplay.py:443 +msgid "The access token of the device has been regenerated." +msgstr "" + +#: pretix/control/logdisplay.py:444 +msgid "The device has notified the server of an hardware or software update." +msgstr "" + +#: pretix/control/logdisplay.py:445 +msgid "The gift card has been created." +msgstr "" + +#: pretix/control/logdisplay.py:446 pretix/control/views/organizer.py:1132 +msgid "The gift card has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:447 +msgid "A manual transaction has been performed." +msgstr "" + +#: pretix/control/logdisplay.py:471 +msgid "The settings of a payment provider have been changed." +msgstr "" + +#: pretix/control/logdisplay.py:474 +msgid "The settings of a ticket output provider have been changed." +msgstr "" + +#: pretix/control/logdisplay.py:477 +msgid "The user confirmed the following message: \"{}\"" +msgstr "" + +#: pretix/control/logdisplay.py:498 +#, python-brace-format +msgid "" +"Position #{posid} has been checked in manually at {datetime} on list " +"\"{list}\"." +msgstr "" + +#: pretix/control/logdisplay.py:503 +#, python-brace-format +msgid "" +"Position #{posid} has been checked in again at {datetime} on list \"{list}\"." +msgstr "" + +#: pretix/control/logdisplay.py:518 +#, python-brace-format +msgid "The check-in of position #{posid} on list \"{list}\" has been reverted." +msgstr "" + +#: pretix/control/logdisplay.py:524 +#, python-brace-format +msgid "{user} has been added to the team." +msgstr "" + +#: pretix/control/logdisplay.py:527 +#, python-brace-format +msgid "{user} has been removed from the team." +msgstr "" + +#: pretix/control/logdisplay.py:530 +#, python-brace-format +msgid "{user} has joined the team using the invite sent to {email}." +msgstr "" + +#: pretix/control/logdisplay.py:535 +#, python-brace-format +msgid "{user} has been invited to the team." +msgstr "" + +#: pretix/control/logdisplay.py:538 +#, python-brace-format +msgid "Invite for {user} has been resent." +msgstr "" + +#: pretix/control/logdisplay.py:541 +#, python-brace-format +msgid "The invite for {user} has been revoked." +msgstr "" + +#: pretix/control/logdisplay.py:544 +#, python-brace-format +msgid "The token \"{name}\" has been created." +msgstr "" + +#: pretix/control/logdisplay.py:547 +#, python-brace-format +msgid "The token \"{name}\" has been revoked." +msgstr "" + +#: pretix/control/logdisplay.py:550 +msgid "Your account settings have been changed." +msgstr "" + +#: pretix/control/logdisplay.py:552 pretix/control/views/user.py:198 +#, python-brace-format +msgid "Your email address has been changed to {email}." +msgstr "" + +#: pretix/control/logdisplay.py:554 pretix/control/views/user.py:195 +msgid "Your password has been changed." +msgstr "" + +#: pretix/control/logdisplay.py:556 +msgid "Your account has been enabled." +msgstr "" + +#: pretix/control/logdisplay.py:558 +msgid "Your account has been disabled." +msgstr "" + +#: pretix/control/logdisplay.py:562 +msgid "You impersonated {}." +msgstr "" + +#: pretix/control/logdisplay.py:565 +msgid "You stopped impersonating {}." +msgstr "" + +#: pretix/control/middleware.py:111 +msgid "" +"The selected event was not found or you have no permission to administrate " +"it." +msgstr "" + +#: pretix/control/middleware.py:123 +msgid "" +"The selected organizer was not found or you have no permission to " +"administrate it." +msgstr "" + +#: pretix/control/navigation.py:16 pretix/control/navigation.py:299 +#: pretix/control/templates/pretixcontrol/dashboard.html:3 +#: pretix/control/templates/pretixcontrol/dashboard.html:5 +msgid "Dashboard" +msgstr "" + +#: pretix/control/navigation.py:28 pretix/control/navigation.py:329 +#: pretix/control/navigation.py:424 +#: pretix/control/templates/pretixcontrol/checkin/list_edit.html:28 +#: pretix/control/templates/pretixcontrol/event/mail.html:13 +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:25 +#: pretix/control/templates/pretixcontrol/item/index.html:12 +#: pretix/control/templates/pretixcontrol/items/question_edit.html:24 +#: pretix/control/templates/pretixcontrol/organizers/device_edit.html:18 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:29 +msgid "General" +msgstr "" + +#: pretix/control/navigation.py:36 +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:151 +#: pretix/control/templates/pretixcontrol/order/index.html:712 +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:36 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:67 +#: pretix/presale/templates/pretixpresale/event/order.html:81 +msgid "Payment" +msgstr "" + +#: pretix/control/navigation.py:52 pretix/control/views/event.py:1365 +#: pretix/control/views/event.py:1367 pretix/control/views/event.py:1398 +#: pretix/control/views/event.py:1403 +#: pretix/presale/templates/pretixpresale/organizers/index.html:133 +#: pretix/presale/templates/pretixpresale/organizers/index.html:135 +msgid "Tickets" +msgstr "" + +#: pretix/control/navigation.py:68 +#: pretix/control/templates/pretixcontrol/event/tax_index.html:3 +#: pretix/control/templates/pretixcontrol/event/tax_index.html:5 +msgid "Tax rules" +msgstr "" + +#: pretix/control/navigation.py:76 +msgid "Invoicing" +msgstr "" + +#: pretix/control/navigation.py:84 +msgctxt "action" +msgid "Cancellation" +msgstr "" + +#: pretix/control/navigation.py:92 +#: pretix/control/templates/pretixcontrol/event/widget.html:8 +msgid "Widget" +msgstr "" + +#: pretix/control/navigation.py:105 pretix/control/navigation.py:382 +#: pretix/control/navigation.py:417 +#: pretix/control/templates/pretixcontrol/event/payment.html:41 +msgid "Settings" +msgstr "" + +#: pretix/control/navigation.py:153 +msgid "Categories" +msgstr "" + +#: pretix/control/navigation.py:182 +msgid "Overview" +msgstr "" + +#: pretix/control/navigation.py:190 +#: pretix/control/templates/pretixcontrol/order/index.html:699 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:7 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:9 +#: pretix/presale/templates/pretixpresale/event/order.html:128 +msgid "Refunds" +msgstr "" + +#: pretix/control/navigation.py:198 pretix/control/navigation.py:493 +msgid "Export" +msgstr "" + +#: pretix/control/navigation.py:216 +msgid "Import" +msgstr "" + +#: pretix/control/navigation.py:245 +msgid "All vouchers" +msgstr "" + +#: pretix/control/navigation.py:253 +msgid "Tags" +msgstr "" + +#: pretix/control/navigation.py:265 +msgctxt "navigation" +msgid "Check-in" +msgstr "" + +#: pretix/control/navigation.py:274 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:3 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:5 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:72 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:501 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:254 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:143 +#: pretix/plugins/checkinlists/apps.py:10 +msgid "Check-in lists" +msgstr "" + +#: pretix/control/navigation.py:317 +#: pretix/control/templates/pretixcontrol/orders/search.html:7 +#: pretix/control/templates/pretixcontrol/orders/search.html:9 +#: pretix/control/templates/pretixcontrol/search/orders.html:7 +#: pretix/control/templates/pretixcontrol/search/orders.html:9 +msgid "Order search" +msgstr "" + +#: pretix/control/navigation.py:323 +msgid "User settings" +msgstr "" + +#: pretix/control/navigation.py:334 +#: pretix/control/templates/pretixcontrol/user/settings.html:16 +msgid "Notifications" +msgstr "" + +#: pretix/control/navigation.py:339 +msgid "2FA" +msgstr "" + +#: pretix/control/navigation.py:344 +msgid "Authorized apps" +msgstr "" + +#: pretix/control/navigation.py:349 +#: pretix/control/templates/pretixcontrol/user/history.html:4 +#: pretix/control/templates/pretixcontrol/user/history.html:6 +#: pretix/control/templates/pretixcontrol/user/history.html:10 +#: pretix/control/templates/pretixcontrol/user/settings.html:70 +msgid "Account history" +msgstr "" + +#: pretix/control/navigation.py:364 +msgid "All users" +msgstr "" + +#: pretix/control/navigation.py:369 +#: pretix/control/templates/pretixcontrol/user/staff_session_list.html:5 +#: pretix/control/templates/pretixcontrol/user/staff_session_list.html:7 +msgid "Admin sessions" +msgstr "" + +#: pretix/control/navigation.py:376 +#: pretix/control/templates/pretixcontrol/global_settings_base.html:5 +#: pretix/control/templates/pretixcontrol/global_settings_base.html:7 +msgid "Global settings" +msgstr "" + +#: pretix/control/navigation.py:387 +msgid "Update check" +msgstr "" + +#: pretix/control/navigation.py:431 +#: pretix/control/templates/pretixcontrol/organizers/properties.html:5 +msgid "Event metadata" +msgstr "" + +#: pretix/control/navigation.py:438 +#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:6 +msgid "Webhooks" +msgstr "" + +#: pretix/control/navigation.py:469 pretix/control/navigation.py:476 +msgid "Devices" +msgstr "" + +#: pretix/control/permissions.py:37 pretix/control/permissions.py:74 +#: pretix/control/permissions.py:105 pretix/control/permissions.py:122 +msgid "You do not have permission to view this content." +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/base.html:45 +#: pretix/control/templates/pretixcontrol/base.html:339 +#, python-format +msgid "You are currently working on behalf of %(user)s." +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/base.html:50 +#: pretix/control/templates/pretixcontrol/base.html:344 +msgid "Stop impersonating" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/forgot.html:14 +msgid "Send recovery information" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/invite.html:7 +msgid "Accept an invitation" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/invite.html:10 +#, python-format +msgid "" +"If you already have an account on this site with a different email address, " +"you can log in first and then click this link again to " +"accept the invitation with your existing account." +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/invite.html:23 +#: pretix/control/templates/pretixcontrol/auth/register.html:18 +msgid "Login" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/invite.html:27 +#: pretix/control/templates/pretixcontrol/auth/login.html:43 +#: pretix/control/templates/pretixcontrol/auth/register.html:22 +msgid "Register" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/login.html:27 +msgid "Log in" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/login.html:38 +msgid "Lost password?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/login_2fa.html:9 +#: pretix/control/templates/pretixcontrol/user/reauth.html:9 +msgid "Welcome back!" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/login_2fa.html:11 +msgid "" +"You configured your account to require authentication with a second medium, " +"e.g. your phone. Please enter your verification code here:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/login_2fa.html:14 +msgid "Token" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/login_2fa.html:18 +#: pretix/control/templates/pretixcontrol/user/reauth.html:22 +msgid "" +"WebAuthn failed. Check that the correct authentication device is correctly " +"plugged in." +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/login_2fa.html:22 +msgid "" +"Alternatively, connect your WebAuthn device. If it has a button, touch it " +"now. You might have to unplug the device and plug it back in again." +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/login_2fa.html:27 +#: pretix/control/templates/pretixcontrol/events/create_base.html:19 +#: pretix/control/templates/pretixcontrol/order/refund_start.html:56 +#: pretix/control/templates/pretixcontrol/shredder/download.html:60 +#: pretix/control/templates/pretixcontrol/shredder/index.html:78 +#: pretix/control/templates/pretixcontrol/user/2fa_add.html:14 +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:79 +#: pretix/control/templates/pretixcontrol/user/reauth.html:32 +#: 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:36 +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 +#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 +#: pretix/presale/templates/pretixpresale/event/index.html:72 +#: pretix/presale/templates/pretixpresale/event/order_pay.html:27 +#: pretix/presale/templates/pretixpresale/event/order_pay_change.html:60 +msgid "Continue" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:8 +msgid "Authorize an application" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:18 +#, python-format +msgid "" +"Do you really want to grant the application %(application)s " +"access to your account?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:24 +#, python-format +msgid "You are currently logged in as %(user)s." +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:28 +msgid "The application requires the following permissions:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:35 +msgid "" +"Please select the organizer accounts this application should get access to:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:41 +msgid "" +"This application has been reviewed, but granting access to your account is " +"at your own risk." +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:53 +msgid "Error:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/recover.html:7 +msgid "Set new password" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/recover.html:15 +#: pretix/control/templates/pretixcontrol/checkin/list_edit.html:78 +#: pretix/control/templates/pretixcontrol/event/cancel.html:56 +#: pretix/control/templates/pretixcontrol/event/invoicing.html:63 +#: pretix/control/templates/pretixcontrol/event/mail.html:94 +#: pretix/control/templates/pretixcontrol/event/payment.html:80 +#: pretix/control/templates/pretixcontrol/event/payment_provider.html:36 +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:201 +#: pretix/control/templates/pretixcontrol/event/settings.html:322 +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:136 +#: pretix/control/templates/pretixcontrol/event/tickets.html:72 +#: pretix/control/templates/pretixcontrol/global_settings.html:12 +#: pretix/control/templates/pretixcontrol/global_update.html:86 +#: pretix/control/templates/pretixcontrol/item/index.html:130 +#: pretix/control/templates/pretixcontrol/items/category.html:37 +#: pretix/control/templates/pretixcontrol/items/question_edit.html:146 +#: pretix/control/templates/pretixcontrol/items/quota_edit.html:47 +#: pretix/control/templates/pretixcontrol/oauth/app_register.html:12 +#: pretix/control/templates/pretixcontrol/oauth/app_update.html:12 +#: pretix/control/templates/pretixcontrol/order/change_contact.html:28 +#: pretix/control/templates/pretixcontrol/order/change_locale.html:33 +#: pretix/control/templates/pretixcontrol/order/change_questions.html:86 +#: pretix/control/templates/pretixcontrol/order/extend.html:28 +#: pretix/control/templates/pretixcontrol/organizers/create.html:17 +#: pretix/control/templates/pretixcontrol/organizers/device_edit.html:30 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:90 +#: pretix/control/templates/pretixcontrol/organizers/gate_edit.html:15 +#: pretix/control/templates/pretixcontrol/organizers/giftcard_create.html:17 +#: pretix/control/templates/pretixcontrol/organizers/giftcard_edit.html:20 +#: pretix/control/templates/pretixcontrol/organizers/property_edit.html:15 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:44 +#: pretix/control/templates/pretixcontrol/organizers/webhook_edit.html:20 +#: pretix/control/templates/pretixcontrol/pdf/index.html:425 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:584 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:348 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:240 +#: pretix/control/templates/pretixcontrol/user/notifications.html:85 +#: pretix/control/templates/pretixcontrol/user/settings.html:81 +#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:13 +#: pretix/control/templates/pretixcontrol/users/create.html:25 +#: pretix/control/templates/pretixcontrol/users/form.html:65 +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:91 +#: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 +#: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 +#: pretix/plugins/returnurl/templates/returnurl/settings.html:24 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 +msgid "Save" +msgstr "" + +#: pretix/control/templates/pretixcontrol/auth/register.html:7 +msgid "Create a new account" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:98 +msgid "Toggle navigation" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:113 +#: pretix/control/templates/pretixcontrol/base.html:136 +#: pretix/control/templates/pretixcontrol/base.html:140 +#: pretix/control/templates/pretixcontrol/base.html:141 +msgid "Go to shop" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:119 +#: pretix/control/templates/pretixcontrol/base.html:147 +#: pretix/control/templates/pretixcontrol/base.html:148 +msgid "Public profile" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:199 +msgid "End admin session" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:211 +msgid "Account Settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:216 +#: pretix/control/templates/pretixcontrol/base.html:218 +msgid "Log out" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:244 +msgid "Organizer account" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:267 +msgid "Search for events" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:324 +msgid "" +"Please leave a short comment on what you did in the following admin sessions:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:355 +msgid "Read more" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:372 +msgid "" +"Your event contains test mode orders even though " +"test mode has been disabled. You should delete those orders " +"to make sure they do not show up in your reports and statistics and block " +"people from actually buying tickets." +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:379 +msgid "Show all test mode orders" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:387 +msgid "The system automatically checks for updates in the background." +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:396 +msgid "" +"system is running in debug mode. For security reasons, please never run " +"debug mode on a production instance." +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:405 +#, python-format +msgid "Times displayed in %(tz)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:415 +msgid "running in development mode" +msgstr "" + +#: pretix/control/templates/pretixcontrol/base.html:431 +#: pretix/presale/templates/pretixpresale/fragment_modals.html:12 +#: pretix/presale/templates/pretixpresale/waiting.html:25 +msgid "If this takes longer than a few minutes, please contact us." +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:4 +#: pretix/control/templates/pretixcontrol/organizers/devices.html:34 +msgid "Device ID" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:6 +msgid "Receipt ID" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:11 +msgid "ID" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:15 +msgid "ZVT Terminal" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:16 +msgctxt "terminal_zvt" +msgid "Trace number" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:18 +msgctxt "terminal_zvt" +msgid "Payment type" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:20 +msgctxt "terminal_zvt" +msgid "Additional text" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:22 +msgctxt "terminal_zvt" +msgid "Turnover number" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:24 +msgctxt "terminal_zvt" +msgid "Receipt number" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:26 +msgctxt "terminal_zvt" +msgid "Card type" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:28 +msgctxt "terminal_zvt" +msgid "Card expiration" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:33 +msgid "Transaction Code" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:35 +msgid "Merchant Code" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:41 +#: pretix/control/templates/pretixcontrol/items/questions.html:22 +msgid "Type" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:43 +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:63 +msgid "Card Entry Mode" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +msgid "Card number" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:52 +msgid "Client Transaction Code" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:55 +msgid "Server Transaction Code" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:61 +msgid "Payment Application" +msgstr "" + +#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:69 +msgid "Authorization Code" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:7 +#: pretix/control/templates/pretixcontrol/checkin/index.html:11 +#: pretix/control/templates/pretixcontrol/checkin/list_edit.html:8 +#: pretix/control/templates/pretixcontrol/checkin/list_edit.html:15 +#, python-format +msgid "Check-in list: %(name)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:16 +msgid "Edit list configuration" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:22 +#: pretix/control/templates/pretixcontrol/orders/overview.html:20 +#: pretix/plugins/ticketoutputpdf/ticketoutput.py:30 +msgid "PDF" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:27 +msgid "CSV" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:44 +#: pretix/control/templates/pretixcontrol/event/logs.html:36 +#: pretix/control/templates/pretixcontrol/events/index.html:25 +#: pretix/control/templates/pretixcontrol/events/index.html:48 +#: pretix/control/templates/pretixcontrol/items/question.html:37 +#: pretix/control/templates/pretixcontrol/orders/overview.html:47 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:22 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:23 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:43 +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:38 +#: pretix/control/templates/pretixcontrol/organizers/index.html:18 +#: pretix/control/templates/pretixcontrol/organizers/logs.html:22 +#: pretix/control/templates/pretixcontrol/search/orders.html:33 +#: pretix/control/templates/pretixcontrol/subevents/index.html:44 +#: pretix/control/templates/pretixcontrol/users/index.html:22 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:54 +#: pretix/control/templates/pretixcontrol/vouchers/tags.html:22 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:123 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:80 +msgid "Filter" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:52 +msgid "No attendee record was found." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:84 +#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:29 +msgid "Timestamp" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:99 +msgid "unpaid" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:138 +msgid "Checked in but left" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:143 +msgid "Checked in automatically" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:154 +#, python-format +msgid "Exit: %(date)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:167 +msgid "Check-In selected attendees" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:170 +msgid "Check-Out selected attendees" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/index.html:173 +msgid "Revert selected check-ins" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/list_delete.html:4 +#: pretix/control/templates/pretixcontrol/checkin/list_delete.html:6 +msgid "Delete check-in list" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/list_delete.html:9 +#, python-format +msgid "" +"Are you sure you want to delete the check-in list %(name)s?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/list_delete.html:11 +#, python-format +msgid "" +"This will delete the information of %(num)s check-ins as " +"well." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/list_delete.html:18 +#: pretix/control/templates/pretixcontrol/event/tax_delete.html:17 +#: pretix/control/templates/pretixcontrol/item/delete.html:11 +#: pretix/control/templates/pretixcontrol/item/delete.html:38 +#: pretix/control/templates/pretixcontrol/items/category_delete.html:14 +#: pretix/control/templates/pretixcontrol/items/question_delete.html:18 +#: pretix/control/templates/pretixcontrol/items/quota_delete.html:37 +#: pretix/control/templates/pretixcontrol/oauth/app_delete.html:12 +#: pretix/control/templates/pretixcontrol/oauth/app_rollkeys.html:12 +#: pretix/control/templates/pretixcontrol/oauth/auth_revoke.html:12 +#: pretix/control/templates/pretixcontrol/order/change.html:362 +#: pretix/control/templates/pretixcontrol/order/change_contact.html:25 +#: pretix/control/templates/pretixcontrol/order/change_locale.html:30 +#: pretix/control/templates/pretixcontrol/order/change_questions.html:83 +#: pretix/control/templates/pretixcontrol/order/extend.html:25 +#: pretix/control/templates/pretixcontrol/order/pay.html:34 +#: pretix/control/templates/pretixcontrol/order/pay_complete.html:28 +#: pretix/control/templates/pretixcontrol/order/reactivate.html:31 +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:202 +#: pretix/control/templates/pretixcontrol/order/refund_done.html:26 +#: pretix/control/templates/pretixcontrol/order/refund_process.html:55 +#: pretix/control/templates/pretixcontrol/order/refund_start.html:51 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:104 +#: pretix/control/templates/pretixcontrol/organizers/device_revoke.html:21 +#: pretix/control/templates/pretixcontrol/organizers/gate_delete.html:12 +#: pretix/control/templates/pretixcontrol/organizers/property_delete.html:12 +#: pretix/control/templates/pretixcontrol/organizers/team_delete.html:10 +#: pretix/control/templates/pretixcontrol/organizers/team_delete.html:21 +#: pretix/control/templates/pretixcontrol/pdf/index.html:75 +#: pretix/control/templates/pretixcontrol/subevents/delete.html:12 +#: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:34 +#: pretix/control/templates/pretixcontrol/user/2fa_delete.html:18 +#: pretix/control/templates/pretixcontrol/user/2fa_disable.html:17 +#: pretix/control/templates/pretixcontrol/user/2fa_enable.html:18 +#: pretix/control/templates/pretixcontrol/user/2fa_regenemergency.html:17 +#: pretix/control/templates/pretixcontrol/vouchers/delete.html:12 +#: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 +#: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 +#: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 +#: pretix/presale/templates/pretixpresale/event/order_change.html:69 +#: pretix/presale/templates/pretixpresale/event/order_modify.html:79 +#: pretix/presale/templates/pretixpresale/event/order_pay.html:22 +#: pretix/presale/templates/pretixpresale/event/order_pay_change.html:54 +#: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:40 +msgid "Cancel" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/list_delete.html:21 +#: pretix/control/templates/pretixcontrol/event/delete.html:30 +#: pretix/control/templates/pretixcontrol/event/tax_delete.html:21 +#: pretix/control/templates/pretixcontrol/item/delete.html:41 +#: pretix/control/templates/pretixcontrol/items/category_delete.html:17 +#: pretix/control/templates/pretixcontrol/items/question_delete.html:21 +#: pretix/control/templates/pretixcontrol/items/quota_delete.html:40 +#: pretix/control/templates/pretixcontrol/order/index.html:37 +#: pretix/control/templates/pretixcontrol/organizers/delete.html:28 +#: pretix/control/templates/pretixcontrol/organizers/gate_delete.html:15 +#: pretix/control/templates/pretixcontrol/organizers/property_delete.html:15 +#: pretix/control/templates/pretixcontrol/organizers/team_delete.html:24 +#: pretix/control/templates/pretixcontrol/pdf/index.html:165 +#: pretix/control/templates/pretixcontrol/subevents/delete.html:15 +#: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:37 +#: pretix/control/templates/pretixcontrol/user/2fa_delete.html:21 +#: pretix/control/templates/pretixcontrol/vouchers/delete.html:15 +#: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:36 +#: pretix/control/templates/pretixcontrol/waitinglist/delete.html:15 +#: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:16 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:15 +msgid "Delete" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/list_edit.html:10 +#: pretix/control/templates/pretixcontrol/checkin/list_edit.html:17 +#: pretix/plugins/checkinlists/exporters.py:40 +#: pretix/plugins/checkinlists/exporters.py:108 +#: pretix/plugins/checkinlists/exporters.py:384 +#: pretix/plugins/checkinlists/exporters.py:573 +#: pretix/plugins/checkinlists/exporters.py:631 +msgid "Check-in list" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/list_edit.html:38 +#: pretix/control/templates/pretixcontrol/event/payment.html:72 +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:31 +#: pretix/control/templates/pretixcontrol/items/question_edit.html:122 +msgid "Advanced" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/list_edit.html:40 +msgid "" +"These settings on this page are intended for professional users with very " +"specific check-in situations. Please reach out to support if you have " +"questions about setting this up." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/list_edit.html:47 +msgid "" +"Make sure to always use the latest version of our scanning apps for these " +"options to work." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/list_edit.html:52 +msgid "" +"If you make use of these advanced options, we recommend using our Android " +"and Desktop apps. Custom check-in rules do not work offline with our iOS " +"scanning app." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/list_edit.html:67 +msgid "Custom check-in rule" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/lists.html:7 +msgid "" +"You can create check-in lists that you can use e.g. at the entrance of your " +"event to track who is coming and if they actually bought a ticket. You can " +"do this process by printing out the list on paper, using this web interface " +"or by using one of our mobile or desktop apps to automatically scan tickets." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/lists.html:14 +msgid "" +"You can create multiple check-in lists to separate multiple parts of your " +"event, for example if you have separate entries for multiple ticket types. " +"Different check-in lists are completely independent: If a ticket shows up on " +"two lists, it is valid once on every list. This might be useful if you run a " +"festival with festival passes that allow access to every or multiple " +"performances as well as tickets only valid for single performances." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/lists.html:23 +msgid "" +"If you have the appropriate organizer-level permissions, you can connect new " +"devices to your account and use them to validate tickets. Since the devices " +"are connected on the organizer level, you do not have to create a new device " +"for every event but can reuse them over and over again." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/lists.html:40 +msgid "Your search did not match any check-in lists." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/lists.html:42 +msgid "You haven't created any check-in lists yet." +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/lists.html:50 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:61 +msgid "Create a new check-in list" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/lists.html:54 +#: pretix/control/templates/pretixcontrol/checkin/lists.html:65 +#: pretix/control/templates/pretixcontrol/organizers/devices.html:6 +msgid "Connected devices" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/lists.html:77 +msgid "Automated check-in" +msgstr "" + +#: pretix/control/templates/pretixcontrol/checkin/lists.html:133 +#: pretix/control/templates/pretixcontrol/items/categories.html:49 +#: pretix/control/templates/pretixcontrol/items/index.html:114 +#: pretix/control/templates/pretixcontrol/items/quotas.html:89 +#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:72 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:69 +msgid "Clone" +msgstr "" + +#: pretix/control/templates/pretixcontrol/dashboard.html:9 +msgid "Go to event" +msgstr "" + +#: pretix/control/templates/pretixcontrol/dashboard.html:15 +msgid "Your upcoming events" +msgstr "" + +#: pretix/control/templates/pretixcontrol/dashboard.html:20 +#: pretix/control/templates/pretixcontrol/events/create_base.html:4 +#: pretix/control/templates/pretixcontrol/events/create_base.html:6 +#: pretix/control/templates/pretixcontrol/events/index.html:19 +#: pretix/control/templates/pretixcontrol/events/index.html:57 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:12 +msgid "Create a new event" +msgstr "" + +#: pretix/control/templates/pretixcontrol/dashboard.html:39 +msgid "View all upcoming events" +msgstr "" + +#: pretix/control/templates/pretixcontrol/dashboard.html:44 +msgid "Your most recent events" +msgstr "" + +#: pretix/control/templates/pretixcontrol/dashboard.html:60 +msgid "View all recent events" +msgstr "" + +#: pretix/control/templates/pretixcontrol/dashboard.html:65 +msgid "Your event series" +msgstr "" + +#: pretix/control/templates/pretixcontrol/dashboard.html:81 +msgid "View all event series" +msgstr "" + +#: pretix/control/templates/pretixcontrol/dashboard.html:86 +msgid "Other features" +msgstr "" + +#: pretix/control/templates/pretixcontrol/email/forgot.txt:1 +#, python-format +msgid "" +"Hello,\n" +"\n" +"you requested a new password. Please go to the following page to reset your " +"password:\n" +"\n" +"%(url)s\n" +"\n" +"Best regards,\n" +"Your pretix team\n" +msgstr "" + +#: pretix/control/templates/pretixcontrol/email/invitation.txt:1 +#, python-format +msgid "" +"Hello,\n" +"\n" +"you have been invited to a team on pretix, a platform to perform event\n" +"ticket sales.\n" +"\n" +"Organizer: %(organizer)s\n" +"Team: %(team)s\n" +"\n" +"If you want to join that team, just click on the following link:\n" +"%(url)s\n" +"\n" +"If you do not want to join, you can safely ignore or delete this email.\n" +"\n" +"Best regards,\n" +"\n" +"Your pretix team\n" +msgstr "" + +#: pretix/control/templates/pretixcontrol/email/security_notice.txt:1 +#, python-format +msgid "" +"Hello,\n" +"\n" +"this is to inform you that the account information of your pretix account " +"has been\n" +"changed. In particular, the following changes have been performed:\n" +"\n" +"%(messages)s\n" +"\n" +"If this change was not performed by you, please contact us immediately.\n" +"\n" +"You can review and change your account settings here:\n" +"\n" +"%(url)s\n" +"\n" +"Best regards,\n" +"Your pretix team\n" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/actions.html:3 +#: pretix/control/templates/pretixcontrol/event/actions.html:5 +msgid "Current issues" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/actions.html:12 +#: pretix/control/templates/pretixcontrol/event/index.html:81 +msgid "Hide message" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/actions.html:20 +msgid "No issues. Awesome!" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/cancel.html:5 +msgid "Cancellation settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/cancel.html:11 +msgid "Unpaid or free orders" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/cancel.html:31 +msgid "" +"If a user requests cancels a paid order and the money can not be refunded " +"automatically, e.g. due to the selected payment method, you will need to " +"take manual action. However, you have currently turned off notifications for " +"this event." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/cancel.html:37 +#: pretix/control/templates/pretixcontrol/user/settings.html:29 +msgid "Change notification settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/cancel.html:43 +msgid "Order changes" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/cancel.html:45 +msgid "" +"Allowing users to change their order is a feature under development. " +"Therefore, currently only specific changes (such as changing the variation " +"of a product) are possible. More options might be added later." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:5 +#: pretix/control/templates/pretixcontrol/event/live.html:131 +#: pretix/control/templates/pretixcontrol/event/settings.html:328 +msgid "Cancel or delete event" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:9 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:25 +#: pretix/control/templates/pretixcontrol/event/delete.html:59 +#: pretix/control/templates/pretixcontrol/event/live.html:31 +msgid "Go offline" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:13 +msgid "" +"You can take your event offline. Nobody except your team will be able to see " +"or access it any more." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:34 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:47 +#: pretix/control/templates/pretixcontrol/orders/cancel.html:5 +#: pretix/control/templates/pretixcontrol/orders/cancel.html:7 +msgid "Cancel event" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:38 +msgid "" +"If you need to call off your event you want to cancel and refund all " +"tickets, you can do so through this option." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:55 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:68 +#: pretix/control/templates/pretixcontrol/event/delete.html:55 +#: pretix/control/templates/pretixcontrol/event/delete.html:69 +msgid "Delete personal data" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:59 +msgid "" +"You can remove personal data such as names and email addresses from your " +"event and only retain the financial information such as the number and type " +"of tickets sold." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:76 +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:89 +#: pretix/control/templates/pretixcontrol/event/delete.html:5 +msgid "Delete event" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/dangerzone.html:80 +msgid "" +"You can delete your event completely only as long as it does not contain any " +"undeletable data, such as orders not performed in test mode." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/delete.html:9 +msgid "" +"This operation will destroy your event including all configuration, " +"products, quotas, questions, vouchers, lists, etc." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/delete.html:15 +#: pretix/control/templates/pretixcontrol/organizers/delete.html:13 +msgid "" +"This operation is irreversible and there is no way to bring your data back." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/delete.html:22 +#, python-format +msgid "" +"To confirm you really want this, please type out the event's short name " +"(\"%(slug)s\") here:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/delete.html:36 +msgid "Your event can not be deleted as it already contains orders." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/delete.html:39 +msgid "" +"To ensure audit compliance and maintain trust with financial authorities, " +"deleting orders once they have been placed is not permitted." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/delete.html:45 +msgid "" +"You can instead take your shop offline. This will hide it from everyone " +"except from the organizer teams you configured to have access to the event." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/delete.html:65 +msgid "" +"However, since your shop is offline, it is only visible to the organizing " +"team according to the permissions you configured." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/fragment_geodata.html:14 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:42 +msgid "Geo coordinates" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/fragment_geodata.html:15 +#: pretix/control/templates/pretixcontrol/event/settings.html:125 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:271 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:275 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:489 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:131 +msgid "Optional" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/fragment_geodata.html:22 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:57 +msgid "Geocoding data © OpenStreetMap" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/fragment_geodata_autoupdate.html:4 +msgid "Failed to retrieve geo coordinates" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/fragment_geodata_autoupdate.html:5 +msgid "Retrieving geo coordinates …" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/fragment_geodata_autoupdate.html:6 +msgid "Geo coordinates updated" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/fragment_geodata_autoupdate.html:7 +msgid "Update map?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/fragment_timeline.html:5 +msgid "Your timeline" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:21 +msgid "" +"This event contains overpaid orders, for example due to " +"duplicate payment attempts. You should review the cases and consider " +"refunding the overpaid amount to the user." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:26 +msgid "Show overpaid orders" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:31 +msgid "" +"This event contains pending refunds that you should take " +"care of." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:35 +msgid "Show pending refunds" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:40 +msgid "" +"This event contains requested cancellations that you should " +"take care of." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:44 +msgid "Show orders requesting cancellation" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:49 +msgid "" +"This event contains pending approvals that you should take " +"care of." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:53 +msgid "Show orders pending approval" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:58 +msgid "" +"This event contains fully paid orders that are not marked " +"as paid, probably because no quota was left at the time their payment " +"arrived. You should review the cases and consider either refunding the " +"customer or creating more space." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:64 +msgid "Show affected orders" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:72 +msgid "Your attention is required to resolve the following issues" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:93 +msgid "Show more" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:157 +#: pretix/control/templates/pretixcontrol/order/index.html:877 +msgid "Update comment" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:167 +#: pretix/control/templates/pretixcontrol/event/logs.html:4 +#: pretix/control/templates/pretixcontrol/event/logs.html:6 +msgid "Event logs" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:179 +#: pretix/control/templates/pretixcontrol/event/logs.html:49 +#: pretix/control/templates/pretixcontrol/includes/logs.html:32 +#: pretix/control/templates/pretixcontrol/organizers/device_logs.html:20 +#: pretix/control/templates/pretixcontrol/organizers/logs.html:35 +msgid "Personal data was cleared from this log entry." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:188 +#: pretix/control/templates/pretixcontrol/includes/logs.html:12 +#: pretix/control/templates/pretixcontrol/organizers/logs.html:44 +msgid "This change was performed by a system administrator." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:216 +#: pretix/control/templates/pretixcontrol/event/logs.html:86 +#: pretix/control/templates/pretixcontrol/includes/logs.html:42 +#: pretix/control/templates/pretixcontrol/order/index.html:667 +#: pretix/control/templates/pretixcontrol/order/index.html:679 +#: pretix/control/templates/pretixcontrol/order/index.html:784 +#: pretix/control/templates/pretixcontrol/organizers/device_logs.html:42 +#: pretix/control/templates/pretixcontrol/organizers/logs.html:72 +msgid "Inspect" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/index.html:226 +msgid "Show more logs" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/invoicing.html:5 +msgid "Invoice settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/invoicing.html:11 +msgid "Invoice generation" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/invoicing.html:25 +msgid "Address form" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/invoicing.html:37 +msgid "Issuer details" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/invoicing.html:47 +msgid "Invoice customization" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/invoicing.html:60 +msgid "Save and show preview" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:5 +msgid "Shop status" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:8 +msgid "Shop visibility" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:13 +msgid "" +"Your shop is currently live. If you take it down, it will only be visible to " +"you and your team." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:18 +msgid "" +"Your shop is already live, however the following issues would normally " +"prevent your shop to go live:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:37 +#: pretix/control/templates/pretixcontrol/event/live.html:56 +msgid "" +"Your ticket shop is currently not live. It is thus only visible to you and " +"your team, not to any visitors." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:41 +msgid "" +"To publish your ticket shop, you first need to resolve the following issues:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:51 +#: pretix/control/templates/pretixcontrol/event/live.html:65 +msgid "Go live" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:59 +msgid "If you want to, you can publish your ticket shop now." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:83 +msgid "" +"Your shop is currently in test mode. All orders are not persistent and can " +"be deleted at any point." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:88 +msgid "Permanently delete all orders created in test mode" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:93 +msgid "Disable test mode" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:99 +msgid "Your shop is currently in production mode." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:102 +msgid "" +"If you want to do some test orders, you can enable test mode for your shop. " +"As long as the shop is in test mode, all orders that are created are marked " +"as test orders and can be deleted again." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:104 +msgid "" +"Please note that test orders still count into your quotas, actually use " +"vouchers and might perform actual payments. The only difference is that you " +"can delete test orders. Use at your own risk!" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:108 +msgid "" +"Also, test mode only covers the main web shop. Orders created through other " +"sales channels such as the box office or resellers module are still created " +"as production orders." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:112 +msgid "" +"It looks like you already have some real orders in your shop. We do not " +"recommend enabling test mode if your customers already know your shop, as it " +"will confuse them." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/live.html:119 +msgid "Enable test mode" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/logs.html:12 +#: pretix/control/templates/pretixcontrol/organizers/logs.html:12 +msgid "All actions" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/logs.html:14 +msgid "Team actions" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/logs.html:17 +msgid "Customer actions" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/logs.html:58 +msgid "This change was performed by the system administrator." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/logs.html:94 +#: pretix/control/templates/pretixcontrol/organizers/device_logs.html:50 +#: pretix/control/templates/pretixcontrol/organizers/logs.html:80 +msgid "No results" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:6 +msgid "E-mail settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:24 +msgid "E-mail design" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:37 +#: pretix/control/templates/pretixcontrol/event/mail_settings_fragment.html:30 +#: pretix/control/templates/pretixcontrol/event/tickets.html:35 +#: pretix/control/templates/pretixcontrol/pdf/index.html:422 +msgid "Preview" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:45 +msgid "E-mail content" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:47 +msgid "Placed order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:50 +msgid "Paid order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:53 +msgid "Free order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:56 +#: pretix/control/templates/pretixcontrol/order/index.html:203 +#: pretix/control/templates/pretixcontrol/order/index.html:412 +msgid "Resend link" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:62 +msgid "Payment reminder" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:65 +msgid "Waiting list notification" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:71 +msgid "Order custom mail" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:74 +msgid "Reminder to download tickets" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:77 +msgid "Order approval process" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:82 +msgid "SMTP settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail.html:97 +msgid "Save and test custom SMTP connection" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/mail_settings_fragment.html:27 +#: pretix/control/templates/pretixcontrol/orders/index.html:38 +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:15 +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:10 +#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:66 +msgid "Edit" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/payment.html:5 +#: pretix/control/templates/pretixcontrol/event/payment_provider.html:5 +msgid "Payment settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/payment.html:22 +#: pretix/control/templates/pretixcontrol/user/settings.html:48 +msgid "Enabled" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/payment.html:27 +#: pretix/control/templates/pretixcontrol/subevents/index.html:131 +#: pretix/control/templates/pretixcontrol/user/settings.html:53 +msgid "Disabled" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/payment.html:49 +#, python-format +msgid "" +"There are no payment providers available. Please go to the plugin settings and activate one or more " +"payment plugins." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/payment.html:60 +msgid "Deadlines" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/payment_provider.html:13 +#: pretix/control/templates/pretixcontrol/events/create_base.html:24 +msgid "Back" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/payment_provider.html:15 +msgid "Payment provider:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/payment_provider.html:21 +msgid "Warning:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/payment_provider.html:22 +msgid "" +"Please note that EU Directive 2015/2366 bans surcharging payment fees for " +"most common payment methods within the European Union. If in doubt, consult " +"a lawyer or refrain from charging payment fees." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/payment_provider.html:28 +msgid "" +"In simple terms, this means you need to pay any fees imposed by the payment " +"providers and cannot pass it on to your customers." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:5 +msgid "Installed plugins" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:10 +#: pretix/control/views/checkin.py:286 pretix/control/views/event.py:187 +#: pretix/control/views/event.py:341 pretix/control/views/event.py:421 +#: pretix/control/views/event.py:460 pretix/control/views/event.py:618 +#: pretix/control/views/event.py:809 pretix/control/views/event.py:1180 +#: pretix/control/views/global_settings.py:25 +#: pretix/control/views/global_settings.py:48 pretix/control/views/item.py:170 +#: pretix/control/views/item.py:627 pretix/control/views/item.py:948 +#: pretix/control/views/item.py:1110 pretix/control/views/item.py:1239 +#: pretix/control/views/organizer.py:190 pretix/control/views/organizer.py:305 +#: pretix/control/views/organizer.py:436 pretix/control/views/organizer.py:760 +#: pretix/control/views/organizer.py:906 pretix/control/views/organizer.py:1318 +#: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 +#: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 +#: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/ticketoutputpdf/views.py:146 +msgid "Your changes have been saved." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:25 +#, python-format +msgid "Version %(v)s by %(a)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:30 +#, python-format +msgid "Version %(v)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:37 +msgid "" +"This plugin needs to be enabled by a system administrator for your event." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:42 +msgid "This plugin cannot be enabled for the following reasons:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:52 +msgid "This plugin reports the following problems:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:64 +msgid "Incompatible" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:67 +msgid "Not available" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:70 +#: 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:40 +#: pretix/control/templates/pretixcontrol/user/notifications.html:14 +msgid "Disable" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/plugins.html:73 +#: pretix/control/templates/pretixcontrol/user/2fa_enable.html:21 +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:56 +#: pretix/control/templates/pretixcontrol/user/notifications.html:23 +#: pretix/control/templates/pretixcontrol/user/settings.html:55 +msgid "Enable" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:14 +#: pretix/control/templates/pretixcontrol/event/settings_base.html:10 +msgid "Congratulations!" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:16 +#: pretix/control/templates/pretixcontrol/event/settings_base.html:12 +msgid "You just created an event!" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:19 +msgid "" +"You can scroll down and create your first ticket products quickly, or you " +"can use the navigation on the left to modify the settings of your event in " +"much more detail." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:36 +msgid "Create ticket types" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:42 +msgid "Ticket name" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:48 +msgid "Capacity (optional)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:101 +msgid "Add a new ticket type" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:106 +msgid "Total capacity:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:109 +msgid "" +"You can set a limit on the total number of tickets sold for your event, " +"regardless of the ticket type." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:118 +msgid "" +"If you want to use more advanced features like non-admission products, " +"product variations, custom quotas, add-on products or want to modify your " +"ticket types in more detail, you can later do so in the \"Products\" section " +"in the navigation. Don't worry, you can change everything you input here." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:132 +#: pretix/control/views/event.py:289 +msgid "Features" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:134 +msgid "" +"We recommend that you take some time to go through the \"Settings\" part of " +"your event, but if you're in a hurry and want to get started quickly, here's " +"a short version:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:153 +msgid "" +"eventyay supports a wide range of payment providers allowing you to choose " +"the payment methods that fit your workflow best. Here are just two of them " +"as examples, you can add more in the \"Settings\" part of your event." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:173 +msgid "" +"After you saved this page, we will redirect you to Stripe to create or " +"connect an account there. Once you completed this, you will be taken back to " +"pretix." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:188 +msgid "Getting in touch with you" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/quick_setup.html:190 +msgid "" +"In case something goes wrong or is unclear, we strongly suggest that you " +"provide ways for your attendees to contact you:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:12 +#: pretix/control/templates/pretixcontrol/user/settings.html:11 +msgid "General settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:19 +msgid "Basics" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:37 +#: pretix/control/templates/pretixcontrol/item/index.html:69 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:392 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:75 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:34 +msgid "Meta data" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:56 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:50 +msgid "Localization" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:63 +msgid "Customer and attendee data" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:64 +msgid "Customer data (once per order)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:79 +msgid "Name and address" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:84 +msgid "See invoice settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:90 +msgid "Attendee data (once per admission ticket)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:99 +msgid "Custom fields" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:104 +msgid "Manage questions" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:111 +msgid "Other settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:117 +msgid "Texts" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:124 +msgid "Confirmation text" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:129 +msgid "" +"These texts need to be confirmed by the user before a purchase is possible. " +"You could for example link your terms of service here. If you use the Pages " +"feature to publish your terms of service, you don't need this setting since " +"you can configure it there." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:186 +msgid "Add confirmation text" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:200 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:55 +msgid "Shop design" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:216 +#: pretix/control/templates/pretixcontrol/events/create_basics.html:53 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:411 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:94 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:53 +msgid "Timeline" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:225 +msgid "Display" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:245 +msgid "Cart" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:260 +msgid "Item metadata" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:262 +msgid "" +"You can here define a set of metadata properties (i.e. variables) that you " +"can later set for your items and re-use in places like ticket layouts. This " +"is an useful timesaver if you create lots and lots of items." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:315 +msgid "Add property" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings.html:333 +#: pretix/control/templates/pretixcontrol/events/index.html:158 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:115 +msgid "Clone event" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings_base.html:15 +msgid "" +"You can now scroll down and modify the settings in more detail, if you want, " +"or you can create your first product to start selling tickets right away!" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/settings_base.html:23 +msgid "Create a first product" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_delete.html:4 +#: pretix/control/templates/pretixcontrol/event/tax_delete.html:6 +msgid "Delete tax rule" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_delete.html:10 +#, python-format +msgid "" +"Are you sure you want to delete the tax rule %(taxrule)s?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_delete.html:12 +msgid "" +"You cannot delete a tax rule that is in use for a product or has been in use " +"for any existing orders." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:7 +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:14 +#, python-format +msgid "Tax rule: %(name)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:33 +#, python-format +msgid "" +"These settings are intended for advanced users. See the documentation for more information. Note that we are " +"not responsible for the correct handling of taxes in your ticket shop. If in " +"doubt, please contact a lawyer or tax consultant." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:42 +msgid "Custom taxation rules" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:44 +msgid "" +"These settings are intended for professional users with very specific " +"taxation situations. If you create any rule here, the reverse charge " +"settings above will be ignored. The rules will be checked in order and once " +"the first rule matches the order, it will be used and all further rules will " +"be ignored. If no rule matches, tax will be charged." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:50 +msgid "All of these rules will only apply if an invoice address is set." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:128 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:251 +msgid "Add a new rule" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_edit.html:144 +#: pretix/control/templates/pretixcontrol/organizers/edit.html:81 +msgid "Change history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_index.html:9 +msgid "You haven't created any tax rules yet." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_index.html:15 +#: pretix/control/templates/pretixcontrol/event/tax_index.html:19 +msgid "Create a new tax rule" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tax_index.html:27 +msgid "Rate" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tickets.html:8 +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:7 +msgid "Ticket download" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tickets.html:11 +msgid "Download settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tickets.html:14 +msgid "" +"You activated ticket downloads but no output provider is enabled. Be sure to " +"enable a plugin and activate an output provider." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tickets.html:28 +msgid "Download formats" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tickets.html:54 +#, python-format +msgid "" +"There are no ticket outputs available. Please go to the plugin settings and activate one or more ticket " +"output plugins." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tickets.html:62 +msgid "Download time" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/tickets.html:66 +msgid "Ticket codes" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/widget.html:10 +msgid "" +"A widget allows you to embed your ticket shop directly into your event " +"website. This enables your visitors to purchase tickets instantly without " +"leaving your site." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/widget.html:16 +msgid "" +"To embed the widget onto your website, simply copy the following code to the " +"<head> section of your website:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/widget.html:24 +msgid "" +"Then, copy the following code to the place of your website where you want " +"the widget to show up:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/widget.html:38 +#: pretix/control/templates/pretixcontrol/event/widget.html:51 +#, python-format +msgid "" +"JavaScript is disabled in your browser. To access our ticket shop without " +"JavaScript, please <a %(a_attr)s>click here</a>." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/widget.html:63 +#: pretix/plugins/returnurl/templates/returnurl/settings.html:15 +msgid "Read our documentation for more information" +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/widget.html:68 +msgid "" +"Using this form, you can generate a code to copy and paste to your website " +"source." +msgstr "" + +#: pretix/control/templates/pretixcontrol/event/widget.html:78 +msgid "Generate widget code" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_base.html:6 +#, python-format +msgid "Step %(step)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_base.html:31 +msgid "" +"Every event needs to be created as part of an organizer account. Currently, " +"you do not have access to any organizer accounts." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_base.html:35 +#: pretix/control/templates/pretixcontrol/organizers/create.html:4 +#: pretix/control/templates/pretixcontrol/organizers/create.html:6 +#: pretix/control/templates/pretixcontrol/organizers/index.html:27 +msgid "Create a new organizer" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_basics.html:7 +#: pretix/control/templates/pretixcontrol/item/create.html:11 +#: pretix/control/templates/pretixcontrol/items/category.html:13 +#: pretix/control/templates/pretixcontrol/items/quota_edit.html:21 +#: pretix/control/templates/pretixcontrol/organizers/create.html:11 +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:19 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:384 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:30 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:23 +msgid "General information" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_basics.html:14 +msgid "Set to random" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_basics.html:18 +msgid "" +"This is the address users can buy your tickets at. Should be short, only " +"contain lowercase letters and numbers, and must be unique among your events. " +"We recommend some kind of abbreviation or a date with less than 10 " +"characters that can be easily remembered, but you can also choose to use a " +"random value." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_basics.html:26 +msgid "" +"We will also use this in some places like order codes, invoice numbers or " +"bank transfer references as an abbreviation to reference this event." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_basics.html:32 +msgid "" +"We strongly recommend against using short forms of more then 16 characters." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_basics.html:47 +msgid "Display settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_copy.html:6 +msgid "" +"Do you want to copy over your configuration from a different event? We will " +"copy all products, categories, quotas, and questions as well as general " +"event settings." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_copy.html:13 +msgid "" +"Please make sure to review all settings extensively. You will probably still " +"need to change some settings manually, e.g. date and time settings and texts " +"that contain the event name." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_foundation.html:7 +msgid "Event type" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_foundation.html:13 +msgid "Singular event or non-event shop" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_foundation.html:15 +msgid "" +"An event with individual configuration. If you create more events later, you " +"can copy the event to save yourself some work." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_foundation.html:21 +msgid "" +"Examples: Conferences, workshops, trade fairs, one-off concerts, sale of " +"digital content, multi-day events with combination tickets." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_foundation.html:32 +msgid "Event series or time slot booking" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_foundation.html:34 +msgid "" +"A series of events that share the same configuration. They can still be " +"different in their dates, locations, prices, and capacities." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_foundation.html:40 +msgid "" +"Examples: Multiple presentations of the same show, same concert in multiple " +"locations, museums, libraries, or swimming pools, events that need to be " +"booked together in one cart." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/create_foundation.html:53 +msgid "" +"Please note that you will only be able to delete your event until the first " +"order has been created." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/index.html:8 +msgid "" +"The list below shows all events you have administrative access to. Click on " +"the event name to access event details." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/index.html:12 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:18 +msgid "You currently do not have access to any events." +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/index.html:83 +#: pretix/control/templates/pretixcontrol/subevents/index.html:82 +msgid "Paid tickets per quota" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/index.html:114 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:82 +msgid "Series" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/index.html:134 +#: pretix/control/templates/pretixcontrol/subevents/index.html:123 +msgid "More quotas" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/index.html:142 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:98 +#: pretix/control/views/dashboards.py:496 +msgid "Shop disabled" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/index.html:148 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:104 +#: pretix/control/templates/pretixcontrol/subevents/index.html:137 +#: pretix/control/views/dashboards.py:502 +msgid "On sale" +msgstr "" + +#: pretix/control/templates/pretixcontrol/events/index.html:153 +#: pretix/control/templates/pretixcontrol/organizers/detail.html:109 +msgid "Open event dashboard" +msgstr "" + +#: pretix/control/templates/pretixcontrol/font_option.html:2 +msgctxt "typography" +msgid "The quick brown fox jumps over the lazy dog." +msgstr "" + +#: pretix/control/templates/pretixcontrol/fragment_quota_box.html:3 +#: pretix/control/templates/pretixcontrol/fragment_quota_box_paid.html:3 +msgid "Quota:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/fragment_quota_box.html:3 +#, python-format +msgid "Numbers as of %(date)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/fragment_quota_box_paid.html:3 +#, python-format +msgid "Currently available: %(num)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/giftcards/checkout.html:4 +msgid "" +"\n" +" If you have a gift card, please enter the gift card code here. If " +"the gift card does not have\n" +" enough credit to pay for the full order, you will be shown this page " +"again and you can either\n" +" redeem another gift card or select a different payment method for " +"the difference.\n" +" " +msgstr "" + +#: pretix/control/templates/pretixcontrol/giftcards/checkout_confirm.html:4 +msgid "" +"\n" +" Your gift card will be used to pay for this order. If the credit on " +"the gift card is lower than the order total, you will be able to pay the\n" +" difference with a different payment method. If the credit is higher " +"than the order total, you will be able to re-use the gift card in the " +"future.\n" +" " +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_message.html:5 +#: pretix/control/templates/pretixcontrol/global_message.html:7 +msgid "System message" +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:7 +msgid "Update check results" +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:10 +msgid "Update checks are disabled." +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:14 +msgid "" +"No update check has been performed yet since the last update of this " +"installation. Update checks are performed on a daily basis if your cronjob " +"is set up properly." +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:20 +#: pretix/control/templates/pretixcontrol/global_update.html:39 +#: pretix/control/templates/pretixcontrol/global_update.html:51 +msgid "Check for updates now" +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:26 +msgid "The last update check was not successful." +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:28 +msgid "The Eventyay server returned an error code." +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:30 +msgid "The Eventyay server could not be reached." +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:32 +msgid "This installation appears to be a development installation." +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:47 +#, python-format +msgid "Last updated: %(date)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:59 +msgid "Component" +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:60 +msgid "Installed version" +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:61 +msgid "Latest version" +msgstr "" + +#: pretix/control/templates/pretixcontrol/global_update.html:80 +msgid "Update check settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/includes/logs.html:51 +msgid "View full log" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/base.html:6 +msgid "Modify product:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/base.html:8 +msgid "Create product" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/base.html:9 +msgid "You will be able to adjust further settings in the next step." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/base.html:15 +msgid "" +"Please note that your product will not be available for " +"sale until you have added your item to an existing or newly created quota." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/base.html:22 +msgid "" +"This product is currently not being sold since you configured below that it " +"should only be available in a certain timeframe." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/base.html:29 +msgid "" +"This product is currently not being shown since you configured below that it " +"should only be visible if a certain other quota is already sold out." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:19 +#: pretix/control/templates/pretixcontrol/item/index.html:21 +msgid "Product type" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:25 +#: pretix/control/templates/pretixcontrol/item/index.html:27 +msgid "Admission product" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:27 +msgid "" +"Every purchase of this product represents one person who is allowed to enter " +"your event. By default, the system will request attendee information and " +"provide ticket downloads for these products." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:33 +#: pretix/control/templates/pretixcontrol/item/index.html:35 +msgid "" +"This option should be set for most things that you would call a \"ticket\". " +"For product add-ons or bundles, this should be set on the main ticket, " +"except if the add-on products or bundled products represent additional " +"people (e.g. group bundles)." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:44 +#: pretix/control/templates/pretixcontrol/item/index.html:46 +msgid "Non-admission product" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:46 +msgid "" +"For products that do not require a person to be present, such as a T-shirt, " +"the system will, by default, not request attendee information or provide " +"ticket downloads." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:51 +#: pretix/control/templates/pretixcontrol/item/index.html:54 +msgid "Examples: Merchandise, donations, gift cards, add-ons to a main ticket." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:69 +msgid "Product without variations" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:76 +msgid "Product with multiple variations" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:78 +msgid "" +"This product exists in multiple variations which are different in either " +"their name, price, quota, or description. All other settings need to be the " +"same." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:84 +msgid "" +"Examples: Ticket category with variations for \"full price\" and " +"\"reduced\", merchandise with variations for different sizes, workshop add-" +"on with variations for simultaneous workshops." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:97 +msgid "Quota settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:109 +msgid "Price settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/create.html:115 +msgid "Save and continue with more settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/delete.html:4 +#: pretix/control/templates/pretixcontrol/item/delete.html:6 +msgid "Delete product" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/delete.html:8 +#, python-format +msgid "" +"You cannot delete the product %(item)s because it already " +"has been ordered." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/delete.html:19 +#, python-format +msgid "Are you sure you want to delete the product %(item)s?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/delete.html:22 +#: pretix/control/templates/pretixcontrol/items/quota_delete.html:24 +#, python-format +msgid "That will cause %(count)s voucher to be unusable." +msgid_plural "That will cause %(count)s voucher to be unusable." +msgstr[0] "" +msgstr[1] "" + +#: pretix/control/templates/pretixcontrol/item/delete.html:29 +#: pretix/control/templates/pretixcontrol/items/quota_delete.html:31 +msgid "Show affected vouchers" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/delete.html:34 +#, python-format +msgid "" +"You cannot delete the product %(item)s because it already " +"has been ordered, but you can deactivate it." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/delete.html:41 +msgid "Deactivate" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/include_addons.html:5 +msgid "" +"With add-ons, you can specify products that can be bought as an addition to " +"this product. For example, if you host a conference with a base conference " +"ticket and a number of workshops, you could define the workshops as add-ons " +"to the conference ticket. With this configuration, the workshops cannot be " +"bought on their own but only in combination with a conference ticket. You " +"can here specify categories of products that can be used as add-ons to this " +"product. You can also specify the minimum and maximum number of add-ons of " +"the given category that can or need to be chosen." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/include_addons.html:28 +#: pretix/control/templates/pretixcontrol/item/include_addons.html:62 +msgid "Add-On" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/include_addons.html:86 +msgid "Add a new add-on" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/include_bundles.html:5 +msgid "" +"With bundles, you can specify products that are always automatically added " +"as add-ons in the cart for this product." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/include_bundles.html:68 +msgid "Add a new bundled product" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/include_variations.html:38 +msgid "" +"Please note that your variation will not be available for " +"sale until you have added it to an existing or newly created quota." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/include_variations.html:89 +msgid "Add a new variation" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/index.html:29 +msgid "" +"Every purchase of this product represents one person who is allowed to enter " +"your event. By default, pretix will only ask for attendee information and " +"offer ticket downloads for these products." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/index.html:48 +msgid "" +"A product that does not represent a person. By default, pretix will not ask " +"for attendee information or offer ticket downloads." +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/index.html:95 +msgid "Availability" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/index.html:115 +msgid "Tickets & check-in" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/index.html:120 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:577 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:219 +msgid "Additional settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/item/index.html:138 +msgid "Product history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/categories.html:7 +msgid "" +"You can use categories to group multiple products together in an organized " +"way." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/categories.html:14 +msgid "You haven't created any categories yet." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/categories.html:20 +#: pretix/control/templates/pretixcontrol/items/categories.html:24 +msgid "Create a new category" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/category.html:27 +msgid "Category history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/category_delete.html:4 +#: pretix/control/templates/pretixcontrol/items/category_delete.html:6 +msgid "Delete product category" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/category_delete.html:9 +#, python-format +msgid "Are you sure you want to delete the category %(name)s?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/fragment_quota_availability.html:3 +msgid "Closed" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/fragment_quota_availability.html:5 +msgid "Sold out (pending orders)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/fragment_quota_availability.html:8 +#, python-format +msgid "%(num)s available" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/fragment_quota_availability.html:11 +msgid "Unlimited" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/fragment_quota_availability.html:14 +msgid "Fully reserved" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/fragment_quota_availability.html:16 +#: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:30 +#: pretix/presale/templates/pretixpresale/fragment_calendar.html:81 +#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:67 +#: pretix/presale/templates/pretixpresale/organizers/index.html:112 +#: pretix/presale/views/widget.py:332 +msgid "Sold out" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/index.html:7 +msgid "" +"Below, you find a list of all available products. You can click on a product " +"name to inspect and change product details. You can also use the buttons on " +"the right to change the order of products within a give category." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/index.html:16 +msgid "You haven't created any products yet." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/index.html:22 +#: pretix/control/templates/pretixcontrol/items/index.html:27 +msgid "Create a new product" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/index.html:70 +msgid "" +"Currently unavailable since a limited timeframe for this product has been set" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/index.html:75 +msgid "Only available in a limited timeframe" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/index.html:82 +msgid "Admission ticket" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/index.html:89 +msgid "Product with variations" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/index.html:95 +msgid "Only available as an add-on product" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/index.html:98 +msgid "Only available as part of a bundle" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/index.html:101 +msgid "Only visible with a voucher" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/index.html:104 +msgid "Can only be bought using a voucher" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question.html:6 +#: pretix/control/templates/pretixcontrol/items/question.html:9 +#: pretix/control/templates/pretixcontrol/items/question_edit.html:8 +#: pretix/control/templates/pretixcontrol/items/question_edit.html:15 +#, python-format +msgid "Question: %(name)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question.html:13 +#: pretix/control/templates/pretixcontrol/items/question.html:54 +msgid "Edit question" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question.html:20 +#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:25 +#: pretix/control/templates/pretixcontrol/orders/overview.html:77 +#: pretix/plugins/checkinlists/exporters.py:412 +#: pretix/plugins/reports/exporters.py:263 +#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:19 +msgid "Paid" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question.html:26 +#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:35 +#: pretix/control/templates/pretixcontrol/orders/overview.html:66 +#: pretix/plugins/reports/exporters.py:253 +#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:24 +msgid "Canceled" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question.html:44 +msgid "No matching answers found." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question.html:50 +msgid "You need to assign the question to a product to collect answers." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question.html:69 +msgid "Count" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question.html:70 +msgid "Percentage" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question.html:93 +msgid "Question history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question_delete.html:4 +#: pretix/control/templates/pretixcontrol/items/question_delete.html:6 +msgid "Delete question" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question_delete.html:9 +#, python-format +msgid "" +"Are you sure you want to delete the question %(question)s?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question_delete.html:11 +msgid "" +"All answers to the question given by the buyers of the following products " +"will be lost." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question_edit.html:30 +msgid "" +"If you mark a Yes/No question as required, it means that the user has to " +"select Yes and No is not accepted. If you want to allow both options, do not " +"make this field required." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question_edit.html:48 +msgid "Answer options" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question_edit.html:50 +msgid "Only applicable if you choose 'Choose one/multiple from a list' above." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question_edit.html:66 +#, python-format +msgid "Answer option %(id)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question_edit.html:97 +msgid "New answer option" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question_edit.html:116 +msgid "Add a new option" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/question_edit.html:131 +msgid "Question dependency" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/questions.html:7 +msgid "" +"Questions allow your attendees to fill in additional data about their " +"ticket. If you provide food, one example might be to ask your users about " +"dietary requirements." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/questions.html:14 +msgid "Create a new question" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/questions.html:50 +msgid "System question" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/questions.html:60 +msgid "Ask during check-in" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/questions.html:79 +msgid "All admission products" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota.html:6 +#: pretix/control/templates/pretixcontrol/items/quota.html:9 +#: pretix/control/templates/pretixcontrol/items/quota_edit.html:6 +#: pretix/control/templates/pretixcontrol/items/quota_edit.html:13 +#, python-format +msgid "Quota: %(name)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota.html:14 +msgid "Edit quota" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota.html:30 +msgid "Open quota and disable closing" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota.html:32 +msgid "" +"This quota is sold out and closed. Even if tickets become available e.g. " +"through cancellations, they will not become available again unless you " +"manually re-open the quota on this page." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota.html:38 +msgid "Open quota" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota.html:39 +msgid "" +"This quota is closed since it has been sold out before. Tickets are " +"theoretically available, but will not be sold unless you manually re-open " +"the quota." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota.html:47 +msgid "Usage overview" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota.html:54 +msgid "Availability calculation" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota.html:79 +msgid "" +"A plugin is active that might modify the actual result of this quota from " +"what you see here." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota.html:86 +#, python-format +msgid "This quota is currently overbooked by %(num)s tickets." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota.html:93 +msgid "" +"Your event contains vouchers that affect products covered by this quota and " +"that allow a user to buy products even if this quota is sold out." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota.html:104 +msgid "Quota history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota_delete.html:4 +#: pretix/control/templates/pretixcontrol/items/quota_delete.html:6 +msgid "Delete quota" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota_delete.html:9 +#, python-format +msgid "Are you sure you want to delete the quota %(quota)s?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota_delete.html:12 +msgid "The following products might be no longer available for sale:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota_edit.html:29 +msgid "Items" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota_edit.html:31 +msgid "" +"Please select the products or product variations this quota should be " +"applied to. If you apply two quotas to the same product, it will only be " +"available if both quotas have capacity left." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quota_edit.html:41 +msgid "Advanced options" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quotas.html:8 +msgid "" +"To ensure your products are available as intended, you need to set quotas. " +"Quotas determine how many instances of your product can be sold on the " +"platform. This allows you to configure whether your event can accommodate an " +"unlimited number of attendees or if the number of attendees is capped. You " +"can assign a product to multiple quotas to meet more complex requirements, " +"such as limiting the total number of tickets sold while also restricting the " +"number of specific ticket types simultaneously." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quotas.html:21 +msgid "Your search did not match any quotas." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quotas.html:23 +msgid "You haven't created any quotas yet." +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quotas.html:30 +#: pretix/control/templates/pretixcontrol/items/quotas.html:34 +msgid "Create a new quota" +msgstr "" + +#: pretix/control/templates/pretixcontrol/items/quotas.html:56 +msgid "Capacity left" +msgstr "" + +#: pretix/control/templates/pretixcontrol/multi_languages_widget.html:9 +msgid "" +"The translation for this language is still in progress. This language can " +"currently only be selected on development installations of pretix, not in " +"production." +msgstr "" + +#: pretix/control/templates/pretixcontrol/multi_languages_widget.html:10 +msgid "Translation in development" +msgstr "" + +#: pretix/control/templates/pretixcontrol/multi_languages_widget.html:13 +msgid "" +"This translation is community-maintained and requires further verification " +"by additional translators. New or recently updated features may not be " +"translated yet and will appear in English." +msgstr "" + +#: pretix/control/templates/pretixcontrol/multi_languages_widget.html:14 +msgid "Unofficial translation" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/app_delete.html:4 +#: pretix/control/templates/pretixcontrol/oauth/app_delete.html:6 +msgid "Disable application" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/app_delete.html:9 +#, python-format +msgid "" +"Are you sure you want to disable the application %(application)s permanently?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/app_list.html:4 +#: pretix/control/templates/pretixcontrol/oauth/app_list.html:6 +msgid "Your applications" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/app_list.html:33 +msgid "Create new application" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/app_list.html:39 +msgid "No applications registered yet." +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/app_list.html:46 +#: pretix/control/templates/pretixcontrol/oauth/app_register.html:4 +#: pretix/control/templates/pretixcontrol/oauth/app_register.html:6 +msgid "Register a new application" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/app_rollkeys.html:4 +#: pretix/control/templates/pretixcontrol/oauth/app_rollkeys.html:6 +msgid "Generate new application secret" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/app_rollkeys.html:9 +#, python-format +msgid "" +"Are you sure you want to generate a new client secret for the application " +"%(application)s?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/app_rollkeys.html:15 +msgid "Roll secret" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/app_update.html:4 +#: pretix/control/templates/pretixcontrol/oauth/app_update.html:6 +msgid "Update an application" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/auth_revoke.html:4 +#: pretix/control/templates/pretixcontrol/oauth/auth_revoke.html:6 +#: pretix/control/templates/pretixcontrol/oauth/authorized.html:49 +#: pretix/control/templates/pretixcontrol/organizers/devices.html:95 +msgid "Revoke access" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/auth_revoke.html:9 +#, python-format +msgid "" +"Are you sure you want to revoke access to your account for the application " +"%(application)s?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/auth_revoke.html:15 +#: pretix/control/templates/pretixcontrol/organizers/device_revoke.html:24 +msgid "Revoke" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/authorized.html:4 +#: pretix/control/templates/pretixcontrol/oauth/authorized.html:6 +#: pretix/control/templates/pretixcontrol/user/settings.html:61 +msgid "Authorized applications" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/authorized.html:9 +msgid "Manage your own apps" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/authorized.html:18 +msgid "Permissions" +msgstr "" + +#: pretix/control/templates/pretixcontrol/oauth/authorized.html:59 +msgid "No applications have access to your eventyay account." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/approve.html:4 +#: pretix/control/templates/pretixcontrol/order/approve.html:8 +msgid "Approve order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/approve.html:10 +msgid "Do you really want to approve this order?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/approve.html:20 +#: pretix/control/templates/pretixcontrol/order/cancel.html:36 +#: pretix/control/templates/pretixcontrol/order/cancellation_request_delete.html:21 +#: pretix/control/templates/pretixcontrol/order/delete.html:20 +#: pretix/control/templates/pretixcontrol/order/deny.html:30 +#: pretix/control/templates/pretixcontrol/order/pay_cancel.html:20 +#: pretix/control/templates/pretixcontrol/order/refund_cancel.html:27 +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:188 +msgid "No, take me back" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/approve.html:25 +msgid "Yes, approve order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/cancel.html:5 +#: pretix/control/templates/pretixcontrol/order/cancel.html:9 +#: pretix/control/templates/pretixcontrol/order/index.html:63 +#: pretix/control/templates/pretixcontrol/order/index.html:147 +#: pretix/presale/templates/pretixpresale/event/order.html:426 +#: pretix/presale/templates/pretixpresale/event/order.html:438 +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:7 +msgid "Cancel order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/cancel.html:11 +#: pretix/control/templates/pretixcontrol/order/deny.html:10 +msgid "Do you really want to cancel this order? You cannot revert this action." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/cancel.html:15 +msgid "" +"This will not automatically transfer the money back, but " +"you will be offered options to refund the payment afterwards." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/cancel.html:41 +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:196 +msgid "Yes, cancel order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/cancellation_request_delete.html:4 +#: pretix/control/templates/pretixcontrol/order/cancellation_request_delete.html:8 +msgid "Ignore cancellation request" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/cancellation_request_delete.html:10 +msgid "" +"Do you really want to remove this cancellation request? The user will not be " +"informed automatically, but you will have the option to email them " +"individually in the next step." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/cancellation_request_delete.html:26 +msgid "Yes, delete request" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:7 +#: pretix/control/templates/pretixcontrol/order/change.html:13 +#: pretix/presale/templates/pretixpresale/event/order_change.html:8 +#, python-format +msgid "Change order: %(code)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:18 +#: pretix/control/templates/pretixcontrol/order/change_contact.html:12 +#: pretix/control/templates/pretixcontrol/order/change_locale.html:12 +#: pretix/control/templates/pretixcontrol/order/change_questions.html:12 +#: pretix/control/templates/pretixcontrol/order/extend.html:12 +#: pretix/control/templates/pretixcontrol/order/mail_history.html:10 +#: pretix/control/templates/pretixcontrol/order/pay.html:12 +#: pretix/control/templates/pretixcontrol/order/pay_complete.html:12 +#: pretix/control/templates/pretixcontrol/order/reactivate.html:12 +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:13 +#: pretix/control/templates/pretixcontrol/order/refund_done.html:12 +#: pretix/control/templates/pretixcontrol/order/refund_process.html:13 +#: pretix/control/templates/pretixcontrol/order/refund_start.html:12 +#: pretix/control/templates/pretixcontrol/order/sendmail.html:10 +#, python-format +msgid "Back to order %(order)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:24 +msgid "" +"You can use this tool to change the ordered products or to partially cancel " +"the order. Please keep in mind that changing an order can have several " +"implications, e.g. the payment method fee might change or additional " +"questions can be added to the order that need to be answered by the user." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:31 +msgid "" +"The user will receive a notification about the change but in the case of new " +"required questions, the user will not be forced to answer them." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:37 +msgid "" +"If an invoice is attached to the order, a cancellation will be created " +"together with a new invoice." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:42 +msgid "" +"If you chose \"split into new order\" for multiple positions, they will be " +"all split in one second order together, not multiple orders." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:48 +msgid "" +"Please use this tool carefully. Changes you make here are not reversible. " +"Also, if you change an order manually, not all constraints (e.g. on required " +"add-ons) will be checked. Therefore, you might construct an order that would " +"not be able to exist otherwise. In most cases it is easier to cancel the " +"order completely and create a new one." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:68 +#, python-format +msgid "Add-On to position #%(posid)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:85 +msgid "" +"This position has been created with a voucher with a limited budget. If you " +"change the price or item, the discount will still be calculated from the " +"original price at the time of purchase." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:97 +#: pretix/control/templates/pretixcontrol/order/change.html:302 +msgid "Change to" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:171 +#: pretix/control/templates/pretixcontrol/order/change.html:321 +msgid "including all taxes" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:191 +msgid "Removing this position will also remove all add-ons to this position." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:212 +#: pretix/control/templates/pretixcontrol/order/change.html:250 +#: pretix/control/templates/pretixcontrol/order/change.html:275 +msgid "Add product" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:329 +msgid "" +"Manually modifying payment fees is discouraged since they might " +"automatically be on subsequent order changes or when choosing a different " +"payment method." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:339 +#: pretix/control/templates/pretixcontrol/order/change_questions.html:65 +msgid "Other operations" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change.html:365 +msgid "Perform changes" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change_contact.html:5 +#: pretix/control/templates/pretixcontrol/order/change_contact.html:9 +#: pretix/control/templates/pretixcontrol/order/change_questions.html:5 +msgid "Change contact information" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change_locale.html:5 +#: pretix/control/templates/pretixcontrol/order/change_locale.html:9 +msgid "Change locale information" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change_locale.html:18 +msgid "This language will be used whenever emails are sent to the users." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change_questions.html:9 +msgid "Change order information" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change_questions.html:25 +#: pretix/control/templates/pretixcontrol/order/index.html:814 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:88 +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:35 +#: pretix/presale/templates/pretixpresale/event/order_modify.html:29 +msgid "Invoice information" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/change_questions.html:26 +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:36 +#: pretix/presale/templates/pretixpresale/event/order_modify.html:30 +msgid "(optional)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/delete.html:4 +#: pretix/control/templates/pretixcontrol/order/delete.html:8 +msgid "Delete order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/delete.html:10 +msgid "" +"Do you really want to delete this order? You really cannot revert " +"this action and we can't either." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/delete.html:25 +msgid "Yes, delete order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/deny.html:4 +#: pretix/control/templates/pretixcontrol/order/deny.html:8 +msgid "Deny order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/deny.html:19 +msgid "Notify user by e-mail" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/deny.html:23 +msgid "Comment (will be sent to the user)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/deny.html:35 +msgid "Yes, deny order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/extend.html:5 +#: pretix/control/templates/pretixcontrol/order/extend.html:9 +#: pretix/control/templates/pretixcontrol/order/index.html:58 +msgid "Extend payment term" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:12 +#: pretix/control/templates/pretixcontrol/order/index.html:19 +#, python-format +msgid "Order details: %(code)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:17 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:6 +msgid "taxes" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:44 +msgid "Approve" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:49 +msgid "Deny" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:55 +#: pretix/control/templates/pretixcontrol/order/pay_complete.html:31 +msgid "Mark as paid" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:67 +#: 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:74 +msgid "View order as user" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:77 +msgid "View email history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:88 +msgid "Expire order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:89 +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:104 +msgid "Refund for overpayment" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:106 +#, python-format +msgid "This order is currently overpaid by %(amount)s." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:110 +#, python-format +msgid "Initiate a refund of %(amount)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:124 +msgid "Cancellation request" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:128 +msgid "The customer asked you to cancel the order with the following settings:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:135 +msgid "Original payment method" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:144 +msgid "Delete request" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:157 +#: pretix/presale/templates/pretixpresale/event/order.html:21 +msgid "Order details" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:167 +msgid "Cancellation date" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:189 +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:230 +msgid "Rebuild the invoice with updated data but the same invoice number." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:231 +#: pretix/control/templates/pretixcontrol/user/2fa_regenemergency.html:20 +msgid "Regenerate" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:241 +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:244 +msgid "Generate cancellation" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:246 +msgid "Cancel and reissue" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:262 +#: pretix/control/templates/pretixcontrol/order/index.html:274 +msgid "Generate invoice" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:287 +msgid "Change answers" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:292 +msgid "Change products" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:297 +#: pretix/presale/templates/pretixpresale/event/order.html:196 +msgid "Ordered items" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:317 +#, python-format +msgid "Automatically marked not present: %(date)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:319 +#, python-format +msgid "Exit scan: %(date)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:322 +#, python-format +msgid "Additional entry scan: %(date)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:324 +#, python-format +msgid "Automatically checked in: %(date)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:326 +#, python-format +msgid "Entry scan: %(date)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:339 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:26 +msgid "Voucher code used:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:341 +#, python-format +msgid "Original price: %(price)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:377 +msgid "Ticket page" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:396 +#: pretix/control/templates/pretixcontrol/order/index.html:417 +#: pretix/control/templates/pretixcontrol/order/index.html:426 +#: pretix/control/templates/pretixcontrol/order/index.html:440 +#: pretix/control/templates/pretixcontrol/order/index.html:478 +#: pretix/control/templates/pretixcontrol/order/index.html:485 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:111 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:117 +msgid "not answered" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:450 +msgid "This question will be asked during check-in." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:462 +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:463 +msgid "UNSAFE" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:496 +#: pretix/control/templates/pretixcontrol/order/index.html:530 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:207 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:238 +#, python-format +msgid "plus %(rate)s%% %(taxname)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:506 +#: pretix/control/templates/pretixcontrol/order/index.html:540 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:217 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:248 +#, python-format +msgid "incl. %(rate)s%% %(taxname)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:561 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:270 +msgid "Taxes" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:570 +#: pretix/control/templates/pretixcontrol/orders/overview.html:78 +#: pretix/control/templates/pretixcontrol/orders/overview.html:166 +#: pretix/plugins/reports/exporters.py:263 +#: pretix/plugins/reports/exporters.py:319 +#: pretix/plugins/reports/exporters.py:488 +#: pretix/plugins/reports/exporters.py:834 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:280 +msgid "Total" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:580 +#: pretix/presale/templates/pretixpresale/event/order.html:204 +msgid "Successful payments" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:589 +#: pretix/presale/templates/pretixpresale/event/order.html:213 +msgid "Pending total" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:605 +msgid "Payments" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:615 +msgid "Confirmation date" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:628 +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:629 +msgid "MIGRATED" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:641 +#: 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:646 +msgid "Confirm as paid" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:689 +msgid "Create a refund" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:710 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:57 +msgid "Source" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:743 +msgid "Cancel transfer" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:748 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:109 +msgid "Confirm as done" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:755 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:115 +msgid "Ignore" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:761 +#: pretix/control/templates/pretixcontrol/order/refund_process.html:58 +#: pretix/control/templates/pretixcontrol/orders/refunds.html:120 +msgid "Process refund" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:809 +msgid "Change" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:825 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:101 +#: pretix/presale/templates/pretixpresale/event/order.html:315 +msgid "ZIP code and city" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:838 +msgid "Valid EU VAT ID" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:844 +msgid "Check" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/index.html:890 +msgid "Order history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/mail_history.html:4 +#: pretix/control/templates/pretixcontrol/order/mail_history.html:7 +#: pretix/plugins/sendmail/signals.py:33 +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history.html:6 +msgid "Email history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/mail_history.html:33 +msgid "" +"This email has been sent with an older version of pretix. We are therefore " +"not able to display it here accurately." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/mail_history.html:39 +#: pretix/control/templates/pretixcontrol/order/mail_history.html:50 +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history.html:50 +msgid "Subject:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/pay.html:5 +#: pretix/control/templates/pretixcontrol/order/pay.html:9 +msgid "Mark order as paid" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/pay.html:20 +msgid "Do you really want to create a manual payment for this order?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/pay.html:37 +msgid "Create payment" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/pay_cancel.html:10 +msgid "" +"Do you really want to cancel this payment? You cannot revert this action." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/pay_cancel.html:25 +msgid "Yes, cancel payment" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/pay_complete.html:5 +#: pretix/control/templates/pretixcontrol/order/pay_complete.html:9 +msgid "Mark payment as complete" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/pay_complete.html:20 +msgid "Do you really want to mark this payment as complete?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/reactivate.html:18 +msgid "" +"By reactivating the order, you reverse its cancellation and transform this " +"back into a pending or paid order. This is only possible as long as all " +"products in the order are still available. If the order is pending payment, " +"the expiry date will be reset." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/reactivate.html:34 +msgid "Reactivate" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_cancel.html:4 +#: pretix/control/templates/pretixcontrol/order/refund_cancel.html:8 +msgid "Cancel refund" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_cancel.html:10 +msgid "" +"Do you really want to cancel this refund? You cannot revert this action." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_cancel.html:14 +msgid "" +"If the money is already on the way back, this will not stop the money, it " +"will just mark this transfer as aborted in pretix. This will also not " +"reactivate the order, it will just allow you to choose a new refund method." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_cancel.html:32 +msgid "Yes, cancel refund" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:6 +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:10 +#: pretix/control/templates/pretixcontrol/order/refund_start.html:5 +#: pretix/control/templates/pretixcontrol/order/refund_start.html:9 +msgid "Refund order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:22 +msgid "How should the refund be sent?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:24 +msgid "" +"Any payments that you selected for automatical refunds will be immediately " +"communicate the refund request to the respective payment provider. Manual " +"refunds will be created as pending refunds, you can then later mark them as " +"done once you actually transferred the money back to the customer." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:31 +msgid "Refund to original payment method" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:37 +msgid "Payment details" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:38 +msgid "Amount not refunded" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:39 +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:86 +msgid "Refund amount" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:67 +msgid "Full amount" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:70 +msgid "This payment method does not support automatic refunds." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:79 +msgid "Refund to a different payment method" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:85 +msgid "Recipient / options" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:113 +msgid "Transfer to other order" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:130 +#: pretix/control/templates/pretixcontrol/organizers/giftcard_create.html:5 +msgid "Create a new gift card" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:134 +msgid "" +"The gift card can be used to buy tickets for all events of this organizer." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:154 +msgid "Manual refund" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:158 +msgid "Keep transfer as to do" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:162 +#: pretix/control/templates/pretixcontrol/order/refund_done.html:5 +#: pretix/control/templates/pretixcontrol/order/refund_done.html:9 +#: pretix/control/templates/pretixcontrol/order/refund_process.html:6 +#: pretix/control/templates/pretixcontrol/order/refund_process.html:10 +msgid "Mark refund as done" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_choose.html:207 +msgid "Perform refund" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_done.html:20 +msgid "Do you really want to mark this refund as complete?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_done.html:29 +msgid "Mark as done" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_process.html:22 +#, python-format +msgid "" +"We received notice that %(amount)s have been refunded via " +"%(method)s. If this refund is processed, the order will be " +"underpaid by %(pending)s. The order total is " +"%(total)s." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_process.html:30 +msgid "Since the order is already canceled, this will not affect its state." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_process.html:36 +msgid "What should happen to the ticket order?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_process.html:43 +msgid "" +"Mark the order as unpaid and allow the customer to pay again with another " +"payment method." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_process.html:48 +msgid "Cancel the order irrevocably." +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_start.html:20 +msgid "How much do you want to refund?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_start.html:25 +msgid "Refund full paid amount" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_start.html:32 +msgid "Refund only" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/refund_start.html:40 +msgid "What should happen to the order?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/sendmail.html:4 +#: pretix/control/templates/pretixcontrol/order/sendmail.html:7 +#: pretix/plugins/sendmail/signals.py:25 +msgid "Send email" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/sendmail.html:23 +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:43 +msgid "E-mail preview" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/sendmail.html:34 +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:56 +msgid "Preview email" +msgstr "" + +#: pretix/control/templates/pretixcontrol/order/sendmail.html:37 +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:59 +msgid "Send" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/cancel.html:9 +msgid "" +"You can use this page to cancel and refund all orders at once in case you " +"need to call of your event. This will also disable all products so no new " +"orders can be created. Make sure that you check afterwards for any overpaid " +"orders or pending refunds that you need to take care of manually." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/cancel.html:15 +msgid "" +"After starting this operation, depending on the size of your event, it might " +"take a few minutes or longer until all orders are processed." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/cancel.html:21 +msgid "" +"All actions performed on this page are irreversible. If in doubt, please " +"contact support before using it." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/cancel.html:29 +msgctxt "subevents" +msgid "Select date" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/cancel.html:37 +msgid "Refund options" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/cancel.html:49 +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:82 +#: pretix/plugins/sendmail/apps.py:9 pretix/plugins/sendmail/apps.py:12 +#: pretix/plugins/sendmail/signals.py:16 +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history.html:4 +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:4 +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:6 +msgid "Send out emails" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/cancel.html:54 +msgid "" +"Since you are refunding your customers orders to gift cards, you should " +"explain to them how to access their gift cards. The easiest way to do this, " +"is to include an explanation and a link to their order using the here " +"provided email functionality." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/cancel.html:64 +msgid "" +"Your waiting list will not be deleted automatically, but it will receive no " +"new tickets due to the products being disabled. You can choose to inform " +"people on the waiting list by using this option." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/cancel.html:71 +msgid "" +"You should not execute this function multiple times for the same event, or " +"everyone on the waiting list will get multiple emails." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/cancel.html:83 +msgid "Cancel all orders" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/export.html:5 +#: pretix/control/templates/pretixcontrol/orders/export.html:8 +#: pretix/control/templates/pretixcontrol/organizers/export.html:5 +#: pretix/control/templates/pretixcontrol/organizers/export.html:8 +msgid "Data export" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/export.html:10 +#: pretix/control/templates/pretixcontrol/organizers/export.html:10 +msgid "Show all" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/export.html:30 +#: pretix/control/templates/pretixcontrol/organizers/export.html:30 +msgid "Start export" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:20 +#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:15 +msgid "Canceled (paid fee)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/import_process.html:6 +#: pretix/control/templates/pretixcontrol/orders/import_process.html:8 +#: pretix/control/templates/pretixcontrol/orders/import_start.html:4 +#: pretix/control/templates/pretixcontrol/orders/import_start.html:6 +msgid "Import attendees" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/import_process.html:13 +msgid "Data preview" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/import_process.html:43 +msgid "Import settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/import_process.html:49 +msgid "" +"The import will be performed regardless of your quotas, so it will be " +"possible to overbook your event using this option." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/import_process.html:57 +msgid "Perform import" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/import_start.html:10 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:16 +msgid "Upload a new file" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/import_start.html:16 +msgid "" +"The uploaded file should be a CSV file with a header row. You will be able " +"to assign the meanings of the different columns in the next step." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/import_start.html:22 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:35 +msgid "Import file" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/import_start.html:26 +msgid "Start import" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:13 +msgid "Nobody ordered a ticket yet." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:21 +msgid "Take your shop live" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:25 +msgid "Go to the ticket shop" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:33 +msgid "Search query:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:48 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:21 +msgid "Go!" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:83 +msgid "Advanced search" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:93 +#, python-format +msgid "List filtered by answers to question \"%(question)s\"." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:98 +msgid "Remove filter" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:116 +msgid "Order paid / total" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:151 +#: pretix/control/templates/pretixcontrol/search/orders.html:83 +msgid "CANCELLATION REQUESTED" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:154 +#: pretix/control/templates/pretixcontrol/orders/index.html:156 +#: pretix/control/templates/pretixcontrol/search/orders.html:86 +#: pretix/control/templates/pretixcontrol/search/orders.html:88 +msgid "REFUND PENDING" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:159 +#: pretix/control/templates/pretixcontrol/search/orders.html:91 +msgid "OVERPAID" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:161 +#: pretix/control/templates/pretixcontrol/search/orders.html:93 +msgid "UNDERPAID" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:163 +#: pretix/control/templates/pretixcontrol/search/orders.html:95 +msgid "FULLY PAID" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:175 +msgid "INVOICE NOT CANCELED" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:186 +msgid "Sum over all pages" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/index.html:189 +#, python-format +msgid "1 order" +msgid_plural "%(s)s orders" +msgstr[0] "" +msgstr[1] "" + +#: pretix/control/templates/pretixcontrol/orders/overview.html:5 +#: pretix/control/templates/pretixcontrol/orders/overview.html:16 +msgid "Order overview" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/overview.html:10 +msgid "Sales" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/overview.html:11 +msgid "Revenue (gross)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/overview.html:12 +msgid "Revenue (net)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/overview.html:55 +msgctxt "subevent" +msgid "" +"If you select a single date, fees will not be listed here as it might not be " +"clear which date they belong to." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/overview.html:69 +#: pretix/plugins/reports/exporters.py:259 +msgid "Purchased" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/overview.html:178 +msgid "" +"If you click links in this column, you will only find orders that are " +"canceled completely, while the numbers also include single canceled " +"positions within valid orders." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/refunds.html:31 +msgid "No refunds are currently open." +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/refunds.html:71 +msgid "Actions" +msgstr "" + +#: pretix/control/templates/pretixcontrol/orders/search.html:19 +msgid "Search" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/delete.html:3 +msgid "Delete organizer" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/delete.html:7 +msgid "" +"This operation will destroy this organizer including all events, " +"configuration, products, quotas, questions, vouchers, lists, etc." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/delete.html:20 +#, python-format +msgid "" +"To confirm you really want this, please type out the organizer's short name " +"(\"%(slug)s\") here:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/delete.html:38 +msgid "" +"eventyay does not allow deleting orders once they have been placed in order " +"to be audit-proof and trustable by financial authorities." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/detail.html:6 +#, python-format +msgid "Organizer: %(name)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_connect.html:6 +msgid "Connect to device:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_connect.html:11 +msgid "" +"Download an app that is compatible with pretix. For example, our check-in " +"app pretixSCAN is available on all major platforms." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_connect.html:14 +msgid "Download pretixSCAN" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_connect.html:18 +msgid "" +"Open the app that you want to connect and optionally reset it to the " +"original state." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_connect.html:20 +msgid "Scan the following configuration code:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_connect.html:22 +msgid "" +"If your app/device does not support scanning a QR code, you can also enter " +"the following information:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_connect.html:24 +msgid "System URL:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_connect.html:25 +msgid "Token:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_connect.html:31 +msgid "Device overview" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_edit.html:6 +msgid "Device:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_edit.html:8 +msgid "Connect a new device" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_edit.html:24 +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:73 +#: pretix/control/templates/pretixcontrol/vouchers/detail.html:75 +msgid "Advanced settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_edit.html:40 +msgid "Device history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_logs.html:4 +#: pretix/control/templates/pretixcontrol/organizers/device_logs.html:6 +msgid "Device logs" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_revoke.html:5 +msgid "Revoke device access:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_revoke.html:9 +msgid "Are you sure you want remove access for this device?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_revoke.html:10 +msgid "" +"All data of this device will stay available, but you can't use the device " +"any more." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_revoke.html:14 +msgid "All data uploaded by this device will stay available online." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_revoke.html:15 +msgid "" +"If data (e.g. POS transactions or check-ins) has been created on this device " +"and has not been uploaded, you will no longer be able to upload it." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/device_revoke.html:16 +msgid "" +"If the device software supports it, personal data such as orders will be " +"deleted from the device on the next synchronization attempt. Non-personal " +"data such as event metadata and POS transactions will persist until you " +"uninstall or reset the software manually." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/devices.html:9 +msgid "" +"This menu allows you to connect hardware devices such as box office " +"terminals or scanning terminals to your account." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/devices.html:17 +msgid "You haven't connected any hardware devices yet." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/devices.html:23 +#: pretix/control/templates/pretixcontrol/organizers/devices.html:28 +msgid "Connect a device" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/devices.html:36 +msgid "Hardware model" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/devices.html:37 +msgid "Software" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/devices.html:66 +msgid "Not yet initialized" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/devices.html:69 +msgid "Revoked" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/devices.html:91 +msgid "Connect" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/devices.html:100 +#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:70 +msgid "Logs" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/edit.html:12 +msgid "Organizer settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/edit.html:41 +msgid "Organizer page" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/edit.html:57 +msgid "" +"These settings will be used for the organizer page as well as for the " +"default settings for all events in this account that do not have their own " +"design settings." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/gate_delete.html:5 +msgid "Delete gate:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/gate_delete.html:8 +msgid "Are you sure you want to delete the gate?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/gate_edit.html:6 +msgid "Gate:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/gate_edit.html:8 +#: pretix/control/templates/pretixcontrol/organizers/gates.html:11 +msgid "Create a new gate" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/gates.html:7 +msgid "The list below shows gates that you can use to group check-in devices." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:7 +#: pretix/control/templates/pretixcontrol/organizers/giftcard_edit.html:6 +#, python-format +msgid "Gift card: %(card)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:23 +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:86 +msgid "Details" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:36 +msgid "Expire date" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:43 +msgid "Issued through sale" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:55 +msgid "Transactions" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:80 +msgid "" +"Create a payment on the respective order that cancels out with this " +"transaction. The order will then likely be overpaid." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:82 +msgid "Revert" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:86 +msgid "Manual transaction" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:119 +msgid "Gift card history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:8 +msgid "Issued gift cards" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:13 +msgid "" +"You haven't issued any gift cards yet. You can either set up a product in an " +"event shop to sell gift cards, or you can manually issue gift cards." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:20 +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:45 +msgid "Manually issue a gift card" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:101 +msgid "Accepted gift cards of other organizers" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:103 +msgid "" +"If you have access to multiple organizer accounts, you can configure that " +"ticket shops in this account will also accept gift codes issued through a " +"different organizer account, and vice versa." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/giftcards.html:119 +msgid "You are currently not accepting gift cards from other organizers." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/index.html:9 +msgid "" +"The list below shows all organizer accounts you have administrative access " +"to." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/logs.html:4 +#: pretix/control/templates/pretixcontrol/organizers/logs.html:6 +msgid "Organizer logs" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/properties.html:7 +msgid "" +"You can here define a set of metadata properties (i.e. variables) that you " +"can later set for your events and re-use in places like ticket layouts. This " +"is an useful timesaver if you create lots and lots of events." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/properties.html:15 +#: pretix/control/templates/pretixcontrol/organizers/property_edit.html:8 +msgid "Create a new property" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/properties.html:20 +msgid "Property" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/property_delete.html:5 +msgid "Delete property:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/property_delete.html:8 +msgid "Are you sure you want to delete the property?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/property_edit.html:6 +msgid "Property:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_delete.html:5 +msgid "Delete team:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_delete.html:7 +msgid "" +"You cannot delete the team because there would be no one left who could " +"change team permissions afterwards." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_delete.html:17 +msgid "Are you sure you want to delete the team?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:6 +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:6 +msgid "Team:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:8 +#: pretix/control/templates/pretixcontrol/organizers/teams.html:11 +msgid "Create a new team" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:10 +msgid "You will be able to add team members in the next step." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:23 +msgid "Organizer permissions" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_edit.html:30 +msgid "Event permissions" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:21 +msgid "Member" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:32 +msgid "Two-factor authentication enabled" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:36 +msgid "Two-factor authentication disabled" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:43 +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:63 +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:109 +msgid "Remove" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:53 +msgid "invited, pending response" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:55 +msgid "resend invite" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:73 +msgid "" +"To add a new user, you can enter their email address here. If they already " +"have an eventyay account, they will immediately be added to the event. " +"Otherwise, they will be sent an email with an invitation." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:81 +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:122 +msgid "Add" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:88 +msgid "API tokens" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/team_members.html:132 +msgid "Team history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/teams.html:7 +msgid "The list below shows all teams that exist within this organizer." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/teams.html:17 +msgid "Members" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/teams.html:33 +#, python-format +msgid "+ %(count)s invited" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhook_edit.html:6 +msgid "Modify webhook" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhook_edit.html:8 +msgid "Create a new webhook" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhook_logs.html:5 +#, python-format +msgid "Logs for webhook %(url)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhook_logs.html:7 +msgid "This page shows all calls to your webhook in the past 30 days." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhook_logs.html:15 +msgid "This webhook was retried since it previously failed." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhook_logs.html:44 +msgid "Failed" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhook_logs.html:54 +msgid "Request URL" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhook_logs.html:56 +msgid "Request POST body" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhook_logs.html:58 +msgid "Response body" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhook_logs.html:64 +msgid "This webhook did not receive any events in the last 30 days." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:9 +msgid "" +"This menu allows you to create webhooks to connect eventyay to other online " +"services." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:13 +msgid "Read documentation" +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:19 +msgid "You haven't created any webhooks yet." +msgstr "" + +#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:25 +#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:30 +msgid "Create webhook" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pagination.html:14 +#, python-format +msgid "Page %(page)s of %(of)s (%(count)s elements)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pagination.html:28 +#: pretix/control/templates/pretixcontrol/pagination_huge.html:28 +#, python-format +msgid "%(count)s elements" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pagination.html:38 +#: pretix/control/templates/pretixcontrol/pagination_huge.html:38 +msgid "Show per page:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pagination_huge.html:14 +#, python-format +msgid "Page %(page)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:5 +#: pretix/control/templates/pretixcontrol/pdf/index.html:15 +msgid "PDF Editor" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:31 +#: pretix/plugins/banktransfer/refund_export.py:25 +msgid "Code" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:35 +msgid "Paste" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:39 +msgid "Undo" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:43 +msgid "Redo" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:48 +msgid "Editor" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:64 +msgid "" +"This feature is only intended for advanced users. We recommend to only use " +"it to copy and share ticket designs, not to modify the design source code." +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:78 +msgid "Apply" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:86 +msgid "Uploading new PDF background…" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:94 +msgid "Welcome to the PDF ticket editor!" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:96 +msgid "" +"This editor allows you to create a design for the PDF tickets of your event. " +"You can upload a background PDF and then use this tool to place texts and a " +"QR code on the ticket." +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:107 +msgid "" +"Please note that the editor can only provide a rough preview. Some details, " +"for example in text rendering, might look slightly different in the final " +"tickets. You can use the \"Preview\" button on the right for a more precise " +"preview." +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:121 +msgid "" +"The editor is tested with recent versions of Google Chrome, Mozilla Firefox " +"and Opera. Other browsers, especially Internet Explorer or Microsoft Edge, " +"might have problems displaying your background PDF or loading the correct " +"fonts." +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:129 +msgid "" +"The editor requires JavaScript to work. Please enable JavaScript in your " +"browser to continue." +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:139 +#: pretix/control/templates/pretixcontrol/pdf/index.html:171 +msgid "Loading…" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:142 +msgid "Start editing" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:157 +msgid "Cut" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:161 +msgid "Copy" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:177 +#: pretix/control/templates/pretixcontrol/pdf/index.html:233 +#: pretix/control/templates/pretixcontrol/pdf/index.html:328 +msgid "Width (mm)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:181 +#: pretix/control/templates/pretixcontrol/pdf/index.html:238 +msgid "Height (mm)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:187 +msgid "Background PDF" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:190 +msgid "Create empty background" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:195 +msgid "Upload custom background" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:201 +msgid "" +"After you changed the page size, you need to create a new empty background. " +"If you want to use a custom background, it already needs to have the correct " +"size." +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:210 +msgid "Preferred language" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:221 +msgid "x (mm)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:226 +msgid "y (mm)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:245 +msgid "Size (mm)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:253 +msgid "" +"The final QR code will be slightly smaller because some whitespace is " +"required for proper scanning." +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:262 +msgid "Font size (pt)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:281 +msgid "Flow multiple lines downward from specified position" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:290 +msgid "Text color" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:333 +msgid "Rotation (°)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:340 +msgid "Style" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:342 +msgid "Dark" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:343 +msgid "Light" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:349 +msgid "Image content" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:360 +msgid "Text content" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:367 +msgid "Event attribute:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:372 +msgid "Item attribute:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:375 +msgid "Other…" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:385 +msgid "Add a new object" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:394 +msgid "QR code for Check-In" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:400 +msgid "QR code for Lead Scanning" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:406 +msgid "pretix Logo" +msgstr "" + +#: pretix/control/templates/pretixcontrol/pdf/index.html:410 +msgid "Dynamic image" +msgstr "" + +#: pretix/control/templates/pretixcontrol/search/orders.html:104 +msgid "" +"We couldn't find any orders that you have access to and that match your " +"search query." +msgstr "" + +#: pretix/control/templates/pretixcontrol/select2_widget.html:9 +msgid "Please enable JavaScript in your browser." +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/download.html:5 +#: pretix/control/templates/pretixcontrol/shredder/download.html:8 +#: pretix/control/templates/pretixcontrol/shredder/index.html:5 +#: pretix/control/templates/pretixcontrol/shredder/index.html:8 +msgid "Data shredder" +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/download.html:15 +msgid "Step 1: Download data" +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/download.html:17 +msgid "(Optional) Step 1: Download data" +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/download.html:20 +msgid "" +"You are about to permanently delete data from the server, even though you " +"might be required to keep some of this data on file. You can therefore " +"download the following file and store it in a safe place:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/download.html:29 +msgid "Download data" +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/download.html:34 +msgid "Step 2: Confirm deletion" +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/download.html:36 +#, python-format +msgid "" +"Please re-check that you are fully certain that you want to delete the " +"selected categories of data from the event %(event)s. To " +"confirm you really want this, please type out the event's short name " +"(\"%(slug)s\") here:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/download.html:41 +msgid "Event short name" +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/download.html:46 +msgid "Step 3: Confirm download" +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/download.html:48 +msgid "" +"In the downloaded file, there is a text file named \"CONFIRM_CODE.txt\" with " +"a six-character code. Please enter this code here to confirm that you " +"successfully downloaded the file." +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/download.html:53 +msgid "Confirmation code" +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/index.html:11 +msgid "" +"This feature allows you to remove personal data from this event. You will " +"first select what kind of data you want to shred, then you are able to " +"download the affected data and after you confirmed the download, the data " +"will be removed from the server's database. The data might still exist in " +"backups for a limited period of time." +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/index.html:18 +msgid "" +"Using this will not remove the orders for your event, it just scrubs them of " +"data that can be linked to individual persons." +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/index.html:26 +msgid "" +"It is within your own responsibility to check if you are allowed to delete " +"the affected data in your legislation, e.g. for reasons of taxation. In many " +"countries, you need to keep some data in the live system in case of an audit." +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/index.html:32 +msgid "" +"For most categories of data, you will be able to partially download the data " +"to store it offline. Some kinds of data (such as some payment information) " +"as well as historical log data cannot be downloaded at the moment." +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/index.html:46 +msgid "Data selection" +msgstr "" + +#: pretix/control/templates/pretixcontrol/shredder/index.html:63 +msgid "" +"We recommend not to remove this data because you might need it in case of a " +"tax audit." +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:10 +msgctxt "subevent" +msgid "Create multiple dates" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:35 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:146 +msgid "Repetition rule" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:81 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:192 +#, python-format +msgid "Repeat every %(interval)s %(freq)s, starting at %(start)s." +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:89 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:200 +msgid "At the same date every year" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:93 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:204 +#, python-format +msgid "On the %(setpos)s %(weekday)s of %(month)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:103 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:214 +msgid "At the same date every month" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:107 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:218 +#, python-format +msgid "On the %(setpos)s %(weekday)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:120 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:231 +#, python-format +msgid "Repeat for %(count)s times" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:126 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:237 +#, python-format +msgid "Repeat until %(until)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:258 +msgctxt "subevent" +msgid "Preview" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:265 +msgctxt "subevent" +msgid "Times" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:339 +msgid "Start of first slot" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:345 +msgid "End of time slots" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:351 +msgid "Length of slots" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:355 +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:364 +msgid "minutes" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:360 +msgid "Break between slots" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:370 +msgid "Create" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:377 +msgid "Add a single time slot" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:379 +msgid "Add many time slots" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:479 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:246 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:121 +msgid "Add a new quota" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:483 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:152 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:125 +msgid "Item prices" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk.html:572 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:339 +#: pretix/control/templates/pretixcontrol/subevents/detail.html:214 +msgid "Add a new check-in list" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:8 +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:11 +msgctxt "subevent" +msgid "Change multiple dates" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:13 +#, python-format +msgid "%(number)s selected" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:171 +msgid "" +"You selected a set of dates that currently have different quota setups. You " +"can therefore not change their quotas in bulk. If you want, you can set up a " +"new set of quotas to replace the quota setup of all " +"selected dates." +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:257 +msgid "" +"You selected a set of dates that currently have different check-in list " +"setups. You can therefore not change their check-in lists in bulk." +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/delete.html:4 +#: pretix/control/templates/pretixcontrol/subevents/delete.html:6 +msgctxt "subevent" +msgid "Delete date" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/delete.html:9 +#, python-format +msgid "Are you sure you want to delete the date %(subevent)s?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:4 +#: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:6 +msgctxt "subevent" +msgid "Delete dates" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:10 +msgid "Are you sure you want to delete the following dates?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/delete_bulk.html:21 +msgid "" +"The following dates can't be deleted as they already have orders, but will " +"be disabled instead." +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:10 +msgctxt "subevent" +msgid "Create date" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/detail.html:230 +msgctxt "subevent" +msgid "Date history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:11 +msgid "You haven't created any dates for this event series yet." +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:18 +#: pretix/control/templates/pretixcontrol/subevents/index.html:53 +msgctxt "subevent" +msgid "Create a new date" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:21 +#: pretix/control/templates/pretixcontrol/subevents/index.html:56 +msgctxt "subevent" +msgid "Create many new dates" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:70 +msgid "select all rows for batch-operation" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:77 +msgid "Begin" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:98 +msgid "Select all results on other pages as well" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:109 +msgid "select row for batch-operation" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:150 +msgctxt "subevent" +msgid "Use as a template for a new date" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:155 +msgctxt "subevent" +msgid "Use as a template for many new dates" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:170 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:195 +msgid "Delete selected" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:174 +msgid "Edit selected" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:177 +msgid "Activate selected" +msgstr "" + +#: pretix/control/templates/pretixcontrol/subevents/index.html:180 +msgid "Deactivate selected" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_add.html:4 +#: pretix/control/templates/pretixcontrol/user/2fa_add.html:6 +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:4 +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:6 +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_webauthn.html:6 +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_webauthn.html:8 +msgid "Add a two-factor authentication device" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:8 +msgid "To set up this device, please follow the following steps:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:12 +msgid "Download the Google Authenticator application to your phone:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:17 +msgid "Android (Google Play)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:23 +msgid "Android (F-Droid)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:28 +msgid "iOS (iTunes)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:33 +msgid "Blackberry (Link via Google)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:39 +msgid "Add a new account to the app by scanning the following barcode:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:43 +msgid "Can't scan the barcode?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:49 +msgid "Use the \"provide a key\" option of your authenticator app." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:52 +msgid "In \"Account name\", type your login name for pretix." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:55 +msgid "In \"Secret\"/\"Account Key\", enter the following code:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:60 +msgid "copy" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:68 +msgid "" +"If present, make sure \"Time-based\"/\"TOTP\" and 6 digit codes are selected." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:74 +msgid "Enter the displayed code here:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:83 +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_webauthn.html:19 +msgid "Require second factor for future logins" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_webauthn.html:11 +msgid "" +"Please connect your WebAuthn device. If it has a button, touch it now. You " +"might have to unplug the device and plug it back in again." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_confirm_webauthn.html:26 +msgid "Device registration failed." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_delete.html:4 +#: pretix/control/templates/pretixcontrol/user/2fa_delete.html:6 +msgid "Delete a two-factor authentication device" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_delete.html:9 +#, python-format +msgid "" +"Are you sure you want to delete the authentication device \"%(device)s\"?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_delete.html:12 +msgid "You will no longer be able to use this device to log in to pretix." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_delete.html:14 +msgid "" +"If this is the only device connected to your account, we will disable two-" +"factor authentication." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_disable.html:4 +#: pretix/control/templates/pretixcontrol/user/2fa_disable.html:6 +msgid "Disable two-factor authentication" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_disable.html:10 +msgid "Do you really want to disable two-factor authentication?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_disable.html:13 +msgid "You will no longer require a second device to log in to your account." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_enable.html:4 +#: pretix/control/templates/pretixcontrol/user/2fa_enable.html:6 +msgid "Enable two-factor authentication" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_enable.html:10 +msgid "Do you really want to enable two-factor authentication?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_enable.html:13 +msgid "" +"You will no longer be able to log in without one of your configured devices." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_enable.html:14 +msgid "" +"Please make sure to print out or copy the emergency tokens and store them in " +"a safe place." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:4 +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:6 +#: pretix/control/templates/pretixcontrol/user/settings.html:45 +msgid "Two-factor authentication" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:8 +msgid "" +"Two-factor authentication is a way to add additional security to your " +"account. If you enable it, you will not only need your password to log in, " +"but also an additional token that is generated e.g. by an app on your " +"smartphone or a hardware token generator and that changes on a regular basis." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:17 +msgid "Obligatory usage of two-factor authentication" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:21 +msgid "This system enforces the usage of two-factor authentication!" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:24 +msgid "Please set up at least one device below." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:26 +msgid "Please activate two-factor authentication using the button below." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:35 +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:51 +msgid "Two-factor status" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:44 +msgid "Two-factor authentication is currently enabled." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:60 +msgid "Two-factor authentication is currently disabled." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:63 +msgid "To enable it, you need to configure at least one device below." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:70 +msgid "Registered devices" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:93 +msgid "Add a new device" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:100 +msgid "Emergency tokens" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:104 +msgid "" +"If you lose access to your devices, you can use one of the following keys to " +"log in. We recommend to store them in a safe place, e.g. printed out or in a " +"password manager. Every token can be used at most once." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:106 +msgid "Unused tokens:" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_main.html:114 +msgid "Generate new emergency tokens" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_regenemergency.html:4 +#: pretix/control/templates/pretixcontrol/user/2fa_regenemergency.html:6 +msgid "Regenerate emergency codes" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_regenemergency.html:10 +msgid "Do you really want to regenerate your emergency codes?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/2fa_regenemergency.html:13 +msgid "The old codes will no longer work." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:4 +#: pretix/control/templates/pretixcontrol/user/notifications.html:6 +msgid "Notification settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:16 +msgid "Notifications are turned on according to the settings below." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:25 +msgid "All notifications are turned off globally." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:33 +msgid "Choose event" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:37 +msgid "All my events" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:45 +msgid "Save your modifications before switching events." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:52 +msgid "Choose notifications to get" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:56 +msgid "Notification type" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:57 +msgid "E-Mail notification" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:70 +msgid "Global" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:70 +#: pretix/control/templates/pretixcontrol/user/notifications.html:72 +#: pretix/control/templates/pretixcontrol/user/settings.html:20 +msgid "On" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:70 +#: pretix/control/templates/pretixcontrol/user/notifications.html:71 +#: pretix/control/templates/pretixcontrol/user/settings.html:24 +msgid "Off" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications.html:75 +msgid "You have no permission to receive this notification" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/notifications_disable.html:4 +msgid "Disable notifications" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/reauth.html:12 +#, python-format +msgid "" +"We just want to make sure it's really you. Please re-authenticate with " +"'%(login_provider)s'." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/reauth.html:14 +msgid "" +"We just want to make sure it's really you. Please re-enter your password to " +"continue." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/reauth.html:26 +msgid "Alternatively, you can use your WebAuthn device." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/reauth.html:40 +msgid "Log in as someone else" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/settings.html:4 +#: pretix/control/templates/pretixcontrol/user/settings.html:6 +msgid "Account settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/settings.html:35 +msgid "Login settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/settings.html:50 +msgid "Change two-factor settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/settings.html:65 +msgid "Show applications" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/settings.html:74 +msgid "Show account history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:4 +msgid "Staff session" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:6 +msgid "Session notes" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:17 +msgid "Audit log" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:30 +msgid "Method" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:31 +msgid "URL" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:32 +msgid "On behalf of" +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/staff_session_start.html:8 +msgid "" +"To perform this action, you need to start an administrative session. " +"Everything you do in that session will be logged and you will later be asked " +"to fill in a comment on what you did in your session for later reference." +msgstr "" + +#: pretix/control/templates/pretixcontrol/user/staff_session_start.html:18 +msgid "Start session" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/anonymize.html:4 +#: pretix/control/templates/pretixcontrol/users/anonymize.html:6 +msgid "Anonymize user" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/anonymize.html:11 +msgid "Disable and anonymize user" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/create.html:4 +#: pretix/control/templates/pretixcontrol/users/create.html:6 +msgid "Create user" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/create.html:11 +#: pretix/control/templates/pretixcontrol/users/form.html:26 +msgid "Base settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/create.html:18 +#: pretix/control/templates/pretixcontrol/users/form.html:34 +msgid "Log-in settings" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/form.html:11 +msgid "Send password reset email" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/form.html:16 +msgid "Impersonate user" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/form.html:18 +msgid "Anonymize" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/form.html:36 +msgid "Authentication backend" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/form.html:50 +msgid "Team memberships" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/form.html:55 +#, python-format +msgid "Team \"%(team)s\" of organizer \"%(organizer)s\"" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/form.html:74 +msgid "User history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/form.html:83 +msgid "User created." +msgstr "" + +#: pretix/control/templates/pretixcontrol/users/index.html:30 +msgid "Create a new user" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:7 +msgid "Create multiple vouchers" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:12 +msgid "Voucher codes" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:17 +msgid "Prefix (optional)" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:21 +msgctxt "number_of_things" +msgid "Number" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:25 +msgid "Generate random codes" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:29 +msgid "Copy codes" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:39 +#: pretix/control/templates/pretixcontrol/vouchers/detail.html:27 +msgid "Voucher details" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:44 +#: pretix/control/templates/pretixcontrol/vouchers/detail.html:46 +#: pretix/control/views/vouchers.py:73 +msgid "Price effect" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:56 +#: pretix/control/templates/pretixcontrol/vouchers/detail.html:58 +msgid "" +"If you choose \"any product\" for a specific quota and choose to reserve " +"quota for this voucher above, the product can still be unavailable to the " +"voucher holder if another quota associated with the product is sold out!" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/delete.html:4 +#: pretix/control/templates/pretixcontrol/vouchers/delete.html:6 +msgid "Delete voucher" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/delete.html:9 +#, python-format +msgid "" +"Are you sure you want to delete the voucher %(voucher)s?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:4 +#: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:6 +msgid "Delete vouchers" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:10 +msgid "Are you sure you want to delete the following vouchers?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:21 +msgid "" +"The following vouchers can't be deleted as they already have been redeemed, " +"but they will be set to fully redeemed instead." +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/detail.html:11 +msgid "This voucher already has been used. It is not recommended to modify it." +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/detail.html:15 +#, python-format +msgid "Order %(code)s" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/detail.html:32 +msgid "Voucher link" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/detail.html:89 +msgid "Voucher history" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/index.html:10 +msgid "" +"Vouchers allow you to assign tickets to specific persons for a lower price. " +"They also enable you to reserve some quota for your very special guests." +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/index.html:64 +msgid "Your search did not match any vouchers." +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/index.html:66 +msgid "You haven't created any vouchers yet." +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/index.html:73 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:80 +msgid "Create a new voucher" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/index.html:75 +#: pretix/control/templates/pretixcontrol/vouchers/index.html:83 +msgid "Create multiple new vouchers" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/index.html:86 +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:126 +msgid "Download list" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/index.html:105 +msgid "Redemptions" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/index.html:110 +msgid "Expiry" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/index.html:167 +#, python-format +msgid "Any product in quota \"%(quota)s\"" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/index.html:183 +msgid "Use as a template for new vouchers" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/tags.html:4 +#: pretix/control/templates/pretixcontrol/vouchers/tags.html:6 +msgid "Voucher tags" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/tags.html:8 +msgid "" +"If you add a \"tag\" to a voucher, you can here see statistics on their " +"usage." +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/tags.html:32 +msgid "You haven't added any tags to vouchers yet." +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/tags.html:43 +msgid "Redeemed vouchers" +msgstr "" + +#: pretix/control/templates/pretixcontrol/vouchers/tags.html:57 +msgid "Empty tag" +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/delete.html:4 +#: pretix/control/templates/pretixcontrol/waitinglist/delete.html:6 +msgid "Delete entry" +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/delete.html:9 +#, python-format +msgid "" +"Are you sure you want to delete the following waiting list entry " +"%(entry)s?" +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:11 +msgid "" +"The waiting list is disabled, so if the event is sold out, people cannot add " +"themselves to this list. If you want to enable it, go to the event settings." +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:21 +msgid "Send vouchers" +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:27 +msgid "" +"You have configured that vouchers will automatically be sent to the persons " +"on this list who waited the longest as soon as capacity becomes available. " +"It might take up to half an hour for the vouchers to be sent after the " +"capacity is available, so don't worry if entries do not disappear here " +"immediately. If you want, you can also send them out manually right now." +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:36 +msgid "" +"Currently, no vouchers will be sent since your event is not live or is not " +"selling tickets." +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:41 +msgid "" +"You have configured that vouchers will not be sent " +"automatically. You can either send them one-by-one in an order of your " +"choice by clicking the buttons next to a line in this table (if sufficient " +"quota is available) or you can press the big button below this text to send " +"out as many vouchers as currently possible to the persons who waited longest." +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:62 +msgid "Send as many vouchers as possible" +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:71 +msgid "Sales estimate" +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:74 +#, python-format +msgid "" +"If you can make enough room at your event to fit all the persons on the " +"waiting list in, you could sell tickets worth an additional " +"%(amount)s." +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:98 +msgid "Successfully redeemed" +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:146 +msgid "On the list since" +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:175 +msgid "" +"This entry has a modified priority. The higher this number is, the earlier " +"this person will be assigned a voucher." +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:191 +#, python-format +msgid "" +"\n" +" Waiting, product %(num)sx available\n" +" " +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:196 +msgid "Waiting, product unavailable" +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:206 +msgid "Send a voucher" +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:213 +msgid "Move to the top of the list" +msgstr "" + +#: pretix/control/templates/pretixcontrol/waitinglist/index.html:217 +msgid "Move to the end of the list" +msgstr "" + +#: pretix/control/templatetags/hierarkey_form.py:44 +msgid "Organizer-level settings" +msgstr "" + +#: pretix/control/templatetags/hierarkey_form.py:44 +msgid "Site-level settings" +msgstr "" + +#: pretix/control/templatetags/hierarkey_form.py:47 +msgid "" +"These settings are currently set on organizer level. This way, you can " +"easily change them for all of your events at the same time. You can either " +"go to the organizer settings to change them or decouple them from the " +"organizer account to change them for this event individually." +msgstr "" + +#: pretix/control/templatetags/hierarkey_form.py:51 +msgid "" +"These settings are currently set on global level. This way, you can easily " +"change them for all organizers at the same time. You can either go to the " +"global settings to change them or decouple them from the global settings to " +"change them for this event individually." +msgstr "" + +#: pretix/control/templatetags/hierarkey_form.py:55 +msgid "Change only for this event" +msgstr "" + +#: pretix/control/templatetags/hierarkey_form.py:55 +msgid "Change only for this organizer" +msgstr "" + +#: pretix/control/templatetags/hierarkey_form.py:56 +msgid "Change for all events" +msgstr "" + +#: pretix/control/templatetags/hierarkey_form.py:56 +msgid "Change for all organizers" +msgstr "" + +#: pretix/control/views/__init__.py:145 +msgid "That page number is not an integer" +msgstr "" + +#: pretix/control/views/__init__.py:147 +msgid "That page number is less than 1" +msgstr "" + +#: pretix/control/views/auth.py:151 +msgid "" +"You used an invalid link. Please copy the link from your email to the " +"address bar and make sure it is correct and that the link has not been used " +"before." +msgstr "" + +#: pretix/control/views/auth.py:157 +msgid "" +"You cannot accept the invitation for \"{}\" as you already are part of this " +"team." +msgstr "" + +#: pretix/control/views/auth.py:171 +msgid "You are now part of the team \"{}\"." +msgstr "" + +#: pretix/control/views/auth.py:201 +msgid "Welcome to pretix! You are now part of the team \"{}\"." +msgstr "" + +#: pretix/control/views/auth.py:259 +msgid "" +"If the address is registered to valid account, then we have sent you an e-" +"mail containing further instructions. Please note that we will send at most " +"one email every 24 hours." +msgstr "" + +#: pretix/control/views/auth.py:262 +msgid "" +"If the address is registered to valid account, then we have sent you an e-" +"mail containing further instructions." +msgstr "" + +#: pretix/control/views/auth.py:282 +msgid "" +"You clicked on an invalid link. Please check that you copied the full web " +"address into your address bar. Please note that the link is only valid for " +"three days and that the link can only be used once." +msgstr "" + +#: pretix/control/views/auth.py:285 +msgid "We were unable to find the user you requested a new password for." +msgstr "" + +#: pretix/control/views/auth.py:318 +msgid "You can now login using your new password." +msgstr "" + +#: pretix/control/views/auth.py:359 +msgid "Please try again." +msgstr "" + +#: pretix/control/views/auth.py:414 +msgid "Invalid code, please try again." +msgstr "" + +#: pretix/control/views/checkin.py:118 +msgid "You do not have permission to perform this action." +msgstr "" + +#: pretix/control/views/checkin.py:140 +msgid "The selected check-ins have been reverted." +msgstr "" + +#: pretix/control/views/checkin.py:170 +msgid "The selected tickets have been marked as checked in." +msgstr "" + +#: pretix/control/views/checkin.py:253 +msgid "The new check-in list has been created." +msgstr "" + +#: pretix/control/views/checkin.py:260 pretix/control/views/checkin.py:303 +#: pretix/control/views/event.py:216 pretix/control/views/event.py:424 +#: pretix/control/views/event.py:463 pretix/control/views/event.py:621 +#: pretix/control/views/event.py:778 pretix/control/views/event.py:1138 +#: pretix/control/views/event.py:1199 pretix/control/views/event.py:1306 +#: pretix/control/views/item.py:186 pretix/control/views/item.py:231 +#: pretix/control/views/item.py:637 pretix/control/views/item.py:663 +#: pretix/control/views/item.py:778 pretix/control/views/item.py:982 +#: pretix/control/views/item.py:1131 pretix/control/views/item.py:1282 +#: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 +#: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 +#: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 +#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/ticketoutputpdf/views.py:106 +msgid "We could not save your changes. See below for details." +msgstr "" + +#: pretix/control/views/checkin.py:282 pretix/control/views/checkin.py:319 +msgid "The requested list does not exist." +msgstr "" + +#: pretix/control/views/checkin.py:328 +msgid "The selected list has been deleted." +msgstr "" + +#: pretix/control/views/dashboards.py:81 +msgid "Attendees (ordered)" +msgstr "" + +#: pretix/control/views/dashboards.py:91 +msgid "Attendees (paid)" +msgstr "" + +#: pretix/control/views/dashboards.py:102 +#, python-brace-format +msgid "Total revenue ({currency})" +msgstr "" + +#: pretix/control/views/dashboards.py:112 +msgid "Active products" +msgstr "" + +#: pretix/control/views/dashboards.py:177 +msgid "available to give to people on waiting list" +msgstr "" + +#: pretix/control/views/dashboards.py:187 +msgid "total waiting list length" +msgstr "" + +#: pretix/control/views/dashboards.py:216 +#, python-brace-format +msgid "{quota} left" +msgstr "" + +#: pretix/control/views/dashboards.py:236 +msgid "Your ticket shop is" +msgstr "" + +#: pretix/control/views/dashboards.py:236 +msgid "Click here to change" +msgstr "" + +#: pretix/control/views/dashboards.py:237 +msgid "live" +msgstr "" + +#: pretix/control/views/dashboards.py:238 +msgid "live and in test mode" +msgstr "" + +#: pretix/control/views/dashboards.py:239 +msgid "not yet public" +msgstr "" + +#: pretix/control/views/dashboards.py:240 +msgid "in private test mode" +msgstr "" + +#: pretix/control/views/dashboards.py:268 +#, python-brace-format +msgid "Present – {list}" +msgstr "" + +#: pretix/control/views/dashboards.py:286 +msgid "Welcome to pretix!" +msgstr "" + +#: pretix/control/views/dashboards.py:292 +msgid "Get started with our setup tool" +msgstr "" + +#: pretix/control/views/dashboards.py:293 +msgid "" +"To start selling tickets, you need to create products or quotas. The fastest " +"way to create this is to use our setup tool." +msgstr "" + +#: pretix/control/views/dashboards.py:295 +msgid "Set up event" +msgstr "" + +#: pretix/control/views/dashboards.py:481 pretix/control/views/typeahead.py:52 +msgctxt "subevent" +msgid "No dates" +msgstr "" + +#: pretix/control/views/dashboards.py:494 +msgid "Action required" +msgstr "" + +#: pretix/control/views/dashboards.py:498 +#: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:38 +#: pretix/presale/templates/pretixpresale/fragment_calendar.html:89 +#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:75 +#: pretix/presale/templates/pretixpresale/organizers/index.html:120 +#: pretix/presale/views/widget.py:346 +msgid "Sale over" +msgstr "" + +#: pretix/control/views/dashboards.py:500 +#: pretix/presale/templates/pretixpresale/fragment_calendar.html:96 +#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:82 +#: pretix/presale/views/widget.py:354 +msgid "Soon" +msgstr "" + +#: pretix/control/views/dashboards.py:525 +#, python-brace-format +msgid "{num} order" +msgid_plural "{num} orders" +msgstr[0] "" +msgstr[1] "" + +#: pretix/control/views/event.py:183 pretix/control/views/organizer.py:301 +msgid "" +"Your changes have been saved. Please note that it can take a short period of " +"time until your changes become active." +msgstr "" + +#: pretix/control/views/event.py:291 +msgid "Integrations" +msgstr "" + +#: pretix/control/views/event.py:292 +msgid "Customizations" +msgstr "" + +#: pretix/control/views/event.py:293 +msgid "Output and export formats" +msgstr "" + +#: pretix/control/views/event.py:294 +msgid "API features" +msgstr "" + +#: pretix/control/views/event.py:300 pretix/control/views/event.py:301 +msgid "Other" +msgstr "" + +#: pretix/control/views/event.py:395 +msgid "" +"This payment provider does not exist or the respective plugin is disabled." +msgstr "" + +#: pretix/control/views/event.py:608 +#, python-format +msgid "An error occurred while contacting the SMTP server: %s" +msgstr "" + +#: pretix/control/views/event.py:611 +msgid "" +"Your changes have been saved and the connection attempt to your SMTP server " +"was successful." +msgstr "" + +#: pretix/control/views/event.py:614 +msgid "" +"We've been able to contact the SMTP server you configured. Remember to check " +"the \"use custom SMTP server\" checkbox, otherwise your SMTP server will not " +"be used." +msgstr "" + +#: pretix/control/views/event.py:651 pretix/plugins/sendmail/views.py:143 +msgid "This value will be replaced based on dynamic parameters." +msgstr "" + +#: pretix/control/views/event.py:659 +msgid "invalid item" +msgstr "" + +#: pretix/control/views/event.py:709 +msgid "Unknown e-mail renderer." +msgstr "" + +#: pretix/control/views/event.py:725 pretix/control/views/orders.py:383 +#: pretix/presale/views/order.py:923 pretix/presale/views/order.py:930 +msgid "You requested an invalid ticket output type." +msgstr "" + +#: pretix/control/views/event.py:870 +msgid "Your shop is live now!" +msgstr "" + +#: pretix/control/views/event.py:878 +msgid "We've taken your shop down. You can re-enable it whenever you want!" +msgstr "" + +#: pretix/control/views/event.py:886 +msgid "Your shop is now in test mode!" +msgstr "" + +#: pretix/control/views/event.py:903 +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:909 +msgid "We've disabled test mode for you. Let's sell some real tickets!" +msgstr "" + +#: pretix/control/views/event.py:926 +msgid "This event can not be deleted." +msgstr "" + +#: pretix/control/views/event.py:949 +msgid "The event has been deleted." +msgstr "" + +#: pretix/control/views/event.py:952 +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:1042 +msgid "The issue has been marked as resolved!" +msgstr "" + +#: pretix/control/views/event.py:1063 pretix/control/views/orders.py:459 +msgid "The comment has been updated." +msgstr "" + +#: pretix/control/views/event.py:1065 pretix/control/views/orders.py:461 +msgid "Could not update the comment." +msgstr "" + +#: pretix/control/views/event.py:1103 pretix/control/views/main.py:269 +msgid "VAT" +msgstr "" + +#: pretix/control/views/event.py:1132 +msgid "The new tax rule has been created." +msgstr "" + +#: pretix/control/views/event.py:1155 pretix/control/views/event.py:1215 +msgid "The requested tax rule does not exist." +msgstr "" + +#: pretix/control/views/event.py:1224 +msgid "The selected tax rule has been deleted." +msgstr "" + +#: pretix/control/views/event.py:1226 +msgid "The selected tax rule can not be deleted." +msgstr "" + +#: pretix/control/views/event.py:1276 +msgid "Your event is not empty, you need to set it up manually." +msgstr "" + +#: pretix/control/views/event.py:1410 +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:1429 +msgid "Regular ticket" +msgstr "" + +#: pretix/control/views/event.py:1434 +msgid "Reduced ticket" +msgstr "" + +#: pretix/control/views/global_settings.py:29 +#: pretix/control/views/global_settings.py:52 +msgid "Your changes have not been saved, see below for errors." +msgstr "" + +#: pretix/control/views/item.py:87 pretix/control/views/item.py:1367 +msgid "The requested product does not exist." +msgstr "" + +#: pretix/control/views/item.py:100 +msgid "The order of items has been updated." +msgstr "" + +#: pretix/control/views/item.py:131 pretix/control/views/item.py:166 +#: pretix/control/views/item.py:255 +msgid "The requested product category does not exist." +msgstr "" + +#: pretix/control/views/item.py:142 +msgid "The selected category has been deleted." +msgstr "" + +#: pretix/control/views/item.py:225 +msgid "The new category has been created." +msgstr "" + +#: pretix/control/views/item.py:268 +msgid "The order of categories has been updated." +msgstr "" + +#: pretix/control/views/item.py:344 +msgid "Street" +msgstr "" + +#: pretix/control/views/item.py:397 +msgid "Some of the provided question ids are invalid." +msgstr "" + +#: pretix/control/views/item.py:400 +msgid "Not all questions have been selected." +msgstr "" + +#: pretix/control/views/item.py:431 pretix/control/views/item.py:591 +#: pretix/control/views/item.py:613 +msgid "The requested question does not exist." +msgstr "" + +#: pretix/control/views/item.py:444 +msgid "The selected question has been deleted." +msgstr "" + +#: pretix/control/views/item.py:540 +msgid "File uploaded" +msgstr "" + +#: pretix/control/views/item.py:672 +msgid "The new question has been created." +msgstr "" + +#: pretix/control/views/item.py:749 +msgid "The new quota has been created." +msgstr "" + +#: pretix/control/views/item.py:809 +msgid "Exit scans" +msgstr "" + +#: pretix/control/views/item.py:816 +msgid "Vouchers and waiting list reservations" +msgstr "" + +#: pretix/control/views/item.py:831 +msgid "Available quota" +msgstr "" + +#: pretix/control/views/item.py:837 +msgid "Waiting list (pending)" +msgstr "" + +#: pretix/control/views/item.py:844 +msgid "Currently for sale" +msgstr "" + +#: pretix/control/views/item.py:898 pretix/control/views/item.py:944 +#: pretix/control/views/item.py:998 +msgid "The requested quota does not exist." +msgstr "" + +#: pretix/control/views/item.py:919 +msgid "The quota has been re-opened and will not close again." +msgstr "" + +#: pretix/control/views/item.py:1012 +msgid "The selected quota has been deleted." +msgstr "" + +#: pretix/control/views/item.py:1035 +msgid "The requested item does not exist." +msgstr "" + +#: pretix/control/views/item.py:1170 +msgid "" +"You cannot add add-ons to a product that is only available as an add-on " +"itself." +msgstr "" + +#: pretix/control/views/item.py:1180 +msgid "" +"You cannot add bundles to a product that is only available as an add-on " +"itself." +msgstr "" + +#: pretix/control/views/item.py:1292 +msgid "" +"You disabled this item, but it is still part of a product bundle. Your " +"participants won't be able to buy the bundle unless you remove this item " +"from it." +msgstr "" + +#: pretix/control/views/item.py:1379 +msgid "The selected product has been deleted." +msgstr "" + +#: pretix/control/views/item.py:1388 +msgid "The selected product has been deactivated." +msgstr "" + +#: pretix/control/views/main.py:172 +msgid "You do not have permission to clone this event." +msgstr "" + +#: pretix/control/views/main.py:239 +#, python-brace-format +msgid "Team {event}" +msgstr "" + +#: pretix/control/views/oauth.py:85 +msgid "A new client secret has been generated and is now effective." +msgstr "" + +#: pretix/control/views/oauth.py:143 +msgid "Access for the selected application has been revoked." +msgstr "" + +#: pretix/control/views/orderimport.py:33 +msgid "Please only upload CSV files." +msgstr "" + +#: pretix/control/views/orderimport.py:39 +msgid "Please do not upload files larger than 10 MB." +msgstr "" + +#: pretix/control/views/orderimport.py:96 +msgid "The import was successful." +msgstr "" + +#: pretix/control/views/orderimport.py:106 +msgid "We've been unable to parse the uploaded file as a CSV file." +msgstr "" + +#: pretix/control/views/orders.py:385 pretix/presale/views/order.py:122 +#: pretix/presale/views/order.py:168 pretix/presale/views/order.py:268 +#: pretix/presale/views/order.py:318 pretix/presale/views/order.py:386 +#: pretix/presale/views/order.py:454 pretix/presale/views/order.py:497 +#: pretix/presale/views/order.py:658 pretix/presale/views/order.py:763 +#: pretix/presale/views/order.py:778 pretix/presale/views/order.py:827 +#: pretix/presale/views/order.py:932 pretix/presale/views/order.py:1057 +#: pretix/presale/views/order.py:1100 +msgid "Unknown order code or not authorized to access this order." +msgstr "" + +#: pretix/control/views/orders.py:387 pretix/presale/views/order.py:936 +msgid "Ticket download is not enabled for this product." +msgstr "" + +#: pretix/control/views/orders.py:495 +msgid "The order has been deleted." +msgstr "" + +#: pretix/control/views/orders.py:501 +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:509 +msgid "Only orders created in test mode can be deleted." +msgstr "" + +#: pretix/control/views/orders.py:528 +msgid "The order has been denied and is therefore now canceled." +msgstr "" + +#: pretix/control/views/orders.py:565 +msgid "This payment has been canceled." +msgstr "" + +#: pretix/control/views/orders.py:567 +msgid "This payment can not be canceled at the moment." +msgstr "" + +#: pretix/control/views/orders.py:593 +msgid "The refund has been canceled." +msgstr "" + +#: pretix/control/views/orders.py:595 +msgid "This refund can not be canceled at the moment." +msgstr "" + +#: pretix/control/views/orders.py:629 +msgid "The refund has been processed." +msgstr "" + +#: pretix/control/views/orders.py:631 pretix/control/views/orders.py:657 +msgid "This refund can not be processed at the moment." +msgstr "" + +#: pretix/control/views/orders.py:655 +msgid "The refund has been marked as done." +msgstr "" + +#: pretix/control/views/orders.py:681 +msgid "The request has been removed. If you want, you can now inform the user." +msgstr "" + +#: pretix/control/views/orders.py:688 +msgid "Your cancellation request" +msgstr "" + +#: pretix/control/views/orders.py:689 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"unfortunately, we were unable to accommodate your request and cancel your " +"order.\n" +"\n" +"Your {event} team" +msgstr "" + +#: pretix/control/views/orders.py:733 +msgid "" +"The payment has been marked as complete, but we were unable to send a " +"confirmation mail." +msgstr "" + +#: pretix/control/views/orders.py:736 +msgid "The payment has been marked as complete." +msgstr "" + +#: pretix/control/views/orders.py:738 +msgid "This payment can not be confirmed at the moment." +msgstr "" + +#: pretix/control/views/orders.py:912 +msgid "" +"You can not refund more than the amount of a payment that is not yet " +"refunded." +msgstr "" + +#: pretix/control/views/orders.py:917 +msgid "" +"You selected a partial refund for a payment method that only supports full " +"refunds." +msgstr "" + +#: pretix/control/views/orders.py:947 +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:953 +msgid "A refund of {} has been processed." +msgstr "" + +#: pretix/control/views/orders.py:957 +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:979 +msgid "" +"A new gift card was created. You can now send the user their gift card code." +msgstr "" + +#: pretix/control/views/orders.py:987 +msgid "Your gift card code" +msgstr "" + +#: pretix/control/views/orders.py:989 +#, python-brace-format +msgid "" +"Hello,\n" +"\n" +"we have refunded you {amount} for your order.\n" +"\n" +"You can use the gift card code {giftcard} to pay for future ticket purchases " +"in our shop.\n" +"\n" +"Your {event} team" +msgstr "" + +#: pretix/control/views/orders.py:1000 +msgid "The refunds you selected do not match the selected total refund amount." +msgstr "" + +#: pretix/control/views/orders.py:1136 +msgid "" +"The order has been marked as paid, but we were unable to send a confirmation " +"mail." +msgstr "" + +#: pretix/control/views/orders.py:1139 +msgid "The payment has been created successfully." +msgstr "" + +#: pretix/control/views/orders.py:1151 +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:1217 pretix/control/views/orders.py:1221 +msgid "No VAT ID specified." +msgstr "" + +#: pretix/control/views/orders.py:1225 +msgid "No country specified." +msgstr "" + +#: pretix/control/views/orders.py:1229 +msgid "VAT ID could not be checked since a non-EU country has been specified." +msgstr "" + +#: pretix/control/views/orders.py:1245 +msgid "This VAT ID is not valid." +msgstr "" + +#: pretix/control/views/orders.py:1248 +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:1251 +msgid "This VAT ID is valid." +msgstr "" + +#: pretix/control/views/orders.py:1265 pretix/control/views/orders.py:1290 +msgid "Unknown invoice." +msgstr "" + +#: pretix/control/views/orders.py:1268 pretix/control/views/orders.py:1293 +msgid "The invoice has already been canceled." +msgstr "" + +#: pretix/control/views/orders.py:1270 pretix/control/views/orders.py:1295 +msgid "The invoice has been cleaned of personal data." +msgstr "" + +#: pretix/control/views/orders.py:1326 +msgid "The email has been queued to be sent." +msgstr "" + +#: pretix/control/views/orders.py:1350 pretix/presale/views/order.py:1066 +msgid "This invoice has not been found" +msgstr "" + +#: pretix/control/views/orders.py:1357 pretix/presale/views/order.py:1073 +msgid "The invoice file is no longer stored on the server." +msgstr "" + +#: pretix/control/views/orders.py:1362 pretix/presale/views/order.py:1078 +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:1389 +msgid "The payment term has been changed." +msgstr "" + +#: pretix/control/views/orders.py:1394 pretix/control/views/orders.py:1451 +msgid "" +"We were not able to process the request completely as the server was too " +"busy." +msgstr "" + +#: pretix/control/views/orders.py:1402 +msgid "This action is only allowed for pending orders." +msgstr "" + +#: pretix/control/views/orders.py:1457 +msgid "This action is only allowed for canceled orders." +msgstr "" + +#: pretix/control/views/orders.py:1480 +msgid "This action is only allowed for pending or paid orders." +msgstr "" + +#: pretix/control/views/orders.py:1658 pretix/presale/views/order.py:1196 +msgid "An error occurred. Please see the details below." +msgstr "" + +#: pretix/control/views/orders.py:1666 +msgid "The order has been changed and the user has been notified." +msgstr "" + +#: pretix/control/views/orders.py:1668 pretix/control/views/orders.py:1784 +#: pretix/control/views/orders.py:1821 pretix/presale/views/order.py:1213 +msgid "The order has been changed." +msgstr "" + +#: pretix/control/views/orders.py:1695 pretix/presale/checkoutflow.py:550 +#: pretix/presale/views/order.py:705 +msgid "" +"We had difficulties processing your input. Please review the errors below." +msgstr "" + +#: pretix/control/views/orders.py:1786 +msgid "Nothing about the order had to be changed." +msgstr "" + +#: pretix/control/views/orders.py:1865 pretix/plugins/sendmail/views.py:83 +msgid "We could not send the email. See below for details." +msgstr "" + +#: pretix/control/views/orders.py:1881 pretix/control/views/orders.py:1944 +#: pretix/plugins/sendmail/views.py:153 +#, python-brace-format +msgid "Subject: {subject}" +msgstr "" + +#: pretix/control/views/orders.py:1893 pretix/control/views/orders.py:1958 +msgid "Your message has been queued and will be sent to {}." +msgstr "" + +#: pretix/control/views/orders.py:1897 pretix/control/views/orders.py:1961 +msgid "Failed to send mail to the following user: {}" +msgstr "" + +#: pretix/control/views/orders.py:1997 pretix/presale/views/order.py:895 +msgid "" +"This link is no longer valid. Please go back, refresh the page, and try " +"again." +msgstr "" + +#: pretix/control/views/orders.py:2075 +msgid "There is no order with the given order code." +msgstr "" + +#: pretix/control/views/orders.py:2142 pretix/control/views/organizer.py:1221 +msgid "The selected exporter was not found." +msgstr "" + +#: pretix/control/views/orders.py:2149 pretix/control/views/organizer.py:1227 +msgid "There was a problem processing your input. See below for error details." +msgstr "" + +#: pretix/control/views/orders.py:2234 +msgid "All orders have been canceled." +msgstr "" + +#: pretix/control/views/orders.py:2236 +#, 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:2257 +msgid "Your input was not valid." +msgstr "" + +#: pretix/control/views/organizer.py:94 +msgid "Token name" +msgstr "" + +#: pretix/control/views/organizer.py:214 +msgid "This organizer can not be deleted." +msgstr "" + +#: pretix/control/views/organizer.py:236 +msgid "The organizer has been deleted." +msgstr "" + +#: pretix/control/views/organizer.py:239 +msgid "" +"The organizer could not be deleted as some constraints (e.g. data created by " +"plug-ins) do not allow it." +msgstr "" + +#: pretix/control/views/organizer.py:342 +msgid "The new organizer has been created." +msgstr "" + +#: pretix/control/views/organizer.py:345 +msgid "Administrators" +msgstr "" + +#: pretix/control/views/organizer.py:394 +msgid "The team has been created. You can now add members to the team." +msgstr "" + +#: pretix/control/views/organizer.py:405 pretix/control/views/organizer.py:440 +#: pretix/control/views/organizer.py:654 pretix/control/views/organizer.py:703 +#: pretix/control/views/organizer.py:764 pretix/control/views/organizer.py:868 +#: pretix/control/views/organizer.py:910 pretix/control/views/organizer.py:1288 +#: pretix/control/views/organizer.py:1322 +#: pretix/control/views/organizer.py:1384 +#: pretix/control/views/organizer.py:1413 +msgid "Your changes could not be saved." +msgstr "" + +#: pretix/control/views/organizer.py:475 +msgid "The selected team has been deleted." +msgstr "" + +#: pretix/control/views/organizer.py:478 +msgid "The selected team cannot be deleted." +msgstr "" + +#: pretix/control/views/organizer.py:541 +msgid "" +"You cannot remove the last member from this team as no one would be left " +"with the permission to change teams." +msgstr "" + +#: pretix/control/views/organizer.py:552 +msgid "The member has been removed from the team." +msgstr "" + +#: pretix/control/views/organizer.py:559 pretix/control/views/organizer.py:575 +msgid "Invalid invite selected." +msgstr "" + +#: pretix/control/views/organizer.py:568 +msgid "The invite has been revoked." +msgstr "" + +#: pretix/control/views/organizer.py:584 +msgid "The invite has been resent." +msgstr "" + +#: pretix/control/views/organizer.py:591 +msgid "Invalid token selected." +msgstr "" + +#: pretix/control/views/organizer.py:601 +msgid "The token has been revoked." +msgstr "" + +#: pretix/control/views/organizer.py:613 +msgid "Users need to have a pretix account before they can be invited." +msgstr "" + +#: pretix/control/views/organizer.py:623 +msgid "The new member has been invited to the team." +msgstr "" + +#: pretix/control/views/organizer.py:638 +msgid "The new member has been added to the team." +msgstr "" + +#: pretix/control/views/organizer.py:649 +msgid "" +"A new API token has been created with the following secret: {}\n" +"Please copy this secret to a safe place. You will not be able to view it " +"again here." +msgstr "" + +#: pretix/control/views/organizer.py:784 +msgid "This device has been set up successfully." +msgstr "" + +#: pretix/control/views/organizer.py:812 +msgid "This device currently does not have access." +msgstr "" + +#: pretix/control/views/organizer.py:823 +msgid "Access for this device has been revoked." +msgstr "" + +#: pretix/control/views/organizer.py:970 +msgid "The selected gift card issuer has been added." +msgstr "" + +#: pretix/control/views/organizer.py:984 +msgid "The selected gift card issuer has been removed." +msgstr "" + +#: pretix/control/views/organizer.py:1017 +#: pretix/control/views/organizer.py:1050 +msgid "Gift cards are not allowed to have negative values." +msgstr "" + +#: pretix/control/views/organizer.py:1040 +msgid "The transaction could not be reversed." +msgstr "" + +#: pretix/control/views/organizer.py:1042 +msgid "The transaction has been reversed." +msgstr "" + +#: pretix/control/views/organizer.py:1047 +msgid "Your input was invalid, please try again." +msgstr "" + +#: pretix/control/views/organizer.py:1064 +msgid "The manual transaction has been saved." +msgstr "" + +#: pretix/control/views/organizer.py:1096 +msgid "The gift card has been created and can now be used." +msgstr "" + +#: pretix/control/views/organizer.py:1346 +msgid "The selected gate has been deleted." +msgstr "" + +#: pretix/control/views/organizer.py:1375 +msgid "The property has been created." +msgstr "" + +#: pretix/control/views/organizer.py:1437 +msgid "The selected property has been deleted." +msgstr "" + +#: pretix/control/views/pdf.py:53 +msgid "The uploaded PDF file is too large." +msgstr "" + +#: pretix/control/views/pdf.py:55 +msgid "The uploaded PDF file is too small." +msgstr "" + +#: pretix/control/views/pdf.py:57 +msgid "Please only upload PDF files." +msgstr "" + +#: pretix/control/views/shredder.py:114 +msgid "The selected data was deleted successfully." +msgstr "" + +#: pretix/control/views/subevents.py:126 pretix/control/views/subevents.py:421 +msgctxt "subevent" +msgid "The requested date does not exist." +msgstr "" + +#: pretix/control/views/subevents.py:130 pretix/control/views/subevents.py:141 +msgctxt "subevent" +msgid "A date can not be deleted if orders already have been placed." +msgstr "" + +#: pretix/control/views/subevents.py:149 +msgctxt "subevent" +msgid "The selected date has been deleted." +msgstr "" + +#: pretix/control/views/subevents.py:505 +msgctxt "subevent" +msgid "The new date has been created." +msgstr "" + +#: pretix/control/views/subevents.py:567 +msgctxt "subevent" +msgid "The selected dates have been disabled." +msgstr "" + +#: pretix/control/views/subevents.py:577 +msgctxt "subevent" +msgid "The selected dates have been enabled." +msgstr "" + +#: pretix/control/views/subevents.py:598 +msgctxt "subevent" +msgid "The selected dates have been deleted or disabled." +msgstr "" + +#: pretix/control/views/subevents.py:896 +msgctxt "subevent" +msgid "{} new dates have been created." +msgstr "" + +#: pretix/control/views/typeahead.py:55 +msgid "Series:" +msgstr "" + +#: pretix/control/views/typeahead.py:78 +msgid "Order {}" +msgstr "" + +#: pretix/control/views/typeahead.py:91 +msgid "Voucher {}" +msgstr "" + +#: pretix/control/views/user.py:110 +msgid "The password you entered was invalid, please try again." +msgstr "" + +#: pretix/control/views/user.py:284 +msgid "Security devices are only available if pretix is served via HTTPS." +msgstr "" + +#: pretix/control/views/user.py:321 +msgid "A two-factor authentication device has been removed from your account." +msgstr "" + +#: pretix/control/views/user.py:332 +msgid "The device has been removed." +msgstr "" + +#: pretix/control/views/user.py:410 +msgid "This security device is already registered." +msgstr "" + +#: pretix/control/views/user.py:432 pretix/control/views/user.py:493 +msgid "A new two-factor authentication device has been added to your account." +msgstr "" + +#: pretix/control/views/user.py:448 pretix/control/views/user.py:508 +msgid "" +"Please note that you still need to enable two-factor authentication for your " +"account using the buttons below to make a second factor required for logging " +"into your account." +msgstr "" + +#: pretix/control/views/user.py:451 pretix/control/views/user.py:511 +msgid "The device has been verified and can now be used." +msgstr "" + +#: pretix/control/views/user.py:454 +msgid "The registration could not be completed. Please try again." +msgstr "" + +#: pretix/control/views/user.py:514 +msgid "" +"The code you entered was not valid. If this problem persists, please check " +"that the date and time of your phone are configured correctly." +msgstr "" + +#: pretix/control/views/user.py:526 +msgid "" +"Please configure at least one device before enabling two-factor " +"authentication." +msgstr "" + +#: pretix/control/views/user.py:535 +msgid "Two-factor authentication is now enabled for your account." +msgstr "" + +#: pretix/control/views/user.py:551 +msgid "Two-factor authentication is now disabled for your account." +msgstr "" + +#: pretix/control/views/user.py:574 +msgid "" +"Your emergency codes have been newly generated. Remember to store them in a " +"safe place in case you lose access to your devices." +msgstr "" + +#: pretix/control/views/user.py:590 +msgid "Your notifications have been disabled." +msgstr "" + +#: pretix/control/views/user.py:639 pretix/control/views/user.py:679 +msgid "Your notification settings have been saved." +msgstr "" + +#: pretix/control/views/user.py:757 +msgid "Your comment has been saved." +msgstr "" + +#: pretix/control/views/users.py:102 +msgid "We sent out an e-mail containing further instructions." +msgstr "" + +#: pretix/control/views/users.py:199 +msgid "The new user has been created." +msgstr "" + +#: pretix/control/views/vouchers.py:72 +msgid "Reserve quota" +msgstr "" + +#: pretix/control/views/vouchers.py:72 +msgid "Bypass quota" +msgstr "" + +#: pretix/control/views/vouchers.py:87 +msgid "Any product" +msgstr "" + +#: pretix/control/views/vouchers.py:161 pretix/control/views/vouchers.py:211 +msgid "The requested voucher does not exist." +msgstr "" + +#: pretix/control/views/vouchers.py:165 pretix/control/views/vouchers.py:175 +msgid "A voucher can not be deleted if it already has been redeemed." +msgstr "" + +#: pretix/control/views/vouchers.py:181 +msgid "The selected voucher has been deleted." +msgstr "" + +#: pretix/control/views/vouchers.py:264 +#, python-brace-format +msgid "The new voucher has been created: {code}" +msgstr "" + +#: pretix/control/views/vouchers.py:289 +msgid "There is no voucher with the given voucher code." +msgstr "" + +#: pretix/control/views/vouchers.py:405 +msgid "The new vouchers have been created." +msgstr "" + +#: pretix/control/views/vouchers.py:479 +msgid "The selected vouchers have been deleted or disabled." +msgstr "" + +#: pretix/control/views/waitinglist.py:32 +#, python-brace-format +msgid "{num} vouchers have been created and sent out via email." +msgstr "" + +#: pretix/control/views/waitinglist.py:57 +msgid "You do not have permission to do this" +msgstr "" + +#: pretix/control/views/waitinglist.py:70 +msgid "" +"An email containing a voucher code has been sent to the specified address." +msgstr "" + +#: pretix/control/views/waitinglist.py:74 +#: pretix/control/views/waitinglist.py:87 +#: pretix/control/views/waitinglist.py:100 +msgid "Waiting list entry not found." +msgstr "" + +#: pretix/control/views/waitinglist.py:84 +msgid "The waiting list entry has been moved to the top." +msgstr "" + +#: pretix/control/views/waitinglist.py:97 +msgid "The waiting list entry has been moved to the end of the list." +msgstr "" + +#: pretix/control/views/waitinglist.py:214 +msgid "On list since" +msgstr "" + +#: pretix/control/views/waitinglist.py:235 +msgid "Waiting" +msgstr "" + +#: pretix/control/views/waitinglist.py:270 +msgid "The requested entry does not exist." +msgstr "" + +#: pretix/control/views/waitinglist.py:278 +msgid "The selected entry has been deleted." +msgstr "" + +#: pretix/multidomain/models.py:15 +msgid "Known domain" +msgstr "" + +#: pretix/multidomain/models.py:16 +msgid "Known domains" +msgstr "" + +#: pretix/plugins/badges/apps.py:9 pretix/plugins/badges/apps.py:12 +#: pretix/plugins/badges/signals.py:34 +#: 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 +#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:4 +#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:6 +msgid "Badges" +msgstr "" + +#: pretix/plugins/badges/apps.py:13 pretix/plugins/banktransfer/apps.py:14 +#: pretix/plugins/checkinlists/apps.py:14 +#: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 +#: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 +#: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 +#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/ticketoutputpdf/apps.py:14 +#: pretix/plugins/webcheckin/apps.py:13 +msgid "the pretix team" +msgstr "" + +#: pretix/plugins/badges/apps.py:16 +msgid "" +"This plugin allows you to generate badges or name tags for your attendees." +msgstr "" + +#: pretix/plugins/badges/exporters.py:45 +msgid "One badge per page" +msgstr "" + +#: pretix/plugins/badges/exporters.py:53 +msgid "4 landscape A6 pages on one A4 page" +msgstr "" + +#: pretix/plugins/badges/exporters.py:61 +msgid "4 portrait A6 pages on one A4 page" +msgstr "" + +#: pretix/plugins/badges/exporters.py:69 +msgid "8 landscape A7 pages on one A4 page" +msgstr "" + +#: pretix/plugins/badges/exporters.py:77 +msgid "8 portrait A7 pages on one A4 page" +msgstr "" + +#: pretix/plugins/badges/exporters.py:195 +msgid "None of the selected products is configured to print badges." +msgstr "" + +#: pretix/plugins/badges/exporters.py:201 +msgid "Attendee badges" +msgstr "" + +#: pretix/plugins/badges/exporters.py:221 +#: pretix/plugins/ticketoutputpdf/exporters.py:37 +msgid "Include pending orders" +msgstr "" + +#: pretix/plugins/badges/exporters.py:226 +msgid "Include add-on or bundled positions" +msgstr "" + +#: pretix/plugins/badges/exporters.py:231 +msgid "Rendering option" +msgstr "" + +#: pretix/plugins/badges/exporters.py:236 +msgid "" +"This option allows you to align multiple badges on one page, for example if " +"you want to print to a sheet of stickers with a regular office printer. " +"Please note that your individual badge layouts must already be in the " +"correct size." +msgstr "" + +#: pretix/plugins/badges/exporters.py:245 +#: pretix/plugins/checkinlists/exporters.py:51 +#: pretix/plugins/ticketoutputpdf/exporters.py:45 +msgid "Only include tickets for dates on or after this date." +msgstr "" + +#: pretix/plugins/badges/exporters.py:252 +#: pretix/plugins/checkinlists/exporters.py:58 +#: pretix/plugins/ticketoutputpdf/exporters.py:52 +msgid "Only include tickets for dates on or before this date." +msgstr "" + +#: pretix/plugins/badges/exporters.py:256 +#: pretix/plugins/checkinlists/exporters.py:72 +#: pretix/plugins/reports/exporters.py:356 +#: pretix/plugins/reports/exporters.py:536 +#: pretix/plugins/ticketoutputpdf/exporters.py:56 +msgid "Sort by" +msgstr "" + +#: pretix/plugins/badges/forms.py:21 +msgid "(Do not print badges)" +msgstr "" + +#: pretix/plugins/badges/forms.py:53 +#: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:8 +#: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:15 +msgid "Badge layout" +msgstr "" + +#: pretix/plugins/badges/signals.py:153 +msgid "Badge layout created." +msgstr "" + +#: pretix/plugins/badges/signals.py:154 +msgid "Badge layout deleted." +msgstr "" + +#: pretix/plugins/badges/signals.py:155 +msgid "Badge layout changed." +msgstr "" + +#: pretix/plugins/badges/signals.py:168 +#, python-brace-format +msgid "Badge layout {val}" +msgstr "" + +#: pretix/plugins/badges/templates/pretixplugins/badges/control_order_info.html:16 +#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:27 +msgid "Print badges" +msgstr "" + +#: pretix/plugins/badges/templates/pretixplugins/badges/control_order_position_buttons.html:9 +msgid "Badge" +msgstr "" + +#: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:9 +#, python-format +msgid "" +"Are you sure you want to delete the badge layout %(layout)s?" +msgstr "" + +#: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:6 +#: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:13 +#, python-format +msgid "Badge layout: %(name)s" +msgstr "" + +#: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:23 +msgid "Badge design" +msgstr "" + +#: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:27 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:27 +msgid "You can modify the design after you saved this page." +msgstr "" + +#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:10 +msgid "You haven't created any badge layouts yet." +msgstr "" + +#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:17 +#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:24 +msgid "Create a new badge layout" +msgstr "" + +#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:63 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:60 +msgid "Make default" +msgstr "" + +#: pretix/plugins/badges/views.py:57 +msgid "The new badge layout has been created." +msgstr "" + +#: pretix/plugins/badges/views.py:106 pretix/plugins/badges/views.py:136 +#: pretix/plugins/badges/views.py:166 +msgid "The requested badge layout does not exist." +msgstr "" + +#: pretix/plugins/badges/views.py:148 +msgid "The selected badge layout been deleted." +msgstr "" + +#: pretix/plugins/badges/views.py:170 +msgid "Badge layout: {}" +msgstr "" + +#: pretix/plugins/banktransfer/apps.py:10 +#: pretix/plugins/banktransfer/apps.py:13 +#: pretix/plugins/banktransfer/payment.py:23 +#: pretix/plugins/banktransfer/signals.py:24 +#: pretix/plugins/banktransfer/signals.py:61 +msgid "Bank transfer" +msgstr "" + +#: pretix/plugins/banktransfer/apps.py:17 +msgid "This plugin allows you to receive payments via bank transfer." +msgstr "" + +#: pretix/plugins/banktransfer/apps.py:31 +msgid "" +"Install the python package 'chardet' for better CSV import capabilities." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:31 +msgid "" +"I have understood that people will pay the ticket price directly to my bank " +"account and pretix cannot automatically know what payments arrived. " +"Therefore, I will either mark payments as complete manually, or regularly " +"import a digital bank statement in order to give pretix the required " +"information." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:38 +msgid "Bank account type" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:41 +msgid "SEPA bank account" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:42 +msgid "Other bank account" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:47 +msgid "Name of account holder" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:57 +#: pretix/plugins/banktransfer/payment.py:212 +#: pretix/plugins/banktransfer/payment.py:346 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:12 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:50 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:22 +msgid "IBAN" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:67 +#: pretix/plugins/banktransfer/payment.py:213 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:13 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:66 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:23 +msgid "BIC" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:77 +msgid "Name of bank" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:87 +msgid "Bank account details" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:90 +msgid "" +"Include everything else that your customers might need to send you a bank " +"transfer payment. If you have lots of international customers, they might " +"need your full address and your bank's full address." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:96 +msgid "" +"For SEPA accounts, you can leave this empty. Otherwise, please add " +"everything that your customers need to transfer the money, e.g. account " +"numbers, routing numbers, addresses, etc." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:105 +msgid "" +"Create an invoice for orders using bank transfer immediately if the event is " +"otherwise configured to create invoices after payment is completed." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:115 +msgid "Do not include hyphens in the payment reference." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:116 +msgid "This is required in some countries." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:120 +msgid "Include invoice number in the payment reference." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:124 +msgid "Prefix for the payment reference" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:128 +msgid "Additional text to show on pending orders" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:129 +msgid "" +"This text will be shown on the order confirmation page for pending orders in " +"addition to the standard text." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:135 +msgid "IBAN blocklist for refunds" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:138 +msgid "" +"Put one IBAN or IBAN prefix per line. The system will not attempt to send " +"refunds to any of these IBANs. Useful e.g. if you receive a lot of " +"\"forwarded payments\" by a third-party payment provider. You can also list " +"country codes such as \"GB\" if you never want to send refunds to IBANs from " +"a specific country." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:176 +msgid "Please fill out your bank account details." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:180 +msgid "Please enter your bank account details." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:211 +#: pretix/plugins/banktransfer/payment.py:343 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 +#: pretix/plugins/banktransfer/views.py:759 +#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 +#: pretix/plugins/stripe/payment.py:1221 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +msgid "Account holder" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:214 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +msgid "Bank" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:244 +msgid "Invalid IBAN/BIC" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:313 +#, python-brace-format +msgid "Bank account {iban}" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:329 +msgid "Can only create a bank transfer refund from an existing payment." +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:349 +msgid "BIC (optional)" +msgstr "" + +#: pretix/plugins/banktransfer/payment.py:388 +msgid "Your input was invalid, please see below for details." +msgstr "" + +#: pretix/plugins/banktransfer/refund_export.py:25 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/control.html:5 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:41 +#: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:9 +msgid "Payer" +msgstr "" + +#: pretix/plugins/banktransfer/signals.py:32 +#: pretix/plugins/banktransfer/signals.py:68 +#: 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:40 +#: pretix/plugins/banktransfer/signals.py:76 +msgid "Export refunds" +msgstr "" + +#: pretix/plugins/banktransfer/tasks.py:33 +#, python-format +msgid "Your order received an incomplete payment: %(code)s" +msgstr "" + +#: pretix/plugins/banktransfer/tasks.py:112 +msgid "The order has already been canceled." +msgstr "" + +#: pretix/plugins/banktransfer/tasks.py:122 +msgid "Automatic split to multiple orders not possible." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:4 +msgid "" +"After completing your purchase, we will ask you to transfer the money to the " +"following bank account, using a personal reference code:" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:20 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:30 +msgid "Reference code (important):" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:23 +msgid "" +"We will assign you a personal reference code to use after you completed the " +"order." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/control.html:8 +msgid "Account" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/control.html:22 +msgid "Transfer amount" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/control.html:26 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:33 +msgid "Reference" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/control.html:32 +msgid "Reference code" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/email/order_pending.txt:1 +#, python-format +msgid "" +"\n" +"Please transfer the full amount to the following bank account.\n" +"\n" +" Reference: %(code)s\n" +" Amount: %(total)s\n" +"%(bank)s\n" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:4 +msgid "" +"We've been unable to automatically determine how the columns in your file " +"are aligned. Please help us by selecting which column contain what kind of " +"data." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:95 +msgid "" +"More data was uploaded but is not shown here. It will still be processed" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_base.html:9 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_base_organizer.html:9 +msgid "Import currently running…" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_base.html:11 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_base_organizer.html:11 +#, python-format +msgid "Last import: %(date)s" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:8 +#, python-format +msgid "" +"In the payment settings of your event, you set the %(date)s as the last date " +"of any payments. Therefore, you won't be able to mark any order as paid here." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:19 +msgid "" +"This page allows you to upload bank statement files to process incoming " +"payments." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:22 +msgid "" +"Currently, this feature supports .csv files and files in the " +"MT940 format." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:29 +#: pretix/plugins/banktransfer/views.py:487 +msgid "" +"An import is currently being processed, please try again in a few minutes." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:40 +msgid "Start upload" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:50 +msgid "Unresolved transactions" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:55 +msgid "" +"On this page, you can import banking data on a per-event level. You also " +"only see unmatched transactions imported directly for this event." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:60 +msgid "Go to organizer-level import" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:67 +msgid "Amount from" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:69 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:75 +msgid "up to" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:81 +msgid "Clear" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:90 +msgid "Discard all" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:102 +msgid "Your search matched no transactions." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/job_detail.html:5 +msgid "Import result" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/job_detail.html:12 +msgid "" +"The result of your import is in progress. Please be patient while we process " +"the data …" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/job_detail.html:18 +msgid "An internal error occurred during processing your data." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/job_detail.html:19 +msgid "Some transactions might be missing, please try to re-import the file." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/job_detail.html:23 +msgid "" +"Your import did not contain any transactions that you did not import before." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/job_detail.html:30 +msgid "Orders marked as paid" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/job_detail.html:34 +msgid "Invalid payments" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/job_detail.html:38 +msgid "Ignored payments" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/job_detail.html:44 +msgid "Review invalid and ignored payments" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:13 +msgid "Please transfer the full amount to the following bank account:" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:29 +msgid "Amount:" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:33 +msgid "" +"After you sent the bank transfer, you can close this window. We will send " +"you an email as soon as we received your payment." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:63 +msgid "Open banking app" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:65 +msgid "Requires that the app supports BezahlCode" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:5 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:7 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/sepa_export.html:7 +msgid "Export bank transfer refunds" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:9 +#, python-format +msgid "" +"%(num_new)s Bank transfer refunds have been placed and are " +"not yet part of an export." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:15 +msgid "In test mode, your exports will only contain test mode orders." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:19 +msgid "" +"If you want, you can now also create these exports for multiple events " +"combined." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:22 +msgid "Go to organizer-level exports" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:32 +msgid "Create new export file" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:38 +msgid "Aggregate transactions to the same bank account" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:43 +msgid "" +"\n" +" Beware that refunds will be marked as done once an " +"export is created.\n" +" Make sure to download the export and execute the " +"refunds.\n" +" " +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:50 +msgid "Exported files" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:55 +msgid "Export date" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:56 +msgid "Number of orders" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:76 +msgid "not downloaded" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:81 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:92 +msgid "Download CSV" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:86 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:97 +msgid "SEPA XML" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:106 +msgid "No exports have been created yet." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/sepa_export.html:10 +msgid "Export SEPA xml" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/sepa_export.html:13 +#, python-format +msgid "" +"You are trying to download a refund export from %(date)s with one order and " +"a total of %(sum)s." +msgid_plural "" +"You are trying to download a refund export from %(date)s with %(cnt)s order " +"and a total of %(sum)s." +msgstr[0] "" +msgstr[1] "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/sepa_export.html:23 +msgid "" +"Please state from which bank account the refunds should be transferred from." +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/sepa_export.html:34 +msgid "Download" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:12 +msgid "Payer and reference" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:14 +msgid "Result" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:25 +msgid "Accept anyway" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:31 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:44 +msgid "Assign to order" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:37 +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:49 +msgid "Retry" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:80 +msgid "Comment:" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:92 +msgid "No order code detected" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:94 +msgid "Invalid for this order" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:96 +msgid "Error while processing" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:98 +msgid "The order is already marked as paid" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:100 +msgid "Order already paid" +msgstr "" + +#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:117 +msgid "Discard" +msgstr "" + +#: pretix/plugins/banktransfer/views.py:100 +msgid "" +"Negative amount but refund can't be logged, please create manual refund " +"first." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:126 +msgid "Problem sending email." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:147 +msgid "Unknown order code" +msgstr "" + +#: pretix/plugins/banktransfer/views.py:296 +msgid "Search text" +msgstr "" + +#: pretix/plugins/banktransfer/views.py:297 +msgid "min" +msgstr "" + +#: pretix/plugins/banktransfer/views.py:298 +msgid "max" +msgstr "" + +#: pretix/plugins/banktransfer/views.py:307 +msgid "Filter form is not valid." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:350 +msgid "All unresolved transactions have been discarded." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:369 +msgid "You must choose a file to import." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:373 +msgid "" +"We were unable to detect the file type of this import. Please contact " +"support for help." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:386 +#: pretix/plugins/banktransfer/views.py:430 +msgid "We were unable to process your input." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:395 +msgid "" +"I'm sorry, but we were unable to import this CSV file. Please contact " +"support for help." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:400 +msgid "" +"I'm sorry, but we detected this file as empty. Please contact support for " +"help." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:420 +msgid "Invalid input data." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:424 +msgid "You need to select the column containing the payment reference." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:545 +msgid "" +"Please perform per-event bank imports as this organizer has events with " +"multiple currencies." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:637 +#, python-brace-format +msgid "" +"We could not find bank account information for the refund {refund_id}. It " +"was marked as failed." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:668 +msgid "No valid orders have been found." +msgstr "" + +#: pretix/plugins/banktransfer/views.py:701 +msgid "" +"Please perform per-event refund exports as this organizer has events with " +"multiple currencies." +msgstr "" + +#: pretix/plugins/checkinlists/apps.py:13 +msgid "Check-in list exporter" +msgstr "" + +#: pretix/plugins/checkinlists/apps.py:17 +msgid "This plugin allows you to generate check-in lists for your conference." +msgstr "" + +#: pretix/plugins/checkinlists/exporters.py:62 +msgid "Include QR-code secret" +msgstr "" + +#: pretix/plugins/checkinlists/exporters.py:67 +msgid "Only tickets requiring special attention" +msgstr "" + +#: pretix/plugins/checkinlists/exporters.py:87 +msgid "Include questions" +msgstr "" + +#: pretix/plugins/checkinlists/exporters.py:232 +msgid "Check-in list (PDF)" +msgstr "" + +#. Translators: maximum 5 characters +#: pretix/plugins/checkinlists/exporters.py:294 +msgctxt "tablehead" +msgid "paid" +msgstr "" + +#: pretix/plugins/checkinlists/exporters.py:406 +msgid "Checked out" +msgstr "" + +#: pretix/plugins/checkinlists/exporters.py:406 +#: pretix/plugins/checkinlists/exporters.py:582 +msgid "Automatically checked in" +msgstr "" + +#: pretix/plugins/checkinlists/exporters.py:415 +#: pretix/plugins/checkinlists/exporters.py:577 +#: pretix/plugins/paypal/payment.py:88 +msgid "Secret" +msgstr "" + +#: pretix/plugins/checkinlists/exporters.py:563 +msgid "Check-in log (all successful scans)" +msgstr "" + +#: pretix/plugins/checkinlists/exporters.py:574 +msgid "Scan type" +msgstr "" + +#: pretix/plugins/checkinlists/exporters.py:580 +msgid "Device" +msgstr "" + +#: pretix/plugins/checkinlists/exporters.py:581 +msgid "Offline override" +msgstr "" + +#: pretix/plugins/checkinlists/exporters.py:656 +msgid "All check-in lists" +msgstr "" + +#: pretix/plugins/manualpayment/apps.py:16 +msgid "This plugin adds a customizable payment method for manual processing." +msgstr "" + +#: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 +#: pretix/plugins/paypal/payment.py:40 +msgid "PayPal" +msgstr "" + +#: pretix/plugins/paypal/apps.py:17 +msgid "This plugin allows you to receive payments via PayPal" +msgstr "" + +#: pretix/plugins/paypal/payment.py:56 +msgid "" +"The PayPal sandbox is being used, you can test without actually sending " +"money but you will need a PayPal sandbox user to log in." +msgstr "" + +#: pretix/plugins/paypal/payment.py:68 +msgid "PayPal account" +msgstr "" + +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#, python-brace-format +msgid "{text}" +msgstr "" + +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +msgid "Click here for a tutorial on how to obtain the required keys" +msgstr "" + +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +msgid "Endpoint" +msgstr "" + +#: pretix/plugins/paypal/payment.py:106 +msgid "Reference prefix" +msgstr "" + +#: pretix/plugins/paypal/payment.py:107 +msgid "" +"Any value entered here will be added in front of the regular booking " +"reference containing the order number." +msgstr "" + +#: pretix/plugins/paypal/payment.py:136 +msgid "" +"To accept payments via PayPal, you will need an account at PayPal. By " +"clicking on the following button, you can either create a new PayPal account " +"connect pretix to an existing one." +msgstr "" + +#: pretix/plugins/paypal/payment.py:140 +#, python-brace-format +msgid "Connect with {icon} PayPal" +msgstr "" + +#: pretix/plugins/paypal/payment.py:150 +msgid "Disconnect from PayPal" +msgstr "" + +#: pretix/plugins/paypal/payment.py:154 +msgid "" +"Please configure a PayPal Webhook to the following endpoint in order to " +"automatically cancel orders when payments are refunded externally." +msgstr "" + +#: pretix/plugins/paypal/payment.py:165 +msgid "PayPal does not process payments in your event's currency." +msgstr "" + +#: pretix/plugins/paypal/payment.py:166 +msgid "" +"Please check this PayPal page for a complete list of supported currencies." +msgstr "" + +#: pretix/plugins/paypal/payment.py:171 +msgid "" +"Your event's currency is supported by PayPal as a payment and balance " +"currency for in-country accounts only. This means, that the receiving as " +"well as the sending PayPal account must have been created in the same " +"country and use the same currency. Out of country accounts will not be able " +"to send any payments." +msgstr "" + +#: pretix/plugins/paypal/payment.py:219 pretix/plugins/paypal/payment.py:277 +#: pretix/plugins/paypal/payment.py:315 pretix/plugins/paypal/payment.py:330 +#: pretix/plugins/paypal/payment.py:391 pretix/plugins/paypal/payment.py:538 +#: pretix/plugins/paypal/payment.py:603 +msgid "We had trouble communicating with PayPal" +msgstr "" + +#: pretix/plugins/paypal/payment.py:344 pretix/plugins/paypal/payment.py:353 +#: pretix/plugins/paypal/payment.py:417 +msgid "" +"We were unable to process your payment. See below for details on how to " +"proceed." +msgstr "" + +#: pretix/plugins/paypal/payment.py:398 pretix/plugins/paypal/payment.py:407 +msgid "" +"PayPal has not yet approved the payment. We will inform you as soon as the " +"payment completed." +msgstr "" + +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 +#: pretix/plugins/stripe/payment.py:801 +msgid "There was an error sending the confirmation mail." +msgstr "" + +#: pretix/plugins/paypal/payment.py:514 pretix/plugins/paypal/payment.py:521 +msgid "Refunding the amount via PayPal failed: {}" +msgstr "" + +#: pretix/plugins/paypal/payment.py:644 pretix/plugins/paypal/payment.py:652 +msgid "The payment for this invoice has already been received." +msgstr "" + +#: pretix/plugins/paypal/payment.py:645 pretix/plugins/paypal/payment.py:653 +msgid "PayPal payment ID" +msgstr "" + +#: pretix/plugins/paypal/payment.py:647 +msgid "PayPal sale ID" +msgstr "" + +#: pretix/plugins/paypal/signals.py:31 +msgid "Payment completed." +msgstr "" + +#: pretix/plugins/paypal/signals.py:32 +msgid "Payment denied." +msgstr "" + +#: pretix/plugins/paypal/signals.py:33 +msgid "Payment refunded." +msgstr "" + +#: pretix/plugins/paypal/signals.py:34 +msgid "Payment reversed." +msgstr "" + +#: pretix/plugins/paypal/signals.py:35 +msgid "Payment pending." +msgstr "" + +#: pretix/plugins/paypal/signals.py:44 +msgid "PayPal reported an event: {}" +msgstr "" + +#: pretix/plugins/paypal/signals.py:69 +msgid "PayPal Connect: Client ID" +msgstr "" + +#: pretix/plugins/paypal/signals.py:73 +msgid "PayPal Connect: Secret key" +msgstr "" + +#: pretix/plugins/paypal/signals.py:77 +msgid "PayPal Connect Endpoint" +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/action_double.html:5 +#, python-format +msgid "" +"The PayPal transaction %(payment)s has succeeded, but the order %(order)s " +"has already been paid by other means. Please double check and refund the " +"money via PayPal's interface." +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/action_overpaid.html:5 +#, python-format +msgid "" +"The PayPal transaction %(payment)s has succeeded, but the order %(order)s is " +"expired and the product was sold out in the meantime. Therefore, the payment " +"could not be accepted. Please contact the user and refund the money via " +"PayPal's interface." +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/action_refund.html:5 +#, python-format +msgid "" +"PayPal reported that the payment %(payment)s has been refunded or reversed. " +"Do you want to mark the matching order (%(order)s) as refunded?" +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/checkout_payment_confirm.html:3 +msgid "" +"The total amount listed above will be withdrawn from your PayPal account " +"after the confirmation of your purchase." +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/checkout_payment_form.html:3 +msgid "" +"After you clicked continue, we will redirect you to PayPal to fill in your " +"payment details. You will then be redirected back here to review and confirm " +"your order." +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:7 +msgid "Sale ID" +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:11 +msgid "Last update" +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +msgid "Total value" +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/pending.html:4 +msgid "" +"Our attempt to execute your Payment via PayPal has failed. Please try again " +"or contact us." +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/pending.html:8 +msgid "" +"We're waiting for an answer from PayPal regarding your payment. Please " +"contact us, if this takes more than a few hours." +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +msgid "The payment process has started in a new window." +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +msgid "The window to enter your payment data was not opened or was closed?" +msgstr "" + +#: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +msgid "Click here in order to open the window." +msgstr "" + +#: pretix/plugins/paypal/views.py:48 pretix/plugins/paypal/views.py:61 +msgid "An error occurred during connecting with PayPal, please try again." +msgstr "" + +#: pretix/plugins/paypal/views.py:64 +msgid "" +"Your PayPal account is now connected to pretix. You can change the settings " +"in detail below." +msgstr "" + +#: pretix/plugins/paypal/views.py:105 +msgid "Invalid response from PayPal received." +msgstr "" + +#: pretix/plugins/paypal/views.py:121 +msgid "It looks like you canceled the PayPal payment" +msgstr "" + +#: pretix/plugins/paypal/views.py:251 +msgid "Your PayPal account has been disconnected." +msgstr "" + +#: pretix/plugins/pretixdroid/apps.py:9 pretix/plugins/pretixdroid/apps.py:12 +msgid "Old check-in device API" +msgstr "" + +#: pretix/plugins/pretixdroid/apps.py:18 +msgid "" +"This plugin allows you to use the pretixdroid and pretixdesk apps for your " +"event." +msgstr "" + +#: pretix/plugins/reports/apps.py:10 pretix/plugins/reports/apps.py:13 +msgid "Report exporter" +msgstr "" + +#: pretix/plugins/reports/apps.py:17 +msgid "This plugin allows you to generate printable reports about your sales." +msgstr "" + +#: pretix/plugins/reports/exporters.py:120 +#, python-format +msgid "Page %d" +msgstr "" + +#: pretix/plugins/reports/exporters.py:122 +#, python-format +msgid "Created: %s" +msgstr "" + +#: pretix/plugins/reports/exporters.py:162 +msgid "Order overview (PDF)" +msgstr "" + +#: pretix/plugins/reports/exporters.py:230 +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:58 +msgid "Orders by product" +msgstr "" + +#: pretix/plugins/reports/exporters.py:230 +msgid "(excl. taxes)" +msgstr "" + +#: pretix/plugins/reports/exporters.py:230 +msgid "(incl. taxes)" +msgstr "" + +#: pretix/plugins/reports/exporters.py:235 +#, python-brace-format +msgid "{axis} between {start} and {end}" +msgstr "" + +#: pretix/plugins/reports/exporters.py:267 +#: pretix/plugins/reports/exporters.py:268 +#: pretix/plugins/reports/exporters.py:269 +#: pretix/plugins/reports/exporters.py:270 +#: pretix/plugins/reports/exporters.py:271 +#: pretix/plugins/reports/exporters.py:272 +msgid "#" +msgstr "" + +#: pretix/plugins/reports/exporters.py:340 +msgid "List of orders with taxes (PDF)" +msgstr "" + +#: pretix/plugins/reports/exporters.py:417 +#, python-brace-format +msgid "Orders by tax rate ({currency})" +msgstr "" + +#: pretix/plugins/reports/exporters.py:426 +#: pretix/plugins/reports/exporters.py:671 +#: pretix/plugins/reports/exporters.py:723 +#: pretix/plugins/reports/exporters.py:764 +msgid "Gross" +msgstr "" + +#: pretix/plugins/reports/exporters.py:426 +#: pretix/plugins/reports/exporters.py:672 +#: pretix/plugins/reports/exporters.py:724 +#: pretix/plugins/reports/exporters.py:764 +msgid "Tax" +msgstr "" + +#: pretix/plugins/reports/exporters.py:511 +msgid "List of orders with taxes" +msgstr "" + +#: pretix/plugins/reports/exporters.py:517 +msgid "Taxes by country" +msgstr "" + +#: pretix/plugins/reports/exporters.py:518 +msgid "Business customers" +msgstr "" + +#: pretix/plugins/reports/exporters.py:668 +#: pretix/plugins/reports/exporters.py:713 +msgid "Country code" +msgstr "" + +#: pretix/plugins/returnurl/apps.py:9 pretix/plugins/returnurl/apps.py:12 +#: pretix/plugins/returnurl/templates/returnurl/settings.html:5 +msgid "Redirection from order page" +msgstr "" + +#: pretix/plugins/returnurl/apps.py:16 +msgid "" +"This plugin allows to link to payments and redirect back afterwards. This is " +"useful in combination with our API." +msgstr "" + +#: pretix/plugins/returnurl/signals.py:44 +msgid "Redirection" +msgstr "" + +#: pretix/plugins/returnurl/templates/returnurl/settings.html:7 +msgid "" +"This feature is useful if you use only the payment component of eventyay but " +"build your own checkout interface for other steps." +msgstr "" + +#: pretix/plugins/returnurl/views.py:14 +msgid "Base redirection URL" +msgstr "" + +#: pretix/plugins/returnurl/views.py:15 +msgid "Redirection will only be allowed to URLs that start with this prefix." +msgstr "" + +#: pretix/plugins/sendmail/apps.py:16 +msgid "This plugin allows you to send out emails to all your customers." +msgstr "" + +#: pretix/plugins/sendmail/forms.py:18 +msgid "Send email to" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:27 +msgid "Attachment" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:34 +msgid "" +"Sending an attachment increases the chance of your email not arriving or " +"being sorted into spam folders. We recommend only using PDFs of no more than " +"2 MB in size." +msgstr "" + +#: pretix/plugins/sendmail/forms.py:42 +msgid "Only send to people who bought" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:47 +msgid "Filter check-in status" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:51 +msgid "Send to customers not checked in" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:54 +msgid "Only send to customers of" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:60 +msgctxt "subevent" +msgid "Only send to customers of dates starting at or after" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:65 +msgctxt "subevent" +msgid "Only send to customers of dates starting before" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:70 +msgctxt "subevent" +msgid "Only send to customers with orders created after" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:75 +msgctxt "subevent" +msgid "Only send to customers with orders created before" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:108 +msgid "Everyone who created a ticket order" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:112 +msgid "" +"Every attendee (falling back to the order contact when no attendee email " +"address is given)" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:114 +msgid "Both (all order contact addresses and all attendee email addresses)" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:131 pretix/plugins/sendmail/views.py:220 +msgid "payment pending (except unapproved)" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:132 pretix/plugins/sendmail/views.py:221 +msgid "approval pending" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:135 pretix/plugins/sendmail/views.py:219 +msgid "pending with payment overdue" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:138 +msgid "Send to customers with order status" +msgstr "" + +#: pretix/plugins/sendmail/forms.py:162 pretix/plugins/sendmail/forms.py:166 +msgid "Send to customers checked in on list" +msgstr "" + +#: pretix/plugins/sendmail/signals.py:48 +msgid "Email was sent" +msgstr "" + +#: pretix/plugins/sendmail/signals.py:49 +msgid "The order received a mass email." +msgstr "" + +#: pretix/plugins/sendmail/signals.py:50 +msgid "A ticket holder of this order received a mass email." +msgstr "" + +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history.html:19 +msgid "Sent to orders:" +msgstr "" + +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history.html:28 +msgid "All customers not checked in" +msgstr "" + +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history.html:40 +msgid "Attendee contact addresses" +msgstr "" + +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history.html:42 +msgid "All contact addresses" +msgstr "" + +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history.html:44 +msgid "Order contact addresses" +msgstr "" + +#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history.html:55 +msgid "Send a new email based on this" +msgstr "" + +#: pretix/plugins/sendmail/views.py:79 +msgid "You supplied an invalid log entry ID" +msgstr "" + +#: pretix/plugins/sendmail/views.py:133 +msgid "There are no orders matching this selection." +msgstr "" + +#: pretix/plugins/sendmail/views.py:180 +#, python-format +msgid "" +"Your message has been queued and will be sent to the contact addresses of %d " +"orders in the next few minutes." +msgstr "" + +#: pretix/plugins/statistics/apps.py:9 pretix/plugins/statistics/apps.py:12 +#: pretix/plugins/statistics/signals.py:16 +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:8 +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:10 +msgid "Statistics" +msgstr "" + +#: pretix/plugins/statistics/apps.py:16 +msgid "This plugin shows you various statistics." +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:19 +msgid "Orders by day" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:25 +msgid "" +"Orders paid in multiple payments are shown with the date of their last " +"payment." +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:34 +msgid "Revenue over time" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:40 +msgctxt "subevent" +msgid "" +"If you select a single date, payment method fees will not be listed here as " +"it might not be clear which date they belong to." +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:48 +msgid "" +"Only fully paid orders are counted. Orders paid in multiple payments are " +"shown with the date of their last payment." +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:67 +msgid "Seating Overview" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:74 +msgid "Sold Seats" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:80 +msgid "Blocked Seats" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:86 +msgid "Free Seats" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:94 +msgid "Seating Sales Potentials" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:102 +msgid "Unsold Seats" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:103 +msgid "Potential Profits" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:107 +msgid "Minimum Price" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:108 +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:110 +msgid "Blocked" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:109 +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:111 +msgid "Available" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:116 +msgid "On Sale" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:136 +msgid "Not on Sale" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:146 +msgid "Seats not attributed to any specific product" +msgstr "" + +#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:172 +msgid "" +"We will show you a variety of statistics about your sales right here, as " +"soon as the first orders are submitted!" +msgstr "" + +#: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 +#: pretix/plugins/stripe/payment.py:46 +msgid "Stripe" +msgstr "" + +#: pretix/plugins/stripe/apps.py:17 +msgid "This plugin allows you to receive credit card payments via Stripe" +msgstr "" + +#: pretix/plugins/stripe/forms.py:19 +#, python-format +msgid "" +"The provided key \"%(value)s\" does not look valid. It should start with " +"\"%(prefix)s\"." +msgstr "" + +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +msgid "Stripe Connect: App fee (percent)" +msgstr "" + +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +msgid "Stripe Connect: App fee (max)" +msgstr "" + +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +msgid "Stripe Connect: App fee (min)" +msgstr "" + +#: pretix/plugins/stripe/payment.py:75 +msgid "" +"To accept payments via Stripe, you will need an account at Stripe. By " +"clicking on the following button, you can either create a new Stripe account " +"connect pretix to an existing one." +msgstr "" + +#: pretix/plugins/stripe/payment.py:79 +msgid "Connect with Stripe" +msgstr "" + +#: pretix/plugins/stripe/payment.py:89 +msgid "Disconnect from Stripe" +msgstr "" + +#: pretix/plugins/stripe/payment.py:93 +msgid "" +"Please configure a Stripe Webhook to the following endpoint in order to " +"automatically cancel orders when charges are refunded externally and to " +"process asynchronous payment methods like SOFORT." +msgstr "" + +#: pretix/plugins/stripe/payment.py:105 +msgid "Enable MOTO payments for resellers" +msgstr "" + +#: pretix/plugins/stripe/payment.py:107 +msgid "" +"Gated feature (needs to be enabled for your account by Stripe support first)" +msgstr "" + +#: pretix/plugins/stripe/payment.py:115 +msgid "Stripe Integration security guide" +msgstr "" + +#: pretix/plugins/stripe/payment.py:109 +#, python-format +msgid "" +"We can flag the credit card transaction you make through the reseller " +"interface as MOTO (Mail Order / Telephone Order), which will exempt them " +"from Strong Customer Authentication (SCA) requirements. However: By enabling " +"this feature, you will need to fill out yearly PCI-DSS self-assessment forms " +"like the 40 page SAQ D. Please consult the %s for further information on " +"this subject." +msgstr "" + +#: pretix/plugins/stripe/payment.py:131 +msgid "Stripe account" +msgstr "" + +#: pretix/plugins/stripe/payment.py:139 +msgctxt "stripe" +msgid "Live" +msgstr "" + +#: pretix/plugins/stripe/payment.py:140 +msgctxt "stripe" +msgid "Testing" +msgstr "" + +#: pretix/plugins/stripe/payment.py:142 +msgid "" +"If your event is in test mode, we will always use Stripe's test API, " +"regardless of this setting." +msgstr "" + +#: pretix/plugins/stripe/payment.py:155 +msgid "Publishable key" +msgstr "" + +#: pretix/plugins/stripe/payment.py:166 +msgid "Secret key" +msgstr "" + +#: pretix/plugins/stripe/payment.py:175 +msgid "" +"The country in which your Stripe-account is registered in. Usually, this is " +"your country of residence." +msgstr "" + +#: pretix/plugins/stripe/payment.py:183 +msgid "Credit card payments" +msgstr "" + +#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +msgid "giropay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 +#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 +#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 +#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 +#: pretix/plugins/stripe/payment.py:253 +msgid "Needs to be enabled in your Stripe account first." +msgstr "" + +#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +msgid "iDEAL" +msgstr "" + +#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +msgid "Alipay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +msgid "Bancontact" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +msgid "SOFORT" +msgstr "" + +#: pretix/plugins/stripe/payment.py:221 +msgid "" +"Despite the name, Sofort payments via Stripe are not " +"processed instantly but might take up to 14 days to be " +"confirmed in some cases. Please only activate this payment method if your " +"payment term allows for this lag." +msgstr "" + +#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +msgid "EPS" +msgstr "" + +#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +msgid "Multibanco" +msgstr "" + +#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +msgid "Przelewy24" +msgstr "" + +#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +msgid "WeChat Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:278 +#, python-brace-format +msgid "" +"The Stripe plugin is operating in test mode. You can use one of many test cards to perform a transaction. No money will actually be " +"transferred." +msgstr "" + +#: pretix/plugins/stripe/payment.py:407 pretix/plugins/stripe/payment.py:757 +#: pretix/plugins/stripe/payment.py:852 +#, python-format +msgid "Stripe reported an error with your card: %s" +msgstr "" + +#: pretix/plugins/stripe/payment.py:434 pretix/plugins/stripe/payment.py:567 +#: pretix/plugins/stripe/payment.py:770 pretix/plugins/stripe/payment.py:864 +#: pretix/plugins/stripe/payment.py:1436 +msgid "" +"We had trouble communicating with Stripe. Please try again and get in touch " +"with us if this problem persists." +msgstr "" + +#: pretix/plugins/stripe/payment.py:452 pretix/plugins/stripe/payment.py:804 +msgid "" +"Your payment is pending completion. We will inform you as soon as the " +"payment completed." +msgstr "" + +#: pretix/plugins/stripe/payment.py:461 pretix/plugins/stripe/payment.py:818 +#, python-format +msgid "Stripe reported an error: %s" +msgstr "" + +#: pretix/plugins/stripe/payment.py:517 +msgid "No payment information found." +msgstr "" + +#: pretix/plugins/stripe/payment.py:538 +msgid "" +"We had trouble communicating with Stripe. Please try again and contact " +"support if the problem persists." +msgstr "" + +#: pretix/plugins/stripe/payment.py:542 +msgid "Stripe returned an error" +msgstr "" + +#: pretix/plugins/stripe/payment.py:638 +msgid "Credit card via Stripe" +msgstr "" + +#: pretix/plugins/stripe/payment.py:639 +msgid "Credit card" +msgstr "" + +#: pretix/plugins/stripe/payment.py:666 +msgid "You may need to enable JavaScript for Stripe payments." +msgstr "" + +#: pretix/plugins/stripe/payment.py:812 +msgid "Your payment failed. Please try again." +msgstr "" + +#: pretix/plugins/stripe/payment.py:885 +msgid "giropay via Stripe" +msgstr "" + +#: pretix/plugins/stripe/payment.py:917 pretix/plugins/stripe/payment.py:1084 +#: pretix/plugins/stripe/payment.py:1236 +msgid "unknown name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:949 pretix/plugins/stripe/payment.py:1001 +#: pretix/plugins/stripe/payment.py:1116 pretix/plugins/stripe/payment.py:1268 +#: pretix/plugins/stripe/payment.py:1371 +#, python-brace-format +msgid "Bank account at {bank}" +msgstr "" + +#: pretix/plugins/stripe/payment.py:957 +msgid "iDEAL via Stripe" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1009 +msgid "Alipay via Stripe" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1052 +msgid "Bancontact via Stripe" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1124 +msgid "SOFORT via Stripe" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1141 +msgid "Country of your bank" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1142 +msgid "Germany" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1143 +msgid "Austria" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1144 +msgid "Belgium" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1145 +msgid "Netherlands" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1146 +msgid "Spain" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1193 +#, python-brace-format +msgid "Bank account {iban} at {bank}" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1204 +msgid "EPS via Stripe" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1276 +msgid "Multibanco via Stripe" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1323 +msgid "Przelewy24 via Stripe" +msgstr "" + +#: pretix/plugins/stripe/payment.py:1379 +msgid "WeChat Pay via Stripe" +msgstr "" + +#: pretix/plugins/stripe/signals.py:65 +msgid "Charge succeeded." +msgstr "" + +#: pretix/plugins/stripe/signals.py:66 +msgid "Charge refunded." +msgstr "" + +#: pretix/plugins/stripe/signals.py:67 +msgid "Charge updated." +msgstr "" + +#: pretix/plugins/stripe/signals.py:68 +msgid "Charge pending" +msgstr "" + +#: pretix/plugins/stripe/signals.py:69 +msgid "Payment authorized." +msgstr "" + +#: pretix/plugins/stripe/signals.py:70 +msgid "Payment authorization canceled." +msgstr "" + +#: pretix/plugins/stripe/signals.py:71 +msgid "Payment authorization failed." +msgstr "" + +#: pretix/plugins/stripe/signals.py:77 +msgid "Charge failed. Reason: {}" +msgstr "" + +#: pretix/plugins/stripe/signals.py:79 +msgid "Dispute created. Reason: {}" +msgstr "" + +#: pretix/plugins/stripe/signals.py:81 +msgid "Dispute updated. Reason: {}" +msgstr "" + +#: pretix/plugins/stripe/signals.py:83 +msgid "Dispute closed. Status: {}" +msgstr "" + +#: pretix/plugins/stripe/signals.py:86 +msgid "Stripe reported an event: {}" +msgstr "" + +#: pretix/plugins/stripe/signals.py:97 +msgid "Stripe Connect: Client ID" +msgstr "" + +#: pretix/plugins/stripe/signals.py:104 +msgid "Stripe Connect: Secret key" +msgstr "" + +#: pretix/plugins/stripe/signals.py:111 +msgid "Stripe Connect: Publishable key" +msgstr "" + +#: pretix/plugins/stripe/signals.py:118 +msgid "Stripe Connect: Secret key (test)" +msgstr "" + +#: pretix/plugins/stripe/signals.py:125 +msgid "Stripe Connect: Publishable key (test)" +msgstr "" + +#: pretix/plugins/stripe/signals.py:170 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:6 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:9 +msgid "Stripe Connect" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html:5 +#, python-format +msgid "" +"The Stripe transaction %(charge)s has succeeded, but " +"the order %(order)s has already been paid by other means. Please double-" +"check and refund the money via Stripe's interface." +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 +#, python-format +msgid "" +"The Stripe transaction %(charge)s has succeeded, but " +"the order %(order)s is expired and the product was sold out in the meantime. " +"Therefore, the payment could not be accepted. Please contact the user and " +"refund the money via Stripe's interface." +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 +#, python-format +msgid "" +"Stripe reported that the transaction %(charge)s has " +"been refunded. Do you want to refund mark the matching order (%(order)s) as " +"refunded?" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +msgid "The total amount will be withdrawn from your credit card." +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +msgid "Card type" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +msgid "" +"After you submitted your order, we will redirect you to the payment service " +"provider to complete your payment. You will then be redirected back here to " +"get your tickets." +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +msgid "" +"This transaction will be marked as Mail Order/Telephone Order, exempting it " +"from Strong Customer Authentication (SCA) whenever possible" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +msgid "For a credit card payment, please turn on JavaScript." +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +msgid "" +"You already entered a card number that we will use to charge the payment " +"amount." +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +msgid "Use a different card" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +msgid "OR" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +msgid "" +"Your payment will be processed by Stripe, Inc. Your credit card data will be " +"transmitted directly to Stripe and never touches our servers." +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +msgid "Charge ID" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 +msgid "Payer name" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +msgid "MOTO" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +msgid "Error message" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +msgid "" +"We're waiting for an answer from the payment provider regarding your " +"payment. Please contact us if this takes more than a few days." +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +msgid "" +"You need to confirm your payment. Please click the link below to do so or " +"start a new payment." +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +msgid "Confirm payment" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +msgid "" +"Please scan the barcode below to complete your WeChat payment. Once you have " +"completed your payment, you can refresh this page." +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +msgid "" +"The payment transaction could not be completed for the following reason:" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +msgid "Unknown reason" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/presale/templates/pretixpresale/event/order_pay.html:4 +#: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 +msgid "Pay order" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#, python-format +msgid "Confirm payment: %(code)s" +msgstr "" + +#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +msgid "Confirming your payment…" +msgstr "" + +#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 +#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +msgid "An error occurred during connecting with Stripe, please try again." +msgstr "" + +#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +msgid "Stripe returned an error: {}" +msgstr "" + +#: pretix/plugins/stripe/views.py:119 +msgid "" +"Your Stripe account is now connected to pretix. You can change the settings " +"in detail below." +msgstr "" + +#: pretix/plugins/stripe/views.py:403 +msgid "Your Stripe account has been disconnected." +msgstr "" + +#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 +#: pretix/plugins/stripe/views.py:469 +msgid "" +"Sorry, there was an error in the payment process. Please check the link in " +"your emails to continue." +msgstr "" + +#: pretix/plugins/stripe/views.py:501 +msgid "" +"We had trouble authorizing your card payment. Please try again and get in " +"touch with us if this problem persists." +msgstr "" + +#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +msgid "Sorry, there was an error in the payment process." +msgstr "" + +#: pretix/plugins/ticketoutputpdf/apps.py:10 +#: pretix/plugins/ticketoutputpdf/apps.py:13 +msgid "PDF ticket output" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/apps.py:17 +msgid "This plugin allows you to print out tickets as PDF files" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/exporters.py:27 +msgid "All PDF tickets in one file" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/forms.py:25 +#, python-brace-format +msgid "PDF ticket layout for {channel}" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/forms.py:28 +msgid "(Same as above)" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/forms.py:30 +msgid "PDF ticket layout" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/signals.py:106 +msgid "Ticket layout created." +msgstr "" + +#: pretix/plugins/ticketoutputpdf/signals.py:107 +msgid "Ticket layout deleted." +msgstr "" + +#: pretix/plugins/ticketoutputpdf/signals.py:108 +msgid "Ticket layout changed." +msgstr "" + +#: pretix/plugins/ticketoutputpdf/signals.py:121 +#, python-brace-format +msgid "Ticket layout {val}" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:4 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:6 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:8 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:15 +msgid "Ticket layout" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:9 +#, python-format +msgid "Are you sure you want to delete the layout %(layout)s?" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:6 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:13 +#, python-format +msgid "Ticket layout: %(name)s" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:23 +msgid "Ticket design" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html:3 +msgid "" +"You can customize the ticket design with our PDF ticket editor. There, you " +"can upload a PDF file used as a background for the tickets and then place " +"various texts and QR codes on the background at the positions of your " +"choice. The editor is easy to use thanks to its drag-and-drop user " +"interface, but it requires a modern browser and a decent internet connection." +msgstr "" + +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html:14 +msgid "Open Layout Designer" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html:18 +msgid "Advanced mode (multiple layouts)" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:4 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:6 +msgid "Ticket layouts" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:10 +msgid "You haven't created any layouts yet." +msgstr "" + +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:17 +#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html:24 +msgid "Create a new layout" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/ticketoutput.py:29 +msgid "PDF output" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/ticketoutput.py:31 +msgid "Download tickets (PDF)" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/ticketoutput.py:32 +msgid "Download ticket (PDF)" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/views.py:36 +msgid "Default ticket layout" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/views.py:93 +msgid "The new ticket layout has been created." +msgstr "" + +#: pretix/plugins/ticketoutputpdf/views.py:142 +#: pretix/plugins/ticketoutputpdf/views.py:172 +#: pretix/plugins/ticketoutputpdf/views.py:220 +msgid "The requested layout does not exist." +msgstr "" + +#: pretix/plugins/ticketoutputpdf/views.py:184 +msgid "The selected ticket layout been deleted." +msgstr "" + +#: pretix/plugins/ticketoutputpdf/views.py:201 +msgid "Default layout" +msgstr "" + +#: pretix/plugins/ticketoutputpdf/views.py:224 +msgid "Ticket PDF layout: {}" +msgstr "" + +#: pretix/plugins/webcheckin/apps.py:9 pretix/plugins/webcheckin/apps.py:12 +msgid "Web-based check-in" +msgstr "" + +#: pretix/plugins/webcheckin/apps.py:16 +msgid "This plugin allows you to perform check-in actions in your browser." +msgstr "" + +#: pretix/plugins/webcheckin/signals.py:15 +msgid "Web Check-in" +msgstr "" + +#: pretix/plugins/webcheckin/templates/pretixplugins/webcheckin/index.html:11 +msgid "Check-in" +msgstr "" + +#: pretix/presale/checkoutflow.py:63 +msgctxt "checkoutflow" +msgid "Step" +msgstr "" + +#: pretix/presale/checkoutflow.py:198 +msgctxt "checkoutflow" +msgid "Add-on products" +msgstr "" + +#: pretix/presale/checkoutflow.py:416 +msgctxt "checkoutflow" +msgid "Your information" +msgstr "" + +#: pretix/presale/checkoutflow.py:567 +msgid "" +"Unfortunately, based on the invoice address you entered, we're not able to " +"sell you the selected products for tax-related legal reasons." +msgstr "" + +#: pretix/presale/checkoutflow.py:573 +msgid "" +"Due to the invoice address you entered, we need to apply a different tax " +"rate to your purchase and the price of the products in your cart has changed " +"accordingly." +msgstr "" + +#: pretix/presale/checkoutflow.py:586 pretix/presale/checkoutflow.py:592 +msgid "Please enter a valid email address." +msgstr "" + +#: pretix/presale/checkoutflow.py:599 +msgid "Please enter your invoicing address." +msgstr "" + +#: pretix/presale/checkoutflow.py:603 +msgid "Please enter your name." +msgstr "" + +#: pretix/presale/checkoutflow.py:637 pretix/presale/checkoutflow.py:642 +#: pretix/presale/checkoutflow.py:647 pretix/presale/checkoutflow.py:652 +#: pretix/presale/checkoutflow.py:657 +msgid "Please fill in answers to all required questions." +msgstr "" + +#: pretix/presale/checkoutflow.py:684 +msgctxt "checkoutflow" +msgid "Payment" +msgstr "" + +#: pretix/presale/checkoutflow.py:729 pretix/presale/views/order.py:612 +msgid "Please select a payment method." +msgstr "" + +#: pretix/presale/checkoutflow.py:753 pretix/presale/checkoutflow.py:759 +#: pretix/presale/views/order.py:392 pretix/presale/views/order.py:460 +msgid "The payment information you entered was incomplete." +msgstr "" + +#: pretix/presale/checkoutflow.py:790 +msgctxt "checkoutflow" +msgid "Review order" +msgstr "" + +#: pretix/presale/checkoutflow.py:878 +msgid "You need to check all checkboxes on the bottom of the page." +msgstr "" + +#: pretix/presale/checkoutflow.py:913 +msgid "" +"There was an error sending the confirmation mail. Please try again later." +msgstr "" + +#: pretix/presale/forms/checkout.py:36 +msgid "E-mail address (repeated)" +msgstr "" + +#: pretix/presale/forms/checkout.py:37 +msgid "" +"Please enter the same email address again to make sure you typed it " +"correctly." +msgstr "" + +#: pretix/presale/forms/checkout.py:83 +msgid "Please enter the same email address twice." +msgstr "" + +#: pretix/presale/forms/order.py:72 pretix/presale/forms/order.py:80 +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:172 +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:281 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:133 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:251 +#: pretix/presale/templates/pretixpresale/event/voucher.html:183 +#: pretix/presale/templates/pretixpresale/event/voucher.html:289 +msgid "plus taxes" +msgstr "" + +#: pretix/presale/forms/order.py:92 +msgid "No other variation of this product is currently available for you." +msgstr "" + +#: pretix/presale/forms/order.py:96 +msgid "No other variations of this product exist." +msgstr "" + +#: pretix/presale/forms/renderers.py:29 +msgctxt "form" +msgid "is valid" +msgstr "" + +#: pretix/presale/forms/renderers.py:31 +msgctxt "form" +msgid "has errors" +msgstr "" + +#: pretix/presale/forms/renderers.py:43 +msgctxt "form" +msgid "required" +msgstr "" + +#: pretix/presale/ical.py:54 +#, python-brace-format +msgid "Tickets: {url}" +msgstr "" + +#: pretix/presale/ical.py:57 +#, python-brace-format +msgid "Admission: {datetime}" +msgstr "" + +#: pretix/presale/ical.py:61 +#, python-brace-format +msgid "Organizer: {organizer}" +msgstr "" + +#: pretix/presale/templates/pretixpresale/base.html:59 +msgid "Footer Navigation" +msgstr "" + +#: pretix/presale/templates/pretixpresale/base_footer.html:13 +#, python-format +msgid "event ticketing powered by eventyay" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/base.html:29 +msgid "This shop is currently only visible to you and your team." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/base.html:31 +msgid "Take it live now" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/base.html:40 +#: pretix/presale/templates/pretixpresale/event/base.html:86 +msgid "select language" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/base.html:52 +#, python-format +msgid "Show all events of %(name)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/base.html:101 +#: pretix/presale/templates/pretixpresale/event/base.html:137 +msgid "" +"This ticket shop is currently in test mode. Please do not perform any real " +"purchases as your order might be deleted without notice." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/base.html:107 +#: pretix/presale/templates/pretixpresale/event/base.html:143 +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:151 +#: pretix/presale/templates/pretixpresale/organizers/base.html:69 +msgid "Contact event organizer" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/base.html:154 +#: pretix/presale/templates/pretixpresale/organizers/base.html:72 +msgid "Imprint" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:10 +msgid "" +"For some of the products in your cart, you can choose additional options " +"before you continue." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:13 +msgid "We're now trying to book these add-ons for you!" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:46 +#, python-format +msgid "You need to choose exactly one option from this category." +msgid_plural "You need to choose %(min_count)s options from this category." +msgstr[0] "" +msgstr[1] "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:53 +#, python-format +msgid "You can choose up to %(max_count)s options from this category." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:57 +#, python-format +msgid "" +"You can choose between %(min_count)s and %(max_count)s options from this " +"category." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:91 +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:242 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:49 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:209 +#, python-format +msgid "minimum amount to order: %(num)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:102 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:59 +#, python-format +msgid "from %(price)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:115 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:73 +msgid "Show variants" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:156 +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:266 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:107 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:116 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:228 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:235 +#: pretix/presale/templates/pretixpresale/event/voucher.html:167 +#: pretix/presale/templates/pretixpresale/event/voucher.html:273 +#, python-format +msgid "Modify price for %(item)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:174 +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:283 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:135 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:253 +#: pretix/presale/templates/pretixpresale/event/voucher.html:185 +#: pretix/presale/templates/pretixpresale/event/voucher.html:291 +msgid "incl. taxes" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:177 +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:286 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:138 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:256 +#: pretix/presale/templates/pretixpresale/event/voucher.html:188 +#: pretix/presale/templates/pretixpresale/event/voucher.html:294 +#, python-format +msgid "plus %(rate)s%% %(name)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:181 +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:290 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:142 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:260 +#: pretix/presale/templates/pretixpresale/event/voucher.html:192 +#: pretix/presale/templates/pretixpresale/event/voucher.html:298 +#, python-format +msgid "incl. %(rate)s%% %(name)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:196 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:161 +#: pretix/presale/templates/pretixpresale/event/voucher.html:207 +#: pretix/presale/templates/pretixpresale/event/voucher.html:216 +#, python-format +msgid "Amount of %(item)s – %(var)s to order" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:312 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:286 +#: pretix/presale/templates/pretixpresale/event/voucher.html:313 +#: pretix/presale/templates/pretixpresale/event/voucher.html:322 +#, python-format +msgid "Amount of %(item)s to order" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:325 +msgid "There are no add-ons available for this product." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:337 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:192 +#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:72 +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:152 +msgid "Go back" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_base.html:7 +#, python-format +msgid "Step %(current)s of %(total)s: %(label)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_base.html:12 +#: pretix/presale/templates/pretixpresale/event/checkout_base.html:57 +#: pretix/presale/templates/pretixpresale/event/checkout_base.html:58 +msgid "Checkout" +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:34 +#: pretix/presale/templates/pretixpresale/event/index.html:34 +msgid "Your cart" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_base.html:28 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:22 +#: pretix/presale/templates/pretixpresale/event/index.html:41 +msgid "Cart expired" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_base.html:40 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:43 +#: pretix/presale/templates/pretixpresale/event/index.html:53 +#, python-format +msgid "The items in your cart are reserved for you for %(minutes)s minutes." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_base.html:44 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:47 +#: pretix/presale/templates/pretixpresale/event/index.html:57 +msgid "The items in your cart are no longer reserved for you." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_base.html:53 +#: pretix/presale/templates/pretixpresale/event/index.html:116 +msgid "Add tickets for a different date" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:6 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:8 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:9 +msgid "Review order" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:11 +msgid "Please review the details below and confirm your order." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:13 +msgid "Please hang tight, we're finalizing your order!" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:28 +msgid "Add or remove tickets" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:60 +msgid "Modify payment" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:62 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:84 +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:134 +msgid "Modify" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:82 +msgid "Modify invoice information" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:132 +msgid "Modify contact information" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:138 +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:18 +#: pretix/presale/templates/pretixpresale/event/order_modify.html:33 +msgid "Contact information" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:162 +msgid "Confirmations" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:180 +msgid "" +"Your order requires approval by the event organizer before it can be " +"confirmed and forms a valid contract." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:182 +msgid "" +"We will sent you an email as soon as the event organizer approved or " +"rejected your order. 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:198 +msgid "Place binding order" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:200 +msgid "Submit registration" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:7 +msgid "Please select how you want to pay." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:41 +msgid "This sales channel does not provide support for test mode." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:43 +msgid "If you continue, you might pay an actual order with non-existing money!" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:49 +msgid "This payment provider does not provide support for test mode." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:51 +msgid "If you continue, actual money might be transferred." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:62 +msgid "There are no payment providers enabled." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:64 +msgid "" +"Please go to the payment settings and activate one or more payment providers." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:6 +msgid "Before we continue, we need you to answer some questions." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:8 +msgid "" +"You need to fill all fields that are marked with * to continue." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:67 +msgid "Copy answers from above" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:98 +msgid "Selected add-ons" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:133 +msgid "Copy answers" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/cookies.html:8 +msgid "Please continue in a new tab" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/cookies.html:10 +msgid "" +"Your browser is configured to block cookies from third-party website " +"elements. Unfortunately, this means we cannot show you this ticket shop " +"embedded into the website. Please try to open the ticket shop in a new tab " +"or change your browser settings." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/cookies.html:17 +msgid "We apologize for the inconvenience!" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/cookies.html:24 +msgid "Continue in new tab" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/cookies.html:31 +msgid "Cookies not supported" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/cookies.html:33 +msgid "" +"Your browser does not accept cookies from us. However, we need to set a " +"cookie to remember who you are and what is in your cart. Please change your " +"browser settings accordingly." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_availability.html:6 +msgid "FULLY BOOKED" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_availability.html:8 +msgid "SOLD OUT" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_availability.html:20 +#: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:27 +#: pretix/presale/templates/pretixpresale/fragment_calendar.html:78 +#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:64 +#: pretix/presale/templates/pretixpresale/organizers/index.html:109 +#: pretix/presale/views/widget.py:327 +msgid "Reserved" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_availability.html:22 +msgid "All remaining products are reserved but might become available again." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:54 +msgid "No attendee name provided" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:141 +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:192 +msgid "price per item" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:152 +msgid "Okay, we're removing that…" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:156 +msgid "Remove one" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:165 +msgid "quantity" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:169 +msgid "We're trying to reserve another one for you!" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:170 +#: pretix/presale/templates/pretixpresale/event/index.html:259 +#: pretix/presale/templates/pretixpresale/event/seatingplan.html:24 +#: pretix/presale/templates/pretixpresale/event/voucher.html:74 +#, python-format +msgid "" +"Once the items are in your cart, you will have %(time)s minutes to complete " +"your purchase." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:185 +msgid "Add one more" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:201 +msgid "price" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:282 +#, python-format +msgid "One product" +msgid_plural "%(num)s products" +msgstr[0] "" +msgstr[1] "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:296 +#, python-format +msgid "incl. %(tax_sum)s taxes" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:305 +#: pretix/presale/templates/pretixpresale/event/index.html:298 +msgid "Redeem a voucher" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:308 +msgid "We're applying this voucher to your cart..." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:316 +#: pretix/presale/templates/pretixpresale/event/index.html:317 +msgid "Redeem voucher" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_checkoutflow.html:13 +msgid "Completed:" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_checkoutflow.html:15 +msgid "Current:" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_checkoutflow.html:29 +msgctxt "checkoutflow" +msgid "Order confirmed" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:14 +msgid "Please check your email account, we've sent you your tickets." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:16 +msgid "Please check your email account, we've sent you an email." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:21 +msgid "" +"You can download your tickets right here as soon as the person who placed " +"the order clicked the link in the email they received to confirm the email " +"address is valid." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:26 +msgid "" +"If you click the link in our email, you will be able to download your " +"tickets here." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:30 +msgid "" +"If the email has no attachment, click the link in our email and you will be " +"able to download them from here." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:41 +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:63 +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:83 +msgid "Please have your ticket ready when entering the event." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:44 +msgid "Download your tickets here:" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:48 +msgid "Download all tickets at once:" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:66 +msgid "Download your ticket here:" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:86 +msgid "Download your tickets using the buttons below." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:94 +#, python-format +msgid "You will be able to download your tickets here starting on %(date)s." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:7 +msgctxt "order state" +msgid "Confirmation pending" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:11 +msgid "Payment pending" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:17 +msgctxt "order state" +msgid "Confirmed" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:16 +msgid "Uncategorized products" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:30 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:189 +#, python-format +msgid "Show full-size image of %(item)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:65 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:122 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:240 +#: pretix/presale/templates/pretixpresale/event/voucher.html:127 +#: pretix/presale/templates/pretixpresale/event/voucher.html:172 +#: pretix/presale/templates/pretixpresale/event/voucher.html:278 +msgctxt "price" +msgid "FREE" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:150 +#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:268 +msgid "Enter a voucher code below to buy this ticket." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_quota_left.html:4 +#, python-format +msgid "%(num)s currently available" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar.html:30 +#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html:30 +#: pretix/presale/templates/pretixpresale/organizers/calendar.html:57 +#: pretix/presale/templates/pretixpresale/organizers/calendar_week.html:62 +msgid "Go" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html:21 +#: pretix/presale/templates/pretixpresale/organizers/calendar_week.html:51 +msgid "W" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:23 +#: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:36 +#: pretix/presale/templates/pretixpresale/fragment_calendar.html:74 +#: pretix/presale/templates/pretixpresale/fragment_calendar.html:87 +#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:60 +#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:73 +#: pretix/presale/templates/pretixpresale/organizers/index.html:105 +#: pretix/presale/templates/pretixpresale/organizers/index.html:118 +#: pretix/presale/views/widget.py:319 pretix/presale/views/widget.py:342 +msgid "Book now" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:32 +#: pretix/presale/templates/pretixpresale/fragment_calendar.html:83 +#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:69 +#: pretix/presale/templates/pretixpresale/organizers/index.html:114 +#: pretix/presale/views/widget.py:334 +msgid "Fully booked" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:41 +#: pretix/presale/templates/pretixpresale/organizers/index.html:123 +#, python-format +msgid "Sale starts %(date)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/fragment_subevent_list.html:46 +#: pretix/presale/templates/pretixpresale/organizers/index.html:128 +msgid "Not yet on sale" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:27 +msgid "Your cart, general information, add products to your cart" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:27 +msgid "General information, add products to your cart" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:65 +#: pretix/presale/templates/pretixpresale/event/index.html:82 +msgid "Empty cart" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:74 +#: pretix/presale/templates/pretixpresale/event/index.html:281 +#: pretix/presale/templates/pretixpresale/event/voucher.html:351 +msgid "Proceed with checkout" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:107 +msgid "Please select a date to redeem your voucher." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:120 +msgid "View other date" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:124 +msgid "Choose date to book a ticket" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:129 +msgctxt "subevent" +msgid "Other dates" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:177 +#: pretix/presale/views/widget.py:604 +msgid "The presale period for this event is over." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:182 +#: pretix/presale/views/widget.py:606 +#, python-format +msgid "The presale for this event will start on %(date)s at %(time)s." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:186 +#: pretix/presale/views/widget.py:611 +msgid "The presale for this event has not yet started." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:210 +#: pretix/presale/templates/pretixpresale/event/voucher.html:28 +#, python-format +msgid "Begin: %(time)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:217 +#: pretix/presale/templates/pretixpresale/event/voucher.html:33 +#, python-format +msgid "End: %(time)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:227 +#: pretix/presale/templates/pretixpresale/event/voucher.html:41 +#, python-format +msgid "Admission: %(time)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:233 +#: pretix/presale/templates/pretixpresale/event/voucher.html:45 +#, python-format +msgid "Admission: %(datetime)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:245 +#: pretix/presale/templates/pretixpresale/event/voucher.html:56 +msgid "Add to Calendar" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:258 +#: pretix/presale/templates/pretixpresale/event/seatingplan.html:23 +#: pretix/presale/templates/pretixpresale/event/voucher.html:72 +msgid "We're now trying to reserve this for you!" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:279 +#: pretix/presale/templates/pretixpresale/event/voucher.html:349 +msgctxt "free_tickets" +msgid "Register" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:284 +#: pretix/presale/templates/pretixpresale/event/voucher.html:354 +msgid "Add to cart" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:328 +msgid "If you already ordered a ticket" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:332 +msgid "" +"If you want to see or change the status and details of your order, click on " +"the link in one of the emails we sent you during the order process. If you " +"cannot find the link, click on the following button to request the link to " +"your order to be sent to you again." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/index.html:341 +#: pretix/presale/templates/pretixpresale/event/resend_link.html:4 +#: pretix/presale/templates/pretixpresale/event/resend_link.html:11 +msgid "Resend order links" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:12 +#: pretix/presale/templates/pretixpresale/event/order.html:29 +msgid "Thank you!" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:14 +#: pretix/presale/templates/pretixpresale/event/order.html:32 +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:44 +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:46 +msgid "We successfully received your payment. See below for details." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:35 +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:39 +msgid "Please note that we still await your payment to complete the process." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:51 +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:54 +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:71 +#: pretix/presale/templates/pretixpresale/event/position.html:18 +msgid "View in backend" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:85 +#, python-format +msgid "A payment of %(total)s is still pending for this order." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:88 +#, python-format +msgid "Please complete your payment before %(date)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:97 +msgid "Re-try payment or choose another payment method" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:105 +#: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:45 +msgid "Pay now" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:118 +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:135 +#, 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:142 +msgid "Print" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:144 +#, 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:154 +#, python-format +msgid "The current value of your gift card is %(value)s." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:161 +#, python-format +msgid "This gift card is valid until %(expiry)s." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:172 +#, 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:189 +msgid "Change ordered items" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:191 +#: pretix/presale/templates/pretixpresale/event/order.html:285 +msgid "Change details" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:257 +msgid "" +"You need to select a payment method above before you can request an invoice." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:262 +#: pretix/presale/templates/pretixpresale/event/order.html:269 +#: pretix/presale/templates/pretixpresale/event/order_modify.html:85 +msgid "Request invoice" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:283 +msgid "Change your information" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:291 +msgid "Your information" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:331 +msgid "Internal Reference" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:344 +msgctxt "action" +msgid "Change or cancel your order" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:351 +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:358 +msgid "Change order" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:368 +msgid "" +"You can request to cancel this order, but you will not receive a refund." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:372 +msgid "You can cancel this order, but you will not receive a refund." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:376 +#: pretix/presale/templates/pretixpresale/event/order.html:399 +#: pretix/presale/templates/pretixpresale/event/order.html:420 +#: pretix/presale/templates/pretixpresale/event/order.html:433 +msgid "This will invalidate all tickets in this order." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:381 +#, python-format +msgid "" +"You can request to cancel this order. If your request is approved, a " +"cancellation fee of %(fee)s will be kept and you will " +"receive a refund of the remainder." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:387 +#, python-format +msgid "" +"You can cancel this order. In this case, a cancellation fee of " +"%(fee)s will be kept and you will receive a refund of the " +"remainder." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:393 +#: pretix/presale/templates/pretixpresale/event/order.html:414 +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:89 +msgid "" +"The refund will be issued in form of a gift card that you can use for " +"further purchases." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:395 +#: pretix/presale/templates/pretixpresale/event/order.html:416 +msgid "" +"The refund can be issued to your original payment method or as a gift card." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:397 +#: pretix/presale/templates/pretixpresale/event/order.html:418 +msgid "The refund will be issued to your original payment method." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:404 +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:409 +msgid "You can cancel this order and receive a full refund." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order.html:430 +msgid "You can cancel this order using the following button." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:11 +#, python-format +msgid "Request cancellation: %(code)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:15 +#, python-format +msgid "Cancel order: %(code)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:26 +msgid "" +"You can request the cancellation of your order on this page. The event " +"organizer will then decide on your request. If they approve, your order will " +"be canceled and all tickets will be invalidated." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:33 +msgid "" +"If you cancel this order, all tickets will be invalidated and you can no " +"longer use them. You cannot revert this action." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:43 +#, python-format +msgid "" +"If you want, you can request a refund for the full amount minus a " +"cancellation fee of %(fee)s." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:48 +msgid "If you want, you can request a full refund." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:77 +msgid "Enter custom amount" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:82 +msgid "Refund amount:" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:93 +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:114 +#, python-format +msgid "Your gift card will be valid until %(expiry_date)s." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:102 +msgid "I want the refund as a gift card for later purchases" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:108 +msgid "I want the refund to be sent to my original payment method" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:123 +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:153 +msgid "" +"The refund amount will automatically be sent back to your original payment " +"method. Depending on the payment method, please allow for up to two weeks " +"before this appears on your statement." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:130 +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:161 +msgid "The following payment methods will be used to refund the money to you:" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:141 +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:172 +msgid "" +"With the payment method you used, the refund amount can not be sent " +"back to you automatically. Instead, the event organizer will need " +"to initiate the transfer manually. Please be patient as this might take a " +"bit longer." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_cancel.html:194 +msgid "Yes, request cancellation" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_change.html:5 +#: pretix/presale/templates/pretixpresale/event/order_modify.html:5 +msgid "Modify order" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_change.html:74 +#: pretix/presale/templates/pretixpresale/event/order_modify.html:87 +msgid "Save changes" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_modify.html:8 +#, python-format +msgid "Modify order: %(code)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_modify.html:18 +msgid "" +"Modifying your invoice address will not automatically generate a new " +"invoice. Please contact us if you need a new invoice." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_pay.html:7 +#: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:8 +#, python-format +msgid "Pay order: %(code)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_pay_change.html:5 +msgid "Change payment method" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_pay_change.html:8 +#, python-format +msgid "Choose payment method: %(code)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_pay_change.html:13 +msgid "" +"Please note: If you change your payment method, your order total will change " +"by the amount displayed to the right of each method." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_pay_change.html:46 +msgid "There are no alternative payment providers available for this order." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:16 +msgid "Please confirm the following payment details." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:22 +#, python-format +msgid "Total: %(total)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/position.html:7 +msgid "Registration details" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/position.html:10 +msgid "Your registration" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/position.html:29 +msgid "Your items" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/position.html:39 +msgid "Additional information" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/position.html:44 +#, python-format +msgid "" +"This order is managed for you by %(email)s. Please contact them for any " +"questions regarding payment, cancellation or changes to this order." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/resend_link.html:15 +msgid "" +"If you lost the link to your order or orders, please enter the email address " +"you used for your order. We will send you an email with links to all orders " +"you placed using this email address." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/resend_link.html:30 +msgid "Send links" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/voucher.html:9 +#: pretix/presale/templates/pretixpresale/event/voucher.html:12 +msgid "Voucher redemption" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/voucher.html:17 +msgid "This voucher is valid only for the following specific date and time." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/voucher.html:64 +msgid "" +"You entered a voucher code that allows you to buy one of the following " +"products at the specified price:" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/voucher.html:123 +#, python-format +msgid "from %(minprice)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/waitinglist.html:5 +msgid "Add me to the waiting list" +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/waitinglist.html:29 +#, python-format +msgid "" +"If tickets become available again, we will inform the first persons on the " +"waiting list. If we notify you, you'll have %(hours)s hours time to buy a " +"ticket until we assign it to the next person on the list." +msgstr "" + +#: pretix/presale/templates/pretixpresale/event/waitinglist.html:34 +msgid "Add me to the list" +msgstr "" + +#: pretix/presale/templates/pretixpresale/fragment_calendar.html:92 +#, python-format +msgid "" +"\n" +" from %(start_date)s\n" +" " +msgstr "" + +#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:78 +#, python-format +msgid "" +"\n" +" from %(start_date)s\n" +" " +msgstr "" + +#: pretix/presale/templates/pretixpresale/index.html:7 +msgid "Hello!" +msgstr "" + +#: pretix/presale/templates/pretixpresale/index.html:9 +#, python-format +msgid "" +"This is a self-hosted installation of eventyay, your open " +"source event solution.." +msgstr "" + +#: pretix/presale/templates/pretixpresale/index.html:14 +msgid "" +"If you're looking to buy a ticket, you need to follow a direct link to an " +"event or organizer profile." +msgstr "" + +#: pretix/presale/templates/pretixpresale/index.html:19 +#, python-format +msgid "" +"If you're looking to configure this installation, please head " +"over here." +msgstr "" + +#: pretix/presale/templates/pretixpresale/index.html:23 +msgid "Enjoy!" +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/calendar.html:6 +#: pretix/presale/templates/pretixpresale/organizers/calendar_week.html:6 +msgid "Event overview" +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/calendar.html:30 +#: pretix/presale/templates/pretixpresale/organizers/calendar_week.html:32 +#: pretix/presale/templates/pretixpresale/organizers/index.html:39 +msgid "Week" +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/calendar.html:36 +#: pretix/presale/templates/pretixpresale/organizers/calendar_week.html:38 +#: pretix/presale/templates/pretixpresale/organizers/index.html:44 +msgid "Month" +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/calendar.html:42 +#: pretix/presale/templates/pretixpresale/organizers/calendar_week.html:44 +#: pretix/presale/templates/pretixpresale/organizers/index.html:50 +msgid "iCal" +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/calendar.html:80 +#: pretix/presale/templates/pretixpresale/organizers/calendar_week.html:108 +msgid "Note that the events in this view are in different timezones." +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/index.html:8 +msgid "Event list" +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/index.html:25 +msgid "Past events" +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/index.html:27 +msgid "Upcoming events" +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/index.html:53 +msgid "Show upcoming" +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/index.html:55 +msgid "Show past events" +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/index.html:137 +msgid "More info" +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/index.html:145 +msgid "No archived events found." +msgstr "" + +#: pretix/presale/templates/pretixpresale/organizers/index.html:149 +msgid "No public upcoming events found." +msgstr "" + +#: pretix/presale/templates/pretixpresale/pagination.html:14 +#, python-format +msgid "Page %(page)s of %(of)s" +msgstr "" + +#: pretix/presale/templates/pretixpresale/waiting.html:22 +msgid "We are processing your request …" +msgstr "" + +#: pretix/presale/utils.py:44 pretix/presale/utils.py:160 +#: pretix/presale/utils.py:161 +msgid "The selected event was not found." +msgstr "" + +#: pretix/presale/utils.py:127 +msgid "The selected ticket shop is currently not available." +msgstr "" + +#: pretix/presale/utils.py:133 +msgid "This feature is not enabled." +msgstr "" + +#: pretix/presale/utils.py:169 pretix/presale/utils.py:173 +msgid "The selected organizer was not found." +msgstr "" + +#: pretix/presale/views/cart.py:133 pretix/presale/views/cart.py:138 +#: pretix/presale/views/cart.py:155 pretix/presale/views/cart.py:167 +msgid "Please enter numbers only." +msgstr "" + +#: pretix/presale/views/cart.py:140 +msgid "Please enter positive numbers only." +msgstr "" + +#: pretix/presale/views/cart.py:360 +msgid "We applied the voucher to as many products in your cart as we could." +msgstr "" + +#: pretix/presale/views/cart.py:382 +msgid "Your cart has been updated." +msgstr "" + +#: pretix/presale/views/cart.py:385 pretix/presale/views/cart.py:410 +msgid "Your cart is now empty." +msgstr "" + +#: pretix/presale/views/cart.py:425 +msgid "The products have been successfully added to your cart." +msgstr "" + +#: pretix/presale/views/cart.py:447 pretix/presale/views/event.py:356 +#: pretix/presale/views/widget.py:286 +msgid "Tickets for this event cannot be purchased on this sales channel." +msgstr "" + +#: pretix/presale/views/checkout.py:34 +msgid "Your cart is empty" +msgstr "" + +#: pretix/presale/views/checkout.py:38 +msgid "The presale for this event is over or has not yet started." +msgstr "" + +#: pretix/presale/views/event.py:570 +msgid "Unknown event code or not authorized to access this event." +msgstr "" + +#: pretix/presale/views/event.py:577 +msgctxt "subevent" +msgid "No date selected." +msgstr "" + +#: pretix/presale/views/event.py:580 +msgctxt "subevent" +msgid "Unknown date selected." +msgstr "" + +#: pretix/presale/views/event.py:603 pretix/presale/views/event.py:611 +#: pretix/presale/views/event.py:614 +msgid "Please go back and try again." +msgstr "" + +#: pretix/presale/views/order.py:323 pretix/presale/views/order.py:388 +#: pretix/presale/views/order.py:456 +msgid "The payment for this order cannot be continued." +msgstr "" + +#: pretix/presale/views/order.py:328 pretix/presale/views/order.py:397 +#: pretix/presale/views/order.py:465 pretix/presale/views/order.py:504 +msgid "The payment is too late to be accepted." +msgstr "" + +#: pretix/presale/views/order.py:411 +msgid "An invoice has been generated." +msgstr "" + +#: pretix/presale/views/order.py:499 +msgid "The payment method for this order cannot be changed." +msgstr "" + +#: pretix/presale/views/order.py:510 +msgid "A payment is currently pending for this order." +msgstr "" + +#: pretix/presale/views/order.py:765 +msgid "You cannot modify this order" +msgstr "" + +#: pretix/presale/views/order.py:843 pretix/presale/views/order.py:848 +#: pretix/presale/views/order.py:853 +msgid "You chose an invalid cancellation fee." +msgstr "" + +#: pretix/presale/views/order.py:869 +msgid "Canceled by customer" +msgstr "" + +#: pretix/presale/views/order.py:880 +msgid "The cancellation has been requested." +msgstr "" + +#: pretix/presale/views/order.py:934 +msgid "Ticket download is not (yet) enabled for this order." +msgstr "" + +#: pretix/presale/views/order.py:943 +msgid "Please click the link we sent you via email to download your tickets." +msgstr "" + +#: pretix/presale/views/order.py:1102 +msgid "You cannot change this order." +msgstr "" + +#: pretix/presale/views/order.py:1205 +#, python-brace-format +msgid "" +"The order has been changed. You can now proceed by paying the open amount of " +"{amount}." +msgstr "" + +#: pretix/presale/views/user.py:27 +msgid "We had difficulties processing your input." +msgstr "" + +#: pretix/presale/views/user.py:36 +#, python-brace-format +msgid "" +"If the email address you entered is valid and associated with a ticket, we " +"have already sent you an email with a link to your ticket in the past " +"{number} hours. If the email did not arrive, please your check spam folder " +"and also double check that you used the correct email address." +msgstr "" + +#: pretix/presale/views/user.py:49 +msgid "Your orders for {}" +msgstr "" + +#: pretix/presale/views/user.py:57 +msgid "We have trouble sending emails right now, please check back later." +msgstr "" + +#: pretix/presale/views/user.py:60 +msgid "" +"If there were any orders by this user, they will receive an email with their " +"order codes." +msgstr "" + +#: pretix/presale/views/waiting.py:77 +msgid "Waiting lists are disabled for this event." +msgstr "" + +#: pretix/presale/views/waiting.py:81 +msgid "We could not identify the product you selected." +msgstr "" + +#: pretix/presale/views/waiting.py:85 +msgid "The waiting list is disabled for this product." +msgstr "" + +#: pretix/presale/views/waiting.py:106 +msgid "" +"You cannot add yourself to the waiting list as this product is currently " +"available." +msgstr "" + +#: pretix/presale/views/waiting.py:111 +msgid "" +"We've added you to the waiting list. You will receive an email as soon as " +"tickets get available again." +msgstr "" + +#: pretix/presale/views/widget.py:266 +msgctxt "widget" +msgid "event ticketing powered by pretix" +msgstr "" + +#: pretix/presale/views/widget.py:281 +msgid "This ticket shop is currently disabled." +msgstr "" + +#: pretix/presale/views/widget.py:295 +msgid "The selected date does not exist in this event series." +msgstr "" + +#: pretix/presale/views/widget.py:302 +msgid "This is not an event series." +msgstr "" + +#: pretix/presale/views/widget.py:350 +#, python-format +msgid "from %(start_date)s" +msgstr "" + +#: pretix/settings.py:433 +msgid "English" +msgstr "" + +#: pretix/settings.py:434 +msgid "German" +msgstr "" + +#: pretix/settings.py:435 +msgid "German (informal)" +msgstr "" + +#: pretix/settings.py:436 +msgid "Arabic" +msgstr "" + +#: pretix/settings.py:437 +msgid "Chinese (simplified)" +msgstr "" + +#: pretix/settings.py:438 +msgid "Danish" +msgstr "" + +#: pretix/settings.py:439 +msgid "Dutch" +msgstr "" + +#: pretix/settings.py:440 +msgid "Dutch (informal)" +msgstr "" + +#: pretix/settings.py:441 +msgid "French" +msgstr "" + +#: pretix/settings.py:442 +msgid "Finnish" +msgstr "" + +#: pretix/settings.py:443 +msgid "Greek" +msgstr "" + +#: pretix/settings.py:444 +msgid "Italian" +msgstr "" + +#: pretix/settings.py:445 +msgid "Latvian" +msgstr "" + +#: pretix/settings.py:446 +msgid "Polish" +msgstr "" + +#: pretix/settings.py:447 +msgid "Portuguese (Portugal)" +msgstr "" + +#: pretix/settings.py:448 +msgid "Portuguese (Brazil)" +msgstr "" + +#: pretix/settings.py:449 +msgid "Russian" +msgstr "" + +#: pretix/settings.py:450 +msgid "Spanish" +msgstr "" + +#: pretix/settings.py:451 +msgid "Turkish" +msgstr "" + +#: pretix/settings.py:452 +msgid "Ukrainian" +msgstr "" + +#: pretix/settings.py:753 +msgid "User profile only" +msgstr "" + +#: pretix/settings.py:754 +msgid "Read access" +msgstr "" + +#: pretix/settings.py:755 +msgid "Write access" +msgstr "" + +#: pretix/settings.py:766 +msgid "Kosovo" +msgstr "" diff --git a/src/pretix/locale/zh_Hans/LC_MESSAGES/django.po b/src/pretix/locale/zh_Hans/LC_MESSAGES/django.po index b529bfff5..be588c6ca 100644 --- a/src/pretix/locale/zh_Hans/LC_MESSAGES/django.po +++ b/src/pretix/locale/zh_Hans/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-18 15:05+0000\n" +"POT-Creation-Date: 2024-06-22 12:20+0000\n" "PO-Revision-Date: 2021-01-10 18:00+0000\n" "Last-Translator: Li Thomas \n" "Language-Team: Chinese (Simplified) " msgstr "<文件>" -#: pretix/base/models/orders.py:1135 pretix/base/models/orders.py:1143 +#: pretix/base/models/orders.py:1176 pretix/base/models/orders.py:1184 msgid "Empty, if this product is not an admission ticket" msgstr "空,如果这个产品不是门票" -#: pretix/base/models/orders.py:1159 pretix/base/models/orders.py:2255 +#: pretix/base/models/orders.py:1200 pretix/base/models/orders.py:2296 #: pretix/base/settings.py:689 msgid "Company name" msgstr "公司名称" -#: pretix/base/models/orders.py:1163 pretix/base/models/orders.py:2262 -#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:150 +#: pretix/base/models/orders.py:1204 pretix/base/models/orders.py:2303 +#: pretix/base/settings.py:42 pretix/plugins/stripe/payment.py:168 msgid "Select country" msgstr "选择国家" -#: pretix/base/models/orders.py:1324 +#: pretix/base/models/orders.py:1365 msgctxt "payment_state" msgid "created" msgstr "创建" -#: pretix/base/models/orders.py:1325 +#: pretix/base/models/orders.py:1366 msgctxt "payment_state" msgid "pending" msgstr "待处理的" -#: pretix/base/models/orders.py:1326 +#: pretix/base/models/orders.py:1367 msgctxt "payment_state" msgid "confirmed" msgstr "确认" -#: pretix/base/models/orders.py:1327 +#: pretix/base/models/orders.py:1368 msgctxt "payment_state" msgid "canceled" msgstr "取消" -#: pretix/base/models/orders.py:1328 +#: pretix/base/models/orders.py:1369 msgctxt "payment_state" msgid "failed" msgstr "失败" -#: pretix/base/models/orders.py:1329 +#: pretix/base/models/orders.py:1370 msgctxt "payment_state" msgid "refunded" msgstr "退还" -#: pretix/base/models/orders.py:1357 pretix/base/models/orders.py:1739 +#: pretix/base/models/orders.py:1398 pretix/base/models/orders.py:1780 #: pretix/base/shredder.py:400 msgid "Payment information" msgstr "支付信息" -#: pretix/base/models/orders.py:1552 +#: pretix/base/models/orders.py:1593 #, python-format msgid "Event registration confirmed: %(code)s" msgstr "活动注册已确认:%(code)s" -#: pretix/base/models/orders.py:1570 +#: pretix/base/models/orders.py:1611 #, python-format msgid "Payment received for your order: %(code)s" msgstr "已收到您的订单付款:%(code)s" -#: pretix/base/models/orders.py:1680 +#: pretix/base/models/orders.py:1721 msgctxt "refund_state" msgid "started externally" msgstr "从外部开始" -#: pretix/base/models/orders.py:1681 +#: pretix/base/models/orders.py:1722 msgctxt "refund_state" msgid "created" msgstr "创建" -#: pretix/base/models/orders.py:1682 +#: pretix/base/models/orders.py:1723 msgctxt "refund_state" msgid "in transit" msgstr "在运输过程中" -#: pretix/base/models/orders.py:1683 +#: pretix/base/models/orders.py:1724 msgctxt "refund_state" msgid "done" msgstr "完成" -#: pretix/base/models/orders.py:1684 +#: pretix/base/models/orders.py:1725 msgctxt "refund_state" msgid "failed" msgstr "失败" -#: pretix/base/models/orders.py:1686 +#: pretix/base/models/orders.py:1727 msgctxt "refund_state" msgid "canceled" msgstr "取消" -#: pretix/base/models/orders.py:1694 +#: pretix/base/models/orders.py:1735 msgctxt "refund_source" msgid "Organizer" msgstr "组织者" -#: pretix/base/models/orders.py:1695 +#: pretix/base/models/orders.py:1736 msgctxt "refund_source" msgid "Customer" msgstr "客户" -#: pretix/base/models/orders.py:1696 +#: pretix/base/models/orders.py:1737 msgctxt "refund_source" msgid "External" msgstr "外部" -#: pretix/base/models/orders.py:1734 +#: pretix/base/models/orders.py:1775 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:192 #, fuzzy #| msgid "Refund only" msgid "Refund reason" msgstr "仅退款" -#: pretix/base/models/orders.py:1735 +#: pretix/base/models/orders.py:1776 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:193 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:195 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." msgstr "" -#: pretix/base/models/orders.py:1845 +#: pretix/base/models/orders.py:1886 msgid "Payment fee" msgstr "支付费用" -#: pretix/base/models/orders.py:1846 +#: pretix/base/models/orders.py:1887 msgid "Shipping fee" msgstr "运输费用" -#: pretix/base/models/orders.py:1847 +#: pretix/base/models/orders.py:1888 msgid "Service fee" msgstr "服务费用" -#: pretix/base/models/orders.py:1848 +#: pretix/base/models/orders.py:1889 #: pretix/control/templates/pretixcontrol/order/index.html:138 msgid "Cancellation fee" msgstr "取消费用" -#: pretix/base/models/orders.py:1849 +#: pretix/base/models/orders.py:1890 msgid "Other fees" msgstr "其他费用" -#: pretix/base/models/orders.py:1850 pretix/base/payment.py:1076 +#: pretix/base/models/orders.py:1891 pretix/base/payment.py:1088 #: pretix/control/templates/pretixcontrol/items/index.html:84 #: pretix/control/templates/pretixcontrol/order/index.html:133 msgid "Gift card" msgstr "礼品卡" -#: pretix/base/models/orders.py:1855 +#: pretix/base/models/orders.py:1896 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:65 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:103 #: pretix/control/views/vouchers.py:73 msgid "Value" msgstr "价值" -#: pretix/base/models/orders.py:1994 +#: pretix/base/models/orders.py:2035 msgid "Order position" msgstr "订单位置" -#: pretix/base/models/orders.py:2175 pretix/base/services/orders.py:877 +#: pretix/base/models/orders.py:2216 pretix/base/services/orders.py:877 #, python-format msgid "Your event registration: %(code)s" msgstr "您的活动注册:%(code)s" -#: pretix/base/models/orders.py:2204 +#: pretix/base/models/orders.py:2245 msgid "Cart ID (e.g. session key)" msgstr "购物车 ID(例如,会话密钥)" -#: pretix/base/models/orders.py:2226 +#: pretix/base/models/orders.py:2267 msgid "Cart position" msgstr "购物车位置" -#: pretix/base/models/orders.py:2227 +#: pretix/base/models/orders.py:2268 msgid "Cart positions" msgstr "购物车位置" -#: pretix/base/models/orders.py:2266 +#: pretix/base/models/orders.py:2307 msgid "Only for business customers within the EU." msgstr "仅适用于欧盟境内的商业客户。" -#: pretix/base/models/orders.py:2271 +#: pretix/base/models/orders.py:2312 msgid "This reference will be printed on your invoice for your convenience." msgstr "为方便起见,此参考文件将打印在您的发票上。" @@ -3699,7 +3699,7 @@ msgstr "" "税。只有在咨询税务顾问后才启用此选项。 没有保证正确的税收计算。 自行承担使用" "风险。" -#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:174 +#: pretix/base/models/tax.py:130 pretix/plugins/stripe/payment.py:192 msgid "Merchant country" msgstr "商人国家" @@ -4333,20 +4333,34 @@ msgstr "您需要选择一个特定的座位。" msgid "Ambiguous option selected." msgstr "选择的选项无效。" -#: pretix/base/payment.py:231 +#: pretix/base/payment.py:53 +#, fuzzy +#| msgid "Apply" +msgctxt "payment" +msgid "Apple Pay" +msgstr "应用" + +#: pretix/base/payment.py:54 +#, fuzzy +#| msgid "Android (Google Play)" +msgctxt "payment" +msgid "Google Pay" +msgstr "安卓(Google Play)" + +#: pretix/base/payment.py:243 msgid "Enable payment method" msgstr "启用付款方式" -#: pretix/base/payment.py:237 +#: pretix/base/payment.py:249 msgid "" "Users will not be able to choose this payment provider after the given date." msgstr "在给定日期之后,用户将无法选择此付款提供商。" -#: pretix/base/payment.py:242 +#: pretix/base/payment.py:254 msgid "Text on invoices" msgstr "发票上的文本" -#: pretix/base/payment.py:243 +#: pretix/base/payment.py:255 msgid "" "Will be printed just below the payment figures and above the closing text on " "invoices. This will only be used if the invoice is generated before the " @@ -4356,11 +4370,11 @@ msgstr "" "将打印在付款数字下方和发票上的结账文本上方。只有在支付订单之前生成发票才会使" "用此项。如果稍后生成发票,它将显示一条文本,说明已经付款。" -#: pretix/base/payment.py:252 +#: pretix/base/payment.py:264 msgid "Minimum order total" msgstr "最低订单总额" -#: pretix/base/payment.py:253 +#: pretix/base/payment.py:265 msgid "" "This payment will be available only if the order total is equal to or " "exceeds the given value. The order total for this purpose may be computed " @@ -4369,11 +4383,11 @@ msgstr "" "仅当订单总额等于或超过给定值时,此付款才可用。在计算订单总额时,可以不考虑这" "种付款方式所产生的费用。" -#: pretix/base/payment.py:263 +#: pretix/base/payment.py:275 msgid "Maximum order total" msgstr "最大订单总额" -#: pretix/base/payment.py:264 +#: pretix/base/payment.py:276 msgid "" "This payment will be available only if the order total is equal to or below " "the given value. The order total for this purpose may be computed without " @@ -4382,23 +4396,23 @@ msgstr "" "仅当订单总额等于或低于给定值时,此付款才可用。在计算订单总额时,可以不考虑这" "种付款方式所产生的费用。" -#: pretix/base/payment.py:274 pretix/base/payment.py:283 +#: pretix/base/payment.py:286 pretix/base/payment.py:295 msgid "Additional fee" msgstr "额外费用" -#: pretix/base/payment.py:275 +#: pretix/base/payment.py:287 msgid "Absolute value" msgstr "绝对值" -#: pretix/base/payment.py:284 +#: pretix/base/payment.py:296 msgid "Percentage of the order total." msgstr "订单总数的百分比。" -#: pretix/base/payment.py:290 +#: pretix/base/payment.py:302 msgid "Calculate the fee from the total value including the fee." msgstr "从包括费用在内的总额中计算费用。" -#: pretix/base/payment.py:291 +#: pretix/base/payment.py:303 #, python-brace-format msgid "" "We recommend to enable this if you want your users to pay the payment fees " @@ -4410,11 +4424,11 @@ msgstr "" "href=\"{docs_url}\" target=\"_blank\" rel=\"noopener\">单击此处获取有关此功能" "的详细信息。不要忘记在上面设置正确的费用!" -#: pretix/base/payment.py:299 +#: pretix/base/payment.py:311 msgid "Restrict to countries" msgstr "限制国家" -#: pretix/base/payment.py:301 +#: pretix/base/payment.py:313 msgid "" "Only allow choosing this payment provider for invoice addresses in the " "selected countries. If you don't select any country, all countries are " @@ -4423,90 +4437,90 @@ msgstr "" "仅允许为选定国家的发票地址选择此支付提供商。如果您未选择任何国家/地区,则允许" "所有国家/地区。 仅在需要发票地址时才启用此选项。" -#: pretix/base/payment.py:320 +#: pretix/base/payment.py:332 #, fuzzy #| msgid "The settings of a payment provider have been changed." msgid "" "Only allow the usage of this payment provider in the selected sales channels." msgstr "支付服务提供商的设置已更改。" -#: pretix/base/payment.py:324 +#: pretix/base/payment.py:336 #, fuzzy #| msgid "Enable payment method" msgid "Hide payment method" msgstr "启用付款方式" -#: pretix/base/payment.py:327 +#: pretix/base/payment.py:339 msgid "" "The payment method will not be shown by default but only to people who enter " "the shop through a special link." msgstr "只有通过商店特定链接才显示该支付方式。" -#: pretix/base/payment.py:333 +#: pretix/base/payment.py:345 #, fuzzy #| msgid "Enable payment method" msgid "Link to enable payment method" msgstr "启用付款方式" -#: pretix/base/payment.py:342 +#: pretix/base/payment.py:354 msgid "Share this link with customers who should use this payment method." msgstr "对能使用该支付方式的顾客显示进入链接。" -#: pretix/base/payment.py:375 +#: pretix/base/payment.py:387 msgctxt "invoice" msgid "The payment for this invoice has already been received." msgstr "已收到此发票的付款。" -#: pretix/base/payment.py:786 +#: pretix/base/payment.py:798 msgid "Automatic refunds are not supported by this payment provider." msgstr "此支付提供商不支持自动退款。" -#: pretix/base/payment.py:857 +#: pretix/base/payment.py:869 msgid "" "No payment is required as this order only includes products which are free " "of charge." msgstr "无需付款,因为此订单仅包含免费产品。" -#: pretix/base/payment.py:864 +#: pretix/base/payment.py:876 msgid "Free of charge" msgstr "免费" -#: pretix/base/payment.py:892 +#: pretix/base/payment.py:904 msgid "Box office" msgstr "售票处" -#: pretix/base/payment.py:935 pretix/base/payment.py:953 +#: pretix/base/payment.py:947 pretix/base/payment.py:965 #: pretix/plugins/manualpayment/apps.py:9 #: pretix/plugins/manualpayment/apps.py:12 msgid "Manual payment" msgstr "手动付款" -#: pretix/base/payment.py:939 pretix/plugins/banktransfer/payment.py:151 +#: pretix/base/payment.py:951 pretix/plugins/banktransfer/payment.py:151 msgid "" "In test mode, you can just manually mark this order as paid in the backend " "after it has been created." msgstr "在测试模式下,订单创建后您可以在后端手动将其标记为已付款。" -#: pretix/base/payment.py:960 pretix/plugins/banktransfer/payment.py:110 +#: pretix/base/payment.py:972 pretix/plugins/banktransfer/payment.py:110 msgid "Payment method name" msgstr "付款方式名称" -#: pretix/base/payment.py:964 +#: pretix/base/payment.py:976 msgid "Payment process description during checkout" msgstr "结账时的付款流程说明" -#: pretix/base/payment.py:965 +#: pretix/base/payment.py:977 msgid "" "This text will be shown during checkout when the user selects this payment " "method. It should give a short explanation on this payment method." msgstr "" "当用户选择此付款方式时,将在结帐时显示此文本。它应该简要说明这种付款方式。" -#: pretix/base/payment.py:970 +#: pretix/base/payment.py:982 msgid "Payment process description in order confirmation emails" msgstr "订单确认电子邮件中的付款流程说明" -#: pretix/base/payment.py:971 +#: pretix/base/payment.py:983 #, fuzzy, python-brace-format #| msgid "" #| "This text will be included for the {payment_info} placeholder in order " @@ -4522,11 +4536,11 @@ msgstr "" "此文本将包含在订单确认邮件中的{payment_info}占位符中。它应该指示用户如何进行" "付款。您可以使用占位符{order} ,{total} ,{currency} 和{total_with_currency}" -#: pretix/base/payment.py:978 +#: pretix/base/payment.py:990 msgid "Payment process description for pending orders" msgstr "待处理订单的付款流程说明" -#: pretix/base/payment.py:979 +#: pretix/base/payment.py:991 #, fuzzy, python-brace-format #| msgid "" #| "This text will be shown on the order confirmation page for pending " @@ -4541,89 +4555,89 @@ msgstr "" "此文本将显示在待处理订单的确认页面上。它应该指示用户如何进行付款。您可以使用" "占位符{order},{total},{currency}和{total_with_currency}" -#: pretix/base/payment.py:1028 +#: pretix/base/payment.py:1040 msgid "Offsetting" msgstr "弥补" -#: pretix/base/payment.py:1042 pretix/control/views/orders.py:860 +#: pretix/base/payment.py:1054 pretix/control/views/orders.py:860 msgid "You entered an order that could not be found." msgstr "您输入了无法找到的订单。" -#: pretix/base/payment.py:1071 +#: pretix/base/payment.py:1083 #, python-format msgid "Balanced against orders: %s" msgstr "平衡订单:%s" -#: pretix/base/payment.py:1092 +#: pretix/base/payment.py:1104 msgid "In test mode, only test cards will work." msgstr "在测试模式下,只有测试卡可以使用。" -#: pretix/base/payment.py:1157 pretix/base/payment.py:1220 -#: pretix/base/payment.py:1264 pretix/base/services/orders.py:773 +#: pretix/base/payment.py:1169 pretix/base/payment.py:1232 +#: pretix/base/payment.py:1276 pretix/base/services/orders.py:773 msgid "You cannot pay with gift cards when buying a gift card." msgstr "购买礼品卡时,不能使用礼品卡付款。" -#: pretix/base/payment.py:1166 pretix/base/payment.py:1228 -#: pretix/base/payment.py:1272 pretix/base/services/orders.py:764 +#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1284 pretix/base/services/orders.py:764 msgid "This gift card does not support this currency." msgstr "该礼品卡不支持该货币。" -#: pretix/base/payment.py:1169 pretix/base/payment.py:1231 +#: pretix/base/payment.py:1181 pretix/base/payment.py:1243 #: pretix/base/services/orders.py:766 msgid "This gift card can only be used in test mode." msgstr "该礼品卡只能在测试模式下使用。" -#: pretix/base/payment.py:1172 pretix/base/payment.py:1234 +#: pretix/base/payment.py:1184 pretix/base/payment.py:1246 #: pretix/base/services/orders.py:768 msgid "Only test gift cards can be used in test mode." msgstr "在测试模式下只能使用测试礼品卡。" -#: pretix/base/payment.py:1175 pretix/base/payment.py:1237 -#: pretix/base/payment.py:1278 +#: pretix/base/payment.py:1187 pretix/base/payment.py:1249 +#: pretix/base/payment.py:1290 #, fuzzy #| msgid "This gift card is not known." msgid "This gift card is no longer valid." msgstr "该礼品卡未知。" -#: pretix/base/payment.py:1178 pretix/base/payment.py:1240 +#: pretix/base/payment.py:1190 pretix/base/payment.py:1252 msgid "All credit on this gift card has been used." msgstr "此礼品卡上的所有额度都已使用。" -#: pretix/base/payment.py:1183 +#: pretix/base/payment.py:1195 msgid "This gift card is already used for your payment." msgstr "此礼品卡已用于付款。" -#: pretix/base/payment.py:1198 +#: pretix/base/payment.py:1210 msgid "" "Your gift card has been applied, but {} still need to be paid. Please select " "a payment method." msgstr "您的礼品卡已应用,但仍需付款{}。请选择一种付款方式。" -#: pretix/base/payment.py:1202 +#: pretix/base/payment.py:1214 msgid "Your gift card has been applied." msgstr "您的礼品卡已被应用。" -#: pretix/base/payment.py:1210 pretix/base/payment.py:1252 +#: pretix/base/payment.py:1222 pretix/base/payment.py:1264 msgid "" "You entered a voucher instead of a gift card. Vouchers can only be entered " "on the first page of the shop below the product selection." msgstr "您输入了优惠券而不是礼品卡。优惠券只能在产品选择下方的商店首页上输入。" -#: pretix/base/payment.py:1213 pretix/base/payment.py:1255 +#: pretix/base/payment.py:1225 pretix/base/payment.py:1267 msgid "This gift card is not known." msgstr "该礼品卡未知。" -#: pretix/base/payment.py:1215 pretix/base/payment.py:1257 +#: pretix/base/payment.py:1227 pretix/base/payment.py:1269 msgid "" "This gift card can not be redeemed since its code is not unique. Please " "contact the organizer of this event." msgstr "由于该礼品卡的代码不唯一,因此无法兑换。请联系此活动的组织者。" -#: pretix/base/payment.py:1274 pretix/base/services/orders.py:770 +#: pretix/base/payment.py:1286 pretix/base/services/orders.py:770 msgid "This gift card is not accepted by this event organizer." msgstr "该活动组织者不接受此礼品卡。" -#: pretix/base/payment.py:1276 +#: pretix/base/payment.py:1288 #, fuzzy #| msgid "This gift card was used in the meantime. Please try again" msgid "This gift card was used in the meantime. Please try again." @@ -11465,7 +11479,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/reauth.html:32 #: 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:36 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:45 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:342 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:157 @@ -11570,7 +11584,7 @@ msgstr "设置新密码" #: pretix/control/templates/pretixcontrol/vouchers/detail.html:98 #: pretix/plugins/badges/templates/pretixplugins/badges/edit.html:35 #: pretix/plugins/returnurl/templates/returnurl/settings.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:20 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:35 msgid "Save" msgstr "保存" @@ -11757,10 +11771,9 @@ msgstr "卡片输入方式" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:45 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:65 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:10 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:28 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:43 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:14 msgid "Card number" msgstr "卡号" @@ -11934,7 +11947,7 @@ msgstr "这也将删除%(num)s签入的信息。" #: pretix/control/templates/pretixcontrol/vouchers/delete_bulk.html:33 #: pretix/control/templates/pretixcontrol/waitinglist/delete.html:12 #: pretix/plugins/badges/templates/pretixplugins/badges/delete.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:38 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:12 #: pretix/presale/templates/pretixpresale/event/order_change.html:69 #: pretix/presale/templates/pretixpresale/event/order_modify.html:79 @@ -12893,7 +12906,7 @@ msgstr "已安装的插件" #: pretix/control/views/organizer.py:1409 pretix/control/views/subevents.py:433 #: pretix/control/views/subevents.py:1450 pretix/control/views/user.py:182 #: pretix/control/views/users.py:66 pretix/control/views/vouchers.py:215 -#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:598 +#: pretix/plugins/badges/views.py:110 pretix/plugins/stripe/views.py:669 #: pretix/plugins/ticketoutputpdf/views.py:146 msgid "Your changes have been saved." msgstr "您的更改已保存。" @@ -17687,7 +17700,7 @@ msgstr "已创建新的签入列表。" #: pretix/control/views/organizer.py:193 pretix/control/views/subevents.py:412 #: pretix/control/views/subevents.py:909 pretix/control/views/subevents.py:1356 #: pretix/control/views/user.py:292 pretix/plugins/badges/views.py:70 -#: pretix/plugins/stripe/views.py:601 +#: pretix/plugins/stripe/views.py:672 #: pretix/plugins/ticketoutputpdf/views.py:106 msgid "We could not save your changes. See below for details." msgstr "我们无法保存您的更改。详见下文。" @@ -18965,7 +18978,7 @@ msgstr "徽章" #: pretix/plugins/manualpayment/apps.py:13 pretix/plugins/paypal/apps.py:14 #: pretix/plugins/pretixdroid/apps.py:13 pretix/plugins/reports/apps.py:14 #: pretix/plugins/returnurl/apps.py:13 pretix/plugins/sendmail/apps.py:13 -#: pretix/plugins/statistics/apps.py:13 pretix/plugins/stripe/apps.py:14 +#: pretix/plugins/statistics/apps.py:13 #: pretix/plugins/ticketoutputpdf/apps.py:14 #: pretix/plugins/webcheckin/apps.py:13 msgid "the pretix team" @@ -19295,19 +19308,20 @@ msgstr "请输入您的银行帐户详细信息。" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:11 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:21 #: pretix/plugins/banktransfer/views.py:759 -#: pretix/plugins/stripe/payment.py:902 pretix/plugins/stripe/payment.py:1069 -#: pretix/plugins/stripe/payment.py:1221 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:22 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:25 +#: pretix/plugins/stripe/payment.py:1347 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:32 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:35 msgid "Account holder" msgstr "账户持有人" #: pretix/plugins/banktransfer/payment.py:214 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:21 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:27 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:23 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:31 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:39 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:55 msgid "Bank" msgstr "银行" @@ -19945,7 +19959,7 @@ msgid "This plugin adds a customizable payment method for manual processing." msgstr "此插件添加了可自定义的手动处理付款方式。" #: pretix/plugins/paypal/apps.py:10 pretix/plugins/paypal/apps.py:13 -#: pretix/plugins/paypal/payment.py:40 +#: pretix/plugins/paypal/payment.py:40 pretix/plugins/stripe/payment.py:1691 msgid "PayPal" msgstr "PayPal" @@ -19965,16 +19979,16 @@ msgstr "" msgid "PayPal account" msgstr "PayPal帐户" -#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:156 +#: pretix/plugins/paypal/payment.py:81 pretix/plugins/stripe/payment.py:174 #, python-brace-format msgid "{text}" msgstr "{text}" -#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:157 +#: pretix/plugins/paypal/payment.py:82 pretix/plugins/stripe/payment.py:175 msgid "Click here for a tutorial on how to obtain the required keys" msgstr "单击此处获取有关如何获取所需密钥的教程" -#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:136 +#: pretix/plugins/paypal/payment.py:94 pretix/plugins/stripe/payment.py:154 msgid "Endpoint" msgstr "端点" @@ -20052,8 +20066,8 @@ msgid "" "payment completed." msgstr "PayPal尚未批准付款。 我们会在付款完成后立即通知您。" -#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:449 -#: pretix/plugins/stripe/payment.py:801 +#: pretix/plugins/paypal/payment.py:432 pretix/plugins/stripe/payment.py:796 +#: pretix/plugins/stripe/payment.py:958 msgid "There was an error sending the confirmation mail." msgstr "发送确认邮件时出错。" @@ -20172,7 +20186,7 @@ msgid "Last update" msgstr "最后更新" #: pretix/plugins/paypal/templates/pretixplugins/paypal/control.html:13 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:53 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:71 msgid "Total value" msgstr "总价值" @@ -20189,17 +20203,17 @@ msgid "" msgstr "我们正在等待PayPal对您付款的回复。 如果这需要几个小时,请与我们联系。" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:17 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:18 msgid "The payment process has started in a new window." msgstr "付款流程已在新窗口中启动。" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:20 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:19 msgid "The window to enter your payment data was not opened or was closed?" msgstr "输入付款数据的窗口未打开或已关闭?" #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:24 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/redirect.html:22 msgid "Click here in order to open the window." msgstr "单击此处打开窗口。" @@ -20661,12 +20675,14 @@ msgid "" msgstr "我们会在第一批订单提交后立即向您展示有关销售的各种统计数据!" #: pretix/plugins/stripe/apps.py:10 pretix/plugins/stripe/apps.py:13 -#: pretix/plugins/stripe/payment.py:46 +#: pretix/plugins/stripe/payment.py:59 msgid "Stripe" msgstr "条纹" -#: pretix/plugins/stripe/apps.py:17 -msgid "This plugin allows you to receive credit card payments via Stripe" +#: pretix/plugins/stripe/apps.py:19 +#, fuzzy +#| msgid "This plugin allows you to receive credit card payments via Stripe" +msgid "This plugin allows you to receive credit card payments via Stripe." msgstr "此插件允许您通过Stripe接收信用卡付款" #: pretix/plugins/stripe/forms.py:19 @@ -20676,42 +20692,47 @@ msgid "" "\"%(prefix)s\"." msgstr "提供的密钥\"%(value)s\"看起来无效。它应该以\"%(prefix)s\"开头。" -#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:132 +#: pretix/plugins/stripe/forms.py:30 pretix/plugins/stripe/signals.py:137 #, fuzzy #| msgid "Stripe Connect: Secret key (test)" msgid "Stripe Connect: App fee (percent)" msgstr "Stripe连接:密钥(测试)" -#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:136 +#: pretix/plugins/stripe/forms.py:34 pretix/plugins/stripe/signals.py:141 #, fuzzy #| msgid "Stripe Connect: Secret key" msgid "Stripe Connect: App fee (max)" msgstr "Stripe连接:密钥" -#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:140 +#: pretix/plugins/stripe/forms.py:38 pretix/plugins/stripe/signals.py:145 #, fuzzy #| msgid "Stripe Connect: Secret key" msgid "Stripe Connect: App fee (min)" msgstr "Stripe连接:密钥" -#: pretix/plugins/stripe/payment.py:75 +#: pretix/plugins/stripe/payment.py:88 +#, fuzzy +#| msgid "" +#| "To accept payments via Stripe, you will need an account at Stripe. By " +#| "clicking on the following button, you can either create a new Stripe " +#| "account connect pretix to an existing one." msgid "" "To accept payments via Stripe, you will need an account at Stripe. By " "clicking on the following button, you can either create a new Stripe account " -"connect pretix to an existing one." +"connect eventyay to an existing one." msgstr "" "要通过Stripe接受付款,您需要在Stripe拥有一个帐户。通过单击以下按钮,您可以创" "建新的Stripe帐户连接pretix到现有帐户。" -#: pretix/plugins/stripe/payment.py:79 +#: pretix/plugins/stripe/payment.py:92 msgid "Connect with Stripe" msgstr "与Stripe连接" -#: pretix/plugins/stripe/payment.py:89 +#: pretix/plugins/stripe/payment.py:102 msgid "Disconnect from Stripe" msgstr "断开与Stripe链接" -#: pretix/plugins/stripe/payment.py:93 +#: pretix/plugins/stripe/payment.py:106 msgid "" "Please configure a Stripe Webhook to the following endpoint in order to " @@ -20722,22 +20743,22 @@ msgstr "" "Webhook配置到以下端点,以便在外部退款时自动取消订单,并处理类似sofort的异" "步付款方法。" -#: pretix/plugins/stripe/payment.py:105 +#: pretix/plugins/stripe/payment.py:118 msgid "Enable MOTO payments for resellers" msgstr "" -#: pretix/plugins/stripe/payment.py:107 +#: pretix/plugins/stripe/payment.py:120 #, fuzzy #| msgid "Needs to be enabled in your Stripe account first." msgid "" "Gated feature (needs to be enabled for your account by Stripe support first)" msgstr "需要先在您的Stripe帐户中启用。" -#: pretix/plugins/stripe/payment.py:115 +#: pretix/plugins/stripe/payment.py:128 msgid "Stripe Integration security guide" msgstr "" -#: pretix/plugins/stripe/payment.py:109 +#: pretix/plugins/stripe/payment.py:122 #, python-format msgid "" "We can flag the credit card transaction you make through the reseller " @@ -20748,74 +20769,131 @@ msgid "" "this subject." msgstr "" -#: pretix/plugins/stripe/payment.py:131 +#: pretix/plugins/stripe/payment.py:144 pretix/plugins/stripe/payment.py:149 msgid "Stripe account" msgstr "Stripe账户" -#: pretix/plugins/stripe/payment.py:139 +#: pretix/plugins/stripe/payment.py:157 msgctxt "stripe" msgid "Live" msgstr "现场直播" -#: pretix/plugins/stripe/payment.py:140 +#: pretix/plugins/stripe/payment.py:158 msgctxt "stripe" msgid "Testing" msgstr "测试" -#: pretix/plugins/stripe/payment.py:142 +#: pretix/plugins/stripe/payment.py:160 msgid "" "If your event is in test mode, we will always use Stripe's test API, " "regardless of this setting." msgstr "" "如果您的活动处于测试模式,无论此设置如何,我们都将始终使用Stripe的测试API。" -#: pretix/plugins/stripe/payment.py:155 +#: pretix/plugins/stripe/payment.py:173 msgid "Publishable key" msgstr "可发布的密钥" -#: pretix/plugins/stripe/payment.py:166 +#: pretix/plugins/stripe/payment.py:184 msgid "Secret key" msgstr "密钥" -#: pretix/plugins/stripe/payment.py:175 +#: pretix/plugins/stripe/payment.py:193 msgid "" "The country in which your Stripe-account is registered in. Usually, this is " "your country of residence." msgstr "您的Stripe帐户注册所在的国家/地区。通常,这是您的居住国家/地区。" -#: pretix/plugins/stripe/payment.py:183 +#: pretix/plugins/stripe/payment.py:203 +msgid "Check for Apple Pay/Google Pay" +msgstr "" + +#: pretix/plugins/stripe/payment.py:203 +msgid "experimental" +msgstr "" + +#: pretix/plugins/stripe/payment.py:207 +msgid "" +"Eventyay will check if the customer's browser supports wallet-based payment " +"methods like Apple Pay or Google Pay." +msgstr "" + +#: pretix/plugins/stripe/payment.py:214 +msgid "Statement descriptor postfix" +msgstr "" + +#: pretix/plugins/stripe/payment.py:216 +msgid "" +"The statement descriptor is the text that appears on the customer's credit " +"card bill or bank account transaction." +msgstr "" + +#: pretix/plugins/stripe/payment.py:226 msgid "Credit card payments" msgstr "信用卡付款" -#: pretix/plugins/stripe/payment.py:188 pretix/plugins/stripe/payment.py:886 +#: pretix/plugins/stripe/payment.py:231 pretix/plugins/stripe/payment.py:1369 msgid "giropay" msgstr "Giropay" -#: pretix/plugins/stripe/payment.py:190 pretix/plugins/stripe/payment.py:197 -#: pretix/plugins/stripe/payment.py:204 pretix/plugins/stripe/payment.py:211 -#: pretix/plugins/stripe/payment.py:219 pretix/plugins/stripe/payment.py:232 -#: pretix/plugins/stripe/payment.py:239 pretix/plugins/stripe/payment.py:246 -#: pretix/plugins/stripe/payment.py:253 +#: pretix/plugins/stripe/payment.py:233 pretix/plugins/stripe/payment.py:248 +#: pretix/plugins/stripe/payment.py:255 pretix/plugins/stripe/payment.py:290 +#: pretix/plugins/stripe/payment.py:303 pretix/plugins/stripe/payment.py:310 +#: pretix/plugins/stripe/payment.py:317 pretix/plugins/stripe/payment.py:324 msgid "Needs to be enabled in your Stripe account first." msgstr "需要先在您的Stripe帐户中启用。" -#: pretix/plugins/stripe/payment.py:195 pretix/plugins/stripe/payment.py:958 +#: pretix/plugins/stripe/payment.py:238 pretix/plugins/stripe/payment.py:1404 msgid "iDEAL" msgstr "iDEAL" -#: pretix/plugins/stripe/payment.py:202 pretix/plugins/stripe/payment.py:1010 +#: pretix/plugins/stripe/payment.py:240 +msgid "" +"Some payment methods might need to be enabled in the settings of your Stripe " +"account before they work properly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:246 pretix/plugins/stripe/payment.py:1429 msgid "Alipay" msgstr "支付宝" -#: pretix/plugins/stripe/payment.py:209 pretix/plugins/stripe/payment.py:1053 +#: pretix/plugins/stripe/payment.py:253 pretix/plugins/stripe/payment.py:1441 msgid "Bancontact" msgstr "Bancontact" -#: pretix/plugins/stripe/payment.py:216 pretix/plugins/stripe/payment.py:1125 +#: pretix/plugins/stripe/payment.py:260 +msgid "SEPA Direct Debit" +msgstr "" + +#: pretix/plugins/stripe/payment.py:264 +msgid "" +"Certain payment methods may require activation in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:265 +msgid "" +"SEPA Direct Debit can take up to 14 business days to " +"receive notification on the success or failure of a payment after you " +"initiate a debit from the customer’s account, though the average is 7 to 8 " +"business days." +msgstr "" + +#: pretix/plugins/stripe/payment.py:273 +msgid "SEPA Creditor Mandate Name" +msgstr "" + +#: pretix/plugins/stripe/payment.py:275 +msgid "" +"Provide the name for the SEPA Creditor Mandate, which will be shown to the " +"user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:287 msgid "SOFORT" msgstr "Sofort" -#: pretix/plugins/stripe/payment.py:221 +#: pretix/plugins/stripe/payment.py:292 msgid "" "Despite the name, Sofort payments via Stripe are not " "processed instantly but might take up to 14 days to be " @@ -20826,23 +20904,64 @@ msgstr "" "下可能需要14天才能确认。如果您的付款条件允许此延迟,请仅激活" "此付款方式。" -#: pretix/plugins/stripe/payment.py:230 pretix/plugins/stripe/payment.py:1205 +#: pretix/plugins/stripe/payment.py:301 pretix/plugins/stripe/payment.py:1544 msgid "EPS" msgstr "" -#: pretix/plugins/stripe/payment.py:237 pretix/plugins/stripe/payment.py:1277 +#: pretix/plugins/stripe/payment.py:308 pretix/plugins/stripe/payment.py:1576 msgid "Multibanco" msgstr "" -#: pretix/plugins/stripe/payment.py:244 pretix/plugins/stripe/payment.py:1324 +#: pretix/plugins/stripe/payment.py:315 pretix/plugins/stripe/payment.py:1625 msgid "Przelewy24" msgstr "" -#: pretix/plugins/stripe/payment.py:251 pretix/plugins/stripe/payment.py:1380 +#: pretix/plugins/stripe/payment.py:322 pretix/plugins/stripe/payment.py:1663 msgid "WeChat Pay" msgstr "" -#: pretix/plugins/stripe/payment.py:278 +#: pretix/plugins/stripe/payment.py:329 pretix/plugins/stripe/payment.py:1698 +msgid "Swish" +msgstr "" + +#: pretix/plugins/stripe/payment.py:332 pretix/plugins/stripe/payment.py:341 +#: pretix/plugins/stripe/payment.py:354 +msgid "" +"Certain payment methods may need to be enabled in your Stripe account " +"settings before they function correctly." +msgstr "" + +#: pretix/plugins/stripe/payment.py:337 pretix/plugins/stripe/payment.py:1225 +msgid "Affirm" +msgstr "" + +#: pretix/plugins/stripe/payment.py:342 +msgid "Only available for payments between $50 and $30,000." +msgstr "" + +#: pretix/plugins/stripe/payment.py:348 pretix/plugins/stripe/payment.py:1264 +msgid "Klarna" +msgstr "" + +#: pretix/plugins/stripe/payment.py:356 +msgid "" +"Klarna and Stripe will determine which Klarna payment methods are available " +"to the user." +msgstr "" + +#: pretix/plugins/stripe/payment.py:357 +msgid "" +"Klarna's terms of service prohibit its use by charities or political " +"organizations." +msgstr "" + +#: pretix/plugins/stripe/payment.py:366 +#, fuzzy +#| msgid "Description" +msgid "Destination" +msgstr "描述" + +#: pretix/plugins/stripe/payment.py:394 pretix/plugins/stripe/payment.py:1322 #, python-brace-format msgid "" "The Stripe plugin is operating in test mode. You can use one of 许多测试卡之一来执行交" "易。实际上不会转移任何资金。" -#: pretix/plugins/stripe/payment.py:407 pretix/plugins/stripe/payment.py:757 -#: pretix/plugins/stripe/payment.py:852 +#: pretix/plugins/stripe/payment.py:575 +msgid "No payment information found." +msgstr "未找到任何付款信息。" + +#: pretix/plugins/stripe/payment.py:591 +msgid "Stripe returned an error" +msgstr "Stripe返回错误" + +#: pretix/plugins/stripe/payment.py:616 +msgid "" +"We had trouble communicating with Stripe. Please try again and contact " +"support if the problem persists." +msgstr "我们无法与Stripe通信。如果问题仍然存在,请重试并与支持人员联系。" + +#: pretix/plugins/stripe/payment.py:689 +msgid "You may need to enable JavaScript for Stripe payments." +msgstr "您可能需要为Stripe付款启用JavaScript。" + +#: pretix/plugins/stripe/payment.py:761 pretix/plugins/stripe/payment.py:863 +#: pretix/plugins/stripe/payment.py:922 #, python-format msgid "Stripe reported an error with your card: %s" msgstr "Stripe报告您的卡错误:%s" -#: pretix/plugins/stripe/payment.py:434 pretix/plugins/stripe/payment.py:567 -#: pretix/plugins/stripe/payment.py:770 pretix/plugins/stripe/payment.py:864 -#: pretix/plugins/stripe/payment.py:1436 +#: pretix/plugins/stripe/payment.py:769 pretix/plugins/stripe/payment.py:875 +#: pretix/plugins/stripe/payment.py:936 pretix/plugins/stripe/payment.py:1002 msgid "" "We had trouble communicating with Stripe. Please try again and get in touch " "with us if this problem persists." msgstr "我们无法与Stripe通信。 如果此问题仍然存在,请再试一次并与我们联系。" -#: pretix/plugins/stripe/payment.py:452 pretix/plugins/stripe/payment.py:804 +#: pretix/plugins/stripe/payment.py:801 msgid "" "Your payment is pending completion. We will inform you as soon as the " "payment completed." msgstr "您的付款尚未完成。 我们会在付款完成后立即通知您。" -#: pretix/plugins/stripe/payment.py:461 pretix/plugins/stripe/payment.py:818 +#: pretix/plugins/stripe/payment.py:808 +#, fuzzy +#| msgid "The password you entered was invalid, please try again." +msgid "Your payment failed. Please try again." +msgstr "您输入的密码无效,请重试。" + +#: pretix/plugins/stripe/payment.py:814 pretix/plugins/stripe/payment.py:970 #, python-format msgid "Stripe reported an error: %s" msgstr "Stripe报告错误:%s" -#: pretix/plugins/stripe/payment.py:517 -msgid "No payment information found." -msgstr "未找到任何付款信息。" - -#: pretix/plugins/stripe/payment.py:538 +#: pretix/plugins/stripe/payment.py:963 +#, fuzzy +#| msgid "" +#| "Your payment is pending completion. We will inform you as soon as the " +#| "payment completed." msgid "" -"We had trouble communicating with Stripe. Please try again and contact " -"support if the problem persists." -msgstr "我们无法与Stripe通信。如果问题仍然存在,请重试并与支持人员联系。" - -#: pretix/plugins/stripe/payment.py:542 -msgid "Stripe returned an error" -msgstr "Stripe返回错误" +"Your payment is pending completion. We will inform you as soon as the " +"payment is completed." +msgstr "您的付款尚未完成。 我们会在付款完成后立即通知您。" -#: pretix/plugins/stripe/payment.py:638 +#: pretix/plugins/stripe/payment.py:1035 msgid "Credit card via Stripe" msgstr "Stripe信用卡" -#: pretix/plugins/stripe/payment.py:639 +#: pretix/plugins/stripe/payment.py:1036 msgid "Credit card" msgstr "信用卡" -#: pretix/plugins/stripe/payment.py:666 -msgid "You may need to enable JavaScript for Stripe payments." -msgstr "您可能需要为Stripe付款启用JavaScript。" +#: pretix/plugins/stripe/payment.py:1116 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "SEPA Debit via Stripe" +msgstr "通过Stripe的iDEAL" + +#: pretix/plugins/stripe/payment.py:1117 +msgid "SEPA Debit" +msgstr "" -#: pretix/plugins/stripe/payment.py:812 +#: pretix/plugins/stripe/payment.py:1155 #, fuzzy -#| msgid "The password you entered was invalid, please try again." -msgid "Your payment failed. Please try again." -msgstr "您输入的密码无效,请重试。" +#| msgid "Account holder" +msgid "Account Holder Name" +msgstr "账户持有人" + +#: pretix/plugins/stripe/payment.py:1159 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Street" +msgstr "账户持有人" -#: pretix/plugins/stripe/payment.py:885 +#: pretix/plugins/stripe/payment.py:1168 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Postal Code" +msgstr "账户持有人" + +#: pretix/plugins/stripe/payment.py:1177 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder City" +msgstr "账户持有人" + +#: pretix/plugins/stripe/payment.py:1186 +#, fuzzy +#| msgid "Account holder" +msgid "Account Holder Country" +msgstr "账户持有人" + +#: pretix/plugins/stripe/payment.py:1224 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Affirm via Stripe" +msgstr "通过Stripe的支付宝" + +#: pretix/plugins/stripe/payment.py:1263 +#, fuzzy +#| msgid "Alipay via Stripe" +msgid "Klarna via Stripe" +msgstr "通过Stripe的支付宝" + +#: pretix/plugins/stripe/payment.py:1368 msgid "giropay via Stripe" msgstr "通过Stripe的Giropay" -#: pretix/plugins/stripe/payment.py:917 pretix/plugins/stripe/payment.py:1084 -#: pretix/plugins/stripe/payment.py:1236 +#: pretix/plugins/stripe/payment.py:1372 +msgid "" +"giropay is an online payment method available to all customers of most " +"German banks, usually after one-time activation. Please keep your online " +"banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1383 pretix/plugins/stripe/payment.py:1451 +#: pretix/plugins/stripe/payment.py:1554 msgid "unknown name" msgstr "未知名称" -#: pretix/plugins/stripe/payment.py:949 pretix/plugins/stripe/payment.py:1001 -#: pretix/plugins/stripe/payment.py:1116 pretix/plugins/stripe/payment.py:1268 -#: pretix/plugins/stripe/payment.py:1371 +#: pretix/plugins/stripe/payment.py:1395 pretix/plugins/stripe/payment.py:1415 +#: pretix/plugins/stripe/payment.py:1459 pretix/plugins/stripe/payment.py:1562 +#: pretix/plugins/stripe/payment.py:1654 #, fuzzy, python-brace-format #| msgid "Bank account type" msgid "Bank account at {bank}" msgstr "银行账户类型" -#: pretix/plugins/stripe/payment.py:957 +#: pretix/plugins/stripe/payment.py:1403 msgid "iDEAL via Stripe" msgstr "通过Stripe的iDEAL" -#: pretix/plugins/stripe/payment.py:1009 +#: pretix/plugins/stripe/payment.py:1407 +msgid "" +"iDEAL is an online payment method available to customers of Dutch banks. " +"Please keep your online banking account and login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1428 msgid "Alipay via Stripe" msgstr "通过Stripe的支付宝" -#: pretix/plugins/stripe/payment.py:1052 +#: pretix/plugins/stripe/payment.py:1433 +msgid "" +"This payment method is available to customers of the Chinese payment system " +"Alipay. Please keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1440 msgid "Bancontact via Stripe" msgstr "通过Stripe的Bancontact" -#: pretix/plugins/stripe/payment.py:1124 +#: pretix/plugins/stripe/payment.py:1472 msgid "SOFORT via Stripe" msgstr "通过Stripe的Sofort" -#: pretix/plugins/stripe/payment.py:1141 +#: pretix/plugins/stripe/payment.py:1473 +#, fuzzy +#| msgid "Payment by bank transfer" +msgid "SOFORT (instant bank transfer)" +msgstr "银行转账支付" + +#: pretix/plugins/stripe/payment.py:1491 msgid "Country of your bank" msgstr "银行所在的国家" -#: pretix/plugins/stripe/payment.py:1142 +#: pretix/plugins/stripe/payment.py:1492 msgid "Germany" msgstr "德国" -#: pretix/plugins/stripe/payment.py:1143 +#: pretix/plugins/stripe/payment.py:1493 msgid "Austria" msgstr "奥地利" -#: pretix/plugins/stripe/payment.py:1144 +#: pretix/plugins/stripe/payment.py:1494 msgid "Belgium" msgstr "比利时" -#: pretix/plugins/stripe/payment.py:1145 +#: pretix/plugins/stripe/payment.py:1495 msgid "Netherlands" msgstr "荷兰" -#: pretix/plugins/stripe/payment.py:1146 +#: pretix/plugins/stripe/payment.py:1496 msgid "Spain" msgstr "西班牙" -#: pretix/plugins/stripe/payment.py:1193 +#: pretix/plugins/stripe/payment.py:1532 #, fuzzy, python-brace-format #| msgid "Bank account details" msgid "Bank account {iban} at {bank}" msgstr "银行帐户详细信息" -#: pretix/plugins/stripe/payment.py:1204 +#: pretix/plugins/stripe/payment.py:1543 #, fuzzy #| msgid "iDEAL via Stripe" msgid "EPS via Stripe" msgstr "通过Stripe的iDEAL" -#: pretix/plugins/stripe/payment.py:1276 +#: pretix/plugins/stripe/payment.py:1575 #, fuzzy #| msgid "Alipay via Stripe" msgid "Multibanco via Stripe" msgstr "通过Stripe的支付宝" -#: pretix/plugins/stripe/payment.py:1323 +#: pretix/plugins/stripe/payment.py:1624 #, fuzzy #| msgid "Alipay via Stripe" msgid "Przelewy24 via Stripe" msgstr "通过Stripe的支付宝" -#: pretix/plugins/stripe/payment.py:1379 +#: pretix/plugins/stripe/payment.py:1628 +msgid "" +"Przelewy24 is an online payment method available to customers of Polish " +"banks. Please keep your online banking account and login information " +"available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1662 #, fuzzy #| msgid "Payment via Stripe" msgid "WeChat Pay via Stripe" msgstr "通过条纹付款" -#: pretix/plugins/stripe/signals.py:65 +#: pretix/plugins/stripe/payment.py:1667 +msgid "" +"This payment method is available to users of the Chinese app WeChat. Please " +"keep your login information available." +msgstr "" + +#: pretix/plugins/stripe/payment.py:1690 +#, fuzzy +#| msgid "Payment via Stripe" +msgid "PayPal via Stripe" +msgstr "通过条纹付款" + +#: pretix/plugins/stripe/payment.py:1697 +#, fuzzy +#| msgid "iDEAL via Stripe" +msgid "Swish via Stripe" +msgstr "通过Stripe的iDEAL" + +#: pretix/plugins/stripe/payment.py:1702 +msgid "" +"This payment method is available to users of the Swedish apps Swish and " +"BankID. Please have your app ready." +msgstr "" + +#: pretix/plugins/stripe/signals.py:70 msgid "Charge succeeded." msgstr "收费成功。" -#: pretix/plugins/stripe/signals.py:66 +#: pretix/plugins/stripe/signals.py:71 msgid "Charge refunded." msgstr "退款。" -#: pretix/plugins/stripe/signals.py:67 +#: pretix/plugins/stripe/signals.py:72 msgid "Charge updated." msgstr "收费更新。" -#: pretix/plugins/stripe/signals.py:68 +#: pretix/plugins/stripe/signals.py:73 msgid "Charge pending" msgstr "收费待处理" -#: pretix/plugins/stripe/signals.py:69 +#: pretix/plugins/stripe/signals.py:74 msgid "Payment authorized." msgstr "授权付款。" -#: pretix/plugins/stripe/signals.py:70 +#: pretix/plugins/stripe/signals.py:75 msgid "Payment authorization canceled." msgstr "付款授权已取消。" -#: pretix/plugins/stripe/signals.py:71 +#: pretix/plugins/stripe/signals.py:76 msgid "Payment authorization failed." msgstr "付款授权失败。" -#: pretix/plugins/stripe/signals.py:77 +#: pretix/plugins/stripe/signals.py:82 msgid "Charge failed. Reason: {}" msgstr "收费失败。原因:{}" -#: pretix/plugins/stripe/signals.py:79 +#: pretix/plugins/stripe/signals.py:84 msgid "Dispute created. Reason: {}" msgstr "引起争议。原因:{}" -#: pretix/plugins/stripe/signals.py:81 +#: pretix/plugins/stripe/signals.py:86 msgid "Dispute updated. Reason: {}" msgstr "争议更新。原因:{}" -#: pretix/plugins/stripe/signals.py:83 +#: pretix/plugins/stripe/signals.py:88 msgid "Dispute closed. Status: {}" msgstr "争议关闭。原因:{}" -#: pretix/plugins/stripe/signals.py:86 +#: pretix/plugins/stripe/signals.py:91 msgid "Stripe reported an event: {}" msgstr "Stripe报告了一个活动:{}" -#: pretix/plugins/stripe/signals.py:97 +#: pretix/plugins/stripe/signals.py:102 msgid "Stripe Connect: Client ID" msgstr "Stripe连接:客户端ID" -#: pretix/plugins/stripe/signals.py:104 +#: pretix/plugins/stripe/signals.py:109 msgid "Stripe Connect: Secret key" msgstr "Stripe连接:密钥" -#: pretix/plugins/stripe/signals.py:111 +#: pretix/plugins/stripe/signals.py:116 msgid "Stripe Connect: Publishable key" msgstr "Stripe链接:可发布密钥" -#: pretix/plugins/stripe/signals.py:118 +#: pretix/plugins/stripe/signals.py:123 msgid "Stripe Connect: Secret key (test)" msgstr "Stripe连接:密钥(测试)" -#: pretix/plugins/stripe/signals.py:125 +#: pretix/plugins/stripe/signals.py:130 msgid "Stripe Connect: Publishable key (test)" msgstr "Stripe连接:可发布密钥(测试)" -#: pretix/plugins/stripe/signals.py:170 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:6 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html:9 +#: pretix/plugins/stripe/signals.py:156 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:3 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html:9 #, fuzzy #| msgid "Stripe Checkout" msgid "Stripe Connect" msgstr "Stripe结账" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s has already been paid by other means. Please double-" -"check and refund the money via Stripe's interface." -msgstr "" -"Stripe交易%(charge)s已成功,但订单%(order)s已通过其他" -"方式支付。请仔细检查并通过Stripe的界面退款。" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html:5 -#, python-format -msgid "" -"The Stripe transaction %(charge)s has succeeded, but " -"the order %(order)s is expired and the product was sold out in the meantime. " -"Therefore, the payment could not be accepted. Please contact the user and " -"refund the money via Stripe's interface." -msgstr "" -"Stripe交易%(charge)s已成功,但订单%(order)s已过期,同" -"时产品已售完。因此,付款无法接受。 请联系用户并通过Stripe的界面退款。" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html:5 -#, python-format -msgid "" -"Stripe reported that the transaction %(charge)s has " -"been refunded. Do you want to refund mark the matching order (%(order)s) as " -"refunded?" -msgstr "" -"Stripe报告交易%(charge)s已退款。您是否要将匹配的订单" -"(%(order)s)标记为已退款?" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:4 msgid "The total amount will be withdrawn from your credit card." msgstr "总金额将从您的信用卡中收取。" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:8 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:26 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:11 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:41 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:8 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:12 msgid "Card type" msgstr "卡片类型" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:14 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:4 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:2 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:14 +#, fuzzy +#| msgid "The total amount will be withdrawn from your credit card." +msgid "The total amount will be withdrawn from your bank account." +msgstr "总金额将从您的信用卡中收取。" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:23 +msgid "Banking Institution" +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:20 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:25 +#, fuzzy +#| msgid "Account holder" +msgid "Account number" +msgstr "账户持有人" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html:24 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html:10 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html:2 msgid "" "After you submitted your order, we will redirect you to the payment service " "provider to complete your payment. You will then be redirected back here to " @@ -21125,31 +21350,31 @@ msgstr "" "在您提交订单后,我们会将您重定向到付款服务提供商以完成付款。 然后,您将被重定" "向回到此处以获取您的门票。" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:6 msgid "" "This transaction will be marked as Mail Order/Telephone Order, exempting it " "from Strong Customer Authentication (SCA) whenever possible" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:14 msgid "For a credit card payment, please turn on JavaScript." msgstr "如需信用卡付款,请打开JavaScript。" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:22 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:20 msgid "" "You already entered a card number that we will use to charge the payment " "amount." msgstr "您已输入我们将用于收取付款金额的卡号。" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:33 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:29 msgid "Use a different card" msgstr "使用其他卡" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:46 msgid "OR" msgstr "OR" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html:63 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html:59 msgid "" "Your payment will be processed by Stripe, Inc. Your credit card data will be " "transmitted directly to Stripe and never touches our servers." @@ -21157,110 +21382,166 @@ msgstr "" "您的付款将由Stripe,Inc.处理。您的信用卡数据将直接传输到Stripe,而不会接触我" "们的服务器。" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:12 +#, fuzzy +#| msgid "For a credit card payment, please turn on JavaScript." +msgid "For a SEPA Debit payment, please turn on JavaScript." +msgstr "如需信用卡付款,请打开JavaScript。" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:19 +#, fuzzy +#| msgid "" +#| "You already entered a card number that we will use to charge the payment " +#| "amount." +msgid "" +"You already entered a bank account that we will use to charge the payment " +"amount." +msgstr "您已输入我们将用于收取付款金额的卡号。" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:30 +#, fuzzy +#| msgid "Use a different card" +msgid "Use a different account" +msgstr "使用其他卡" + +#: pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html:57 +#, python-format +msgid "" +"By providing your payment information and confirming this payment, you " +"authorize (A) %(sepa_creditor_name)s and Stripe, our payment service " +"provider and/or PPRO, its local service provider, to send instructions to " +"your bank to debit your account and (B) your bank to debit your account in " +"accordance with those instructions. As part of your rights, you are entitled " +"to a refund from your bank under the terms and conditions of your agreement " +"with your bank. A refund must be claimed within 8 weeks starting from the " +"date on which your account was debited. Your rights are explained in a " +"statement that you can obtain from your bank. You agree to receive " +"notifications for future debits up to 2 days before they occur." +msgstr "" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:7 msgid "Charge ID" msgstr "收取ID" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:16 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:23 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:29 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:35 -msgid "Payer name" -msgstr "付款人姓名" - -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:47 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:18 msgid "MOTO" msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:65 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:26 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:34 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:42 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:50 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:58 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:64 +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:67 +msgid "Payer name" +msgstr "付款人姓名" + +#: pretix/plugins/stripe/templates/plugins/stripe/control.html:83 msgid "Error message" msgstr "错误信息" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:4 +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:12 +#, fuzzy +#| msgid "Do you really want to regenerate your emergency codes?" +msgid "Do you really want to disconnect your Stripe account?" +msgstr "您真的想要重新生成紧急代码?" + +#: pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html:16 +#, fuzzy +#| msgid "Connect" +msgid "Disconnect" +msgstr "连接" + +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:4 msgid "" "We're waiting for an answer from the payment provider regarding your " "payment. Please contact us if this takes more than a few days." msgstr "" "我们正在等待付款提供商对您的付款作出答复。如果时间超过几天,请联系我们。" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:9 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:9 msgid "" "You need to confirm your payment. Please click the link below to do so or " "start a new payment." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:15 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:15 #, fuzzy #| msgid "Cancel payment" msgid "Confirm payment" msgstr "取消付款" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:21 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:21 msgid "" "Please scan the barcode below to complete your WeChat payment. Once you have " "completed your payment, you can refresh this page." msgstr "" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:29 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:29 msgid "" "The payment transaction could not be completed for the following reason:" msgstr "无法完成付款交易,原因如下:" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:36 +#: pretix/plugins/stripe/templates/plugins/stripe/pending.html:36 msgid "Unknown reason" msgstr "未知原因" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:5 -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:6 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:5 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:6 #: pretix/presale/templates/pretixpresale/event/order_pay.html:4 #: pretix/presale/templates/pretixpresale/event/order_pay_confirm.html:5 msgid "Pay order" msgstr "支付订单" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:16 +#: pretix/plugins/stripe/templates/plugins/stripe/sca.html:22 #, fuzzy, python-format #| msgid "Change payment method: %(code)s" msgid "Confirm payment: %(code)s" msgstr "更改付款方式:%(code)s" -#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:18 +#: pretix/plugins/stripe/templates/plugins/stripe/sca_return.html:19 msgid "Confirming your payment…" msgstr "" -#: pretix/plugins/stripe/views.py:61 pretix/plugins/stripe/views.py:67 -#: pretix/plugins/stripe/views.py:94 pretix/plugins/stripe/views.py:106 +#: pretix/plugins/stripe/views.py:71 pretix/plugins/stripe/views.py:77 +#: pretix/plugins/stripe/views.py:104 pretix/plugins/stripe/views.py:116 msgid "An error occurred during connecting with Stripe, please try again." msgstr "连接Stripe时出错,请重试。" -#: pretix/plugins/stripe/views.py:114 pretix/plugins/stripe/views.py:116 +#: pretix/plugins/stripe/views.py:124 pretix/plugins/stripe/views.py:126 msgid "Stripe returned an error: {}" msgstr "Stripe返回错误:{}" -#: pretix/plugins/stripe/views.py:119 +#: pretix/plugins/stripe/views.py:129 +#, fuzzy +#| msgid "" +#| "Your Stripe account is now connected to pretix. You can change the " +#| "settings in detail below." msgid "" -"Your Stripe account is now connected to pretix. You can change the settings " -"in detail below." +"Your Stripe account is now connected to eventyay. You can change the " +"settings in detail below." msgstr "您的Stripe帐户现已连接到pretix。 您可以在下面详细更改设置。" -#: pretix/plugins/stripe/views.py:403 +#: pretix/plugins/stripe/views.py:443 msgid "Your Stripe account has been disconnected." msgstr "您的Stripe帐户已断开连接。" -#: pretix/plugins/stripe/views.py:445 pretix/plugins/stripe/views.py:464 -#: pretix/plugins/stripe/views.py:469 +#: pretix/plugins/stripe/views.py:479 pretix/plugins/stripe/views.py:499 +#: pretix/plugins/stripe/views.py:504 msgid "" "Sorry, there was an error in the payment process. Please check the link in " "your emails to continue." msgstr "抱歉,付款过程中出错。请检查电子邮件中的链接以继续。" -#: pretix/plugins/stripe/views.py:501 +#: pretix/plugins/stripe/views.py:536 msgid "" "We had trouble authorizing your card payment. Please try again and get in " "touch with us if this problem persists." msgstr "" "我们无法授权您的信用卡付款。 如果此问题仍然存在,请再试一次并与我们联系。" -#: pretix/plugins/stripe/views.py:528 pretix/plugins/stripe/views.py:531 +#: pretix/plugins/stripe/views.py:559 #, fuzzy #| msgid "" #| "Sorry, there was an error in the payment process. Please check the link " @@ -23305,6 +23586,34 @@ msgstr "录入权限" msgid "Kosovo" msgstr "" +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s has already been paid by other means. Please " +#~ "double-check and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Stripe交易%(charge)s已成功,但订单%(order)s已通过其" +#~ "他方式支付。请仔细检查并通过Stripe的界面退款。" + +#, python-format +#~ msgid "" +#~ "The Stripe transaction %(charge)s has succeeded, " +#~ "but the order %(order)s is expired and the product was sold out in the " +#~ "meantime. Therefore, the payment could not be accepted. Please contact " +#~ "the user and refund the money via Stripe's interface." +#~ msgstr "" +#~ "Stripe交易%(charge)s已成功,但订单%(order)s已过期," +#~ "同时产品已售完。因此,付款无法接受。 请联系用户并通过Stripe的界面退款。" + +#, python-format +#~ msgid "" +#~ "Stripe reported that the transaction %(charge)s " +#~ "has been refunded. Do you want to refund mark the matching order " +#~ "(%(order)s) as refunded?" +#~ msgstr "" +#~ "Stripe报告交易%(charge)s已退款。您是否要将匹配的订" +#~ "单(%(order)s)标记为已退款?" + #, fuzzy #~| msgid "Optional. No products will be sold before this date." #~ msgid "Only include orders issued on or before this date." diff --git a/src/pretix/locale/zh_Hans/LC_MESSAGES/djangojs.po b/src/pretix/locale/zh_Hans/LC_MESSAGES/djangojs.po index 4a59da332..0ef695f86 100644 --- a/src/pretix/locale/zh_Hans/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/zh_Hans/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-30 16:15+0000\n" +"POT-Creation-Date: 2024-06-22 12:21+0000\n" "PO-Revision-Date: 2019-03-28 14:00+0000\n" "Last-Translator: yichengsd \n" "Language-Team: Chinese (Simplified) width else "landscape" + self.size = json.dumps([{"width": width, "height": height, "orientation": orientation}]) + super().save(*args, **kwargs) + class BadgeItem(models.Model): # If no BadgeItem exists => use default diff --git a/src/pretix/plugins/badges/templates/pretixplugins/badgelayouts/templates.json b/src/pretix/plugins/badges/templates/pretixplugins/badgelayouts/templates.json new file mode 100644 index 000000000..8b3f3e966 --- /dev/null +++ b/src/pretix/plugins/badges/templates/pretixplugins/badgelayouts/templates.json @@ -0,0 +1,22 @@ +{ + "Template1": { + "name": "Gradient_Landscape", + "layout": "[{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"-19.22\",\"bottom\":\"111.18\",\"fontsize\":\"40.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":true,\"italic\":false,\"width\":\"121.83\",\"downward\":false,\"content\":\"attendee_name\",\"text\":\"John Doe\",\"rotation\":0,\"align\":\"center\"},{\"type\":\"barcodearea\",\"left\":\"130.90\",\"bottom\":\"5.77\",\"size\":\"60.67\",\"content\":\"secret\"},{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"9.30\",\"bottom\":\"107.99\",\"fontsize\":\"13.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":false,\"italic\":false,\"width\":\"50.00\",\"downward\":true,\"content\":\"attendee_email\",\"text\":\"foo@bar.com\",\"rotation\":0,\"align\":\"left\"},{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"8.08\",\"bottom\":\"14.71\",\"fontsize\":\"20.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":false,\"italic\":false,\"width\":\"66.10\",\"downward\":true,\"content\":\"event_name\",\"text\":\"Sample event name\",\"rotation\":0,\"align\":\"left\"}]" + }, + "Template2": { + "name": "Gradient_Portait", + "layout": "[{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"8.75\",\"bottom\":\"171.91\",\"fontsize\":\"40.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":true,\"italic\":false,\"width\":\"121.83\",\"downward\":false,\"content\":\"attendee_name\",\"text\":\"John Doe\",\"rotation\":0,\"align\":\"center\"},{\"type\":\"barcodearea\",\"left\":\"26.07\",\"bottom\":\"49.32\",\"size\":\"84.16\",\"content\":\"secret\"},{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"35.23\",\"bottom\":\"26.96\",\"fontsize\":\"20.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":false,\"italic\":false,\"width\":\"68.03\",\"downward\":true,\"content\":\"event_name\",\"text\":\"Sample event name\",\"rotation\":0,\"align\":\"center\"},{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"43.91\",\"bottom\":\"169.44\",\"fontsize\":\"13.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":false,\"italic\":false,\"width\":\"50.00\",\"downward\":true,\"content\":\"attendee_email\",\"text\":\"foo@bar.com\",\"rotation\":0,\"align\":\"center\"}]" + }, + "Template3": { + "name": "Geometric", + "layout": "[{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"5.97\",\"bottom\":\"119.50\",\"fontsize\":\"50.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":true,\"italic\":false,\"width\":\"81.32\",\"downward\":false,\"content\":\"attendee_name\",\"text\":\"John Doe\",\"rotation\":0,\"align\":\"left\"},{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"2.61\",\"bottom\":\"19.20\",\"fontsize\":\"20.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":false,\"italic\":false,\"width\":\"65.94\",\"downward\":true,\"content\":\"event_name\",\"text\":\"Sample event name\",\"rotation\":0,\"align\":\"left\"},{\"type\":\"barcodearea\",\"left\":\"83.03\",\"bottom\":\"10.67\",\"size\":\"48.89\",\"content\":\"secret\"},{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"4.34\",\"bottom\":\"116.74\",\"fontsize\":\"13.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":false,\"italic\":false,\"width\":\"50.00\",\"downward\":true,\"content\":\"attendee_email\",\"text\":\"foo@bar.com\",\"rotation\":0,\"align\":\"left\"}]" + }, + "Template4": { + "name": "My_Name_is", + "layout": "[{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"38.79\",\"bottom\":\"53.16\",\"fontsize\":\"50.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":true,\"italic\":false,\"width\":\"121.83\",\"downward\":false,\"content\":\"attendee_name\",\"text\":\"John Doe\",\"rotation\":0,\"align\":\"center\"},{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"4.16\",\"bottom\":\"13.24\",\"fontsize\":\"20.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":false,\"italic\":false,\"width\":\"53.12\",\"downward\":true,\"content\":\"item\",\"text\":\"Sample product\",\"rotation\":0,\"align\":\"left\"},{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"141.25\",\"bottom\":\"11.04\",\"fontsize\":\"13.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":false,\"italic\":false,\"width\":\"50.00\",\"downward\":true,\"content\":\"attendee_email\",\"text\":\"foo@bar.com\",\"rotation\":0,\"align\":\"right\"}]" + }, + "Template6": { + "name": "Mesh_Grad", + "layout": "[{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"7.88\",\"bottom\":\"109.26\",\"fontsize\":\"40.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":true,\"italic\":false,\"width\":\"121.83\",\"downward\":false,\"content\":\"attendee_name\",\"text\":\"John Doe\",\"rotation\":0,\"align\":\"left\"},{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"6.60\",\"bottom\":\"105.75\",\"fontsize\":\"13.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":false,\"italic\":false,\"width\":\"50.00\",\"downward\":true,\"content\":\"attendee_email\",\"text\":\"foo@bar.com\",\"rotation\":0,\"align\":\"left\"},{\"type\":\"barcodearea\",\"left\":\"107.22\",\"bottom\":\"164.66\",\"size\":\"28.56\",\"content\":\"secret\"},{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"6.60\",\"bottom\":\"34.94\",\"fontsize\":\"15.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":true,\"italic\":false,\"width\":\"70.46\",\"downward\":true,\"content\":\"event_name\",\"text\":\"Sample event name\",\"rotation\":0,\"align\":\"left\"},{\"type\":\"textarea\",\"locale\":\"\",\"left\":\"6.77\",\"bottom\":\"26.44\",\"fontsize\":\"13.0\",\"color\":[0,0,0,1],\"fontfamily\":\"Open Sans\",\"bold\":false,\"italic\":false,\"width\":\"50.00\",\"downward\":true,\"content\":\"event_location\",\"text\":\"Random City\",\"rotation\":0,\"align\":\"left\"}]" + } +} diff --git a/src/pretix/plugins/banktransfer/apps.py b/src/pretix/plugins/banktransfer/apps.py index b79c4ace1..e23b33a52 100644 --- a/src/pretix/plugins/banktransfer/apps.py +++ b/src/pretix/plugins/banktransfer/apps.py @@ -13,6 +13,7 @@ class PretixPluginMeta: name = _("Bank transfer") author = _("the pretix team") category = 'PAYMENT' + featured = True version = version description = _("This plugin allows you to receive payments " + "via bank transfer.") diff --git a/src/pretix/plugins/banktransfer/views.py b/src/pretix/plugins/banktransfer/views.py index 3d2003d2d..27d1b1c8e 100644 --- a/src/pretix/plugins/banktransfer/views.py +++ b/src/pretix/plugins/banktransfer/views.py @@ -29,7 +29,7 @@ from pretix.control.permissions import ( EventPermissionRequiredMixin, OrganizerPermissionRequiredMixin, ) -from pretix.control.views.organizer import OrganizerDetailViewMixin +from pretix.control.views.organizer_views import OrganizerDetailViewMixin from pretix.helpers.json import CustomJSONEncoder from pretix.plugins.banktransfer import csvimport, mt940import from pretix.plugins.banktransfer.models import ( diff --git a/src/pretix/plugins/paypal/apps.py b/src/pretix/plugins/paypal/apps.py index 66a611d7a..84c9bd709 100644 --- a/src/pretix/plugins/paypal/apps.py +++ b/src/pretix/plugins/paypal/apps.py @@ -14,6 +14,7 @@ class PretixPluginMeta: author = _("the pretix team") version = version category = 'PAYMENT' + featured = True description = _("This plugin allows you to receive payments via PayPal") def ready(self): diff --git a/src/pretix/plugins/sendmail/apps.py b/src/pretix/plugins/sendmail/apps.py index c5e7cb10a..813052ce5 100644 --- a/src/pretix/plugins/sendmail/apps.py +++ b/src/pretix/plugins/sendmail/apps.py @@ -12,6 +12,7 @@ class PretixPluginMeta: name = _("Send out emails") author = _("the pretix team") category = 'FEATURE' + featured = True version = version description = _("This plugin allows you to send out emails " + "to all your customers.") diff --git a/src/pretix/plugins/stripe/apps.py b/src/pretix/plugins/stripe/apps.py index ac7218a14..d2172caa2 100644 --- a/src/pretix/plugins/stripe/apps.py +++ b/src/pretix/plugins/stripe/apps.py @@ -11,11 +11,13 @@ class StripeApp(AppConfig): class PretixPluginMeta: name = _("Stripe") - author = _("the pretix team") + author = "" version = version category = 'PAYMENT' + featured = True + picture = 'plugins/stripe/stripe_logo.svg' description = _("This plugin allows you to receive credit card payments " + - "via Stripe") + "via Stripe.") def ready(self): from . import signals, tasks # NOQA diff --git a/src/pretix/plugins/stripe/management/commands/stripe_connect_fill_countries.py b/src/pretix/plugins/stripe/management/commands/stripe_connect_fill_countries.py index c60b55411..19ecb73a0 100644 --- a/src/pretix/plugins/stripe/management/commands/stripe_connect_fill_countries.py +++ b/src/pretix/plugins/stripe/management/commands/stripe_connect_fill_countries.py @@ -7,7 +7,7 @@ class Command(BaseCommand): - help = "Detect country for Stripe Connect accounts connected with pretix 2.0 (required for payment request buttons)" + help = "Detect country for Stripe Connect accounts connected with eventyay (required for payment request buttons)" @scopes_disabled() def handle(self, *args, **options): diff --git a/src/pretix/plugins/stripe/payment.py b/src/pretix/plugins/stripe/payment.py index 0783dc062..4e1cd44c2 100644 --- a/src/pretix/plugins/stripe/payment.py +++ b/src/pretix/plugins/stripe/payment.py @@ -1,10 +1,10 @@ -import hashlib import json import logging import re import urllib.parse from collections import OrderedDict from decimal import Decimal +from urllib.parse import urlencode import stripe from django import forms @@ -20,16 +20,28 @@ from django.utils.timezone import now from django.utils.translation import gettext, gettext_lazy as _, pgettext from django_countries import countries +from text_unidecode import unidecode from pretix import __version__ from pretix.base.decimal import round_decimal -from pretix.base.models import Event, OrderPayment, OrderRefund, Quota -from pretix.base.payment import BasePaymentProvider, PaymentException +from pretix.base.forms import SecretKeySettingsField +from pretix.base.forms.questions import ( + guess_country, get_country_from_request, +) +from pretix.base.models import ( + Event, InvoiceAddress, Order, OrderPayment, OrderRefund, Quota, +) +from pretix.base.payment import ( + BasePaymentProvider, PaymentException, WalletType +) from pretix.base.plugins import get_all_plugins from pretix.base.services.mail import SendMailException from pretix.base.settings import SettingsSandbox +from pretix.helpers import OF_SELF +from pretix.helpers.countries import CachedCountries +from pretix.helpers.http import get_client_ip from pretix.helpers.urls import build_absolute_uri as build_global_uri -from pretix.multidomain.urlreverse import build_absolute_uri, eventreverse +from pretix.multidomain.urlreverse import build_absolute_uri from pretix.plugins.stripe.forms import StripeKeyValidator from pretix.plugins.stripe.models import ( ReferencedStripeObject, RegisteredApplePayDomain, @@ -37,6 +49,7 @@ from pretix.plugins.stripe.tasks import ( get_stripe_account_key, stripe_verify_domain, ) +from pretix.presale.views.cart import cart_session logger = logging.getLogger('pretix.plugins.stripe') @@ -73,14 +86,14 @@ def settings_content_render(self, request): "{}" ).format( _('To accept payments via Stripe, you will need an account at Stripe. By clicking on the ' - 'following button, you can either create a new Stripe account connect pretix to an existing ' + 'following button, you can either create a new Stripe account connect eventyay to an existing ' 'one.'), self.get_connect_url(request), _('Connect with Stripe') ) else: return ( - "" + "{}" ).format( reverse('plugins:stripe:oauth.disconnect', kwargs={ 'organizer': self.event.organizer.slug, @@ -131,6 +144,11 @@ def settings_form_fields(self): label=_('Stripe account'), disabled=True )), + ('connect_user_id', + forms.CharField( + label=_('Stripe account'), + disabled=True + )), ('endpoint', forms.ChoiceField( label=_('Endpoint'), @@ -155,14 +173,14 @@ def settings_form_fields(self): label=_('Publishable key'), help_text=_('{text}').format( text=_('Click here for a tutorial on how to obtain the required keys'), - docs_url='https://docs.pretix.eu/en/latest/user/payments/stripe.html' + docs_url='https://docs.stripe.com/keys' ), validators=( StripeKeyValidator('pk_'), ), )), ('secret_key', - forms.CharField( + SecretKeySettingsField( label=_('Secret key'), validators=( StripeKeyValidator(['sk_', 'rk_']), @@ -176,9 +194,34 @@ def settings_form_fields(self): 'country of residence.'), )), ] + + extra_fields = [ + ('walletdetection', + forms.BooleanField( + label=mark_safe( + '{} {}'.format( + _('Check for Apple Pay/Google Pay'), _('experimental') + ) + ), + help_text=_( + "Eventyay will check if the customer's browser supports wallet-based payment methods like Apple Pay or Google Pay." + ), + initial=True, + required=False, + )), + ('postfix', + forms.CharField( + label=_('Statement descriptor postfix'), + help_text=_( + "The statement descriptor is the text that appears on the customer's credit card bill or bank account transaction." + ).format(22 - 1 - settings.ENTROPY['order_code']), + required=False, + )), + ] + d = OrderedDict( fields + [ - ('method_cc', + ('method_card', forms.BooleanField( label=_('Credit card payments'), required=False, @@ -194,7 +237,8 @@ def settings_form_fields(self): forms.BooleanField( label=_('iDEAL'), disabled=self.event.currency != 'EUR', - help_text=_('Needs to be enabled in your Stripe account first.'), + help_text=_('Some payment methods might need to be enabled in the settings of your Stripe account ' + 'before they work properly.'), required=False, )), ('method_alipay', @@ -211,6 +255,33 @@ def settings_form_fields(self): help_text=_('Needs to be enabled in your Stripe account first.'), required=False, )), + ('method_sepa_debit', + forms.BooleanField( + label=_('SEPA Direct Debit'), + disabled=self.event.currency != 'EUR', + help_text=mark_safe( + '{}
    {}
    '.format( + _('Certain payment methods may require activation in your Stripe account settings before they function correctly.'), + _('SEPA Direct Debit can take up to 14 business days to receive notification on the success or failure of a payment after ' + 'you initiate a debit from the customer’s account, though the average is 7 to 8 business days.') + ) + ), + required=False, + )), + ('sepa_creditor_name', + forms.CharField( + label=_('SEPA Creditor Mandate Name'), + disabled=self.event.currency != 'EUR', + help_text=_('Provide the name for the SEPA Creditor Mandate, which will be shown to the user.'), + required=False, + widget=forms.TextInput( + attrs={ + 'data-display-dependency': '#id_payment_stripe_method_sepa_debit', + 'data-required-if': '#id_payment_stripe_method_sepa_debit' + } + ), + )) + , ('method_sofort', forms.BooleanField( label=_('SOFORT'), @@ -253,8 +324,49 @@ def settings_form_fields(self): help_text=_('Needs to be enabled in your Stripe account first.'), required=False, )), - ] + list(super().settings_form_fields.items()) + moto_settings + ('method_swish', + forms.BooleanField( + label=_('Swish'), + disabled=self.event.currency != 'SEK', + help_text=_( + 'Certain payment methods may need to be enabled in your Stripe account settings before they function correctly.'), + required=False, + )), + ('method_affirm', + forms.BooleanField( + label=_('Affirm'), + disabled=self.event.currency not in ['USD', 'CAD'], + help_text=' '.join([ + str(_( + 'Certain payment methods may need to be enabled in your Stripe account settings before they function correctly.')), + str(_('Only available for payments between $50 and $30,000.')) + ]), + required=False, + )), + ('method_klarna', + forms.BooleanField( + label=_('Klarna'), + disabled=self.event.currency not in [ + 'AUD', 'CAD', 'CHF', 'CZK', 'DKK', 'EUR', 'GBP', 'NOK', 'NZD', 'PLN', 'SEK', 'USD' + ], + help_text=' '.join([ + str(_( + 'Certain payment methods may need to be enabled in your Stripe account settings before they function correctly.')), + str(_( + 'Klarna and Stripe will determine which Klarna payment methods are available to the user.')), + str(_('Klarna\'s terms of service prohibit its use by charities or political organizations.')), + ]), + required=False, + )) + , + ] + extra_fields + list(super().settings_form_fields.items()) + moto_settings ) + if not self.settings.connect_client_id or self.settings.secret_key: + d['connect_destination'] = forms.CharField( + label=_('Destination'), + validators=[StripeKeyValidator(['acct_'])], + required=False + ) d.move_to_end('_enabled', last=False) return d @@ -262,6 +374,10 @@ def settings_form_fields(self): class StripeMethod(BasePaymentProvider): identifier = '' method = '' + redirect_action_handling = 'iframe' + redirect_in_widget_allowed = True + confirmation_method = 'manual' + explanation = '' def __init__(self, event: Event): super().__init__(event) @@ -272,7 +388,7 @@ def test_mode_message(self): if self.settings.connect_client_id and not self.settings.secret_key: is_testmode = True else: - is_testmode = '_test_' in self.settings.secret_key + is_testmode = self.settings.secret_key and '_test_' in self.settings.secret_key if is_testmode: return mark_safe( _('The Stripe plugin is operating in test mode. You can use one of many test ' @@ -313,7 +429,7 @@ def _get_amount(self, payment): def _connect_kwargs(self, payment): d = {} - if self.settings.connect_client_id and self.settings.connect_user_id: + if self.settings.connect_client_id and self.settings.connect_user_id and not self.settings.secret_key: fee = Decimal('0.00') if self.settings.get('connect_app_fee_percent', as_type=Decimal): fee = round_decimal(self.settings.get('connect_app_fee_percent', as_type=Decimal) * payment.amount / Decimal('100.00'), self.event.currency) @@ -323,18 +439,29 @@ def _connect_kwargs(self, payment): fee = max(fee, self.settings.get('connect_app_fee_min', as_type=Decimal)) if fee: d['application_fee_amount'] = self._decimal_to_int(fee) + if self.settings.connect_destination: + d['transfer_data'] = { + 'destination': self.settings.connect_destination + } return d def statement_descriptor(self, payment, length=22): - return '{event}-{code} {eventname}'.format( - event=self.event.slug.upper(), - code=payment.order.code, - eventname=re.sub('[^a-zA-Z0-9 ]', '', str(self.event.name)) - )[:length] + code = payment.order.code + if self.settings.postfix: + # Custom postfix setup + postfix = re.sub("[^a-zA-Z0-9-_. ]", "", unidecode(str(self.settings.postfix))) + descriptor = f'{code} {postfix}' + else: + # Event slug and name for backward compatibility + event_slug = self.event.slug.upper() + event_name = re.sub("[^a-zA-Z0-9-_. ]", "", unidecode(str(self.event.name))) + descriptor = f'{event_slug}-{code} {event_name}' + + return descriptor[:length] @property def api_kwargs(self): - if self.settings.connect_client_id and self.settings.connect_user_id: + if self.settings.connect_client_id and self.settings.connect_user_id and not self.settings.secret_key: if self.settings.get('endpoint', 'live') == 'live' and not self.event.testmode: kwargs = { 'api_key': self.settings.connect_secret_key, @@ -352,120 +479,25 @@ def api_kwargs(self): return kwargs def _init_api(self): - stripe.api_version = '2022-08-01' + stripe.api_version = '2023-10-16' stripe.set_app_info( - "pretix", + "eventyay", partner_id="pp_partner_FSaz4PpKIur7Ox", version=__version__, - url="https://pretix.eu" + url="https://tickets.eventyay.com" ) - def checkout_confirm_render(self, request) -> str: - template = get_template('pretixplugins/stripe/checkout_payment_confirm.html') + def checkout_confirm_render(self, request, **kwargs) -> str: + template = get_template('plugins/stripe/checkout_payment_confirm.html') ctx = {'request': request, 'event': self.event, 'settings': self.settings, 'provider': self} return template.render(ctx) - def payment_can_retry(self, payment): - return self._is_still_available(order=payment.order) - - def _charge_source(self, request, source, payment): - try: - params = {} - if not source.startswith('src_'): - params['statement_descriptor'] = self.statement_descriptor(payment) - params.update(self.api_kwargs) - params.update(self._connect_kwargs(payment)) - charge = stripe.Charge.create( - amount=self._get_amount(payment), - currency=self.event.currency.lower(), - source=source, - description='{event}-{code}'.format( - event=self.event.slug.upper(), - code=payment.order.code - ), - metadata={ - 'order': str(payment.order.id), - 'event': self.event.id, - 'code': payment.order.code - }, - # TODO: Is this sufficient? - idempotency_key=str(self.event.id) + payment.order.code + source, - **params - ) - except stripe.error.CardError as e: - if e.json_body: - err = e.json_body['error'] - logger.exception('Stripe error: %s' % str(err)) - else: - err = {'message': str(e)} - logger.exception('Stripe error: %s' % str(e)) - logger.info('Stripe card error: %s' % str(err)) - payment.fail(info={ - 'error': True, - 'message': err['message'], - }) - raise PaymentException(_('Stripe reported an error with your card: %s') % err['message']) - - # This is not an error we normally expect, however some payment methods like iDEAL will redirect - # the user back to our confirmation page at the same time from two devices: the web browser the - # purchase is executed from and the online banking app the payment is authorized from. - # In this case we will just log the idempotency error but not expose it to the user and just - # forward them back to their order page. There is a good chance that by the time the user hits - # the order page, the other request has gone through and the payment is confirmed. - except stripe.error.IdempotencyError as e: - if e.json_body and 'error' in e.json_body: - err = e.json_body['error'] - logger.exception('Stripe error: %s' % str(err)) - else: - logger.exception('Stripe error: %s' % str(e)) - return - - except stripe.error.StripeError as e: - if e.json_body and 'error' in e.json_body: - err = e.json_body['error'] - logger.exception('Stripe error: %s' % str(err)) - else: - err = {'message': str(e)} - logger.exception('Stripe error: %s' % str(e)) - payment.fail(info={ - 'error': True, - 'message': err['message'], - }) - raise PaymentException(_('We had trouble communicating with Stripe. Please try again and get in touch ' - 'with us if this problem persists.')) - else: - ReferencedStripeObject.objects.get_or_create( - reference=charge.id, - defaults={'order': payment.order, 'payment': payment} - ) - if charge.status == 'succeeded' and charge.paid: - try: - payment.info = str(charge) - payment.confirm() - except Quota.QuotaExceededException as e: - raise PaymentException(str(e)) - - except SendMailException: - raise PaymentException(_('There was an error sending the confirmation mail.')) - elif charge.status == 'pending': - if request: - messages.warning(request, _('Your payment is pending completion. We will inform you as soon as the ' - 'payment completed.')) - payment.info = str(charge) - payment.state = OrderPayment.PAYMENT_STATE_PENDING - payment.save() - return - else: - logger.info('Charge failed: %s' % str(charge)) - payment.fail(info=str(charge)) - raise PaymentException(_('Stripe reported an error: %s') % charge.failure_message) - def payment_pending_render(self, request, payment) -> str: if payment.info: payment_info = json.loads(payment.info) else: payment_info = None - template = get_template('pretixplugins/stripe/pending.html') + template = get_template('plugins/stripe/pending.html') ctx = { 'request': request, 'event': self.event, @@ -474,7 +506,7 @@ def payment_pending_render(self, request, payment) -> str: 'order': payment.order, 'payment': payment, 'payment_info': payment_info, - 'payment_hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest() + 'payment_hash': payment.order.tagged_secret('plugins:stripe') } return template.render(ctx) @@ -488,111 +520,133 @@ def api_payment_details(self, payment: OrderPayment): } def payment_control_render(self, request, payment) -> str: - if payment.info: - payment_info = json.loads(payment.info) + payment_info = json.loads(payment.info) if payment.info else None + details = {} + + if payment_info: if 'amount' in payment_info: payment_info['amount'] /= 10 ** settings.CURRENCY_PLACES.get(self.event.currency, 2) - else: - payment_info = None - template = get_template('pretixplugins/stripe/control.html') - ctx = { + if isinstance(payment_info.get("latest_charge"), dict): + details = payment_info["latest_charge"].get("payment_method_details", {}) + elif payment_info.get("charges") and payment_info["charges"]["data"]: + details = payment_info["charges"]["data"][0].get("payment_method_details", {}) + elif payment_info.get("source"): + details = payment_info["source"] + details.setdefault('owner', {}) + + template = get_template('plugins/stripe/control.html') + context = { 'request': request, 'event': self.event, 'settings': self.settings, 'payment_info': payment_info, 'payment': payment, 'method': self.method, + 'details': details, 'provider': self, } - return template.render(ctx) + return template.render(context) + + def redirect(self, request, url): + """ + Redirect the user to a different page + """ + if request.session.get('iframe_session', False): + data = signing.dumps({ + 'url': url, + 'session': { + 'payment_stripe_order_secret': request.session['payment_stripe_order_secret'], + }, + }, salt='safe-redirect') + + redirect_url = build_absolute_uri(request.event, 'plugins:stripe:redirect') + return f"{redirect_url}?{urlencode({'data': data})}" + else: + return str(url) @transaction.atomic() def execute_refund(self, refund: OrderRefund): self._init_api() payment_info = refund.payment.info_data - OrderPayment.objects.select_for_update().get(pk=refund.payment.pk) + OrderPayment.objects.select_for_update(of=OF_SELF).get(pk=refund.payment.pk) if not payment_info: raise PaymentException(_('No payment information found.')) try: - if payment_info['id'].startswith('pi_'): - chargeid = payment_info['charges']['data'][0]['id'] - else: - chargeid = payment_info['id'] - - ch = stripe.Charge.retrieve(chargeid, **self.api_kwargs) - r = ch.refunds.create( + chargeid = self._get_charge_id(payment_info) + kwargs = {'reverse_transfer': True} if self.settings.connect_destination else {} + r = stripe.Refund.create( + charge=chargeid, amount=self._get_amount(refund), + **self.api_kwargs, + **kwargs, ) - ch.refresh() - except (stripe.error.InvalidRequestError, stripe.error.AuthenticationError, stripe.error.APIConnectionError) \ - as e: - if e.json_body and 'error' in e.json_body: - err = e.json_body['error'] - logger.exception('Stripe error: %s' % str(err)) - else: - err = {'message': str(e)} - logger.exception('Stripe error: %s' % str(e)) - raise PaymentException(_('We had trouble communicating with Stripe. Please try again and contact ' - 'support if the problem persists.')) + except ( + stripe.error.InvalidRequestError, stripe.error.AuthenticationError, stripe.error.APIConnectionError) as e: + self._handle_stripe_exception(e, refund) except stripe.error.StripeError as err: - logger.error('Stripe error: %s' % str(err)) + logger.error('Stripe error: %s', str(err)) raise PaymentException(_('Stripe returned an error')) else: - refund.info = str(r) - if r.status in ('succeeded', 'pending'): - refund.done() - elif r.status in ('failed', 'canceled'): - refund.state = OrderRefund.REFUND_STATE_FAILED - refund.execution_date = now() - refund.save() - - def execute_payment(self, request: HttpRequest, payment: OrderPayment): - self._init_api() - try: - source = self._create_source(request, payment) - except stripe.error.StripeError as e: - if e.json_body and 'err' in e.json_body: - err = e.json_body['error'] - logger.exception('Stripe error: %s' % str(err)) - else: - err = {'message': str(e)} - logger.exception('Stripe error: %s' % str(e)) - payment.fail(info={ - 'error': True, - 'message': err['message'], - }) - raise PaymentException(_('We had trouble communicating with Stripe. Please try again and get in touch ' - 'with us if this problem persists.')) - - ReferencedStripeObject.objects.get_or_create( - reference=source.id, - defaults={'order': payment.order, 'payment': payment} - ) - payment.info = str(source) - payment.state = OrderPayment.PAYMENT_STATE_PENDING - payment.save() - request.session['payment_stripe_order_secret'] = payment.order.secret - return self.redirect(request, source.redirect.url) - - def redirect(self, request, url): - if request.session.get('iframe_session', False): - signer = signing.Signer(salt='safe-redirect') - return ( - build_absolute_uri(request.event, 'plugins:stripe:redirect') + '?url=' + - urllib.parse.quote(signer.sign(url)) - ) - else: - return str(url) + self._finalize_refund(r, refund) + + def _get_charge_id(self, payment_info): + if payment_info['id'].startswith('pi_'): + if 'latest_charge' in payment_info and isinstance(payment_info.get("latest_charge"), dict): + return payment_info['latest_charge']['id'] + return payment_info['charges']['data'][0]['id'] + return payment_info['id'] + + def _handle_stripe_exception(self, e, refund): + err = e.json_body['error'] if e.json_body and 'error' in e.json_body else {'message': str(e)} + logger.exception('Stripe error: %s', str(err)) + + refund.info_data = err + refund.state = OrderRefund.REFUND_STATE_FAILED + refund.execution_date = now() + refund.save() + refund.order.log_action('pretix.event.order.refund.failed', { + 'local_id': refund.local_id, + 'provider': refund.provider, + 'error': str(e) + }) + raise PaymentException( + _('We had trouble communicating with Stripe. Please try again and contact support if the problem persists.')) + + def _finalize_refund(self, r, refund): + refund.info = str(r) + if r.status in ('succeeded', 'pending'): + refund.done() + elif r.status in ('failed', 'canceled'): + refund.state = OrderRefund.REFUND_STATE_FAILED + refund.execution_date = now() + refund.save() def shred_payment_info(self, obj: OrderPayment): if not obj.info: return d = json.loads(obj.info) - new = {} - if 'source' in d: + + keys = ( + 'amount', 'currency', 'status', 'id', 'amount_capturable', 'amount_details', 'amount_received', + 'application', 'application_fee_amount', 'canceled_at', 'confirmation_method', 'created', 'description', + 'last_payment_error', 'payment_method', 'statement_descriptor', 'livemode' + ) + new = {k: v for k, v in d.items() if k in keys} + + if d.get("latest_charge") and not isinstance(d["latest_charge"], str): + keys = ( + 'amount', 'amount_captured', 'amount_refunded', 'application', 'application_fee_amount', + 'balance_transaction', 'captured', 'created', 'currency', 'description', 'destination', + 'disputed', 'failure_balance_transaction', 'failure_code', 'failure_message', 'id', + 'livemode', 'metadata', 'object', 'on_behalf_of', 'outcome', 'paid', 'payment_intent', + 'payment_method', 'receipt_url', 'refunded', 'status', 'transfer_data', 'transfer_group', + ) + new["latest_charge"] = {k: v for k, v in d["latest_charge"].items() if k in keys} + + if d.get('source'): new['source'] = { 'id': d['source'].get('id'), 'type': d['source'].get('type'), @@ -603,25 +657,17 @@ def shred_payment_info(self, obj: OrderPayment): 'bic': d['source'].get('bic'), 'card': { 'brand': d['source'].get('card', {}).get('brand'), - 'country': d['source'].get('card', {}).get('cuntry'), + 'country': d['source'].get('card', {}).get('country'), 'last4': d['source'].get('card', {}).get('last4'), } } - if 'amount' in d: - new['amount'] = d['amount'] - if 'currency' in d: - new['currency'] = d['currency'] - if 'status' in d: - new['status'] = d['status'] - if 'id' in d: - new['id'] = d['id'] new['_shredded'] = True obj.info = json.dumps(new) obj.save(update_fields=['info']) for le in obj.order.all_logentries().filter( - action_type="pretix.plugins.stripe.event" + action_type="pretix.plugins.stripe.event" ).exclude(data="", shredded=True): d = le.parsed_data if 'data' in d: @@ -632,36 +678,13 @@ def shred_payment_info(self, obj: OrderPayment): le.shredded = True le.save(update_fields=['data', 'shredded']) - -class StripeCC(StripeMethod): - identifier = 'stripe' - verbose_name = _('Credit card via Stripe') - public_name = _('Credit card') - method = 'cc' - - def payment_form_render(self, request, total) -> str: - account = get_stripe_account_key(self) - if not RegisteredApplePayDomain.objects.filter(account=account, domain=request.host).exists(): - stripe_verify_domain.apply_async(args=(self.event.pk, request.host)) - - template = get_template('pretixplugins/stripe/checkout_payment_form_cc.html') - ctx = { - 'request': request, - 'event': self.event, - 'total': self._decimal_to_int(total), - 'settings': self.settings, - 'is_moto': self.is_moto(request) - } - return template.render(ctx) - def payment_is_valid_session(self, request): - return request.session.get('payment_stripe_payment_method_id', '') != '' + return request.session.get('payment_stripe_{}_payment_method_id'.format(self.method), '') != '' def checkout_prepare(self, request, cart): - payment_method_id = request.POST.get('stripe_payment_method_id', '') - request.session['payment_stripe_payment_method_id'] = payment_method_id - request.session['payment_stripe_brand'] = request.POST.get('stripe_card_brand', '') - request.session['payment_stripe_last4'] = request.POST.get('stripe_card_last4', '') + payment_method_id = request.POST.get('stripe_{}_payment_method_id'.format(self.method), '') + request.session['payment_stripe_{}_payment_method_id'.format(self.method)] = payment_method_id + if payment_method_id == '': messages.warning(request, _('You may need to enable JavaScript for Stripe payments.')) return False @@ -671,151 +694,138 @@ def execute_payment(self, request: HttpRequest, payment: OrderPayment): try: return self._handle_payment_intent(request, payment) finally: - del request.session['payment_stripe_payment_method_id'] + if 'payment_stripe_{}_payment_method_id'.format(self.method) in request.session: + del request.session['payment_stripe_{}_payment_method_id'.format(self.method)] def is_moto(self, request, payment=None) -> bool: - # We don't have a payment yet when checking if we should display the MOTO-flag - # However, before we execute the payment, we absolutely have to check if the request-SalesChannel as well as the - # order are tagged as a reseller-transaction. Else, a user with a valid reseller-session might be able to place - # a MOTO transaction trough the WebShop. - - moto = self.settings.get('reseller_moto', False, as_type=bool) and \ - request.sales_channel.identifier == 'resellers' - - if payment: - return moto and payment.order.sales_channel == 'resellers' + return False - return moto + def _payment_intent_kwargs(self, request, payment): + return {} def _handle_payment_intent(self, request, payment, intent=None): self._init_api() + def create_payment_intent(payment_method_id, idempotency_key_seed): + params = {**self._connect_kwargs(payment), **self.api_kwargs, + **self._payment_intent_kwargs(request, payment)} + + if self.is_moto(request, payment): + params['payment_method_options'] = {'card': {'moto': True}} + + statement_descriptor = self.statement_descriptor(payment) + params[ + 'statement_descriptor_suffix' if self.method == "card" else 'statement_descriptor'] = statement_descriptor + + return stripe.PaymentIntent.create( + amount=self._get_amount(payment), + currency=self.event.currency.lower(), + payment_method=payment_method_id, + payment_method_types=[self.method], + confirmation_method=self.confirmation_method, + confirm=True, + description=f'{self.event.slug.upper()}-{payment.order.code}', + metadata={'order': str(payment.order.id), 'event': self.event.id, 'code': payment.order.code}, + idempotency_key=f'{self.event.id}{payment.order.code}{idempotency_key_seed}', + return_url=build_absolute_uri(self.event, 'plugins:stripe:sca.return', kwargs={ + 'order': payment.order.code, + 'payment': payment.pk, + 'hash': payment.order.tagged_secret('plugins:stripe') + }), + expand=['latest_charge'], + **params + ) + + def retrieve_payment_intent(payment_info): + if 'id' in payment_info: + return stripe.PaymentIntent.retrieve( + payment_info['id'], + expand=["latest_charge"], + **self.api_kwargs + ) + try: if self.payment_is_valid_session(request): - params = {} - params.update(self._connect_kwargs(payment)) - params.update(self.api_kwargs) - - if self.is_moto(request, payment): - params.update({ - 'payment_method_options': { - 'card': { - 'moto': True - } - } - }) - - intent = stripe.PaymentIntent.create( - amount=self._get_amount(payment), - currency=self.event.currency.lower(), - payment_method=request.session['payment_stripe_payment_method_id'], - confirmation_method='manual', - confirm=True, - description='{event}-{code}'.format( - event=self.event.slug.upper(), - code=payment.order.code - ), - statement_descriptor=self.statement_descriptor(payment), - metadata={ - 'order': str(payment.order.id), - 'event': self.event.id, - 'code': payment.order.code - }, - # TODO: Is this sufficient? - idempotency_key=str(self.event.id) + payment.order.code + request.session['payment_stripe_payment_method_id'], - return_url=build_absolute_uri(self.event, 'plugins:stripe:sca.return', kwargs={ - 'order': payment.order.code, - 'payment': payment.pk, - 'hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest(), - }), - **params - ) + payment_method_id = request.session.get(f'payment_stripe_{self.method}_payment_method_id') + idempotency_key_seed = payment_method_id if payment_method_id else payment.full_id + intent = create_payment_intent(payment_method_id, idempotency_key_seed) else: payment_info = json.loads(payment.info) - - if 'id' in payment_info: - if not intent: - intent = stripe.PaymentIntent.retrieve( - payment_info['id'], - **self.api_kwargs - ) - else: - return + if not intent: + intent = retrieve_payment_intent(payment_info) except stripe.error.CardError as e: - if e.json_body: - err = e.json_body['error'] - logger.exception('Stripe error: %s' % str(err)) - else: - err = {'message': str(e)} - logger.exception('Stripe error: %s' % str(e)) - logger.info('Stripe card error: %s' % str(err)) - payment.fail(info={ - 'error': True, - 'message': err['message'], - }) + err = e.json_body['error'] if e.json_body else {'message': str(e)} + logger.exception(f'Stripe error: {err}') + payment.fail(info={'error': True, 'message': err['message']}) raise PaymentException(_('Stripe reported an error with your card: %s') % err['message']) except stripe.error.StripeError as e: - if e.json_body and 'error' in e.json_body: - err = e.json_body['error'] - logger.exception('Stripe error: %s' % str(err)) - else: - err = {'message': str(e)} - logger.exception('Stripe error: %s' % str(e)) - payment.fail(info={ - 'error': True, - 'message': err['message'], - }) - raise PaymentException(_('We had trouble communicating with Stripe. Please try again and get in touch ' - 'with us if this problem persists.')) + err = e.json_body['error'] if e.json_body and 'error' in e.json_body else {'message': str(e)} + logger.exception(f'Stripe error: {err}') + if err.get('code') != 'idempotency_key_in_use': + payment.fail(info={'error': True, 'message': err['message']}) + raise PaymentException( + _('We had trouble communicating with Stripe. Please try again and get in touch with us if this problem persists.')) + else: - ReferencedStripeObject.objects.get_or_create( - reference=intent.id, - defaults={'order': payment.order, 'payment': payment} - ) - if intent.status == 'requires_action': - payment.info = str(intent) - payment.state = OrderPayment.PAYMENT_STATE_CREATED - payment.save() - return build_absolute_uri(self.event, 'plugins:stripe:sca', kwargs={ - 'order': payment.order.code, - 'payment': payment.pk, - 'hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest(), - }) + ReferencedStripeObject.objects.get_or_create(reference=intent.id, + defaults={'order': payment.order, 'payment': payment}) + self._handle_intent_status(intent, request, payment) - if intent.status == 'requires_confirmation': - payment.info = str(intent) - payment.state = OrderPayment.PAYMENT_STATE_CREATED - payment.save() - self._confirm_payment_intent(request, payment) - - elif intent.status == 'succeeded' and intent.charges.data[-1].paid: - try: - payment.info = str(intent) - payment.confirm() - except Quota.QuotaExceededException as e: - raise PaymentException(str(e)) - - except SendMailException: - raise PaymentException(_('There was an error sending the confirmation mail.')) - elif intent.status == 'processing': - if request: - messages.warning(request, _('Your payment is pending completion. We will inform you as soon as the ' - 'payment completed.')) + def _handle_intent_status(self, intent, request, payment): + if intent.status == 'requires_action': + payment.info = str(intent) + payment.state = OrderPayment.PAYMENT_STATE_CREATED + payment.save() + return self._redirect_to_sca(request, payment) + + if intent.status == 'requires_confirmation': + payment.info = str(intent) + payment.state = OrderPayment.PAYMENT_STATE_CREATED + payment.save() + self._confirm_payment_intent(request, payment) + + elif intent.status == 'succeeded' and intent.latest_charge.paid: + try: payment.info = str(intent) - payment.state = OrderPayment.PAYMENT_STATE_PENDING - payment.save() - return - elif intent.status == 'requires_payment_method': - if request: - messages.warning(request, _('Your payment failed. Please try again.')) - payment.fail(info=str(intent)) - return - else: - logger.info('Charge failed: %s' % str(intent)) - payment.fail(info=str(intent)) - raise PaymentException(_('Stripe reported an error: %s') % intent.last_payment_error.message) + payment.confirm() + except Quota.QuotaExceededException as e: + raise PaymentException(str(e)) + except SendMailException: + raise PaymentException(_('There was an error sending the confirmation mail.')) + + elif intent.status == 'processing': + if request: + messages.warning(request, + _('Your payment is pending completion. We will inform you as soon as the payment completed.')) + payment.info = str(intent) + payment.state = OrderPayment.PAYMENT_STATE_PENDING + payment.save() + + elif intent.status == 'requires_payment_method': + if request: + messages.warning(request, _('Your payment failed. Please try again.')) + payment.fail(info=str(intent)) + + else: + logger.info(f'Charge failed: {intent}') + payment.fail(info=str(intent)) + raise PaymentException(_('Stripe reported an error: %s') % intent.last_payment_error.message) + + def _redirect_to_sca(self, request, payment): + url = build_absolute_uri(self.event, 'plugins:stripe:sca', kwargs={ + 'order': payment.order.code, + 'payment': payment.pk, + 'hash': payment.order.tagged_secret('plugins:stripe'), + }) + + if not self.redirect_in_widget_allowed and request.session.get('iframe_session', False): + redirect_url = build_absolute_uri(self.event, 'plugins:stripe:redirect') + data = signing.dumps({'url': url, 'session': {}}, salt='safe-redirect') + return f"{redirect_url}?{urlencode({'data': data})}" + + return url def _confirm_payment_intent(self, request, payment): self._init_api() @@ -828,8 +838,9 @@ def _confirm_payment_intent(self, request, payment): return_url=build_absolute_uri(self.event, 'plugins:stripe:sca.return', kwargs={ 'order': payment.order.code, 'payment': payment.pk, - 'hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest(), + 'hash': payment.order.tagged_secret('plugins:stripe'), }), + expand=["latest_charge"], **self.api_kwargs ) @@ -864,201 +875,468 @@ def _confirm_payment_intent(self, request, payment): raise PaymentException(_('We had trouble communicating with Stripe. Please try again and get in touch ' 'with us if this problem persists.')) - def payment_presale_render(self, payment: OrderPayment) -> str: - pi = payment.info_data or {} - try: - if "charges" in pi: - card = pi["charges"]["data"][0]["payment_method_details"]["card"] - else: - card = pi["source"]["card"] - except: - logger.exception('Could not parse payment data') - return super().payment_presale_render(payment) - return f'{self.public_name}: ' \ - f'{card.get("brand", "").title()} ' \ - f'************{card.get("last4", "****")}, ' \ - f'{_("expires {month}/{year}").format(month=card.get("exp_month"), year=card.get("exp_year"))}' - -class StripeGiropay(StripeMethod): - identifier = 'stripe_giropay' - verbose_name = _('giropay via Stripe') - public_name = _('giropay') - method = 'giropay' +class StripeSourceMethod(StripeMethod): + def payment_is_valid_session(self, request): + return True - def payment_form_render(self, request) -> str: - template = get_template('pretixplugins/stripe/checkout_payment_form_simple.html') - ctx = { - 'request': request, - 'event': self.event, - 'settings': self.settings, - 'form': self.payment_form(request) - } - return template.render(ctx) - - @property - def payment_form_fields(self): - return OrderedDict([ - ('account', forms.CharField(label=_('Account holder'))), - ]) - - def _create_source(self, request, payment): + def _charge_source(self, request, source, payment): try: - source = stripe.Source.create( - type='giropay', + params = self._prepare_charge_params(request, source, payment) + charge = stripe.Charge.create( amount=self._get_amount(payment), currency=self.event.currency.lower(), + source=source, + description=f'{self.event.slug.upper()}-{payment.order.code}', metadata={ 'order': str(payment.order.id), 'event': self.event.id, 'code': payment.order.code }, - owner={ - 'name': request.session.get('payment_stripe_giropay_account') or gettext('unknown name') - }, - statement_descriptor=self.statement_descriptor(payment, 35), - redirect={ - 'return_url': build_absolute_uri(self.event, 'plugins:stripe:return', kwargs={ - 'order': payment.order.code, - 'payment': payment.pk, - 'hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest(), - }) - }, - **self.api_kwargs + idempotency_key=f"{self.event.id}{payment.order.code}{source}", + **params ) - return source - finally: - if 'payment_stripe_giropay_account' in request.session: - del request.session['payment_stripe_giropay_account'] + except stripe.error.CardError as e: + self._handle_card_error(e, payment) + except stripe.error.StripeError as e: + self._handle_stripe_error(e, payment) + else: + self._finalize_charge(charge, request, payment) + + def _prepare_charge_params(self, request, source, payment): + params = {} + if not source.startswith('src_'): + params['statement_descriptor'] = self.statement_descriptor(payment) + params.update(self.api_kwargs) + params.update(self._connect_kwargs(payment)) + return params + + def _handle_card_error(self, e, payment): + err = e.json_body['error'] if e.json_body else {'message': str(e)} + logger.exception('Stripe error: %s', str(err)) + + payment.fail(info={ + 'error': True, + 'message': err['message'], + }) + raise PaymentException(_('Stripe reported an error with your card: %s') % err['message']) - def payment_is_valid_session(self, request): - return ( - request.session.get('payment_stripe_giropay_account', '') != '' + def _handle_stripe_error(self, e, payment): + err = e.json_body['error'] if e.json_body and 'error' in e.json_body else {'message': str(e)} + logger.exception('Stripe error: %s', str(err)) + + if err.get('code') == 'idempotency_key_in_use': + return + + payment.fail(info={ + 'error': True, + 'message': err['message'], + }) + raise PaymentException( + _('We had trouble communicating with Stripe. Please try again and get in touch with us if this problem persists.')) + + def _finalize_charge(self, charge, request, payment): + ReferencedStripeObject.objects.get_or_create( + reference=charge.id, + defaults={'order': payment.order, 'payment': payment} ) + payment.info = str(charge) - def checkout_prepare(self, request, cart): - form = self.payment_form(request) - if form.is_valid(): - request.session['payment_stripe_giropay_account'] = form.cleaned_data['account'] - return True - return False + if charge.status == 'succeeded' and charge.paid: + self._handle_successful_charge(payment) + elif charge.status == 'pending': + self._handle_pending_charge(request, payment) + else: + self._handle_failed_charge(charge, payment) - def payment_presale_render(self, payment: OrderPayment) -> str: - pi = payment.info_data or {} + def _handle_successful_charge(self, payment): try: - return gettext('Bank account at {bank}').format(bank=pi["source"]["giropay"]["bank_name"]) - except: - logger.exception('Could not parse payment data') - return super().payment_presale_render(payment) + payment.confirm() + except Quota.QuotaExceededException as e: + raise PaymentException(str(e)) + except SendMailException: + raise PaymentException(_('There was an error sending the confirmation mail.')) + + def _handle_pending_charge(self, request, payment): + if request: + messages.warning(request, + _('Your payment is pending completion. We will inform you as soon as the payment is completed.')) + payment.state = OrderPayment.PAYMENT_STATE_PENDING + payment.save() + def _handle_failed_charge(self, charge, payment): + logger.info('Charge failed: %s', str(charge)) + payment.fail(info=str(charge)) + raise PaymentException(_('Stripe reported an error: %s') % charge.failure_message) -class StripeIdeal(StripeMethod): - identifier = 'stripe_ideal' - verbose_name = _('iDEAL via Stripe') - public_name = _('iDEAL') - method = 'ideal' + def execute_payment(self, request: HttpRequest, payment: OrderPayment): + self._init_api() + + try: + source = self._create_source(request, payment) + except stripe.error.StripeError as e: + self._handle_stripe_error(e, payment) + else: + ReferencedStripeObject.objects.get_or_create( + reference=source.id, + defaults={'order': payment.order, 'payment': payment} + ) + payment.info = str(source) + payment.state = OrderPayment.PAYMENT_STATE_PENDING + payment.save() + request.session['payment_stripe_order_secret'] = payment.order.secret + return self.redirect(request, source.redirect.url) + + def _handle_stripe_error(self, e, payment): + err = e.json_body['error'] if e.json_body and 'error' in e.json_body else {'message': str(e)} + logger.exception('Stripe error: %s', str(err)) + + if err.get('code') == 'idempotency_key_in_use': + return + + payment.fail(info={ + 'error': True, + 'message': err['message'], + }) + raise PaymentException( + _('We had trouble communicating with Stripe. Please try again and get in touch with us if this problem persists.')) + + +class StripeRedirectMethod(StripeMethod): + redirect_action_handling = "redirect" + + def payment_is_valid_session(self, request): + return f"payment_stripe_{self.method}_payment_method_id" in request.session + + def checkout_prepare(self, request, cart): + request.session[f"payment_stripe_{self.method}_payment_method_id"] = None + return True + + def _payment_intent_kwargs(self, request, payment): + return { + "payment_method_data": { + "type": self.method, + } + } def payment_form_render(self, request) -> str: - template = get_template('pretixplugins/stripe/checkout_payment_form_simple_noform.html') + template = get_template('plugins/stripe/checkout_payment_form_simple_noform.html') ctx = { 'request': request, 'event': self.event, 'settings': self.settings, + 'explanation': self.explanation, } return template.render(ctx) - def _create_source(self, request, payment): - source = stripe.Source.create( - type='ideal', - amount=self._get_amount(payment), - currency=self.event.currency.lower(), - metadata={ - 'order': str(payment.order.id), - 'event': self.event.id, - 'code': payment.order.code - }, - statement_descriptor=self.statement_descriptor(payment), - redirect={ - 'return_url': build_absolute_uri(self.event, 'plugins:stripe:return', kwargs={ - 'order': payment.order.code, - 'payment': payment.pk, - 'hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest(), - }) - }, - **self.api_kwargs - ) - return source - def payment_is_valid_session(self, request): - return True +class StripeCC(StripeMethod): + identifier = 'stripe' + verbose_name = _('Credit card via Stripe') + public_name = _('Credit card') + method = 'card' + + @property + def walletqueries(self): + return [WalletType.APPLEPAY, WalletType.GOOGLEPAY] if self.settings.get("walletdetection", True, as_type=bool) else [] + + def payment_form_render(self, request, total, order=None) -> str: + account = get_stripe_account_key(self) + if not RegisteredApplePayDomain.objects.filter(account=account, domain=request.host).exists(): + stripe_verify_domain.apply_async(args=(self.event.pk, request.host)) + + template = get_template('plugins/stripe/checkout_payment_form_card.html') + ctx = { + 'request': request, + 'event': self.event, + 'total': self._decimal_to_int(total), + 'settings': self.settings, + 'explanation': self.explanation, + 'is_moto': self.is_moto(request) + } + return template.render(ctx) + + def _migrate_session(self, request): + keymap = { + 'payment_stripe_payment_method_id': 'payment_stripe_card_payment_method_id', + 'payment_stripe_brand': 'payment_stripe_card_brand', + 'payment_stripe_last4': 'payment_stripe_card_last4', + } + for old, new in keymap.items(): + if old in request.session: + request.session[new] = request.session.pop(old) def checkout_prepare(self, request, cart): - return True + self._migrate_session(request) + request.session['payment_stripe_card_brand'] = request.POST.get('stripe_card_brand', '') + request.session['payment_stripe_card_last4'] = request.POST.get('stripe_card_last4', '') + + return super().checkout_prepare(request, cart) + + def payment_is_valid_session(self, request): + self._migrate_session(request) + return super().payment_is_valid_session(request) + + def _handle_payment_intent(self, request, payment, intent=None): + self._migrate_session(request) + return super()._handle_payment_intent(request, payment, intent) + + def is_moto(self, request, payment=None) -> bool: + moto = self.settings.get('reseller_moto', False, as_type=bool) and \ + request.sales_channel.identifier == 'resellers' + + if payment: + return moto and payment.order.sales_channel == 'resellers' + + return moto + + def payment_presale_render(self, payment: OrderPayment) -> str: pi = payment.info_data or {} try: - return gettext('Bank account at {bank}').format(bank=pi["source"]["ideal"]["bank"]) - except: + if "latest_charge" in pi and isinstance(pi.get("latest_charge"), dict): + card = pi["latest_charge"]["payment_method_details"]["card"] + else: + card = pi["source"]["card"] + except KeyError: logger.exception('Could not parse payment data') return super().payment_presale_render(payment) + brand = card.get("brand", "").title() + last4 = card.get("last4", "****") + exp_month = card.get("exp_month") + exp_year = card.get("exp_year") + + return f'{self.public_name}: {brand} ************{last4}, {_("expires {month}/{year}").format(month=exp_month, year=exp_year)}' + + +class StripeSEPADirectDebit(StripeMethod): + identifier = 'stripe_sepa_debit' + verbose_name = _('SEPA Debit via Stripe') + public_name = _('SEPA Debit') + method = 'sepa_debit' + ia = InvoiceAddress() + + def payment_form_render(self, request: HttpRequest, total: Decimal, order: Order = None) -> str: + def get_invoice_address(): + if order and getattr(order, 'invoice_address', None): + request._checkout_flow_invoice_address = order.invoice_address + if not hasattr(request, '_checkout_flow_invoice_address'): + cs = cart_session(request) + iapk = cs.get('invoice_address') + if iapk: + try: + request._checkout_flow_invoice_address = InvoiceAddress.objects.get(pk=iapk, order__isnull=True) + except InvoiceAddress.DoesNotExist: + request._checkout_flow_invoice_address = InvoiceAddress() + else: + request._checkout_flow_invoice_address = InvoiceAddress() + return request._checkout_flow_invoice_address -class StripeAlipay(StripeMethod): - identifier = 'stripe_alipay' - verbose_name = _('Alipay via Stripe') - public_name = _('Alipay') - method = 'alipay' + cs = cart_session(request) + self.ia = get_invoice_address() - def payment_form_render(self, request) -> str: - template = get_template('pretixplugins/stripe/checkout_payment_form_simple_noform.html') + template = get_template('plugins/stripe/checkout_payment_form_sepadirectdebit.html') ctx = { 'request': request, 'event': self.event, 'settings': self.settings, + 'form': self.payment_form(request), + 'explanation': self.explanation, + 'email': order.email if order else cs.get('email', '') } return template.render(ctx) - def _create_source(self, request, payment): - source = stripe.Source.create( - type='alipay', - amount=self._get_amount(payment), - currency=self.event.currency.lower(), - metadata={ - 'order': str(payment.order.id), - 'event': self.event.id, - 'code': payment.order.code - }, - redirect={ - 'return_url': build_absolute_uri(self.event, 'plugins:stripe:return', kwargs={ - 'order': payment.order.code, - 'payment': payment.pk, - 'hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest(), - }) - }, - **self.api_kwargs - ) - return source + @property + def payment_form_fields(self): + return OrderedDict([ + ('accountname', forms.CharField( + label=_('Account Holder Name'), + initial=self.ia.name, + )), + ('line1', forms.CharField( + label=_('Account Holder Street'), + required=False, + widget=forms.TextInput(attrs={ + 'data-display-dependency': '#stripe_sepa_debit_country', + 'data-required-if': '#stripe_sepa_debit_country' + }), + initial=self.ia.street, + )), + ('postal_code', forms.CharField( + label=_('Account Holder Postal Code'), + required=False, + widget=forms.TextInput(attrs={ + 'data-display-dependency': '#stripe_sepa_debit_country', + 'data-required-if': '#stripe_sepa_debit_country' + }), + initial=self.ia.zipcode, + )), + ('city', forms.CharField( + label=_('Account Holder City'), + required=False, + widget=forms.TextInput(attrs={ + 'data-display-dependency': '#stripe_sepa_debit_country', + 'data-required-if': '#stripe_sepa_debit_country' + }), + initial=self.ia.city, + )), + ('country', forms.ChoiceField( + label=_('Account Holder Country'), + required=False, + choices=CachedCountries(), + widget=forms.Select(attrs={ + 'data-display-dependency': '#stripe_sepa_debit_country', + 'data-required-if': '#stripe_sepa_debit_country' + }), + initial=self.ia.country or guess_country(self.event), + )), + ]) + + def _payment_intent_kwargs(self, request, payment): + return { + 'mandate_data': { + 'customer_acceptance': { + 'type': 'online', + 'online': { + 'ip_address': get_client_ip(request), + 'user_agent': request.META.get('HTTP_USER_AGENT', ''), + } + }, + } + } + + def checkout_prepare(self, request, cart): + request.session['payment_stripe_sepa_debit_last4'] = request.POST.get('stripe_sepa_debit_last4', '') + request.session['payment_stripe_sepa_debit_bank'] = request.POST.get('stripe_sepa_debit_bank', '') + return super().checkout_prepare(request, cart) + + def execute_payment(self, request: HttpRequest, payment: OrderPayment): + try: + return super().execute_payment(request, payment) + finally: + for field in ['accountname', 'line1', 'postal_code', 'city', 'country']: + request.session.pop(f'payment_stripe_sepa_debit_{field}', None) + +class StripeAffirm(StripeMethod): + identifier = 'stripe_affirm' + verbose_name = _('Affirm via Stripe') + public_name = _('Affirm') + method = 'affirm' + redirect_action_handling = 'redirect' def payment_is_valid_session(self, request): - return True + return f'payment_stripe_{self.method}_payment_method_id' in request.session def checkout_prepare(self, request, cart): + request.session[f'payment_stripe_{self.method}_payment_method_id'] = None return True + def is_allowed(self, request: HttpRequest, total: Decimal=None) -> bool: + return Decimal(50.00) <= total <= Decimal(30000.00) and super().is_allowed(request, total) -class StripeBancontact(StripeMethod): - identifier = 'stripe_bancontact' - verbose_name = _('Bancontact via Stripe') - public_name = _('Bancontact') - method = 'bancontact' + def order_change_allowed(self, order: Order, request: HttpRequest=None) -> bool: + return Decimal(50.00) <= order.pending_sum <= Decimal(30000.00) and super().order_change_allowed(order, request) + + def _payment_intent_kwargs(self, request, payment): + return { + 'payment_method_data': { + 'type': 'affirm', + } + } + + def payment_form_render(self, request, total, order=None) -> str: + template = get_template('plugins/stripe/checkout_payment_form_simple_messaging_noform.html') + ctx = { + 'request': request, + 'event': self.event, + 'total': self._decimal_to_int(total), + 'explanation': self.explanation, + 'method': self.method, + } + return template.render(ctx) + + +class StripeKlarna(StripeRedirectMethod): + identifier = "stripe_klarna" + verbose_name = _("Klarna via Stripe") + public_name = _("Klarna") + method = "klarna" + allowed_countries = {"US", "CA", "AU", "NZ", "GB", "IE", "FR", "ES", "DE", "AT", "BE", "DK", "FI", "IT", "NL", "NO", "SE"} + redirect_in_widget_allowed = False + + def _detect_country(self, request, order=None): + def get_invoice_address(): + if order and getattr(order, 'invoice_address', None): + request._checkout_flow_invoice_address = order.invoice_address + if not hasattr(request, '_checkout_flow_invoice_address'): + cs = cart_session(request) + iapk = cs.get('invoice_address') + if not iapk: + request._checkout_flow_invoice_address = InvoiceAddress() + else: + try: + request._checkout_flow_invoice_address = InvoiceAddress.objects.get(pk=iapk, order__isnull=True) + except InvoiceAddress.DoesNotExist: + request._checkout_flow_invoice_address = InvoiceAddress() + return request._checkout_flow_invoice_address + + ia = get_invoice_address() + country = ia.country or get_country_from_request(request, self.event) or self.settings.merchant_country or "DE" + return str(country) if str(country) in self.allowed_countries else "DE" + + def _payment_intent_kwargs(self, request, payment): + return { + "payment_method_data": { + "type": "klarna", + "billing_details": { + "email": payment.order.email, + "address": { + "country": self._detect_country(request, payment.order), + }, + }, + } + } + + def payment_form_render(self, request, total, order=None) -> str: + template = get_template("plugins/stripe/checkout_payment_form_simple_messaging_noform.html") + ctx = { + "request": request, + "event": self.event, + "total": self._decimal_to_int(total), + "method": self.method, + "explanation": self.explanation, + "country": self._detect_country(request, order), + } + return template.render(ctx) + + def test_mode_message(self): + is_testmode = self.settings.secret_key and "_test_" in self.settings.secret_key + if self.settings.connect_client_id and not self.settings.secret_key: + is_testmode = True + + if is_testmode: + return mark_safe( + _( + "The Stripe plugin is operating in test mode. You can use one of many test " + "cards to perform a transaction. No money will actually be transferred." + ).format( + args='href="https://docs.klarna.com/resources/test-environment/sample-customer-data/" target="_blank"' + ) + ) + return None + + +class StripeRedirectWithAccountNamePaymentIntentMethod(StripeRedirectMethod): def payment_form_render(self, request) -> str: - template = get_template('pretixplugins/stripe/checkout_payment_form_simple.html') + template = get_template('plugins/stripe/checkout_payment_form_simple.html') ctx = { 'request': request, 'event': self.event, 'settings': self.settings, + 'explanation': self.explanation, 'form': self.payment_form(request) } return template.render(ctx) @@ -1066,54 +1344,124 @@ def payment_form_render(self, request) -> str: @property def payment_form_fields(self): return OrderedDict([ - ('account', forms.CharField(label=_('Account holder'), min_length=3)), + ('account', forms.CharField(label=_('Account holder'))), ]) - def _create_source(self, request, payment): + def execute_payment(self, request: HttpRequest, payment: OrderPayment): try: - source = stripe.Source.create( - type='bancontact', - amount=self._get_amount(payment), - currency=self.event.currency.lower(), - metadata={ - 'order': str(payment.order.id), - 'event': self.event.id, - 'code': payment.order.code - }, - owner={ - 'name': request.session.get('payment_stripe_bancontact_account') or gettext('unknown name') - }, - statement_descriptor=self.statement_descriptor(payment, 35), - redirect={ - 'return_url': build_absolute_uri(self.event, 'plugins:stripe:return', kwargs={ - 'order': payment.order.code, - 'payment': payment.pk, - 'hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest(), - }) - }, - **self.api_kwargs - ) - return source + return super().execute_payment(request, payment) finally: - if 'payment_stripe_bancontact_account' in request.session: - del request.session['payment_stripe_bancontact_account'] - - def payment_is_valid_session(self, request): - return ( - request.session.get('payment_stripe_bancontact_account', '') != '' - ) + if f'payment_stripe_{self.method}_account' in request.session: + del request.session[f'payment_stripe_{self.method}_account'] def checkout_prepare(self, request, cart): form = self.payment_form(request) if form.is_valid(): - request.session['payment_stripe_bancontact_account'] = form.cleaned_data['account'] + request.session[f"payment_stripe_{self.method}_payment_method_id"] = None + request.session[f'payment_stripe_{self.method}_account'] = form.cleaned_data['account'] return True return False + +class StripeGiropay(StripeRedirectWithAccountNamePaymentIntentMethod): + identifier = 'stripe_giropay' + verbose_name = _('giropay via Stripe') + public_name = _('giropay') + method = 'giropay' + explanation = _( + 'giropay is an online payment method available to all customers of most German banks, usually after one-time ' + 'activation. Please keep your online banking account and login information available.' + ) + redirect_in_widget_allowed = False + + def _payment_intent_kwargs(self, request, payment): + return { + "payment_method_data": { + "type": "giropay", + "giropay": {}, + "billing_details": { + "name": request.session.get(f"payment_stripe_{self.method}_account", gettext("unknown name")) + }, + } + } + def payment_presale_render(self, payment: OrderPayment) -> str: pi = payment.info_data or {} try: - return gettext('Bank account at {bank}').format(bank=pi["source"]["bancontact"]["bank_name"]) + bank_name = ( + pi.get("latest_charge", {}).get("payment_method_details", {}).get("giropay", {}).get("bank_name") or + pi.get("source", {}).get("giropay", {}).get("bank_name", "?") + ) + return gettext('Bank account at {bank}').format(bank=bank_name) + except Exception: + logger.exception('Could not parse payment data') + return super().payment_presale_render(payment) + + +class StripeIdeal(StripeRedirectMethod): + identifier = 'stripe_ideal' + verbose_name = _('iDEAL via Stripe') + public_name = _('iDEAL') + method = 'ideal' + explanation = _( + 'iDEAL is an online payment method available to customers of Dutch banks. Please keep your online ' + 'banking account and login information available.' + ) + redirect_in_widget_allowed = False + + def payment_presale_render(self, payment: OrderPayment) -> str: + pi = payment.info_data or {} + try: + return gettext('Bank account at {bank}').format( + bank=( + pi.get("latest_charge", {}).get("payment_method_details", {}).get("ideal", {}).get("bank") or + pi.get("source", {}).get("ideal", {}).get("bank", "?") + ).replace("_", " ").title() + ) + except: + logger.exception('Could not parse payment data') + return super().payment_presale_render(payment) + + +class StripeAlipay(StripeRedirectMethod): + identifier = 'stripe_alipay' + verbose_name = _('Alipay via Stripe') + public_name = _('Alipay') + method = 'alipay' + confirmation_method = 'automatic' + explanation = _( + 'This payment method is available to customers of the Chinese payment system Alipay. Please keep ' + 'your login information available.' + ) + + +class StripeBancontact(StripeRedirectWithAccountNamePaymentIntentMethod): + identifier = 'stripe_bancontact' + verbose_name = _('Bancontact via Stripe') + public_name = _('Bancontact') + method = 'bancontact' + redirect_in_widget_allowed = False + + def _payment_intent_kwargs(self, request, payment): + return { + "payment_method_data": { + "type": "bancontact", + "giropay": {}, + "billing_details": { + "name": request.session.get(f"payment_stripe_{self.method}_account") or gettext("unknown name") + }, + } + } + + def payment_presale_render(self, payment: OrderPayment) -> str: + pi = payment.info_data or {} + try: + return gettext('Bank account at {bank}').format( + bank=( + pi.get("latest_charge", {}).get("payment_method_details", {}).get("bancontact", {}).get("bank_name") or + pi.get("source", {}).get("bancontact", {}).get("bank_name", "?") + ) + ) except: logger.exception('Could not parse payment data') return super().payment_presale_render(payment) @@ -1122,15 +1470,17 @@ def payment_presale_render(self, payment: OrderPayment) -> str: class StripeSofort(StripeMethod): identifier = 'stripe_sofort' verbose_name = _('SOFORT via Stripe') - public_name = _('SOFORT') + public_name = _('SOFORT (instant bank transfer)') method = 'sofort' + redirect_in_widget_allowed = False def payment_form_render(self, request) -> str: - template = get_template('pretixplugins/stripe/checkout_payment_form_simple.html') + template = get_template('plugins/stripe/checkout_payment_form_simple.html') ctx = { 'request': request, 'event': self.event, 'settings': self.settings, + 'explanation': self.explanation, 'form': self.payment_form(request) } return template.render(ctx) @@ -1147,46 +1497,35 @@ def payment_form_fields(self): ))), ]) - def _create_source(self, request, payment): - source = stripe.Source.create( - type='sofort', - amount=self._get_amount(payment), - currency=self.event.currency.lower(), - metadata={ - 'order': str(payment.order.id), - 'event': self.event.id, - 'code': payment.order.code - }, - statement_descriptor=self.statement_descriptor(payment, 35), - sofort={ - 'country': request.session.get('payment_stripe_sofort_bank_country'), - }, - redirect={ - 'return_url': build_absolute_uri(self.event, 'plugins:stripe:return', kwargs={ - 'order': payment.order.code, - 'payment': payment.pk, - 'hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest(), - }) - }, - **self.api_kwargs - ) - return source + def _payment_intent_kwargs(self, request, payment): + return { + "payment_method_data": { + "type": "sofort", + "sofort": { + "country": (request.session.get(f"payment_stripe_{self.method}_bank_country") or "DE").upper() + }, + } + } + + def execute_payment(self, request: HttpRequest, payment: OrderPayment): + try: + return super().execute_payment(request, payment) + finally: + if f'payment_stripe_{self.method}_bank_country' in request.session: + del request.session[f'payment_stripe_{self.method}_bank_country'] def payment_is_valid_session(self, request): return ( - request.session.get('payment_stripe_sofort_bank_country', '') != '' + request.session.get(f'payment_stripe_{self.method}_bank_country', '') != '' ) def checkout_prepare(self, request, cart): form = self.payment_form(request) if form.is_valid(): - request.session['payment_stripe_sofort_bank_country'] = form.cleaned_data['bank_country'] + request.session[f'payment_stripe_{self.method}_bank_country'] = form.cleaned_data['bank_country'] return True return False - def payment_can_retry(self, payment): - return payment.state != OrderPayment.PAYMENT_STATE_PENDING and self._is_still_available(order=payment.order) - def payment_presale_render(self, payment: OrderPayment) -> str: pi = payment.info_data or {} try: @@ -1199,90 +1538,52 @@ def payment_presale_render(self, payment: OrderPayment) -> str: return super().payment_presale_render(payment) -class StripeEPS(StripeMethod): +class StripeEPS(StripeRedirectWithAccountNamePaymentIntentMethod): identifier = 'stripe_eps' verbose_name = _('EPS via Stripe') public_name = _('EPS') method = 'eps' + redirect_in_widget_allowed = False - def payment_form_render(self, request) -> str: - template = get_template('pretixplugins/stripe/checkout_payment_form_simple.html') - ctx = { - 'request': request, - 'event': self.event, - 'settings': self.settings, - 'form': self.payment_form(request) - } - return template.render(ctx) - - @property - def payment_form_fields(self): - return OrderedDict([ - ('account', forms.CharField(label=_('Account holder'))), - ]) - - def _create_source(self, request, payment): - try: - source = stripe.Source.create( - type='eps', - amount=self._get_amount(payment), - currency=self.event.currency.lower(), - metadata={ - 'order': str(payment.order.id), - 'event': self.event.id, - 'code': payment.order.code - }, - owner={ - 'name': request.session.get('payment_stripe_eps_account') or gettext('unknown name') - }, - statement_descriptor=self.statement_descriptor(payment), - redirect={ - 'return_url': build_absolute_uri(self.event, 'plugins:stripe:return', kwargs={ - 'order': payment.order.code, - 'payment': payment.pk, - 'hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest(), - }) + def _payment_intent_kwargs(self, request, payment): + return { + "payment_method_data": { + "type": "eps", + "giropay": {}, + "billing_details": { + "name": request.session.get(f"payment_stripe_{self.method}_account") or gettext("unknown name") }, - **self.api_kwargs - ) - return source - finally: - if 'payment_stripe_eps_account' in request.session: - del request.session['payment_stripe_eps_account'] - - def payment_is_valid_session(self, request): - return ( - request.session.get('payment_stripe_eps_account', '') != '' - ) - - def checkout_prepare(self, request, cart): - form = self.payment_form(request) - if form.is_valid(): - request.session['payment_stripe_eps_account'] = form.cleaned_data['account'] - return True - return False + } + } def payment_presale_render(self, payment: OrderPayment) -> str: pi = payment.info_data or {} try: - return gettext('Bank account at {bank}').format(bank=pi["source"]["eps"]["bank"].replace('_', '').title()) + return gettext('Bank account at {bank}').format( + bank=( + pi.get("latest_charge", {}).get("payment_method_details", {}).get("eps", {}).get("bank") or + pi.get("source", {}).get("eps", {}).get("bank", "?") + ).replace("_", " ").title() + ) except: logger.exception('Could not parse payment data') return super().payment_presale_render(payment) -class StripeMultibanco(StripeMethod): +class StripeMultibanco(StripeSourceMethod): identifier = 'stripe_multibanco' verbose_name = _('Multibanco via Stripe') public_name = _('Multibanco') method = 'multibanco' + redirect_in_widget_allowed = False def payment_form_render(self, request) -> str: - template = get_template('pretixplugins/stripe/checkout_payment_form_simple_noform.html') + template = get_template('plugins/stripe/checkout_payment_form_simple_noform.html') ctx = { 'request': request, 'event': self.event, 'settings': self.settings, + 'explanation': self.explanation, 'form': self.payment_form(request) } return template.render(ctx) @@ -1304,7 +1605,7 @@ def _create_source(self, request, payment): 'return_url': build_absolute_uri(self.event, 'plugins:stripe:return', kwargs={ 'order': payment.order.code, 'payment': payment.pk, - 'hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest(), + 'hash': payment.order.tagged_secret('plugins:stripe'), }) }, **self.api_kwargs @@ -1318,132 +1619,98 @@ def checkout_prepare(self, request, cart): return True -class StripePrzelewy24(StripeMethod): +class StripePrzelewy24(StripeRedirectMethod): identifier = 'stripe_przelewy24' verbose_name = _('Przelewy24 via Stripe') public_name = _('Przelewy24') - method = 'przelewy24' - - def payment_form_render(self, request) -> str: - template = get_template('pretixplugins/stripe/checkout_payment_form_simple_noform.html') - ctx = { - 'request': request, - 'event': self.event, - 'settings': self.settings, - 'form': self.payment_form(request) + method = 'p24' + explanation = _( + 'Przelewy24 is an online payment method available to customers of Polish banks. Please keep your online ' + 'banking account and login information available.' + ) + redirect_in_widget_allowed = False + + def _payment_intent_kwargs(self, request, payment): + return { + "payment_method_data": { + "type": "p24", + "billing_details": { + "email": payment.order.email + }, + } } - return template.render(ctx) - def _create_source(self, request, payment): - source = stripe.Source.create( - type='p24', - amount=self._get_amount(payment), - currency=self.event.currency.lower(), - metadata={ - 'order': str(payment.order.id), - 'event': self.event.id, - 'code': payment.order.code - }, - owner={ - 'email': payment.order.email - }, - statement_descriptor=self.statement_descriptor(payment, 35), - redirect={ - 'return_url': build_absolute_uri(self.event, 'plugins:stripe:return', kwargs={ - 'order': payment.order.code, - 'payment': payment.pk, - 'hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest(), - }) - }, - **self.api_kwargs - ) - return source - - def payment_is_valid_session(self, request): - return True - - def checkout_prepare(self, request, cart): - return True + @property + def is_enabled(self) -> bool: + return self.settings.get('_enabled', as_type=bool) and self.settings.get('method_przelewy24', as_type=bool) def payment_presale_render(self, payment: OrderPayment) -> str: pi = payment.info_data or {} try: - return gettext('Bank account at {bank}').format(bank=pi["source"]["p24"]["bank"].replace('_', '').title()) - except: + bank_name = ( + pi.get("latest_charge", {}).get("payment_method_details", {}).get("p24", {}).get("bank") or + pi.get("source", {}).get("p24", {}).get("bank", "?") + ).replace("_", " ").title() + return gettext('Bank account at {bank}').format(bank=bank_name) + except Exception: logger.exception('Could not parse payment data') return super().payment_presale_render(payment) -class StripeWeChatPay(StripeMethod): +class StripeWeChatPay(StripeRedirectMethod): identifier = 'stripe_wechatpay' verbose_name = _('WeChat Pay via Stripe') public_name = _('WeChat Pay') - method = 'wechatpay' + method = 'wechat_pay' + confirmation_method = 'automatic' + explanation = _( + 'This payment method is available to users of the Chinese app WeChat. Please keep your login information ' + 'available.' + ) - def payment_form_render(self, request) -> str: - template = get_template('pretixplugins/stripe/checkout_payment_form_simple_noform.html') - ctx = { - 'request': request, - 'event': self.event, - 'settings': self.settings, - 'form': self.payment_form(request) - } - return template.render(ctx) + @property + def is_enabled(self) -> bool: + return self.settings.get('_enabled', as_type=bool) and self.settings.get('method_wechatpay', as_type=bool) - def _create_source(self, request, payment): - source = stripe.Source.create( - type='wechat', - amount=self._get_amount(payment), - currency=self.event.currency.lower(), - metadata={ - 'order': str(payment.order.id), - 'event': self.event.id, - 'code': payment.order.code - }, - statement_descriptor=self.statement_descriptor(payment, 32), - redirect={ - 'return_url': build_absolute_uri(self.event, 'plugins:stripe:return', kwargs={ - 'order': payment.order.code, - 'payment': payment.pk, - 'hash': hashlib.sha1(payment.order.secret.lower().encode()).hexdigest(), - }) + def _payment_intent_kwargs(self, request, payment): + return { + "payment_method_data": { + "type": "wechat_pay", }, - **self.api_kwargs - ) - return source + "payment_method_options": { + "wechat_pay": { + "client": "web" + }, + } + } - def payment_is_valid_session(self, request): - return True - def checkout_prepare(self, request, cart): - return True +class StripePayPal(StripeRedirectMethod): + identifier = 'stripe_paypal' + verbose_name = _('PayPal via Stripe') + public_name = _('PayPal') + method = 'paypal' - def execute_payment(self, request: HttpRequest, payment: OrderPayment): - self._init_api() - try: - source = self._create_source(request, payment) - except stripe.error.StripeError as e: - if e.json_body and 'err' in e.json_body: - err = e.json_body['error'] - logger.exception('Stripe error: %s' % str(err)) - else: - err = {'message': str(e)} - logger.exception('Stripe error: %s' % str(e)) - payment.fail(info={ - 'error': True, - 'message': err['message'], - }) - raise PaymentException(_('We had trouble communicating with Stripe. Please try again and get in touch ' - 'with us if this problem persists.')) - ReferencedStripeObject.objects.get_or_create( - reference=source.id, - defaults={'order': payment.order, 'payment': payment} - ) - payment.info = str(source) - payment.save() +class StripeSwish(StripeRedirectMethod): + identifier = 'stripe_swish' + verbose_name = _('Swish via Stripe') + public_name = _('Swish') + method = 'swish' + confirmation_method = 'automatic' + explanation = _( + 'This payment method is available to users of the Swedish apps Swish and BankID. Please have your app ' + 'ready.' + ) - return eventreverse(request.event, 'presale:event.order', kwargs={ - 'order': payment.order.code, - 'secret': payment.order.secret - }) + def _payment_intent_kwargs(self, request, payment): + return { + "payment_method_data": { + "type": "swish", + }, + "payment_method_options": { + "swish": { + "reference": payment.order.full_code, + }, + } + } diff --git a/src/pretix/plugins/stripe/signals.py b/src/pretix/plugins/stripe/signals.py index ddccc9205..a26cb128b 100644 --- a/src/pretix/plugins/stripe/signals.py +++ b/src/pretix/plugins/stripe/signals.py @@ -3,32 +3,37 @@ from django import forms from django.dispatch import receiver +from django.http import HttpRequest from django.template.loader import get_template from django.urls import resolve, reverse from django.utils.translation import gettext_lazy as _ +from paypalhttp import HttpResponse from pretix.base.forms import SecretKeySettingsField +from pretix.base.middleware import _merge_csp, _parse_csp, _render_csp from pretix.base.settings import settings_hierarkey from pretix.base.signals import ( logentry_display, register_global_settings, register_payment_providers, - requiredaction_display, ) from pretix.control.signals import nav_organizer from pretix.plugins.stripe.forms import StripeKeyValidator -from pretix.presale.signals import html_head +from pretix.plugins.stripe.payment import StripeMethod +from pretix.presale.signals import html_head, process_response @receiver(register_payment_providers, dispatch_uid="payment_stripe") def register_payment_provider(sender, **kwargs): from .payment import ( - StripeAlipay, StripeBancontact, StripeCC, StripeEPS, StripeGiropay, - StripeIdeal, StripeMultibanco, StripePrzelewy24, StripeSettingsHolder, - StripeSofort, StripeWeChatPay, + StripeAffirm, StripeAlipay, StripeBancontact, StripeCC, StripeEPS, + StripeGiropay, StripeIdeal, StripeKlarna, StripeMultibanco, + StripePayPal, StripePrzelewy24, StripeSEPADirectDebit, + StripeSettingsHolder, StripeSofort, StripeSwish, StripeWeChatPay, ) return [ StripeSettingsHolder, StripeCC, StripeGiropay, StripeIdeal, StripeAlipay, StripeBancontact, - StripeSofort, StripeEPS, StripeMultibanco, StripePrzelewy24, StripeWeChatPay + StripeSofort, StripeEPS, StripeMultibanco, StripePrzelewy24, StripeWeChatPay, + StripeSEPADirectDebit, StripeAffirm, StripeKlarna, StripePayPal, StripeSwish ] @@ -39,7 +44,7 @@ def html_head_presale(sender, request=None, **kwargs): provider = StripeSettingsHolder(sender) url = resolve(request.path_info) if provider.settings.get('_enabled', as_type=bool) and ("checkout" in url.url_name or "order.pay" in url.url_name): - template = get_template('pretixplugins/stripe/presale_head.html') + template = get_template('plugins/stripe/presale_head.html') ctx = { 'event': sender, 'settings': provider.settings, @@ -86,7 +91,7 @@ def pretixcontrol_logentry_display(sender, logentry, **kwargs): return _('Stripe reported an event: {}').format(text) -settings_hierarkey.add_default('payment_stripe_method_cc', True, bool) +settings_hierarkey.add_default('payment_stripe_method_card', True, bool) settings_hierarkey.add_default('payment_stripe_reseller_moto', False, bool) @@ -143,25 +148,6 @@ def register_global_settings(sender, **kwargs): ]) -@receiver(signal=requiredaction_display, dispatch_uid="stripe_requiredaction_display") -def pretixcontrol_action_display(sender, action, request, **kwargs): - # DEPRECATED - if not action.action_type.startswith('pretix.plugins.stripe'): - return - - data = json.loads(action.data) - - if action.action_type == 'pretix.plugins.stripe.refund': - template = get_template('pretixplugins/stripe/action_refund.html') - elif action.action_type == 'pretix.plugins.stripe.overpaid': - template = get_template('pretixplugins/stripe/action_overpaid.html') - elif action.action_type == 'pretix.plugins.stripe.double': - template = get_template('pretixplugins/stripe/action_double.html') - - ctx = {'data': data, 'event': sender, 'action': action} - return template.render(ctx, request) - - @receiver(nav_organizer, dispatch_uid="stripe_nav_organizer") def nav_o(sender, request, organizer, **kwargs): if request.user.has_active_staff_session(request.session.session_key): @@ -177,3 +163,40 @@ def nav_o(sender, request, organizer, **kwargs): 'active': 'settings.connect' in url.url_name, }] return [] + + +@receiver(signal=process_response, dispatch_uid="stripe_middleware_resp") +def signal_process_response(sender, request: HttpRequest, response: HttpResponse, **kwargs): + provider = StripeMethod(sender) + url = resolve(request.path_info) + + enabled = provider.settings.get('_enabled', as_type=bool) + relevant_urls = { + "event.order.pay.change", + "event.order.pay", + "event.checkout", + "plugins:stripe:sca", + "plugins:stripe:sca.return" + } + + if enabled and ( + url.url_name in relevant_urls or + (url.namespace == "plugins:stripe" and url.url_name in ["sca", "sca.return"]) + ): + if 'Content-Security-Policy' in response: + csp_header = _parse_csp(response['Content-Security-Policy']) + else: + csp_header = {} + + stripe_csps = { + 'connect-src': ['https://api.stripe.com'], + 'frame-src': ['https://js.stripe.com', 'https://hooks.stripe.com'], + 'script-src': ['https://js.stripe.com'], + } + + _merge_csp(csp_header, stripe_csps) + + if csp_header: + response['Content-Security-Policy'] = _render_csp(csp_header) + + return response diff --git a/src/pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.css b/src/pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.css similarity index 81% rename from src/pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.css rename to src/pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.css index c9e8a9faa..3ff086fc4 100644 --- a/src/pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.css +++ b/src/pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.css @@ -39,39 +39,39 @@ .sepText { left: 50%; } - #stripe-elements > div.hidden { + #stripe-card-elements > div.hidden { height: 0; padding-top: 0; padding-bottom: 0; overflow: hidden; display: block !important; } - #stripe-elements .stripe-or { + #stripe-card-elements .stripe-or { height: 16px; } - #stripe-elements .stripe-payment-request-button { + #stripe-card-elements .stripe-payment-request-button { height: 40px; } - #stripe-elements > div { + #stripe-card-elements > div { transition: height 0.3s ease-out, padding-top 0.3s ease-out, padding-bottom 0.3s ease-out; } } @media only screen and (min-width: 999px) { - #stripe-elements { + #stripe-card-elements { display: flex; flex-wrap: wrap; } .stripe-card-holder { flex-grow: 1; } - #stripe-elements > div.hidden { + #stripe-card-elements > div.hidden { width: 0; padding: 0; overflow: hidden; display: block !important; } - #stripe-elements > div { + #stripe-card-elements > div { transition: width 0.3s ease-out, padding-left 0.3s ease-out, padding-right 0.3s ease-out; } } diff --git a/src/pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js b/src/pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js new file mode 100644 index 000000000..16384d23e --- /dev/null +++ b/src/pretix/plugins/stripe/static/plugins/stripe/eventyay-stripe.js @@ -0,0 +1,427 @@ +/*global $, stripe_pubkey, stripe_loadingmessage, gettext */ +'use strict'; + +var stripeObj = { + stripe: null, + elements: null, + card: null, + sepa: null, + affirm: null, + klarna: null, + paymentRequest: null, + paymentRequestButton: null, + + 'pm_request': function (method, element, kwargs = {}) { + waitingDialog.show(gettext("Contacting Stripe …")); + $(".stripe-errors").hide(); + + stripeObj.stripe.createPaymentMethod(method, element, kwargs).then(function (result) { + waitingDialog.hide(); + if (result.error) { + $(".stripe-errors").stop().hide().removeClass("sr-only"); + $(".stripe-errors").html("
    " + result.error.message + "
    "); + $(".stripe-errors").slideDown(); + } else { + var $form = $("#stripe_" + method + "_payment_method_id").closest("form"); + // Insert the token into the form so it gets submitted to the server + $("#stripe_" + method + "_payment_method_id").val(result.paymentMethod.id); + if (method === 'card') { + $("#stripe_card_brand").val(result.paymentMethod.card.brand); + $("#stripe_card_last4").val(result.paymentMethod.card.last4); + } + if (method === 'sepa_debit') { + $("#stripe_sepa_debit_last4").val(result.paymentMethod.sepa_debit.last4); + } + // and submit + $form.get(0).submit(); + } + }).catch((e) => { + waitingDialog.hide(); + $(".stripe-errors").stop().hide().removeClass("sr-only"); + $(".stripe-errors").html("
    Technical error, please contact support: " + e + "
    "); + $(".stripe-errors").slideDown(); + }); + }, + 'load': function () { + if (stripeObj.stripe !== null) { + return; + } + $('.stripe-container').closest("form").find(".checkout-button-row .btn-primary").prop("disabled", true); + $.ajax( + { + url: 'https://js.stripe.com/v3/', + dataType: 'script', + success: function () { + if ($.trim($("#stripe_connectedAccountId").html())) { + stripeObj.stripe = Stripe($.trim($("#stripe_pubkey").html()), { + stripeAccount: $.trim($("#stripe_connectedAccountId").html()), + locale: $.trim($("body").attr("data-locale")) + }); + } else { + stripeObj.stripe = Stripe($.trim($("#stripe_pubkey").html()), { + locale: $.trim($("body").attr("data-locale")) + }); + } + stripeObj.elements = stripeObj.stripe.elements(); + if ($.trim($("#stripe_merchantcountry").html()) !== "") { + try { + stripeObj.paymentRequest = stripeObj.stripe.paymentRequest({ + country: $("#stripe_merchantcountry").html(), + currency: $("#stripe_card_currency").val().toLowerCase(), + total: { + label: gettext('Total'), + amount: parseInt($("#stripe_card_total").val()) + }, + displayItems: [], + requestPayerName: false, + requestPayerEmail: false, + requestPayerPhone: false, + requestShipping: false, + }); + + stripeObj.paymentRequest.on('paymentmethod', function (ev) { + ev.complete('success'); + + var $form = $("#stripe_card_payment_method_id").closest("form"); + // Insert the token into the form so it gets submitted to the server + $("#stripe_card_payment_method_id").val(ev.paymentMethod.id); + $("#stripe_card_brand").val(ev.paymentMethod.card.brand); + $("#stripe_card_last4").val(ev.paymentMethod.card.last4); + // and submit + $form.get(0).submit(); + }); + } catch (e) { + stripeObj.paymentRequest = null; + } + } else { + stripeObj.paymentRequest = null; + } + if ($("#stripe-card").length) { + stripeObj.card = stripeObj.elements.create('card', { + 'style': { + 'base': { + 'fontFamily': '"Open Sans","OpenSans","Helvetica Neue",Helvetica,Arial,sans-serif', + 'fontSize': '14px', + 'color': '#555555', + 'lineHeight': '1.42857', + 'border': '1px solid #ccc', + '::placeholder': { + color: 'rgba(0,0,0,0.4)', + }, + }, + 'invalid': { + 'color': 'red', + }, + }, + classes: { + focus: 'is-focused', + invalid: 'has-error', + } + }); + stripeObj.card.mount("#stripe-card"); + stripeObj.card.on('ready', function () { + $('.stripe-container').closest("form").find(".checkout-button-row .btn-primary").prop("disabled", false); + }); + } + if ($("#stripe-sepa").length) { + stripeObj.sepa = stripeObj.elements.create('iban', { + 'style': { + 'base': { + 'fontFamily': '"Open Sans","OpenSans","Helvetica Neue",Helvetica,Arial,sans-serif', + 'fontSize': '14px', + 'color': '#555555', + 'lineHeight': '1.42857', + 'border': '1px solid #ccc', + '::placeholder': { + color: 'rgba(0,0,0,0.4)', + }, + }, + 'invalid': { + 'color': 'red', + }, + }, + supportedCountries: ['SEPA'], + classes: { + focus: 'is-focused', + invalid: 'has-error', + } + }); + stripeObj.sepa.on('change', function (event) { + if (['AD', 'PF', 'TF', 'GI', 'GB', 'GG', 'VA', 'IM', 'JE', 'MC', 'NC', 'BL', 'PM', 'SM', 'CH', 'WF'].indexOf(event.country) > 0) { + $("#stripe_sepa_debit_country").prop('checked', true); + $("#stripe_sepa_debit_country").change(); + } else { + $("#stripe_sepa_debit_country").prop('checked', false); + $("#stripe_sepa_debit_country").change(); + } + if (event.bankName) { + $("#stripe_sepa_debit_bank").val(event.bankName); + } + }); + stripeObj.sepa.mount("#stripe-sepa"); + stripeObj.sepa.on('ready', function () { + $('.stripe-container').closest("form").find(".checkout-button-row .btn-primary").prop("disabled", false); + }); + } + if ($("#stripe-affirm").length) { + stripeObj.affirm = stripeObj.elements.create('affirmMessage', { + 'amount': parseInt($("#stripe_affirm_total").val()), + 'currency': $("#stripe_affirm_currency").val(), + }); + + stripeObj.affirm.mount('#stripe-affirm'); + } + if ($("#stripe-klarna").length) { + try { + stripeObj.klarna = stripeObj.elements.create('paymentMethodMessaging', { + 'amount': parseInt($("#stripe_klarna_total").val()), + 'currency': $("#stripe_klarna_currency").val(), + 'countryCode': $("#stripe_klarna_country").val(), + 'paymentMethodTypes': ['klarna'], + }); + + stripeObj.klarna.mount('#stripe-klarna'); + } catch (e) { + console.error(e); + $("#stripe-klarna").html("
    Technical error, please contact support: " + e + "
    "); + } + } + if ($("#stripe-payment-request-button").length && stripeObj.paymentRequest != null) { + stripeObj.paymentRequestButton = stripeObj.elements.create('paymentRequestButton', { + paymentRequest: stripeObj.paymentRequest, + }); + + stripeObj.paymentRequest.canMakePayment().then(function (result) { + if (result) { + stripeObj.paymentRequestButton.mount('#stripe-payment-request-button'); + $('#stripe-card-elements .stripe-or').removeClass("hidden"); + $('#stripe-payment-request-button').parent().removeClass("hidden"); + } else { + $('#stripe-payment-request-button').hide(); + document.getElementById('stripe-payment-request-button').style.display = 'none'; + } + }); + } + } + } + ); + }, + 'withStripe': function (callback) { + $.ajax({ + url: 'https://js.stripe.com/v3/', + dataType: 'script', + success: function () { + if ($.trim($("#stripe_connectedAccountId").html())) { + stripeObj.stripe = Stripe($.trim($("#stripe_pubkey").html()), { + stripeAccount: $.trim($("#stripe_connectedAccountId").html()), + locale: $.trim($("body").attr("data-locale")) + }); + } else { + stripeObj.stripe = Stripe($.trim($("#stripe_pubkey").html()), { + locale: $.trim($("body").attr("data-locale")) + }); + } + callback(); + } + }); + }, + 'handleAlipayAction': function (payment_intent_client_secret) { + stripeObj.withStripe(function () { + stripeObj.stripe.confirmAlipayPayment( + payment_intent_client_secret, + { + return_url: window.location.href + } + ).then(function (result) { + if (result.error) { + waitingDialog.hide(); + $(".stripe-errors").stop().hide().removeClass("sr-only"); + $(".stripe-errors").html("
    Technical error, please contact support: " + result.error.message + "
    "); + $(".stripe-errors").slideDown(); + } else { + waitingDialog.show(gettext("Confirming your payment …")); + } + }); + }); + }, + 'handleWechatAction': function (payment_intent_client_secret) { + stripeObj.withStripe(function () { + stripeObj.stripe.confirmWechatPayPayment( + payment_intent_client_secret, + { + payment_method_options: { + wechat_pay: { + client: 'web', + }, + }, + } + ).then(function (result) { + if (result.error) { + waitingDialog.hide(); + $(".stripe-errors").stop().hide().removeClass("sr-only"); + $(".stripe-errors").html("
    Technical error, please contact support: " + result.error.message + "
    "); + $(".stripe-errors").slideDown(); + } else { + waitingDialog.show(gettext("Confirming your payment …")); + location.reload(); + } + }); + }); + }, + 'handleCardAction': function (payment_intent_client_secret) { + stripeObj.withStripe(function () { + stripeObj.stripe.handleCardAction( + payment_intent_client_secret + ).then(function (result) { + if (result.error) { + waitingDialog.hide(); + $(".stripe-errors").stop().hide().removeClass("sr-only"); + $(".stripe-errors").html("
    Technical error, please contact support: " + result.error.message + "
    "); + $(".stripe-errors").slideDown(); + } else { + waitingDialog.show(gettext("Confirming your payment …")); + location.reload(); + } + }); + }); + }, + 'handlePaymentRedirectAction': function (payment_intent_next_action_redirect_url) { + waitingDialog.show(gettext("Contacting your bank …")); + + let payment_intent_redirect_action_handling = $.trim($("#stripe_payment_intent_redirect_action_handling").html()); + if (payment_intent_redirect_action_handling === 'iframe') { + let iframe = document.createElement('iframe'); + iframe.src = payment_intent_next_action_redirect_url; + iframe.className = 'embed-responsive-item'; + $('#scacontainer').append(iframe); + $('#scacontainer iframe').on("load", function () { + waitingDialog.hide(); + }); + } else if (payment_intent_redirect_action_handling === 'redirect') { + window.location.href = payment_intent_next_action_redirect_url; + } + } +}; +$(function () { + if ($("#stripe_payment_intent_SCA_status").length) { + let payment_intent_redirect_action_handling = $.trim($("#stripe_payment_intent_redirect_action_handling").html()); + let order_status = $.trim($("#order_status").html()); + let order_url = $.trim($("#order_url").html()) + + if (payment_intent_redirect_action_handling === 'iframe') { + window.parent.postMessage('3DS-authentication-complete.' + order_status, '*'); + return; + } else if (payment_intent_redirect_action_handling === 'redirect') { + waitingDialog.show(gettext("Confirming your payment …")); + + if (order_status === 'p') { + window.location.href = order_url + '?paid=yes'; + } else { + window.location.href = order_url; + } + } + } else if ($("#stripe_payment_intent_next_action_redirect_url").length) { + let payment_intent_next_action_redirect_url = $.trim($("#stripe_payment_intent_next_action_redirect_url").html()); + stripeObj.handlePaymentRedirectAction(payment_intent_next_action_redirect_url); + } else if ($.trim($("#stripe_payment_intent_action_type").html()) === "wechat_pay_display_qr_code") { + let payment_intent_client_secret = $.trim($("#stripe_payment_intent_client_secret").html()); + stripeObj.handleWechatAction(payment_intent_client_secret); + } else if ($.trim($("#stripe_payment_intent_action_type").html()) === "alipay_handle_redirect") { + let payment_intent_client_secret = $.trim($("#stripe_payment_intent_client_secret").html()); + stripeObj.handleAlipayAction(payment_intent_client_secret); + } else if ($("#stripe_payment_intent_client_secret").length) { + let payment_intent_client_secret = $.trim($("#stripe_payment_intent_client_secret").html()); + stripeObj.handleCardAction(payment_intent_client_secret); + } + + $(window).on("message onmessage", function (e) { + if (typeof e.originalEvent.data === "string" && e.originalEvent.data.startsWith('3DS-authentication-complete.')) { + waitingDialog.show(gettext("Confirming your payment …")); + $('#scacontainer').hide(); + $('#continuebutton').removeClass('hidden'); + + if (e.originalEvent.data.split('.')[1] == 'p') { + window.location.href = $('#continuebutton').attr('href') + '?paid=yes'; + } else { + window.location.href = $('#continuebutton').attr('href'); + } + } + }); + + if (!$(".stripe-container").length) + return; + + if ( + $("input[name=payment][value=stripe]").is(':checked') + || $("input[name=payment][value=stripe_sepa_debit]").is(':checked') + || $("input[name=payment][value=stripe_affirm]").is(':checked') + || $("input[name=payment][value=stripe_klarna]").is(':checked') + || $(".payment-redo-form").length) { + stripeObj.load(); + } else { + $("input[name=payment]").change(function () { + if (['stripe', 'stripe_sepa_debit', 'stripe_affirm', 'stripe_klarna'].indexOf($(this).val()) > -1) { + stripeObj.load(); + } + }) + } + + $("#stripe_other_card").click( + function (e) { + $("#stripe_card_payment_method_id").val(""); + $("#stripe-current-card").slideUp(); + $("#stripe-card-elements").slideDown(); + + e.preventDefault(); + return false; + } + ); + + if ($("#stripe-current-card").length) { + $("#stripe-card-elements").hide(); + } + + $("#stripe_other_account").click( + function (e) { + $("#stripe_sepa_debit_payment_method_id").val(""); + $("#stripe-current-account").slideUp(); + $('.stripe-sepa_debit-form').slideDown(); + + e.preventDefault(); + return false; + } + ); + + if ($("#stripe-current-account").length) { + $('.stripe-sepa_debit-form').hide(); + } + + $('.stripe-container').closest("form").submit( + function () { + if ($("input[name=card_new]").length && !$("input[name=card_new]").prop('checked')) { + return null; + } + if (($("input[name=payment][value=stripe]").prop('checked') || $("input[name=payment][type=radio]").length === 0) + && $("#stripe_card_payment_method_id").val() == "") { + stripeObj.pm_request('card', stripeObj.card); + return false; + } + + if (($("input[name=payment][value=stripe_sepa_debit]").prop('checked')) && $("#stripe_sepa_debit_payment_method_id").val() == "") { + stripeObj.pm_request('sepa_debit', stripeObj.sepa, { + billing_details: { + name: $("#id_payment_stripe_sepa_debit-accountname").val(), + email: $("#stripe_sepa_debit_email").val(), + address: { + line1: $("#id_payment_stripe_sepa_debit-line1").val(), + postal_code: $("#id_payment_stripe_sepa_debit-postal_code").val(), + city: $("#id_payment_stripe_sepa_debit-city").val(), + country: $("#id_payment_stripe_sepa_debit-country").val(), + } + } + }); + return false; + } + } + ); +}); \ No newline at end of file diff --git a/src/pretix/plugins/stripe/static/plugins/stripe/stripe_logo.svg b/src/pretix/plugins/stripe/static/plugins/stripe/stripe_logo.svg new file mode 100644 index 000000000..3389f62cb --- /dev/null +++ b/src/pretix/plugins/stripe/static/plugins/stripe/stripe_logo.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + diff --git a/src/pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js b/src/pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js deleted file mode 100644 index b2afdd3c3..000000000 --- a/src/pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js +++ /dev/null @@ -1,235 +0,0 @@ -/*global $, stripe_pubkey, stripe_loadingmessage, gettext */ -'use strict'; - -var pretixstripe = { - stripe: null, - elements: null, - card: null, - paymentRequest: null, - paymentRequestButton: null, - - 'cc_request': function () { - waitingDialog.show(gettext("Contacting Stripe …")); - $(".stripe-errors").hide(); - - // ToDo: 'card' --> proper type of payment method - pretixstripe.stripe.createPaymentMethod('card', pretixstripe.card).then(function (result) { - waitingDialog.hide(); - if (result.error) { - $(".stripe-errors").stop().hide().removeClass("sr-only"); - $(".stripe-errors").html("
    " + result.error.message + "
    "); - $(".stripe-errors").slideDown(); - } else { - var $form = $("#stripe_payment_method_id").closest("form"); - // Insert the token into the form so it gets submitted to the server - $("#stripe_payment_method_id").val(result.paymentMethod.id); - $("#stripe_card_brand").val(result.paymentMethod.card.brand); - $("#stripe_card_last4").val(result.paymentMethod.card.last4); - // and submit - $form.get(0).submit(); - } - }); - }, - 'load': function () { - if (pretixstripe.stripe !== null) { - return; - } - $('.stripe-container').closest("form").find(".checkout-button-row .btn-primary").prop("disabled", true); - $.ajax( - { - url: 'https://js.stripe.com/v3/', - dataType: 'script', - success: function () { - if ($.trim($("#stripe_connectedAccountId").html())) { - pretixstripe.stripe = Stripe($.trim($("#stripe_pubkey").html()), { - stripeAccount: $.trim($("#stripe_connectedAccountId").html()), - locale: $.trim($("body").attr("data-locale")) - }); - } else { - pretixstripe.stripe = Stripe($.trim($("#stripe_pubkey").html()), { - locale: $.trim($("body").attr("data-locale")) - }); - } - pretixstripe.elements = pretixstripe.stripe.elements(); - if ($.trim($("#stripe_merchantcountry").html()) !== "") { - try { - pretixstripe.paymentRequest = pretixstripe.stripe.paymentRequest({ - country: $("#stripe_merchantcountry").html(), - currency: $("#stripe_currency").val().toLowerCase(), - total: { - label: gettext('Total'), - amount: parseInt($("#stripe_total").val()) - }, - displayItems: [], - requestPayerName: false, - requestPayerEmail: false, - requestPayerPhone: false, - requestShipping: false, - }); - - pretixstripe.paymentRequest.on('paymentmethod', function (ev) { - ev.complete('success'); - - var $form = $("#stripe_payment_method_id").closest("form"); - // Insert the token into the form so it gets submitted to the server - $("#stripe_payment_method_id").val(ev.paymentMethod.id); - $("#stripe_card_brand").val(ev.paymentMethod.card.brand); - $("#stripe_card_last4").val(ev.paymentMethod.card.last4); - // and submit - $form.get(0).submit(); - }); - } catch (e) { - pretixstripe.paymentRequest = null; - } - } else { - pretixstripe.paymentRequest = null; - } - if ($("#stripe-card").length) { - pretixstripe.card = pretixstripe.elements.create('card', { - 'style': { - 'base': { - 'fontFamily': '"Open Sans","OpenSans","Helvetica Neue",Helvetica,Arial,sans-serif', - 'fontSize': '14px', - 'color': '#555555', - 'lineHeight': '1.42857', - 'border': '1px solid #ccc', - '::placeholder': { - color: 'rgba(0,0,0,0.4)', - }, - }, - 'invalid': { - 'color': 'red', - }, - }, - classes: { - focus: 'is-focused', - invalid: 'has-error', - } - }); - pretixstripe.card.mount("#stripe-card"); - } - pretixstripe.card.on('ready', function () { - $('.stripe-container').closest("form").find(".checkout-button-row .btn-primary").prop("disabled", false); - }); - if ($("#stripe-payment-request-button").length && pretixstripe.paymentRequest != null) { - pretixstripe.paymentRequestButton = pretixstripe.elements.create('paymentRequestButton', { - paymentRequest: pretixstripe.paymentRequest, - }); - - pretixstripe.paymentRequest.canMakePayment().then(function(result) { - if (result) { - pretixstripe.paymentRequestButton.mount('#stripe-payment-request-button'); - $('#stripe-elements .stripe-or').removeClass("hidden"); - $('#stripe-payment-request-button').parent().removeClass("hidden"); - } else { - $('#stripe-payment-request-button').hide(); - document.getElementById('stripe-payment-request-button').style.display = 'none'; - } - }); - } - } - } - ); - }, - 'handleCardAction': function (payment_intent_client_secret) { - $.ajax({ - url: 'https://js.stripe.com/v3/', - dataType: 'script', - success: function () { - if ($.trim($("#stripe_connectedAccountId").html())) { - pretixstripe.stripe = Stripe($.trim($("#stripe_pubkey").html()), { - stripeAccount: $.trim($("#stripe_connectedAccountId").html()), - locale: $.trim($("body").attr("data-locale")) - }); - } else { - pretixstripe.stripe = Stripe($.trim($("#stripe_pubkey").html()), { - locale: $.trim($("body").attr("data-locale")) - }); - } - pretixstripe.stripe.handleCardAction( - payment_intent_client_secret - ).then(function (result) { - waitingDialog.show(gettext("Confirming your payment …")); - location.reload(); - }); - } - }); - }, - 'handleCardActioniFrame': function (payment_intent_next_action_redirect_url) { - waitingDialog.show(gettext("Contacting your bank …")); - let iframe = document.createElement('iframe'); - iframe.src = payment_intent_next_action_redirect_url; - iframe.className = 'embed-responsive-item'; - $('#scacontainer').append(iframe); - $('#scacontainer iframe').load(function () { - waitingDialog.hide(); - }); - } -}; -$(function () { - if ($("#stripe_payment_intent_SCA_status").length) { - window.parent.postMessage('3DS-authentication-complete.' + $.trim($("#order_status").html()), '*'); - return; - } else if ($("#stripe_payment_intent_next_action_redirect_url").length) { - let payment_intent_next_action_redirect_url = $.trim($("#stripe_payment_intent_next_action_redirect_url").html()); - pretixstripe.handleCardActioniFrame(payment_intent_next_action_redirect_url); - } else if ($("#stripe_payment_intent_client_secret").length) { - let payment_intent_client_secret = $.trim($("#stripe_payment_intent_client_secret").html()); - pretixstripe.handleCardAction(payment_intent_client_secret); - } - - $(window).on("message onmessage", function(e) { - if (typeof e.originalEvent.data === "string" && e.originalEvent.data.startsWith('3DS-authentication-complete.')) { - waitingDialog.show(gettext("Confirming your payment …")); - $('#scacontainer').hide(); - $('#continuebutton').removeClass('hidden'); - - if (e.originalEvent.data.split('.')[1] == 'p') { - window.location.href = $('#continuebutton').attr('href') + '?paid=yes'; - } else { - window.location.href = $('#continuebutton').attr('href'); - } - } - }); - - if (!$(".stripe-container").length) - return; - - if ($("input[name=payment][value=stripe]").is(':checked') || $(".payment-redo-form").length) { - pretixstripe.load(); - } else { - $("input[name=payment]").change(function () { - if ($(this).val() === 'stripe') { - pretixstripe.load(); - } - }) - } - - $("#stripe_other_card").click( - function (e) { - $("#stripe_payment_method_id").val(""); - $("#stripe-current-card").slideUp(); - $("#stripe-elements").slideDown(); - - e.preventDefault(); - return false; - } - ); - - if ($("#stripe-current-card").length) { - $("#stripe-elements").hide(); - } - - $('.stripe-container').closest("form").submit( - function () { - if ($("input[name=card_new]").length && !$("input[name=card_new]").prop('checked')) { - return null; - } - if (($("input[name=payment][value=stripe]").prop('checked') || $("input[name=payment][type=radio]").length === 0) - && $("#stripe_payment_method_id").val() == "") { - pretixstripe.cc_request(); - return false; - } - } - ); -}); \ No newline at end of file diff --git a/src/pretix/plugins/stripe/tasks.py b/src/pretix/plugins/stripe/tasks.py index f7260dee0..3d784b39b 100644 --- a/src/pretix/plugins/stripe/tasks.py +++ b/src/pretix/plugins/stripe/tasks.py @@ -30,22 +30,26 @@ def get_stripe_account_key(prov): @app.task(base=EventTask, max_retries=5, default_retry_delay=1) def stripe_verify_domain(event, domain): from pretix.plugins.stripe.payment import StripeCC + prov = StripeCC(event) account = get_stripe_account_key(prov) + api_kwargs = { + 'api_key': prov.settings.connect_secret_key or prov.settings.connect_test_secret_key + if prov.settings.connect_client_id and prov.settings.connect_user_id + else prov.settings.secret_key + } + + if prov.settings.connect_client_id and prov.settings.connect_user_id: + api_kwargs['stripe_account'] = prov.settings.connect_user_id + if RegisteredApplePayDomain.objects.filter(account=account, domain=domain).exists(): return try: - resp = stripe.ApplePayDomain.create( - domain_name=domain, - **prov.api_kwargs - ) + resp = stripe.ApplePayDomain.create(domain_name=domain, **api_kwargs) except stripe.error.StripeError: logger.exception('Could not verify domain with Stripe') else: if resp.livemode: - RegisteredApplePayDomain.objects.create( - domain=domain, - account=account - ) + RegisteredApplePayDomain.objects.create(domain=domain, account=account) diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html b/src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html similarity index 61% rename from src/pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html rename to src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html index 97f0e1233..cf555653a 100644 --- a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html +++ b/src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_confirm.html @@ -1,14 +1,24 @@ {% load i18n %} -{% if provider.method == "cc" %} +{% if provider.method == "card" %}

    {% blocktrans trimmed %} The total amount will be withdrawn from your credit card. {% endblocktrans %}

    {% trans "Card type" %}
    -
    {{ request.session.payment_stripe_brand }}
    +
    {{ request.session.payment_stripe_card_brand }}
    {% trans "Card number" %}
    -
    **** **** **** {{ request.session.payment_stripe_last4 }}
    +
    **** **** **** {{ request.session.payment_stripe_card_last4 }}
    +
    +{% elif provider.method == "sepa_debit" %} +

    {% blocktrans trimmed %} + The total amount will be withdrawn from your bank account. + {% endblocktrans %}

    +
    +
    {% trans "Banking Institution" %}
    +
    {{ request.session.payment_stripe_sepa_debit_bank }}
    +
    {% trans "Account number" %}
    +
    **** **** **** {{ request.session.payment_stripe_sepa_debit_last4 }}
    {% else %}

    {% blocktrans trimmed %} diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html b/src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html similarity index 72% rename from src/pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html rename to src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html index c9b2799aa..f6f7f74fa 100644 --- a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_cc.html +++ b/src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_card.html @@ -8,27 +8,23 @@

    {% endif %} -
    - -
    +
    - {% if request.session.payment_stripe_payment_method_id %} + {% if request.session.payment_stripe_card_payment_method_id %}
    -

    {% blocktrans trimmed %} - You already entered a card number that we will use to charge the payment amount. - {% endblocktrans %}

    +

    {% blocktrans trimmed %}You already entered a card number that we will use to charge the payment amount.{% endblocktrans %}

    {% trans "Card type" %}
    -
    {{ request.session.payment_stripe_brand }}
    +
    {{ request.session.payment_stripe_card_brand }}
    {% trans "Card number" %}
    **** **** **** - {{ request.session.payment_stripe_last4 }} + {{ request.session.payment_stripe_card_last4 }} @@ -37,7 +33,7 @@

    {% endif %} -
    +
    @@ -64,12 +60,10 @@

    Your payment will be processed by Stripe, Inc. Your credit card data will be transmitted directly to Stripe and never touches our servers. {% endblocktrans %} - - - - - + + + + +

    diff --git a/src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html b/src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html new file mode 100644 index 000000000..9b026a71f --- /dev/null +++ b/src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_sepadirectdebit.html @@ -0,0 +1,79 @@ +{% load i18n %} +{% load bootstrap3 %} + +
    + + +
    + + + + + + {% if request.session.payment_stripe_sepa_debit_payment_method_id %} +
    +

    {% blocktrans trimmed %} + You already entered a bank account that we will use to charge the payment amount. + {% endblocktrans %}

    +
    +
    {% trans "Banking Institution" %}
    +
    {{ request.session.payment_stripe_sepa_debit_bank }}
    +
    {% trans "Account number" %}
    +
    + **** **** **** + {{ request.session.payment_stripe_sepa_debit_last4 }} + +
    +
    +
    + {% endif %} + + +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + {% bootstrap_form form layout='horizontal' %} +
    + + +

    + {% blocktrans trimmed with sepa_creditor_name=settings.sepa_creditor_name %} + By providing your payment information and confirming this payment, you authorize (A) + {{ sepa_creditor_name }} and Stripe, our payment service provider and/or PPRO, its local service provider, + to send instructions to your bank to debit your account and (B) your bank to debit your account in + accordance with those instructions. As part of your rights, you are entitled to a refund from your bank + under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks + starting from the date on which your account was debited. Your rights are explained in a statement that you + can obtain from your bank. You agree to receive notifications for future debits up to 2 days before they + occur. + {% endblocktrans %} + + + + + +

    +
    diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html b/src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html similarity index 100% rename from src/pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html rename to src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple.html diff --git a/src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html b/src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html new file mode 100644 index 000000000..8ec70e22e --- /dev/null +++ b/src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_messaging_noform.html @@ -0,0 +1,21 @@ +{% load i18n %} +{% load bootstrap3 %} +
    +
    + + +
    + +

    + {% blocktrans trimmed %} + After you submitted your order, we will redirect you to the payment service provider to complete your + payment. You will then be redirected back here to get your tickets. + {% endblocktrans %} +

    + + + + {% if country %} + + {% endif %} +
    diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html b/src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html similarity index 100% rename from src/pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html rename to src/pretix/plugins/stripe/templates/plugins/stripe/checkout_payment_form_simple_noform.html diff --git a/src/pretix/plugins/stripe/templates/plugins/stripe/control.html b/src/pretix/plugins/stripe/templates/plugins/stripe/control.html new file mode 100644 index 000000000..5f90f887b --- /dev/null +++ b/src/pretix/plugins/stripe/templates/plugins/stripe/control.html @@ -0,0 +1,87 @@ +{% load i18n %} +{% load money %} + +{% if payment_info %} +
    + {% if "id" in payment_info %} +
    {% trans "Charge ID" %}
    +
    {{ payment_info.id }}
    + {% endif %} + {% if details %} + {% if details.card %} +
    {% trans "Card type" %}
    +
    {{ details.card.brand }}
    +
    {% trans "Card number" %}
    +
    + **** **** **** {{ details.card.last4 }} + {% if details.card.moto %} + {% trans "MOTO" %} + {% endif %} +
    + {% endif %} + {% if details.type == "sepa_debit" %} +
    {% trans "Bank" %}
    +
    {{ details.sepadirectdebit.bank_name }}
    + {% if details.sepadirectdebit.verified_name %} +
    {% trans "Payer name" %}
    +
    {{ details.sepadirectdebit.verified_name }}
    + {% endif %} + {% endif %} + {% if details.type == "giropay" %} +
    {% trans "Bank" %}
    +
    {{ details.giropay.bank_name }} ({{ details.giropay.bic }})
    + {% if details.giropay.verified_name %} +
    {% trans "Payer name" %}
    +
    {{ details.giropay.verified_name }}
    + {% endif %} + {% endif %} + {% if details.type == "eps" %} +
    {% trans "Bank" %}
    +
    {{ details.eps.bank }}
    + {% if details.eps.verified_name %} +
    {% trans "Payer name" %}
    +
    {{ details.eps.verified_name }}
    + {% endif %} + {% endif %} + {% if details.type == "bancontact" %} +
    {% trans "Bank" %}
    +
    {{ details.bancontact.bank_name }} ({{ details.bancontact.bic }})
    + {% if details.bancontact.verified_name %} +
    {% trans "Payer name" %}
    +
    {{ details.bancontact.verified_name }}
    + {% endif %} + {% endif %} + {% if details.type == "ideal" %} +
    {% trans "Bank" %}
    +
    {{ details.ideal.bank }} ({{ details.ideal.bic }})
    + {% if details.ideal.verified_name %} +
    {% trans "Payer name" %}
    +
    {{ details.ideal.verified_name }}
    + {% endif %} + {% endif %} + {% endif %} + {% if details.owner.verified_name %} +
    {% trans "Payer name" %}
    +
    {{ details.owner.verified_name }}
    + {% elif details.owner.name %} +
    {% trans "Payer name" %}
    +
    {{ details.owner.name }}
    + {% endif %} + {% if "amount" in payment_info %} +
    {% trans "Total value" %}
    +
    {{ payment_info.amount|money_numberfield:event.currency }}
    + {% endif %} + {% if "currency" in payment_info %} +
    {% trans "Currency" %}
    +
    {{ payment_info.currency|upper }}
    + {% endif %} + {% if "status" in payment_info %} +
    {% trans "Status" %}
    +
    {{ payment_info.status }}
    + {% endif %} + {% if "message" in payment_info %} +
    {% trans "Error message" %}
    +
    {{ payment_info.message }}
    + {% endif %} +
    +{% endif %} diff --git a/src/pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html b/src/pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html new file mode 100644 index 000000000..450992c95 --- /dev/null +++ b/src/pretix/plugins/stripe/templates/plugins/stripe/oauth_disconnect.html @@ -0,0 +1,20 @@ +{% extends "pretixcontrol/base.html" %} +{% load i18n %} +{% block title %}{% trans "Stripe Connect" %}{% endblock %} +{% block content %} +

    + {% trans "Stripe Connect" %} +

    + +
    + {% csrf_token %} +

    + {% trans "Do you really want to disconnect your Stripe account?" %} +

    +
    + +
    +
    +{% endblock %} diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html b/src/pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html similarity index 100% rename from src/pretix/plugins/stripe/templates/pretixplugins/stripe/organizer_stripe.html rename to src/pretix/plugins/stripe/templates/plugins/stripe/organizer_stripe.html diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html b/src/pretix/plugins/stripe/templates/plugins/stripe/pending.html similarity index 100% rename from src/pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html rename to src/pretix/plugins/stripe/templates/plugins/stripe/pending.html diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/presale_head.html b/src/pretix/plugins/stripe/templates/plugins/stripe/presale_head.html similarity index 75% rename from src/pretix/plugins/stripe/templates/pretixplugins/stripe/presale_head.html rename to src/pretix/plugins/stripe/templates/plugins/stripe/presale_head.html index b2d68e187..0931f0b08 100644 --- a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/presale_head.html +++ b/src/pretix/plugins/stripe/templates/plugins/stripe/presale_head.html @@ -3,10 +3,10 @@ {% load i18n %} {% compress js %} - + {% endcompress %} {% compress css %} - + {% endcompress %} {% if testmode %} diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html b/src/pretix/plugins/stripe/templates/plugins/stripe/redirect.html similarity index 58% rename from src/pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html rename to src/pretix/plugins/stripe/templates/plugins/stripe/redirect.html index be28da6d3..25e4c3549 100644 --- a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html +++ b/src/pretix/plugins/stripe/templates/plugins/stripe/redirect.html @@ -2,26 +2,24 @@ {% load i18n %} {% load static %} - + + {{ settings.INSTANCE_NAME }} {% compress css %} {% endcompress %} {% compress js %} - + {% endcompress %}

    {% trans "The payment process has started in a new window." %}

    - +

    {% trans "The window to enter your payment data was not opened or was closed?" %}

    - {% trans "The window to enter your payment data was not opened or was closed?" %} -

    -

    - - {% trans "Click here in order to open the window." %} + + {% trans "Click here in order to open the window." %}

    - + {% if payment_intent_next_action_redirect_url %} + + {% endif %} + {% if payment_intent_redirect_action_handling %} + + {% endif %} {% endblock %} {% block content %}
    @@ -17,6 +23,9 @@

    Confirm payment: {{ code }} {% endblocktrans %}

    +
    +
    +
    diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html b/src/pretix/plugins/stripe/templates/plugins/stripe/sca_return.html similarity index 53% rename from src/pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html rename to src/pretix/plugins/stripe/templates/plugins/stripe/sca_return.html index 3579b6df8..e5f0e8ce5 100644 --- a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html +++ b/src/pretix/plugins/stripe/templates/plugins/stripe/sca_return.html @@ -6,15 +6,15 @@ {% block title %}{% trans "Pay order" %}{% endblock %} {% block custom_header %} {{ block.super }} - {% include "pretixplugins/stripe/presale_head.html" with settings=stripe_settings %} + {% include "plugins/stripe/presale_head.html" with settings=stripe_settings %} + + {% endblock %} {% block page %}
    - +
    -

    - {% trans "Confirming your payment…" %} -

    +

    {% trans "Confirming your payment…" %}

    {% endblock %} diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html b/src/pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html deleted file mode 100644 index e0ceaf8d2..000000000 --- a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/action_double.html +++ /dev/null @@ -1,9 +0,0 @@ -{% load i18n %} - -

    - {% url "control:event.order" organizer=event.organizer.slug event=event.slug code=data.order as ourl %} - {% blocktrans trimmed with charge=data.charge stripe_href="href='https://dashboard.stripe.com/payments/"|add:data.charge|add:"' target='_blank'"|safe order=""|add:data.order|add:""|safe %} - The Stripe transaction {{ charge }} has succeeded, but the order {{ order }} has - already been paid by other means. Please double-check and refund the money via Stripe's interface. - {% endblocktrans %} -

    diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html b/src/pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html deleted file mode 100644 index 8d7d68ba1..000000000 --- a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/action_overpaid.html +++ /dev/null @@ -1,10 +0,0 @@ -{% load i18n %} - -

    - {% url "control:event.order" organizer=event.organizer.slug event=event.slug code=data.order as ourl %} - {% blocktrans trimmed with charge=data.charge stripe_href="href='https://dashboard.stripe.com/payments/"|add:data.charge|add:"' target='_blank'"|safe order=""|add:data.order|add:""|safe %} - The Stripe transaction {{ charge }} has succeeded, but the order {{ order }} is - expired and the product was sold out in the meantime. Therefore, the payment could not be accepted. Please - contact the user and refund the money via Stripe's interface. - {% endblocktrans %} -

    diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html b/src/pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html deleted file mode 100644 index 30e0a4442..000000000 --- a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/action_refund.html +++ /dev/null @@ -1,9 +0,0 @@ -{% load i18n %} - -

    - {% url "control:event.order" organizer=event.organizer.slug event=event.slug code=data.order as ourl %} - {% blocktrans trimmed with charge=data.charge stripe_href="href='https://dashboard.stripe.com/payments/"|add:data.charge|add:"' target='_blank'"|safe order=""|add:data.order|add:""|safe %} - Stripe reported that the transaction {{ charge }} has been refunded. - Do you want to refund mark the matching order ({{ order }}) as refunded? - {% endblocktrans %} -

    diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/apple-developer-merchantid-domain-association b/src/pretix/plugins/stripe/templates/pretixplugins/stripe/apple-developer-merchantid-domain-association deleted file mode 100644 index 2ff95c962..000000000 --- a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/apple-developer-merchantid-domain-association +++ /dev/null @@ -1 +0,0 @@ -7B227073704964223A2239373943394538343346343131343044463144313834343232393232313734313034353044314339464446394437384337313531303944334643463542433731222C2276657273696F6E223A312C22637265617465644F6E223A313536363233343735303036312C227369676E6174757265223A22333038303036303932613836343838366637306430313037303261303830333038303032303130313331306633303064303630393630383634383031363530333034303230313035303033303830303630393261383634383836663730643031303730313030303061303830333038323033653333303832303338386130303330323031303230323038346333303431343935313964353433363330306130363038326138363438636533643034303330323330376133313265333032633036303335353034303330633235343137303730366336353230343137303730366336393633363137343639366636653230343936653734363536373732363137343639366636653230343334313230326432303437333333313236333032343036303335353034306230633164343137303730366336353230343336353732373436393636363936333631373436393666366532303431373537343638366637323639373437393331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533333031653137306433313339333033353331333833303331333333323335333735613137306433323334333033353331333633303331333333323335333735613330356633313235333032333036303335353034303330633163363536333633326437333664373032643632373236663662363537323264373336393637366535663535343333343264353035323466343433313134333031323036303335353034306230633062363934663533323035333739373337343635366437333331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533333035393330313330363037326138363438636533643032303130363038326138363438636533643033303130373033343230303034633231353737656465626436633762323231386636386464373039306131323138646337623062643666326332383364383436303935643934616634613534313162383334323065643831316633343037653833333331663163353463336637656233323230643662616435643465666634393238393839336537633066313361333832303231313330383230323064333030633036303335353164313330313031666630343032333030303330316630363033353531643233303431383330313638303134323366323439633434663933653465663237653663346636323836633366613262626664326534623330343530363038326230363031303530353037303130313034333933303337333033353036303832623036303130353035303733303031383632393638373437343730336132663266366636333733373032653631373037303663363532653633366636643266366636333733373033303334326436313730373036633635363136393633363133333330333233303832303131643036303335353164323030343832303131343330383230313130333038323031306330363039326138363438383666373633363430353031333038316665333038316333303630383262303630313035303530373032303233303831623630633831623335323635366336393631366536333635323036663665323037343638363937333230363336353732373436393636363936333631373436353230363237393230363136653739323037303631373237343739323036313733373337353664363537333230363136333633363537303734363136653633363532303666363632303734363836353230373436383635366532303631373037303663363936333631363236633635323037333734363136653634363137323634323037343635373236643733323036313665363432303633366636653634363937343639366636653733323036663636323037353733363532633230363336353732373436393636363936333631373436353230373036663663363936333739323036313665363432303633363537323734363936363639363336313734363936663665323037303732363136333734363936333635323037333734363137343635366436353665373437333265333033363036303832623036303130353035303730323031313632613638373437343730336132663266373737373737326536313730373036633635326536333666366432663633363537323734363936363639363336313734363536313735373436383666373236393734373932663330333430363033353531643166303432643330326233303239613032376130323538363233363837343734373033613266326636333732366332653631373037303663363532653633366636643266363137303730366336353631363936333631333332653633373236633330316430363033353531643065303431363034313439343537646236666435373438313836383938393736326637653537383530376537396235383234333030653036303335353164306630313031666630343034303330323037383033303066303630393261383634383836663736333634303631643034303230353030333030613036303832613836343863653364303430333032303334393030333034363032323130306265303935373166653731653165373335623535653561666163623463373266656234343566333031383532323263373235313030326236316562643666353530323231303064313862333530613564643664643665623137343630333562313165623263653837636661336536616636636264383338303839306463383263646461613633333038323032656533303832303237356130303330323031303230323038343936643266626633613938646139373330306130363038326138363438636533643034303330323330363733313162333031393036303335353034303330633132343137303730366336353230353236663666373432303433343132303264323034373333333132363330323430363033353530343062306331643431373037303663363532303433363537323734363936363639363336313734363936663665323034313735373436383666373236393734373933313133333031313036303335353034306130633061343137303730366336353230343936653633326533313062333030393036303335353034303631333032353535333330316531373064333133343330333533303336333233333334333633333330356131373064333233393330333533303336333233333334333633333330356133303761333132653330326330363033353530343033306332353431373037303663363532303431373037303663363936333631373436393666366532303439366537343635363737323631373436393666366532303433343132303264323034373333333132363330323430363033353530343062306331643431373037303663363532303433363537323734363936363639363336313734363936663665323034313735373436383666373236393734373933313133333031313036303335353034306130633061343137303730366336353230343936653633326533313062333030393036303335353034303631333032353535333330353933303133303630373261383634386365336430323031303630383261383634386365336430333031303730333432303030346630313731313834313964373634383564353161356532353831303737366538383061326566646537626165346465303864666334623933653133333536643536363562333561653232643039373736306432323465376262613038666437363137636538386362373662623636373062656338653832393834666635343435613338316637333038316634333034363036303832623036303130353035303730313031303433613330333833303336303630383262303630313035303530373330303138363261363837343734373033613266326636663633373337303265363137303730366336353265363336663664326636663633373337303330333432643631373037303663363537323666366637343633363136373333333031643036303335353164306530343136303431343233663234396334346639336534656632376536633466363238366333666132626266643265346233303066303630333535316431333031303166663034303533303033303130316666333031663036303335353164323330343138333031363830313462626230646561313538333338383961613438613939646562656264656261666461636232346162333033373036303335353164316630343330333032653330326361303261613032383836323636383734373437303361326632663633373236633265363137303730366336353265363336663664326636313730373036633635373236663666373436333631363733333265363337323663333030653036303335353164306630313031666630343034303330323031303633303130303630613261383634383836663736333634303630323065303430323035303033303061303630383261383634386365336430343033303230333637303033303634303233303361636637323833353131363939623138366662333563333536636136326266663431376564643930663735346461323865626566313963383135653432623738396638393866373962353939663938643534313064386639646539633266653032333033323264643534343231623061333035373736633564663333383362393036376664313737633263323136643936346663363732363938323132366635346638376137643162393963623962303938393231363130363939306630393932316430303030333138323031386233303832303138373032303130313330383138363330376133313265333032633036303335353034303330633235343137303730366336353230343137303730366336393633363137343639366636653230343936653734363536373732363137343639366636653230343334313230326432303437333333313236333032343036303335353034306230633164343137303730366336353230343336353732373436393636363936333631373436393666366532303431373537343638366637323639373437393331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533303230383463333034313439353139643534333633303064303630393630383634383031363530333034303230313035303061303831393533303138303630393261383634383836663730643031303930333331306230363039326138363438383666373064303130373031333031633036303932613836343838366637306430313039303533313066313730643331333933303338333133393331333733313332333333303561333032613036303932613836343838366637306430313039333433313164333031623330306430363039363038363438303136353033303430323031303530306131306130363038326138363438636533643034303330323330326630363039326138363438383666373064303130393034333132323034323062303731303365313430613462386231376262613230316130336163643036396234653431366232613263383066383661383338313435633239373566633131333030613036303832613836343863653364303430333032303434363330343430323230343639306264636637626461663833636466343934396534633035313039656463663334373665303564373261313264376335666538633033303033343464663032323032363764353863393365626233353031333836363062353730373938613064643731313734316262353864626436613138363633353038353431656565393035303030303030303030303030227D \ No newline at end of file diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/control.html b/src/pretix/plugins/stripe/templates/pretixplugins/stripe/control.html deleted file mode 100644 index 0711c73fb..000000000 --- a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/control.html +++ /dev/null @@ -1,69 +0,0 @@ -{% load i18n %} - -{% if payment_info %} -
    - {% if "id" in payment_info %} -
    {% trans "Charge ID" %}
    -
    {{ payment_info.id }}
    - {% endif %} - {% if "source" in payment_info %} - {% if payment_info.source.card %} -
    {% trans "Card type" %}
    -
    {{ payment_info.source.card.brand }}
    -
    {% trans "Card number" %}
    -
    **** **** **** {{ payment_info.source.card.last4 }}
    - {% if payment_info.source.owner.name %} -
    {% trans "Payer name" %}
    -
    {{ payment_info.source.owner.name }}
    - {% endif %} - {% endif %} - {% if payment_info.source.type == "giropay" %} -
    {% trans "Bank" %}
    -
    {{ payment_info.source.giropay.bank_name }} ({{ payment_info.source.giropay.bic }})
    -
    {% trans "Payer name" %}
    -
    {{ payment_info.source.owner.verified_name|default:payment_info.source.owner.name }}
    - {% endif %} - {% if payment_info.source.type == "bancontact" %} -
    {% trans "Bank" %}
    -
    {{ payment_info.source.bancontact.bank_name }} ({{ payment_info.source.bancontact.bic }})
    -
    {% trans "Payer name" %}
    -
    {{ payment_info.source.owner.verified_name|default:payment_info.source.owner.name }}
    - {% endif %} - {% if payment_info.source.type == "ideal" %} -
    {% trans "Bank" %}
    -
    {{ payment_info.source.ideal.bank }} ({{ payment_info.source.ideal.bic }})
    -
    {% trans "Payer name" %}
    -
    {{ payment_info.source.owner.verified_name|default:payment_info.source.owner.name }}
    - {% endif %} - {% endif %} - {% if payment_info.charges.data.0 %} - {% if payment_info.charges.data.0.payment_method_details.card %} -
    {% trans "Card type" %}
    -
    {{ payment_info.charges.data.0.payment_method_details.card.brand }}
    -
    {% trans "Card number" %}
    -
    - **** **** **** {{ payment_info.charges.data.0.payment_method_details.card.last4 }} - {% if payment_info.charges.data.0.payment_method_details.card.moto %} - {% trans "MOTO" %} - {% endif %} -
    - {% endif %} - {% endif %} - {% if "amount" in payment_info %} -
    {% trans "Total value" %}
    -
    {{ payment_info.amount|floatformat:2 }}
    - {% endif %} - {% if "currency" in payment_info %} -
    {% trans "Currency" %}
    -
    {{ payment_info.currency|upper }}
    - {% endif %} - {% if "status" in payment_info %} -
    {% trans "Status" %}
    -
    {{ payment_info.status }}
    - {% endif %} - {% if "message" in payment_info %} -
    {% trans "Error message" %}
    -
    {{ payment_info.message }}
    - {% endif %} -
    -{% endif %} diff --git a/src/pretix/plugins/stripe/urls.py b/src/pretix/plugins/stripe/urls.py index 879635897..b75c11635 100644 --- a/src/pretix/plugins/stripe/urls.py +++ b/src/pretix/plugins/stripe/urls.py @@ -1,39 +1,28 @@ -from django.urls import include -from django.urls import re_path as url +from django.urls import include, re_path from pretix.multidomain import event_url from .views import ( OrganizerSettingsFormView, ReturnView, ScaReturnView, ScaView, - applepay_association, oauth_disconnect, oauth_return, redirect_view, - webhook, + oauth_disconnect, oauth_return, redirect_view, webhook, ) event_patterns = [ - url(r'^stripe/', include([ + re_path(r'^stripe/', include([ event_url(r'^webhook/$', webhook, name='webhook', require_live=False), - url(r'^redirect/$', redirect_view, name='redirect'), - url(r'^return/(?P[^/]+)/(?P[^/]+)/(?P[0-9]+)/$', ReturnView.as_view(), name='return'), - url(r'^sca/(?P[^/]+)/(?P[^/]+)/(?P[0-9]+)/$', ScaView.as_view(), name='sca'), - url(r'^sca/(?P[^/]+)/(?P[^/]+)/(?P[0-9]+)/return/$', - ScaReturnView.as_view(), name='sca.return'), + re_path(r'^redirect/$', redirect_view, name='redirect'), + re_path(r'^return/(?P[^/]+)/(?P[^/]+)/(?P[0-9]+)/$', ReturnView.as_view(), name='return'), + re_path(r'^sca/(?P[^/]+)/(?P[^/]+)/(?P[0-9]+)/$', ScaView.as_view(), name='sca'), + re_path(r'^sca/(?P[^/]+)/(?P[^/]+)/(?P[0-9]+)/return/$', ScaReturnView.as_view(), + name='sca.return'), ])), - url(r'^.well-known/apple-developer-merchantid-domain-association$', - applepay_association, name='applepay.association'), -] - -organizer_patterns = [ - url(r'^.well-known/apple-developer-merchantid-domain-association$', - applepay_association, name='applepay.association'), ] urlpatterns = [ - url(r'^control/event/(?P[^/]+)/(?P[^/]+)/stripe/disconnect/', - oauth_disconnect, name='oauth.disconnect'), - url(r'^control/organizer/(?P[^/]+)/stripeconnect/', - OrganizerSettingsFormView.as_view(), name='settings.connect'), - url(r'^_stripe/webhook/$', webhook, name='webhook'), - url(r'^_stripe/oauth_return/$', oauth_return, name='oauth.return'), - url(r'^.well-known/apple-developer-merchantid-domain-association$', - applepay_association, name='applepay.association'), + re_path(r'^control/event/(?P[^/]+)/(?P[^/]+)/stripe/disconnect/$', oauth_disconnect, + name='oauth.disconnect'), + re_path(r'^control/organizer/(?P[^/]+)/stripeconnect/$', OrganizerSettingsFormView.as_view(), + name='settings.connect'), + re_path(r'^_stripe/webhook/$', webhook, name='webhook'), + re_path(r'^_stripe/oauth_return/$', oauth_return, name='oauth.return'), ] diff --git a/src/pretix/plugins/stripe/views.py b/src/pretix/plugins/stripe/views.py index 61d9162cf..14d4d4288 100644 --- a/src/pretix/plugins/stripe/views.py +++ b/src/pretix/plugins/stripe/views.py @@ -1,6 +1,6 @@ -import hashlib import json import logging +import urllib.parse import requests import stripe @@ -23,12 +23,14 @@ from pretix.base.models import Event, Order, OrderPayment, Organizer, Quota from pretix.base.payment import PaymentException from pretix.base.services.locking import LockTimeoutException +from pretix.helpers import OF_SELF +from pretix.multidomain.urlreverse import build_absolute_uri from pretix.base.settings import GlobalSettingsObject from pretix.control.permissions import ( AdministratorPermissionRequiredMixin, event_permission_required, ) from pretix.control.views.event import DecoupleMixin -from pretix.control.views.organizer import OrganizerDetailViewMixin +from pretix.control.views.organizer_views import OrganizerDetailViewMixin from pretix.multidomain.urlreverse import eventreverse from pretix.plugins.stripe.forms import OrganizerStripeSettingsForm from pretix.plugins.stripe.models import ReferencedStripeObject @@ -36,36 +38,44 @@ from pretix.plugins.stripe.tasks import ( get_domain_for_event, stripe_verify_domain, ) +from pretix.helpers.http import redirect_to_url logger = logging.getLogger('pretix.plugins.stripe') @xframe_options_exempt def redirect_view(request, *args, **kwargs): - signer = signing.Signer(salt='safe-redirect') try: - url = signer.unsign(request.GET.get('url', '')) + data = signing.loads(request.GET.get('data', ''), salt='safe-redirect') except signing.BadSignature: return HttpResponseBadRequest('Invalid parameter') - r = render(request, 'pretixplugins/stripe/redirect.html', { - 'url': url, - }) - r._csp_ignore = True - return r + if 'go' in request.GET: + if 'session' in data: + for k, v in data['session'].items(): + request.session[k] = v + return redirect(data['url']) + else: + params = request.GET.copy() + params['go'] = '1' + r = render(request, 'plugins/stripe/redirect.html', { + 'url': build_absolute_uri(request.event, 'plugins:stripe:redirect') + '?' + urllib.parse.urlencode(params), + }) + r._csp_ignore = True + return r @scopes_disabled() def oauth_return(request, *args, **kwargs): if 'payment_stripe_oauth_event' not in request.session: messages.error(request, _('An error occurred during connecting with Stripe, please try again.')) - return redirect(reverse('control:index')) + return redirect('control:index') event = get_object_or_404(Event, pk=request.session['payment_stripe_oauth_event']) if request.GET.get('state') != request.session['payment_stripe_oauth_token']: messages.error(request, _('An error occurred during connecting with Stripe, please try again.')) - return redirect(reverse('control:event.settings.payment.provider', kwargs={ + return redirect_to_url(reverse('control:event.settings.payment.provider', kwargs={ 'organizer': event.organizer.slug, 'event': event.slug, 'provider': 'stripe_settings' @@ -104,7 +114,7 @@ def oauth_return(request, *args, **kwargs): except: logger.exception('Failed to obtain OAuth token') messages.error(request, _('An error occurred during connecting with Stripe, please try again.')) - return redirect(reverse('control:event.settings.payment.provider', kwargs={ + return redirect_to_url(reverse('control:event.settings.payment.provider', kwargs={ 'organizer': event.organizer.slug, 'event': event.slug, 'provider': 'stripe_settings' @@ -116,16 +126,22 @@ def oauth_return(request, *args, **kwargs): messages.error(request, _('Stripe returned an error: {}').format(testdata['error_description'])) else: messages.success(request, - _('Your Stripe account is now connected to pretix. You can change the settings in ' + _('Your Stripe account is now connected to eventyay. You can change the settings in ' 'detail below.')) event.settings.payment_stripe_publishable_key = data['stripe_publishable_key'] # event.settings.payment_stripe_connect_access_token = data['access_token'] we don't need it, right? event.settings.payment_stripe_connect_refresh_token = data['refresh_token'] event.settings.payment_stripe_connect_user_id = data['stripe_user_id'] event.settings.payment_stripe_merchant_country = account.get('country') - if account.get('business_name') or account.get('display_name') or account.get('email'): + if ( + account.get('business_profile', {}).get('name') + or account.get('settings', {}).get('dashboard', {}).get('display_name') + or account.get('email') + ): event.settings.payment_stripe_connect_user_name = ( - account.get('business_name') or account.get('display_name') or account.get('email') + account.get('business_profile', {}).get('name') + or account.get('settings', {}).get('dashboard', {}).get('display_name') + or account.get('email') ) if data['livemode']: @@ -139,7 +155,7 @@ def oauth_return(request, *args, **kwargs): stripe_verify_domain.apply_async(args=(event.pk, get_domain_for_event(event))) - return redirect(reverse('control:event.settings.payment.provider', kwargs={ + return redirect_to_url(reverse('control:event.settings.payment.provider', kwargs={ 'organizer': event.organizer.slug, 'event': event.slug, 'provider': 'stripe_settings' @@ -160,22 +176,31 @@ def webhook(request, *args, **kwargs): if event_json['data']['object']['object'] == "charge": func = charge_webhook objid = event_json['data']['object']['id'] + lookup_ids = [ + objid, + (event_json['data']['object'].get('source') or {}).get('id') + ] elif event_json['data']['object']['object'] == "dispute": func = charge_webhook objid = event_json['data']['object']['charge'] + lookup_ids = [objid] elif event_json['data']['object']['object'] == "source": func = source_webhook objid = event_json['data']['object']['id'] + lookup_ids = [objid] elif event_json['data']['object']['object'] == "payment_intent": func = paymentintent_webhook objid = event_json['data']['object']['id'] + lookup_ids = [objid] else: return HttpResponse("Not interested in this data type", status=200) - try: - rso = ReferencedStripeObject.objects.select_related('order', 'order__event').get(reference=objid) + rso = ReferencedStripeObject.objects.select_related('order', 'order__event').filter( + reference__in=[lid for lid in lookup_ids if lid] + ).first() + if rso: return func(rso.order.event, event_json, objid, rso) - except ReferencedStripeObject.DoesNotExist: + else: if event_json['data']['object']['object'] == "charge" and 'payment_intent' in event_json['data']['object']: # If we receive a charge webhook *before* the payment intent webhook, we don't know the charge ID yet # and can't match it -- but we know the payment intent ID! @@ -201,6 +226,7 @@ def webhook(request, *args, **kwargs): 'sofort': 'stripe_sofort', 'three_d_secure': 'stripe', 'card': 'stripe', + 'sepa_debit': 'stripe_sepa_debit', 'giropay': 'stripe_giropay', 'ideal': 'stripe_ideal', 'alipay': 'stripe_alipay', @@ -213,7 +239,11 @@ def charge_webhook(event, event_json, charge_id, rso): prov._init_api() try: - charge = stripe.Charge.retrieve(charge_id, expand=['dispute'], **prov.api_kwargs) + charge = stripe.Charge.retrieve( + charge_id, + expand=['dispute', 'refunds', 'payment_intent', 'payment_intent.latest_charge'], + **prov.api_kwargs + ) except stripe.error.StripeError: logger.exception('Stripe error on webhook. Event data: %s' % str(event_json)) return HttpResponse('Charge not found', status=500) @@ -239,12 +269,14 @@ def charge_webhook(event, event_json, charge_id, rso): payment = None with transaction.atomic(): - if not payment: + if payment: + payment = OrderPayment.objects.select_for_update(of=OF_SELF).get(pk=payment.pk) + else: payment = order.payments.filter( info__icontains=charge['id'], provider__startswith='stripe', amount=prov._amount_to_decimal(charge['amount']), - ).select_for_update().last() + ).select_for_update(of=OF_SELF).last() if not payment: payment = order.payments.create( state=OrderPayment.PAYMENT_STATE_CREATED, @@ -259,7 +291,7 @@ def charge_webhook(event, event_json, charge_id, rso): order.log_action('pretix.plugins.stripe.event', data=event_json) - is_refund = charge['refunds']['total_count'] or charge['dispute'] + is_refund = charge['amount_refunded'] or charge['refunds']['total_count'] or charge['dispute'] if is_refund: known_refunds = [r.info_data.get('id') for r in payment.refunds.all()] migrated_refund_amounts = [r.amount for r in payment.refunds.all() if not r.info_data.get('id')] @@ -292,6 +324,8 @@ def charge_webhook(event, event_json, charge_id, rso): OrderPayment.PAYMENT_STATE_CANCELED, OrderPayment.PAYMENT_STATE_FAILED): try: + if getattr(charge, "payment_intent", None): + payment.info = str(charge.payment_intent) payment.confirm() except LockTimeoutException: return HttpResponse("Lock timeout, please try again.", status=503) @@ -333,12 +367,14 @@ def source_webhook(event, event_json, source_id, rso): return HttpResponse('Order not found', status=200) payment = None - if not payment: + if payment: + payment = OrderPayment.objects.select_for_update(of=OF_SELF).get(pk=payment.pk) + else: payment = order.payments.filter( info__icontains=src['id'], provider__startswith='stripe', amount=prov._amount_to_decimal(src['amount']) if src['amount'] is not None else order.total, - ).last() + ).select_for_update(of=OF_SELF).last() if not payment: payment = order.payments.create( state=OrderPayment.PAYMENT_STATE_CREATED, @@ -360,7 +396,6 @@ def source_webhook(event, event_json, source_id, rso): prov._charge_source(None, source_id, payment) except PaymentException: logger.exception('Webhook error') - elif src.status == 'failed': payment.fail(info=str(src)) elif src.status == 'canceled' and payment.state in (OrderPayment.PAYMENT_STATE_PENDING, OrderPayment.PAYMENT_STATE_CREATED): @@ -376,23 +411,28 @@ def paymentintent_webhook(event, event_json, paymentintent_id, rso): prov._init_api() try: - paymentintent = stripe.PaymentIntent.retrieve(paymentintent_id, **prov.api_kwargs) + paymentintent = stripe.PaymentIntent.retrieve(paymentintent_id, expand=["latest_charge"], **prov.api_kwargs) except stripe.error.StripeError: logger.exception('Stripe error on webhook. Event data: %s' % str(event_json)) return HttpResponse('Charge not found', status=500) - for charge in paymentintent.charges.data: + if paymentintent.latest_charge: ReferencedStripeObject.objects.get_or_create( - reference=charge.id, + reference=paymentintent.latest_charge.id, defaults={'order': rso.payment.order, 'payment': rso.payment} ) + if event_json["type"] == "payment_intent.payment_failed": + rso.payment.fail(info=event_json) + return HttpResponse(status=200) @event_permission_required('can_change_event_settings') -@require_POST def oauth_disconnect(request, **kwargs): + if request.method != "POST": + return render(request, 'plugins/stripe/oauth_disconnect.html', {}) + del request.event.settings.payment_stripe_publishable_key del request.event.settings.payment_stripe_publishable_test_key del request.event.settings.payment_stripe_connect_access_token @@ -402,50 +442,45 @@ def oauth_disconnect(request, **kwargs): request.event.settings.payment_stripe__enabled = False messages.success(request, _('Your Stripe account has been disconnected.')) - return redirect(reverse('control:event.settings.payment.provider', kwargs={ + return redirect_to_url(reverse('control:event.settings.payment.provider', kwargs={ 'organizer': request.event.organizer.slug, 'event': request.event.slug, 'provider': 'stripe_settings' })) -@xframe_options_exempt -def applepay_association(request, *args, **kwargs): - r = render(request, 'pretixplugins/stripe/apple-developer-merchantid-domain-association') - r._csp_ignore = True - return r - - -class StripeOrderView: +class StripeOrderView(View): def dispatch(self, request, *args, **kwargs): + # Retrieve the order with a secret check try: - self.order = request.event.orders.get(code=kwargs['order']) - if hashlib.sha1(self.order.secret.lower().encode()).hexdigest() != kwargs['hash'].lower(): - raise Http404('') + self.order = request.event.orders.get_with_secret_check( + code=kwargs['order'], received_secret=kwargs['hash'].lower(), tag='plugins:stripe' + ) except Order.DoesNotExist: - # Do a hash comparison as well to harden timing attacks - if 'abcdefghijklmnopq'.lower() == hashlib.sha1('abcdefghijklmnopq'.encode()).hexdigest(): - raise Http404('') - else: - raise Http404('') - return super().dispatch(request, *args, **kwargs) + raise Http404('Unknown order') - @cached_property - def payment(self): - return get_object_or_404(self.order.payments, - pk=self.kwargs['payment'], - provider__startswith='stripe') + # Retrieve the payment object + self.payment = get_object_or_404( + self.order.payments, + pk=kwargs['payment'], + provider__startswith='stripe' + ) + + return super().dispatch(request, *args, **kwargs) @cached_property def pprov(self): + # Return the payment provider object return self.request.event.get_payment_providers()[self.payment.provider] def _redirect_to_order(self): - if self.request.session.get('payment_stripe_order_secret') != self.order.secret and self.payment.provider != 'stripe_ideal': + # Check if the session secret matches the order secret + if self.request.session.get('payment_stripe_order_secret') != self.order.secret and not self.payment.provider.startswith('stripe'): messages.error(self.request, _('Sorry, there was an error in the payment process. Please check the link ' 'in your emails to continue.')) return redirect(eventreverse(self.request.event, 'presale:event.index')) + # Redirect to the order page with payment status return redirect(eventreverse(self.request.event, 'presale:event.order', kwargs={ 'order': self.order.code, 'secret': self.order.secret @@ -463,16 +498,16 @@ def get(self, request, *args, **kwargs): logger.exception('Could not retrieve source') messages.error(self.request, _('Sorry, there was an error in the payment process. Please check the link ' 'in your emails to continue.')) - return redirect(eventreverse(self.request.event, 'presale:event.index')) + return redirect_to_url(eventreverse(self.request.event, 'presale:event.index')) if src.client_secret != request.GET.get('client_secret'): messages.error(self.request, _('Sorry, there was an error in the payment process. Please check the link ' 'in your emails to continue.')) - return redirect(eventreverse(self.request.event, 'presale:event.index')) + return redirect_to_url(eventreverse(self.request.event, 'presale:event.index')) with transaction.atomic(): self.order.refresh_from_db() - self.payment.refresh_from_db() + self.payment = OrderPayment.objects.select_for_update(of=OF_SELF).get(pk=self.payment.pk) if self.payment.state == OrderPayment.PAYMENT_STATE_CONFIRMED: if 'payment_stripe_token' in request.session: del request.session['payment_stripe_token'] @@ -510,6 +545,7 @@ def get(self, request, *args, **kwargs): prov = self.pprov prov._init_api() + # Redirect if payment state is final if self.payment.state in (OrderPayment.PAYMENT_STATE_CONFIRMED, OrderPayment.PAYMENT_STATE_CANCELED, OrderPayment.PAYMENT_STATE_FAILED): @@ -517,40 +553,67 @@ def get(self, request, *args, **kwargs): payment_info = json.loads(self.payment.info) + # Retrieve the PaymentIntent + intent = self._retrieve_payment_intent(prov, payment_info) + if not intent: + messages.error(self.request, _('Sorry, there was an error in the payment process.')) + return self._redirect_to_order() + + # Handle PaymentIntent next actions + if self._requires_action(intent): + return self._render_sca_template(request, prov, intent) + else: + return self._handle_payment_intent(request, prov, intent) + + def _retrieve_payment_intent(self, prov, payment_info): + """Retrieve the PaymentIntent from Stripe.""" if 'id' in payment_info: try: - intent = stripe.PaymentIntent.retrieve( + return stripe.PaymentIntent.retrieve( payment_info['id'], + expand=["latest_charge"], **prov.api_kwargs ) except stripe.error.InvalidRequestError: logger.exception('Could not retrieve payment intent') - messages.error(self.request, _('Sorry, there was an error in the payment process.')) - return self._redirect_to_order() - else: - messages.error(self.request, _('Sorry, there was an error in the payment process.')) - return self._redirect_to_order() - - if intent.status == 'requires_action' and intent.next_action.type in ['use_stripe_sdk', 'redirect_to_url']: - ctx = { - 'order': self.order, - 'stripe_settings': StripeSettingsHolder(self.order.event).settings, - } - if intent.next_action.type == 'use_stripe_sdk': - ctx['payment_intent_client_secret'] = intent.client_secret - elif intent.next_action.type == 'redirect_to_url': - ctx['payment_intent_next_action_redirect_url'] = intent.next_action.redirect_to_url['url'] - - r = render(request, 'pretixplugins/stripe/sca.html', ctx) - r._csp_ignore = True - return r - else: - try: - prov._handle_payment_intent(request, self.payment, intent) - except PaymentException as e: - messages.error(request, str(e)) + return None + + def _requires_action(self, intent): + """Check if the PaymentIntent requires further action.""" + return intent.status == 'requires_action' and intent.next_action.type in [ + 'use_stripe_sdk', 'redirect_to_url', 'alipay_handle_redirect', 'wechat_pay_display_qr_code', + 'swish_handle_redirect_or_display_qr_code' + ] + + def _render_sca_template(self, request, prov, intent): + """Render the SCA template with appropriate context.""" + ctx = { + 'order': self.order, + 'stripe_settings': StripeSettingsHolder(self.order.event).settings, + 'payment_intent_action_type': intent.next_action.type, + } + + if intent.next_action.type in ('use_stripe_sdk', 'alipay_handle_redirect', 'wechat_pay_display_qr_code'): + ctx['payment_intent_client_secret'] = intent.client_secret + elif intent.next_action.type == 'redirect_to_url': + ctx['payment_intent_next_action_redirect_url'] = intent.next_action.redirect_to_url['url'] + ctx['payment_intent_redirect_action_handling'] = prov.redirect_action_handling + elif intent.next_action.type == 'swish_handle_redirect_or_display_qr_code': + ctx['payment_intent_next_action_redirect_url'] = intent.next_action.swish_handle_redirect_or_display_qr_code['hosted_instructions_url'] + ctx['payment_intent_redirect_action_handling'] = 'iframe' + + r = render(request, 'plugins/stripe/sca.html', ctx) + r._csp_ignore = True + return r + + def _handle_payment_intent(self, request, prov, intent): + """Handle the PaymentIntent and redirect to the order.""" + try: + prov._handle_payment_intent(request, self.payment, intent) + except PaymentException as e: + messages.error(request, str(e)) - return self._redirect_to_order() + return self._redirect_to_order() @method_decorator(xframe_options_exempt, 'dispatch') @@ -564,15 +627,23 @@ def get(self, request, *args, **kwargs): messages.error(request, str(e)) self.order.refresh_from_db() + ctx = { + 'order': self.order, + 'payment_intent_redirect_action_handling': prov.redirect_action_handling, + 'order_url': eventreverse(self.request.event, 'presale:event.order', kwargs={ + 'order': self.order.code, + 'secret': self.order.secret + }), + } - return render(request, 'pretixplugins/stripe/sca_return.html', {'order': self.order}) + return render(request, 'plugins/stripe/sca_return.html', ctx) class OrganizerSettingsFormView(DecoupleMixin, OrganizerDetailViewMixin, AdministratorPermissionRequiredMixin, FormView): model = Organizer permission = 'can_change_organizer_settings' form_class = OrganizerStripeSettingsForm - template_name = 'pretixplugins/stripe/organizer_stripe.html' + template_name = 'plugins/stripe/organizer_stripe.html' def get_success_url(self): return reverse('plugins:stripe:settings.connect', kwargs={ @@ -596,7 +667,7 @@ def post(self, request, *args, **kwargs): } ) messages.success(self.request, _('Your changes have been saved.')) - return redirect(self.get_success_url()) + return redirect_to_url(self.get_success_url()) else: messages.error(self.request, _('We could not save your changes. See below for details.')) return self.get(request) diff --git a/src/pretix/plugins/ticketoutputpdf/apps.py b/src/pretix/plugins/ticketoutputpdf/apps.py index 6cd267bad..05e2fabe2 100644 --- a/src/pretix/plugins/ticketoutputpdf/apps.py +++ b/src/pretix/plugins/ticketoutputpdf/apps.py @@ -14,6 +14,7 @@ class PretixPluginMeta: author = _("the pretix team") version = version category = 'FORMAT' + featured = True description = _("This plugin allows you to print out tickets as PDF files") def ready(self): diff --git a/src/pretix/plugins/webcheckin/apps.py b/src/pretix/plugins/webcheckin/apps.py index 34667d517..3058b7439 100644 --- a/src/pretix/plugins/webcheckin/apps.py +++ b/src/pretix/plugins/webcheckin/apps.py @@ -13,6 +13,7 @@ class PretixPluginMeta: author = _("the pretix team") version = version category = "FEATURE" + featured = True description = _("This plugin allows you to perform check-in actions in your browser.") def ready(self): diff --git a/src/pretix/plugins/webcheckin/templates/pretixplugins/webcheckin/index.html b/src/pretix/plugins/webcheckin/templates/pretixplugins/webcheckin/index.html index 4c1626a3b..418723789 100644 --- a/src/pretix/plugins/webcheckin/templates/pretixplugins/webcheckin/index.html +++ b/src/pretix/plugins/webcheckin/templates/pretixplugins/webcheckin/index.html @@ -35,7 +35,16 @@ +{% endcompress %} + +{% if DEBUG %} + +{% else %} + + +{% endif %} +{% compress js %} diff --git a/src/pretix/presale/checkoutflow.py b/src/pretix/presale/checkoutflow.py index 3a7fefd91..982210f10 100644 --- a/src/pretix/presale/checkoutflow.py +++ b/src/pretix/presale/checkoutflow.py @@ -1,135 +1,9 @@ -import inspect -from collections import defaultdict -from decimal import Decimal +from django.utils.translation import gettext_lazy as _ -from django.conf import settings -from django.contrib import messages -from django.core.exceptions import ValidationError -from django.core.validators import EmailValidator -from django.http import HttpResponseNotAllowed, JsonResponse -from django.shortcuts import redirect -from django.utils import translation -from django.utils.functional import cached_property -from django.utils.translation import ( - get_language, gettext_lazy as _, pgettext_lazy, +from pretix.presale.checkoutflowstep import ( + AddOnsStep, ConfirmStep, CustomerStep, PaymentStep, QuestionsStep, ) -from django.views.generic.base import TemplateResponseMixin -from django_scopes import scopes_disabled - -from pretix.base.models import Order -from pretix.base.models.orders import InvoiceAddress, OrderPayment -from pretix.base.models.tax import TaxedPrice, TaxRule -from pretix.base.services.cart import ( - CartError, error_messages, get_fees, set_cart_addons, update_tax_rates, -) -from pretix.base.services.orders import perform_order -from pretix.base.signals import validate_cart_addons -from pretix.base.templatetags.rich_text import rich_text_snippet -from pretix.base.views.tasks import AsyncAction -from pretix.multidomain.urlreverse import eventreverse -from pretix.presale.forms.checkout import ( - ContactForm, InvoiceAddressForm, InvoiceNameForm, -) -from pretix.presale.signals import ( - checkout_all_optional, checkout_confirm_messages, checkout_flow_steps, - contact_form_fields, contact_form_fields_overrides, - order_meta_from_request, question_form_fields, - question_form_fields_overrides, -) -from pretix.presale.views import ( - CartMixin, get_cart, get_cart_is_free, get_cart_total, -) -from pretix.presale.views.cart import ( - cart_session, create_empty_cart_id, get_or_create_cart_id, -) -from pretix.presale.views.event import get_grouped_items -from pretix.presale.views.questions import QuestionsViewMixin - - -class BaseCheckoutFlowStep: - requires_valid_cart = True - icon = 'pencil' - - def __init__(self, event): - self.event = event - self.request = None - - @property - def identifier(self): - raise NotImplementedError() - - @property - def label(self): - return pgettext_lazy('checkoutflow', 'Step') - - @property - def priority(self): - return 100 - - def is_applicable(self, request): - return True - - def is_completed(self, request, warn=False): - raise NotImplementedError() - - def get_next_applicable(self, request): - if hasattr(self, '_next') and self._next: - if not self._next.is_applicable(request): - return self._next.get_next_applicable(request) - return self._next - - def get_prev_applicable(self, request): - if hasattr(self, '_previous') and self._previous: - if not self._previous.is_applicable(request): - return self._previous.get_prev_applicable(request) - return self._previous - - def get(self, request): - return HttpResponseNotAllowed([]) - - def post(self, request): - return HttpResponseNotAllowed([]) - - def get_step_url(self, request): - kwargs = {'step': self.identifier} - if request.resolver_match and 'cart_namespace' in request.resolver_match.kwargs: - kwargs['cart_namespace'] = request.resolver_match.kwargs['cart_namespace'] - return eventreverse(self.event, 'presale:event.checkout', kwargs=kwargs) - - def get_prev_url(self, request): - prev = self.get_prev_applicable(request) - if not prev: - kwargs = {} - if request.resolver_match and 'cart_namespace' in request.resolver_match.kwargs: - kwargs['cart_namespace'] = request.resolver_match.kwargs['cart_namespace'] - return eventreverse(self.request.event, 'presale:event.index', kwargs=kwargs) - else: - return prev.get_step_url(request) - - def get_next_url(self, request): - n = self.get_next_applicable(request) - if n: - return n.get_step_url(request) - - @cached_property - def cart_session(self): - return cart_session(self.request) - - @cached_property - def invoice_address(self): - if not hasattr(self.request, '_checkout_flow_invoice_address'): - iapk = self.cart_session.get('invoice_address') - if not iapk: - self.request._checkout_flow_invoice_address = InvoiceAddress() - else: - try: - with scopes_disabled(): - self.request._checkout_flow_invoice_address = InvoiceAddress.objects.get( - pk=iapk, order__isnull=True - ) - except InvoiceAddress.DoesNotExist: - self.request._checkout_flow_invoice_address = InvoiceAddress() - return self.request._checkout_flow_invoice_address +from pretix.presale.signals import checkout_flow_steps def get_checkout_flow(event): @@ -152,786 +26,9 @@ def get_checkout_flow(event): last = step return flow - -class TemplateFlowStep(TemplateResponseMixin, BaseCheckoutFlowStep): - template_name = "" - - def get_context_data(self, **kwargs): - kwargs.setdefault('step', self) - kwargs.setdefault('event', self.event) - kwargs.setdefault('has_prev', self.get_prev_applicable(self.request) is not None) - kwargs.setdefault('prev_url', self.get_prev_url(self.request)) - kwargs.setdefault('checkout_flow', [ - step - for step in self.request._checkout_flow - if step.is_applicable(self.request) - ]) - return kwargs - - def render(self, **kwargs): - context = self.get_context_data(**kwargs) - return self.render_to_response(context) - - def get(self, request): - self.request = request - return self.render() - - def post(self, request): - self.request = request - return self.render() - - def is_completed(self, request, warn=False): - raise NotImplementedError() - - @property - def identifier(self): - raise NotImplementedError() - - -class AddOnsStep(CartMixin, AsyncAction, TemplateFlowStep): - priority = 40 - identifier = "addons" - template_name = "pretixpresale/event/checkout_addons.html" - task = set_cart_addons - known_errortypes = ['CartError'] - requires_valid_cart = False - label = pgettext_lazy('checkoutflow', 'Add-on products') - icon = 'puzzle-piece' - - def is_applicable(self, request): - if not hasattr(request, '_checkoutflow_addons_applicable'): - request._checkoutflow_addons_applicable = get_cart(request).filter(item__addons__isnull=False).exists() - return request._checkoutflow_addons_applicable - - def is_completed(self, request, warn=False): - if getattr(self, '_completed', None) is not None: - return self._completed - for cartpos in get_cart(request).filter(addon_to__isnull=True).prefetch_related( - 'item__addons', 'item__addons__addon_category', 'addons', 'addons__item' - ): - a = cartpos.addons.all() - for iao in cartpos.item.addons.all(): - found = len([1 for p in a if p.item.category_id == iao.addon_category_id and not p.is_bundled]) - if found < iao.min_count or found > iao.max_count: - self._completed = False - return False - self._completed = True - return True - - @cached_property - def forms(self): - """ - A list of forms with one form for each cart position that can have add-ons. - All forms have a custom prefix, so that they can all be submitted at once. - """ - formset = [] - quota_cache = {} - item_cache = {} - for cartpos in get_cart(self.request).filter(addon_to__isnull=True).prefetch_related( - 'item__addons', 'item__addons__addon_category', 'addons', 'addons__variation', - ).order_by('pk'): - formsetentry = { - 'cartpos': cartpos, - 'item': cartpos.item, - 'variation': cartpos.variation, - 'categories': [] - } - formset.append(formsetentry) - - current_addon_products = defaultdict(list) - for a in cartpos.addons.all(): - if not a.is_bundled: - current_addon_products[a.item_id, a.variation_id].append(a) - - for iao in cartpos.item.addons.all(): - ckey = '{}-{}'.format(cartpos.subevent.pk if cartpos.subevent else 0, iao.addon_category.pk) - - if ckey not in item_cache: - # Get all items to possibly show - items, _btn = get_grouped_items( - self.request.event, - subevent=cartpos.subevent, - voucher=None, - channel=self.request.sales_channel.identifier, - base_qs=iao.addon_category.items, - allow_addons=True, - quota_cache=quota_cache - ) - item_cache[ckey] = items - else: - items = item_cache[ckey] - - for i in items: - i.allow_waitinglist = False - - if i.has_variations: - for v in i.available_variations: - v.initial = len(current_addon_products[i.pk, v.pk]) - if v.initial and i.free_price: - a = current_addon_products[i.pk, v.pk][0] - v.initial_price = TaxedPrice( - net=a.price - a.tax_value, - gross=a.price, - tax=a.tax_value, - name=a.item.tax_rule.name if a.item.tax_rule else "", - rate=a.tax_rate, - ) - else: - v.initial_price = v.display_price - i.expand = any(v.initial for v in i.available_variations) - else: - i.initial = len(current_addon_products[i.pk, None]) - if i.initial and i.free_price: - a = current_addon_products[i.pk, None][0] - i.initial_price = TaxedPrice( - net=a.price - a.tax_value, - gross=a.price, - tax=a.tax_value, - name=a.item.tax_rule.name if a.item.tax_rule else "", - rate=a.tax_rate, - ) - else: - i.initial_price = i.display_price - - if items: - formsetentry['categories'].append({ - 'category': iao.addon_category, - 'price_included': iao.price_included, - 'multi_allowed': iao.multi_allowed, - 'min_count': iao.min_count, - 'max_count': iao.max_count, - 'iao': iao, - 'items': items - }) - return formset - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['forms'] = self.forms - ctx['cart'] = self.get_cart() - return ctx - - def get_success_message(self, value): - return None - - def get_success_url(self, value): - return self.get_next_url(self.request) - - def get_error_url(self): - return self.get_step_url(self.request) - - def get(self, request, **kwargs): - self.request = request - if 'async_id' in request.GET and settings.HAS_CELERY: - return self.get_result(request) - return TemplateFlowStep.get(self, request) - - def _clean_category(self, form, category): - selected = {} - for i in category['items']: - if i.has_variations: - for v in i.available_variations: - val = int(self.request.POST.get(f'cp_{form["cartpos"].pk}_variation_{i.pk}_{v.pk}') or '0') - price = self.request.POST.get(f'cp_{form["cartpos"].pk}_variation_{i.pk}_{v.pk}_price') or '0' - if val: - selected[i, v] = val, price - else: - val = int(self.request.POST.get(f'cp_{form["cartpos"].pk}_item_{i.pk}') or '0') - price = self.request.POST.get(f'cp_{form["cartpos"].pk}_item_{i.pk}_price') or '0' - if val: - selected[i, None] = val, price - - if sum(a[0] for a in selected.values()) > category['max_count']: - # TODO: Proper pluralization - raise ValidationError( - _(error_messages['addon_max_count']), - 'addon_max_count', - { - 'base': str(form['item'].name), - 'max': category['max_count'], - 'cat': str(category['category'].name), - } - ) - elif sum(a[0] for a in selected.values()) < category['min_count']: - # TODO: Proper pluralization - raise ValidationError( - _(error_messages['addon_min_count']), - 'addon_min_count', - { - 'base': str(form['item'].name), - 'min': category['min_count'], - 'cat': str(category['category'].name), - } - ) - elif any(sum(v[0] for k, v in selected.items() if k[0] == i) > 1 for i in category['items']) and not category['multi_allowed']: - raise ValidationError( - _(error_messages['addon_no_multi']), - 'addon_no_multi', - { - 'base': str(form['item'].name), - 'cat': str(category['category'].name), - } - ) - try: - validate_cart_addons.send( - sender=self.event, - addons={k: v[0] for k, v in selected.items()}, - base_position=form["cartpos"], - iao=category['iao'] - ) - except CartError as e: - raise ValidationError(str(e)) - - return selected - - def post(self, request, *args, **kwargs): - self.request = request - data = [] - for f in self.forms: - for c in f['categories']: - try: - selected = self._clean_category(f, c) - except ValidationError as e: - messages.error(request, e.message % e.params if e.params else e.message) - return self.get(request, *args, **kwargs) - - for (i, v), (c, price) in selected.items(): - data.append({ - 'addon_to': f['cartpos'].pk, - 'item': i.pk, - 'variation': v.pk if v else None, - 'count': c, - 'price': price, - }) - - return self.do(self.request.event.id, data, get_or_create_cart_id(self.request), - invoice_address=self.invoice_address.pk, locale=get_language(), - sales_channel=request.sales_channel.identifier) - - -class QuestionsStep(QuestionsViewMixin, CartMixin, TemplateFlowStep): - priority = 50 - identifier = "questions" - template_name = "pretixpresale/event/checkout_questions.html" - label = pgettext_lazy('checkoutflow', 'Your information') - - def is_applicable(self, request): - return True - - @cached_property - def all_optional(self): - for recv, resp in checkout_all_optional.send(sender=self.request.event, request=self.request): - if resp: - return True - return False - - @cached_property - def _contact_override_sets(self): - return [ - resp for recv, resp in contact_form_fields_overrides.send( - self.request.event, - request=self.request, - order=None, - ) - ] - - @cached_property - def contact_form(self): - wd = self.cart_session.get('widget_data', {}) - initial = { - 'email': ( - self.cart_session.get('email', '') or - wd.get('email', '') - ), - 'phone': wd.get('phone', None) - } - initial.update(self.cart_session.get('contact_form_data', {})) - - override_sets = self._contact_override_sets - for overrides in override_sets: - initial.update({ - k: v['initial'] for k, v in overrides.items() if 'initial' in v - }) - - f = ContactForm(data=self.request.POST if self.request.method == "POST" else None, - event=self.request.event, - request=self.request, - initial=initial, all_optional=self.all_optional) - if wd.get('email', '') and wd.get('fix', '') == "true": - f.fields['email'].disabled = True - - for overrides in override_sets: - for fname, val in overrides.items(): - if 'disabled' in val and fname in f.fields: - f.fields[fname].disabled = val['disabled'] - - return f - - def get_question_override_sets(self, cart_position): - return [ - resp for recv, resp in question_form_fields_overrides.send( - self.request.event, - position=cart_position, - request=self.request - ) - ] - - @cached_property - def eu_reverse_charge_relevant(self): - return any([p.item.tax_rule and (p.item.tax_rule.eu_reverse_charge or p.item.tax_rule.custom_rules) - for p in self.positions]) - - @cached_property - def invoice_form(self): - wd = self.cart_session.get('widget_data', {}) - if not self.invoice_address.pk: - wd_initial = { - 'name_parts': { - k[21:].replace('-', '_'): v - for k, v in wd.items() - if k.startswith('invoice-address-name-') - }, - 'company': wd.get('invoice-address-company', ''), - 'is_business': bool(wd.get('invoice-address-company', '')), - 'street': wd.get('invoice-address-street', ''), - 'zipcode': wd.get('invoice-address-zipcode', ''), - 'city': wd.get('invoice-address-city', ''), - 'country': wd.get('invoice-address-country', ''), - } - else: - wd_initial = {} - initial = dict(wd_initial) - - override_sets = self._contact_override_sets - for overrides in override_sets: - initial.update({ - k: v['initial'] for k, v in overrides.items() if 'initial' in v - }) - - if not self.address_asked and self.request.event.settings.invoice_name_required: - f = InvoiceNameForm(data=self.request.POST if self.request.method == "POST" else None, - event=self.request.event, - request=self.request, - instance=self.invoice_address, - initial=initial, - validate_vat_id=False, all_optional=self.all_optional) - else: - f = InvoiceAddressForm(data=self.request.POST if self.request.method == "POST" else None, - event=self.request.event, - request=self.request, - initial=initial, - instance=self.invoice_address, - validate_vat_id=self.eu_reverse_charge_relevant, all_optional=self.all_optional) - for name, field in f.fields.items(): - if wd_initial.get(name) and wd.get('fix', '') == 'true': - field.disabled = True - - for overrides in override_sets: - for fname, val in overrides.items(): - if 'disabled' in val and fname in f.fields: - f.fields[fname].disabled = val['disabled'] - - return f - - @cached_property - def address_asked(self): - return ( - self.request.event.settings.invoice_address_asked - and (not self.request.event.settings.invoice_address_not_asked_free or not get_cart_is_free(self.request)) - ) - - def post(self, request): - self.request = request - failed = not self.save() or not self.contact_form.is_valid() - if self.address_asked or self.request.event.settings.invoice_name_required: - failed = failed or not self.invoice_form.is_valid() - if failed: - messages.error(request, - _("We had difficulties processing your input. Please review the errors below.")) - return self.render() - self.cart_session['email'] = self.contact_form.cleaned_data['email'] - d = dict(self.contact_form.cleaned_data) - if d.get('phone'): - d['phone'] = str(d['phone']) - self.cart_session['contact_form_data'] = d - if self.address_asked or self.request.event.settings.invoice_name_required: - addr = self.invoice_form.save() - try: - diff = update_tax_rates( - event=request.event, - cart_id=get_or_create_cart_id(request), - invoice_address=addr - ) - except TaxRule.SaleNotAllowed: - messages.error(request, - _("Unfortunately, based on the invoice address you entered, we're not able to sell you " - "the selected products for tax-related legal reasons.")) - return self.render() - - self.cart_session['invoice_address'] = addr.pk - if abs(diff) > Decimal('0.001'): - messages.info(request, _('Due to the invoice address you entered, we need to apply a different tax ' - 'rate to your purchase and the price of the products in your cart has ' - 'changed accordingly.')) - return redirect(self.get_next_url(request) + '?open_cart=true') - - return redirect(self.get_next_url(request)) - - def is_completed(self, request, warn=False): - self.request = request - try: - emailval = EmailValidator() - if not self.cart_session.get('email') and not self.all_optional: - if warn: - messages.warning(request, _('Please enter a valid email address.')) - return False - if self.cart_session.get('email'): - emailval(self.cart_session.get('email')) - except ValidationError: - if warn: - messages.warning(request, _('Please enter a valid email address.')) - return False - - if not self.all_optional: - - if self.address_asked: - if request.event.settings.invoice_address_required and (not self.invoice_address or not self.invoice_address.street): - messages.warning(request, _('Please enter your invoicing address.')) - return False - - if request.event.settings.invoice_name_required and (not self.invoice_address or not self.invoice_address.name): - messages.warning(request, _('Please enter your name.')) - return False - - for cp in self._positions_for_questions: - answ = { - aw.question_id: aw for aw in cp.answerlist - } - question_cache = { - q.pk: q for q in cp.item.questions_to_ask - } - - def question_is_visible(parentid, qvals): - if parentid not in question_cache: - return False - parentq = question_cache[parentid] - if parentq.dependency_question_id and not question_is_visible(parentq.dependency_question_id, parentq.dependency_values): - return False - if parentid not in answ: - return False - return ( - ('True' in qvals and answ[parentid].answer == 'True') - or ('False' in qvals and answ[parentid].answer == 'False') - or (any(qval in [o.identifier for o in answ[parentid].options.all()] for qval in qvals)) - ) - - def question_is_required(q): - return ( - q.required and - (not q.dependency_question_id or question_is_visible(q.dependency_question_id, q.dependency_values)) - ) - - for q in cp.item.questions_to_ask: - if question_is_required(q) and q.id not in answ: - if warn: - messages.warning(request, _('Please fill in answers to all required questions.')) - return False - if cp.item.admission and self.request.event.settings.get('attendee_names_required', as_type=bool) \ - and not cp.attendee_name_parts: - if warn: - messages.warning(request, _('Please fill in answers to all required questions.')) - return False - if cp.item.admission and self.request.event.settings.get('attendee_emails_required', as_type=bool) \ - and cp.attendee_email is None: - if warn: - messages.warning(request, _('Please fill in answers to all required questions.')) - return False - if cp.item.admission and self.request.event.settings.get('attendee_company_required', as_type=bool) \ - and cp.company is None: - if warn: - messages.warning(request, _('Please fill in answers to all required questions.')) - return False - if cp.item.admission and self.request.event.settings.get('attendee_attendees_required', as_type=bool) \ - and (cp.street is None or cp.city is None or cp.country is None): - if warn: - messages.warning(request, _('Please fill in answers to all required questions.')) - return False - - responses = question_form_fields.send(sender=self.request.event, position=cp) - form_data = cp.meta_info_data.get('question_form_data', {}) - for r, response in sorted(responses, key=lambda r: str(r[0])): - for key, value in response.items(): - if value.required and not form_data.get(key): - return False - return True - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['formgroups'] = self.formdict.items() - ctx['contact_form'] = self.contact_form - ctx['invoice_form'] = self.invoice_form - ctx['reverse_charge_relevant'] = self.eu_reverse_charge_relevant - ctx['cart'] = self.get_cart() - ctx['cart_session'] = self.cart_session - ctx['invoice_address_asked'] = self.address_asked - return ctx - - -class PaymentStep(CartMixin, TemplateFlowStep): - priority = 200 - identifier = "payment" - template_name = "pretixpresale/event/checkout_payment.html" - label = pgettext_lazy('checkoutflow', 'Payment') - icon = 'credit-card' - - @cached_property - def _total_order_value(self): - cart = get_cart(self.request) - total = get_cart_total(self.request) - total += sum([f.value for f in get_fees(self.request.event, self.request, total, self.invoice_address, None, - cart)]) - return Decimal(total) - - @cached_property - def provider_forms(self): - providers = [] - for provider in sorted(self.request.event.get_payment_providers().values(), key=lambda p: str(p.public_name)): - if not provider.is_enabled or not self._is_allowed(provider, self.request): - continue - fee = provider.calculate_fee(self._total_order_value) - if 'total' in inspect.signature(provider.payment_form_render).parameters: - form = provider.payment_form_render(self.request, self._total_order_value + fee) - else: - form = provider.payment_form_render(self.request) - providers.append({ - 'provider': provider, - 'fee': fee, - 'total': self._total_order_value + fee, - 'form': form - }) - return providers - - def post(self, request): - self.request = request - for p in self.provider_forms: - if p['provider'].identifier == request.POST.get('payment', ''): - self.cart_session['payment'] = p['provider'].identifier - resp = p['provider'].checkout_prepare( - request, - self.get_cart() - ) - if isinstance(resp, str): - return redirect(resp) - elif resp is True: - return redirect(self.get_next_url(request)) - else: - return self.render() - messages.error(self.request, _("Please select a payment method.")) - return self.render() - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['providers'] = self.provider_forms - ctx['show_fees'] = any(p['fee'] for p in self.provider_forms) - ctx['selected'] = self.request.POST.get('payment', self.cart_session.get('payment', '')) - if len(self.provider_forms) == 1: - ctx['selected'] = self.provider_forms[0]['provider'].identifier - ctx['cart'] = self.get_cart() - return ctx - - @cached_property - def payment_provider(self): - return self.request.event.get_payment_providers().get(self.cart_session['payment']) - - def _is_allowed(self, prov, request): - return prov.is_allowed(request, total=self._total_order_value) - - def is_completed(self, request, warn=False): - self.request = request - if 'payment' not in self.cart_session or not self.payment_provider: - if warn: - messages.error(request, _('The payment information you entered was incomplete.')) - return False - if not self.payment_provider.payment_is_valid_session(request) or \ - not self.payment_provider.is_enabled or \ - not self._is_allowed(self.payment_provider, request): - if warn: - messages.error(request, _('The payment information you entered was incomplete.')) - return False - return True - - def is_applicable(self, request): - self.request = request - - for cartpos in get_cart(self.request): - if cartpos.item.require_approval: - if 'payment' in self.cart_session: - del self.cart_session['payment'] - return False - - for p in self.request.event.get_payment_providers().values(): - if p.is_implicit(request) if callable(p.is_implicit) else p.is_implicit: - if self._is_allowed(p, request): - self.cart_session['payment'] = p.identifier - return False - elif self.cart_session.get('payment') == p.identifier: - # is_allowed might have changed, e.g. after add-on selection - del self.cart_session['payment'] - - return True - - -class ConfirmStep(CartMixin, AsyncAction, TemplateFlowStep): - priority = 1001 - identifier = "confirm" - template_name = "pretixpresale/event/checkout_confirm.html" - task = perform_order - known_errortypes = ['OrderError'] - label = pgettext_lazy('checkoutflow', 'Review order') - icon = 'eye' - - def is_applicable(self, request): - return True - - def is_completed(self, request, warn=False): - pass - - @cached_property - def address_asked(self): - return ( - self.request.event.settings.invoice_address_asked - and (not self.request.event.settings.invoice_address_not_asked_free or not get_cart_is_free(self.request)) - ) - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - ctx['cart'] = self.get_cart(answers=True) - if self.payment_provider: - ctx['payment'] = self.payment_provider.checkout_confirm_render(self.request) - ctx['payment_provider'] = self.payment_provider - ctx['require_approval'] = any(cp.item.require_approval for cp in ctx['cart']['positions']) - ctx['addr'] = self.invoice_address - ctx['confirm_messages'] = self.confirm_messages - ctx['cart_session'] = self.cart_session - ctx['invoice_address_asked'] = self.address_asked - - self.cart_session['shown_total'] = str(ctx['cart']['total']) - - email = self.cart_session.get('contact_form_data', {}).get('email') - if email != settings.PRETIX_EMAIL_NONE_VALUE: - ctx['contact_info'] = [ - (_('E-mail'), email), - ] - else: - ctx['contact_info'] = [] - phone = self.cart_session.get('contact_form_data', {}).get('phone') - if phone: - ctx['contact_info'].append((_('Phone number'), phone)) - responses = contact_form_fields.send(self.event, request=self.request) - for r, response in sorted(responses, key=lambda r: str(r[0])): - for key, value in response.items(): - v = self.cart_session.get('contact_form_data', {}).get(key) - v = value.bound_data(v, initial='') - if v is True: - v = _('Yes') - elif v is False: - v = _('No') - ctx['contact_info'].append((rich_text_snippet(value.label), v)) - - return ctx - - @cached_property - def confirm_messages(self): - if self.all_optional: - return {} - msgs = {} - responses = checkout_confirm_messages.send(self.request.event) - for receiver, response in responses: - msgs.update(response) - return msgs - - @cached_property - def payment_provider(self): - if 'payment' not in self.cart_session: - return None - return self.request.event.get_payment_providers().get(self.cart_session['payment']) - - def get(self, request): - self.request = request - if 'async_id' in request.GET and settings.HAS_CELERY: - return self.get_result(request) - return TemplateFlowStep.get(self, request) - - @cached_property - def all_optional(self): - for recv, resp in checkout_all_optional.send(sender=self.request.event, request=self.request): - if resp: - return True - return False - - def post(self, request): - self.request = request - - if self.confirm_messages and not self.all_optional: - for key, msg in self.confirm_messages.items(): - if request.POST.get('confirm_{}'.format(key)) != 'yes': - msg = str(_('You need to check all checkboxes on the bottom of the page.')) - messages.error(self.request, msg) - if "ajax" in self.request.POST or "ajax" in self.request.GET: - return JsonResponse({ - 'ready': True, - 'redirect': self.get_error_url(), - 'message': msg - }) - return redirect(self.get_error_url()) - - meta_info = { - 'contact_form_data': self.cart_session.get('contact_form_data', {}), - 'confirm_messages': [ - str(m) for m in self.confirm_messages.values() - ] - } - for receiver, response in order_meta_from_request.send(sender=request.event, request=request): - meta_info.update(response) - - return self.do(self.request.event.id, self.payment_provider.identifier if self.payment_provider else None, - [p.id for p in self.positions], self.cart_session.get('email'), - translation.get_language(), self.invoice_address.pk, meta_info, - request.sales_channel.identifier, self.cart_session.get('gift_cards'), - self.cart_session.get('shown_total')) - - def get_success_message(self, value): - create_empty_cart_id(self.request) - return None - - def get_success_url(self, value): - order = Order.objects.get(id=value) - return self.get_order_url(order) - - def get_error_message(self, exception): - if exception.__class__.__name__ == 'SendMailException': - return _('There was an error sending the confirmation mail. Please try again later.') - return super().get_error_message(exception) - - def get_error_url(self): - return self.get_step_url(self.request) - - def get_order_url(self, order): - payment = order.payments.filter(state=OrderPayment.PAYMENT_STATE_CREATED).first() - if not payment: - return eventreverse(self.request.event, 'presale:event.order', kwargs={ - 'order': order.code, - 'secret': order.secret, - }) + '?thanks=1' - return eventreverse(self.request.event, 'presale:event.order.pay.complete', kwargs={ - 'order': order.code, - 'secret': order.secret, - 'payment': payment.pk - }) - - DEFAULT_FLOW = ( AddOnsStep, + CustomerStep, QuestionsStep, PaymentStep, ConfirmStep diff --git a/src/pretix/presale/checkoutflowstep/__init__.py b/src/pretix/presale/checkoutflowstep/__init__.py new file mode 100644 index 000000000..8898e524c --- /dev/null +++ b/src/pretix/presale/checkoutflowstep/__init__.py @@ -0,0 +1,7 @@ +from .add_ons_step import AddOnsStep +from .base_checkout_flow_step import BaseCheckoutFlowStep +from .confirm_step import ConfirmStep +from .customer_step import CustomerStep +from .payment_step import PaymentStep +from .questions_step import QuestionsStep +from .template_flow_step import TemplateFlowStep diff --git a/src/pretix/presale/checkoutflowstep/add_ons_step.py b/src/pretix/presale/checkoutflowstep/add_ons_step.py new file mode 100644 index 000000000..e3d11fd2f --- /dev/null +++ b/src/pretix/presale/checkoutflowstep/add_ons_step.py @@ -0,0 +1,268 @@ +from collections import defaultdict + +from django.conf import settings +from django.contrib import messages +from django.core.exceptions import ValidationError +from django.utils.functional import cached_property +from django.utils.translation import ( + get_language, gettext_lazy as _, pgettext_lazy, +) + +from pretix.base.models.tax import TaxedPrice +from pretix.base.services.cart import ( + CartError, error_messages, set_cart_addons, +) +from pretix.base.signals import validate_cart_addons +from pretix.base.views.tasks import AsyncAction +from pretix.presale.views import CartMixin, get_cart +from pretix.presale.views.cart import get_or_create_cart_id +from pretix.presale.views.event import get_grouped_items + +from .template_flow_step import TemplateFlowStep + + +class AddOnsStep(CartMixin, AsyncAction, TemplateFlowStep): + priority = 40 + identifier = "addons" + template_name = "pretixpresale/event/checkout_addons.html" + task = set_cart_addons + known_errortypes = ['CartError'] + requires_valid_cart = False + label = pgettext_lazy('checkoutflow', 'Add-on products') + icon = 'puzzle-piece' + + def is_applicable(self, request): + if not hasattr(request, '_checkoutflow_addons_applicable'): + request._checkoutflow_addons_applicable = get_cart(request).filter(item__addons__isnull=False).exists() + return request._checkoutflow_addons_applicable + + def is_completed(self, request, warn=False): + if getattr(self, '_completed', None) is not None: + return self._completed + cart_positions = ( + get_cart(request) + .filter(addon_to__isnull=True) + .prefetch_related( + 'item__addons', + 'item__addons__addon_category', + 'addons', + 'addons__item' + ) + ) + + for cartpos in cart_positions: + a = cartpos.addons.all() + for addon in cartpos.item.addons.all(): + count = sum(1 for item in a if item.item.category_id == addon.addon_category_id and not item.is_bundled) + if not addon.min_count <= count <= addon.max_count: + self._completed = False + return False + self._completed = True + return True + + @cached_property + def forms(self): + """ + A list of forms with one form for each cart position that can have add-ons. + All forms have a custom prefix, so that they can all be submitted at once. + """ + formset = [] + quota_cache = {} + item_cache = {} + cart_positions = ( + get_cart(self.request) + .filter(addon_to__isnull=True) + .prefetch_related( + 'item__addons', + 'item__addons__addon_category', + 'addons', + 'addons__variation' + ) + .order_by('pk') + ) + for cartpos in cart_positions: + formsetentry = { + 'cartpos': cartpos, + 'item': cartpos.item, + 'variation': cartpos.variation, + 'categories': [] + } + formset.append(formsetentry) + + current_addon_products = defaultdict(list) + for a in cartpos.addons.all(): + if not a.is_bundled: + current_addon_products[a.item_id, a.variation_id].append(a) + + for iao in cartpos.item.addons.all(): + ckey = '{}-{}'.format(cartpos.subevent.pk if cartpos.subevent else 0, iao.addon_category.pk) + + if ckey not in item_cache: + # Get all items to possibly show + items, _btn = get_grouped_items( + self.request.event, + subevent=cartpos.subevent, + voucher=None, + channel=self.request.sales_channel.identifier, + base_qs=iao.addon_category.items, + allow_addons=True, + quota_cache=quota_cache + ) + item_cache[ckey] = items + else: + items = item_cache[ckey] + + for i in items: + i.allow_waitinglist = False + + if i.has_variations: + for variation in i.available_variations: + variation_id = (i.pk, variation.pk) + variation.initial = len(current_addon_products[variation_id]) + + if variation.initial and i.free_price: + first_addon = current_addon_products[variation_id][0] + variation.initial_price = TaxedPrice( + net=first_addon.price - first_addon.tax_value, + gross=first_addon.price, + tax=first_addon.tax_value, + name=first_addon.item.tax_rule.name if first_addon.item.tax_rule else "", + rate=first_addon.tax_rate, + ) + else: + variation.initial_price = variation.display_price + + i.expand = any(v.initial for v in i.available_variations) + else: + i.initial = len(current_addon_products[i.pk, None]) + if i.initial and i.free_price: + a = current_addon_products[i.pk, None][0] + i.initial_price = TaxedPrice( + net=a.price - a.tax_value, + gross=a.price, + tax=a.tax_value, + name=a.item.tax_rule.name if a.item.tax_rule else "", + rate=a.tax_rate, + ) + else: + i.initial_price = i.display_price + + if items: + formsetentry['categories'].append({ + 'category': iao.addon_category, + 'price_included': iao.price_included, + 'multi_allowed': iao.multi_allowed, + 'min_count': iao.min_count, + 'max_count': iao.max_count, + 'iao': iao, + 'items': items + }) + return formset + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['forms'] = self.forms + ctx['cart'] = self.get_cart() + return ctx + + def get_success_message(self, value): + return None + + def get_success_url(self, value): + return self.get_next_url(self.request) + + def get_error_url(self): + return self.get_step_url(self.request) + + def get(self, request, **kwargs): + self.request = request + if 'async_id' in request.GET and settings.HAS_CELERY: + return self.get_result(request) + return TemplateFlowStep.get(self, request) + + def _clean_category(self, form, category): + selected = {} + for i in category['items']: + item_key_base = f'cp_{form["cartpos"].pk}' + if i.has_variations: + for v in i.available_variations: + variation_key = f'{item_key_base}_variation_{i.pk}_{v.pk}' + val = int(self.request.POST.get(variation_key) or '0') + price = self.request.POST.get(f'{variation_key}_price') or '0' + if val: + selected[i, v] = val, price + else: + item_key = f'{item_key_base}_item_{i.pk}' + val = int(self.request.POST.get(item_key) or '0') + price = self.request.POST.get(f'{item_key}_price') or '0' + if val: + selected[i, None] = val, price + + total_selected_quantity = sum(a[0] for a in selected.values()) + exceeds_single_allowed = any(sum(v[0] for k, v in selected.items() if k[0] == i) > 1 for i in category['items']) and not category[ + 'multi_allowed'] + + if total_selected_quantity > category['max_count']: + raise ValidationError( + _(error_messages['addon_max_count']), + 'addon_max_count', + { + 'base': str(form['item'].name), + 'max': category['max_count'], + 'cat': str(category['category'].name), + } + ) + elif total_selected_quantity < category['min_count']: + raise ValidationError( + _(error_messages['addon_min_count']), + 'addon_min_count', + { + 'base': str(form['item'].name), + 'min': category['min_count'], + 'cat': str(category['category'].name), + } + ) + elif exceeds_single_allowed: + raise ValidationError( + _(error_messages['addon_no_multi']), + 'addon_no_multi', + { + 'base': str(form['item'].name), + 'cat': str(category['category'].name), + } + ) + try: + validate_cart_addons.send( + sender=self.event, + addons={k: v[0] for k, v in selected.items()}, + base_position=form["cartpos"], + iao=category['iao'] + ) + except CartError as e: + raise ValidationError(str(e)) + + return selected + + def post(self, request, *args, **kwargs): + self.request = request + data = [] + for f in self.forms: + for c in f['categories']: + try: + selected = self._clean_category(f, c) + except ValidationError as e: + messages.error(request, e.message % e.params if e.params else e.message) + return self.get(request, *args, **kwargs) + + for (i, v), (c, price) in selected.items(): + data.append({ + 'addon_to': f['cartpos'].pk, + 'item': i.pk, + 'variation': v.pk if v else None, + 'count': c, + 'price': price, + }) + + return self.do(self.request.event.id, data, get_or_create_cart_id(self.request), + invoice_address=self.invoice_address.pk, locale=get_language(), + sales_channel=request.sales_channel.identifier) \ No newline at end of file diff --git a/src/pretix/presale/checkoutflowstep/base_checkout_flow_step.py b/src/pretix/presale/checkoutflowstep/base_checkout_flow_step.py new file mode 100644 index 000000000..92c1262a9 --- /dev/null +++ b/src/pretix/presale/checkoutflowstep/base_checkout_flow_step.py @@ -0,0 +1,94 @@ +from django.http import HttpResponseNotAllowed +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _, pgettext_lazy +from django_scopes import scopes_disabled + +from pretix.base.models.orders import InvoiceAddress +from pretix.multidomain.urlreverse import eventreverse +from pretix.presale.views.cart import cart_session + + +class BaseCheckoutFlowStep: + requires_valid_cart = True + icon = 'pencil' + + def __init__(self, event): + self.event = event + self.request = None + + @property + def identifier(self): + raise NotImplementedError() + + @property + def label(self): + return pgettext_lazy('checkoutflow', 'Step') + + @property + def priority(self): + return 100 + + def is_applicable(self, request): + return True + + def is_completed(self, request, warn=False): + raise NotImplementedError() + + def get_next_applicable(self, request): + if hasattr(self, '_next') and self._next: + if not self._next.is_applicable(request): + return self._next.get_next_applicable(request) + return self._next + + def get_prev_applicable(self, request): + if hasattr(self, '_previous') and self._previous: + if not self._previous.is_applicable(request): + return self._previous.get_prev_applicable(request) + return self._previous + + def get(self, request): + return HttpResponseNotAllowed([]) + + def post(self, request): + return HttpResponseNotAllowed([]) + + def get_step_url(self, request): + kwargs = {'step': self.identifier} + if request.resolver_match and 'cart_namespace' in request.resolver_match.kwargs: + kwargs['cart_namespace'] = request.resolver_match.kwargs['cart_namespace'] + return eventreverse(self.event, 'presale:event.checkout', kwargs=kwargs) + + def get_prev_url(self, request): + prev = self.get_prev_applicable(request) + if not prev: + kwargs = {} + if request.resolver_match and 'cart_namespace' in request.resolver_match.kwargs: + kwargs['cart_namespace'] = request.resolver_match.kwargs['cart_namespace'] + return eventreverse(self.request.event, 'presale:event.index', kwargs=kwargs) + else: + return prev.get_step_url(request) + + def get_next_url(self, request): + n = self.get_next_applicable(request) + if n: + return n.get_step_url(request) + + @cached_property + def cart_session(self): + return cart_session(self.request) + + @cached_property + def invoice_address(self): + if not hasattr(self.request, '_checkout_flow_invoice_address'): + iapk = self.cart_session.get('invoice_address') + if not iapk: + self.request._checkout_flow_invoice_address = InvoiceAddress() + else: + try: + with scopes_disabled(): + self.request._checkout_flow_invoice_address = InvoiceAddress.objects.get( + pk=iapk, order__isnull=True + ) + except InvoiceAddress.DoesNotExist: + self.request._checkout_flow_invoice_address = InvoiceAddress() + return self.request._checkout_flow_invoice_address \ No newline at end of file diff --git a/src/pretix/presale/checkoutflowstep/confirm_step.py b/src/pretix/presale/checkoutflowstep/confirm_step.py new file mode 100644 index 000000000..705a4b69c --- /dev/null +++ b/src/pretix/presale/checkoutflowstep/confirm_step.py @@ -0,0 +1,179 @@ +from django.conf import settings +from django.contrib import messages +from django.http import JsonResponse +from django.shortcuts import redirect +from django.utils import translation +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _, pgettext_lazy + +from pretix.base.models.orders import Order, OrderPayment +from pretix.base.services.orders import perform_order +from pretix.base.templatetags.rich_text import rich_text_snippet +from pretix.base.views.tasks import AsyncAction +from pretix.multidomain.urlreverse import eventreverse +from pretix.presale.signals import ( + checkout_all_optional, checkout_confirm_messages, contact_form_fields, + order_meta_from_request, +) +from pretix.presale.views import CartMixin, get_cart_is_free +from pretix.presale.views.cart import create_empty_cart_id + +from .template_flow_step import TemplateFlowStep + + +class ConfirmStep(CartMixin, AsyncAction, TemplateFlowStep): + priority = 1001 + identifier = "confirm" + template_name = "pretixpresale/event/checkout_confirm.html" + task = perform_order + known_errortypes = ['OrderError'] + label = pgettext_lazy('checkoutflow', 'Review order') + icon = 'eye' + + def is_applicable(self, request): + return True + + def is_completed(self, request, warn=False): + pass + + @cached_property + def address_asked(self): + return ( + self.request.event.settings.invoice_address_asked + and (not self.request.event.settings.invoice_address_not_asked_free or not get_cart_is_free( + self.request)) + ) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['cart'] = self.get_cart(answers=True) + if self.payment_provider: + ctx['payment'] = self.payment_provider.checkout_confirm_render(self.request) + ctx['payment_provider'] = self.payment_provider + ctx['require_approval'] = any(cp.item.require_approval for cp in ctx['cart']['positions']) + ctx['addr'] = self.invoice_address + ctx['confirm_messages'] = self.confirm_messages + ctx['cart_session'] = self.cart_session + ctx['invoice_address_asked'] = self.address_asked + + self.cart_session['shown_total'] = str(ctx['cart']['total']) + + email = self.cart_session.get('contact_form_data', {}).get('email') + if email != settings.PRETIX_EMAIL_NONE_VALUE: + ctx['contact_info'] = [ + (_('E-mail'), email), + ] + else: + ctx['contact_info'] = [] + phone = self.cart_session.get('contact_form_data', {}).get('phone') + if phone: + ctx['contact_info'].append((_('Phone number'), phone)) + responses = contact_form_fields.send(self.event, request=self.request) + for r, response in sorted(responses, key=lambda r: str(r[0])): + for key, value in response.items(): + v = self.cart_session.get('contact_form_data', {}).get(key) + v = value.bound_data(v, initial='') + if v is True: + v = _('Yes') + elif v is False: + v = _('No') + ctx['contact_info'].append((rich_text_snippet(value.label), v)) + + return ctx + + @cached_property + def confirm_messages(self): + if self.all_optional: + return {} + msgs = {} + responses = checkout_confirm_messages.send(self.request.event) + for receiver, response in responses: + msgs.update(response) + return msgs + + @cached_property + def payment_provider(self): + if 'payment' not in self.cart_session: + return None + return self.request.event.get_payment_providers().get(self.cart_session['payment']) + + def get(self, request): + self.request = request + if 'async_id' in request.GET and settings.HAS_CELERY: + return self.get_result(request) + return TemplateFlowStep.get(self, request) + + @cached_property + def all_optional(self): + for recv, resp in checkout_all_optional.send(sender=self.request.event, request=self.request): + if resp: + return True + return False + + def post(self, request): + self.request = request + + if self.confirm_messages and not self.all_optional: + for key, msg in self.confirm_messages.items(): + if request.POST.get('confirm_{}'.format(key)) != 'yes': + msg = str(_('You need to check all checkboxes on the bottom of the page.')) + messages.error(self.request, msg) + if "ajax" in self.request.POST or "ajax" in self.request.GET: + return JsonResponse({ + 'ready': True, + 'redirect': self.get_error_url(), + 'message': msg + }) + return redirect(self.get_error_url()) + + meta_info = { + 'contact_form_data': self.cart_session.get('contact_form_data', {}), + 'confirm_messages': [ + str(m) for m in self.confirm_messages.values() + ] + } + for receiver, response in order_meta_from_request.send(sender=request.event, request=request): + meta_info.update(response) + + return self.do( + self.request.event.id, + payment_provider=self.payment_provider.identifier if self.payment_provider else None, + positions=[p.id for p in self.positions], + email=self.cart_session.get('email'), + locale=translation.get_language(), + address=self.invoice_address.pk, + meta_info=meta_info, + sales_channel=request.sales_channel.identifier, + gift_cards=self.cart_session.get('gift_cards'), + shown_total=self.cart_session.get('shown_total'), + customer=self.cart_session.get('customer'), + ) + + def get_success_message(self, value): + create_empty_cart_id(self.request) + return None + + def get_success_url(self, value): + order = Order.objects.get(id=value) + return self.get_order_url(order) + + def get_error_message(self, exception): + if exception.__class__.__name__ == 'SendMailException': + return _('There was an error sending the confirmation mail. Please try again later.') + return super().get_error_message(exception) + + def get_error_url(self): + return self.get_step_url(self.request) + + def get_order_url(self, order): + payment = order.payments.filter(state=OrderPayment.PAYMENT_STATE_CREATED).first() + if not payment: + return eventreverse(self.request.event, 'presale:event.order', kwargs={ + 'order': order.code, + 'secret': order.secret, + }) + '?thanks=1' + return eventreverse(self.request.event, 'presale:event.order.pay.complete', kwargs={ + 'order': order.code, + 'secret': order.secret, + 'payment': payment.pk + }) \ No newline at end of file diff --git a/src/pretix/presale/checkoutflowstep/customer_step.py b/src/pretix/presale/checkoutflowstep/customer_step.py new file mode 100644 index 000000000..1f0bf076d --- /dev/null +++ b/src/pretix/presale/checkoutflowstep/customer_step.py @@ -0,0 +1,153 @@ +from django.contrib import messages +from django.core.signing import BadSignature, loads +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _, pgettext_lazy + +from pretix.base.models import Customer +from pretix.helpers.http import redirect_to_url +from pretix.presale.forms.customer_forms import AuthenticationForm, RegistrationForm +from pretix.presale.utils import customer_login +from pretix.presale.views import CartMixin +from pretix.presale.views.questions import QuestionsViewMixin + +from .template_flow_step import TemplateFlowStep + + +class CustomerStep(QuestionsViewMixin, CartMixin, TemplateFlowStep): + priority = 45 + identifier = "customer" + template_name = "pretixpresale/event/checkout_customer.html" + label = pgettext_lazy('checkoutflow', 'Customer account') + icon = 'user' + + def is_applicable(self, request): + return request.organizer.settings.customer_accounts + + @cached_property + def login_form(self): + f = AuthenticationForm( + data=( + self.request.POST + if self.request.method == "POST" and self.request.POST.get('customer_mode') == 'login' + else None + ), + prefix='login', + request=self.request.event, + ) + for field in f.fields.values(): + field._show_required = field.required + field.required = False + field.widget.is_required = False + return f + + @cached_property + def signup_allowed(self): + return self.request.event.settings.customer_accounts_native + + @cached_property + def guest_allowed(self): + # To Do - check if guest checkout is allowed + return True + + @cached_property + def register_form(self): + f = RegistrationForm( + data=( + self.request.POST + if self.request.method == "POST" and self.request.POST.get('customer_mode') == 'register' + else None + ), + prefix='register', + request=self.request, + ) + for field in f.fields.values(): + field._show_required = field.required + field.required = False + field.widget.is_required = False + return f + + def _handle_sso_login(self): + value = self.request.POST['login-sso-data'] + try: + data = loads(value, salt=f'customer_sso_popup_{self.request.organizer.pk}', max_age=120) + except BadSignature: + return False + try: + customer = self.request.organizer.customers.get(pk=data['customer'], provider__isnull=False) + except Customer.DoesNotExist: + return False + self.cart_session['customer_mode'] = 'login' + self.cart_session['customer'] = customer.pk + self.cart_session['customer_cart_tied_to_login'] = True + customer_login(self.request, customer) + return True + + def post(self, request): + self.request = request + + if request.POST.get("customer_mode") == 'login': + if self.cart_session.get('customer'): + return redirect_to_url(self.get_next_url(request)) + elif request.customer: + self.cart_session['customer_mode'] = 'login' + self.cart_session['customer'] = request.customer.pk + self.cart_session['customer_cart_tied_to_login'] = True + return redirect_to_url(self.get_next_url(request)) + elif self.request.POST.get("login-sso-data"): + if not self._handle_sso_login(): + messages.error(request, _('We failed to process your authentication request, please try again.')) + return self.render() + return redirect_to_url(self.get_next_url(request)) + elif self.event.settings.customer_accounts_native and self.login_form.is_valid(): + customer_login(self.request, self.login_form.get_customer()) + self.cart_session['customer_mode'] = 'login' + self.cart_session['customer'] = self.login_form.get_customer().pk + self.cart_session['customer_cart_tied_to_login'] = True + return redirect_to_url(self.get_next_url(request)) + else: + return self.render() + elif request.POST.get("customer_mode") == 'register' and self.signup_allowed: + if self.register_form.is_valid(): + customer = self.register_form.create() + self.cart_session['customer_mode'] = 'login' + self.cart_session['customer'] = customer.pk + self.cart_session['customer_cart_tied_to_login'] = False + return redirect_to_url(self.get_next_url(request)) + else: + return self.render() + elif request.POST.get("customer_mode") == 'guest' and self.guest_allowed: + self.cart_session['customer'] = None + self.cart_session['customer_mode'] = 'guest' + return redirect_to_url(self.get_next_url(request)) + else: + return self.render() + + def is_completed(self, request, warn=False): + self.request = request + if self.guest_allowed: + return 'customer_mode' in self.cart_session + else: + return self.cart_session.get('customer_mode') == 'login' + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['cart'] = self.get_cart() + ctx['cart_session'] = self.cart_session + ctx['login_form'] = self.login_form + ctx['register_form'] = self.register_form + ctx['selected'] = self.request.POST.get( + 'customer_mode', + self.cart_session.get('customer_mode', 'login' if self.request.customer else '') + ) + ctx['guest_allowed'] = self.guest_allowed + + if 'customer' in self.cart_session: + try: + ctx['customer'] = self.request.organizer.customers.get(pk=self.cart_session.get('customer', -1)) + except Customer.DoesNotExist: + self.cart_session['customer'] = None + self.cart_session['customer_mode'] = None + elif self.request.customer: + ctx['customer'] = self.request.customer + + return ctx \ No newline at end of file diff --git a/src/pretix/presale/checkoutflowstep/payment_step.py b/src/pretix/presale/checkoutflowstep/payment_step.py new file mode 100644 index 000000000..9a78bbafe --- /dev/null +++ b/src/pretix/presale/checkoutflowstep/payment_step.py @@ -0,0 +1,125 @@ +import inspect +from decimal import Decimal + +from django.contrib import messages +from django.shortcuts import redirect +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _, pgettext_lazy + +from pretix.base.services.cart import get_fees +from pretix.presale.views import CartMixin, get_cart, get_cart_total + +from .template_flow_step import TemplateFlowStep + + +class PaymentStep(CartMixin, TemplateFlowStep): + priority = 200 + identifier = "payment" + template_name = "pretixpresale/event/checkout_payment.html" + label = pgettext_lazy('checkoutflow', 'Payment') + icon = 'credit-card' + + @cached_property + def _total_order_value(self): + cart = get_cart(self.request) + total = get_cart_total(self.request) + total += sum([f.value for f in get_fees(self.request.event, self.request, total, self.invoice_address, None, + cart)]) + return Decimal(total) + + @cached_property + def provider_forms(self): + providers = [] + payment_providers = self.request.event.get_payment_providers().values() + sorted_providers = sorted(payment_providers, key=lambda p: str(p.public_name)) + + for provider in sorted_providers: + if not provider.is_enabled or not self._is_allowed(provider, self.request): + continue + + # Calculate fee and form + fee = provider.calculate_fee(self._total_order_value) + form_params = self._total_order_value + fee if 'total' in inspect.signature(provider.payment_form_render).parameters else None + + form = provider.payment_form_render(self.request, form_params) + + # Append provider info to list + providers.append({ + 'provider': provider, + 'fee': fee, + 'total': self._total_order_value + fee, + 'form': form + }) + + return providers + + def post(self, request): + self.request = request + payment_identifier = request.POST.get('payment', '') + for provider_form in self.provider_forms: + provider = provider_form['provider'] + + if provider.identifier == payment_identifier: + self.cart_session['payment'] = provider.identifier + response = provider.checkout_prepare(request, self.get_cart()) + + if isinstance(response, str): + return redirect(response) + elif response is True: + return redirect(self.get_next_url(request)) + else: + return self.render() + + messages.error(self.request, _("Please select a payment method.")) + return self.render() + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['providers'] = self.provider_forms + ctx['show_fees'] = any(p['fee'] for p in self.provider_forms) + ctx['selected'] = self.request.POST.get('payment', self.cart_session.get('payment', '')) + if len(self.provider_forms) == 1: + ctx['selected'] = self.provider_forms[0]['provider'].identifier + ctx['cart'] = self.get_cart() + return ctx + + @cached_property + def payment_provider(self): + return self.request.event.get_payment_providers().get(self.cart_session['payment']) + + def _is_allowed(self, prov, request): + return prov.is_allowed(request, total=self._total_order_value) + + def is_completed(self, request, warn=False): + self.request = request + if 'payment' not in self.cart_session or not self.payment_provider: + if warn: + messages.error(request, _('The payment information you entered was incomplete.')) + return False + if not self.payment_provider.payment_is_valid_session(request) or \ + not self.payment_provider.is_enabled or \ + not self._is_allowed(self.payment_provider, request): + if warn: + messages.error(request, _('The payment information you entered was incomplete.')) + return False + return True + + def is_applicable(self, request): + self.request = request + + for cartpos in get_cart(self.request): + if cartpos.item.require_approval: + if 'payment' in self.cart_session: + del self.cart_session['payment'] + return False + + for p in self.request.event.get_payment_providers().values(): + if p.is_implicit(request) if callable(p.is_implicit) else p.is_implicit: + if self._is_allowed(p, request): + self.cart_session['payment'] = p.identifier + return False + elif self.cart_session.get('payment') == p.identifier: + # is_allowed might have changed, e.g. after add-on selection + del self.cart_session['payment'] + + return True \ No newline at end of file diff --git a/src/pretix/presale/checkoutflowstep/questions_step.py b/src/pretix/presale/checkoutflowstep/questions_step.py new file mode 100644 index 000000000..39fba7d68 --- /dev/null +++ b/src/pretix/presale/checkoutflowstep/questions_step.py @@ -0,0 +1,312 @@ +from decimal import Decimal + +from django.contrib import messages +from django.core.exceptions import ValidationError +from django.core.validators import EmailValidator +from django.shortcuts import redirect +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _, pgettext_lazy + +from pretix.base.models.tax import TaxRule +from pretix.base.services.cart import update_tax_rates +from pretix.presale.forms.checkout import ( + ContactForm, InvoiceAddressForm, InvoiceNameForm, +) +from pretix.presale.signals import ( + checkout_all_optional, contact_form_fields_overrides, question_form_fields, + question_form_fields_overrides, +) +from pretix.presale.views import CartMixin, get_cart_is_free +from pretix.presale.views.cart import get_or_create_cart_id +from pretix.presale.views.questions import QuestionsViewMixin + +from .template_flow_step import TemplateFlowStep + + +class QuestionsStep(QuestionsViewMixin, CartMixin, TemplateFlowStep): + priority = 50 + identifier = "questions" + template_name = "pretixpresale/event/checkout_questions.html" + label = pgettext_lazy('checkoutflow', 'Your information') + + def is_applicable(self, request): + return True + + @cached_property + def all_optional(self): + for recv, resp in checkout_all_optional.send(sender=self.request.event, request=self.request): + if resp: + return True + return False + + @cached_property + def _contact_override_sets(self): + return [ + resp for recv, resp in contact_form_fields_overrides.send( + self.request.event, + request=self.request, + order=None, + ) + ] + + @cached_property + def contact_form(self): + wd = self.cart_session.get('widget_data', {}) + initial = { + 'email': ( + self.cart_session.get('email', '') or + wd.get('email', '') + ), + 'phone': wd.get('phone', None) + } + initial.update(self.cart_session.get('contact_form_data', {})) + + override_sets = self._contact_override_sets + for overrides in override_sets: + initial.update({ + k: v['initial'] for k, v in overrides.items() if 'initial' in v + }) + if self.cart_customer: + initial['email'] = self.cart_customer.email + + f = ContactForm(data=self.request.POST if self.request.method == "POST" else None, + event=self.request.event, + request=self.request, + initial=initial, all_optional=self.all_optional) + if wd.get('email', '') and wd.get('fix', '') == "true" or self.cart_customer: + f.fields['email'].disabled = True + + for overrides in override_sets: + for fname, val in overrides.items(): + if 'disabled' in val and fname in f.fields: + f.fields[fname].disabled = val['disabled'] + + return f + + def get_question_override_sets(self, cart_position): + o = [] + if self.cart_customer: + o.append({ + 'attendee_name_parts': { + 'initial': self.cart_customer.name_parts + } + }) + o += [ + resp for recv, resp in question_form_fields_overrides.send( + self.request.event, + position=cart_position, + request=self.request + ) + ] + return o + + @cached_property + def eu_reverse_charge_relevant(self): + return any([p.item.tax_rule and (p.item.tax_rule.eu_reverse_charge or p.item.tax_rule.custom_rules) + for p in self.positions]) + + @cached_property + def invoice_form(self): + wd = self.cart_session.get('widget_data', {}) + if not self.invoice_address.pk: + wd_initial = { + 'name_parts': { + k[21:].replace('-', '_'): v + for k, v in wd.items() + if k.startswith('invoice-address-name-') + }, + 'company': wd.get('invoice-address-company', ''), + 'is_business': bool(wd.get('invoice-address-company', '')), + 'street': wd.get('invoice-address-street', ''), + 'zipcode': wd.get('invoice-address-zipcode', ''), + 'city': wd.get('invoice-address-city', ''), + 'country': wd.get('invoice-address-country', ''), + } + else: + wd_initial = {} + initial = dict(wd_initial) + + if self.cart_customer: + initial.update({ + 'name_parts': self.cart_customer.name_parts + }) + + override_sets = self._contact_override_sets + for overrides in override_sets: + initial.update({ + k: v['initial'] for k, v in overrides.items() if 'initial' in v + }) + + if not self.address_asked and self.request.event.settings.invoice_name_required: + f = InvoiceNameForm(data=self.request.POST if self.request.method == "POST" else None, + event=self.request.event, + request=self.request, + instance=self.invoice_address, + initial=initial, + validate_vat_id=False, all_optional=self.all_optional) + else: + f = InvoiceAddressForm(data=self.request.POST if self.request.method == "POST" else None, + event=self.request.event, + request=self.request, + initial=initial, + instance=self.invoice_address, + validate_vat_id=self.eu_reverse_charge_relevant, all_optional=self.all_optional) + for name, field in f.fields.items(): + if wd_initial.get(name) and wd.get('fix', '') == 'true': + field.disabled = True + + for overrides in override_sets: + for fname, val in overrides.items(): + if 'disabled' in val and fname in f.fields: + f.fields[fname].disabled = val['disabled'] + + return f + + @cached_property + def address_asked(self): + return ( + self.request.event.settings.invoice_address_asked + and (not self.request.event.settings.invoice_address_not_asked_free or not get_cart_is_free( + self.request)) + ) + + def post(self, request): + self.request = request + failed = not self.save() or not self.contact_form.is_valid() + if self.address_asked or self.request.event.settings.invoice_name_required: + failed = failed or not self.invoice_form.is_valid() + if failed: + messages.error(request, + _("We had difficulties processing your input. Please review the errors below.")) + return self.render() + self.cart_session['email'] = self.contact_form.cleaned_data['email'] + d = dict(self.contact_form.cleaned_data) + if d.get('phone'): + d['phone'] = str(d['phone']) + self.cart_session['contact_form_data'] = d + if self.address_asked or self.request.event.settings.invoice_name_required: + addr = self.invoice_form.save() + try: + diff = update_tax_rates( + event=request.event, + cart_id=get_or_create_cart_id(request), + invoice_address=addr + ) + except TaxRule.SaleNotAllowed: + messages.error(request, + _("Unfortunately, based on the invoice address you entered, we're not able to sell you " + "the selected products for tax-related legal reasons.")) + return self.render() + + self.cart_session['invoice_address'] = addr.pk + if abs(diff) > Decimal('0.001'): + messages.info(request, _('Due to the invoice address you entered, we need to apply a different tax ' + 'rate to your purchase and the price of the products in your cart has ' + 'changed accordingly.')) + return redirect(self.get_next_url(request) + '?open_cart=true') + + return redirect(self.get_next_url(request)) + + def is_completed(self, request, warn=False): + self.request = request + try: + emailval = EmailValidator() + if not self.cart_session.get('email') and not self.all_optional: + if warn: + messages.warning(request, _('Please enter a valid email address.')) + return False + if self.cart_session.get('email'): + emailval(self.cart_session.get('email')) + except ValidationError: + if warn: + messages.warning(request, _('Please enter a valid email address.')) + return False + + if not self.all_optional: + + if self.address_asked: + if request.event.settings.invoice_address_required and ( + not self.invoice_address or not self.invoice_address.street): + messages.warning(request, _('Please enter your invoicing address.')) + return False + + if request.event.settings.invoice_name_required and ( + not self.invoice_address or not self.invoice_address.name): + messages.warning(request, _('Please enter your name.')) + return False + + for cp in self._positions_for_questions: + answ = { + aw.question_id: aw for aw in cp.answerlist + } + question_cache = { + q.pk: q for q in cp.item.questions_to_ask + } + + def question_is_visible(parentid, qvals): + if parentid not in question_cache: + return False + parentq = question_cache[parentid] + if parentq.dependency_question_id and not question_is_visible(parentq.dependency_question_id, + parentq.dependency_values): + return False + if parentid not in answ: + return False + return ( + ('True' in qvals and answ[parentid].answer == 'True') + or ('False' in qvals and answ[parentid].answer == 'False') + or (any(qval in [o.identifier for o in answ[parentid].options.all()] for qval in qvals)) + ) + + def question_is_required(q): + return ( + q.required and + (not q.dependency_question_id or question_is_visible(q.dependency_question_id, + q.dependency_values)) + ) + + for q in cp.item.questions_to_ask: + if question_is_required(q) and q.id not in answ: + if warn: + messages.warning(request, _('Please fill in answers to all required questions.')) + return False + if cp.item.admission and self.request.event.settings.get('attendee_names_required', as_type=bool) \ + and not cp.attendee_name_parts: + if warn: + messages.warning(request, _('Please fill in answers to all required questions.')) + return False + if cp.item.admission and self.request.event.settings.get('attendee_emails_required', as_type=bool) \ + and cp.attendee_email is None: + if warn: + messages.warning(request, _('Please fill in answers to all required questions.')) + return False + if cp.item.admission and self.request.event.settings.get('attendee_company_required', as_type=bool) \ + and cp.company is None: + if warn: + messages.warning(request, _('Please fill in answers to all required questions.')) + return False + if cp.item.admission and self.request.event.settings.get('attendee_attendees_required', as_type=bool) \ + and (cp.street is None or cp.city is None or cp.country is None): + if warn: + messages.warning(request, _('Please fill in answers to all required questions.')) + return False + + responses = question_form_fields.send(sender=self.request.event, position=cp) + form_data = cp.meta_info_data.get('question_form_data', {}) + for r, response in sorted(responses, key=lambda r: str(r[0])): + for key, value in response.items(): + if value.required and not form_data.get(key): + return False + return True + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['formgroups'] = self.formdict.items() + ctx['contact_form'] = self.contact_form + ctx['invoice_form'] = self.invoice_form + ctx['reverse_charge_relevant'] = self.eu_reverse_charge_relevant + ctx['cart'] = self.get_cart() + ctx['cart_session'] = self.cart_session + ctx['invoice_address_asked'] = self.address_asked + ctx['customer'] = self.cart_customer + return ctx \ No newline at end of file diff --git a/src/pretix/presale/checkoutflowstep/template_flow_step.py b/src/pretix/presale/checkoutflowstep/template_flow_step.py new file mode 100644 index 000000000..10e0c0798 --- /dev/null +++ b/src/pretix/presale/checkoutflowstep/template_flow_step.py @@ -0,0 +1,19 @@ +from django.views.generic.base import TemplateResponseMixin + +from .base_checkout_flow_step import BaseCheckoutFlowStep + + +class TemplateFlowStep(TemplateResponseMixin, BaseCheckoutFlowStep): + template_name = "" + + def get_context_data(self, **kwargs): + kwargs.setdefault('step', self) + kwargs.setdefault('event', self.event) + kwargs.setdefault('has_prev', self.get_prev_applicable(self.request) is not None) + kwargs.setdefault('prev_url', self.get_prev_url(self.request)) + kwargs.setdefault('checkout_flow', [ + step + for step in self.request._checkout_flow + if step.is_applicable(self.request) + ]) + return kwargs \ No newline at end of file diff --git a/src/pretix/presale/context.py b/src/pretix/presale/context.py index af806710a..82c1e6019 100644 --- a/src/pretix/presale/context.py +++ b/src/pretix/presale/context.py @@ -83,6 +83,12 @@ def _default_context(request): _footer += response else: _footer.append(response) + + #Retrieves or sets cached footer links for the current event. + _footer += request.event.cache.get_or_set('footer_links', lambda: [ + {'url': fl.url, 'label': fl.label} + for fl in request.event.footer_links.all() + ], timeout=300) if request.event.settings.presale_css_file: ctx['css_file'] = default_storage.url(request.event.settings.presale_css_file) @@ -111,6 +117,11 @@ def _default_context(request): ctx['organizer_logo'] = request.organizer.settings.get('organizer_logo_image', as_type=str, default='')[7:] ctx['organizer_homepage_text'] = request.organizer.settings.get('organizer_homepage_text', as_type=LazyI18nString) ctx['organizer'] = request.organizer + #Retrieves or sets cached footer links for the current organizer. + _footer += request.organizer.cache.get_or_set('footer_links', lambda: [ + {'url': fl.url, 'label': fl.label} + for fl in request.organizer.footer_links.all() + ], timeout=300) ctx['html_head'] = "".join(h for h in _html_head if h) ctx['html_foot'] = "".join(h for h in _html_foot if h) diff --git a/src/pretix/presale/forms/checkout.py b/src/pretix/presale/forms/checkout.py index b8e5a223e..da1d2c3ca 100644 --- a/src/pretix/presale/forms/checkout.py +++ b/src/pretix/presale/forms/checkout.py @@ -66,6 +66,7 @@ def __init__(self, *args, **kwargs): # https://floatboxjs.com/forum/topic.php?post=8440&usebb_sid=2e116486a9ec6b7070e045aea8cded5b#post8440 self.fields['email'].widget.attrs['autofocus'] = 'autofocus' self.fields['email'].help_text = self.event.settings.checkout_email_helptext + self.fields['email'].widget.attrs['placeholder'] = 'Valid Email address' responses = contact_form_fields.send(self.event, request=self.request) for r, response in responses: diff --git a/src/pretix/presale/forms/customer.py b/src/pretix/presale/forms/customer.py new file mode 100644 index 000000000..0fb4f6c53 --- /dev/null +++ b/src/pretix/presale/forms/customer.py @@ -0,0 +1,4 @@ +from django.contrib.auth.tokens import PasswordResetTokenGenerator + +class TokenGenerator(PasswordResetTokenGenerator): + key_salt = "$2a$12$xoUY1cRjQ0gWdF/LI8rmV.Ex5pWuhF5d.sgUJsAV0Ki7CUXZCPn8y" diff --git a/src/pretix/presale/forms/customer_forms/__init__.py b/src/pretix/presale/forms/customer_forms/__init__.py new file mode 100644 index 000000000..de7c753f2 --- /dev/null +++ b/src/pretix/presale/forms/customer_forms/__init__.py @@ -0,0 +1,6 @@ +from .authentication_form import AuthenticationForm +from .change_info_form import ChangeInfoForm +from .password_form import ( + ChangePasswordForm, ResetPasswordForm, SetPasswordForm, +) +from .registration_form import RegistrationForm diff --git a/src/pretix/presale/forms/customer_forms/authentication_form.py b/src/pretix/presale/forms/customer_forms/authentication_form.py new file mode 100644 index 000000000..5c16633f1 --- /dev/null +++ b/src/pretix/presale/forms/customer_forms/authentication_form.py @@ -0,0 +1,75 @@ +from django import forms +from django.utils.translation import gettext_lazy as _ + +from pretix.base.models import Customer + + +class AuthenticationForm(forms.Form): + required_css_class = 'required' + email = forms.EmailField( + label=_("E-mail"), + widget=forms.EmailInput(attrs={'autofocus': True}) + ) + password = forms.CharField( + label=_("Password"), + strip=False, + widget=forms.PasswordInput(attrs={'autocomplete': 'current-password'}), + ) + + error_messages = { + 'incomplete': _('You need to fill out all fields.'), + 'invalid_login': _( + "We have not found an account with this email address and password." + ), + 'inactive': _("This account is disabled."), + 'unverified': _("You have not yet activated your account and set a password. Please click the link in the " + "email we sent you. Click \"Reset password\" to receive a new email in case you cannot find " + "it again."), + } + + def __init__(self, request=None, *args, **kwargs): + self.request = request + self.customer_cache = None + super().__init__(*args, **kwargs) + + def clean(self): + email = self.cleaned_data.get('email') + password = self.cleaned_data.get('password') + + if email is not None and password: + try: + u = self.request.organizer.customers.get(email=email.lower(), provider__isnull=True) + except Customer.DoesNotExist: + Customer().set_password(password) + else: + if u.check_password(password): + self.customer_cache = u + if self.customer_cache is None: + raise forms.ValidationError( + self.error_messages['invalid_login'], + code='invalid_login', + ) + else: + self.confirm_login_allowed(self.customer_cache) + else: + raise forms.ValidationError( + self.error_messages['incomplete'], + code='incomplete' + ) + + return self.cleaned_data + + def confirm_login_allowed(self, user): + if not user.is_active: + raise forms.ValidationError( + self.error_messages['inactive'], + code='inactive', + ) + if not user.is_verified: + raise forms.ValidationError( + self.error_messages['unverified'], + code='unverified', + ) + + def get_customer(self): + return self.customer_cache \ No newline at end of file diff --git a/src/pretix/presale/forms/customer_forms/change_info_form.py b/src/pretix/presale/forms/customer_forms/change_info_form.py new file mode 100644 index 000000000..e88b7e968 --- /dev/null +++ b/src/pretix/presale/forms/customer_forms/change_info_form.py @@ -0,0 +1,93 @@ +from django import forms +from django.conf import settings +from django.contrib.auth.hashers import check_password +from django.utils.html import escape +from django.utils.translation import gettext_lazy as _ + +from pretix.base.forms.questions import NamePartsFormField +from pretix.base.models.customers import Customer + + +class ChangeInfoForm(forms.ModelForm): + required_css_class = 'required' + error_messages = { + 'pw_current_wrong': _("The current password you entered was not correct."), + 'rate_limit': _("For security reasons, please wait 5 minutes before you try again."), + 'duplicate': _("An account with this email address is already registered."), + } + password_current = forms.CharField( + label=_('Your current password'), + widget=forms.PasswordInput, + help_text=_('Only required if you change your email address'), + required=False + ) + + class Meta: + model = Customer + fields = ('name_parts', 'email') + + def __init__(self, request=None, *args, **kwargs): + self.request = request + super().__init__(*args, **kwargs) + + self.fields['name_parts'] = NamePartsFormField( + max_length=255, + required=True, + scheme=request.organizer.settings.name_scheme, + titles=request.organizer.settings.name_scheme_titles, + label=_('Name'), + ) + if self.instance.provider_id is not None: + self.fields['email'].disabled = True + self.fields['email'].help_text = _( + 'To change your email address, change it in your {provider} account and then log out and log in ' + 'again.' + ).format(provider=escape(self.instance.provider.name)) + del self.fields['password_current'] + + def clean_password_current(self): + old_pw = self.cleaned_data.get('password_current') + + if old_pw: + if settings.HAS_REDIS: + from django_redis import get_redis_connection + + rc = get_redis_connection("redis") + cnt = rc.incr('pretix_pwchange_customer_%s' % self.instance.pk) + rc.expire('pretix_pwchange_customer_%s' % self.instance.pk, 300) + if cnt > 10: + raise forms.ValidationError( + self.error_messages['rate_limit'], + code='rate_limit', + ) + + if not check_password(old_pw, self.instance.password): + raise forms.ValidationError( + self.error_messages['pw_current_wrong'], + code='pw_current_wrong', + ) + + return "***valid***" + + def clean(self): + email = self.cleaned_data.get('email') + password_current = self.cleaned_data.get('password_current') + + if email != self.instance.email and not password_current and self.instance.provider_id is None: + raise forms.ValidationError( + self.error_messages['pw_current_wrong'], + code='pw_current_wrong', + ) + + if email is not None and self.instance.provider_id is not None: + try: + self.request.organizer.customers.exclude(pk=self.instance.pk).get(email=email) + except Customer.DoesNotExist: + pass + else: + raise forms.ValidationError( + self.error_messages['duplicate'], + code='duplicate', + ) + + return self.cleaned_data \ No newline at end of file diff --git a/src/pretix/presale/forms/customer_forms/password_form.py b/src/pretix/presale/forms/customer_forms/password_form.py new file mode 100644 index 000000000..98c5baf20 --- /dev/null +++ b/src/pretix/presale/forms/customer_forms/password_form.py @@ -0,0 +1,163 @@ +from django import forms +from django.conf import settings +from django.contrib.auth.hashers import check_password +from django.contrib.auth.password_validation import ( + password_validators_help_texts, validate_password, +) +from django.utils.translation import gettext_lazy as _ + +from pretix.base.models.customers import Customer + + +class SetPasswordForm(forms.Form): + required_css_class = 'required' + error_messages = { + 'pw_mismatch': _("Please enter the same password twice"), + } + email = forms.EmailField( + label=_('E-mail'), + disabled=True + ) + password = forms.CharField( + label=_('Password'), + widget=forms.PasswordInput(attrs={'minlength': '8', 'autocomplete': 'new-password'}), + required=True + ) + password_repeat = forms.CharField( + label=_('Repeat password'), + widget=forms.PasswordInput(attrs={'minlength': '8', 'autocomplete': 'new-password'}), + ) + + def __init__(self, customer=None, *args, **kwargs): + self.customer = customer + kwargs.setdefault('initial', {}) + kwargs['initial']['email'] = self.customer.email + super().__init__(*args, **kwargs) + + def clean(self): + password1 = self.cleaned_data.get('password', '') + password2 = self.cleaned_data.get('password_repeat') + + if password1 and password1 != password2: + raise forms.ValidationError({ + 'password_repeat': self.error_messages['pw_mismatch'], + }, code='pw_mismatch') + + return self.cleaned_data + + def clean_password(self): + password1 = self.cleaned_data.get('password', '') + if validate_password(password1, user=self.customer) is not None: + raise forms.ValidationError(_(password_validators_help_texts()), code='pw_invalid') + return password1 + + +class ResetPasswordForm(forms.Form): + required_css_class = 'required' + error_messages = { + 'rate_limit': _("For security reasons, please wait 10 minutes before you try again."), + 'unknown': _("A user with this email address is not known in our system."), + } + email = forms.EmailField( + label=_('E-mail'), + ) + + def __init__(self, request=None, *args, **kwargs): + self.request = request + super().__init__(*args, **kwargs) + + def clean_email(self): + if 'email' not in self.cleaned_data: + return + try: + self.customer = self.request.organizer.customers.get(email=self.cleaned_data['email'].lower() + , provider__isnull=True) + return self.customer.email + except Customer.DoesNotExist: + raise forms.ValidationError(self.error_messages['unknown'], code='unknown') + + def clean(self): + d = super().clean() + if d.get('email') and settings.HAS_REDIS: + from django_redis import get_redis_connection + + rc = get_redis_connection("redis") + cnt = rc.incr('pretix_pwreset_customer_%s' % self.customer.pk) + rc.expire('pretix_pwreset_customer_%s' % self.customer.pk, 600) + if cnt > 2: + raise forms.ValidationError( + self.error_messages['rate_limit'], + code='rate_limit', + ) + return d + + +class ChangePasswordForm(forms.Form): + required_css_class = 'required' + error_messages = { + 'pw_current_wrong': _("The current password you entered was not correct."), + 'pw_mismatch': _("Please enter the same password twice"), + 'rate_limit': _("For security reasons, please wait 5 minutes before you try again."), + } + email = forms.EmailField( + label=_('E-mail'), + disabled=True + ) + password_current = forms.CharField( + label=_('Your current password'), + widget=forms.PasswordInput, + required=True + ) + password = forms.CharField( + label=_('New password'), + widget=forms.PasswordInput, + required=True + ) + password_repeat = forms.CharField( + label=_('Repeat password'), + widget=forms.PasswordInput(attrs={'minlength': '8', 'autocomplete': 'new-password'}), + ) + + def __init__(self, customer, *args, **kwargs): + self.customer = customer + kwargs.setdefault('initial', {}) + kwargs['initial']['email'] = self.customer.email + super().__init__(*args, **kwargs) + + def clean(self): + password1 = self.cleaned_data.get('password', '') + password2 = self.cleaned_data.get('password_repeat') + + if password1 and password1 != password2: + raise forms.ValidationError({ + 'password_repeat': self.error_messages['pw_mismatch'], + }, code='pw_mismatch') + + return self.cleaned_data + + def clean_password(self): + password1 = self.cleaned_data.get('password', '') + if validate_password(password1, user=self.customer) is not None: + raise forms.ValidationError(_(password_validators_help_texts()), code='pw_invalid') + return password1 + + def clean_password_current(self): + old_pw = self.cleaned_data.get('password_current') + + if old_pw and settings.HAS_REDIS: + from django_redis import get_redis_connection + + rc = get_redis_connection("redis") + cnt = rc.incr('pretix_pwchange_customer_%s' % self.customer.pk) + rc.expire('pretix_pwchange_customer_%s' % self.customer.pk, 300) + if cnt > 10: + raise forms.ValidationError( + self.error_messages['rate_limit'], + code='rate_limit', + ) + + if old_pw and not check_password(old_pw, self.customer.password): + raise forms.ValidationError( + self.error_messages['pw_current_wrong'], + code='pw_current_wrong', + ) \ No newline at end of file diff --git a/src/pretix/presale/forms/customer_forms/registration_form.py b/src/pretix/presale/forms/customer_forms/registration_form.py new file mode 100644 index 000000000..c84c8201a --- /dev/null +++ b/src/pretix/presale/forms/customer_forms/registration_form.py @@ -0,0 +1,105 @@ +import hashlib +import ipaddress + +from django import forms +from django.conf import settings +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _ + +from pretix.base.forms.questions import NamePartsFormField +from pretix.base.i18n import get_language_without_region +from pretix.base.models.customers import Customer +from pretix.helpers.http import get_client_ip + + +class RegistrationForm(forms.Form): + required_css_class = 'required' + name_parts = forms.CharField() + email = forms.EmailField( + label=_("E-mail"), + ) + + error_messages = { + 'rate_limit': _("We've received a lot of registration requests from you, please wait 10 minutes before you try again."), + 'duplicate': _( + "An account with this email address is already registered. Please try to log in or reset your password " + "instead." + ), + 'required': _('This field is required.'), + } + + def __init__(self, request=None, *args, **kwargs): + self.request = request + super().__init__(*args, **kwargs) + + self.fields['name_parts'] = NamePartsFormField( + max_length=255, + required=True, + scheme=request.organizer.settings.name_scheme, + titles=request.organizer.settings.name_scheme_titles, + label=_('Name'), + ) + + @cached_property + def ratelimit_key(self): + if not settings.HAS_REDIS: + return None + client_ip = get_client_ip(self.request) + if not client_ip: + return None + try: + client_ip = ipaddress.ip_address(client_ip) + except ValueError: + # Web server not set up correctly + return None + if client_ip.is_private: + # This is the private IP of the server, web server not set up correctly + return None + return 'pretix_customer_registration_{}'.format(hashlib.sha1(str(client_ip).encode()).hexdigest()) + + def clean(self): + email = self.cleaned_data.get('email') + + if email is not None: + try: + self.request.organizer.customers.get(email=email) + except Customer.DoesNotExist: + pass + else: + raise forms.ValidationError( + {'email': self.error_messages['duplicate']}, + code='duplicate', + ) + + if not self.cleaned_data.get('email'): + raise forms.ValidationError( + {'email': self.error_messages['required']}, + code='incomplete' + ) + else: + if self.ratelimit_key: + from django_redis import get_redis_connection + + rc = get_redis_connection("redis") + cnt = rc.incr(self.ratelimit_key) + rc.expire(self.ratelimit_key, 600) + if cnt > 10: + raise forms.ValidationError( + self.error_messages['rate_limit'], + code='rate_limit', + ) + return self.cleaned_data + + def create(self): + customer = self.request.organizer.customers.create( + email=self.cleaned_data['email'], + name_parts=self.cleaned_data['name_parts'], + is_active=True, + is_verified=False, + locale=get_language_without_region(), + ) + customer.set_unusable_password() + customer.save() + customer.log_action('pretix.customer.created', {}) + customer.send_activation_mail() + return customer \ No newline at end of file diff --git a/src/pretix/presale/forms/renderers.py b/src/pretix/presale/forms/renderers.py index 8d5f3a380..f53ef8b08 100644 --- a/src/pretix/presale/forms/renderers.py +++ b/src/pretix/presale/forms/renderers.py @@ -99,7 +99,9 @@ def add_help_attrs(self, widget=None): def add_label(self, html): label = self.get_label() - if hasattr(self.field.field, '_required'): + if hasattr(self.field.field, '_show_required'): + required = self.field.field._show_required + elif hasattr(self.field.field, '_required'): # e.g. payment settings forms where a field is only required if the payment provider is active required = self.field.field._required else: diff --git a/src/pretix/presale/templates/pretixpresale/event/base.html b/src/pretix/presale/templates/pretixpresale/event/base.html index f3882f02e..e189d4ac7 100644 --- a/src/pretix/presale/templates/pretixpresale/event/base.html +++ b/src/pretix/presale/templates/pretixpresale/event/base.html @@ -34,21 +34,24 @@
    {% endif %}
    + {% if customer %} +
    +
    {% trans "Customer account" %}
    +
    {{ customer.email }}
    {{ customer.name }}
    #{{ customer.identifier }}
    +
    + {% endif %} {% if not asked and event.settings.invoice_name_required %}
    {% trans "Name" %}
    diff --git a/src/pretix/presale/templates/pretixpresale/event/checkout_customer.html b/src/pretix/presale/templates/pretixpresale/event/checkout_customer.html new file mode 100644 index 000000000..e9bc975be --- /dev/null +++ b/src/pretix/presale/templates/pretixpresale/event/checkout_customer.html @@ -0,0 +1,156 @@ +{% extends "pretixpresale/event/checkout_base.html" %} +{% load i18n %} +{% load money %} +{% load bootstrap3 %} +{% load eventurl %} +{% load rich_text %} +{% block inner %} +
    + {% csrf_token %} +
    +
    + + +
    +
    + + +
    + {% if guest_allowed %} +
    + + +
    + {% endif %} +
    +
    + +
    + +
    +
    +
    +
    +{% endblock %} diff --git a/src/pretix/presale/templates/pretixpresale/event/checkout_questions.html b/src/pretix/presale/templates/pretixpresale/event/checkout_questions.html index c7afe9e6d..68e0d461d 100644 --- a/src/pretix/presale/templates/pretixpresale/event/checkout_questions.html +++ b/src/pretix/presale/templates/pretixpresale/event/checkout_questions.html @@ -137,7 +137,22 @@

    {% endif %}
    - {% bootstrap_form form layout="checkout" %} + {% for field in form %} + {% if field.field.widget.attrs.type == "description" %} +
    + +
    + +
    + + + +
    + {% else %} + {% bootstrap_field field layout="checkout" %} + {% endif%} + {% endfor %} +
    {% endfor %}

    diff --git a/src/pretix/presale/templates/pretixpresale/event/fragment_cart.html b/src/pretix/presale/templates/pretixpresale/event/fragment_cart.html index 7ce797f8d..b97f6840b 100644 --- a/src/pretix/presale/templates/pretixpresale/event/fragment_cart.html +++ b/src/pretix/presale/templates/pretixpresale/event/fragment_cart.html @@ -94,23 +94,25 @@ {% endif %} {% endif %} {% for q in line.questions %} -
    {{ q.question }}
    -
    - {% if q.answer %} - {% if q.answer.file %} - - - {{ q.answer.file_name }} - - {% elif q.type == "M" %} - {{ q.answer|rich_text_snippet }} + {% if q.type != "DES" %} +
    {{ q.question }}
    +
    + {% if q.answer %} + {% if q.answer.file %} + + + {{ q.answer.file_name }} + + {% elif q.type == "M" %} + {{ q.answer|rich_text_snippet }} + {% else %} + {{ q.answer|linebreaksbr }} + {% endif %} {% else %} - {{ q.answer|linebreaksbr }} + {% trans "not answered" %} {% endif %} - {% else %} - {% trans "not answered" %} - {% endif %} -
    + + {% endif %} {% endfor %} {% for q in line.additional_answers %}
    {{ q.question }}
    diff --git a/src/pretix/presale/templates/pretixpresale/fragment_js.html b/src/pretix/presale/templates/pretixpresale/fragment_js.html index e803071a6..567f76df0 100644 --- a/src/pretix/presale/templates/pretixpresale/fragment_js.html +++ b/src/pretix/presale/templates/pretixpresale/fragment_js.html @@ -13,6 +13,7 @@ + diff --git a/src/pretix/presale/templates/pretixpresale/fragment_login_status.html b/src/pretix/presale/templates/pretixpresale/fragment_login_status.html new file mode 100644 index 000000000..f8a520b5a --- /dev/null +++ b/src/pretix/presale/templates/pretixpresale/fragment_login_status.html @@ -0,0 +1,23 @@ +{% load i18n %} +{% load eventurl %} + +{% if request.organizer.settings.customer_accounts %} + +{% endif %} diff --git a/src/pretix/presale/templates/pretixpresale/fragment_modals.html b/src/pretix/presale/templates/pretixpresale/fragment_modals.html index c3c98b2c0..dfb29a616 100644 --- a/src/pretix/presale/templates/pretixpresale/fragment_modals.html +++ b/src/pretix/presale/templates/pretixpresale/fragment_modals.html @@ -1,6 +1,32 @@ {% load i18n %}
    +