forked from CGM_Public/pretix_original
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2fd81a2d20 | ||
|
|
4271245a4a | ||
|
|
b41139a143 | ||
|
|
a68b225529 | ||
|
|
c12ba88ad8 | ||
|
|
69a80f2540 | ||
|
|
867667cd12 | ||
|
|
5c06c41a5b | ||
|
|
b1db5dbb3e | ||
|
|
fed389b990 | ||
|
|
1ce613ff89 | ||
|
|
44bef85b66 | ||
|
|
49c4acefd0 | ||
|
|
61e111742d | ||
|
|
b2274039b3 | ||
|
|
4913190730 | ||
|
|
276a087fdb | ||
|
|
3639f2cea1 | ||
|
|
692e9c38f1 | ||
|
|
dd4075b2cc | ||
|
|
b549cb451a | ||
|
|
576132b2d0 | ||
|
|
e0c432d014 |
@@ -25,8 +25,6 @@ matrix:
|
||||
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_postgres.cfg
|
||||
- python: 3.5
|
||||
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_postgres.cfg
|
||||
- python: 3.7
|
||||
env: JOB=plugins
|
||||
- python: 3.7
|
||||
env: JOB=doc-spelling
|
||||
- python: 3.7
|
||||
|
||||
@@ -45,7 +45,7 @@ Backend
|
||||
|
||||
.. automodule:: pretix.control.signals
|
||||
:members: nav_event, html_head, html_page_start, quota_detail_html, nav_topbar, nav_global, nav_organizer, nav_event_settings,
|
||||
order_info, event_settings_widget, oauth_application_registered, order_position_buttons
|
||||
order_info, event_settings_widget, oauth_application_registered, order_position_buttons, nav_item
|
||||
|
||||
|
||||
.. automodule:: pretix.base.signals
|
||||
|
||||
@@ -1 +1 @@
|
||||
__version__ = "2.8.0"
|
||||
__version__ = "2.9.0.dev0"
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from django.contrib.auth.models import AnonymousUser
|
||||
from django_scopes import scopes_disabled
|
||||
from rest_framework import exceptions
|
||||
from rest_framework.authentication import TokenAuthentication
|
||||
|
||||
@@ -12,7 +13,8 @@ class DeviceTokenAuthentication(TokenAuthentication):
|
||||
def authenticate_credentials(self, key):
|
||||
model = self.get_model()
|
||||
try:
|
||||
device = model.objects.select_related('organizer').get(api_token=key)
|
||||
with scopes_disabled():
|
||||
device = model.objects.select_related('organizer').get(api_token=key)
|
||||
except model.DoesNotExist:
|
||||
raise exceptions.AuthenticationFailed('Invalid token.')
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ from rest_framework.permissions import SAFE_METHODS, BasePermission
|
||||
from pretix.api.models import OAuthAccessToken
|
||||
from pretix.base.models import Device, Event, User
|
||||
from pretix.base.models.auth import SuperuserPermissionSet
|
||||
from pretix.base.models.organizer import Organizer, TeamAPIToken
|
||||
from pretix.base.models.organizer import TeamAPIToken
|
||||
from pretix.helpers.security import (
|
||||
SessionInvalid, SessionReauthRequired, assert_session_valid,
|
||||
)
|
||||
@@ -50,9 +50,6 @@ class EventPermission(BasePermission):
|
||||
return False
|
||||
|
||||
elif 'organizer' in request.resolver_match.kwargs:
|
||||
request.organizer = Organizer.objects.filter(
|
||||
slug=request.resolver_match.kwargs['organizer'],
|
||||
).first()
|
||||
if not request.organizer or not perm_holder.has_organizer_permission(request.organizer, request=request):
|
||||
return False
|
||||
if isinstance(perm_holder, User) and perm_holder.has_active_staff_session(request.session.session_key):
|
||||
|
||||
@@ -4,10 +4,13 @@ from hashlib import sha1
|
||||
from django.conf import settings
|
||||
from django.db import transaction
|
||||
from django.http import HttpRequest, HttpResponse, JsonResponse
|
||||
from django.urls import resolve
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scope
|
||||
from rest_framework import status
|
||||
|
||||
from pretix.api.models import ApiCall
|
||||
from pretix.base.models import Organizer
|
||||
|
||||
|
||||
class IdempotencyMiddleware:
|
||||
@@ -89,3 +92,21 @@ class IdempotencyMiddleware:
|
||||
for k, v in json.loads(call.response_headers).values():
|
||||
r[k] = v
|
||||
return r
|
||||
|
||||
|
||||
class ApiScopeMiddleware:
|
||||
def __init__(self, get_response):
|
||||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request: HttpRequest):
|
||||
if not request.path.startswith('/api/'):
|
||||
return self.get_response(request)
|
||||
|
||||
url = resolve(request.path_info)
|
||||
if 'organizer' in url.kwargs:
|
||||
request.organizer = Organizer.objects.filter(
|
||||
slug=url.kwargs['organizer'],
|
||||
).first()
|
||||
|
||||
with scope(organizer=getattr(request, 'organizer', None)):
|
||||
return self.get_response(request)
|
||||
|
||||
@@ -2,6 +2,7 @@ from datetime import timedelta
|
||||
|
||||
from django.dispatch import Signal, receiver
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.api.models import ApiCall, WebHookCall
|
||||
from pretix.base.signals import periodic_task
|
||||
@@ -17,10 +18,12 @@ instances.
|
||||
|
||||
|
||||
@receiver(periodic_task)
|
||||
@scopes_disabled()
|
||||
def cleanup_webhook_logs(sender, **kwargs):
|
||||
WebHookCall.objects.filter(datetime__lte=now() - timedelta(days=30)).delete()
|
||||
|
||||
|
||||
@receiver(periodic_task)
|
||||
@scopes_disabled()
|
||||
def cleanup_api_logs(sender, **kwargs):
|
||||
ApiCall.objects.filter(created__lte=now() - timedelta(hours=24)).delete()
|
||||
|
||||
@@ -6,6 +6,7 @@ from django.shortcuts import get_object_or_404
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils.timezone import now
|
||||
from django_filters.rest_framework import DjangoFilterBackend, FilterSet
|
||||
from django_scopes import scopes_disabled
|
||||
from rest_framework import viewsets
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.fields import DateTimeField
|
||||
@@ -24,11 +25,11 @@ from pretix.base.services.checkin import (
|
||||
)
|
||||
from pretix.helpers.database import FixedOrderBy
|
||||
|
||||
|
||||
class CheckinListFilter(FilterSet):
|
||||
class Meta:
|
||||
model = CheckinList
|
||||
fields = ['subevent']
|
||||
with scopes_disabled():
|
||||
class CheckinListFilter(FilterSet):
|
||||
class Meta:
|
||||
model = CheckinList
|
||||
fields = ['subevent']
|
||||
|
||||
|
||||
class CheckinListViewSet(viewsets.ModelViewSet):
|
||||
@@ -146,15 +147,16 @@ class CheckinListViewSet(viewsets.ModelViewSet):
|
||||
return Response(response)
|
||||
|
||||
|
||||
class CheckinOrderPositionFilter(OrderPositionFilter):
|
||||
with scopes_disabled():
|
||||
class CheckinOrderPositionFilter(OrderPositionFilter):
|
||||
|
||||
def has_checkin_qs(self, queryset, name, value):
|
||||
return queryset.filter(last_checked_in__isnull=not value)
|
||||
def has_checkin_qs(self, queryset, name, value):
|
||||
return queryset.filter(last_checked_in__isnull=not value)
|
||||
|
||||
|
||||
class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
serializer_class = CheckinListOrderPositionSerializer
|
||||
queryset = OrderPosition.objects.none()
|
||||
queryset = OrderPosition.all.none()
|
||||
filter_backends = (DjangoFilterBackend, RichOrderingFilter)
|
||||
ordering = ('attendee_name_cached', 'positionid')
|
||||
ordering_fields = (
|
||||
|
||||
@@ -3,6 +3,7 @@ from django.db import transaction
|
||||
from django.db.models import ProtectedError, Q
|
||||
from django.utils.timezone import now
|
||||
from django_filters.rest_framework import DjangoFilterBackend, FilterSet
|
||||
from django_scopes import scopes_disabled
|
||||
from rest_framework import filters, viewsets
|
||||
from rest_framework.exceptions import PermissionDenied
|
||||
|
||||
@@ -18,51 +19,51 @@ from pretix.base.models import (
|
||||
from pretix.base.models.event import SubEvent
|
||||
from pretix.helpers.dicts import merge_dicts
|
||||
|
||||
with scopes_disabled():
|
||||
class EventFilter(FilterSet):
|
||||
is_past = django_filters.rest_framework.BooleanFilter(method='is_past_qs')
|
||||
is_future = django_filters.rest_framework.BooleanFilter(method='is_future_qs')
|
||||
ends_after = django_filters.rest_framework.IsoDateTimeFilter(method='ends_after_qs')
|
||||
|
||||
class EventFilter(FilterSet):
|
||||
is_past = django_filters.rest_framework.BooleanFilter(method='is_past_qs')
|
||||
is_future = django_filters.rest_framework.BooleanFilter(method='is_future_qs')
|
||||
ends_after = django_filters.rest_framework.IsoDateTimeFilter(method='ends_after_qs')
|
||||
class Meta:
|
||||
model = Event
|
||||
fields = ['is_public', 'live', 'has_subevents']
|
||||
|
||||
class Meta:
|
||||
model = Event
|
||||
fields = ['is_public', 'live', 'has_subevents']
|
||||
|
||||
def ends_after_qs(self, queryset, name, value):
|
||||
expr = (
|
||||
Q(has_subevents=False) &
|
||||
Q(
|
||||
Q(Q(date_to__isnull=True) & Q(date_from__gte=value))
|
||||
| Q(Q(date_to__isnull=False) & Q(date_to__gte=value))
|
||||
def ends_after_qs(self, queryset, name, value):
|
||||
expr = (
|
||||
Q(has_subevents=False) &
|
||||
Q(
|
||||
Q(Q(date_to__isnull=True) & Q(date_from__gte=value))
|
||||
| Q(Q(date_to__isnull=False) & Q(date_to__gte=value))
|
||||
)
|
||||
)
|
||||
)
|
||||
return queryset.filter(expr)
|
||||
|
||||
def is_past_qs(self, queryset, name, value):
|
||||
expr = (
|
||||
Q(has_subevents=False) &
|
||||
Q(
|
||||
Q(Q(date_to__isnull=True) & Q(date_from__lt=now()))
|
||||
| Q(Q(date_to__isnull=False) & Q(date_to__lt=now()))
|
||||
)
|
||||
)
|
||||
if value:
|
||||
return queryset.filter(expr)
|
||||
else:
|
||||
return queryset.exclude(expr)
|
||||
|
||||
def is_future_qs(self, queryset, name, value):
|
||||
expr = (
|
||||
Q(has_subevents=False) &
|
||||
Q(
|
||||
Q(Q(date_to__isnull=True) & Q(date_from__gte=now()))
|
||||
| Q(Q(date_to__isnull=False) & Q(date_to__gte=now()))
|
||||
def is_past_qs(self, queryset, name, value):
|
||||
expr = (
|
||||
Q(has_subevents=False) &
|
||||
Q(
|
||||
Q(Q(date_to__isnull=True) & Q(date_from__lt=now()))
|
||||
| Q(Q(date_to__isnull=False) & Q(date_to__lt=now()))
|
||||
)
|
||||
)
|
||||
)
|
||||
if value:
|
||||
return queryset.filter(expr)
|
||||
else:
|
||||
return queryset.exclude(expr)
|
||||
if value:
|
||||
return queryset.filter(expr)
|
||||
else:
|
||||
return queryset.exclude(expr)
|
||||
|
||||
def is_future_qs(self, queryset, name, value):
|
||||
expr = (
|
||||
Q(has_subevents=False) &
|
||||
Q(
|
||||
Q(Q(date_to__isnull=True) & Q(date_from__gte=now()))
|
||||
| Q(Q(date_to__isnull=False) & Q(date_to__gte=now()))
|
||||
)
|
||||
)
|
||||
if value:
|
||||
return queryset.filter(expr)
|
||||
else:
|
||||
return queryset.exclude(expr)
|
||||
|
||||
|
||||
class EventViewSet(viewsets.ModelViewSet):
|
||||
@@ -182,41 +183,42 @@ class CloneEventViewSet(viewsets.ModelViewSet):
|
||||
)
|
||||
|
||||
|
||||
class SubEventFilter(FilterSet):
|
||||
is_past = django_filters.rest_framework.BooleanFilter(method='is_past_qs')
|
||||
is_future = django_filters.rest_framework.BooleanFilter(method='is_future_qs')
|
||||
ends_after = django_filters.rest_framework.IsoDateTimeFilter(method='ends_after_qs')
|
||||
with scopes_disabled():
|
||||
class SubEventFilter(FilterSet):
|
||||
is_past = django_filters.rest_framework.BooleanFilter(method='is_past_qs')
|
||||
is_future = django_filters.rest_framework.BooleanFilter(method='is_future_qs')
|
||||
ends_after = django_filters.rest_framework.IsoDateTimeFilter(method='ends_after_qs')
|
||||
|
||||
class Meta:
|
||||
model = SubEvent
|
||||
fields = ['active', 'event__live']
|
||||
class Meta:
|
||||
model = SubEvent
|
||||
fields = ['active', 'event__live']
|
||||
|
||||
def ends_after_qs(self, queryset, name, value):
|
||||
expr = Q(
|
||||
Q(Q(date_to__isnull=True) & Q(date_from__gte=value))
|
||||
| Q(Q(date_to__isnull=False) & Q(date_to__gte=value))
|
||||
)
|
||||
return queryset.filter(expr)
|
||||
|
||||
def is_past_qs(self, queryset, name, value):
|
||||
expr = Q(
|
||||
Q(Q(date_to__isnull=True) & Q(date_from__lt=now()))
|
||||
| Q(Q(date_to__isnull=False) & Q(date_to__lt=now()))
|
||||
)
|
||||
if value:
|
||||
def ends_after_qs(self, queryset, name, value):
|
||||
expr = Q(
|
||||
Q(Q(date_to__isnull=True) & Q(date_from__gte=value))
|
||||
| Q(Q(date_to__isnull=False) & Q(date_to__gte=value))
|
||||
)
|
||||
return queryset.filter(expr)
|
||||
else:
|
||||
return queryset.exclude(expr)
|
||||
|
||||
def is_future_qs(self, queryset, name, value):
|
||||
expr = Q(
|
||||
Q(Q(date_to__isnull=True) & Q(date_from__gte=now()))
|
||||
| Q(Q(date_to__isnull=False) & Q(date_to__gte=now()))
|
||||
)
|
||||
if value:
|
||||
return queryset.filter(expr)
|
||||
else:
|
||||
return queryset.exclude(expr)
|
||||
def is_past_qs(self, queryset, name, value):
|
||||
expr = Q(
|
||||
Q(Q(date_to__isnull=True) & Q(date_from__lt=now()))
|
||||
| Q(Q(date_to__isnull=False) & Q(date_to__lt=now()))
|
||||
)
|
||||
if value:
|
||||
return queryset.filter(expr)
|
||||
else:
|
||||
return queryset.exclude(expr)
|
||||
|
||||
def is_future_qs(self, queryset, name, value):
|
||||
expr = Q(
|
||||
Q(Q(date_to__isnull=True) & Q(date_from__gte=now()))
|
||||
| Q(Q(date_to__isnull=False) & Q(date_to__gte=now()))
|
||||
)
|
||||
if value:
|
||||
return queryset.filter(expr)
|
||||
else:
|
||||
return queryset.exclude(expr)
|
||||
|
||||
|
||||
class SubEventViewSet(ConditionalListView, viewsets.ModelViewSet):
|
||||
@@ -244,8 +246,14 @@ class SubEventViewSet(ConditionalListView, viewsets.ModelViewSet):
|
||||
)
|
||||
|
||||
def perform_update(self, serializer):
|
||||
original_data = self.get_serializer(instance=serializer.instance).data
|
||||
super().perform_update(serializer)
|
||||
|
||||
if serializer.data == original_data:
|
||||
# Performance optimization: If nothing was changed, we do not need to save or log anything.
|
||||
# This costs us a few cycles on save, but avoids thousands of lines in our log.
|
||||
return
|
||||
|
||||
serializer.instance.log_action(
|
||||
'pretix.subevent.changed',
|
||||
user=self.request.user,
|
||||
|
||||
@@ -3,6 +3,7 @@ from django.db.models import Q
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.utils.functional import cached_property
|
||||
from django_filters.rest_framework import DjangoFilterBackend, FilterSet
|
||||
from django_scopes import scopes_disabled
|
||||
from rest_framework import viewsets
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.exceptions import PermissionDenied
|
||||
@@ -21,19 +22,19 @@ from pretix.base.models import (
|
||||
)
|
||||
from pretix.helpers.dicts import merge_dicts
|
||||
|
||||
with scopes_disabled():
|
||||
class ItemFilter(FilterSet):
|
||||
tax_rate = django_filters.CharFilter(method='tax_rate_qs')
|
||||
|
||||
class ItemFilter(FilterSet):
|
||||
tax_rate = django_filters.CharFilter(method='tax_rate_qs')
|
||||
def tax_rate_qs(self, queryset, name, value):
|
||||
if value in ("0", "None", "0.00"):
|
||||
return queryset.filter(Q(tax_rule__isnull=True) | Q(tax_rule__rate=0))
|
||||
else:
|
||||
return queryset.filter(tax_rule__rate=value)
|
||||
|
||||
def tax_rate_qs(self, queryset, name, value):
|
||||
if value in ("0", "None", "0.00"):
|
||||
return queryset.filter(Q(tax_rule__isnull=True) | Q(tax_rule__rate=0))
|
||||
else:
|
||||
return queryset.filter(tax_rule__rate=value)
|
||||
|
||||
class Meta:
|
||||
model = Item
|
||||
fields = ['active', 'category', 'admission', 'tax_rate', 'free_price']
|
||||
class Meta:
|
||||
model = Item
|
||||
fields = ['active', 'category', 'admission', 'tax_rate', 'free_price']
|
||||
|
||||
|
||||
class ItemViewSet(ConditionalListView, viewsets.ModelViewSet):
|
||||
@@ -65,7 +66,14 @@ class ItemViewSet(ConditionalListView, viewsets.ModelViewSet):
|
||||
return ctx
|
||||
|
||||
def perform_update(self, serializer):
|
||||
original_data = self.get_serializer(instance=serializer.instance).data
|
||||
|
||||
serializer.save(event=self.request.event)
|
||||
|
||||
if serializer.data == original_data:
|
||||
# Performance optimization: If nothing was changed, we do not need to save or log anything.
|
||||
# This costs us a few cycles on save, but avoids thousands of lines in our log.
|
||||
return
|
||||
serializer.instance.log_action(
|
||||
'pretix.event.item.changed',
|
||||
user=self.request.user,
|
||||
@@ -312,10 +320,11 @@ class ItemCategoryViewSet(ConditionalListView, viewsets.ModelViewSet):
|
||||
super().perform_destroy(instance)
|
||||
|
||||
|
||||
class QuestionFilter(FilterSet):
|
||||
class Meta:
|
||||
model = Question
|
||||
fields = ['ask_during_checkin', 'required', 'identifier']
|
||||
with scopes_disabled():
|
||||
class QuestionFilter(FilterSet):
|
||||
class Meta:
|
||||
model = Question
|
||||
fields = ['ask_during_checkin', 'required', 'identifier']
|
||||
|
||||
|
||||
class QuestionViewSet(ConditionalListView, viewsets.ModelViewSet):
|
||||
@@ -411,10 +420,11 @@ class QuestionOptionViewSet(viewsets.ModelViewSet):
|
||||
super().perform_destroy(instance)
|
||||
|
||||
|
||||
class QuotaFilter(FilterSet):
|
||||
class Meta:
|
||||
model = Quota
|
||||
fields = ['subevent']
|
||||
with scopes_disabled():
|
||||
class QuotaFilter(FilterSet):
|
||||
class Meta:
|
||||
model = Quota
|
||||
fields = ['subevent']
|
||||
|
||||
|
||||
class QuotaViewSet(ConditionalListView, viewsets.ModelViewSet):
|
||||
@@ -452,9 +462,17 @@ class QuotaViewSet(ConditionalListView, viewsets.ModelViewSet):
|
||||
return ctx
|
||||
|
||||
def perform_update(self, serializer):
|
||||
original_data = self.get_serializer(instance=serializer.instance).data
|
||||
|
||||
current_subevent = serializer.instance.subevent
|
||||
serializer.save(event=self.request.event)
|
||||
request_subevent = serializer.instance.subevent
|
||||
|
||||
if serializer.data == original_data:
|
||||
# Performance optimization: If nothing was changed, we do not need to save or log anything.
|
||||
# This costs us a few cycles on save, but avoids thousands of lines in our log.
|
||||
return
|
||||
|
||||
serializer.instance.log_action(
|
||||
'pretix.event.quota.changed',
|
||||
user=self.request.user,
|
||||
|
||||
@@ -11,6 +11,7 @@ from django.shortcuts import get_object_or_404
|
||||
from django.utils.timezone import make_aware, now
|
||||
from django.utils.translation import ugettext as _
|
||||
from django_filters.rest_framework import DjangoFilterBackend, FilterSet
|
||||
from django_scopes import scopes_disabled
|
||||
from rest_framework import mixins, serializers, status, viewsets
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.exceptions import (
|
||||
@@ -50,17 +51,17 @@ from pretix.base.signals import (
|
||||
)
|
||||
from pretix.base.templatetags.money import money_filter
|
||||
|
||||
with scopes_disabled():
|
||||
class OrderFilter(FilterSet):
|
||||
email = django_filters.CharFilter(field_name='email', lookup_expr='iexact')
|
||||
code = django_filters.CharFilter(field_name='code', lookup_expr='iexact')
|
||||
status = django_filters.CharFilter(field_name='status', lookup_expr='iexact')
|
||||
modified_since = django_filters.IsoDateTimeFilter(field_name='last_modified', lookup_expr='gte')
|
||||
created_since = django_filters.IsoDateTimeFilter(field_name='datetime', lookup_expr='gte')
|
||||
|
||||
class OrderFilter(FilterSet):
|
||||
email = django_filters.CharFilter(field_name='email', lookup_expr='iexact')
|
||||
code = django_filters.CharFilter(field_name='code', lookup_expr='iexact')
|
||||
status = django_filters.CharFilter(field_name='status', lookup_expr='iexact')
|
||||
modified_since = django_filters.IsoDateTimeFilter(field_name='last_modified', lookup_expr='gte')
|
||||
created_since = django_filters.IsoDateTimeFilter(field_name='datetime', lookup_expr='gte')
|
||||
|
||||
class Meta:
|
||||
model = Order
|
||||
fields = ['code', 'status', 'email', 'locale', 'testmode', 'require_approval']
|
||||
class Meta:
|
||||
model = Order
|
||||
fields = ['code', 'status', 'email', 'locale', 'testmode', 'require_approval']
|
||||
|
||||
|
||||
class OrderViewSet(viewsets.ModelViewSet):
|
||||
@@ -531,48 +532,49 @@ class OrderViewSet(viewsets.ModelViewSet):
|
||||
self.get_object().gracefully_delete(user=self.request.user if self.request.user.is_authenticated else None, auth=self.request.auth)
|
||||
|
||||
|
||||
class OrderPositionFilter(FilterSet):
|
||||
order = django_filters.CharFilter(field_name='order', lookup_expr='code__iexact')
|
||||
has_checkin = django_filters.rest_framework.BooleanFilter(method='has_checkin_qs')
|
||||
attendee_name = django_filters.CharFilter(method='attendee_name_qs')
|
||||
search = django_filters.CharFilter(method='search_qs')
|
||||
with scopes_disabled():
|
||||
class OrderPositionFilter(FilterSet):
|
||||
order = django_filters.CharFilter(field_name='order', lookup_expr='code__iexact')
|
||||
has_checkin = django_filters.rest_framework.BooleanFilter(method='has_checkin_qs')
|
||||
attendee_name = django_filters.CharFilter(method='attendee_name_qs')
|
||||
search = django_filters.CharFilter(method='search_qs')
|
||||
|
||||
def search_qs(self, queryset, name, value):
|
||||
return queryset.filter(
|
||||
Q(secret__istartswith=value)
|
||||
| Q(attendee_name_cached__icontains=value)
|
||||
| Q(addon_to__attendee_name_cached__icontains=value)
|
||||
| Q(attendee_email__icontains=value)
|
||||
| Q(addon_to__attendee_email__icontains=value)
|
||||
| Q(order__code__istartswith=value)
|
||||
| Q(order__invoice_address__name_cached__icontains=value)
|
||||
| Q(order__email__icontains=value)
|
||||
)
|
||||
def search_qs(self, queryset, name, value):
|
||||
return queryset.filter(
|
||||
Q(secret__istartswith=value)
|
||||
| Q(attendee_name_cached__icontains=value)
|
||||
| Q(addon_to__attendee_name_cached__icontains=value)
|
||||
| Q(attendee_email__icontains=value)
|
||||
| Q(addon_to__attendee_email__icontains=value)
|
||||
| Q(order__code__istartswith=value)
|
||||
| Q(order__invoice_address__name_cached__icontains=value)
|
||||
| Q(order__email__icontains=value)
|
||||
)
|
||||
|
||||
def has_checkin_qs(self, queryset, name, value):
|
||||
return queryset.filter(checkins__isnull=not value)
|
||||
def has_checkin_qs(self, queryset, name, value):
|
||||
return queryset.filter(checkins__isnull=not value)
|
||||
|
||||
def attendee_name_qs(self, queryset, name, value):
|
||||
return queryset.filter(Q(attendee_name_cached__iexact=value) | Q(addon_to__attendee_name_cached__iexact=value))
|
||||
def attendee_name_qs(self, queryset, name, value):
|
||||
return queryset.filter(Q(attendee_name_cached__iexact=value) | Q(addon_to__attendee_name_cached__iexact=value))
|
||||
|
||||
class Meta:
|
||||
model = OrderPosition
|
||||
fields = {
|
||||
'item': ['exact', 'in'],
|
||||
'variation': ['exact', 'in'],
|
||||
'secret': ['exact'],
|
||||
'order__status': ['exact', 'in'],
|
||||
'addon_to': ['exact', 'in'],
|
||||
'subevent': ['exact', 'in'],
|
||||
'pseudonymization_id': ['exact'],
|
||||
'voucher__code': ['exact'],
|
||||
'voucher': ['exact'],
|
||||
}
|
||||
class Meta:
|
||||
model = OrderPosition
|
||||
fields = {
|
||||
'item': ['exact', 'in'],
|
||||
'variation': ['exact', 'in'],
|
||||
'secret': ['exact'],
|
||||
'order__status': ['exact', 'in'],
|
||||
'addon_to': ['exact', 'in'],
|
||||
'subevent': ['exact', 'in'],
|
||||
'pseudonymization_id': ['exact'],
|
||||
'voucher__code': ['exact'],
|
||||
'voucher': ['exact'],
|
||||
}
|
||||
|
||||
|
||||
class OrderPositionViewSet(mixins.DestroyModelMixin, viewsets.ReadOnlyModelViewSet):
|
||||
serializer_class = OrderPositionSerializer
|
||||
queryset = OrderPosition.objects.none()
|
||||
queryset = OrderPosition.all.none()
|
||||
filter_backends = (DjangoFilterBackend, OrderingFilter)
|
||||
ordering = ('order__datetime', 'positionid')
|
||||
ordering_fields = ('order__code', 'order__datetime', 'positionid', 'attendee_name', 'order__status',)
|
||||
@@ -960,22 +962,23 @@ class RefundViewSet(CreateModelMixin, viewsets.ReadOnlyModelViewSet):
|
||||
serializer.save()
|
||||
|
||||
|
||||
class InvoiceFilter(FilterSet):
|
||||
refers = django_filters.CharFilter(method='refers_qs')
|
||||
number = django_filters.CharFilter(method='nr_qs')
|
||||
order = django_filters.CharFilter(field_name='order', lookup_expr='code__iexact')
|
||||
with scopes_disabled():
|
||||
class InvoiceFilter(FilterSet):
|
||||
refers = django_filters.CharFilter(method='refers_qs')
|
||||
number = django_filters.CharFilter(method='nr_qs')
|
||||
order = django_filters.CharFilter(field_name='order', lookup_expr='code__iexact')
|
||||
|
||||
def refers_qs(self, queryset, name, value):
|
||||
return queryset.annotate(
|
||||
refers_nr=Concat('refers__prefix', 'refers__invoice_no')
|
||||
).filter(refers_nr__iexact=value)
|
||||
def refers_qs(self, queryset, name, value):
|
||||
return queryset.annotate(
|
||||
refers_nr=Concat('refers__prefix', 'refers__invoice_no')
|
||||
).filter(refers_nr__iexact=value)
|
||||
|
||||
def nr_qs(self, queryset, name, value):
|
||||
return queryset.filter(nr__iexact=value)
|
||||
def nr_qs(self, queryset, name, value):
|
||||
return queryset.filter(nr__iexact=value)
|
||||
|
||||
class Meta:
|
||||
model = Invoice
|
||||
fields = ['order', 'number', 'is_cancellation', 'refers', 'locale']
|
||||
class Meta:
|
||||
model = Invoice
|
||||
fields = ['order', 'number', 'is_cancellation', 'refers', 'locale']
|
||||
|
||||
|
||||
class RetryException(APIException):
|
||||
|
||||
@@ -6,6 +6,7 @@ from django.utils.timezone import now
|
||||
from django_filters.rest_framework import (
|
||||
BooleanFilter, DjangoFilterBackend, FilterSet,
|
||||
)
|
||||
from django_scopes import scopes_disabled
|
||||
from rest_framework import status, viewsets
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.exceptions import PermissionDenied
|
||||
@@ -15,22 +16,22 @@ from rest_framework.response import Response
|
||||
from pretix.api.serializers.voucher import VoucherSerializer
|
||||
from pretix.base.models import Voucher
|
||||
|
||||
with scopes_disabled():
|
||||
class VoucherFilter(FilterSet):
|
||||
active = BooleanFilter(method='filter_active')
|
||||
|
||||
class VoucherFilter(FilterSet):
|
||||
active = BooleanFilter(method='filter_active')
|
||||
class Meta:
|
||||
model = Voucher
|
||||
fields = ['code', 'max_usages', 'redeemed', 'block_quota', 'allow_ignore_quota',
|
||||
'price_mode', 'value', 'item', 'variation', 'quota', 'tag', 'subevent']
|
||||
|
||||
class Meta:
|
||||
model = Voucher
|
||||
fields = ['code', 'max_usages', 'redeemed', 'block_quota', 'allow_ignore_quota',
|
||||
'price_mode', 'value', 'item', 'variation', 'quota', 'tag', 'subevent']
|
||||
|
||||
def filter_active(self, queryset, name, value):
|
||||
if value:
|
||||
return queryset.filter(Q(redeemed__lt=F('max_usages')) &
|
||||
(Q(valid_until__isnull=True) | Q(valid_until__gt=now())))
|
||||
else:
|
||||
return queryset.filter(Q(redeemed__gte=F('max_usages')) |
|
||||
(Q(valid_until__isnull=False) & Q(valid_until__lte=now())))
|
||||
def filter_active(self, queryset, name, value):
|
||||
if value:
|
||||
return queryset.filter(Q(redeemed__lt=F('max_usages')) &
|
||||
(Q(valid_until__isnull=True) | Q(valid_until__gt=now())))
|
||||
else:
|
||||
return queryset.filter(Q(redeemed__gte=F('max_usages')) |
|
||||
(Q(valid_until__isnull=False) & Q(valid_until__lte=now())))
|
||||
|
||||
|
||||
class VoucherViewSet(viewsets.ModelViewSet):
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import django_filters
|
||||
from django_filters.rest_framework import DjangoFilterBackend, FilterSet
|
||||
from django_scopes import scopes_disabled
|
||||
from rest_framework import viewsets
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.exceptions import PermissionDenied, ValidationError
|
||||
@@ -10,16 +11,16 @@ from pretix.api.serializers.waitinglist import WaitingListSerializer
|
||||
from pretix.base.models import WaitingListEntry
|
||||
from pretix.base.models.waitinglist import WaitingListException
|
||||
|
||||
with scopes_disabled():
|
||||
class WaitingListFilter(FilterSet):
|
||||
has_voucher = django_filters.rest_framework.BooleanFilter(method='has_voucher_qs')
|
||||
|
||||
class WaitingListFilter(FilterSet):
|
||||
has_voucher = django_filters.rest_framework.BooleanFilter(method='has_voucher_qs')
|
||||
def has_voucher_qs(self, queryset, name, value):
|
||||
return queryset.filter(voucher__isnull=not value)
|
||||
|
||||
def has_voucher_qs(self, queryset, name, value):
|
||||
return queryset.filter(voucher__isnull=not value)
|
||||
|
||||
class Meta:
|
||||
model = WaitingListEntry
|
||||
fields = ['item', 'variation', 'email', 'locale', 'has_voucher', 'subevent']
|
||||
class Meta:
|
||||
model = WaitingListEntry
|
||||
fields = ['item', 'variation', 'email', 'locale', 'has_voucher', 'subevent']
|
||||
|
||||
|
||||
class WaitingListViewSet(viewsets.ModelViewSet):
|
||||
|
||||
@@ -8,6 +8,7 @@ from celery.exceptions import MaxRetriesExceededError
|
||||
from django.db.models import Exists, OuterRef, Q
|
||||
from django.dispatch import receiver
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django_scopes import scope, scopes_disabled
|
||||
from requests import RequestException
|
||||
|
||||
from pretix.api.models import WebHook, WebHookCall, WebHookEventListener
|
||||
@@ -203,51 +204,52 @@ def notify_webhooks(logentry_id: int):
|
||||
@app.task(base=ProfiledTask, bind=True, max_retries=9)
|
||||
def send_webhook(self, logentry_id: int, action_type: str, webhook_id: int):
|
||||
# 9 retries with 2**(2*x) timing is roughly 72 hours
|
||||
logentry = LogEntry.all.get(id=logentry_id)
|
||||
webhook = WebHook.objects.get(id=webhook_id)
|
||||
with scopes_disabled():
|
||||
webhook = WebHook.objects.get(id=webhook_id)
|
||||
with scope(organizer=webhook.organizer):
|
||||
logentry = LogEntry.all.get(id=logentry_id)
|
||||
types = get_all_webhook_events()
|
||||
event_type = types.get(action_type)
|
||||
if not event_type or not webhook.enabled:
|
||||
return # Ignore, e.g. plugin not installed
|
||||
|
||||
types = get_all_webhook_events()
|
||||
event_type = types.get(action_type)
|
||||
if not event_type or not webhook.enabled:
|
||||
return # Ignore, e.g. plugin not installed
|
||||
payload = event_type.build_payload(logentry)
|
||||
t = time.time()
|
||||
|
||||
payload = event_type.build_payload(logentry)
|
||||
t = time.time()
|
||||
|
||||
try:
|
||||
try:
|
||||
resp = requests.post(
|
||||
webhook.target_url,
|
||||
json=payload,
|
||||
allow_redirects=False
|
||||
)
|
||||
WebHookCall.objects.create(
|
||||
webhook=webhook,
|
||||
action_type=logentry.action_type,
|
||||
target_url=webhook.target_url,
|
||||
is_retry=self.request.retries > 0,
|
||||
execution_time=time.time() - t,
|
||||
return_code=resp.status_code,
|
||||
payload=json.dumps(payload),
|
||||
response_body=resp.text[:1024 * 1024],
|
||||
success=200 <= resp.status_code <= 299
|
||||
)
|
||||
if resp.status_code == 410:
|
||||
webhook.enabled = False
|
||||
webhook.save()
|
||||
elif resp.status_code > 299:
|
||||
try:
|
||||
resp = requests.post(
|
||||
webhook.target_url,
|
||||
json=payload,
|
||||
allow_redirects=False
|
||||
)
|
||||
WebHookCall.objects.create(
|
||||
webhook=webhook,
|
||||
action_type=logentry.action_type,
|
||||
target_url=webhook.target_url,
|
||||
is_retry=self.request.retries > 0,
|
||||
execution_time=time.time() - t,
|
||||
return_code=resp.status_code,
|
||||
payload=json.dumps(payload),
|
||||
response_body=resp.text[:1024 * 1024],
|
||||
success=200 <= resp.status_code <= 299
|
||||
)
|
||||
if resp.status_code == 410:
|
||||
webhook.enabled = False
|
||||
webhook.save()
|
||||
elif resp.status_code > 299:
|
||||
raise self.retry(countdown=2 ** (self.request.retries * 2))
|
||||
except RequestException as e:
|
||||
WebHookCall.objects.create(
|
||||
webhook=webhook,
|
||||
action_type=logentry.action_type,
|
||||
target_url=webhook.target_url,
|
||||
is_retry=self.request.retries > 0,
|
||||
execution_time=time.time() - t,
|
||||
return_code=0,
|
||||
payload=json.dumps(payload),
|
||||
response_body=str(e)[:1024 * 1024]
|
||||
)
|
||||
raise self.retry(countdown=2 ** (self.request.retries * 2))
|
||||
except RequestException as e:
|
||||
WebHookCall.objects.create(
|
||||
webhook=webhook,
|
||||
action_type=logentry.action_type,
|
||||
target_url=webhook.target_url,
|
||||
is_retry=self.request.retries > 0,
|
||||
execution_time=time.time() - t,
|
||||
return_code=0,
|
||||
payload=json.dumps(payload),
|
||||
response_body=str(e)[:1024 * 1024]
|
||||
)
|
||||
raise self.retry(countdown=2 ** (self.request.retries * 2))
|
||||
except MaxRetriesExceededError:
|
||||
pass
|
||||
except MaxRetriesExceededError:
|
||||
pass
|
||||
|
||||
@@ -12,6 +12,7 @@ from django.utils.crypto import get_random_string
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django_otp.models import Device
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.i18n import language
|
||||
from pretix.helpers.urls import build_absolute_uri
|
||||
@@ -283,6 +284,7 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin):
|
||||
return True
|
||||
return False
|
||||
|
||||
@scopes_disabled()
|
||||
def get_events_with_any_permission(self, request=None):
|
||||
"""
|
||||
Returns a queryset of events the user has any permissions to.
|
||||
@@ -300,6 +302,7 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin):
|
||||
| Q(id__in=self.teams.values_list('limit_events__id', flat=True))
|
||||
)
|
||||
|
||||
@scopes_disabled()
|
||||
def get_events_with_permission(self, permission, request=None):
|
||||
"""
|
||||
Returns a queryset of events the user has a specific permissions to.
|
||||
|
||||
@@ -3,6 +3,7 @@ from django.db.models import Case, Count, F, OuterRef, Q, Subquery, When
|
||||
from django.db.models.functions import Coalesce
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
||||
from django_scopes import ScopedManager
|
||||
|
||||
from pretix.base.models import LoggedModel
|
||||
|
||||
@@ -20,6 +21,8 @@ class CheckinList(LoggedModel):
|
||||
'order have not been paid. This only works with pretixdesk '
|
||||
'0.3.0 or newer or pretixdroid 1.9 or newer.'))
|
||||
|
||||
objects = ScopedManager(organizer='event__organizer')
|
||||
|
||||
class Meta:
|
||||
ordering = ('subevent__date_from', 'name')
|
||||
|
||||
@@ -167,6 +170,8 @@ class Checkin(models.Model):
|
||||
'pretixbase.CheckinList', related_name='checkins', on_delete=models.PROTECT,
|
||||
)
|
||||
|
||||
objects = ScopedManager(organizer='position__order__event__organizer')
|
||||
|
||||
class Meta:
|
||||
unique_together = (('list', 'position'),)
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ from django.db import models
|
||||
from django.db.models import Max
|
||||
from django.utils.crypto import get_random_string
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django_scopes import ScopedManager
|
||||
|
||||
from pretix.base.models import LoggedModel
|
||||
|
||||
@@ -71,6 +72,8 @@ class Device(LoggedModel):
|
||||
null=True, blank=True
|
||||
)
|
||||
|
||||
objects = ScopedManager(organizer='organizer')
|
||||
|
||||
class Meta:
|
||||
unique_together = (('organizer', 'device_id'),)
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ from django.utils.crypto import get_random_string
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils.timezone import make_aware, now
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django_scopes import ScopedManager
|
||||
from i18nfield.fields import I18nCharField, I18nTextField
|
||||
|
||||
from pretix.base.models.base import LoggedModel
|
||||
@@ -336,6 +337,8 @@ class Event(EventMixin, LoggedModel):
|
||||
default=False
|
||||
)
|
||||
|
||||
objects = ScopedManager(organizer='organizer')
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Event")
|
||||
verbose_name_plural = _("Events")
|
||||
@@ -875,6 +878,8 @@ class SubEvent(EventMixin, LoggedModel):
|
||||
items = models.ManyToManyField('Item', through='SubEventItem')
|
||||
variations = models.ManyToManyField('ItemVariation', through='SubEventItemVariation')
|
||||
|
||||
objects = ScopedManager(organizer='event__organizer')
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Date in event series")
|
||||
verbose_name_plural = _("Dates in event series")
|
||||
|
||||
@@ -9,6 +9,7 @@ from django.utils.crypto import get_random_string
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils.translation import pgettext
|
||||
from django_countries.fields import CountryField
|
||||
from django_scopes import ScopedManager
|
||||
|
||||
|
||||
def invoice_filename(instance, filename: str) -> str:
|
||||
@@ -107,6 +108,8 @@ class Invoice(models.Model):
|
||||
file = models.FileField(null=True, blank=True, upload_to=invoice_filename, max_length=255)
|
||||
internal_reference = models.TextField(blank=True)
|
||||
|
||||
objects = ScopedManager(organizer='event__organizer')
|
||||
|
||||
@staticmethod
|
||||
def _to_numeric_invoice_number(number):
|
||||
return '{:05d}'.format(int(number))
|
||||
|
||||
@@ -17,6 +17,7 @@ from django.utils.functional import cached_property
|
||||
from django.utils.timezone import is_naive, make_aware, now
|
||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
||||
from django_countries.fields import Country
|
||||
from django_scopes import ScopedManager
|
||||
from i18nfield.fields import I18nCharField, I18nTextField
|
||||
|
||||
from pretix.base.models import fields
|
||||
@@ -155,28 +156,41 @@ class SubEventItemVariation(models.Model):
|
||||
self.subevent.event.cache.clear()
|
||||
|
||||
|
||||
def filter_available(qs, channel='web', voucher=None, allow_addons=False):
|
||||
q = (
|
||||
# IMPORTANT: If this is updated, also update the ItemVariation query
|
||||
# in models/event.py: EventMixin.annotated()
|
||||
Q(active=True)
|
||||
& Q(Q(available_from__isnull=True) | Q(available_from__lte=now()))
|
||||
& Q(Q(available_until__isnull=True) | Q(available_until__gte=now()))
|
||||
& Q(sales_channels__contains=channel) & Q(require_bundling=False)
|
||||
)
|
||||
if not allow_addons:
|
||||
q &= Q(Q(category__isnull=True) | Q(category__is_addon=False))
|
||||
qs = qs.filter(q)
|
||||
|
||||
vouchq = Q(hide_without_voucher=False)
|
||||
if voucher:
|
||||
if voucher.item_id:
|
||||
vouchq |= Q(pk=voucher.item_id)
|
||||
qs = qs.filter(pk=voucher.item_id)
|
||||
elif voucher.quota_id:
|
||||
qs = qs.filter(quotas__in=[voucher.quota_id])
|
||||
return qs.filter(vouchq)
|
||||
|
||||
|
||||
class ItemQuerySet(models.QuerySet):
|
||||
def filter_available(self, channel='web', voucher=None, allow_addons=False):
|
||||
q = (
|
||||
# IMPORTANT: If this is updated, also update the ItemVariation query
|
||||
# in models/event.py: EventMixin.annotated()
|
||||
Q(active=True)
|
||||
& Q(Q(available_from__isnull=True) | Q(available_from__lte=now()))
|
||||
& Q(Q(available_until__isnull=True) | Q(available_until__gte=now()))
|
||||
& Q(sales_channels__contains=channel) & Q(require_bundling=False)
|
||||
)
|
||||
if not allow_addons:
|
||||
q &= Q(Q(category__isnull=True) | Q(category__is_addon=False))
|
||||
qs = self.filter(q)
|
||||
return filter_available(self, channel, voucher, allow_addons)
|
||||
|
||||
vouchq = Q(hide_without_voucher=False)
|
||||
if voucher:
|
||||
if voucher.item_id:
|
||||
vouchq |= Q(pk=voucher.item_id)
|
||||
qs = qs.filter(pk=voucher.item_id)
|
||||
elif voucher.quota_id:
|
||||
qs = qs.filter(quotas__in=[voucher.quota_id])
|
||||
return qs.filter(vouchq)
|
||||
|
||||
class ItemQuerySetManager(ScopedManager(organizer='event__organizer').__class__):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self._queryset_class = ItemQuerySet
|
||||
|
||||
def filter_available(self, channel='web', voucher=None, allow_addons=False):
|
||||
return filter_available(self.get_queryset(), channel, voucher, allow_addons)
|
||||
|
||||
|
||||
class Item(LoggedModel):
|
||||
@@ -226,7 +240,7 @@ class Item(LoggedModel):
|
||||
:type sales_channels: bool
|
||||
"""
|
||||
|
||||
objects = ItemQuerySet.as_manager()
|
||||
objects = ItemQuerySetManager()
|
||||
|
||||
event = models.ForeignKey(
|
||||
Event,
|
||||
@@ -591,6 +605,8 @@ class ItemVariation(models.Model):
|
||||
'discounted one. This is just a cosmetic setting and will not actually impact pricing.')
|
||||
)
|
||||
|
||||
objects = ScopedManager(organizer='item__event__organizer')
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Product variation")
|
||||
verbose_name_plural = _("Product variations")
|
||||
@@ -985,6 +1001,8 @@ class Question(LoggedModel):
|
||||
)
|
||||
dependency_value = models.TextField(null=True, blank=True)
|
||||
|
||||
objects = ScopedManager(organizer='event__organizer')
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Question")
|
||||
verbose_name_plural = _("Questions")
|
||||
@@ -1234,6 +1252,8 @@ class Quota(LoggedModel):
|
||||
cached_availability_paid_orders = models.PositiveIntegerField(null=True, blank=True)
|
||||
cached_availability_time = models.DateTimeField(null=True, blank=True)
|
||||
|
||||
objects = ScopedManager(organizer='event__organizer')
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Quota")
|
||||
verbose_name_plural = _("Quotas")
|
||||
|
||||
@@ -15,7 +15,7 @@ from django.db import models, transaction
|
||||
from django.db.models import (
|
||||
Case, Exists, F, Max, OuterRef, Q, Subquery, Sum, Value, When,
|
||||
)
|
||||
from django.db.models.functions import Coalesce
|
||||
from django.db.models.functions import Coalesce, Greatest
|
||||
from django.db.models.signals import post_delete
|
||||
from django.dispatch import receiver
|
||||
from django.urls import reverse
|
||||
@@ -26,6 +26,7 @@ from django.utils.functional import cached_property
|
||||
from django.utils.timezone import make_aware, now
|
||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
||||
from django_countries.fields import Country, CountryField
|
||||
from django_scopes import ScopedManager, scopes_disabled
|
||||
from i18nfield.strings import LazyI18nString
|
||||
from jsonfallback.fields import FallbackJSONField
|
||||
|
||||
@@ -186,6 +187,8 @@ class Order(LockModel, LoggedModel):
|
||||
verbose_name=_('E-mail address verified')
|
||||
)
|
||||
|
||||
objects = ScopedManager(organizer='event__organizer')
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Order")
|
||||
verbose_name_plural = _("Orders")
|
||||
@@ -195,6 +198,8 @@ class Order(LockModel, LoggedModel):
|
||||
return self.full_code
|
||||
|
||||
def gracefully_delete(self, user=None, auth=None):
|
||||
from . import Voucher
|
||||
|
||||
if not self.testmode:
|
||||
raise TypeError("Only test mode orders can be deleted.")
|
||||
self.event.log_action(
|
||||
@@ -203,6 +208,12 @@ class Order(LockModel, LoggedModel):
|
||||
'code': self.code,
|
||||
}
|
||||
)
|
||||
|
||||
if self.status != Order.STATUS_CANCELED:
|
||||
for position in self.positions.all():
|
||||
if position.voucher:
|
||||
Voucher.objects.filter(pk=position.voucher.pk).update(redeemed=Greatest(0, F('redeemed') - 1))
|
||||
|
||||
OrderPosition.all.filter(order=self, addon_to__isnull=False).delete()
|
||||
OrderPosition.all.filter(order=self).delete()
|
||||
OrderFee.all.filter(order=self).delete()
|
||||
@@ -223,6 +234,7 @@ class Order(LockModel, LoggedModel):
|
||||
return self.all_fees(manager='objects')
|
||||
|
||||
@cached_property
|
||||
@scopes_disabled()
|
||||
def count_positions(self):
|
||||
if hasattr(self, 'pcnt'):
|
||||
return self.pcnt or 0
|
||||
@@ -246,6 +258,7 @@ class Order(LockModel, LoggedModel):
|
||||
return None
|
||||
|
||||
@property
|
||||
@scopes_disabled()
|
||||
def payment_refund_sum(self):
|
||||
payment_sum = self.payments.filter(
|
||||
state__in=(OrderPayment.PAYMENT_STATE_CONFIRMED, OrderPayment.PAYMENT_STATE_REFUNDED)
|
||||
@@ -257,6 +270,7 @@ class Order(LockModel, LoggedModel):
|
||||
return payment_sum - refund_sum
|
||||
|
||||
@property
|
||||
@scopes_disabled()
|
||||
def pending_sum(self):
|
||||
total = self.total
|
||||
if self.status == Order.STATUS_CANCELED:
|
||||
@@ -431,6 +445,7 @@ class Order(LockModel, LoggedModel):
|
||||
return round_decimal(fee, self.event.currency)
|
||||
|
||||
@property
|
||||
@scopes_disabled()
|
||||
def user_cancel_allowed(self) -> bool:
|
||||
"""
|
||||
Returns whether or not this order can be canceled by the user.
|
||||
@@ -814,6 +829,8 @@ class QuestionAnswer(models.Model):
|
||||
max_length=255
|
||||
)
|
||||
|
||||
objects = ScopedManager(organizer='question__event__organizer')
|
||||
|
||||
@property
|
||||
def backend_file_url(self):
|
||||
if self.file:
|
||||
@@ -1137,6 +1154,8 @@ class OrderPayment(models.Model):
|
||||
)
|
||||
migrated = models.BooleanField(default=False)
|
||||
|
||||
objects = ScopedManager(organizer='order__event__organizer')
|
||||
|
||||
class Meta:
|
||||
ordering = ('local_id',)
|
||||
|
||||
@@ -1493,6 +1512,8 @@ class OrderRefund(models.Model):
|
||||
null=True, blank=True
|
||||
)
|
||||
|
||||
objects = ScopedManager(organizer='order__event__organizer')
|
||||
|
||||
class Meta:
|
||||
ordering = ('local_id',)
|
||||
|
||||
@@ -1554,7 +1575,7 @@ class OrderRefund(models.Model):
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class ActivePositionManager(models.Manager):
|
||||
class ActivePositionManager(ScopedManager(organizer='order__event__organizer').__class__):
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().filter(canceled=False)
|
||||
|
||||
@@ -1631,7 +1652,7 @@ class OrderFee(models.Model):
|
||||
)
|
||||
canceled = models.BooleanField(default=False)
|
||||
|
||||
all = models.Manager()
|
||||
all = ScopedManager(organizer='order__event__organizer')
|
||||
objects = ActivePositionManager()
|
||||
|
||||
@property
|
||||
@@ -1736,7 +1757,7 @@ class OrderPosition(AbstractPosition):
|
||||
)
|
||||
canceled = models.BooleanField(default=False)
|
||||
|
||||
all = models.Manager()
|
||||
all = ScopedManager(organizer='order__event__organizer')
|
||||
objects = ActivePositionManager()
|
||||
|
||||
class Meta:
|
||||
@@ -1943,6 +1964,8 @@ class CartPosition(AbstractPosition):
|
||||
)
|
||||
is_bundled = models.BooleanField(default=False)
|
||||
|
||||
objects = ScopedManager(organizer='event__organizer')
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Cart position")
|
||||
verbose_name_plural = _("Cart positions")
|
||||
@@ -1992,6 +2015,8 @@ class InvoiceAddress(models.Model):
|
||||
blank=True
|
||||
)
|
||||
|
||||
objects = ScopedManager(organizer='order__event__organizer')
|
||||
|
||||
def save(self, **kwargs):
|
||||
if self.order:
|
||||
self.order.touch()
|
||||
|
||||
@@ -8,6 +8,7 @@ from django.db.models import Q
|
||||
from django.utils.crypto import get_random_string
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
||||
from django_scopes import ScopedManager
|
||||
|
||||
from ..decimal import round_decimal
|
||||
from .base import LoggedModel
|
||||
@@ -173,6 +174,8 @@ class Voucher(LoggedModel):
|
||||
"convenience.")
|
||||
)
|
||||
|
||||
objects = ScopedManager(organizer='event__organizer')
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Voucher")
|
||||
verbose_name_plural = _("Vouchers")
|
||||
|
||||
@@ -4,6 +4,7 @@ from django.core.exceptions import ValidationError
|
||||
from django.db import models, transaction
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
||||
from django_scopes import ScopedManager
|
||||
|
||||
from pretix.base.i18n import language
|
||||
from pretix.base.models import Voucher
|
||||
@@ -67,6 +68,8 @@ class WaitingListEntry(LoggedModel):
|
||||
)
|
||||
priority = models.IntegerField(default=0)
|
||||
|
||||
objects = ScopedManager(organizer='event__organizer')
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Waiting list entry")
|
||||
verbose_name_plural = _("Waiting list entries")
|
||||
|
||||
@@ -10,6 +10,7 @@ from django.db.models import Q
|
||||
from django.dispatch import receiver
|
||||
from django.utils.timezone import make_aware, now
|
||||
from django.utils.translation import pgettext_lazy, ugettext as _
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.i18n import language
|
||||
from pretix.base.models import (
|
||||
@@ -23,7 +24,7 @@ from pretix.base.reldate import RelativeDateWrapper
|
||||
from pretix.base.services.checkin import _save_answers
|
||||
from pretix.base.services.locking import LockTimeoutException, NoLockManager
|
||||
from pretix.base.services.pricing import get_price
|
||||
from pretix.base.services.tasks import ProfiledTask
|
||||
from pretix.base.services.tasks import ProfiledEventTask
|
||||
from pretix.base.settings import PERSON_NAME_SCHEMES
|
||||
from pretix.base.templatetags.rich_text import rich_text
|
||||
from pretix.celery_app import app
|
||||
@@ -902,7 +903,7 @@ def get_fees(event, request, total, invoice_address, provider):
|
||||
return fees
|
||||
|
||||
|
||||
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1, throws=(CartError,))
|
||||
@app.task(base=ProfiledEventTask, bind=True, max_retries=5, default_retry_delay=1, throws=(CartError,))
|
||||
def add_items_to_cart(self, event: int, items: List[dict], cart_id: str=None, locale='en',
|
||||
invoice_address: int=None, widget_data=None, sales_channel='web') -> None:
|
||||
"""
|
||||
@@ -913,12 +914,11 @@ def add_items_to_cart(self, event: int, items: List[dict], cart_id: str=None, lo
|
||||
:raises CartError: On any error that occured
|
||||
"""
|
||||
with language(locale):
|
||||
event = Event.objects.get(id=event)
|
||||
|
||||
ia = False
|
||||
if invoice_address:
|
||||
try:
|
||||
ia = InvoiceAddress.objects.get(pk=invoice_address)
|
||||
with scopes_disabled():
|
||||
ia = InvoiceAddress.objects.get(pk=invoice_address)
|
||||
except InvoiceAddress.DoesNotExist:
|
||||
pass
|
||||
|
||||
@@ -934,8 +934,8 @@ def add_items_to_cart(self, event: int, items: List[dict], cart_id: str=None, lo
|
||||
raise CartError(error_messages['busy'])
|
||||
|
||||
|
||||
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1, throws=(CartError,))
|
||||
def remove_cart_position(self, event: int, position: int, cart_id: str=None, locale='en') -> None:
|
||||
@app.task(base=ProfiledEventTask, bind=True, max_retries=5, default_retry_delay=1, throws=(CartError,))
|
||||
def remove_cart_position(self, event: Event, position: int, cart_id: str=None, locale='en') -> None:
|
||||
"""
|
||||
Removes a list of items from a user's cart.
|
||||
:param event: The event ID in question
|
||||
@@ -943,7 +943,6 @@ def remove_cart_position(self, event: int, position: int, cart_id: str=None, loc
|
||||
:param session: Session ID of a guest
|
||||
"""
|
||||
with language(locale):
|
||||
event = Event.objects.get(id=event)
|
||||
try:
|
||||
try:
|
||||
cm = CartManager(event=event, cart_id=cart_id)
|
||||
@@ -955,15 +954,14 @@ def remove_cart_position(self, event: int, position: int, cart_id: str=None, loc
|
||||
raise CartError(error_messages['busy'])
|
||||
|
||||
|
||||
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1, throws=(CartError,))
|
||||
def clear_cart(self, event: int, cart_id: str=None, locale='en') -> None:
|
||||
@app.task(base=ProfiledEventTask, bind=True, max_retries=5, default_retry_delay=1, throws=(CartError,))
|
||||
def clear_cart(self, event: Event, cart_id: str=None, locale='en') -> None:
|
||||
"""
|
||||
Removes a list of items from a user's cart.
|
||||
:param event: The event ID in question
|
||||
:param session: Session ID of a guest
|
||||
"""
|
||||
with language(locale):
|
||||
event = Event.objects.get(id=event)
|
||||
try:
|
||||
try:
|
||||
cm = CartManager(event=event, cart_id=cart_id)
|
||||
@@ -975,8 +973,8 @@ def clear_cart(self, event: int, cart_id: str=None, locale='en') -> None:
|
||||
raise CartError(error_messages['busy'])
|
||||
|
||||
|
||||
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1, throws=(CartError,))
|
||||
def set_cart_addons(self, event: int, addons: List[dict], cart_id: str=None, locale='en',
|
||||
@app.task(base=ProfiledEventTask, bind=True, max_retries=5, default_retry_delay=1, throws=(CartError,))
|
||||
def set_cart_addons(self, event: Event, addons: List[dict], cart_id: str=None, locale='en',
|
||||
invoice_address: int=None, sales_channel='web') -> None:
|
||||
"""
|
||||
Removes a list of items from a user's cart.
|
||||
@@ -985,12 +983,11 @@ def set_cart_addons(self, event: int, addons: List[dict], cart_id: str=None, loc
|
||||
:param session: Session ID of a guest
|
||||
"""
|
||||
with language(locale):
|
||||
event = Event.objects.get(id=event)
|
||||
|
||||
ia = False
|
||||
if invoice_address:
|
||||
try:
|
||||
ia = InvoiceAddress.objects.get(pk=invoice_address)
|
||||
with scopes_disabled():
|
||||
ia = InvoiceAddress.objects.get(pk=invoice_address)
|
||||
except InvoiceAddress.DoesNotExist:
|
||||
pass
|
||||
try:
|
||||
|
||||
@@ -2,6 +2,7 @@ from datetime import timedelta
|
||||
|
||||
from django.dispatch import receiver
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.models import CachedCombinedTicket, CachedTicket
|
||||
|
||||
@@ -10,6 +11,7 @@ from ..signals import periodic_task
|
||||
|
||||
|
||||
@receiver(signal=periodic_task)
|
||||
@scopes_disabled()
|
||||
def clean_cart_positions(sender, **kwargs):
|
||||
for cp in CartPosition.objects.filter(expires__lt=now() - timedelta(days=14), addon_to__isnull=False):
|
||||
cp.delete()
|
||||
@@ -20,12 +22,14 @@ def clean_cart_positions(sender, **kwargs):
|
||||
|
||||
|
||||
@receiver(signal=periodic_task)
|
||||
@scopes_disabled()
|
||||
def clean_cached_files(sender, **kwargs):
|
||||
for cf in CachedFile.objects.filter(expires__isnull=False, expires__lt=now()):
|
||||
cf.delete()
|
||||
|
||||
|
||||
@receiver(signal=periodic_task)
|
||||
@scopes_disabled()
|
||||
def clean_cached_tickets(sender, **kwargs):
|
||||
for cf in CachedTicket.objects.filter(created__lte=now() - timedelta(days=30)):
|
||||
cf.delete()
|
||||
|
||||
@@ -6,7 +6,7 @@ from django.utils.translation import ugettext
|
||||
|
||||
from pretix.base.i18n import LazyLocaleException, language
|
||||
from pretix.base.models import CachedFile, Event, cachedfile_name
|
||||
from pretix.base.services.tasks import ProfiledTask
|
||||
from pretix.base.services.tasks import ProfiledEventTask
|
||||
from pretix.base.signals import register_data_exporters
|
||||
from pretix.celery_app import app
|
||||
|
||||
@@ -15,9 +15,8 @@ class ExportError(LazyLocaleException):
|
||||
pass
|
||||
|
||||
|
||||
@app.task(base=ProfiledTask, throws=(ExportError,))
|
||||
def export(event: str, fileid: str, provider: str, form_data: Dict[str, Any]) -> None:
|
||||
event = Event.objects.get(id=event)
|
||||
@app.task(base=ProfiledEventTask, throws=(ExportError,))
|
||||
def export(event: Event, fileid: str, provider: str, form_data: Dict[str, Any]) -> None:
|
||||
file = CachedFile.objects.get(id=fileid)
|
||||
with language(event.settings.locale), override(event.settings.timezone):
|
||||
responses = register_data_exporters.send(event)
|
||||
|
||||
@@ -15,6 +15,7 @@ from django.utils import timezone
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import pgettext, ugettext as _
|
||||
from django_countries.fields import Country
|
||||
from django_scopes import scope, scopes_disabled
|
||||
from i18nfield.strings import LazyI18nString
|
||||
|
||||
from pretix.base.i18n import language
|
||||
@@ -244,16 +245,18 @@ def generate_invoice(order: Order, trigger_pdf=True):
|
||||
|
||||
@app.task(base=TransactionAwareTask)
|
||||
def invoice_pdf_task(invoice: int):
|
||||
i = Invoice.objects.get(pk=invoice)
|
||||
if i.shredded:
|
||||
return None
|
||||
if i.file:
|
||||
i.file.delete()
|
||||
with language(i.locale):
|
||||
fname, ftype, fcontent = i.event.invoice_renderer.generate(i)
|
||||
i.file.save(fname, ContentFile(fcontent))
|
||||
i.save()
|
||||
return i.file.name
|
||||
with scopes_disabled():
|
||||
i = Invoice.objects.get(pk=invoice)
|
||||
with scope(organizer=i.order.event.organizer):
|
||||
if i.shredded:
|
||||
return None
|
||||
if i.file:
|
||||
i.file.delete()
|
||||
with language(i.locale):
|
||||
fname, ftype, fcontent = i.event.invoice_renderer.generate(i)
|
||||
i.file.save(fname, ContentFile(fcontent))
|
||||
i.save()
|
||||
return i.file.name
|
||||
|
||||
|
||||
def invoice_qualified(order: Order):
|
||||
|
||||
@@ -10,6 +10,7 @@ from django.conf import settings
|
||||
from django.core.mail import EmailMultiAlternatives, get_connection
|
||||
from django.template.loader import get_template
|
||||
from django.utils.translation import ugettext as _
|
||||
from django_scopes import scope, scopes_disabled
|
||||
from i18nfield.strings import LazyI18nString
|
||||
|
||||
from pretix.base.email import ClassicMailRenderer
|
||||
@@ -234,83 +235,87 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
||||
pass
|
||||
|
||||
if event:
|
||||
event = Event.objects.get(id=event)
|
||||
with scopes_disabled():
|
||||
event = Event.objects.get(id=event)
|
||||
backend = event.get_mail_backend()
|
||||
cm = lambda: scope(organizer=event.organizer) # noqa
|
||||
else:
|
||||
backend = get_connection(fail_silently=False)
|
||||
cm = lambda: scopes_disabled() # noqa
|
||||
|
||||
if event:
|
||||
if order:
|
||||
try:
|
||||
order = event.orders.get(pk=order)
|
||||
except Order.DoesNotExist:
|
||||
order = None
|
||||
else:
|
||||
if position:
|
||||
try:
|
||||
position = order.positions.get(pk=position)
|
||||
except OrderPosition.DoesNotExist:
|
||||
attach_tickets = False
|
||||
if attach_tickets:
|
||||
args = []
|
||||
attach_size = 0
|
||||
for name, ct in get_tickets_for_order(order, base_position=position):
|
||||
content = ct.file.read()
|
||||
args.append((name, content, ct.type))
|
||||
attach_size += len(content)
|
||||
with cm():
|
||||
if event:
|
||||
if order:
|
||||
try:
|
||||
order = event.orders.get(pk=order)
|
||||
except Order.DoesNotExist:
|
||||
order = None
|
||||
else:
|
||||
if position:
|
||||
try:
|
||||
position = order.positions.get(pk=position)
|
||||
except OrderPosition.DoesNotExist:
|
||||
attach_tickets = False
|
||||
if attach_tickets:
|
||||
args = []
|
||||
attach_size = 0
|
||||
for name, ct in get_tickets_for_order(order, base_position=position):
|
||||
content = ct.file.read()
|
||||
args.append((name, content, ct.type))
|
||||
attach_size += len(content)
|
||||
|
||||
if attach_size < 4 * 1024 * 1024:
|
||||
# Do not attach more than 4MB, it will bounce way to often.
|
||||
for a in args:
|
||||
try:
|
||||
email.attach(*a)
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
order.log_action(
|
||||
'pretix.event.order.email.attachments.skipped',
|
||||
data={
|
||||
'subject': 'Attachments skipped',
|
||||
'message': 'Attachment have not been send because {} bytes are likely too large to arrive.'.format(attach_size),
|
||||
'recipient': '',
|
||||
'invoices': [],
|
||||
}
|
||||
)
|
||||
if attach_size < 4 * 1024 * 1024:
|
||||
# Do not attach more than 4MB, it will bounce way to often.
|
||||
for a in args:
|
||||
try:
|
||||
email.attach(*a)
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
order.log_action(
|
||||
'pretix.event.order.email.attachments.skipped',
|
||||
data={
|
||||
'subject': 'Attachments skipped',
|
||||
'message': 'Attachment have not been send because {} bytes are likely too large to arrive.'.format(attach_size),
|
||||
'recipient': '',
|
||||
'invoices': [],
|
||||
}
|
||||
)
|
||||
|
||||
email = email_filter.send_chained(event, 'message', message=email, order=order)
|
||||
email = email_filter.send_chained(event, 'message', message=email, order=order)
|
||||
|
||||
try:
|
||||
backend.send_messages([email])
|
||||
except smtplib.SMTPResponseException as e:
|
||||
if e.smtp_code in (101, 111, 421, 422, 431, 442, 447, 452):
|
||||
self.retry(max_retries=5, countdown=2 ** (self.request.retries * 2))
|
||||
logger.exception('Error sending email')
|
||||
try:
|
||||
backend.send_messages([email])
|
||||
except smtplib.SMTPResponseException as e:
|
||||
if e.smtp_code in (101, 111, 421, 422, 431, 442, 447, 452):
|
||||
self.retry(max_retries=5, countdown=2 ** (self.request.retries * 2))
|
||||
logger.exception('Error sending email')
|
||||
|
||||
if order:
|
||||
order.log_action(
|
||||
'pretix.event.order.email.error',
|
||||
data={
|
||||
'subject': 'SMTP code {}'.format(e.smtp_code),
|
||||
'message': e.smtp_error.decode() if isinstance(e.smtp_error, bytes) else str(e.smtp_error),
|
||||
'recipient': '',
|
||||
'invoices': [],
|
||||
}
|
||||
)
|
||||
if order:
|
||||
order.log_action(
|
||||
'pretix.event.order.email.error',
|
||||
data={
|
||||
'subject': 'SMTP code {}'.format(e.smtp_code),
|
||||
'message': e.smtp_error.decode() if isinstance(e.smtp_error, bytes) else str(e.smtp_error),
|
||||
'recipient': '',
|
||||
'invoices': [],
|
||||
}
|
||||
)
|
||||
|
||||
raise SendMailException('Failed to send an email to {}.'.format(to))
|
||||
except Exception as e:
|
||||
if order:
|
||||
order.log_action(
|
||||
'pretix.event.order.email.error',
|
||||
data={
|
||||
'subject': 'Internal error',
|
||||
'message': str(e),
|
||||
'recipient': '',
|
||||
'invoices': [],
|
||||
}
|
||||
)
|
||||
logger.exception('Error sending email')
|
||||
raise SendMailException('Failed to send an email to {}.'.format(to))
|
||||
raise SendMailException('Failed to send an email to {}.'.format(to))
|
||||
except Exception as e:
|
||||
if order:
|
||||
order.log_action(
|
||||
'pretix.event.order.email.error',
|
||||
data={
|
||||
'subject': 'Internal error',
|
||||
'message': str(e),
|
||||
'recipient': '',
|
||||
'invoices': [],
|
||||
}
|
||||
)
|
||||
logger.exception('Error sending email')
|
||||
raise SendMailException('Failed to send an email to {}.'.format(to))
|
||||
|
||||
|
||||
def mail_send(*args, **kwargs):
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from django.conf import settings
|
||||
from django.template.loader import get_template
|
||||
from django_scopes import scope, scopes_disabled
|
||||
from inlinestyler.utils import inline_css
|
||||
|
||||
from pretix.base.i18n import language
|
||||
@@ -12,6 +13,7 @@ from pretix.helpers.urls import build_absolute_uri
|
||||
|
||||
|
||||
@app.task(base=TransactionAwareTask)
|
||||
@scopes_disabled()
|
||||
def notify(logentry_id: int):
|
||||
logentry = LogEntry.all.get(id=logentry_id)
|
||||
if not logentry.event:
|
||||
@@ -66,17 +68,22 @@ def notify(logentry_id: int):
|
||||
@app.task(base=ProfiledTask)
|
||||
def send_notification(logentry_id: int, action_type: str, user_id: int, method: str):
|
||||
logentry = LogEntry.all.get(id=logentry_id)
|
||||
user = User.objects.get(id=user_id)
|
||||
types = get_all_notification_types(logentry.event)
|
||||
notification_type = types.get(action_type)
|
||||
if not notification_type:
|
||||
return # Ignore, e.g. plugin not active for this event
|
||||
if logentry.event:
|
||||
sm = lambda: scope(organizer=logentry.event.organizer) # noqa
|
||||
else:
|
||||
sm = lambda: scopes_disabled() # noqa
|
||||
with sm():
|
||||
user = User.objects.get(id=user_id)
|
||||
types = get_all_notification_types(logentry.event)
|
||||
notification_type = types.get(action_type)
|
||||
if not notification_type:
|
||||
return # Ignore, e.g. plugin not active for this event
|
||||
|
||||
with language(user.locale):
|
||||
notification = notification_type.build_notification(logentry)
|
||||
with language(user.locale):
|
||||
notification = notification_type.build_notification(logentry)
|
||||
|
||||
if method == "mail":
|
||||
send_notification_mail(notification, user)
|
||||
if method == "mail":
|
||||
send_notification_mail(notification, user)
|
||||
|
||||
|
||||
def send_notification_mail(notification: Notification, user: User):
|
||||
|
||||
@@ -16,6 +16,7 @@ from django.utils.formats import date_format
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils.timezone import make_aware, now
|
||||
from django.utils.translation import ugettext as _
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.api.models import OAuthApplication
|
||||
from pretix.base.i18n import (
|
||||
@@ -42,7 +43,7 @@ from pretix.base.services.invoices import (
|
||||
from pretix.base.services.locking import LockTimeoutException, NoLockManager
|
||||
from pretix.base.services.mail import SendMailException
|
||||
from pretix.base.services.pricing import get_price
|
||||
from pretix.base.services.tasks import ProfiledTask
|
||||
from pretix.base.services.tasks import ProfiledEventTask, ProfiledTask
|
||||
from pretix.base.settings import PERSON_NAME_SCHEMES
|
||||
from pretix.base.signals import (
|
||||
allow_ticket_download, order_approved, order_canceled, order_changed,
|
||||
@@ -715,10 +716,8 @@ def _order_placed_email_attendee(event: Event, order: Order, position: OrderPosi
|
||||
logger.exception('Order received email could not be sent to attendee')
|
||||
|
||||
|
||||
def _perform_order(event: str, payment_provider: str, position_ids: List[str],
|
||||
def _perform_order(event: Event, payment_provider: str, position_ids: List[str],
|
||||
email: str, locale: str, address: int, meta_info: dict=None, sales_channel: str='web'):
|
||||
|
||||
event = Event.objects.get(id=event)
|
||||
if payment_provider:
|
||||
pprov = event.get_payment_providers().get(payment_provider)
|
||||
if not pprov:
|
||||
@@ -732,7 +731,8 @@ def _perform_order(event: str, payment_provider: str, position_ids: List[str],
|
||||
addr = None
|
||||
if address is not None:
|
||||
try:
|
||||
addr = InvoiceAddress.objects.get(pk=address)
|
||||
with scopes_disabled():
|
||||
addr = InvoiceAddress.objects.get(pk=address)
|
||||
except InvoiceAddress.DoesNotExist:
|
||||
pass
|
||||
|
||||
@@ -804,6 +804,7 @@ def _perform_order(event: str, payment_provider: str, position_ids: List[str],
|
||||
|
||||
|
||||
@receiver(signal=periodic_task)
|
||||
@scopes_disabled()
|
||||
def expire_orders(sender, **kwargs):
|
||||
eventcache = {}
|
||||
|
||||
@@ -818,6 +819,7 @@ def expire_orders(sender, **kwargs):
|
||||
|
||||
|
||||
@receiver(signal=periodic_task)
|
||||
@scopes_disabled()
|
||||
def send_expiry_warnings(sender, **kwargs):
|
||||
eventcache = {}
|
||||
today = now().replace(hour=0, minute=0, second=0)
|
||||
@@ -875,6 +877,7 @@ def send_expiry_warnings(sender, **kwargs):
|
||||
|
||||
|
||||
@receiver(signal=periodic_task)
|
||||
@scopes_disabled()
|
||||
def send_download_reminders(sender, **kwargs):
|
||||
today = now().replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
|
||||
@@ -1497,8 +1500,8 @@ class OrderChangeManager:
|
||||
return pprov
|
||||
|
||||
|
||||
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1, throws=(OrderError,))
|
||||
def perform_order(self, event: str, payment_provider: str, positions: List[str],
|
||||
@app.task(base=ProfiledEventTask, bind=True, max_retries=5, default_retry_delay=1, throws=(OrderError,))
|
||||
def perform_order(self, event: Event, payment_provider: str, positions: List[str],
|
||||
email: str=None, locale: str=None, address: int=None, meta_info: dict=None,
|
||||
sales_channel: str='web'):
|
||||
with language(locale):
|
||||
@@ -1513,6 +1516,7 @@ def perform_order(self, event: str, payment_provider: str, positions: List[str],
|
||||
|
||||
|
||||
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1, throws=(OrderError,))
|
||||
@scopes_disabled()
|
||||
def cancel_order(self, order: int, user: int=None, send_mail: bool=True, api_token=None, oauth_application=None,
|
||||
device=None, cancellation_fee=None, try_auto_refund=False):
|
||||
try:
|
||||
|
||||
@@ -4,6 +4,7 @@ from django.conf import settings
|
||||
from django.db.models import Max, Q
|
||||
from django.dispatch import receiver
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.models import Event, LogEntry
|
||||
from pretix.celery_app import app
|
||||
@@ -17,6 +18,7 @@ def build_all_quota_caches(sender, **kwargs):
|
||||
|
||||
|
||||
@app.task
|
||||
@scopes_disabled()
|
||||
def refresh_quota_caches():
|
||||
# Active events
|
||||
active = LogEntry.objects.using(settings.DATABASE_REPLICA).filter(
|
||||
|
||||
@@ -11,14 +11,13 @@ from django.utils.timezone import now
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from pretix.base.models import CachedFile, Event, cachedfile_name
|
||||
from pretix.base.services.tasks import ProfiledTask
|
||||
from pretix.base.services.tasks import ProfiledEventTask
|
||||
from pretix.base.shredder import ShredError
|
||||
from pretix.celery_app import app
|
||||
|
||||
|
||||
@app.task(base=ProfiledTask)
|
||||
def export(event: str, shredders: List[str]) -> None:
|
||||
event = Event.objects.get(id=event)
|
||||
@app.task(base=ProfiledEventTask)
|
||||
def export(event: Event, shredders: List[str]) -> None:
|
||||
known_shredders = event.get_data_shredders()
|
||||
|
||||
with NamedTemporaryFile() as rawfile:
|
||||
@@ -63,9 +62,8 @@ def export(event: str, shredders: List[str]) -> None:
|
||||
return cf.pk
|
||||
|
||||
|
||||
@app.task(base=ProfiledTask, throws=(ShredError,))
|
||||
def shred(event: str, fileid: str, confirm_code: str) -> None:
|
||||
event = Event.objects.get(id=event)
|
||||
@app.task(base=ProfiledEventTask, throws=(ShredError,))
|
||||
def shred(event: Event, fileid: str, confirm_code: str) -> None:
|
||||
known_shredders = event.get_data_shredders()
|
||||
try:
|
||||
cf = CachedFile.objects.get(pk=fileid)
|
||||
|
||||
@@ -14,10 +14,12 @@ import time
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import transaction
|
||||
from django_scopes import scope, scopes_disabled
|
||||
|
||||
from pretix.base.metrics import (
|
||||
pretix_task_duration_seconds, pretix_task_runs_total,
|
||||
)
|
||||
from pretix.base.models import Event
|
||||
from pretix.celery_app import app
|
||||
|
||||
|
||||
@@ -61,6 +63,35 @@ class ProfiledTask(app.Task):
|
||||
return super().on_success(retval, task_id, args, kwargs)
|
||||
|
||||
|
||||
class EventTask(app.Task):
|
||||
def __call__(self, *args, **kwargs):
|
||||
if 'event_id' in kwargs:
|
||||
event_id = kwargs.get('event_id')
|
||||
with scopes_disabled():
|
||||
event = Event.objects.select_related('organizer').get(pk=event_id)
|
||||
del kwargs['event_id']
|
||||
kwargs['event'] = event
|
||||
elif 'event' in kwargs:
|
||||
event_id = kwargs.get('event')
|
||||
with scopes_disabled():
|
||||
event = Event.objects.select_related('organizer').get(pk=event_id)
|
||||
kwargs['event'] = event
|
||||
else:
|
||||
args = list(args)
|
||||
event_id = args[0]
|
||||
with scopes_disabled():
|
||||
event = Event.objects.select_related('organizer').get(pk=event_id)
|
||||
args[0] = event
|
||||
|
||||
with scope(organizer=event.organizer):
|
||||
ret = super().__call__(*args, **kwargs)
|
||||
return ret
|
||||
|
||||
|
||||
class ProfiledEventTask(ProfiledTask, EventTask):
|
||||
pass
|
||||
|
||||
|
||||
class TransactionAwareTask(ProfiledTask):
|
||||
"""
|
||||
Task class which is aware of django db transactions and only executes tasks
|
||||
|
||||
@@ -4,13 +4,14 @@ import os
|
||||
from django.core.files.base import ContentFile
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import ugettext as _
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.i18n import language
|
||||
from pretix.base.models import (
|
||||
CachedCombinedTicket, CachedTicket, Event, InvoiceAddress, Order,
|
||||
OrderPosition,
|
||||
)
|
||||
from pretix.base.services.tasks import ProfiledTask
|
||||
from pretix.base.services.tasks import EventTask, ProfiledTask
|
||||
from pretix.base.settings import PERSON_NAME_SCHEMES
|
||||
from pretix.base.signals import allow_ticket_download, register_ticket_outputs
|
||||
from pretix.celery_app import app
|
||||
@@ -57,10 +58,11 @@ def generate_order(order: int, provider: str):
|
||||
|
||||
@app.task(base=ProfiledTask)
|
||||
def generate(model: str, pk: int, provider: str):
|
||||
if model == 'order':
|
||||
return generate_order(pk, provider)
|
||||
elif model == 'orderposition':
|
||||
return generate_orderposition(pk, provider)
|
||||
with scopes_disabled():
|
||||
if model == 'order':
|
||||
return generate_order(pk, provider)
|
||||
elif model == 'orderposition':
|
||||
return generate_orderposition(pk, provider)
|
||||
|
||||
|
||||
class DummyRollbackException(Exception):
|
||||
@@ -165,9 +167,8 @@ def get_tickets_for_order(order, base_position=None):
|
||||
return tickets
|
||||
|
||||
|
||||
@app.task(base=ProfiledTask)
|
||||
def invalidate_cache(event: int, item: int=None, provider: str=None, order: int=None, **kwargs):
|
||||
event = Event.objects.get(id=event)
|
||||
@app.task(base=EventTask)
|
||||
def invalidate_cache(event: Event, item: int=None, provider: str=None, order: int=None, **kwargs):
|
||||
qs = CachedTicket.objects.filter(order_position__order__event=event)
|
||||
qsc = CachedCombinedTicket.objects.filter(order__event=event)
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import requests
|
||||
from django.dispatch import receiver
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import ugettext_lazy as _, ugettext_noop
|
||||
from django_scopes import scopes_disabled
|
||||
from i18nfield.strings import LazyI18nString
|
||||
|
||||
from pretix import __version__
|
||||
@@ -29,6 +30,7 @@ def run_update_check(sender, **kwargs):
|
||||
|
||||
|
||||
@app.task
|
||||
@scopes_disabled()
|
||||
def update_check():
|
||||
gs = GlobalSettingsObject()
|
||||
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
import sys
|
||||
|
||||
from django.dispatch import receiver
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.models import Event, User, WaitingListEntry
|
||||
from pretix.base.models.waitinglist import WaitingListException
|
||||
from pretix.base.services.tasks import ProfiledTask
|
||||
from pretix.base.services.tasks import EventTask
|
||||
from pretix.base.signals import periodic_task
|
||||
from pretix.celery_app import app
|
||||
|
||||
|
||||
@app.task(base=ProfiledTask)
|
||||
def assign_automatically(event_id: int, user_id: int=None, subevent_id: int=None):
|
||||
event = Event.objects.get(id=event_id)
|
||||
@app.task(base=EventTask)
|
||||
def assign_automatically(event: Event, user_id: int=None, subevent_id: int=None):
|
||||
if user_id:
|
||||
user = User.objects.get(id=user_id)
|
||||
else:
|
||||
@@ -69,6 +69,7 @@ def assign_automatically(event_id: int, user_id: int=None, subevent_id: int=None
|
||||
|
||||
|
||||
@receiver(signal=periodic_task)
|
||||
@scopes_disabled()
|
||||
def process_waitinglist(sender, **kwargs):
|
||||
qs = Event.objects.filter(
|
||||
live=True
|
||||
|
||||
@@ -3,6 +3,7 @@ import hmac
|
||||
|
||||
from django.conf import settings
|
||||
from django.http import HttpResponse
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from .. import metrics
|
||||
|
||||
@@ -15,6 +16,7 @@ def unauthed_response():
|
||||
return response
|
||||
|
||||
|
||||
@scopes_disabled()
|
||||
def serve_metrics(request):
|
||||
if not settings.METRICS_ENABLED:
|
||||
return unauthed_response()
|
||||
|
||||
@@ -5,6 +5,7 @@ from django.conf import settings
|
||||
from django.db.models import Q
|
||||
from django.urls import Resolver404, get_script_prefix, resolve
|
||||
from django.utils.translation import get_language
|
||||
from django_scopes import scope
|
||||
|
||||
from pretix.base.models.auth import StaffSession
|
||||
from pretix.base.settings import GlobalSettingsObject
|
||||
@@ -53,10 +54,11 @@ def contextprocessor(request):
|
||||
ctx['has_domain'] = request.event.organizer.domains.exists()
|
||||
|
||||
if not request.event.testmode:
|
||||
complain_testmode_orders = request.event.cache.get('complain_testmode_orders')
|
||||
if complain_testmode_orders is None:
|
||||
complain_testmode_orders = request.event.orders.filter(testmode=True).exists()
|
||||
request.event.cache.set('complain_testmode_orders', complain_testmode_orders, 30)
|
||||
with scope(organizer=request.organizer):
|
||||
complain_testmode_orders = request.event.cache.get('complain_testmode_orders')
|
||||
if complain_testmode_orders is None:
|
||||
complain_testmode_orders = request.event.orders.filter(testmode=True).exists()
|
||||
request.event.cache.set('complain_testmode_orders', complain_testmode_orders, 30)
|
||||
ctx['complain_testmode_orders'] = complain_testmode_orders
|
||||
else:
|
||||
ctx['complain_testmode_orders'] = False
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
from django import forms
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import pgettext_lazy
|
||||
from django_scopes.forms import (
|
||||
SafeModelChoiceField, SafeModelMultipleChoiceField,
|
||||
)
|
||||
|
||||
from pretix.base.models.checkin import CheckinList
|
||||
from pretix.control.forms.widgets import Select2
|
||||
@@ -44,3 +47,7 @@ class CheckinListForm(forms.ModelForm):
|
||||
'data-inverse-dependency': '<[name$=all_products]'
|
||||
}),
|
||||
}
|
||||
field_classes = {
|
||||
'limit_products': SafeModelMultipleChoiceField,
|
||||
'subevent': SafeModelChoiceField,
|
||||
}
|
||||
|
||||
@@ -6,6 +6,9 @@ from django.urls import reverse
|
||||
from django.utils.translation import (
|
||||
pgettext_lazy, ugettext as __, ugettext_lazy as _,
|
||||
)
|
||||
from django_scopes.forms import (
|
||||
SafeModelChoiceField, SafeModelMultipleChoiceField,
|
||||
)
|
||||
from i18nfield.forms import I18nFormField, I18nTextarea
|
||||
|
||||
from pretix.base.channels import get_all_sales_channels
|
||||
@@ -94,6 +97,10 @@ class QuestionForm(I18nModelForm):
|
||||
),
|
||||
'dependency_value': forms.Select,
|
||||
}
|
||||
field_classes = {
|
||||
'items': SafeModelMultipleChoiceField,
|
||||
'dependency_question': SafeModelChoiceField,
|
||||
}
|
||||
|
||||
|
||||
class QuestionOptionForm(I18nModelForm):
|
||||
@@ -159,6 +166,9 @@ class QuotaForm(I18nModelForm):
|
||||
'size',
|
||||
'subevent'
|
||||
]
|
||||
field_classes = {
|
||||
'subevent': SafeModelChoiceField,
|
||||
}
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
creating = not self.instance.pk
|
||||
|
||||
@@ -192,7 +192,7 @@ class OrderPositionAddForm(forms.Form):
|
||||
label=_('Product')
|
||||
)
|
||||
addon_to = forms.ModelChoiceField(
|
||||
OrderPosition.objects.none(),
|
||||
OrderPosition.all.none(),
|
||||
required=False,
|
||||
label=_('Add-on to'),
|
||||
)
|
||||
|
||||
@@ -6,6 +6,7 @@ from django.core.exceptions import ValidationError
|
||||
from django.core.validators import RegexValidator
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
||||
from django_scopes.forms import SafeModelMultipleChoiceField
|
||||
from i18nfield.forms import I18nFormField, I18nTextarea
|
||||
|
||||
from pretix.api.models import WebHook
|
||||
@@ -149,6 +150,9 @@ class TeamForm(forms.ModelForm):
|
||||
'data-inverse-dependency': '#id_all_events'
|
||||
}),
|
||||
}
|
||||
field_classes = {
|
||||
'limit_events': SafeModelMultipleChoiceField
|
||||
}
|
||||
|
||||
def clean(self):
|
||||
data = super().clean()
|
||||
@@ -177,6 +181,9 @@ class DeviceForm(forms.ModelForm):
|
||||
'data-inverse-dependency': '#id_all_events'
|
||||
}),
|
||||
}
|
||||
field_classes = {
|
||||
'limit_events': SafeModelMultipleChoiceField
|
||||
}
|
||||
|
||||
|
||||
class OrganizerSettingsForm(SettingsForm):
|
||||
@@ -307,3 +314,6 @@ class WebHookForm(forms.ModelForm):
|
||||
'data-inverse-dependency': '#id_all_events'
|
||||
}),
|
||||
}
|
||||
field_classes = {
|
||||
'limit_events': SafeModelMultipleChoiceField
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
||||
from django.db.models.functions import Lower
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
||||
from django_scopes.forms import SafeModelChoiceField
|
||||
|
||||
from pretix.base.forms import I18nModelForm
|
||||
from pretix.base.models import Item, Voucher
|
||||
@@ -35,6 +36,7 @@ class VoucherForm(I18nModelForm):
|
||||
]
|
||||
field_classes = {
|
||||
'valid_until': SplitDateTimeField,
|
||||
'subevent': SafeModelChoiceField,
|
||||
}
|
||||
widgets = {
|
||||
'valid_until': SplitDateTimePickerWidget(),
|
||||
@@ -199,6 +201,7 @@ class VoucherBulkForm(VoucherForm):
|
||||
]
|
||||
field_classes = {
|
||||
'valid_until': SplitDateTimeField,
|
||||
'subevent': SafeModelChoiceField,
|
||||
}
|
||||
widgets = {
|
||||
'valid_until': SplitDateTimePickerWidget(),
|
||||
|
||||
@@ -4,10 +4,11 @@ from django.conf import settings
|
||||
from django.contrib.auth import REDIRECT_FIELD_NAME, logout
|
||||
from django.http import Http404
|
||||
from django.shortcuts import get_object_or_404, redirect, resolve_url
|
||||
from django.template.response import TemplateResponse
|
||||
from django.urls import get_script_prefix, resolve, reverse
|
||||
from django.utils.deprecation import MiddlewareMixin
|
||||
from django.utils.encoding import force_str
|
||||
from django.utils.translation import ugettext as _
|
||||
from django_scopes import scope
|
||||
from hijack.templatetags.hijack_tags import is_hijacked
|
||||
|
||||
from pretix.base.models import Event, Organizer
|
||||
@@ -17,7 +18,7 @@ from pretix.helpers.security import (
|
||||
)
|
||||
|
||||
|
||||
class PermissionMiddleware(MiddlewareMixin):
|
||||
class PermissionMiddleware:
|
||||
"""
|
||||
This middleware enforces all requests to the control app to require login.
|
||||
Additionally, it enforces all requests to "control:event." URLs
|
||||
@@ -34,6 +35,10 @@ class PermissionMiddleware(MiddlewareMixin):
|
||||
"user.settings.notifications.off",
|
||||
)
|
||||
|
||||
def __init__(self, get_response=None):
|
||||
self.get_response = get_response
|
||||
super().__init__()
|
||||
|
||||
def _login_redirect(self, request):
|
||||
# Taken from django/contrib/auth/decorators.py
|
||||
path = request.build_absolute_uri()
|
||||
@@ -52,19 +57,19 @@ class PermissionMiddleware(MiddlewareMixin):
|
||||
return redirect_to_login(
|
||||
path, resolved_login_url, REDIRECT_FIELD_NAME)
|
||||
|
||||
def process_request(self, request):
|
||||
def __call__(self, request):
|
||||
url = resolve(request.path_info)
|
||||
url_name = url.url_name
|
||||
|
||||
if not request.path.startswith(get_script_prefix() + 'control'):
|
||||
# This middleware should only touch the /control subpath
|
||||
return
|
||||
return self.get_response(request)
|
||||
|
||||
if hasattr(request, 'organizer'):
|
||||
# If the user is on a organizer's subdomain, he should be redirected to pretix
|
||||
return redirect(urljoin(settings.SITE_URL, request.get_full_path()))
|
||||
if url_name in self.EXCEPTIONS:
|
||||
return
|
||||
return self.get_response(request)
|
||||
if not request.user.is_authenticated:
|
||||
return self._login_redirect(request)
|
||||
|
||||
@@ -79,10 +84,11 @@ class PermissionMiddleware(MiddlewareMixin):
|
||||
return redirect(reverse('control:user.reauth') + '?next=' + quote(request.get_full_path()))
|
||||
|
||||
if 'event' in url.kwargs and 'organizer' in url.kwargs:
|
||||
request.event = Event.objects.filter(
|
||||
slug=url.kwargs['event'],
|
||||
organizer__slug=url.kwargs['organizer'],
|
||||
).select_related('organizer').first()
|
||||
with scope(organizer=None):
|
||||
request.event = Event.objects.filter(
|
||||
slug=url.kwargs['event'],
|
||||
organizer__slug=url.kwargs['organizer'],
|
||||
).select_related('organizer').first()
|
||||
if not request.event or not request.user.has_event_permission(request.event.organizer, request.event,
|
||||
request=request):
|
||||
raise Http404(_("The selected event was not found or you "
|
||||
@@ -104,6 +110,12 @@ class PermissionMiddleware(MiddlewareMixin):
|
||||
else:
|
||||
request.orgapermset = request.user.get_organizer_permission_set(request.organizer)
|
||||
|
||||
with scope(organizer=getattr(request, 'organizer', None)):
|
||||
r = self.get_response(request)
|
||||
if isinstance(r, TemplateResponse):
|
||||
r = r.render()
|
||||
return r
|
||||
|
||||
|
||||
class AuditLogMiddleware:
|
||||
|
||||
|
||||
@@ -237,6 +237,24 @@ As with all plugin signals, the ``sender`` keyword argument will contain the eve
|
||||
A second keyword argument ``request`` will contain the request object.
|
||||
"""
|
||||
|
||||
nav_item = EventPluginSignal(
|
||||
providing_args=['request', 'item']
|
||||
)
|
||||
"""
|
||||
This signal is sent out to include tab links on the settings page of an item.
|
||||
Receivers are expected to return a list of dictionaries. The dictionaries
|
||||
should contain at least the keys ``label`` and ``url``. You should also return
|
||||
an ``active`` key with a boolean set to ``True``, when this item should be marked
|
||||
as active.
|
||||
|
||||
If your linked view should stay in the tab-like context of this page, we recommend
|
||||
that you use ``pretix.control.views.item.ItemDetailMixin`` for your view
|
||||
and your template inherits from ``pretixcontrol/item/base.html``.
|
||||
|
||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
||||
A second keyword argument ``request`` will contain the request object.
|
||||
"""
|
||||
|
||||
event_settings_widget = EventPluginSignal(
|
||||
providing_args=['request']
|
||||
)
|
||||
|
||||
@@ -27,6 +27,13 @@
|
||||
{% trans "Bundled products" %}
|
||||
</a>
|
||||
</li>
|
||||
{% for n in extra_nav %}
|
||||
<li {% if n.active %}class="active"{% endif %}>
|
||||
<a href="{{ n.url }}">
|
||||
{{ n.label }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<h1>{% trans "Create product" %}</h1>
|
||||
|
||||
@@ -33,7 +33,7 @@ from pretix.control.forms.item import (
|
||||
from pretix.control.permissions import (
|
||||
EventPermissionRequiredMixin, event_permission_required,
|
||||
)
|
||||
from pretix.control.signals import item_forms
|
||||
from pretix.control.signals import item_forms, nav_item
|
||||
|
||||
from . import ChartContainingView, CreateView, PaginationMixin, UpdateView
|
||||
|
||||
@@ -782,6 +782,18 @@ class ItemDetailMixin(SingleObjectMixin):
|
||||
model = Item
|
||||
context_object_name = 'item'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
ctx = super().get_context_data(**kwargs)
|
||||
nav = sorted(
|
||||
sum(
|
||||
(list(a[1]) for a in nav_item.send(self.request.event, request=self.request, item=self.get_object())),
|
||||
[]
|
||||
),
|
||||
key=lambda r: str(r['label'])
|
||||
)
|
||||
ctx['extra_nav'] = nav
|
||||
return ctx
|
||||
|
||||
def get_object(self, queryset=None) -> Item:
|
||||
try:
|
||||
if not hasattr(self, 'object') or not self.object:
|
||||
|
||||
@@ -149,10 +149,16 @@ def nav_context_list(request):
|
||||
]
|
||||
|
||||
if show_user and organizer:
|
||||
organizer = serialize_orga(Organizer.objects.get(pk=organizer))
|
||||
if organizer in results:
|
||||
results.remove(organizer)
|
||||
results.insert(1, organizer)
|
||||
try:
|
||||
organizer = Organizer.objects.get(pk=organizer)
|
||||
except Organizer.DoesNotExist:
|
||||
pass
|
||||
else:
|
||||
if request.user.has_organizer_permission(organizer, request=request):
|
||||
organizer = serialize_orga(organizer)
|
||||
if organizer in results:
|
||||
results.remove(organizer)
|
||||
results.insert(1, organizer)
|
||||
|
||||
doc = {
|
||||
'results': results,
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2018-07-23 23:00+0000\n"
|
||||
"Last-Translator: Muhammad Hewedy <mhewedy@gmail.com>\n"
|
||||
"Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix/ar/"
|
||||
@@ -2644,7 +2644,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr ""
|
||||
|
||||
@@ -5949,13 +5949,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7328,6 +7328,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -15120,7 +15121,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -15272,77 +15273,86 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -15350,7 +15360,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@@ -250,7 +250,7 @@ msgstr[3] ""
|
||||
msgstr[4] ""
|
||||
msgstr[5] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-04-11 22:00+0000\n"
|
||||
"Last-Translator: mussol <muzzol@gmail.com>\n"
|
||||
"Language-Team: Catalan <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
@@ -2829,7 +2829,7 @@ msgstr "Redueix el preu del producte en (%)"
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr "Codi de val"
|
||||
|
||||
@@ -6820,13 +6820,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -8213,6 +8213,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -16015,7 +16016,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -16167,77 +16168,90 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
#, fuzzy
|
||||
#| msgid "This file is from a different event."
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr "Aquest fitxer és d'un esdeveniment diferent."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
#, fuzzy
|
||||
#| msgid "Order date"
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Data de la comanda"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -16245,7 +16259,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@@ -241,7 +241,7 @@ msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@@ -2641,7 +2641,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr ""
|
||||
|
||||
@@ -5946,13 +5946,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7325,6 +7325,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -15106,7 +15107,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -15258,77 +15259,86 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -15336,7 +15346,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@@ -243,7 +243,7 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2018-11-16 13:13+0000\n"
|
||||
"Last-Translator: Mikkel Ricky <rimi@aarhus.dk>\n"
|
||||
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix/da/"
|
||||
@@ -2895,7 +2895,7 @@ msgstr "Nedsæt produktpris med (%)"
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr "Voucherkode"
|
||||
|
||||
@@ -6853,13 +6853,13 @@ msgid "Search voucher"
|
||||
msgstr "Find rabatkode"
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr "{product} – Vilkårlig variant"
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -8365,6 +8365,7 @@ msgstr "Indstillinger"
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr "Datoer"
|
||||
@@ -16761,7 +16762,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -16923,77 +16924,90 @@ msgstr "Tøm kurv"
|
||||
msgid "Proceed with checkout"
|
||||
msgstr "Gå til kassen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
#, fuzzy
|
||||
#| msgid "This identifier is already used for a different question."
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr "Dette id bruges allerede af et andet spørgsmål."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr "Se anden dato"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
#, fuzzy
|
||||
#| msgid "Order date"
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Bestillingsdato"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr "Forsalget for dette arrangement er slut."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr "Forsalget for dette arrangement starter %(date)s, kl.%(time)s."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr "Start: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr "Slut: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr "Tilføj til kalender"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr "Læg i kurv"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr "Brug en rabatkode"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr "Brug rabatkode"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr "Hvis du allerede har bestilt en billet"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -17004,7 +17018,7 @@ msgstr ""
|
||||
"ændre i din bestilling. Hvis du ikke kan finde linket, så klik på knappen "
|
||||
"for at få gensendt din bestillingsmail."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2018-04-24 14:22+0000\n"
|
||||
"Last-Translator: Pernille Thorsen <perth@aarhus.dk>\n"
|
||||
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
@@ -262,7 +262,7 @@ msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] "Varerne i din kurv er reserveret for dig i et minut."
|
||||
msgstr[1] "Varerne i din kurv er reserveret for dig i {num} minutter."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"PO-Revision-Date: 2019-06-05 11:38+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-06-06 09:24+0000\n"
|
||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix/de/"
|
||||
">\n"
|
||||
@@ -2823,7 +2823,7 @@ msgstr "Produktpreis reduzieren um (%)"
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr "Gutscheincode"
|
||||
|
||||
@@ -6760,13 +6760,13 @@ msgid "Search voucher"
|
||||
msgstr "Gutschein suchen"
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr "{product} - Beliebige Variante"
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -8260,6 +8260,7 @@ msgstr "Einstellungen"
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr "Termine"
|
||||
@@ -16929,7 +16930,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr "Okay, wir versuchen mehr für Sie zu reservieren!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -17086,20 +17087,29 @@ msgstr "Warenkorb leeren"
|
||||
msgid "Proceed with checkout"
|
||||
msgstr "Zur Kasse"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr "Tickets für anderen Termin hinzufügen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr "Zu anderem Termin wechseln"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr "Wählen Sie einen Termin aus"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Andere Termine"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr "Der Vorverkaufszeitraum für diese Veranstaltung ist vorüber."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
@@ -17107,58 +17117,58 @@ msgstr ""
|
||||
"Der Vorverkauf für diese Veranstaltung wird am %(date)s um %(time)s Uhr "
|
||||
"beginnen."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr "Der Vorverkauf für diese Veranstaltung hat noch nicht begonnen."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr "Beginn: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr "Ende: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr "Einlass: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr "Einlass: %(datetime)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr "Zum Kalender hinzufügen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr "Wir versuchen nun, die ausgewählten Produkte für Sie zu reservieren!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr "Zum Warenkorb hinzufügen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr "Gutschein einlösen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr "Gutschein einlösen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr "Wenn Sie bereits ein Ticket bestellt haben"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -17171,7 +17181,7 @@ msgstr ""
|
||||
"klicken Sie auf den folgenden Button, um ein erneutes Zusenden des Links "
|
||||
"anzufordern."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-05-01 12:13+0000\n"
|
||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
@@ -263,7 +263,7 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
"Die Produkte in Ihrem Warenkorb sind noch {num} Minuten für Sie reserviert."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr "Bitte tragen Sie eine Menge für eines der Produkte ein."
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"PO-Revision-Date: 2019-06-05 11:38+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-06-06 09:24+0000\n"
|
||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
|
||||
"pretix/pretix/de_Informal/>\n"
|
||||
@@ -2823,7 +2823,7 @@ msgstr "Produktpreis reduzieren um (%)"
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr "Gutscheincode"
|
||||
|
||||
@@ -6747,13 +6747,13 @@ msgid "Search voucher"
|
||||
msgstr "Gutschein suchen"
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr "{product} - Beliebige Variante"
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -8242,6 +8242,7 @@ msgstr "Einstellungen"
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr "Termine"
|
||||
@@ -16892,7 +16893,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr "Okay, wir versuchen dir mehr zu reservieren!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -17048,20 +17049,29 @@ msgstr "Warenkorb leeren"
|
||||
msgid "Proceed with checkout"
|
||||
msgstr "Zur Kasse"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr "Tickets für anderen Termin hinzufügen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr "Zu anderem Termin wechseln"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr "Wähle einen Termin aus"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Andere Termine"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr "Der Vorverkaufszeitraum für diese Veranstaltung ist vorüber."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
@@ -17069,58 +17079,58 @@ msgstr ""
|
||||
"Der Vorverkauf für diese Veranstaltung wird am %(date)s um %(time)s Uhr "
|
||||
"beginnen."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr "Der Vorverkauf für diese Veranstaltung hat noch nicht begonnen."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr "Beginn: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr "Ende: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr "Einlass: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr "Einlass: %(datetime)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr "Zum Kalender hinzufügen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr "Wir versuchen nun, die ausgewählten Produkte für dich zu reservieren!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr "Zum Warenkorb hinzufügen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr "Gutschein einlösen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr "Gutschein einlösen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr "Wenn du bereits ein Ticket bestellt hast"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -17132,7 +17142,7 @@ msgstr ""
|
||||
"Bestellvorgang geschickt haben. Wenn du den Link nicht finden kannst, klicke "
|
||||
"auf den folgenden Button, um ein erneutes Zusenden des Links anzufordern."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-05-01 12:12+0000\n"
|
||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
|
||||
@@ -262,7 +262,7 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
"Die Produkte in deinem Warenkorb sind noch {num} Minuten für dich reserviert."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr "Bitte trage eine Menge für eines der Produkte ein."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -2642,7 +2642,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr ""
|
||||
|
||||
@@ -5947,13 +5947,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7326,6 +7326,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -15104,7 +15105,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -15256,77 +15257,86 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -15334,7 +15344,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -242,7 +242,7 @@ msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-06-04 16:00+0000\n"
|
||||
"Last-Translator: ThanosTeste <testebasisth@unisystems.eu>\n"
|
||||
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix/el/"
|
||||
@@ -2834,7 +2834,7 @@ msgstr "Μειώστε την τιμή του προϊόντος κατά (%)"
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr "Κωδικός κουπονιού"
|
||||
|
||||
@@ -6822,13 +6822,13 @@ msgid "Search voucher"
|
||||
msgstr "Αναζήτηση κουπονιού"
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr "{product} - Οποιαδήποτε παραλλαγή"
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -8348,6 +8348,7 @@ msgstr "Ρυθμίσεις"
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr "Ημερομηνίες"
|
||||
@@ -17115,7 +17116,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr "Προσπαθούμε να κατοχυρώσουμε ένα άλλο για εσάς!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -17274,78 +17275,91 @@ msgstr "Αδειάστε το καλάθι αγορών"
|
||||
msgid "Proceed with checkout"
|
||||
msgstr "Ολοκλήρωση αγοράς"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
#, fuzzy
|
||||
#| msgid "This file is from a different event."
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr "Αυτό το αρχείο προέρχεται από διαφορετική εκδήλωση."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr "Δείτε άλλη ημερομηνία"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr "Επιλέξτε ημερομηνία για να αγοράσετε ένα εισιτήριο"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
#, fuzzy
|
||||
#| msgid "Other features"
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Αλλα χαρακτηριστικά"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr "Η περίοδος προπώλησης γι' αυτήν την εκδήλωση τελείωσε."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
"Η προπώληση γι' αυτήν την εκδήλωση θα ξεκινήσεις στις %(date)s στις %(time)s."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr "Η προπώληση γι' αυτήν την εκδήλωση δεν έχει ξεκινήσει ακόμα."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr "Ξεκινήστε: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr "Τέλος: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr "Είσοδος: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr "Είσοδος: %(datetime)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr "Προσθήκη Εκδήλωσης στο Ημερολόγιο"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr "Τώρα προσπαθούμε να το κρατήσουμε αυτό για σας!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr "Προσθήκη στο καλάθι"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr "Εξαργυρώστε ένα κουπόνι"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr "Εξαργύρωση κουπονιού"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr "Αν έχετε ήδη αγοράσει κάποιο εισιτήριο"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -17358,7 +17372,7 @@ msgstr ""
|
||||
"βρείτε, κάντε κλικ στο διπλανό κουμπί για να ζητήσετε να σας σταλεί εκ νέου "
|
||||
"ο σύνδεσμος που αφορά την παραγγελία σας."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-06-04 16:00+0000\n"
|
||||
"Last-Translator: ThanosTeste <testebasisth@unisystems.eu>\n"
|
||||
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
@@ -264,7 +264,7 @@ msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] "Τα είδη στο καλάθι θα παραμείνουν δεσμευμένα για ένα λεπτό."
|
||||
msgstr[1] "Τα είδη στο καλάθι θα παραμείνουν δεσμευμένα για {num} λεπτά."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr "Εισαγάγετε μια ποσότητα για έναν από τους τύπους εισιτηρίων."
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-05-01 23:00+0000\n"
|
||||
"Last-Translator: Alvaro Enrique Ruano <alvaro.ruano90@outlook.com>\n"
|
||||
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
@@ -2840,7 +2840,7 @@ msgstr "Reducir el precio del producto en (%)"
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr "Código del recibo"
|
||||
|
||||
@@ -6876,13 +6876,13 @@ msgid "Search voucher"
|
||||
msgstr "Buscar recibo"
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr "{product} - Cualquier variación"
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -8401,6 +8401,7 @@ msgstr "Ajustes"
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr "Fechas"
|
||||
@@ -17100,7 +17101,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr "¡Estamos tratando de reservar otro para ti!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -17256,77 +17257,90 @@ msgstr "Carrito vacío"
|
||||
msgid "Proceed with checkout"
|
||||
msgstr "Proceder con la compra"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
#, fuzzy
|
||||
#| msgid "This file is from a different event."
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr "Este archivo es de un evento diferente."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr "Ver otra fecha"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr "Elija la fecha para comprar un ticket"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
#, fuzzy
|
||||
#| msgid "Other features"
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Otras características"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr "El período de preventa para este evento ha terminado."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr "La preventa para este evento comenzará en %(date)s a %(time)s."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr "La preventa de este evento aún no ha comenzado."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr "Inicio: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr "Fin: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr "Entrada: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr "Entrada: %(datetime)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr "Añadir al Calendario"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr "¡Estamos tratando de reservar esto para ti!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr "Añadir al carrito"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr "Canjee un recibo"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr "Canjear recibo"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr "Si ya ha pedido un ticket"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -17339,7 +17353,7 @@ msgstr ""
|
||||
"siguiente botón para solicitar que se le envíe de nuevo el enlace a su "
|
||||
"pedido."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-03-31 08:00+0000\n"
|
||||
"Last-Translator: oocf <oswaldocerna@gmail.com>\n"
|
||||
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||
@@ -266,7 +266,7 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
"Los elementos en su carrito de compras se han reservado por {num} minutos."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-04-22 19:00+0000\n"
|
||||
"Last-Translator: David100mark <david.hundertmark@gmx.net>\n"
|
||||
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/fr/"
|
||||
@@ -2894,7 +2894,7 @@ msgstr "Réduire le prix des produits de (%)"
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr "code de réduction"
|
||||
|
||||
@@ -7089,13 +7089,13 @@ msgid "Search voucher"
|
||||
msgstr "Chercher un bon de réduction"
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr "{product} - Toute les variantes"
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -8680,6 +8680,7 @@ msgstr "Réglages"
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr "Dates"
|
||||
@@ -17852,7 +17853,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -18015,77 +18016,90 @@ msgstr "Vider le panier"
|
||||
msgid "Proceed with checkout"
|
||||
msgstr "Procéder au paiement"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
#, fuzzy
|
||||
#| msgid "This file is from a different event."
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr "Ce fichier provient d'un événement différent."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr "Afficher une autre date"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr "Choisissez la date d'achat du billet"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
#, fuzzy
|
||||
#| msgid "Other features"
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Autres caractéristiques"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr "La période de prévente pour cet événement est terminée."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr "La prévente de cet événement débutera le %(date)s à %(time)s."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr "La prévente de cet événement n' a pas encore commencé."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr "Début: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr "Fin: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr "Admission: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr "Admission: %(datetime)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr "Ajouter à l'Agenda"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr "Ajouter au panier"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr "Échangez un bon d'achat"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr "Échangez votre bon"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr "Si vous avez déjà commandé un billet"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -18098,7 +18112,7 @@ msgstr ""
|
||||
"cliquez sur le bouton suivant pour demander que le lien de votre commande "
|
||||
"vous soit à nouveau envoyé."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: French\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2018-10-28 10:23+0000\n"
|
||||
"Last-Translator: Arnaud Vergnet <keplyx@gmail.com>\n"
|
||||
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
@@ -267,7 +267,7 @@ msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] "Les articles de votre panier vous sont réservés pour une minute."
|
||||
msgstr[1] "Les articles de votre panier vous sont réservés pour {num} minutes."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-01-02 08:20+0000\n"
|
||||
"Last-Translator: amefad <fame@libero.it>\n"
|
||||
"Language-Team: Italian <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
@@ -2706,7 +2706,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr ""
|
||||
|
||||
@@ -6024,13 +6024,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7405,6 +7405,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -15202,7 +15203,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -15354,77 +15355,88 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
#, fuzzy
|
||||
#| msgid "Order date"
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Data dell'ordine"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -15432,7 +15444,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-01-02 08:20+0000\n"
|
||||
"Last-Translator: amefad <fame@libero.it>\n"
|
||||
"Language-Team: Italian <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||
@@ -258,7 +258,7 @@ msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@@ -2641,7 +2641,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr ""
|
||||
|
||||
@@ -5946,13 +5946,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7325,6 +7325,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -15103,7 +15104,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -15255,77 +15256,86 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -15333,7 +15343,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -242,7 +242,7 @@ msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-04-27 21:00+0000\n"
|
||||
"Last-Translator: Maarten van den Berg <maartenberg1@gmail.com>\n"
|
||||
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix/nl/"
|
||||
@@ -2815,7 +2815,7 @@ msgstr "Verlaag productprijs met (%)"
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr "Vouchercode"
|
||||
|
||||
@@ -6818,13 +6818,13 @@ msgid "Search voucher"
|
||||
msgstr "Zoek voucher"
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr "{product} – Elke variant"
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -8332,6 +8332,7 @@ msgstr "Instellingen"
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr "Datums"
|
||||
@@ -16971,7 +16972,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr "We proberen er nog een voor u te reserveren!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -17127,78 +17128,91 @@ msgstr "Leeg winkelwagen"
|
||||
msgid "Proceed with checkout"
|
||||
msgstr "Afrekenen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
#, fuzzy
|
||||
#| msgid "This file is from a different event."
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr "Dit bestand is van een ander evenement."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr "Bekijk andere datum"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr "Kies een datum om een ticket te kopen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
#, fuzzy
|
||||
#| msgid "Other features"
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Andere functies"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr "De voorverkoopperiode voor dit evenement is afgelopen."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
"De voorverkoopperiode voor dit evenement begint op %(date)s om %(time)s."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr "De voorverkoopperiode voor dit evenement is nog niet begonnen."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr "Begin: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr "Einde: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr "Toegang: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr "Toegang: %(datetime)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr "Voeg toe aan kalender"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr "We proberen dit nu voor u te reserveren!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr "Voeg toe aan winkelwagen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr "Verzilver een voucher"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr "Voucher inwisselen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr "Als u al een ticket heeft besteld"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -17210,7 +17224,7 @@ msgstr ""
|
||||
"wijzigen. Als u deze link niet kunt vinden kunt u op de knop hiernaast "
|
||||
"klikken om de link opnieuw te laten versturen."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-04-27 21:00+0000\n"
|
||||
"Last-Translator: Maarten van den Berg <maartenberg1@gmail.com>\n"
|
||||
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
@@ -259,7 +259,7 @@ msgstr[0] "De items in uw winkelwagen zijn nog één voor u gereserveerd."
|
||||
msgstr[1] ""
|
||||
"De items in uw winkelwagen zijn nog {num} minuten voor u gereserveerd."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@@ -2641,7 +2641,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr ""
|
||||
|
||||
@@ -5946,13 +5946,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7325,6 +7325,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -15103,7 +15104,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -15255,77 +15256,86 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -15333,7 +15343,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@@ -241,7 +241,7 @@ msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-04-27 21:00+0000\n"
|
||||
"Last-Translator: Maarten van den Berg <maartenberg1@gmail.com>\n"
|
||||
"Language-Team: Dutch (informal) <https://translate.pretix.eu/projects/pretix/"
|
||||
@@ -2816,7 +2816,7 @@ msgstr "Verlaag productprijs met (%)"
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr "Vouchercode"
|
||||
|
||||
@@ -6809,13 +6809,13 @@ msgid "Search voucher"
|
||||
msgstr "Zoek voucher"
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr "{product} – Elke variant"
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -8322,6 +8322,7 @@ msgstr "Instellingen"
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr "Datums"
|
||||
@@ -16969,7 +16970,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr "We proberen er nog een voor je te reserveren!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -17125,78 +17126,91 @@ msgstr "Leeg winkelwagen"
|
||||
msgid "Proceed with checkout"
|
||||
msgstr "Afrekenen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
#, fuzzy
|
||||
#| msgid "This file is from a different event."
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr "Dit bestand is van een ander evenement."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr "Bekijk andere datum"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr "Kies een datum om een kaartje te kopen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
#, fuzzy
|
||||
#| msgid "Other features"
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Andere functies"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr "De voorverkoopperiode voor dit evenement is afgelopen."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
"De voorverkoopperiode voor dit evenement begint op %(date)s om %(time)s."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr "De voorverkoopperiode voor dit evenement is nog niet begonnen."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr "Begin: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr "Einde: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr "Deuren open: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr "Deuren open: %(datetime)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr "Voeg toe aan kalender"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr "We proberen dit nu voor je te reserveren!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr "Voeg toe aan winkelwagen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr "Verzilver een voucher"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr "Voucher inwisselen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr "Als je al een kaartje hebt besteld"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -17208,7 +17222,7 @@ msgstr ""
|
||||
"hebben gestuurd. Als je deze link niet kan vinden kan je de knop hierboven "
|
||||
"gebruiken om de link nog een keer op te laten sturen."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-04-27 21:00+0000\n"
|
||||
"Last-Translator: Maarten van den Berg <maartenberg1@gmail.com>\n"
|
||||
"Language-Team: Dutch (informal) <https://translate.pretix.eu/projects/pretix/"
|
||||
@@ -262,7 +262,7 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
"De items in je winkelwagen zijn nog {num} minuten voor je gereserveerd."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-03-15 11:19+0000\n"
|
||||
"Last-Translator: Serge Bazanski <q3k@hackerspace.pl>\n"
|
||||
"Language-Team: Polish <https://translate.pretix.eu/projects/pretix/pretix/pl/"
|
||||
@@ -2799,7 +2799,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr ""
|
||||
|
||||
@@ -6136,13 +6136,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7519,6 +7519,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -15316,7 +15317,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -15474,77 +15475,88 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
#, fuzzy
|
||||
#| msgid "Order date"
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Data zamówienia"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -15552,7 +15564,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-03-15 11:19+0000\n"
|
||||
"Last-Translator: Serge Bazanski <q3k@hackerspace.pl>\n"
|
||||
"Language-Team: Polish <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
@@ -265,7 +265,7 @@ msgstr[0] "Przedmioty w koszyku są zarezerwowane na jedną minutę."
|
||||
msgstr[1] "Przedmioty w koszyku są zarezerwowane na {num} minuty."
|
||||
msgstr[2] "Przedmioty w koszyku są zarezerwowane na {num} minut."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@@ -2642,7 +2642,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr ""
|
||||
|
||||
@@ -5947,13 +5947,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7326,6 +7326,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -15107,7 +15108,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -15259,77 +15260,86 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -15337,7 +15347,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@@ -244,7 +244,7 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-03-19 09:00+0000\n"
|
||||
"Last-Translator: Lorhan Sohaky <lorhansohaky@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
|
||||
@@ -2877,7 +2877,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr "Código do voucher"
|
||||
|
||||
@@ -6311,13 +6311,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7751,6 +7751,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -15823,7 +15824,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -15981,77 +15982,88 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
#, fuzzy
|
||||
#| msgid "Order date"
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Data do pedido"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -16059,7 +16071,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-03-19 09:00+0000\n"
|
||||
"Last-Translator: Vitor Reis <vitor.reis7@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
|
||||
@@ -269,7 +269,7 @@ msgstr[0] "Os items em seu carrinho estão reservados para você por 1 minuto."
|
||||
msgstr[1] ""
|
||||
"Os items em seu carrinho estão reservados para você por {num} minutos."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-01-02 08:20+0000\n"
|
||||
"Last-Translator: Alexey Zh <write2aracon@gmail.com>\n"
|
||||
"Language-Team: Russian <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
@@ -2644,7 +2644,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr ""
|
||||
|
||||
@@ -5954,13 +5954,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7333,6 +7333,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -15123,7 +15124,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -15275,77 +15276,86 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -15353,7 +15363,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-01-02 08:21+0000\n"
|
||||
"Last-Translator: Alexey Zh <write2aracon@gmail.com>\n"
|
||||
"Language-Team: Russian <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||
@@ -246,7 +246,7 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-05-10 20:00+0000\n"
|
||||
"Last-Translator: Bostjan Marusic <bostjan@brokenbones.si>\n"
|
||||
"Language-Team: Slovenian <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
@@ -2675,7 +2675,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr ""
|
||||
|
||||
@@ -5983,13 +5983,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7364,6 +7364,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -15148,7 +15149,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -15300,77 +15301,86 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -15378,7 +15388,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@@ -246,7 +246,7 @@ msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[3] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-04-27 21:00+0000\n"
|
||||
"Last-Translator: Tobias Sundgren <syrgas@gmail.com>\n"
|
||||
"Language-Team: Swedish <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
@@ -2643,7 +2643,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr ""
|
||||
|
||||
@@ -5951,13 +5951,13 @@ msgid "Search voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7330,6 +7330,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
@@ -15110,7 +15111,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -15262,77 +15263,86 @@ msgstr ""
|
||||
msgid "Proceed with checkout"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -15340,7 +15350,7 @@ msgid ""
|
||||
"your order to be sent to you again."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-04-27 21:00+0000\n"
|
||||
"Last-Translator: Tobias Sundgren <syrgas@gmail.com>\n"
|
||||
"Language-Team: Swedish <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||
@@ -257,7 +257,7 @@ msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] "Artiklarna i din varukorg är reserverade i en minut."
|
||||
msgstr[1] "Artiklarna i din varukorg är reserverade i {num} minuter."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2018-09-12 07:17+0000\n"
|
||||
"Last-Translator: Yunus Fırat Pişkin <firat.piskin@idvlabs.com>\n"
|
||||
"Language-Team: Turkish <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
@@ -2913,7 +2913,7 @@ msgstr "Ürün fiyatını azalt(%)"
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr "Kupon kodu"
|
||||
|
||||
@@ -6956,13 +6956,13 @@ msgid "Search voucher"
|
||||
msgstr "Arama kuponu"
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr "{product} - Herhangi bir varyasyon"
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -8483,6 +8483,7 @@ msgstr "Ayarlar"
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr "Tarihler"
|
||||
@@ -17233,7 +17234,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -17392,77 +17393,90 @@ msgstr "Boş sepet"
|
||||
msgid "Proceed with checkout"
|
||||
msgstr "Ödeme ile devam et"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
#, fuzzy
|
||||
#| msgid "This file is from a different event."
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr "Bu dosya farklı bir etkinlikten."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr "Diğer tarihi görüntüle"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr "Bir bilet almak için tarih seçin"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
#, fuzzy
|
||||
#| msgid "Other features"
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "Diğer özellikler"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr "Bu etkinlik için presale süresi bitti."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr "Bu etkinlik için satış öncesi %(date)s %(time)s ile başlayacaktır."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr "Bu etkinlik için önceden teklif henüz başlamamıştır."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr "Başlangıç: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr "Bitiş:%(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr "Giriş: %(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr "Giriş: %(datetime)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr "Takvime ekle"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr "Sepete ekle"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr "Bir kuponu kullan"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr "Kuponu kullan"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr "Zaten bir bilet sipariş ettiyseniz"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -17475,7 +17489,7 @@ msgstr ""
|
||||
"gönderilmesini istediğiniz bağlantıyı istemek için aşağıdaki düğmeyi "
|
||||
"tıklayın."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2018-09-03 06:36+0000\n"
|
||||
"Last-Translator: Yunus Fırat Pişkin <firat.piskin@idvlabs.com>\n"
|
||||
"Language-Team: Turkish <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||
@@ -272,7 +272,7 @@ msgstr[1] ""
|
||||
"Diğer\n"
|
||||
"Sepetinizdeki ürünler {num} dakikalığına ayrılmıştır."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-03-28 14:00+0000\n"
|
||||
"Last-Translator: yichengsd <sunzl@jxepub.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <https://translate.pretix.eu/projects/"
|
||||
@@ -2719,7 +2719,7 @@ msgstr "降低产品价格(%)"
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/index.html:98
|
||||
#: pretix/control/views/vouchers.py:61 pretix/control/views/waitinglist.py:199
|
||||
#: pretix/plugins/checkinlists/exporters.py:322
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:235
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
msgid "Voucher code"
|
||||
msgstr "优惠券号"
|
||||
|
||||
@@ -6437,13 +6437,13 @@ msgid "Search voucher"
|
||||
msgstr "搜索票证"
|
||||
|
||||
#: pretix/control/forms/filter.py:823 pretix/control/forms/vouchers.py:92
|
||||
#: pretix/control/views/typeahead.py:311
|
||||
#: pretix/control/views/typeahead.py:317
|
||||
#, python-brace-format
|
||||
msgid "{product} – Any variation"
|
||||
msgstr "{product} - 任何变量"
|
||||
|
||||
#: pretix/control/forms/filter.py:829 pretix/control/forms/vouchers.py:83
|
||||
#: pretix/control/views/typeahead.py:319 pretix/control/views/typeahead.py:323
|
||||
#: pretix/control/views/typeahead.py:325 pretix/control/views/typeahead.py:329
|
||||
#: pretix/control/views/vouchers.py:73
|
||||
#, python-brace-format
|
||||
msgid "Any product in quota \"{quota}\""
|
||||
@@ -7866,6 +7866,7 @@ msgstr "设置"
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:19
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:5
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:7
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:115
|
||||
msgctxt "subevent"
|
||||
msgid "Dates"
|
||||
msgstr "日期"
|
||||
@@ -16010,7 +16011,7 @@ msgid "We're trying to reserve another one for you!"
|
||||
msgstr "我们正试图为你预留另一个!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:104
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:201
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:218
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:26
|
||||
#, python-format
|
||||
msgid ""
|
||||
@@ -16162,77 +16163,90 @@ msgstr "清空购物车"
|
||||
msgid "Proceed with checkout"
|
||||
msgstr "进行结账"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:99
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:100
|
||||
#, fuzzy
|
||||
#| msgid "This file is from a different event."
|
||||
msgid "Add tickets for a different date"
|
||||
msgstr "此文件来自其他活动。"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:104
|
||||
msgid "View other date"
|
||||
msgstr "查看其他日期"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:102
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:108
|
||||
msgid "Choose date to buy a ticket"
|
||||
msgstr "选择购票日期"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:113
|
||||
#, fuzzy
|
||||
#| msgid "Other features"
|
||||
msgctxt "subevent"
|
||||
msgid "Other dates"
|
||||
msgstr "其他特征"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:146
|
||||
#: pretix/presale/views/widget.py:471
|
||||
msgid "The presale period for this event is over."
|
||||
msgstr "此活动的预售期已结束。"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:134
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:151
|
||||
#: pretix/presale/views/widget.py:473
|
||||
#, python-format
|
||||
msgid "The presale for this event will start on %(date)s at %(time)s."
|
||||
msgstr "此活动的预售将从%(date)s的%(time)s开始。"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:138
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:155
|
||||
#: pretix/presale/views/widget.py:478
|
||||
msgid "The presale for this event has not yet started."
|
||||
msgstr "此活动的预售尚未开始。"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:160
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#, python-format
|
||||
msgid "Begin: %(time)s"
|
||||
msgstr "开始:%(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:165
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:182
|
||||
#, python-format
|
||||
msgid "End: %(time)s"
|
||||
msgstr "结束:%(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:173
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:190
|
||||
#, python-format
|
||||
msgid "Admission: %(time)s"
|
||||
msgstr "入场:%(time)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:177
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:194
|
||||
#, python-format
|
||||
msgid "Admission: %(datetime)s"
|
||||
msgstr "入场:%(datetime)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:188
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:205
|
||||
msgid "Add to Calendar"
|
||||
msgstr "添加到日历"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:200
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:217
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:25
|
||||
msgid "We're now trying to reserve this for you!"
|
||||
msgstr "我们现在正试图为您保留这个!"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:211
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:228
|
||||
#: pretix/presale/templates/pretixpresale/event/voucher.html:291
|
||||
msgid "Add to cart"
|
||||
msgstr "添加到购物车"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:223
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:240
|
||||
msgid "Redeem a voucher"
|
||||
msgstr "兑换优惠券"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:241
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:258
|
||||
msgid "Redeem voucher"
|
||||
msgstr "兑换优惠券"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:252
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:269
|
||||
msgid "If you already ordered a ticket"
|
||||
msgstr "如果您已经订了票"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:256
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:273
|
||||
msgid ""
|
||||
"If you want to see or change the status and details of your order, click on "
|
||||
"the link in one of the emails we sent you during the order process. If you "
|
||||
@@ -16243,7 +16257,7 @@ msgstr ""
|
||||
"一封电子邮件中的链接。 如果您找不到该链接,请单击以下按钮以请求再次发送给您的"
|
||||
"订单链接。"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:265
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:282
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
|
||||
#: pretix/presale/templates/pretixpresale/event/resend_link.html:7
|
||||
msgid "Resend order links"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-05 10:21+0000\n"
|
||||
"POT-Creation-Date: 2019-06-06 09:11+0000\n"
|
||||
"PO-Revision-Date: 2019-03-28 14:00+0000\n"
|
||||
"Last-Translator: yichengsd <sunzl@jxepub.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <https://translate.pretix.eu/projects/"
|
||||
@@ -249,7 +249,7 @@ msgid "The items in your cart are reserved for you for one minute."
|
||||
msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] "购物车中的物品将为您保留{num}分钟。"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:201
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "Please enter a quantity for one of the ticket types."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ from pretix.base.models import (
|
||||
CachedFile, Event, OrderPosition, cachedfile_name,
|
||||
)
|
||||
from pretix.base.services.orders import OrderError
|
||||
from pretix.base.services.tasks import EventTask
|
||||
from pretix.celery_app import app
|
||||
|
||||
from .exporters import render_pdf
|
||||
@@ -14,8 +15,8 @@ from .exporters import render_pdf
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@app.task(throws=(OrderError,))
|
||||
def badges_create_pdf(fileid: int, event: int, positions: List[int]) -> int:
|
||||
@app.task(base=EventTask, throws=(OrderError,))
|
||||
def badges_create_pdf(event: int, fileid: int, positions: List[int]) -> int:
|
||||
file = CachedFile.objects.get(id=fileid)
|
||||
event = Event.objects.get(id=event)
|
||||
|
||||
|
||||
@@ -223,7 +223,7 @@ class OrderPrintDo(EventPermissionRequiredMixin, AsyncAction, View):
|
||||
else:
|
||||
positions = [p.pk for p in order.positions.all()]
|
||||
return self.do(
|
||||
str(cf.id),
|
||||
self.request.event.pk,
|
||||
str(cf.id),
|
||||
positions,
|
||||
)
|
||||
|
||||
@@ -9,6 +9,7 @@ from django.db import transaction
|
||||
from django.db.models import Q
|
||||
from django.utils.formats import date_format
|
||||
from django.utils.translation import ugettext, ugettext_noop
|
||||
from django_scopes import scope, scopes_disabled
|
||||
|
||||
from pretix.base.i18n import language
|
||||
from pretix.base.models import (
|
||||
@@ -194,51 +195,53 @@ def _get_unknown_transactions(job: BankImportJob, data: list, event: Event=None,
|
||||
@app.task(base=TransactionAwareTask, bind=True, max_retries=5, default_retry_delay=1)
|
||||
def process_banktransfers(self, job: int, data: list) -> None:
|
||||
with language("en"): # We'll translate error messages at display time
|
||||
job = BankImportJob.objects.get(pk=job)
|
||||
job.state = BankImportJob.STATE_RUNNING
|
||||
job.save()
|
||||
prefixes = []
|
||||
with scopes_disabled():
|
||||
job = BankImportJob.objects.get(pk=job)
|
||||
with scope(organizer=job.organizer or job.event.organizer):
|
||||
job.state = BankImportJob.STATE_RUNNING
|
||||
job.save()
|
||||
prefixes = []
|
||||
|
||||
try:
|
||||
# Delete left-over transactions from a failed run before so they can reimported
|
||||
BankTransaction.objects.filter(state=BankTransaction.STATE_UNCHECKED, **job.owner_kwargs).delete()
|
||||
|
||||
transactions = _get_unknown_transactions(job, data, **job.owner_kwargs)
|
||||
|
||||
code_len = settings.ENTROPY['order_code']
|
||||
if job.event:
|
||||
pattern = re.compile(job.event.slug.upper() + r"[ \-_]*([A-Z0-9]{%s})" % code_len)
|
||||
else:
|
||||
if not prefixes:
|
||||
prefixes = [e.slug.upper().replace(".", r"\.").replace("-", r"[\- ]*")
|
||||
for e in job.organizer.events.all()]
|
||||
pattern = re.compile("(%s)[ \\-_]*([A-Z0-9]{%s})" % ("|".join(prefixes), code_len))
|
||||
|
||||
for trans in transactions:
|
||||
match = pattern.search(trans.reference.replace(" ", "").replace("\n", "").upper())
|
||||
|
||||
if match:
|
||||
if job.event:
|
||||
code = match.group(1)
|
||||
_handle_transaction(trans, code, event=job.event)
|
||||
else:
|
||||
slug = match.group(1)
|
||||
code = match.group(2)
|
||||
_handle_transaction(trans, code, organizer=job.organizer, slug=slug)
|
||||
else:
|
||||
trans.state = BankTransaction.STATE_NOMATCH
|
||||
trans.save()
|
||||
except LockTimeoutException:
|
||||
try:
|
||||
self.retry()
|
||||
except MaxRetriesExceededError:
|
||||
logger.exception('Maximum number of retries exceeded for task.')
|
||||
# Delete left-over transactions from a failed run before so they can reimported
|
||||
BankTransaction.objects.filter(state=BankTransaction.STATE_UNCHECKED, **job.owner_kwargs).delete()
|
||||
|
||||
transactions = _get_unknown_transactions(job, data, **job.owner_kwargs)
|
||||
|
||||
code_len = settings.ENTROPY['order_code']
|
||||
if job.event:
|
||||
pattern = re.compile(job.event.slug.upper() + r"[ \-_]*([A-Z0-9]{%s})" % code_len)
|
||||
else:
|
||||
if not prefixes:
|
||||
prefixes = [e.slug.upper().replace(".", r"\.").replace("-", r"[\- ]*")
|
||||
for e in job.organizer.events.all()]
|
||||
pattern = re.compile("(%s)[ \\-_]*([A-Z0-9]{%s})" % ("|".join(prefixes), code_len))
|
||||
|
||||
for trans in transactions:
|
||||
match = pattern.search(trans.reference.replace(" ", "").replace("\n", "").upper())
|
||||
|
||||
if match:
|
||||
if job.event:
|
||||
code = match.group(1)
|
||||
_handle_transaction(trans, code, event=job.event)
|
||||
else:
|
||||
slug = match.group(1)
|
||||
code = match.group(2)
|
||||
_handle_transaction(trans, code, organizer=job.organizer, slug=slug)
|
||||
else:
|
||||
trans.state = BankTransaction.STATE_NOMATCH
|
||||
trans.save()
|
||||
except LockTimeoutException:
|
||||
try:
|
||||
self.retry()
|
||||
except MaxRetriesExceededError:
|
||||
logger.exception('Maximum number of retries exceeded for task.')
|
||||
job.state = BankImportJob.STATE_ERROR
|
||||
job.save()
|
||||
except Exception as e:
|
||||
job.state = BankImportJob.STATE_ERROR
|
||||
job.save()
|
||||
except Exception as e:
|
||||
job.state = BankImportJob.STATE_ERROR
|
||||
job.save()
|
||||
raise e
|
||||
else:
|
||||
job.state = BankImportJob.STATE_COMPLETED
|
||||
job.save()
|
||||
raise e
|
||||
else:
|
||||
job.state = BankImportJob.STATE_COMPLETED
|
||||
job.save()
|
||||
|
||||
@@ -13,6 +13,7 @@ from django.utils.translation import ugettext_lazy as _
|
||||
from django.views.decorators.clickjacking import xframe_options_exempt
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.views.decorators.http import require_POST
|
||||
from django_scopes import scopes_disabled
|
||||
from paypalrestsdk.openid_connect import Tokeninfo
|
||||
|
||||
from pretix.base.models import Event, Order, OrderPayment, OrderRefund, Quota
|
||||
@@ -133,6 +134,7 @@ def abort(request, *args, **kwargs):
|
||||
|
||||
@csrf_exempt
|
||||
@require_POST
|
||||
@scopes_disabled()
|
||||
def webhook(request, *args, **kwargs):
|
||||
event_body = request.body.decode('utf-8').strip()
|
||||
event_json = json.loads(event_body)
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
from django import forms
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django_scopes.forms import (
|
||||
SafeModelChoiceField, SafeModelMultipleChoiceField,
|
||||
)
|
||||
|
||||
from pretix.control.forms.widgets import Select2
|
||||
from pretix.plugins.pretixdroid.models import AppConfiguration
|
||||
@@ -16,6 +19,10 @@ class AppConfigurationForm(forms.ModelForm):
|
||||
}),
|
||||
'app': forms.RadioSelect
|
||||
}
|
||||
field_classes = {
|
||||
'items': SafeModelMultipleChoiceField,
|
||||
'list': SafeModelChoiceField,
|
||||
}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self.event = kwargs.pop('event')
|
||||
|
||||
@@ -17,6 +17,7 @@ from django.utils.timezone import now
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.views.generic import TemplateView, View
|
||||
from django_scopes import scope, scopes_disabled
|
||||
|
||||
from pretix.base.models import Checkin, Event, Order, OrderPosition
|
||||
from pretix.base.models.event import SubEvent
|
||||
@@ -124,34 +125,35 @@ class ConfigView(EventPermissionRequiredMixin, TemplateView):
|
||||
class ApiView(View):
|
||||
@method_decorator(csrf_exempt)
|
||||
def dispatch(self, request, **kwargs):
|
||||
try:
|
||||
self.event = Event.objects.get(
|
||||
slug=self.kwargs['event'],
|
||||
organizer__slug=self.kwargs['organizer']
|
||||
)
|
||||
except Event.DoesNotExist:
|
||||
return HttpResponseNotFound('Unknown event')
|
||||
with scopes_disabled():
|
||||
try:
|
||||
self.event = Event.objects.get(
|
||||
slug=self.kwargs['event'],
|
||||
organizer__slug=self.kwargs['organizer']
|
||||
)
|
||||
except Event.DoesNotExist:
|
||||
return HttpResponseNotFound('Unknown event')
|
||||
with scope(organizer=self.event.organizer):
|
||||
try:
|
||||
self.config = self.event.appconfiguration_set.get(key=request.GET.get("key", "-unset-"))
|
||||
except AppConfiguration.DoesNotExist:
|
||||
return HttpResponseForbidden('Invalid key')
|
||||
|
||||
try:
|
||||
self.config = self.event.appconfiguration_set.get(key=request.GET.get("key", "-unset-"))
|
||||
except AppConfiguration.DoesNotExist:
|
||||
return HttpResponseForbidden('Invalid key')
|
||||
|
||||
self.subevent = None
|
||||
if self.event.has_subevents:
|
||||
if self.config.list.subevent:
|
||||
self.subevent = self.config.list.subevent
|
||||
if 'subevent' in kwargs and kwargs['subevent'] != str(self.subevent.pk):
|
||||
return HttpResponseForbidden('Invalid subevent selected.')
|
||||
elif 'subevent' in kwargs:
|
||||
self.subevent = get_object_or_404(SubEvent, event=self.event, pk=kwargs['subevent'])
|
||||
self.subevent = None
|
||||
if self.event.has_subevents:
|
||||
if self.config.list.subevent:
|
||||
self.subevent = self.config.list.subevent
|
||||
if 'subevent' in kwargs and kwargs['subevent'] != str(self.subevent.pk):
|
||||
return HttpResponseForbidden('Invalid subevent selected.')
|
||||
elif 'subevent' in kwargs:
|
||||
self.subevent = get_object_or_404(SubEvent, event=self.event, pk=kwargs['subevent'])
|
||||
else:
|
||||
return HttpResponseForbidden('No subevent selected.')
|
||||
else:
|
||||
return HttpResponseForbidden('No subevent selected.')
|
||||
else:
|
||||
if 'subevent' in kwargs:
|
||||
return HttpResponseForbidden('Subevents not enabled.')
|
||||
if 'subevent' in kwargs:
|
||||
return HttpResponseForbidden('Subevents not enabled.')
|
||||
|
||||
return super().dispatch(request, **kwargs)
|
||||
return super().dispatch(request, **kwargs)
|
||||
|
||||
|
||||
class ApiRedeemView(ApiView):
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user