mirror of
https://github.com/pretix/pretix.git
synced 2026-05-19 17:34:03 +00:00
Compare commits
35 Commits
lbo-add-or
...
upstream/2
| Author | SHA1 | Date | |
|---|---|---|---|
| 02e0fed4a0 | |||
| 932b646fcc | |||
| edf1bd08f8 | |||
| 09aff627bb | |||
| da87c64ea0 | |||
|
|
5d87f9a26f | ||
|
|
4b5651862c | ||
| 26f3a92d09 | |||
| d468e0a2b3 | |||
| 8de80d5867 | |||
| ec3272dd7c | |||
| 72b14e04c0 | |||
| 93cb51c7de | |||
|
64b56afe44
|
|||
|
8e16c18060
|
|||
|
|
2d42c1f166 | ||
|
|
e4b8c5da25 | ||
|
|
c85b496187 | ||
| b632fa620e | |||
| 04684ed93f | |||
|
466bf49941
|
|||
| e03ec73490 | |||
|
3fda118234
|
|||
| 1cb98d0837 | |||
| 713e3a40aa | |||
| be234edc0f | |||
|
34efc2d953
|
|||
|
|
82366dd6c9 | ||
|
|
38abad0bf6 | ||
| 41817fe080 | |||
| 6cee467dbd | |||
|
|
931ba73f1d | ||
|
|
9179621e72 | ||
|
|
65c978558e | ||
|
|
f4f090506b |
31
.gitea/workflows/cicd.yaml
Normal file
31
.gitea/workflows/cicd.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
name: Build Deploy email notification tool
|
||||
run-name: ${{ gitea.actor }} building new version of the email notification tool
|
||||
on:
|
||||
push: # Baut bei jedem Push (Branches + Tags)
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
Apply-Kubernetes-Resources:
|
||||
runs-on: podman
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Login to Docker Registry
|
||||
run: podman login -u ${{ secrets.REGISTRY_USERNAME }} -p ${{ secrets.REGISTRY_TOKEN }} cr.ortlerstrasse.de
|
||||
|
||||
- name: Set Docker Image Tag
|
||||
run: |
|
||||
if [[ "${{ gitea.ref }}" == refs/tags/* ]]; then
|
||||
echo "TAG_NAME=${{ gitea.ref_name }}" >> $GITHUB_ENV
|
||||
else
|
||||
echo "TAG_NAME=latest" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: Build Docker image
|
||||
run: podman build -t cr.ortlerstrasse.de/cgo/pretix:${{ env.TAG_NAME }} .
|
||||
|
||||
- name: Push Docker image
|
||||
run: |
|
||||
podman push cr.ortlerstrasse.de/cgo/pretix:${{ env.TAG_NAME }}
|
||||
echo "Image pushed successfully: cr.ortlerstrasse.de/cgo/pretix:${{ env.TAG_NAME }}"
|
||||
@@ -1719,56 +1719,6 @@ List of all order positions
|
||||
:statuscode 401: Authentication failure
|
||||
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
|
||||
|
||||
.. http:get:: /api/v1/organizers/(organizer)/orderpositions/
|
||||
|
||||
Returns a list of all order positions within all events of a given organizer (with sufficient access permissions).
|
||||
|
||||
The supported query parameters and output format of this endpoint are almost identical to those of the list endpoint
|
||||
within an event.
|
||||
The only changes are that responses also contain the ``event`` attribute in each result and that the 'pdf_data'
|
||||
parameter is not supported.
|
||||
|
||||
**Example request**:
|
||||
|
||||
.. sourcecode:: http
|
||||
|
||||
GET /api/v1/organizers/bigevents/orderpositions/ HTTP/1.1
|
||||
Host: pretix.eu
|
||||
Accept: application/json, text/javascript
|
||||
|
||||
**Example response**:
|
||||
|
||||
.. sourcecode:: http
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
Vary: Accept
|
||||
Content-Type: application/json
|
||||
X-Page-Generated: 2017-12-01T10:00:00Z
|
||||
|
||||
{
|
||||
"count": 1,
|
||||
"next": null,
|
||||
"previous": null,
|
||||
"results": [
|
||||
{
|
||||
"id:": 23442
|
||||
"event": "sampleconf",
|
||||
"order": "ABC12",
|
||||
"positionid": 1,
|
||||
"canceled": false,
|
||||
"item": 1345,
|
||||
...
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
:param organizer: The ``slug`` field of the organizer to fetch
|
||||
:statuscode 200: no error
|
||||
:statuscode 401: Authentication failure
|
||||
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
|
||||
|
||||
|
||||
|
||||
Fetching individual positions
|
||||
-----------------------------
|
||||
|
||||
|
||||
@@ -19,4 +19,4 @@
|
||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
__version__ = "2026.3.0.dev0"
|
||||
__version__ = "2026.2.0"
|
||||
|
||||
@@ -636,14 +636,6 @@ class OrderPositionSerializer(I18nAwareModelSerializer):
|
||||
return entry
|
||||
|
||||
|
||||
class OrganizerOrderPositionSerializer(OrderPositionSerializer):
|
||||
event = SlugRelatedField(slug_field='slug', read_only=True)
|
||||
|
||||
class Meta(OrderPositionSerializer.Meta):
|
||||
fields = OrderPositionSerializer.Meta.fields + ('event',)
|
||||
read_only_fields = OrderPositionSerializer.Meta.read_only_fields + ('event',)
|
||||
|
||||
|
||||
class RequireAttentionField(serializers.Field):
|
||||
def to_representation(self, instance: OrderPosition):
|
||||
return instance.require_checkin_attention
|
||||
|
||||
@@ -365,10 +365,9 @@ class TeamInviteSerializer(serializers.ModelSerializer):
|
||||
def _send_invite(self, instance):
|
||||
mail(
|
||||
instance.email,
|
||||
_('Account invitation'),
|
||||
_('pretix account invitation'),
|
||||
'pretixcontrol/email/invitation.txt',
|
||||
{
|
||||
'instance': settings.PRETIX_INSTANCE_NAME,
|
||||
'user': self,
|
||||
'organizer': self.context['organizer'].name,
|
||||
'team': instance.team.name,
|
||||
|
||||
@@ -67,7 +67,6 @@ orga_router.register(r'invoices', order.InvoiceViewSet)
|
||||
orga_router.register(r'scheduled_exports', exporters.ScheduledOrganizerExportViewSet)
|
||||
orga_router.register(r'exporters', exporters.OrganizerExportersViewSet, basename='exporters')
|
||||
orga_router.register(r'transactions', order.OrganizerTransactionViewSet)
|
||||
orga_router.register(r'orderpositions', order.OrganizerOrderPositionViewSet, basename='orderpositions')
|
||||
|
||||
team_router = routers.DefaultRouter()
|
||||
team_router.register(r'members', organizer.TeamMemberViewSet)
|
||||
@@ -84,7 +83,7 @@ event_router.register(r'discounts', discount.DiscountViewSet)
|
||||
event_router.register(r'quotas', item.QuotaViewSet)
|
||||
event_router.register(r'vouchers', voucher.VoucherViewSet)
|
||||
event_router.register(r'orders', order.EventOrderViewSet)
|
||||
event_router.register(r'orderpositions', order.EventOrderPositionViewSet)
|
||||
event_router.register(r'orderpositions', order.OrderPositionViewSet)
|
||||
event_router.register(r'transactions', order.TransactionViewSet)
|
||||
event_router.register(r'invoices', order.InvoiceViewSet)
|
||||
event_router.register(r'revokedsecrets', order.RevokedSecretViewSet, basename='revokedsecrets')
|
||||
|
||||
@@ -57,10 +57,9 @@ from pretix.api.serializers.order import (
|
||||
BlockedTicketSecretSerializer, InvoiceSerializer, OrderCreateSerializer,
|
||||
OrderPaymentCreateSerializer, OrderPaymentSerializer,
|
||||
OrderPositionSerializer, OrderRefundCreateSerializer,
|
||||
OrderRefundSerializer, OrderSerializer, OrganizerOrderPositionSerializer,
|
||||
OrganizerTransactionSerializer, PriceCalcSerializer, PrintLogSerializer,
|
||||
RevokedTicketSecretSerializer, SimulatedOrderSerializer,
|
||||
TransactionSerializer,
|
||||
OrderRefundSerializer, OrderSerializer, OrganizerTransactionSerializer,
|
||||
PriceCalcSerializer, PrintLogSerializer, RevokedTicketSecretSerializer,
|
||||
SimulatedOrderSerializer, TransactionSerializer,
|
||||
)
|
||||
from pretix.api.serializers.orderchange import (
|
||||
BlockNameSerializer, OrderChangeOperationSerializer,
|
||||
@@ -1066,7 +1065,8 @@ with scopes_disabled():
|
||||
}
|
||||
|
||||
|
||||
class OrderPositionViewSetMixin:
|
||||
class OrderPositionViewSet(viewsets.ModelViewSet):
|
||||
serializer_class = OrderPositionSerializer
|
||||
queryset = OrderPosition.all.none()
|
||||
filter_backends = (DjangoFilterBackend, RichOrderingFilter)
|
||||
ordering = ('order__datetime', 'positionid')
|
||||
@@ -1087,7 +1087,8 @@ class OrderPositionViewSetMixin:
|
||||
|
||||
def get_serializer_context(self):
|
||||
ctx = super().get_serializer_context()
|
||||
ctx['pdf_data'] = False
|
||||
ctx['event'] = self.request.event
|
||||
ctx['pdf_data'] = self.request.query_params.get('pdf_data', 'false').lower() == 'true'
|
||||
ctx['check_quotas'] = self.request.query_params.get('check_quotas', 'true').lower() == 'true'
|
||||
return ctx
|
||||
|
||||
@@ -1096,8 +1097,9 @@ class OrderPositionViewSetMixin:
|
||||
qs = OrderPosition.all
|
||||
else:
|
||||
qs = OrderPosition.objects
|
||||
qs = qs.filter(order__event__organizer=self.request.organizer)
|
||||
if self.request.query_params.get('pdf_data', 'false').lower() == 'true' and getattr(self.request, 'event', None):
|
||||
|
||||
qs = qs.filter(order__event=self.request.event)
|
||||
if self.request.query_params.get('pdf_data', 'false').lower() == 'true':
|
||||
prefetch_related_objects([self.request.organizer], 'meta_properties')
|
||||
prefetch_related_objects(
|
||||
[self.request.event],
|
||||
@@ -1152,9 +1154,9 @@ class OrderPositionViewSetMixin:
|
||||
qs = qs.prefetch_related(
|
||||
Prefetch('checkins', queryset=Checkin.objects.select_related("device")),
|
||||
Prefetch('print_logs', queryset=PrintLog.objects.select_related('device')),
|
||||
'answers', 'answers__options', 'answers__question', 'order__event', 'order__event__organizer'
|
||||
'answers', 'answers__options', 'answers__question',
|
||||
).select_related(
|
||||
'item', 'order', 'seat'
|
||||
'item', 'order', 'order__event', 'order__event__organizer', 'seat'
|
||||
)
|
||||
return qs
|
||||
|
||||
@@ -1166,45 +1168,6 @@ class OrderPositionViewSetMixin:
|
||||
return prov
|
||||
raise NotFound('Unknown output provider.')
|
||||
|
||||
|
||||
class OrganizerOrderPositionViewSet(OrderPositionViewSetMixin, viewsets.ReadOnlyModelViewSet):
|
||||
serializer_class = OrganizerOrderPositionSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset()
|
||||
|
||||
perm = self.permission if self.request.method in SAFE_METHODS else self.write_permission
|
||||
|
||||
if isinstance(self.request.auth, (TeamAPIToken, Device)):
|
||||
auth_obj = self.request.auth
|
||||
elif self.request.user.is_authenticated:
|
||||
auth_obj = self.request.user
|
||||
else:
|
||||
raise PermissionDenied("Unknown authentication scheme")
|
||||
|
||||
qs = qs.filter(
|
||||
order__event__in=auth_obj.get_events_with_permission(perm, request=self.request).filter(
|
||||
organizer=self.request.organizer
|
||||
)
|
||||
)
|
||||
|
||||
return qs
|
||||
|
||||
|
||||
class EventOrderPositionViewSet(OrderPositionViewSetMixin, viewsets.ModelViewSet):
|
||||
serializer_class = OrderPositionSerializer
|
||||
|
||||
def get_serializer_context(self):
|
||||
ctx = super().get_serializer_context()
|
||||
ctx['event'] = self.request.event
|
||||
ctx['pdf_data'] = self.request.query_params.get('pdf_data', 'false').lower() == 'true'
|
||||
return ctx
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset()
|
||||
qs = qs.filter(order__event=self.request.event)
|
||||
return qs
|
||||
|
||||
@action(detail=True, methods=['POST'], url_name='price_calc')
|
||||
def price_calc(self, request, *args, **kwargs):
|
||||
"""
|
||||
|
||||
@@ -216,10 +216,7 @@ class OutboundSyncProvider:
|
||||
|
||||
try:
|
||||
mapped_objects = self.sync_order(sq.order)
|
||||
actions_taken = [res and res.sync_info.get("action", "") for res_list in mapped_objects.values() for res in res_list]
|
||||
should_write_logentry = any(action not in (None, "nothing_to_do") for action in actions_taken)
|
||||
logger.info('Synced order %s to %s, actions: %r, log: %r', sq.order.code, sq.sync_provider, actions_taken, should_write_logentry)
|
||||
if should_write_logentry:
|
||||
if not all(all(not res or res.sync_info.get("action", "") == "nothing_to_do" for res in res_list) for res_list in mapped_objects.values()):
|
||||
sq.order.log_action("pretix.event.order.data_sync.success", {
|
||||
"provider": self.identifier,
|
||||
"objects": {
|
||||
@@ -240,7 +237,7 @@ class OutboundSyncProvider:
|
||||
sq.set_sync_error("exceeded", e.messages, e.full_message)
|
||||
else:
|
||||
logger.info(
|
||||
f"Could not sync order {sq.order.code} to {sq.sync_provider} "
|
||||
f"Could not sync order {sq.order.code} to {type(self).__name__} "
|
||||
f"(transient error, attempt #{sq.failed_attempts}, next {sq.not_before})",
|
||||
exc_info=True,
|
||||
)
|
||||
|
||||
@@ -28,5 +28,6 @@ from .items import * # noqa
|
||||
from .json import * # noqa
|
||||
from .mail import * # noqa
|
||||
from .orderlist import * # noqa
|
||||
from .relevant_orderlist import * # noqa
|
||||
from .reusablemedia import * # noqa
|
||||
from .waitinglist import * # noqa
|
||||
|
||||
@@ -89,7 +89,7 @@ class OrderListExporter(MultiSheetListExporter):
|
||||
description = gettext_lazy('Download a spreadsheet of all orders. The spreadsheet will include three sheets, one '
|
||||
'with a line for every order, one with a line for every order position, and one with '
|
||||
'a line for every additional fee charged in an order.')
|
||||
featured = True
|
||||
featured = False
|
||||
repeatable_read = False
|
||||
|
||||
@cached_property
|
||||
|
||||
1199
src/pretix/base/exporters/relevant_orderlist.py
Normal file
1199
src/pretix/base/exporters/relevant_orderlist.py
Normal file
File diff suppressed because it is too large
Load Diff
@@ -346,8 +346,7 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin):
|
||||
{
|
||||
'user': self,
|
||||
'messages': msg,
|
||||
'url': build_absolute_uri('control:user.settings'),
|
||||
'instance': settings.PRETIX_INSTANCE_NAME,
|
||||
'url': build_absolute_uri('control:user.settings')
|
||||
},
|
||||
event=None,
|
||||
user=self,
|
||||
@@ -392,7 +391,6 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin):
|
||||
'user': self,
|
||||
'reason': msg,
|
||||
'code': code,
|
||||
'instance': settings.PRETIX_INSTANCE_NAME,
|
||||
},
|
||||
event=None,
|
||||
user=self,
|
||||
@@ -432,7 +430,6 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin):
|
||||
mail(
|
||||
self.email, _('Password recovery'), 'pretixcontrol/email/forgot.txt',
|
||||
{
|
||||
'instance': settings.PRETIX_INSTANCE_NAME,
|
||||
'user': self,
|
||||
'url': (build_absolute_uri('control:auth.forgot.recover')
|
||||
+ '?id=%d&token=%s' % (self.id, default_token_generator.make_token(self)))
|
||||
|
||||
@@ -86,7 +86,7 @@ class OrderSyncQueue(models.Model):
|
||||
|
||||
def set_sync_error(self, failure_mode, messages, full_message):
|
||||
logger.exception(
|
||||
f"Could not sync order {self.order.code} to {self.sync_provider} ({failure_mode})"
|
||||
f"Could not sync order {self.order.code} to {type(self).__name__} ({failure_mode})"
|
||||
)
|
||||
self.order.log_action(f"pretix.event.order.data_sync.failed.{failure_mode}", {
|
||||
"provider": self.sync_provider,
|
||||
|
||||
@@ -176,7 +176,6 @@ def shred(self, event: Event, fileid: str, confirm_code: str, user: int=None, lo
|
||||
_('Data shredding completed'),
|
||||
'pretixbase/email/shred_completed.txt',
|
||||
{
|
||||
'instance': settings.PRETIX_INSTANCE_NAME,
|
||||
'user': user,
|
||||
'organizer': event.organizer.name,
|
||||
'event': str(event.name),
|
||||
|
||||
@@ -13,5 +13,5 @@ Start time: {{ start_time }} (new data added after this time might not have been
|
||||
|
||||
Best regards,
|
||||
|
||||
Your {{ instance }} team
|
||||
Your pretix team
|
||||
{% endblocktrans %}
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
#
|
||||
# This file is part of pretix (Community Edition).
|
||||
#
|
||||
# Copyright (C) 2014-2020 Raphael Michel and contributors
|
||||
# Copyright (C) 2020-today pretix GmbH and contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
|
||||
# Public License as published by the Free Software Foundation in version 3 of the License.
|
||||
#
|
||||
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
|
||||
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
|
||||
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
|
||||
# this file, see <https://pretix.eu/about/en/license>.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||
# details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
from django import template
|
||||
from django.utils.html import mark_safe
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.filter("anon_email")
|
||||
def anon_email(value):
|
||||
"""Replaces @ with [at] and . with [dot] for anonymization."""
|
||||
if not isinstance(value, str):
|
||||
return value
|
||||
value = value.replace("@", "[at]").replace(".", "[dot]")
|
||||
return mark_safe(''.join(['&#{0};'.format(ord(char)) for char in value]))
|
||||
@@ -9,5 +9,5 @@ Please do never give this code to another person. Our support team will never as
|
||||
If this code was not requested by you, please contact us immediately.
|
||||
|
||||
Best regards,
|
||||
Your {{ instance }} team
|
||||
Your pretix team
|
||||
{% endblocktrans %}
|
||||
|
||||
@@ -5,5 +5,5 @@ you requested a new password. Please go to the following page to reset your pass
|
||||
{{ url }}
|
||||
|
||||
Best regards,
|
||||
Your {{ instance }} team
|
||||
{% endblocktrans %}
|
||||
Your pretix team
|
||||
{% endblocktrans %}
|
||||
@@ -1,6 +1,6 @@
|
||||
{% load i18n %}{% blocktrans with url=url|safe %}Hello,
|
||||
|
||||
you have been invited to a team on {{ instance }}, a platform to perform event
|
||||
you have been invited to a team on pretix, a platform to perform event
|
||||
ticket sales.
|
||||
|
||||
Organizer: {{ organizer }}
|
||||
@@ -13,5 +13,5 @@ If you do not want to join, you can safely ignore or delete this email.
|
||||
|
||||
Best regards,
|
||||
|
||||
Your {{ instance }} team
|
||||
Your pretix team
|
||||
{% endblocktrans %}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{% load i18n %}{% blocktrans with url=url|safe messages=messages|safe %}Hello,
|
||||
|
||||
this is to inform you that the account information of your {{ instance }} account has been
|
||||
this is to inform you that the account information of your pretix account has been
|
||||
changed. In particular, the following changes have been performed:
|
||||
|
||||
{{ messages }}
|
||||
@@ -12,5 +12,5 @@ You can review and change your account settings here:
|
||||
{{ url }}
|
||||
|
||||
Best regards,
|
||||
Your {{ instance }} team
|
||||
Your pretix team
|
||||
{% endblocktrans %}
|
||||
|
||||
@@ -1039,10 +1039,9 @@ class TeamMemberView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin,
|
||||
def _send_invite(self, instance):
|
||||
mail(
|
||||
instance.email,
|
||||
_('Account invitation'),
|
||||
_('pretix account invitation'),
|
||||
'pretixcontrol/email/invitation.txt',
|
||||
{
|
||||
'instance': settings.PRETIX_INSTANCE_NAME,
|
||||
'user': self,
|
||||
'organizer': self.request.organizer.name,
|
||||
'team': instance.team.name,
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Details der Bestellposition"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:129
|
||||
msgid "Attendee details"
|
||||
msgstr "Details Teilnehmer*in"
|
||||
msgstr "Details Teilnehmer"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:130 pretix/base/exporters/answers.py:66
|
||||
#: pretix/base/models/items.py:1767 pretix/control/navigation.py:172
|
||||
@@ -908,13 +908,13 @@ msgstr "Veranstaltungs- oder Termininformationen"
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:50
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:36
|
||||
msgid "Attendee name"
|
||||
msgstr "Name Teilnehmer*in"
|
||||
msgstr "Name Teilnehmer"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:187
|
||||
#: pretix/base/datasync/sourcefields.py:604
|
||||
#: pretix/base/datasync/sourcefields.py:628
|
||||
msgid "Attendee"
|
||||
msgstr "Teilnehmer*in"
|
||||
msgstr "Teilnehmer"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:207
|
||||
#: pretix/base/exporters/orderlist.py:645 pretix/base/forms/questions.py:693
|
||||
@@ -925,11 +925,11 @@ msgstr "Teilnehmer*in"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:172
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:175
|
||||
msgid "Attendee email"
|
||||
msgstr "E-Mail Teilnehmer*in"
|
||||
msgstr "E-Mail Teilnehmer"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:219
|
||||
msgid "Attendee or order email"
|
||||
msgstr "E-Mail Teilnehmer*in oder Bestellung"
|
||||
msgstr "E-Mail Teilnehmer oder Bestellung"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:232
|
||||
#: pretix/base/exporters/orderlist.py:646 pretix/base/pdf.py:188
|
||||
@@ -939,23 +939,23 @@ msgstr "E-Mail Teilnehmer*in oder Bestellung"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:182
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:185
|
||||
msgid "Attendee company"
|
||||
msgstr "Teilnehmer*innen-Firma"
|
||||
msgstr "Teilnehmer-Firma"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:241
|
||||
msgid "Attendee address street"
|
||||
msgstr "Teilnehmer*innen-Adresse: Straße"
|
||||
msgstr "Teilnehmer-Adresse: Straße"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:250
|
||||
msgid "Attendee address ZIP code"
|
||||
msgstr "Teilnehmer*innen-Adresse: PLZ"
|
||||
msgstr "Teilnehmer-Adresse: PLZ"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:259
|
||||
msgid "Attendee address city"
|
||||
msgstr "Teilnehmer*innen-Adresse: Stadt"
|
||||
msgstr "Teilnehmer-Adresse: Stadt"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:268
|
||||
msgid "Attendee address country"
|
||||
msgstr "Teilnehmer*innen-Adresse: Land"
|
||||
msgstr "Teilnehmer-Adresse: Land"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:279
|
||||
#: pretix/base/exporters/orderlist.py:688 pretix/base/pdf.py:346
|
||||
@@ -1233,7 +1233,7 @@ msgid ""
|
||||
"Download a ZIP file including all files that have been uploaded by your "
|
||||
"customers while creating an order."
|
||||
msgstr ""
|
||||
"ZIP-Datei mit allen Dateien, die von Kund*innen im Bestellprozess als "
|
||||
"ZIP-Datei mit allen Dateien, die von Kunden im Bestellprozess als "
|
||||
"Antwort auf eine Frage hochgeladen wurden."
|
||||
|
||||
#: pretix/base/exporters/answers.py:76 pretix/base/exporters/orderlist.py:626
|
||||
@@ -2188,6 +2188,10 @@ msgstr "Ohne gültige Mitgliedschaft verstecken"
|
||||
msgid "Order data"
|
||||
msgstr "Bestelldaten"
|
||||
|
||||
#: pretix/base/exporters/relevant_orderlist.py:86
|
||||
msgid "Order data (sorted by relevance)"
|
||||
msgstr "Bestelldaten (nach Relevanz sortiert)"
|
||||
|
||||
#: pretix/base/exporters/json.py:53
|
||||
msgid ""
|
||||
"Download a structured JSON representation of all orders. This might be "
|
||||
@@ -2205,8 +2209,8 @@ msgid ""
|
||||
"Download a text file with all email addresses collected either from buyers "
|
||||
"or from ticket holders."
|
||||
msgstr ""
|
||||
"Textdatei mit allen E-Mail-Adressen, die von Käufer*innen und "
|
||||
"Ticketinhaber*innen eingesammelt wurden."
|
||||
"Textdatei mit allen E-Mail-Adressen, die von Käufern und "
|
||||
"Ticketinhaber eingesammelt wurden."
|
||||
|
||||
#: pretix/base/exporters/mail.py:76 pretix/plugins/reports/exporters.py:502
|
||||
#: pretix/plugins/reports/exporters.py:685
|
||||
@@ -2224,6 +2228,18 @@ msgstr ""
|
||||
"Bestellposition und das dritte eine Zeile für jede zusätzlich erhobene "
|
||||
"Gebühr."
|
||||
|
||||
#: pretix/base/exporters/relevant_orderlist.py:88
|
||||
msgid ""
|
||||
"Download a spreadsheet of all orders. The spreadsheet will include three "
|
||||
"sheets, one with a line for every order, one with a line for every order "
|
||||
"position, and one with a line for every additional fee charged in an "
|
||||
"order. The most relevant data is in the first columns of the tables."
|
||||
msgstr ""
|
||||
"Tabelle (Excel oder CSV) mit allen Bestellungen. Das erste Tabellenblatt "
|
||||
"enthält eine Zeile für jede Bestellung, das zweite eine Zeile für jede "
|
||||
"Bestellposition und das dritte eine Zeile für jede zusätzlich erhobene "
|
||||
"Gebühr. Die relevantesten Daten sind in den ersten Spalten der Tabellen."
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:102 pretix/base/models/orders.py:337
|
||||
#: pretix/control/navigation.py:255 pretix/control/navigation.py:362
|
||||
#: pretix/control/templates/pretixcontrol/orders/index.html:8
|
||||
@@ -4170,7 +4186,7 @@ msgstr "Bitte wählen Sie einen gültigen Staat aus."
|
||||
|
||||
#: pretix/base/modelimport_orders.py:359 pretix/control/forms/filter.py:688
|
||||
msgid "Attendee email address"
|
||||
msgstr "Teilnehmer*innen-E-Mail-Adresse"
|
||||
msgstr "Teilnehmer-E-Mail-Adresse"
|
||||
|
||||
#: pretix/base/modelimport_orders.py:375 pretix/base/modelimport_orders.py:386
|
||||
#: pretix/base/modelimport_orders.py:397 pretix/base/modelimport_orders.py:408
|
||||
@@ -4182,7 +4198,7 @@ msgstr "Teilnehmer*innen-E-Mail-Adresse"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:193
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:196
|
||||
msgid "Attendee address"
|
||||
msgstr "Teilnehmer*innen-Adresse"
|
||||
msgstr "Teilnehmer-Adresse"
|
||||
|
||||
#: pretix/base/modelimport_orders.py:445
|
||||
msgid "State"
|
||||
@@ -8096,7 +8112,7 @@ msgstr "Musterfirma GmbH"
|
||||
|
||||
#: pretix/base/pdf.py:193
|
||||
msgid "Full attendee address"
|
||||
msgstr "Volle Teilnehmer*innen-Adresse"
|
||||
msgstr "Volle Teilnehmer-Adresse"
|
||||
|
||||
#: pretix/base/pdf.py:194
|
||||
msgid ""
|
||||
@@ -8114,23 +8130,23 @@ msgstr ""
|
||||
|
||||
#: pretix/base/pdf.py:198
|
||||
msgid "Attendee street"
|
||||
msgstr "Teilnehmer*innen-Straße"
|
||||
msgstr "Teilnehmer-Straße"
|
||||
|
||||
#: pretix/base/pdf.py:203
|
||||
msgid "Attendee ZIP code"
|
||||
msgstr "Teilnehmer*innen-PLZ"
|
||||
msgstr "Teilnehmer-PLZ"
|
||||
|
||||
#: pretix/base/pdf.py:208
|
||||
msgid "Attendee city"
|
||||
msgstr "Teilnehmer*innen-Stadt"
|
||||
msgstr "Teilnehmer-Stadt"
|
||||
|
||||
#: pretix/base/pdf.py:213
|
||||
msgid "Attendee state"
|
||||
msgstr "Teilnehmer*innen-Bundesstaat"
|
||||
msgstr "Teilnehmer-Bundesstaat"
|
||||
|
||||
#: pretix/base/pdf.py:218
|
||||
msgid "Attendee country"
|
||||
msgstr "Teilnehmer*innen-Land"
|
||||
msgstr "Teilnehmer-Land"
|
||||
|
||||
#: pretix/base/pdf.py:230
|
||||
msgid "Pseudonymization ID (lead scanning)"
|
||||
@@ -8423,7 +8439,7 @@ msgstr "Herr Mustermann"
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py:99
|
||||
#, python-brace-format
|
||||
msgid "Attendee name: {part}"
|
||||
msgstr "Teilnehmer*innenname: {part}"
|
||||
msgstr "Teilnehmername: {part}"
|
||||
|
||||
#: pretix/base/pdf.py:688
|
||||
msgid "Invoice address name for salutation"
|
||||
@@ -9130,7 +9146,7 @@ msgstr "Veranstaltungsort: {location}"
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Attendee: {name}"
|
||||
msgstr "Teilnehmer*in: {name}"
|
||||
msgstr "Teilnehmer: {name}"
|
||||
|
||||
#: pretix/base/services/invoices.py:278 pretix/plugins/reports/exporters.py:308
|
||||
#, python-brace-format
|
||||
@@ -9986,7 +10002,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:361
|
||||
msgid "Hide prices on attendee ticket page"
|
||||
msgstr "Preise auf Teilnehmer*innen-Ticket-Seite verstecken"
|
||||
msgstr "Preise auf Teilnehmer-Ticket-Seite verstecken"
|
||||
|
||||
#: pretix/base/settings.py:362
|
||||
msgid ""
|
||||
@@ -9996,13 +10012,13 @@ msgid ""
|
||||
"price."
|
||||
msgstr ""
|
||||
"Wenn eine Person mehrere Tickets erwirbt und E-Mails an alle "
|
||||
"Teilnehmer*innen verschickt werden, wird mit dieser Option der Ticketpreis "
|
||||
"auf der Ticket-Seite der einzelnen Teilnehmer*innen versteckt. Nur die "
|
||||
"Teilnehmer verschickt werden, wird mit dieser Option der Ticketpreis "
|
||||
"auf der Ticket-Seite der einzelnen Teilnehmer versteckt. Nur die "
|
||||
"Person, welche die Tickets kauft, sieht den Preis."
|
||||
|
||||
#: pretix/base/settings.py:380
|
||||
msgid "Ask for attendee names"
|
||||
msgstr "Namen der Teilnehmer*innen erfragen"
|
||||
msgstr "Namen der Teilnehmer erfragen"
|
||||
|
||||
#: pretix/base/settings.py:381
|
||||
msgid "Ask for a name for all personalized tickets."
|
||||
@@ -10011,11 +10027,11 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:390
|
||||
msgid "Require attendee names"
|
||||
msgstr "Namen der Teilnehmer*innen erfordern"
|
||||
msgstr "Namen der Teilnehmer erfordern"
|
||||
|
||||
#: pretix/base/settings.py:391
|
||||
msgid "Require customers to fill in the names of all attendees."
|
||||
msgstr "Erfordere die Eingabe aller Teilnehmer*innen-Namen."
|
||||
msgstr "Erfordere die Eingabe aller Teilnehmer-Namen."
|
||||
|
||||
#: pretix/base/settings.py:401
|
||||
msgid "Ask for email addresses per ticket"
|
||||
@@ -10538,8 +10554,8 @@ msgid ""
|
||||
"but no indication of missing payment will be visible on the ticket pages of "
|
||||
"attendees who did not buy the ticket themselves."
|
||||
msgstr ""
|
||||
"Die Box mit Zahlungsinstruktionen wird Ticketkäufer*innen weiter angezeigt, "
|
||||
"aber Teilnehmer*innen, die ihr Ticket nicht selbst gekauft haben, werden "
|
||||
"Die Box mit Zahlungsinstruktionen wird Ticketkäufern weiter angezeigt, "
|
||||
"aber Teilnehmern, die ihr Ticket nicht selbst gekauft haben, werden "
|
||||
"keine Anzeichen des fehlenden Zahlungseingangs sehen."
|
||||
|
||||
#: pretix/base/settings.py:1068
|
||||
@@ -11037,7 +11053,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:1688
|
||||
msgid "Show number of check-ins to customer"
|
||||
msgstr "Zeige Anzahl der Check-ins für Kund*innen an"
|
||||
msgstr "Zeige Anzahl der Check-ins für Kunden an"
|
||||
|
||||
#: pretix/base/settings.py:1689
|
||||
msgid ""
|
||||
@@ -11048,12 +11064,12 @@ msgid ""
|
||||
"failed scans will not be counted, and the user will not see the different "
|
||||
"check-in lists."
|
||||
msgstr ""
|
||||
"Wenn diese Option aktiv ist, können Kund*innen selbst sehen, wie oft sie die "
|
||||
"Wenn diese Option aktiv ist, können Kunden selbst sehen, wie oft sie die "
|
||||
"Veranstaltung betreten haben. Das ist normalerweise nicht nötig, aber kann "
|
||||
"nützlich sein, wenn es Tickets gibt, die eine bestimmte Anzahl an Eintritten "
|
||||
"erlauben, sodass Kund*innen die bisherige Nutzung des Tickets einsehen "
|
||||
"erlauben, sodass Kunden die bisherige Nutzung des Tickets einsehen "
|
||||
"können. Ausgänge oder fehlgeschlagene Scans werden nicht angezeigt und die "
|
||||
"Kund*innen sehen keine Aufschlüsselung verschiedener Check-in-Listen."
|
||||
"Kunden sehen keine Aufschlüsselung verschiedener Check-in-Listen."
|
||||
|
||||
#: pretix/base/settings.py:1702
|
||||
msgid "Allow users to download tickets"
|
||||
@@ -11234,7 +11250,7 @@ msgstr ""
|
||||
#: pretix/base/settings.py:1865 pretix/base/settings.py:1874
|
||||
msgid "Both the attendee and the person who ordered can make changes"
|
||||
msgstr ""
|
||||
"Sowohl Besteller*in als auch Teilnehmer*innen können Änderungen vornehmen"
|
||||
"Sowohl Besteller als auch Teilnehmer können Änderungen vornehmen"
|
||||
|
||||
#: pretix/base/settings.py:1869
|
||||
msgid "Allow customers to modify their information"
|
||||
@@ -11342,7 +11358,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:1975
|
||||
msgid "Allow individual attendees to change their ticket"
|
||||
msgstr "Erlaubt einzelnen Teilnehmer*innen ihr Ticket zu ändern"
|
||||
msgstr "Erlaubt einzelnen Teilnehmern ihr Ticket zu ändern"
|
||||
|
||||
#: pretix/base/settings.py:1976
|
||||
msgid ""
|
||||
@@ -11354,7 +11370,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Standardmäßig kann nur die Person, welche die Tickets gekauft hat, "
|
||||
"Änderungen an der Bestellung vornehmen. Wenn diese Option aktiv ist, können "
|
||||
"auch einzelne Teilnehmer*innen Änderungen vornehmen. Teilnehmer*innen können "
|
||||
"auch einzelne Teilnehmer Änderungen vornehmen. Teilnehmer können "
|
||||
"jedoch immer nur Änderungen vornehmen, welche die Gesamtkosten der "
|
||||
"Bestellung nicht verändern. Solche Änderungen können nur vom Ticketkäufer "
|
||||
"vorgenommen werden."
|
||||
@@ -11650,7 +11666,7 @@ msgid ""
|
||||
"people."
|
||||
msgstr ""
|
||||
"Sie können dieses Feld benutzen, um zusätzliche Informationen mit Ihren "
|
||||
"Teilnehmer*innen zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
|
||||
"Teilnehmer zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
|
||||
"einer digitalen Veranstaltung. Wenn das Feld leer ist, fügen wir automatisch "
|
||||
"einen Link zum Ticketshop, die Einlass-Uhrzeit und den Veranstalter hier "
|
||||
"ein. Es sind keine Platzhalter mit sensiblen personenbezogenen Daten "
|
||||
@@ -11891,8 +11907,8 @@ msgstr ""
|
||||
"Diese Datei wird an die erste E-Mail angehängt, die wir beim Eingang einer "
|
||||
"neuen Bestellung verschicken. Sie kann daher mit den Textvorlagen "
|
||||
"\"Getätigte Bestellung\", \"Kostenlose Bestellung\" oder \"Erhaltene "
|
||||
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller*innen als "
|
||||
"auch Teilnehmer*innen verschickt. Nicht geeignet zum Versand nicht-"
|
||||
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller als "
|
||||
"auch Teilnehmer verschickt. Nicht geeignet zum Versand nicht-"
|
||||
"öffentlicher Informationen, da die Datei unabhängig davon verschickt wird, "
|
||||
"ob die Bestellung bezahlt oder freigegeben ist. Um zu vermeiden, dass diese "
|
||||
"wichtige E-Mail nicht ankommt, können nur PDF-Dateien mit maximal {size} MB "
|
||||
@@ -15201,7 +15217,7 @@ msgstr "Check-in-Status"
|
||||
#: pretix/control/forms/filter.py:2041
|
||||
#: pretix/plugins/checkinlists/exporters.py:108
|
||||
msgid "All attendees"
|
||||
msgstr "Alle Teilnehmer*innen"
|
||||
msgstr "Alle Teilnehmer"
|
||||
|
||||
#: pretix/control/forms/filter.py:2042
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html:183
|
||||
@@ -15785,7 +15801,7 @@ msgid ""
|
||||
"people over 65. This ticket includes access to all parts of the event, "
|
||||
"except the VIP area."
|
||||
msgstr ""
|
||||
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudent*innen, "
|
||||
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudent, "
|
||||
"Arbeitslose und Menschen über 65. Das Ticket enthält Zugang zu allen Teilen "
|
||||
"der Veranstaltung außer des VIP-Bereiches."
|
||||
|
||||
@@ -16099,7 +16115,7 @@ msgstr ""
|
||||
#: pretix/control/forms/orders.py:167 pretix/control/forms/orders.py:226
|
||||
#: pretix/control/forms/orders.py:240
|
||||
msgid "Notify customer by email"
|
||||
msgstr "Kund*in per E-Mail benachrichtigen"
|
||||
msgstr "Kunde per E-Mail benachrichtigen"
|
||||
|
||||
#: pretix/control/forms/orders.py:174
|
||||
msgid "Keep a cancellation fee of"
|
||||
@@ -17622,7 +17638,7 @@ msgstr "Eine individuelle E-Mail wurde verschickt."
|
||||
|
||||
#: pretix/control/logdisplay.py:553
|
||||
msgid "A custom email has been sent to an attendee."
|
||||
msgstr "Eine individuelle E-Mail wurde an eine Teilnehmer*in verschickt."
|
||||
msgstr "Eine individuelle E-Mail wurde an einen Teilnehmer verschickt."
|
||||
|
||||
#: pretix/control/logdisplay.py:554
|
||||
msgid ""
|
||||
@@ -19361,7 +19377,7 @@ msgstr "Terminal-ID"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:104
|
||||
msgid "Card holder"
|
||||
msgstr "Karteninhaber*in"
|
||||
msgstr "Karteninhaber"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:108
|
||||
msgid "Card expiration"
|
||||
@@ -19666,7 +19682,7 @@ msgstr "CSV"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html:73
|
||||
msgid "No attendee record was found."
|
||||
msgstr "Keine passenden Teilnehmer*innen gefunden."
|
||||
msgstr "Keine passenden Teilnehmer gefunden."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html:91
|
||||
#: pretix/control/templates/pretixcontrol/datasync/failed_jobs.html:19
|
||||
@@ -22497,7 +22513,7 @@ msgid ""
|
||||
"Only purchases of such products will be considered \"attendees\" for most "
|
||||
"statistical purposes or within some plugins."
|
||||
msgstr ""
|
||||
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer*innen\" gewertet, "
|
||||
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer\" gewertet, "
|
||||
"z.B. in Statistiken oder in Funktionen von Erweiterungen."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/item/create.html:39
|
||||
@@ -22576,7 +22592,7 @@ msgid ""
|
||||
"The system will not ask for a name or other attendee details. This only "
|
||||
"affects system-provided fields, you can still add your own questions."
|
||||
msgstr ""
|
||||
"Das System wird nicht nach einem Namen oder anderen Teilnehmer*innen-Daten "
|
||||
"Das System wird nicht nach einem Namen oder anderen Teilnehmer-Daten "
|
||||
"fragen. Dies betrifft nur vom System bereitgestellte Felder, eigene Fragen "
|
||||
"können trotzdem hinzugefügt werden."
|
||||
|
||||
@@ -24845,7 +24861,7 @@ msgstr "Sonstige Datenexporte"
|
||||
#: pretix/control/templates/pretixcontrol/orders/export.html:107
|
||||
#: pretix/control/templates/pretixcontrol/organizers/export.html:107
|
||||
msgid "Recommended for new users"
|
||||
msgstr "Empfohlen für neue Benutzer*innen"
|
||||
msgstr "Empfohlen für neue Benutzer"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/orders/export_delete.html:4
|
||||
#: pretix/control/templates/pretixcontrol/orders/export_delete.html:6
|
||||
@@ -25818,7 +25834,7 @@ msgstr "Domains"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:320
|
||||
msgid "This dialog is intended for advanced users."
|
||||
msgstr "Dieser Dialog ist für fortgeschrittene Anwender*innen gedacht."
|
||||
msgstr "Dieser Dialog ist für fortgeschrittene Anwender gedacht."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:321
|
||||
msgid ""
|
||||
@@ -28206,7 +28222,7 @@ msgid ""
|
||||
"customers. This way, customers will not be able to discover the waiting list."
|
||||
msgstr ""
|
||||
"Entsprechend Ihrer Veranstaltungseinstellungen werden ausverkaufte Produkte "
|
||||
"nicht angezeigt. Dies führt dazu, dass Kund*innen die Warteliste nicht "
|
||||
"nicht angezeigt. Dies führt dazu, dass Kunden die Warteliste nicht "
|
||||
"finden können."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/waitinglist/index.html:36
|
||||
@@ -28516,11 +28532,11 @@ msgstr "Das ausgewählte List wurde gelöscht."
|
||||
|
||||
#: pretix/control/views/dashboards.py:114
|
||||
msgid "Attendees (ordered)"
|
||||
msgstr "Teilnehmende (bestellt)"
|
||||
msgstr "Teilnehmer (bestellt)"
|
||||
|
||||
#: pretix/control/views/dashboards.py:124
|
||||
msgid "Attendees (paid)"
|
||||
msgstr "Teilnehmende (bezahlt)"
|
||||
msgstr "Teilnehmer (bezahlt)"
|
||||
|
||||
#: pretix/control/views/dashboards.py:136
|
||||
#, python-brace-format
|
||||
@@ -30579,7 +30595,7 @@ msgstr "PDF-Sammlungen"
|
||||
|
||||
#: pretix/plugins/badges/exporters.py:423
|
||||
msgid "Download all attendee badges as one large PDF for printing."
|
||||
msgstr "Alle Teilnehmer*innen-Badges in einer großen PDF-Datei für den Druck."
|
||||
msgstr "Alle Teilnehmer-Badges in einer großen PDF-Datei für den Druck."
|
||||
|
||||
#: pretix/plugins/badges/exporters.py:444
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py:80
|
||||
@@ -30854,7 +30870,7 @@ msgstr "Anderes Bankkonto"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:85
|
||||
msgid "Name of account holder"
|
||||
msgstr "Kontoinhaber*in"
|
||||
msgstr "Kontoinhaber"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:87
|
||||
msgid ""
|
||||
@@ -30996,7 +31012,7 @@ msgstr "Bitte überweisen Sie den vollen Betrag auf das folgende Bankkonto:"
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:32
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:35
|
||||
msgid "Account holder"
|
||||
msgstr "Kontoinhaber*in"
|
||||
msgstr "Kontoinhaber"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:304
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:20
|
||||
@@ -31591,7 +31607,7 @@ msgid ""
|
||||
"Download a spreadsheet with all attendees that are included in a check-in "
|
||||
"list."
|
||||
msgstr ""
|
||||
"Tabelle (Excel oder CSV) mit allen Teilnehmer*innen, die in einer Check-in-"
|
||||
"Tabelle (Excel oder CSV) mit allen Teilnehmer, die in einer Check-in-"
|
||||
"Liste zutrittsberechtigt sind."
|
||||
|
||||
#: pretix/plugins/checkinlists/exporters.py:501
|
||||
@@ -32770,7 +32786,7 @@ msgstr "Geplante E-Mails"
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:122
|
||||
msgid "Mass email was sent to customers or attendees."
|
||||
msgstr "Rundmail wurde an Kunden oder Teilnehmer*innen verschickt."
|
||||
msgstr "Rundmail wurde an Kunden oder Teilnehmer verschickt."
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:123
|
||||
msgid "Mass email was sent to waiting list entries."
|
||||
@@ -32802,7 +32818,7 @@ msgstr "Eine automatisierte E-Mail wurde an den Besteller verschickt"
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:142
|
||||
msgid "A scheduled email was sent to a ticket holder"
|
||||
msgstr "Eine automatisierte E-Mail wurde an eine Teilnehmer*in verschickt."
|
||||
msgstr "Eine automatisierte E-Mail wurde an eine Teilnehmer verschickt."
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:143
|
||||
msgid "An email rule was deleted"
|
||||
@@ -32835,7 +32851,7 @@ msgstr "Alle nicht eingecheckten Kunden"
|
||||
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:23
|
||||
msgid "Attendee contact addresses"
|
||||
msgstr "Teilnehmer*innen-E-Mail-Adressen"
|
||||
msgstr "Teilnehmer-E-Mail-Adressen"
|
||||
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:25
|
||||
msgid "All contact addresses"
|
||||
@@ -32994,14 +33010,14 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/sendmail/views.py:250
|
||||
msgid "Orders or attendees"
|
||||
msgstr "Bestellungen oder Teilnehmer*innen"
|
||||
msgstr "Bestellungen oder Teilnehmer"
|
||||
|
||||
#: pretix/plugins/sendmail/views.py:251
|
||||
msgid ""
|
||||
"Send an email to every customer, or to every person a ticket has been "
|
||||
"purchased for, or a combination of both."
|
||||
msgstr ""
|
||||
"Senden Sie eine E-Mail an alle Ticketkäufer*innen, alle Ticketinhaber*innen "
|
||||
"Senden Sie eine E-Mail an alle Ticketkäufer, alle Ticketinhaber "
|
||||
"oder eine Kombination aus beiden Gruppen."
|
||||
|
||||
#: pretix/plugins/sendmail/views.py:417
|
||||
@@ -33583,23 +33599,23 @@ msgstr "SEPA-Lastschrift"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1258
|
||||
msgid "Account Holder Name"
|
||||
msgstr "Kontoinhaber*in"
|
||||
msgstr "Kontoinhaber"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1263
|
||||
msgid "Account Holder Street"
|
||||
msgstr "Straße (Kontoinhaber*in)"
|
||||
msgstr "Straße (Kontoinhaber)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1275
|
||||
msgid "Account Holder Postal Code"
|
||||
msgstr "PLZ (Kontoinhaber*in)"
|
||||
msgstr "PLZ (Kontoinhaber)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1287
|
||||
msgid "Account Holder City"
|
||||
msgstr "Stadt (Kontoinhaber*in)"
|
||||
msgstr "Stadt (Kontoinhaber)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1299
|
||||
msgid "Account Holder Country"
|
||||
msgstr "Land (Kontoinhaber*in)"
|
||||
msgstr "Land (Kontoinhaber)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1343
|
||||
msgid "Affirm via Stripe"
|
||||
@@ -35439,7 +35455,7 @@ msgstr[1] "Das Ticket wurde %(count)s-mal eingelöst."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:166
|
||||
msgid "No attendee name provided"
|
||||
msgstr "Name der teilnehmenden Person nicht angegeben"
|
||||
msgstr "Name des Teilnehmenrs nicht angegeben"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:219
|
||||
msgid "The image you previously uploaded"
|
||||
@@ -37191,12 +37207,12 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:11
|
||||
#: pretix/presale/views/customer.py:386
|
||||
msgid "Attendee profiles"
|
||||
msgstr "Teilnehmer*innen-Profile"
|
||||
msgstr "Teilnehmer-Profile"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:37
|
||||
msgid "You don’t have any attendee profiles in your account yet."
|
||||
msgstr ""
|
||||
"In Ihrem Kundenkonto sind noch keine Teilnehmer*innen-Profile gespeichert."
|
||||
"In Ihrem Kundenkonto sind noch keine Teilnehmer-Profile gespeichert."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_registration.html:7
|
||||
msgid "Registration"
|
||||
@@ -38697,7 +38713,7 @@ msgstr "Kosovo"
|
||||
#~ "This plugin allows you to generate badges or name tags for your attendees."
|
||||
#~ msgstr ""
|
||||
#~ "Diese Erweiterung erlaubt, Namensschilder oder Badges für die "
|
||||
#~ "Teilnehmer*innen zu erstellen."
|
||||
#~ "Teilnehmer zu erstellen."
|
||||
|
||||
#~ msgid "This plugin allows you to receive payments via PayPal"
|
||||
#~ msgstr "Dieses Plugin erlaubt, Zahlungen über PayPal anzunehmen"
|
||||
|
||||
@@ -848,7 +848,7 @@ msgstr "Details der Bestellposition"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:129
|
||||
msgid "Attendee details"
|
||||
msgstr "Details Teilnehmer*in"
|
||||
msgstr "Details Teilnehmer"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:130 pretix/base/exporters/answers.py:66
|
||||
#: pretix/base/models/items.py:1767 pretix/control/navigation.py:172
|
||||
@@ -910,13 +910,13 @@ msgstr "Veranstaltungs- oder Termininformationen"
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:50
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:36
|
||||
msgid "Attendee name"
|
||||
msgstr "Name Teilnehmer*in"
|
||||
msgstr "Name Teilnehmer"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:187
|
||||
#: pretix/base/datasync/sourcefields.py:604
|
||||
#: pretix/base/datasync/sourcefields.py:628
|
||||
msgid "Attendee"
|
||||
msgstr "Teilnehmer*in"
|
||||
msgstr "Teilnehmer"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:207
|
||||
#: pretix/base/exporters/orderlist.py:645 pretix/base/forms/questions.py:693
|
||||
@@ -927,11 +927,11 @@ msgstr "Teilnehmer*in"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:172
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:175
|
||||
msgid "Attendee email"
|
||||
msgstr "E-Mail Teilnehmer*in"
|
||||
msgstr "E-Mail Teilnehmer"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:219
|
||||
msgid "Attendee or order email"
|
||||
msgstr "E-Mail Teilnehmer*in oder Bestellung"
|
||||
msgstr "E-Mail Teilnehmer oder Bestellung"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:232
|
||||
#: pretix/base/exporters/orderlist.py:646 pretix/base/pdf.py:188
|
||||
@@ -941,23 +941,23 @@ msgstr "E-Mail Teilnehmer*in oder Bestellung"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:182
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:185
|
||||
msgid "Attendee company"
|
||||
msgstr "Teilnehmer*innen-Firma"
|
||||
msgstr "Teilnehmer-Firma"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:241
|
||||
msgid "Attendee address street"
|
||||
msgstr "Teilnehmer*innen-Adresse: Straße"
|
||||
msgstr "Teilnehmer-Adresse: Straße"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:250
|
||||
msgid "Attendee address ZIP code"
|
||||
msgstr "Teilnehmer*innen-Adresse: PLZ"
|
||||
msgstr "Teilnehmer-Adresse: PLZ"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:259
|
||||
msgid "Attendee address city"
|
||||
msgstr "Teilnehmer*innen-Adresse: Stadt"
|
||||
msgstr "Teilnehmer-Adresse: Stadt"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:268
|
||||
msgid "Attendee address country"
|
||||
msgstr "Teilnehmer*innen-Adresse: Land"
|
||||
msgstr "Teilnehmer-Adresse: Land"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:279
|
||||
#: pretix/base/exporters/orderlist.py:688 pretix/base/pdf.py:346
|
||||
@@ -1235,7 +1235,7 @@ msgid ""
|
||||
"Download a ZIP file including all files that have been uploaded by your "
|
||||
"customers while creating an order."
|
||||
msgstr ""
|
||||
"ZIP-Datei mit allen Dateien, die von Kund*innen im Bestellprozess als "
|
||||
"ZIP-Datei mit allen Dateien, die von Kunden im Bestellprozess als "
|
||||
"Antwort auf eine Frage hochgeladen wurden."
|
||||
|
||||
#: pretix/base/exporters/answers.py:76 pretix/base/exporters/orderlist.py:626
|
||||
@@ -2207,8 +2207,8 @@ msgid ""
|
||||
"Download a text file with all email addresses collected either from buyers "
|
||||
"or from ticket holders."
|
||||
msgstr ""
|
||||
"Textdatei mit allen E-Mail-Adressen, die von Käufer*innen und "
|
||||
"Ticketinhaber*innen eingesammelt wurden."
|
||||
"Textdatei mit allen E-Mail-Adressen, die von Käufer und "
|
||||
"Ticketinhaber eingesammelt wurden."
|
||||
|
||||
#: pretix/base/exporters/mail.py:76 pretix/plugins/reports/exporters.py:502
|
||||
#: pretix/plugins/reports/exporters.py:685
|
||||
@@ -4172,7 +4172,7 @@ msgstr "Bitte wähle einen gültigen Staat aus."
|
||||
|
||||
#: pretix/base/modelimport_orders.py:359 pretix/control/forms/filter.py:688
|
||||
msgid "Attendee email address"
|
||||
msgstr "Teilnehmer*innen-E-Mail-Adresse"
|
||||
msgstr "Teilnehmer-E-Mail-Adresse"
|
||||
|
||||
#: pretix/base/modelimport_orders.py:375 pretix/base/modelimport_orders.py:386
|
||||
#: pretix/base/modelimport_orders.py:397 pretix/base/modelimport_orders.py:408
|
||||
@@ -4184,7 +4184,7 @@ msgstr "Teilnehmer*innen-E-Mail-Adresse"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:193
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:196
|
||||
msgid "Attendee address"
|
||||
msgstr "Teilnehmer*innen-Adresse"
|
||||
msgstr "Teilnehmer-Adresse"
|
||||
|
||||
#: pretix/base/modelimport_orders.py:445
|
||||
msgid "State"
|
||||
@@ -8089,7 +8089,7 @@ msgstr "Musterfirma"
|
||||
|
||||
#: pretix/base/pdf.py:193
|
||||
msgid "Full attendee address"
|
||||
msgstr "Volle Teilnehmer*innen-Adresse"
|
||||
msgstr "Volle Teilnehmer-Adresse"
|
||||
|
||||
#: pretix/base/pdf.py:194
|
||||
msgid ""
|
||||
@@ -8107,23 +8107,23 @@ msgstr ""
|
||||
|
||||
#: pretix/base/pdf.py:198
|
||||
msgid "Attendee street"
|
||||
msgstr "Teilnehmer*innen-Straße"
|
||||
msgstr "Teilnehmer-Straße"
|
||||
|
||||
#: pretix/base/pdf.py:203
|
||||
msgid "Attendee ZIP code"
|
||||
msgstr "Teilnehmer*innen-PLZ"
|
||||
msgstr "Teilnehmer-PLZ"
|
||||
|
||||
#: pretix/base/pdf.py:208
|
||||
msgid "Attendee city"
|
||||
msgstr "Teilnehmer*innen-Stadt"
|
||||
msgstr "Teilnehmer-Stadt"
|
||||
|
||||
#: pretix/base/pdf.py:213
|
||||
msgid "Attendee state"
|
||||
msgstr "Teilnehmer*innen-Bundesstaat"
|
||||
msgstr "Teilnehmer-Bundesstaat"
|
||||
|
||||
#: pretix/base/pdf.py:218
|
||||
msgid "Attendee country"
|
||||
msgstr "Teilnehmer*innen-Land"
|
||||
msgstr "Teilnehmer-Land"
|
||||
|
||||
#: pretix/base/pdf.py:230
|
||||
msgid "Pseudonymization ID (lead scanning)"
|
||||
@@ -8416,7 +8416,7 @@ msgstr "Herr Mustermann"
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py:99
|
||||
#, python-brace-format
|
||||
msgid "Attendee name: {part}"
|
||||
msgstr "Teilnehmer*innenname: {part}"
|
||||
msgstr "Teilnehmer: {part}"
|
||||
|
||||
#: pretix/base/pdf.py:688
|
||||
msgid "Invoice address name for salutation"
|
||||
@@ -9120,7 +9120,7 @@ msgstr "Veranstaltungsort: {location}"
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Attendee: {name}"
|
||||
msgstr "Teilnehmer*in: {name}"
|
||||
msgstr "Teilnehmer: {name}"
|
||||
|
||||
#: pretix/base/services/invoices.py:278 pretix/plugins/reports/exporters.py:308
|
||||
#, python-brace-format
|
||||
@@ -9974,7 +9974,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:361
|
||||
msgid "Hide prices on attendee ticket page"
|
||||
msgstr "Preise auf Teilnehmer*innen-Ticket-Seite verstecken"
|
||||
msgstr "Preise auf Teilnehmer-Ticket-Seite verstecken"
|
||||
|
||||
#: pretix/base/settings.py:362
|
||||
msgid ""
|
||||
@@ -9984,13 +9984,13 @@ msgid ""
|
||||
"price."
|
||||
msgstr ""
|
||||
"Wenn eine Person mehrere Tickets erwirbt und E-Mails an alle "
|
||||
"Teilnehmer*innen verschickt werden, wird mit dieser Option der Ticketpreis "
|
||||
"auf der Ticket-Seite der einzelnen Teilnehmer*innen versteckt. Nur die "
|
||||
"Teilnehmer verschickt werden, wird mit dieser Option der Ticketpreis "
|
||||
"auf der Ticket-Seite der einzelnen Teilnehmer versteckt. Nur die "
|
||||
"Person, welche die Tickets kauft, sieht den Preis."
|
||||
|
||||
#: pretix/base/settings.py:380
|
||||
msgid "Ask for attendee names"
|
||||
msgstr "Namen der Teilnehmer*innen erfragen"
|
||||
msgstr "Namen der Teilnehmer erfragen"
|
||||
|
||||
#: pretix/base/settings.py:381
|
||||
msgid "Ask for a name for all personalized tickets."
|
||||
@@ -9999,11 +9999,11 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:390
|
||||
msgid "Require attendee names"
|
||||
msgstr "Namen der Teilnehmer*innen erfordern"
|
||||
msgstr "Namen der Teilnehmer erfordern"
|
||||
|
||||
#: pretix/base/settings.py:391
|
||||
msgid "Require customers to fill in the names of all attendees."
|
||||
msgstr "Erfordere die Eingabe aller Teilnehmer*innen-Namen."
|
||||
msgstr "Erfordere die Eingabe aller Teilnehmer-Namen."
|
||||
|
||||
#: pretix/base/settings.py:401
|
||||
msgid "Ask for email addresses per ticket"
|
||||
@@ -10025,7 +10025,7 @@ msgstr ""
|
||||
"aktivierst, fragt das System zusätzlich nach einzelnen E-Mail-Adressen für "
|
||||
"jedes personalisierte Ticket in der Bestellung. Dies könnte z.B. nützlich "
|
||||
"sein, wenn du auch im Falle von Gruppenbestellungen individuelle Adressen "
|
||||
"von jeder Teilnehmer*in benötigst. pretix sendet die Bestellbestätigung "
|
||||
"von jedem Teilnehmer benötigst. pretix sendet die Bestellbestätigung "
|
||||
"standardmäßig nach wie vor nur an die primäre Adresse, dies kann jedoch in "
|
||||
"den E-Mail-Einstellungen angepasst werden."
|
||||
|
||||
@@ -10525,8 +10525,8 @@ msgid ""
|
||||
"but no indication of missing payment will be visible on the ticket pages of "
|
||||
"attendees who did not buy the ticket themselves."
|
||||
msgstr ""
|
||||
"Die Box mit Zahlungsinstruktionen wird Ticketkäufer*innen weiter angezeigt, "
|
||||
"aber Teilnehmer*innen, die ihr Ticket nicht selbst gekauft haben, werden "
|
||||
"Die Box mit Zahlungsinstruktionen wird Ticketkäufern weiter angezeigt, "
|
||||
"aber Teilnehmer, die ihr Ticket nicht selbst gekauft haben, werden "
|
||||
"keine Anzeichen des fehlenden Zahlungseingangs sehen."
|
||||
|
||||
#: pretix/base/settings.py:1068
|
||||
@@ -11024,7 +11024,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:1688
|
||||
msgid "Show number of check-ins to customer"
|
||||
msgstr "Zeige Anzahl der Check-ins für Kund*innen an"
|
||||
msgstr "Zeige Anzahl der Check-ins für Kunden an"
|
||||
|
||||
#: pretix/base/settings.py:1689
|
||||
msgid ""
|
||||
@@ -11035,12 +11035,12 @@ msgid ""
|
||||
"failed scans will not be counted, and the user will not see the different "
|
||||
"check-in lists."
|
||||
msgstr ""
|
||||
"Wenn diese Option aktiv ist, können Kund*innen selbst sehen, wie oft sie die "
|
||||
"Wenn diese Option aktiv ist, können Kunden selbst sehen, wie oft sie die "
|
||||
"Veranstaltung betreten haben. Das ist normalerweise nicht nötig, aber kann "
|
||||
"nützlich sein, wenn es Tickets gibt, die eine bestimmte Anzahl an Eintritten "
|
||||
"erlauben, sodass Kund*innen die bisherige Nutzung des Tickets einsehen "
|
||||
"erlauben, sodass Kunden die bisherige Nutzung des Tickets einsehen "
|
||||
"können. Ausgänge oder fehlgeschlagene Scans werden nicht angezeigt und die "
|
||||
"Kund*innen sehen keine Aufschlüsselung verschiedener Check-in-Listen."
|
||||
"Kunden sehen keine Aufschlüsselung verschiedener Check-in-Listen."
|
||||
|
||||
#: pretix/base/settings.py:1702
|
||||
msgid "Allow users to download tickets"
|
||||
@@ -11221,7 +11221,7 @@ msgstr ""
|
||||
#: pretix/base/settings.py:1865 pretix/base/settings.py:1874
|
||||
msgid "Both the attendee and the person who ordered can make changes"
|
||||
msgstr ""
|
||||
"Sowohl Besteller*in als auch Teilnehmer*innen können Änderungen vornehmen"
|
||||
"Sowohl Besteller als auch Teilnehmer können Änderungen vornehmen"
|
||||
|
||||
#: pretix/base/settings.py:1869
|
||||
msgid "Allow customers to modify their information"
|
||||
@@ -11329,7 +11329,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:1975
|
||||
msgid "Allow individual attendees to change their ticket"
|
||||
msgstr "Erlaubt einzelnen Teilnehmer*innen ihr Ticket zu ändern"
|
||||
msgstr "Erlaubt einzelnen Teilnehmer ihr Ticket zu ändern"
|
||||
|
||||
#: pretix/base/settings.py:1976
|
||||
msgid ""
|
||||
@@ -11341,7 +11341,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Standardmäßig kann nur die Person, welche die Tickets gekauft hat, "
|
||||
"Änderungen an der Bestellung vornehmen. Wenn diese Option aktiv ist, können "
|
||||
"auch einzelne Teilnehmer*innen Änderungen vornehmen. Teilnehmer*innen können "
|
||||
"auch einzelne Teilnehmer Änderungen vornehmen. Teilnehmer können "
|
||||
"jedoch immer nur Änderungen vornehmen, welche die Gesamtkosten der "
|
||||
"Bestellung nicht verändern. Solche Änderungen können nur vom Ticketkäufer "
|
||||
"vorgenommen werden."
|
||||
@@ -11525,7 +11525,7 @@ msgstr "Kontakt-E-Mail"
|
||||
#: pretix/base/settings.py:2211 pretix/control/forms/event.py:1843
|
||||
msgid "We'll show this publicly to allow attendees to contact you."
|
||||
msgstr ""
|
||||
"Wir werden diese Adresse veröffentlichen um Teilnehmer*innen zu ermöglichen, "
|
||||
"Wir werden diese Adresse veröffentlichen um Teilnehmern zu ermöglichen, "
|
||||
"dich zu kontaktieren."
|
||||
|
||||
#: pretix/base/settings.py:2219 pretix/control/forms/event.py:1835
|
||||
@@ -11637,7 +11637,7 @@ msgid ""
|
||||
"people."
|
||||
msgstr ""
|
||||
"Du kannst dieses Feld benutzen um zusätzliche Informationen mit deinen "
|
||||
"Teilnehmer*innen zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
|
||||
"Teilnehmer zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
|
||||
"einer digitalen Veranstaltung. Wenn das Feld leer ist, fügen wir automatisch "
|
||||
"einen Link zum Ticketshop, die Einlass-Uhrzeit und den Veranstalter hier "
|
||||
"ein. Es sind keine Platzhalter mit sensiblen personenbezogenen Daten "
|
||||
@@ -11877,8 +11877,8 @@ msgstr ""
|
||||
"Diese Datei wird an die erste E-Mail angehängt, die wir beim Eingang einer "
|
||||
"neuen Bestellung verschicken. Sie kann daher mit den Textvorlagen "
|
||||
"\"Getätigte Bestellung\", \"Kostenlose Bestellung\" oder \"Erhaltene "
|
||||
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller*innen als "
|
||||
"auch Teilnehmer*innen verschickt. Nicht geeignet zum Versand nicht-"
|
||||
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller als "
|
||||
"auch Teilnehmer verschickt. Nicht geeignet zum Versand nicht-"
|
||||
"öffentlicher Informationen, da die Datei unabhängig davon verschickt wird, "
|
||||
"ob die Bestellung bezahlt oder freigegeben ist. Um zu vermeiden, dass diese "
|
||||
"wichtige E-Mail nicht ankommt, können nur PDF-Dateien mit maximal {size} MB "
|
||||
@@ -13141,7 +13141,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"You cannot require specifying attendee names if you do not ask for them."
|
||||
msgstr ""
|
||||
"Du kannst die Angabe von Teilnehmer*innennamen nur erfordern, wenn auch nach "
|
||||
"Du kannst die Angabe von Teilnehmernamen nur erfordern, wenn auch nach "
|
||||
"Namen gefragt wird."
|
||||
|
||||
#: pretix/base/settings.py:4066
|
||||
@@ -14777,11 +14777,11 @@ msgstr "Ticket-Downloads"
|
||||
#: pretix/control/forms/event.py:1825
|
||||
msgid "Your customers will be able to download their tickets in PDF format."
|
||||
msgstr ""
|
||||
"Die Teilnehmer*innen werden ihre Tickets im PDF-Format herunterladen können."
|
||||
"Die Teilnehmer werden ihre Tickets im PDF-Format herunterladen können."
|
||||
|
||||
#: pretix/control/forms/event.py:1829
|
||||
msgid "Require all attendees to fill in their names"
|
||||
msgstr "Erfordere, dass alle Teilnehmer*innen ihre Namen ausfüllen"
|
||||
msgstr "Erfordere, dass alle Teilnehmer ihre Namen ausfüllen"
|
||||
|
||||
#: pretix/control/forms/event.py:1830
|
||||
msgid ""
|
||||
@@ -14817,7 +14817,7 @@ msgid ""
|
||||
"then import your bank statements to process the payments within pretix, or "
|
||||
"mark them as paid manually."
|
||||
msgstr ""
|
||||
"Deine Teilnehmer*innen werden angewiesen, das Geld direkt auf dein Bankkonto "
|
||||
"Deine Teilnehmer werden angewiesen, das Geld direkt auf dein Bankkonto "
|
||||
"zu überweisen. Du kannst dann deinen Kontoauszug in pretix importieren, um "
|
||||
"Zahlungen zuzuweisen, oder die Bestellungen manuell als bezahlt markieren."
|
||||
|
||||
@@ -15178,7 +15178,7 @@ msgstr "Check-in-Status"
|
||||
#: pretix/control/forms/filter.py:2041
|
||||
#: pretix/plugins/checkinlists/exporters.py:108
|
||||
msgid "All attendees"
|
||||
msgstr "Alle Teilnehmer*innen"
|
||||
msgstr "Alle Teilnehmer"
|
||||
|
||||
#: pretix/control/forms/filter.py:2042
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html:183
|
||||
@@ -15762,7 +15762,7 @@ msgid ""
|
||||
"people over 65. This ticket includes access to all parts of the event, "
|
||||
"except the VIP area."
|
||||
msgstr ""
|
||||
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudent*innen, "
|
||||
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudenten, "
|
||||
"Arbeitslose und Menschen über 65. Das Ticket enthält Zugang zu allen Teilen "
|
||||
"der Veranstaltung außer des VIP-Bereiches."
|
||||
|
||||
@@ -17599,7 +17599,7 @@ msgstr "Eine individuelle E-Mail wurde verschickt."
|
||||
|
||||
#: pretix/control/logdisplay.py:553
|
||||
msgid "A custom email has been sent to an attendee."
|
||||
msgstr "Eine individuelle E-Mail wurde an eine Teilnehmer*in verschickt."
|
||||
msgstr "Eine individuelle E-Mail wurde an eine Teilnehmer verschickt."
|
||||
|
||||
#: pretix/control/logdisplay.py:554
|
||||
msgid ""
|
||||
@@ -19337,7 +19337,7 @@ msgstr "Terminal-ID"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:104
|
||||
msgid "Card holder"
|
||||
msgstr "Karteninhaber*in"
|
||||
msgstr "Karteninhaber"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:108
|
||||
msgid "Card expiration"
|
||||
@@ -19642,7 +19642,7 @@ msgstr "CSV"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html:73
|
||||
msgid "No attendee record was found."
|
||||
msgstr "Keine passenden Teilnehmer*innen gefunden."
|
||||
msgstr "Keine passenden Teilnehmer gefunden."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html:91
|
||||
#: pretix/control/templates/pretixcontrol/datasync/failed_jobs.html:19
|
||||
@@ -21468,7 +21468,7 @@ msgid ""
|
||||
"provide ways for your attendees to contact you:"
|
||||
msgstr ""
|
||||
"Wenn irgendetwas schiefgeht oder unklar ist, empfehlen wir, dass du deinen "
|
||||
"Teilnehmer*innen die Möglichkeit gibst, dich zu benachrichtigen:"
|
||||
"Teilnehmer die Möglichkeit gibst, dich zu benachrichtigen:"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/event/settings.html:7
|
||||
#: pretix/control/templates/pretixcontrol/event/settings.html:13
|
||||
@@ -22466,7 +22466,7 @@ msgid ""
|
||||
"Only purchases of such products will be considered \"attendees\" for most "
|
||||
"statistical purposes or within some plugins."
|
||||
msgstr ""
|
||||
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer*innen\" gewertet, "
|
||||
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer\" gewertet, "
|
||||
"z.B. in Statistiken oder in Funktionen von Erweiterungen."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/item/create.html:39
|
||||
@@ -22545,7 +22545,7 @@ msgid ""
|
||||
"The system will not ask for a name or other attendee details. This only "
|
||||
"affects system-provided fields, you can still add your own questions."
|
||||
msgstr ""
|
||||
"Das System wird nicht nach einem Namen oder anderen Teilnehmer*innen-Daten "
|
||||
"Das System wird nicht nach einem Namen oder anderen Teilnehmer-Daten "
|
||||
"fragen. Dies betrifft nur vom System bereitgestellte Felder, eigene Fragen "
|
||||
"können trotzdem hinzugefügt werden."
|
||||
|
||||
@@ -23238,9 +23238,9 @@ msgid ""
|
||||
"ticket. If you provide food, one example might be to ask your users about "
|
||||
"dietary requirements."
|
||||
msgstr ""
|
||||
"Fragen erlauben deinen Besucher*innen, zusätzliche Informationen zu ihrem "
|
||||
"Fragen erlauben deinen Besucher, zusätzliche Informationen zu ihrem "
|
||||
"Ticket auszufüllen. Wenn deine Veranstaltung Verpflegung beinhaltet, "
|
||||
"könntest du z.B. nach Allergien deiner Teilnehmer*innen fragen."
|
||||
"könntest du z.B. nach Allergien deiner Teilnehmer fragen."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/questions.html:14
|
||||
msgid "Create a new question"
|
||||
@@ -23379,7 +23379,7 @@ msgstr ""
|
||||
"Um deine Produkte verfügbar zu machen, musst du Kontingente anlegen. "
|
||||
"Kontingente definieren, wie oft ein Produkt verkauft werden darf. Auf diese "
|
||||
"Art kannst du konfigurieren, ob deine Veranstaltung unbegrenzt viele "
|
||||
"Teilnehmer*innen aufnehmen kann oder ob die Anzahl begrenzt ist. Du kannst "
|
||||
"Teilnehmer aufnehmen kann oder ob die Anzahl begrenzt ist. Du kannst "
|
||||
"ein Produkt zu mehreren Kontingenten hinzufügen, um komplexere Anforderungen "
|
||||
"abzubilden, z.B. wenn du die Gesamtzahl der Tickets begrenzen willst, aber "
|
||||
"einen speziellen Ticket-Typ noch stärker begrenzen willst."
|
||||
@@ -24811,7 +24811,7 @@ msgstr "Sonstige Datenexporte"
|
||||
#: pretix/control/templates/pretixcontrol/orders/export.html:107
|
||||
#: pretix/control/templates/pretixcontrol/organizers/export.html:107
|
||||
msgid "Recommended for new users"
|
||||
msgstr "Empfohlen für neue Benutzer*innen"
|
||||
msgstr "Empfohlen für neue Benutzer"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/orders/export_delete.html:4
|
||||
#: pretix/control/templates/pretixcontrol/orders/export_delete.html:6
|
||||
@@ -25783,7 +25783,7 @@ msgstr "Domains"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:320
|
||||
msgid "This dialog is intended for advanced users."
|
||||
msgstr "Dieser Dialog ist für fortgeschrittene Anwender*innen gedacht."
|
||||
msgstr "Dieser Dialog ist für fortgeschrittene Anwender gedacht."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:321
|
||||
msgid ""
|
||||
@@ -28166,7 +28166,7 @@ msgid ""
|
||||
"customers. This way, customers will not be able to discover the waiting list."
|
||||
msgstr ""
|
||||
"Entsprechend deiner Veranstaltungseinstellungen werden ausverkaufte Produkte "
|
||||
"nicht angezeigt. Dies führt dazu, dass Kund*innen die Warteliste nicht "
|
||||
"nicht angezeigt. Dies führt dazu, dass Kunden die Warteliste nicht "
|
||||
"finden können."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/waitinglist/index.html:36
|
||||
@@ -30534,7 +30534,7 @@ msgstr "PDF-Sammlungen"
|
||||
|
||||
#: pretix/plugins/badges/exporters.py:423
|
||||
msgid "Download all attendee badges as one large PDF for printing."
|
||||
msgstr "Alle Teilnehmer*innen-Badges in einer großen PDF-Datei für den Druck."
|
||||
msgstr "Alle Teilnehmer-Badges in einer großen PDF-Datei für den Druck."
|
||||
|
||||
#: pretix/plugins/badges/exporters.py:444
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py:80
|
||||
@@ -30808,7 +30808,7 @@ msgstr "Anderes Bankkonto"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:85
|
||||
msgid "Name of account holder"
|
||||
msgstr "Kontoinhaber*in"
|
||||
msgstr "Kontoinhaber"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:87
|
||||
msgid ""
|
||||
@@ -30950,7 +30950,7 @@ msgstr "Bitte überweise den vollen Betrag auf das folgende Bankkonto:"
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:32
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:35
|
||||
msgid "Account holder"
|
||||
msgstr "Kontoinhaber*in"
|
||||
msgstr "Kontoinhaber"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:304
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:20
|
||||
@@ -31546,7 +31546,7 @@ msgid ""
|
||||
"Download a spreadsheet with all attendees that are included in a check-in "
|
||||
"list."
|
||||
msgstr ""
|
||||
"Tabelle (Excel oder CSV) mit allen Teilnehmer*innen, die in einer Check-in-"
|
||||
"Tabelle (Excel oder CSV) mit allen Teilnehmer, die in einer Check-in-"
|
||||
"Liste zutrittsberechtigt sind."
|
||||
|
||||
#: pretix/plugins/checkinlists/exporters.py:501
|
||||
@@ -32722,7 +32722,7 @@ msgstr "Geplante E-Mails"
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:122
|
||||
msgid "Mass email was sent to customers or attendees."
|
||||
msgstr "Rundmail wurde an Kunden oder Teilnehmer*innen verschickt."
|
||||
msgstr "Rundmail wurde an Kunden oder Teilnehmer verschickt."
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:123
|
||||
msgid "Mass email was sent to waiting list entries."
|
||||
@@ -32754,7 +32754,7 @@ msgstr "Eine automatisierte E-Mail wurde an den Besteller verschickt"
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:142
|
||||
msgid "A scheduled email was sent to a ticket holder"
|
||||
msgstr "Eine automatisierte E-Mail wurde an eine Teilnehmer*in verschickt."
|
||||
msgstr "Eine automatisierte E-Mail wurde an einen Teilnehmer verschickt."
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:143
|
||||
msgid "An email rule was deleted"
|
||||
@@ -32787,7 +32787,7 @@ msgstr "Alle nicht eingecheckten Kunden"
|
||||
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:23
|
||||
msgid "Attendee contact addresses"
|
||||
msgstr "Teilnehmer*innen-E-Mail-Adressen"
|
||||
msgstr "Teilnehmer-E-Mail-Adressen"
|
||||
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:25
|
||||
msgid "All contact addresses"
|
||||
@@ -32947,14 +32947,14 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/sendmail/views.py:250
|
||||
msgid "Orders or attendees"
|
||||
msgstr "Bestellungen oder Teilnehmer*innen"
|
||||
msgstr "Bestellungen oder Teilnehmer"
|
||||
|
||||
#: pretix/plugins/sendmail/views.py:251
|
||||
msgid ""
|
||||
"Send an email to every customer, or to every person a ticket has been "
|
||||
"purchased for, or a combination of both."
|
||||
msgstr ""
|
||||
"Sende eine E-Mail an alle Ticketkäufer*innen, alle Ticketinhaber*innen oder "
|
||||
"Sende eine E-Mail an alle Ticketkäufer, alle Ticketinhaber oder "
|
||||
"eine Kombination aus beiden Gruppen."
|
||||
|
||||
#: pretix/plugins/sendmail/views.py:417
|
||||
@@ -33534,23 +33534,23 @@ msgstr "SEPA-Lastschrift"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1258
|
||||
msgid "Account Holder Name"
|
||||
msgstr "Kontoinhaber*in"
|
||||
msgstr "Kontoinhaber"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1263
|
||||
msgid "Account Holder Street"
|
||||
msgstr "Straße (Kontoinhaber*in)"
|
||||
msgstr "Straße (Kontoinhaber)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1275
|
||||
msgid "Account Holder Postal Code"
|
||||
msgstr "PLZ (Kontoinhaber*in)"
|
||||
msgstr "PLZ (Kontoinhaber)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1287
|
||||
msgid "Account Holder City"
|
||||
msgstr "Stadt (Kontoinhaber*in)"
|
||||
msgstr "Stadt (Kontoinhaber)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1299
|
||||
msgid "Account Holder Country"
|
||||
msgstr "Land (Kontoinhaber*in)"
|
||||
msgstr "Land (Kontoinhaber)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1343
|
||||
msgid "Affirm via Stripe"
|
||||
@@ -35383,7 +35383,7 @@ msgstr[1] "Das Ticket wurde %(count)s-mal eingelöst."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:166
|
||||
msgid "No attendee name provided"
|
||||
msgstr "Name der teilnehmenden Person nicht angegeben"
|
||||
msgstr "Name des Teilnehmenrs nicht angegeben"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:219
|
||||
msgid "The image you previously uploaded"
|
||||
@@ -37133,12 +37133,12 @@ msgstr "Möchtest das folgende Profil wirklich aus deinem Kundenkonto löschen?"
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:11
|
||||
#: pretix/presale/views/customer.py:386
|
||||
msgid "Attendee profiles"
|
||||
msgstr "Teilnehmer*innen-Adresse"
|
||||
msgstr "Teilnehmer-Adresse"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:37
|
||||
msgid "You don’t have any attendee profiles in your account yet."
|
||||
msgstr ""
|
||||
"In deinem Kundenkonto sind noch keine Teilnehmer*innen-Profile gespeichert."
|
||||
"In deinem Kundenkonto sind noch keine Teilnehmer-Profile gespeichert."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_registration.html:7
|
||||
msgid "Registration"
|
||||
@@ -38584,7 +38584,7 @@ msgstr "Kosovo"
|
||||
#~ "This plugin allows you to generate badges or name tags for your attendees."
|
||||
#~ msgstr ""
|
||||
#~ "Diese Erweiterung erlaubt, Namensschilder oder Badges für die "
|
||||
#~ "Teilnehmer*innen zu erstellen."
|
||||
#~ "Teilnehmer zu erstellen."
|
||||
|
||||
#~ msgid "This plugin allows you to receive payments via PayPal"
|
||||
#~ msgstr "Dieses Plugin erlaubt, Zahlungen über PayPal anzunehmen"
|
||||
@@ -39162,7 +39162,7 @@ msgstr "Kosovo"
|
||||
#~ msgstr "Biete Ticket-Download bereits vor Bezahlung einer Bestellung an"
|
||||
|
||||
#~ msgid "Attendee names"
|
||||
#~ msgstr "Teilnehmer*innennamen"
|
||||
#~ msgstr "Teilnehmername"
|
||||
|
||||
#~ msgid "Enable output"
|
||||
#~ msgstr "Aktivieren"
|
||||
@@ -39439,7 +39439,7 @@ msgstr "Kosovo"
|
||||
#~ "If checked, users can cancel orders by themselves as long as they are not "
|
||||
#~ "yet paid."
|
||||
#~ msgstr ""
|
||||
#~ "Wenn diese Option aktiviert ist, können Teilnehmer*innen selbstständig "
|
||||
#~ "Wenn diese Option aktiviert ist, können Teilnehmer selbstständig "
|
||||
#~ "Bestellungen stornieren solange sie nicht bezahlt wurden."
|
||||
|
||||
#~ msgid "Sales overview"
|
||||
|
||||
@@ -802,37 +802,31 @@ class PaypalMethod(BasePaymentProvider):
|
||||
all_captures_completed = False
|
||||
else:
|
||||
any_captures = True
|
||||
|
||||
# Payment has at least one capture, but it is not yet completed
|
||||
if any_captures and not all_captures_completed:
|
||||
if not (any_captures and all_captures_completed):
|
||||
messages.warning(request, _('PayPal has not yet approved the payment. We will inform you as '
|
||||
'soon as the payment completed.'))
|
||||
payment.info = json.dumps(pp_captured_order.dict())
|
||||
payment.state = OrderPayment.PAYMENT_STATE_PENDING
|
||||
payment.save()
|
||||
return
|
||||
# Payment has at least one capture and all captures are completed
|
||||
elif any_captures and all_captures_completed:
|
||||
if pp_captured_order.status != 'COMPLETED':
|
||||
payment.fail(info=pp_captured_order.dict())
|
||||
logger.error('Invalid state: %s' % repr(pp_captured_order.dict()))
|
||||
raise PaymentException(
|
||||
_('We were unable to process your payment. See below for details on how to proceed.')
|
||||
)
|
||||
|
||||
if payment.state == OrderPayment.PAYMENT_STATE_CONFIRMED:
|
||||
logger.warning('PayPal success event even though order is already marked as paid')
|
||||
return
|
||||
if pp_captured_order.status != 'COMPLETED':
|
||||
payment.fail(info=pp_captured_order.dict())
|
||||
logger.error('Invalid state: %s' % repr(pp_captured_order.dict()))
|
||||
raise PaymentException(
|
||||
_('We were unable to process your payment. See below for details on how to proceed.')
|
||||
)
|
||||
|
||||
try:
|
||||
payment.info = json.dumps(pp_captured_order.dict())
|
||||
payment.save(update_fields=['info'])
|
||||
payment.confirm()
|
||||
except Quota.QuotaExceededException as e:
|
||||
raise PaymentException(str(e))
|
||||
# Payment has not any captures yet - so it's probably in created status
|
||||
else:
|
||||
if payment.state == OrderPayment.PAYMENT_STATE_CONFIRMED:
|
||||
logger.warning('PayPal success event even though order is already marked as paid')
|
||||
return
|
||||
|
||||
try:
|
||||
payment.info = json.dumps(pp_captured_order.dict())
|
||||
payment.save(update_fields=['info'])
|
||||
payment.confirm()
|
||||
except Quota.QuotaExceededException as e:
|
||||
raise PaymentException(str(e))
|
||||
finally:
|
||||
if 'payment_paypal_oid' in request.session:
|
||||
del request.session['payment_paypal_oid']
|
||||
@@ -842,7 +836,7 @@ class PaypalMethod(BasePaymentProvider):
|
||||
try:
|
||||
if (
|
||||
payment.info
|
||||
and payment.info_data['purchase_units'][0]['payments']['captures'][0]['status'] == 'PENDING'
|
||||
and payment.info_data['purchase_units'][0]['payments']['captures'][0]['status'] == 'pending'
|
||||
):
|
||||
retry = False
|
||||
except (KeyError, IndexError):
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
{% load eventurl %}
|
||||
{% load safelink %}
|
||||
{% load rich_text %}
|
||||
{% load anonymize_email %}
|
||||
{% block thetitle %}
|
||||
{% if messages %}
|
||||
{{ messages|join:" " }} ::
|
||||
@@ -220,7 +219,7 @@
|
||||
{% endblock %}
|
||||
{% block footernav %}
|
||||
{% if request.event.settings.contact_mail %}
|
||||
<li><a href="{{ 'mailto:'|add:request.event.settings.contact_mail|anon_email }}" target="_blank" rel="noopener">{% trans "Contact" %}</a></li>
|
||||
<li><a href="mailto:{{ request.event.settings.contact_mail }}" target="_blank" rel="noopener">{% trans "Contact" %}</a></li>
|
||||
{% endif %}
|
||||
{% if request.event.settings.privacy_url %}
|
||||
<li><a href="{% safelink request.event.settings.privacy_url %}" target="_blank" rel="noopener">{% trans "Privacy policy" %}</a></li>
|
||||
|
||||
@@ -21,5 +21,4 @@
|
||||
<script type="text/javascript" src="{% static "pretixpresale/js/ui/cart.js" %}"></script>
|
||||
<script type="text/javascript" src="{% static "pretixpresale/js/ui/iframe.js" %}"></script>
|
||||
<script type="text/javascript" src="{% static "pretixbase/js/addressform.js" %}"></script>
|
||||
<script type="text/javascript" src="{% static "pretixbase/js/deanonymize_email.js" %}"></script>
|
||||
{% endcompress %}
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
{% load thumb %}
|
||||
{% load eventurl %}
|
||||
{% load safelink %}
|
||||
{% load anonymize_email %}
|
||||
{% block thetitle %}
|
||||
{% block title %}{% endblock %}{% if url_name != "organizer.index" %} :: {% endif %}{{ organizer.name }}
|
||||
{% endblock %}
|
||||
@@ -98,7 +97,7 @@
|
||||
{% endblock %}
|
||||
{% block footernav %}
|
||||
{% if not request.event and request.organizer.settings.contact_mail %}
|
||||
<li><a href="{{ 'mailto:'|add:request.organizer.settings.contact_mail|anon_email }}" target="_blank" rel="noopener">{% trans "Contact" %}</a></li>
|
||||
<li><a href="mailto:{{ request.organizer.settings.contact_mail }}" target="_blank" rel="noopener">{% trans "Contact" %}</a></li>
|
||||
{% endif %}
|
||||
{% if not request.event and request.organizer.settings.privacy_url %}
|
||||
<li><a href="{% safelink request.organizer.settings.privacy_url %}" target="_blank" rel="noopener">{% trans "Privacy policy" %}</a></li>
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
document.querySelectorAll('a[href^="mailto:"]').forEach(function(link) {
|
||||
// Replace [at] with @ and the [dot] with . in both the href and the displayed text (if needed)
|
||||
link.href = link.href.replace('[at]', '@').replace('[dot]', '.');
|
||||
link.textContent = link.textContent.replace('[at]', '@').replace('[dot]', '.');
|
||||
});
|
||||
});
|
||||
@@ -34,7 +34,7 @@ from stripe import error
|
||||
from tests.plugins.stripe.test_checkout import apple_domain_create
|
||||
from tests.plugins.stripe.test_provider import MockedCharge
|
||||
|
||||
from pretix.base.models import InvoiceAddress, Order, OrderPosition, Team
|
||||
from pretix.base.models import InvoiceAddress, Order, OrderPosition
|
||||
from pretix.base.models.orders import OrderFee, OrderPayment, OrderRefund
|
||||
|
||||
|
||||
@@ -180,41 +180,6 @@ def order2(event2, item2):
|
||||
return o
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@scopes_disabled()
|
||||
def team2(organizer, event2):
|
||||
team2 = Team.objects.create(
|
||||
organizer=organizer,
|
||||
name="Test-Team 2",
|
||||
can_change_teams=True,
|
||||
can_manage_gift_cards=True,
|
||||
can_change_items=True,
|
||||
can_create_events=True,
|
||||
can_change_event_settings=True,
|
||||
can_change_vouchers=True,
|
||||
can_view_vouchers=True,
|
||||
can_change_orders=True,
|
||||
can_manage_customers=True,
|
||||
can_manage_reusable_media=True,
|
||||
can_change_organizer_settings=True,
|
||||
|
||||
)
|
||||
team2.limit_events.add(event2)
|
||||
team2.save()
|
||||
return team2
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@scopes_disabled()
|
||||
def limited_token_client(client, team2):
|
||||
team2.can_view_orders = True
|
||||
team2.can_view_vouchers = True
|
||||
team2.save()
|
||||
t = team2.tokens.create(name='Foo')
|
||||
client.credentials(HTTP_AUTHORIZATION='Token ' + t.token)
|
||||
return client
|
||||
|
||||
|
||||
TEST_ORDERPOSITION_RES = {
|
||||
"id": 1,
|
||||
"order": "FOO",
|
||||
@@ -1022,64 +987,8 @@ def test_refund_cancel(token_client, organizer, event, order):
|
||||
assert resp.status_code == 400
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"endpoint_template, response_code",
|
||||
[('/api/v1/organizers/{}/events/{}/orderpositions/', 403), ('/api/v1/organizers/{}/orderpositions/', 200)]
|
||||
)
|
||||
@pytest.mark.django_db
|
||||
def test_orderposition_list_limited_read(
|
||||
endpoint_template, response_code, limited_token_client, organizer, device, event, order, item, subevent, subevent2, question
|
||||
):
|
||||
endpoint = endpoint_template.format(organizer.slug, event.slug)
|
||||
|
||||
i2 = copy.copy(item)
|
||||
i2.pk = None
|
||||
i2.save()
|
||||
with scopes_disabled():
|
||||
var = item.variations.create(value="Children")
|
||||
res = copy.copy(TEST_ORDERPOSITION_RES)
|
||||
op = order.positions.first()
|
||||
op.variation = var
|
||||
op.save()
|
||||
res["id"] = op.pk
|
||||
res["item"] = item.pk
|
||||
res["variation"] = var.pk
|
||||
res["answers"][0]["question"] = question.pk
|
||||
res["print_logs"][0]["id"] = op.print_logs.first().pk
|
||||
res["print_logs"][0]["device_id"] = device.device_id
|
||||
|
||||
resp = limited_token_client.get(endpoint)
|
||||
assert resp.status_code == response_code
|
||||
if response_code == 200:
|
||||
assert resp.json() == {'count': 0, 'next': None, 'previous': None, 'results': []}
|
||||
else:
|
||||
assert resp.json() == {'detail': 'You do not have permission to perform this action.'}
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("endpoint_template", "endpoint_type"),
|
||||
[
|
||||
('/api/v1/organizers/{}/events/{}/orderpositions/', "event"),
|
||||
('/api/v1/organizers/{}/orderpositions/', "organizer")
|
||||
],
|
||||
)
|
||||
@pytest.mark.django_db
|
||||
def test_orderposition_list(
|
||||
endpoint_template,
|
||||
endpoint_type,
|
||||
token_client,
|
||||
organizer,
|
||||
device,
|
||||
event,
|
||||
order,
|
||||
item,
|
||||
subevent,
|
||||
subevent2,
|
||||
question,
|
||||
django_assert_num_queries
|
||||
):
|
||||
endpoint = endpoint_template.format(organizer.slug, event.slug)
|
||||
|
||||
def test_orderposition_list(token_client, organizer, device, event, order, item, subevent, subevent2, question, django_assert_num_queries):
|
||||
i2 = copy.copy(item)
|
||||
i2.pk = None
|
||||
i2.save()
|
||||
@@ -1096,64 +1005,88 @@ def test_orderposition_list(
|
||||
res["answers"][0]["question"] = question.pk
|
||||
res["print_logs"][0]["id"] = op.print_logs.first().pk
|
||||
res["print_logs"][0]["device_id"] = device.device_id
|
||||
if endpoint_type == "organizer":
|
||||
res["event"] = event.slug
|
||||
|
||||
resp = token_client.get(endpoint)
|
||||
resp = token_client.get('/api/v1/organizers/{}/events/{}/orderpositions/'.format(organizer.slug, event.slug))
|
||||
assert resp.status_code == 200
|
||||
assert [res] == resp.data['results']
|
||||
|
||||
resp = token_client.get(endpoint + '?order__status=n')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?order__status=n'.format(organizer.slug, event.slug))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?order__status=p')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?order__status=p'.format(organizer.slug, event.slug))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
resp = token_client.get(endpoint + '?item={}'.format(item.pk))
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?item={}'.format(organizer.slug, event.slug, item.pk))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?item__in={},{}'.format(item.pk, i2.pk))
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?item__in={},{}'.format(
|
||||
organizer.slug, event.slug, item.pk, i2.pk
|
||||
))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?item={}'.format(i2.pk))
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?item={}'.format(organizer.slug, event.slug, i2.pk))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
resp = token_client.get(endpoint + '?variation={}'.format(var.pk))
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?variation={}'.format(organizer.slug, event.slug, var.pk))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?variation={}'.format(var2.pk))
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?variation={}'.format(organizer.slug, event.slug, var2.pk))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
resp = token_client.get(endpoint + '?attendee_name=Peter')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?attendee_name=Peter'.format(organizer.slug, event.slug))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?attendee_name=peter')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?attendee_name=peter'.format(organizer.slug, event.slug))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?attendee_name=Mark')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?attendee_name=Mark'.format(organizer.slug, event.slug))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
resp = token_client.get(endpoint + '?secret=z3fsn8jyufm5kpk768q69gkbyr5f4h6w')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?secret=z3fsn8jyufm5kpk768q69gkbyr5f4h6w'.format(
|
||||
organizer.slug, event.slug))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?secret=abc123')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?secret=abc123'.format(organizer.slug, event.slug))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
resp = token_client.get(endpoint + '?pseudonymization_id=ABCDEFGHKL')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?pseudonymization_id=ABCDEFGHKL'.format(
|
||||
organizer.slug, event.slug))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?pseudonymization_id=FOO')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?pseudonymization_id=FOO'.format(organizer.slug, event.slug))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
resp = token_client.get(endpoint + '?search=FO')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?search=FO'.format(organizer.slug, event.slug))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?search=z3fsn8j')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?search=z3fsn8j'.format(organizer.slug, event.slug))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?search=Peter')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?search=Peter'.format(organizer.slug, event.slug))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?search=5f4h6w')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?search=5f4h6w'.format(organizer.slug, event.slug))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
resp = token_client.get(endpoint + '?order=FOO')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?order=FOO'.format(organizer.slug, event.slug))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?order=BAR')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?order=BAR'.format(organizer.slug, event.slug))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
resp = token_client.get(endpoint + '?has_checkin=false')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=false'.format(organizer.slug, event.slug))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?has_checkin=true')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=true'.format(organizer.slug, event.slug))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
with scopes_disabled():
|
||||
@@ -1170,28 +1103,33 @@ def test_orderposition_list(
|
||||
'gate': None,
|
||||
'type': 'entry'
|
||||
}]
|
||||
if '/events/' in endpoint:
|
||||
with django_assert_num_queries(18):
|
||||
resp = token_client.get(endpoint + '?has_checkin=true')
|
||||
else:
|
||||
with django_assert_num_queries(17):
|
||||
resp = token_client.get(endpoint + '?has_checkin=true')
|
||||
with django_assert_num_queries(16):
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=true'.format(organizer.slug, event.slug)
|
||||
)
|
||||
assert [res] == resp.data['results']
|
||||
|
||||
op.subevent = subevent
|
||||
op.save()
|
||||
res['subevent'] = subevent.pk
|
||||
|
||||
resp = token_client.get(endpoint + '?subevent={}'.format(subevent.pk))
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?subevent={}'.format(organizer.slug, event.slug, subevent.pk))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?subevent__in={},{}'.format(subevent.pk, subevent2.pk))
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?subevent__in={},{}'.format(organizer.slug, event.slug,
|
||||
subevent.pk, subevent2.pk))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(endpoint + '?subevent={}'.format(subevent.pk + 1))
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?subevent={}'.format(organizer.slug, event.slug,
|
||||
subevent.pk + 1))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
resp = token_client.get(endpoint + '?include_canceled_positions=false')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?include_canceled_positions=false'.format(organizer.slug, event.slug))
|
||||
assert len(resp.data['results']) == 1
|
||||
resp = token_client.get(endpoint + '?include_canceled_positions=true')
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?include_canceled_positions=true'.format(organizer.slug, event.slug))
|
||||
assert len(resp.data['results']) == 2
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user