Compare commits

..

34 Commits

Author SHA1 Message Date
Raphael Michel
4c9032f2a8 Bump version to 2.6.0 2019-04-03 16:02:39 +02:00
Raphael Michel
cae2bb944a Merge pull request #1243 from pretix-translations/weblate-pretix-pretix
Update from Weblate
2019-04-03 15:02:23 +01:00
Raphael Michel
724e745b8d Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3057 of 3057 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/

powered by weblate
2019-04-03 14:02:01 +00:00
Raphael Michel
f4cead1c20 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3057 of 3057 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de_Informal/

powered by weblate
2019-04-03 13:26:15 +00:00
Raphael Michel
7cab1924bb Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2019-04-03 15:19:57 +02:00
Raphael Michel
641148fecc Merge pull request #1239 from pretix-translations/weblate-pretix-pretix
Update from Weblate
2019-04-03 14:19:23 +01:00
mussol
9b3860e5fd Translated on translate.pretix.eu (Catalan)
Currently translated at 27.5% (839 of 3047 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ca/

powered by weblate
2019-04-03 11:13:19 +00:00
mussol
cb9d4c10df Translated on translate.pretix.eu (Catalan)
Currently translated at 22.0% (669 of 3047 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ca/

powered by weblate
2019-04-03 11:13:19 +00:00
oocf
84105b9585 Translated on translate.pretix.eu (Spanish)
Currently translated at 100.0% (96 of 96 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/es/

powered by weblate
2019-04-03 11:13:19 +00:00
oocf
3f38caeb24 Translated on translate.pretix.eu (Spanish)
Currently translated at 99.3% (3026 of 3047 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2019-04-03 11:13:19 +00:00
mussol
eae552e474 Translated on translate.pretix.eu (Catalan)
Currently translated at 21.1% (643 of 3047 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ca/

powered by weblate
2019-04-03 11:13:19 +00:00
mussol
f27c10c2ac Translated on translate.pretix.eu (Catalan)
Currently translated at 8.8% (267 of 3047 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ca/

powered by weblate
2019-04-03 11:13:19 +00:00
Raphael Michel
abd237b969 Checkout redirection: Respect cart_namespace 2019-04-03 13:12:49 +02:00
Raphael Michel
99c61c9060 Orders API: Add a missing sorting method to the documentation 2019-04-03 11:18:13 +02:00
Raphael Michel
246f307e21 Pin version of pillow (incompatibility with reportlab) 2019-04-02 11:31:01 +02:00
Raphael Michel
1f672e7df2 Fix incorrect test 2019-04-02 11:30:47 +02:00
Raphael Michel
b261a2041a Actually set the revoked flag 2019-04-02 09:44:31 +02:00
Raphael Michel
2d37c6d94d Make device token revokation more explicit 2019-04-02 09:36:07 +02:00
Raphael Michel
e75ae80fb5 REST API: Allow to filter orders by datetime 2019-03-29 17:15:15 +01:00
Raphael Michel
73ec5bac79 Allow to set a custom error message when presale is ended 2019-03-29 16:38:47 +01:00
Raphael Michel
46166159b0 Allow to force order creation through the API 2019-03-28 18:11:06 +01:00
Raphael Michel
598693fab2 Add Chinese as a selectable language 2019-03-28 17:06:28 +01:00
Raphael Michel
2420d884fc Merge pull request #1232 from pretix-translations/weblate-pretix-pretix
Update from Weblate
2019-03-28 16:06:26 +00:00
Raphael Michel
f95005a8d4 Added translation on translate.pretix.eu (Catalan) 2019-03-28 16:04:15 +00:00
Raphael Michel
e773096df3 Added translation on translate.pretix.eu (Catalan) 2019-03-28 16:03:59 +00:00
yichengsd
c42905421d Translated on translate.pretix.eu (Chinese (Simplified))
Currently translated at 100.0% (96 of 96 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/zh_Hans/

powered by weblate
2019-03-28 15:58:20 +00:00
Alvaro Enrique Ruano
46c2e28def Translated on translate.pretix.eu (Spanish)
Currently translated at 99.0% (3018 of 3047 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2019-03-28 15:58:20 +00:00
yichengsd
07bc3df6d3 Translated on translate.pretix.eu (Chinese (Simplified))
Currently translated at 99.8% (3041 of 3047 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/zh_Hans/

powered by weblate
2019-03-28 15:58:20 +00:00
Maarten van den Berg
2992c4c48a Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (96 of 96 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/nl_Informal/

powered by weblate
2019-03-28 15:58:20 +00:00
Maarten van den Berg
c53718381e Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3047 of 3047 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/nl/

powered by weblate
2019-03-28 15:58:20 +00:00
Maarten van den Berg
98e5f0b95d Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 71.9% (69 of 96 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/nl_Informal/

powered by weblate
2019-03-28 15:58:20 +00:00
Maarten van den Berg
7f11f06f3f Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (96 of 96 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/nl/

powered by weblate
2019-03-28 15:58:20 +00:00
Raphael Michel
949057a9cc Allow to persist filter attributes in session 2019-03-28 16:58:05 +01:00
Raphael Michel
edd643cc32 Event index: Filter subevent list as well 2019-03-28 16:54:21 +01:00
73 changed files with 23619 additions and 6285 deletions

View File

@@ -373,8 +373,8 @@ List of all orders
} }
:query integer page: The page number in case of a multi-page result set, default is 1 :query integer page: The page number in case of a multi-page result set, default is 1
:query string ordering: Manually set the ordering of results. Valid fields to be used are ``datetime``, ``code`` and :query string ordering: Manually set the ordering of results. Valid fields to be used are ``datetime``, ``code``,
``status``. Default: ``datetime`` ``last_modified``, and ``status``. Default: ``datetime``
:query string code: Only return orders that match the given order code :query string code: Only return orders that match the given order code
:query string status: Only return orders in the given order status (see above) :query string status: Only return orders in the given order status (see above)
:query boolean testmode: Only return orders with ``testmode`` set to ``true`` or ``false`` :query boolean testmode: Only return orders with ``testmode`` set to ``true`` or ``false``
@@ -385,6 +385,7 @@ List of all orders
:query datetime modified_since: Only return orders that have changed since the given date. Be careful: We only :query datetime modified_since: Only return orders that have changed since the given date. Be careful: We only
recommend using this in combination with ``testmode=false``, since test mode orders can vanish at any time and recommend using this in combination with ``testmode=false``, since test mode orders can vanish at any time and
you will not notice it using this method. you will not notice it using this method.
:query datetime created_since: Only return orders that have been created since the given date.
:param organizer: The ``slug`` field of the organizer to fetch :param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch :param event: The ``slug`` field of the event to fetch
:resheader X-Page-Generated: The server time at the beginning of the operation. If you're using this API to fetch :resheader X-Page-Generated: The server time at the beginning of the operation. If you're using this API to fetch
@@ -788,6 +789,8 @@ Creating orders
* ``internal_type`` * ``internal_type``
* ``tax_rule`` * ``tax_rule``
* ``force`` (optional). If set to ``true``, quotas will be ignored.
If you want to use add-on products, you need to set the ``positionid`` fields of all positions manually If you want to use add-on products, you need to set the ``positionid`` fields of all positions manually
to incrementing integers starting with ``1``. Then, you can reference one of these to incrementing integers starting with ``1``. Then, you can reference one of these
IDs in the ``addon_to`` field of another position. Note that all add_ons for a specific position need to come IDs in the ``addon_to`` field of another position. Note that all add_ons for a specific position need to come

View File

@@ -1 +1 @@
__version__ = "2.6.0.dev0" __version__ = "2.6.0"

View File

@@ -19,7 +19,7 @@ class DeviceTokenAuthentication(TokenAuthentication):
if not device.initialized: if not device.initialized:
raise exceptions.AuthenticationFailed('Device has not been initialized.') raise exceptions.AuthenticationFailed('Device has not been initialized.')
if not device.api_token: if device.revoked:
raise exceptions.AuthenticationFailed('Device access has been revoked.') raise exceptions.AuthenticationFailed('Device access has been revoked.')
return AnonymousUser(), device return AnonymousUser(), device

View File

@@ -457,11 +457,12 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
payment_provider = serializers.CharField(required=True) payment_provider = serializers.CharField(required=True)
payment_info = CompatibleJSONField(required=False) payment_info = CompatibleJSONField(required=False)
consume_carts = serializers.ListField(child=serializers.CharField(), required=False) consume_carts = serializers.ListField(child=serializers.CharField(), required=False)
force = serializers.BooleanField(default=False, required=False)
class Meta: class Meta:
model = Order model = Order
fields = ('code', 'status', 'testmode', 'email', 'locale', 'payment_provider', 'fees', 'comment', 'sales_channel', fields = ('code', 'status', 'testmode', 'email', 'locale', 'payment_provider', 'fees', 'comment', 'sales_channel',
'invoice_address', 'positions', 'checkin_attention', 'payment_info', 'consume_carts') 'invoice_address', 'positions', 'checkin_attention', 'payment_info', 'consume_carts', 'force')
def validate_payment_provider(self, pp): def validate_payment_provider(self, pp):
if pp not in self.context['event'].get_payment_providers(): if pp not in self.context['event'].get_payment_providers():
@@ -532,6 +533,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
positions_data = validated_data.pop('positions') if 'positions' in validated_data else [] positions_data = validated_data.pop('positions') if 'positions' in validated_data else []
payment_provider = validated_data.pop('payment_provider') payment_provider = validated_data.pop('payment_provider')
payment_info = validated_data.pop('payment_info', '{}') payment_info = validated_data.pop('payment_info', '{}')
force = validated_data.pop('force', False)
if 'invoice_address' in validated_data: if 'invoice_address' in validated_data:
iadata = validated_data.pop('invoice_address') iadata = validated_data.pop('invoice_address')
@@ -565,29 +567,30 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
errs = [{} for p in positions_data] errs = [{} for p in positions_data]
for i, pos_data in enumerate(positions_data): if not force:
new_quotas = (pos_data.get('variation').quotas.filter(subevent=pos_data.get('subevent')) for i, pos_data in enumerate(positions_data):
if pos_data.get('variation') new_quotas = (pos_data.get('variation').quotas.filter(subevent=pos_data.get('subevent'))
else pos_data.get('item').quotas.filter(subevent=pos_data.get('subevent'))) if pos_data.get('variation')
if len(new_quotas) == 0: else pos_data.get('item').quotas.filter(subevent=pos_data.get('subevent')))
errs[i]['item'] = [ugettext_lazy('The product "{}" is not assigned to a quota.').format( if len(new_quotas) == 0:
str(pos_data.get('item')) errs[i]['item'] = [ugettext_lazy('The product "{}" is not assigned to a quota.').format(
)] str(pos_data.get('item'))
else: )]
for quota in new_quotas: else:
if quota not in quota_avail_cache: for quota in new_quotas:
quota_avail_cache[quota] = list(quota.availability()) if quota not in quota_avail_cache:
quota_avail_cache[quota] = list(quota.availability())
if quota_avail_cache[quota][1] is not None: if quota_avail_cache[quota][1] is not None:
quota_avail_cache[quota][1] -= 1 quota_avail_cache[quota][1] -= 1
if quota_avail_cache[quota][1] < 0: if quota_avail_cache[quota][1] < 0:
errs[i]['item'] = [ errs[i]['item'] = [
ugettext_lazy('There is not enough quota available on quota "{}" to perform the operation.').format( ugettext_lazy('There is not enough quota available on quota "{}" to perform the operation.').format(
quota.name quota.name
) )
] ]
quotadiff.update(new_quotas) quotadiff.update(new_quotas)
if any(errs): if any(errs):
raise ValidationError({'positions': errs}) raise ValidationError({'positions': errs})

View File

@@ -105,7 +105,7 @@ class RevokeKeyView(APIView):
def post(self, request, format=None): def post(self, request, format=None):
device = request.auth device = request.auth
device.api_token = None device.revoked = True
device.save() device.save()
device.log_action('pretix.device.revoked', auth=device) device.log_action('pretix.device.revoked', auth=device)

View File

@@ -50,6 +50,7 @@ class OrderFilter(FilterSet):
code = django_filters.CharFilter(field_name='code', lookup_expr='iexact') code = django_filters.CharFilter(field_name='code', lookup_expr='iexact')
status = django_filters.CharFilter(field_name='status', 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') 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: class Meta:
model = Order model = Order

View File

@@ -173,7 +173,6 @@ class BaseQuestionsForm(forms.Form):
initial = None initial = None
tz = pytz.timezone(event.settings.timezone) tz = pytz.timezone(event.settings.timezone)
help_text = rich_text(q.help_text) help_text = rich_text(q.help_text)
default = q.default_value
label = escape(q.question) # django-bootstrap3 calls mark_safe label = escape(q.question) # django-bootstrap3 calls mark_safe
required = q.required and not self.all_optional required = q.required and not self.all_optional
if q.type == Question.TYPE_BOOLEAN: if q.type == Question.TYPE_BOOLEAN:
@@ -186,8 +185,6 @@ class BaseQuestionsForm(forms.Form):
if initial: if initial:
initialbool = (initial.answer == "True") initialbool = (initial.answer == "True")
elif default:
initialbool = (default == "True")
else: else:
initialbool = False initialbool = False
@@ -200,21 +197,21 @@ class BaseQuestionsForm(forms.Form):
field = forms.DecimalField( field = forms.DecimalField(
label=label, required=required, label=label, required=required,
help_text=q.help_text, help_text=q.help_text,
initial=initial.answer if initial else (default if default else None), initial=initial.answer if initial else None,
min_value=Decimal('0.00'), min_value=Decimal('0.00'),
) )
elif q.type == Question.TYPE_STRING: elif q.type == Question.TYPE_STRING:
field = forms.CharField( field = forms.CharField(
label=label, required=required, label=label, required=required,
help_text=help_text, help_text=help_text,
initial=initial.answer if initial else (default if default else None), initial=initial.answer if initial else None,
) )
elif q.type == Question.TYPE_TEXT: elif q.type == Question.TYPE_TEXT:
field = forms.CharField( field = forms.CharField(
label=label, required=required, label=label, required=required,
help_text=help_text, help_text=help_text,
widget=forms.Textarea, widget=forms.Textarea,
initial=initial.answer if initial else (default if default else None), initial=initial.answer if initial else None,
) )
elif q.type == Question.TYPE_CHOICE: elif q.type == Question.TYPE_CHOICE:
field = forms.ModelChoiceField( field = forms.ModelChoiceField(
@@ -246,24 +243,21 @@ class BaseQuestionsForm(forms.Form):
field = forms.DateField( field = forms.DateField(
label=label, required=required, label=label, required=required,
help_text=help_text, help_text=help_text,
initial=dateutil.parser.parse(initial.answer).date() if initial and initial.answer else ( initial=dateutil.parser.parse(initial.answer).date() if initial and initial.answer else None,
dateutil.parser.parse(default).date() if default else None),
widget=DatePickerWidget(), widget=DatePickerWidget(),
) )
elif q.type == Question.TYPE_TIME: elif q.type == Question.TYPE_TIME:
field = forms.TimeField( field = forms.TimeField(
label=label, required=required, label=label, required=required,
help_text=help_text, help_text=help_text,
initial=dateutil.parser.parse(initial.answer).time() if initial and initial.answer else ( initial=dateutil.parser.parse(initial.answer).time() if initial and initial.answer else None,
dateutil.parser.parse(default).time() if default else None),
widget=TimePickerWidget(time_format=get_format_without_seconds('TIME_INPUT_FORMATS')), widget=TimePickerWidget(time_format=get_format_without_seconds('TIME_INPUT_FORMATS')),
) )
elif q.type == Question.TYPE_DATETIME: elif q.type == Question.TYPE_DATETIME:
field = SplitDateTimeField( field = SplitDateTimeField(
label=label, required=required, label=label, required=required,
help_text=help_text, help_text=help_text,
initial=dateutil.parser.parse(initial.answer).astimezone(tz) if initial and initial.answer else ( initial=dateutil.parser.parse(initial.answer).astimezone(tz) if initial and initial.answer else None,
dateutil.parser.parse(default).astimezone(tz) if default else None),
widget=SplitDateTimePickerWidget(time_format=get_format_without_seconds('TIME_INPUT_FORMATS')), widget=SplitDateTimePickerWidget(time_format=get_format_without_seconds('TIME_INPUT_FORMATS')),
) )
field.question = q field.question = q

View File

@@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.13 on 2018-05-31 15:39
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0115_auto_20190323_2238'),
]
operations = [
migrations.AddField(
model_name='question',
name='default_value',
field=models.TextField(blank=True, help_text='The question will be filled with this response by default', null=True, verbose_name='Default answer'),
),
]

View File

@@ -0,0 +1,22 @@
# Generated by Django 2.1.5 on 2019-04-02 07:22
import django.db.models.deletion
import jsonfallback.fields
from django.db import migrations, models
import pretix.base.models.fields
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0115_auto_20190323_2238'),
]
operations = [
migrations.AddField(
model_name='device',
name='revoked',
field=models.BooleanField(default=False),
),
]

View File

@@ -41,6 +41,7 @@ class Device(LoggedModel):
api_token = models.CharField(max_length=190, unique=True, null=True) api_token = models.CharField(max_length=190, unique=True, null=True)
all_events = models.BooleanField(default=False, verbose_name=_("All events (including newly created ones)")) all_events = models.BooleanField(default=False, verbose_name=_("All events (including newly created ones)"))
limit_events = models.ManyToManyField('Event', verbose_name=_("Limit to events"), blank=True) limit_events = models.ManyToManyField('Event', verbose_name=_("Limit to events"), blank=True)
revoked = models.BooleanField(default=False)
name = models.CharField( name = models.CharField(
max_length=190, max_length=190,
verbose_name=_('Name') verbose_name=_('Name')

View File

@@ -963,11 +963,6 @@ class Question(LoggedModel):
'Question', null=True, blank=True, on_delete=models.SET_NULL, related_name='dependent_questions' 'Question', null=True, blank=True, on_delete=models.SET_NULL, related_name='dependent_questions'
) )
dependency_value = models.TextField(null=True, blank=True) dependency_value = models.TextField(null=True, blank=True)
default_value = models.TextField(
verbose_name=_('Default answer'),
help_text=_('The question will be filled with this response by default'),
null=True, blank=True,
)
class Meta: class Meta:
verbose_name = _("Question") verbose_name = _("Question")
@@ -985,10 +980,6 @@ class Question(LoggedModel):
def clean_identifier(self, code): def clean_identifier(self, code):
Question._clean_identifier(self.event, code, self) Question._clean_identifier(self.event, code, self)
def clean(self):
if self.default_value is not None:
self.clean_answer(self.default_value, check_required=False)
@staticmethod @staticmethod
def _clean_identifier(event, code, instance=None): def _clean_identifier(event, code, instance=None):
qs = Question.objects.filter(event=event, identifier__iexact=code) qs = Question.objects.filter(event=event, identifier__iexact=code)
@@ -1016,8 +1007,8 @@ class Question(LoggedModel):
def __lt__(self, other) -> bool: def __lt__(self, other) -> bool:
return self.sortkey < other.sortkey return self.sortkey < other.sortkey
def clean_answer(self, answer, check_required=True): def clean_answer(self, answer):
if self.required and check_required: if self.required:
if not answer or (self.type == Question.TYPE_BOOLEAN and answer not in ("true", "True", True)): if not answer or (self.type == Question.TYPE_BOOLEAN and answer not in ("true", "True", True)):
raise ValidationError(_('An answer to this question is required to proceed.')) raise ValidationError(_('An answer to this question is required to proceed.'))
if not answer: if not answer:

View File

@@ -101,6 +101,10 @@ DEFAULTS = {
'default': 'False', 'default': 'False',
'type': bool 'type': bool
}, },
'presale_has_ended_text': {
'default': '',
'type': LazyI18nString
},
'payment_explanation': { 'payment_explanation': {
'default': '', 'default': '',
'type': LazyI18nString 'type': LazyI18nString

View File

@@ -1049,6 +1049,14 @@ class DisplaySettingsForm(SettingsForm):
required=False, required=False,
widget=I18nTextarea widget=I18nTextarea
) )
presale_has_ended_text = I18nFormField(
label=_("End of presale text"),
required=False,
widget=I18nTextarea,
widget_kwargs={'attrs': {'rows': '2'}},
help_text=_("This text will be shown above the ticket shop once the designated sales timeframe for this event "
"is over. You can use it to describe other options to get a ticket, such as a box office.")
)
voucher_explanation_text = I18nFormField( voucher_explanation_text = I18nFormField(
label=_("Voucher explanation"), label=_("Voucher explanation"),
required=False, required=False,

View File

@@ -1,14 +1,8 @@
import datetime
import dateutil
import pytz
from django import forms from django import forms
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db.models import Max from django.db.models import Max
from django.forms.formsets import DELETION_FIELD_NAME from django.forms.formsets import DELETION_FIELD_NAME
from django.forms.utils import from_current_timezone, to_current_timezone
from django.urls import reverse from django.urls import reverse
from django.utils import formats
from django.utils.translation import ( from django.utils.translation import (
pgettext_lazy, ugettext as __, ugettext_lazy as _, pgettext_lazy, ugettext as __, ugettext_lazy as _,
) )
@@ -39,63 +33,6 @@ class CategoryForm(I18nModelForm):
] ]
class AdjustableTypeField(forms.Textarea):
def __init__(self, *args, type=None, **kwargs):
super().__init__(*args, **kwargs)
def format_value(self, value):
if getattr(self, 'type') == 'W' and value:
return str(formats.localize_input(to_current_timezone(dateutil.parser.parse(value))))
elif getattr(self, 'type') == 'D' and value:
return str(formats.localize_input(dateutil.parser.parse(value).date()))
elif getattr(self, 'type') == 'T' and value:
return str(formats.localize_input(dateutil.parser.parse(value).time()))
return super().format_value(value)
def value_from_datadict(self, data, files, name):
if 'type' in data and data['type'] == 'W' and 'default_value_date' in data and 'default_value_time' in data:
d_date = d_time = None
for format in formats.get_format('DATE_INPUT_FORMATS'):
try:
d_date = datetime.datetime.strptime(data['default_value_date'], format).date()
break
except (ValueError, TypeError):
continue
for format in formats.get_format('TIME_INPUT_FORMATS'):
try:
d_time = datetime.datetime.strptime(data['default_value_time'], format).time()
break
except (ValueError, TypeError):
continue
if d_date and d_time:
return from_current_timezone(datetime.datetime.combine(d_date, d_time)).astimezone(pytz.UTC).isoformat()
else:
return None
else:
val = super().value_from_datadict(data, files, name)
if 'type' in data and data['type'] == 'D' and val:
for format in formats.get_format('DATE_INPUT_FORMATS'):
try:
d_date = datetime.datetime.strptime(val, format).date()
val = d_date.isoformat()
break
except (ValueError, TypeError):
continue
elif 'type' in data and data['type'] == 'T' and val:
for format in formats.get_format('TIME_INPUT_FORMATS'):
try:
d_date = datetime.datetime.strptime(val, format).time()
val = d_date.isoformat()
break
except (ValueError, TypeError):
continue
return val
class QuestionForm(I18nModelForm): class QuestionForm(I18nModelForm):
question = I18nFormField( question = I18nFormField(
label=_("Question"), label=_("Question"),
@@ -114,8 +51,6 @@ class QuestionForm(I18nModelForm):
pk=self.instance.pk pk=self.instance.pk
) )
self.fields['identifier'].required = False self.fields['identifier'].required = False
if self.instance:
self.fields['default_value'].widget.type = self.instance.type
self.fields['help_text'].widget.attrs['rows'] = 3 self.fields['help_text'].widget.attrs['rows'] = 3
def clean_dependency_question(self): def clean_dependency_question(self):
@@ -145,7 +80,6 @@ class QuestionForm(I18nModelForm):
'help_text', 'help_text',
'type', 'type',
'required', 'required',
'default_value',
'ask_during_checkin', 'ask_during_checkin',
'identifier', 'identifier',
'items', 'items',
@@ -156,8 +90,7 @@ class QuestionForm(I18nModelForm):
'items': forms.CheckboxSelectMultiple( 'items': forms.CheckboxSelectMultiple(
attrs={'class': 'scrolling-multiple-choice'} attrs={'class': 'scrolling-multiple-choice'}
), ),
'default_value': AdjustableTypeField(), 'dependency_value': forms.Select,
'dependency_value': forms.Select
} }

View File

@@ -11,6 +11,7 @@
<legend>{% trans "Event page" %}</legend> <legend>{% trans "Event page" %}</legend>
{% bootstrap_field form.logo_image layout="control" %} {% bootstrap_field form.logo_image layout="control" %}
{% bootstrap_field form.frontpage_text layout="control" %} {% bootstrap_field form.frontpage_text layout="control" %}
{% bootstrap_field form.presale_has_ended_text layout="control" %}
{% bootstrap_field form.voucher_explanation_text layout="control" %} {% bootstrap_field form.voucher_explanation_text layout="control" %}
{% bootstrap_field form.show_variations_expanded layout="control" %} {% bootstrap_field form.show_variations_expanded layout="control" %}
{% bootstrap_field form.meta_noindex layout="control" %} {% bootstrap_field form.meta_noindex layout="control" %}

View File

@@ -107,7 +107,6 @@
<fieldset> <fieldset>
<legend>{% trans "Advanced settings" %}</legend> <legend>{% trans "Advanced settings" %}</legend>
{% bootstrap_field form.help_text layout="control" %} {% bootstrap_field form.help_text layout="control" %}
{% bootstrap_field form.default_value layout="control" %}
{% bootstrap_field form.identifier layout="control" %} {% bootstrap_field form.identifier layout="control" %}
{% bootstrap_field form.ask_during_checkin layout="control" %} {% bootstrap_field form.ask_during_checkin layout="control" %}

View File

@@ -9,6 +9,13 @@
<strong>{% blocktrans %}Are you sure you want remove access for this device?{% endblocktrans %}</strong> <strong>{% blocktrans %}Are you sure you want remove access for this device?{% endblocktrans %}</strong>
{% trans "All data of this device will stay available, but you can't use the device any more." %} {% trans "All data of this device will stay available, but you can't use the device any more." %}
</p> </p>
<div class="alert alert-warning">
<ul>
<li>{% trans "All data uploaded by this device will stay available online." %}</li>
<li>{% trans "If data (e.g. POS transactions or check-ins) has been created on this device and has not been uploaded, you will no longer be able to upload it." %}</li>
<li>{% trans "If the device software supports it, personal data such as orders will be deleted from the device on the next synchronization attempt. Non-personal data such as event metadata and POS transactions will persist until you uninstall or reset the software manually." %}</li>
</ul>
</div>
<div class="form-group submit-group"> <div class="form-group submit-group">
<a href="{% url "control:organizer.devices" organizer=request.organizer.slug %}" class="btn btn-default btn-cancel"> <a href="{% url "control:organizer.devices" organizer=request.organizer.slug %}" class="btn btn-default btn-cancel">
{% trans "Cancel" %} {% trans "Cancel" %}

View File

@@ -756,7 +756,7 @@ class DeviceRevokeView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixi
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.object = self.get_object() self.object = self.get_object()
self.object.api_token = None self.object.revoked = True
self.object.save() self.object.save()
self.object.log_action('pretix.device.revoked', user=self.request.user) self.object.log_action('pretix.device.revoked', user=self.request.user)
messages.success(request, _('Access for this device has been revoked.')) messages.success(request, _('Access for this device has been revoked.'))

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Automatically generated\n"
"Language-Team: none\n" "Language-Team: none\n"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,465 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:68
msgid "Marked as paid"
msgstr ""
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:76
msgid "Comment:"
msgstr ""
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
msgid "Placed orders"
msgstr ""
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
msgid "Paid orders"
msgstr ""
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27
msgid "Total revenue"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12
msgid "Contacting Stripe …"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:56
msgid "Total"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:39
#: pretix/static/pretixbase/js/asynctask.js:95
msgid ""
"Your request has been queued on the server and will now be processed. "
"Depending on the size of your event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:45
#: pretix/static/pretixbase/js/asynctask.js:101
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:66
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixcontrol/js/ui/mail.js:23
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:69
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:115
#: pretix/static/pretixcontrol/js/ui/mail.js:20
msgid "The request took to long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:127
#: pretix/static/pretixcontrol/js/ui/mail.js:25
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:148
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:156
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:193
#: pretix/static/pretixcontrol/js/ui/main.js:20
msgid "Close message"
msgstr ""
#: pretix/static/pretixcontrol/js/clipboard.js:23
msgid "Copied!"
msgstr ""
#: pretix/static/pretixcontrol/js/clipboard.js:29
msgid "Press Ctrl-C to copy!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:43
msgid "Lead Scan QR"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:45
msgid "Check-in QR"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:249
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:418
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:424
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:426
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:428
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:430
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:434
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:687
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:735
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:749
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/mail.js:18
msgid "An error has occurred."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/mail.js:52
msgid "Generating messages …"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:55
msgid "Unknown error."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:217
msgid "Your color has great contrast and is very easy to read!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:221
msgid "Your color has decent contrast and is probably good-enough to read!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:225
msgid ""
"Your color has bad contrast for text on white background, please choose a "
"darker shade."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:306
msgid "All"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:307
msgid "None"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:595
msgid "Use a different name internally"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:646
msgid "Click to close"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:42
msgid "Others"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:71
msgid "Count"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:120
msgid "Yes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:121
msgid "No"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/subevent.js:108
msgid "(one more date)"
msgid_plural "({num} more dates)"
msgstr[0] ""
msgstr[1] ""
#: pretix/static/pretixpresale/js/ui/cart.js:39
msgid "The items in your cart are no longer reserved for you."
msgstr ""
#: pretix/static/pretixpresale/js/ui/cart.js:41
msgid "Cart expired"
msgstr ""
#: pretix/static/pretixpresale/js/ui/cart.js:46
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] ""
msgstr[1] ""
#: pretix/static/pretixpresale/js/widget/widget.js:14
msgctxt "widget"
msgid "Sold out"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:15
msgctxt "widget"
msgid "Buy"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:16
msgctxt "widget"
msgid "Reserved"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:17
msgctxt "widget"
msgid "FREE"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:18
msgctxt "widget"
msgid "from %(currency)s %(price)s"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:19
msgctxt "widget"
msgid "incl. %(rate)s% %(taxname)s"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:20
msgctxt "widget"
msgid "plus %(rate)s% %(taxname)s"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:21
msgctxt "widget"
msgid "incl. taxes"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:22
msgctxt "widget"
msgid "plus taxes"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:23
#, javascript-format
msgctxt "widget"
msgid "currently available: %s"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:24
msgctxt "widget"
msgid "Only available with a voucher"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:25
#, javascript-format
msgctxt "widget"
msgid "minimum amount to order: %s"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:26
msgctxt "widget"
msgid "Close ticket shop"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:27
msgctxt "widget"
msgid "The ticket shop could not be loaded."
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:28
msgctxt "widget"
msgid "The cart could not be created. Please try again later"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:29
msgctxt "widget"
msgid "Waiting list"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:30
msgctxt "widget"
msgid ""
"You currently have an active cart for this event. If you select more "
"products, they will be added to your existing cart."
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:32
msgctxt "widget"
msgid "Resume checkout"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:33
msgctxt "widget"
msgid ""
"<a href=\"https://pretix.eu\" target=\"_blank\" rel=\"noopener\">event "
"ticketing powered by pretix</a>"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:35
msgctxt "widget"
msgid "Redeem a voucher"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:36
msgctxt "widget"
msgid "Redeem"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:37
msgctxt "widget"
msgid "Voucher code"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:38
msgctxt "widget"
msgid "Close"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:39
msgctxt "widget"
msgid "Continue"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:40
msgctxt "widget"
msgid "See variations"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:41
msgctxt "widget"
msgid "Choose a different event"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:42
msgctxt "widget"
msgid "Back"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:43
msgctxt "widget"
msgid "Next month"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:44
msgctxt "widget"
msgid "Previous month"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:46
msgid "Mo"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:47
msgid "Tu"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:48
msgid "We"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:49
msgid "Th"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:50
msgid "Fr"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:51
msgid "Sa"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:52
msgid "Su"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:55
msgid "January"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:56
msgid "February"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:57
msgid "March"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:58
msgid "April"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:59
msgid "May"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:60
msgid "June"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:61
msgid "July"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:62
msgid "August"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:63
msgid "September"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:64
msgid "October"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:65
msgid "November"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:66
msgid "December"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Automatically generated\n"
"Language-Team: none\n" "Language-Team: none\n"

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2018-04-24 14:22+0000\n" "PO-Revision-Date: 2018-04-24 14:22+0000\n"
"Last-Translator: Pernille Thorsen <perth@aarhus.dk>\n" "Last-Translator: Pernille Thorsen <perth@aarhus.dk>\n"
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/" "Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2019-03-22 15:00+0000\n" "PO-Revision-Date: 2019-03-22 15:00+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n" "Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/" "Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2019-03-22 15:00+0000\n" "PO-Revision-Date: 2019-03-22 15:00+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n" "Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/" "Language-Team: German (informal) <https://translate.pretix.eu/projects/"

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Automatically generated\n"
"Language-Team: none\n" "Language-Team: none\n"

File diff suppressed because it is too large Load Diff

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2019-02-20 03:00+0000\n" "PO-Revision-Date: 2019-03-31 08:00+0000\n"
"Last-Translator: oocf <oswaldocerna@gmail.com>\n" "Last-Translator: oocf <oswaldocerna@gmail.com>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-" "Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
"js/es/>\n" "js/es/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.4\n" "X-Generator: Weblate 3.5.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -220,7 +220,7 @@ msgstr "Usar un nombre diferente internamente"
#: pretix/static/pretixcontrol/js/ui/main.js:646 #: pretix/static/pretixcontrol/js/ui/main.js:646
msgid "Click to close" msgid "Click to close"
msgstr "" msgstr "Click para cerrar"
#: pretix/static/pretixcontrol/js/ui/question.js:42 #: pretix/static/pretixcontrol/js/ui/question.js:42
msgid "Others" msgid "Others"
@@ -232,13 +232,11 @@ msgstr "Cantidad"
#: pretix/static/pretixcontrol/js/ui/question.js:120 #: pretix/static/pretixcontrol/js/ui/question.js:120
msgid "Yes" msgid "Yes"
msgstr "" msgstr "Si"
#: pretix/static/pretixcontrol/js/ui/question.js:121 #: pretix/static/pretixcontrol/js/ui/question.js:121
#, fuzzy
#| msgid "None"
msgid "No" msgid "No"
msgstr "Ninguno" msgstr "No"
#: pretix/static/pretixcontrol/js/ui/subevent.js:108 #: pretix/static/pretixcontrol/js/ui/subevent.js:108
msgid "(one more date)" msgid "(one more date)"
@@ -300,12 +298,12 @@ msgstr "más %(rate)s% %(taxname)s"
#: pretix/static/pretixpresale/js/widget/widget.js:21 #: pretix/static/pretixpresale/js/widget/widget.js:21
msgctxt "widget" msgctxt "widget"
msgid "incl. taxes" msgid "incl. taxes"
msgstr "" msgstr "incl. impuestos"
#: pretix/static/pretixpresale/js/widget/widget.js:22 #: pretix/static/pretixpresale/js/widget/widget.js:22
msgctxt "widget" msgctxt "widget"
msgid "plus taxes" msgid "plus taxes"
msgstr "" msgstr "más impuestos"
#: pretix/static/pretixpresale/js/widget/widget.js:23 #: pretix/static/pretixpresale/js/widget/widget.js:23
#, javascript-format #, javascript-format
@@ -400,102 +398,100 @@ msgid "See variations"
msgstr "Ver variaciones" msgstr "Ver variaciones"
#: pretix/static/pretixpresale/js/widget/widget.js:41 #: pretix/static/pretixpresale/js/widget/widget.js:41
#, fuzzy
#| msgid "Use a different name internally"
msgctxt "widget" msgctxt "widget"
msgid "Choose a different event" msgid "Choose a different event"
msgstr "Usar un nombre diferente internamente" msgstr "Elige un evento diferente"
#: pretix/static/pretixpresale/js/widget/widget.js:42 #: pretix/static/pretixpresale/js/widget/widget.js:42
msgctxt "widget" msgctxt "widget"
msgid "Back" msgid "Back"
msgstr "" msgstr "Atrás"
#: pretix/static/pretixpresale/js/widget/widget.js:43 #: pretix/static/pretixpresale/js/widget/widget.js:43
msgctxt "widget" msgctxt "widget"
msgid "Next month" msgid "Next month"
msgstr "" msgstr "Siguiente mes"
#: pretix/static/pretixpresale/js/widget/widget.js:44 #: pretix/static/pretixpresale/js/widget/widget.js:44
msgctxt "widget" msgctxt "widget"
msgid "Previous month" msgid "Previous month"
msgstr "" msgstr "Mes anterior"
#: pretix/static/pretixpresale/js/widget/widget.js:46 #: pretix/static/pretixpresale/js/widget/widget.js:46
msgid "Mo" msgid "Mo"
msgstr "" msgstr "Me"
#: pretix/static/pretixpresale/js/widget/widget.js:47 #: pretix/static/pretixpresale/js/widget/widget.js:47
msgid "Tu" msgid "Tu"
msgstr "" msgstr "Ma"
#: pretix/static/pretixpresale/js/widget/widget.js:48 #: pretix/static/pretixpresale/js/widget/widget.js:48
msgid "We" msgid "We"
msgstr "" msgstr "Mie"
#: pretix/static/pretixpresale/js/widget/widget.js:49 #: pretix/static/pretixpresale/js/widget/widget.js:49
msgid "Th" msgid "Th"
msgstr "" msgstr "Ju"
#: pretix/static/pretixpresale/js/widget/widget.js:50 #: pretix/static/pretixpresale/js/widget/widget.js:50
msgid "Fr" msgid "Fr"
msgstr "" msgstr "Vi"
#: pretix/static/pretixpresale/js/widget/widget.js:51 #: pretix/static/pretixpresale/js/widget/widget.js:51
msgid "Sa" msgid "Sa"
msgstr "" msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:52 #: pretix/static/pretixpresale/js/widget/widget.js:52
msgid "Su" msgid "Su"
msgstr "" msgstr "Do"
#: pretix/static/pretixpresale/js/widget/widget.js:55 #: pretix/static/pretixpresale/js/widget/widget.js:55
msgid "January" msgid "January"
msgstr "" msgstr "Enero"
#: pretix/static/pretixpresale/js/widget/widget.js:56 #: pretix/static/pretixpresale/js/widget/widget.js:56
msgid "February" msgid "February"
msgstr "" msgstr "Febrero"
#: pretix/static/pretixpresale/js/widget/widget.js:57 #: pretix/static/pretixpresale/js/widget/widget.js:57
msgid "March" msgid "March"
msgstr "" msgstr "Marzo"
#: pretix/static/pretixpresale/js/widget/widget.js:58 #: pretix/static/pretixpresale/js/widget/widget.js:58
msgid "April" msgid "April"
msgstr "" msgstr "Abril"
#: pretix/static/pretixpresale/js/widget/widget.js:59 #: pretix/static/pretixpresale/js/widget/widget.js:59
msgid "May" msgid "May"
msgstr "" msgstr "Mayo"
#: pretix/static/pretixpresale/js/widget/widget.js:60 #: pretix/static/pretixpresale/js/widget/widget.js:60
msgid "June" msgid "June"
msgstr "" msgstr "Junio"
#: pretix/static/pretixpresale/js/widget/widget.js:61 #: pretix/static/pretixpresale/js/widget/widget.js:61
msgid "July" msgid "July"
msgstr "" msgstr "Julio"
#: pretix/static/pretixpresale/js/widget/widget.js:62 #: pretix/static/pretixpresale/js/widget/widget.js:62
msgid "August" msgid "August"
msgstr "" msgstr "Agosto"
#: pretix/static/pretixpresale/js/widget/widget.js:63 #: pretix/static/pretixpresale/js/widget/widget.js:63
msgid "September" msgid "September"
msgstr "" msgstr "Septiembre"
#: pretix/static/pretixpresale/js/widget/widget.js:64 #: pretix/static/pretixpresale/js/widget/widget.js:64
msgid "October" msgid "October"
msgstr "" msgstr "Octubre"
#: pretix/static/pretixpresale/js/widget/widget.js:65 #: pretix/static/pretixpresale/js/widget/widget.js:65
msgid "November" msgid "November"
msgstr "" msgstr "Noviembre"
#: pretix/static/pretixpresale/js/widget/widget.js:66 #: pretix/static/pretixpresale/js/widget/widget.js:66
msgid "December" msgid "December"
msgstr "" msgstr "Diciembre"
#~ msgid "" #~ msgid ""
#~ "Your request has been queued on the server and will now be processed. If " #~ "Your request has been queued on the server and will now be processed. If "

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: French\n" "Project-Id-Version: French\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2018-10-28 10:23+0000\n" "PO-Revision-Date: 2018-10-28 10:23+0000\n"
"Last-Translator: Arnaud Vergnet <keplyx@gmail.com>\n" "Last-Translator: Arnaud Vergnet <keplyx@gmail.com>\n"
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/" "Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2019-01-02 08:20+0000\n" "PO-Revision-Date: 2019-01-02 08:20+0000\n"
"Last-Translator: amefad <fame@libero.it>\n" "Last-Translator: amefad <fame@libero.it>\n"
"Language-Team: Italian <https://translate.pretix.eu/projects/pretix/pretix-" "Language-Team: Italian <https://translate.pretix.eu/projects/pretix/pretix-"

File diff suppressed because it is too large Load Diff

View File

@@ -6,8 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 1\n" "Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2019-03-13 15:49+0000\n" "PO-Revision-Date: 2019-03-24 05:00+0000\n"
"Last-Translator: Maarten van den Berg <maartenberg1@gmail.com>\n" "Last-Translator: Maarten van den Berg <maartenberg1@gmail.com>\n"
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix-js/" "Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix-js/"
"nl/>\n" "nl/>\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.4\n" "X-Generator: Weblate 3.5.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -40,7 +40,7 @@ msgstr "Betaalde bestellingen"
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27 #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27
msgid "Total revenue" msgid "Total revenue"
msgstr "Volledige omzet" msgstr "Totaalomzet"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
@@ -226,13 +226,11 @@ msgstr "Aantal"
#: pretix/static/pretixcontrol/js/ui/question.js:120 #: pretix/static/pretixcontrol/js/ui/question.js:120
msgid "Yes" msgid "Yes"
msgstr "" msgstr "Ja"
#: pretix/static/pretixcontrol/js/ui/question.js:121 #: pretix/static/pretixcontrol/js/ui/question.js:121
#, fuzzy
#| msgid "None"
msgid "No" msgid "No"
msgstr "Geen" msgstr "Nee"
#: pretix/static/pretixcontrol/js/ui/subevent.js:108 #: pretix/static/pretixcontrol/js/ui/subevent.js:108
msgid "(one more date)" msgid "(one more date)"
@@ -294,12 +292,12 @@ msgstr "plus %(rate)s% %(taxname)s"
#: pretix/static/pretixpresale/js/widget/widget.js:21 #: pretix/static/pretixpresale/js/widget/widget.js:21
msgctxt "widget" msgctxt "widget"
msgid "incl. taxes" msgid "incl. taxes"
msgstr "" msgstr "incl. belasting"
#: pretix/static/pretixpresale/js/widget/widget.js:22 #: pretix/static/pretixpresale/js/widget/widget.js:22
msgctxt "widget" msgctxt "widget"
msgid "plus taxes" msgid "plus taxes"
msgstr "" msgstr "excl. belasting"
#: pretix/static/pretixpresale/js/widget/widget.js:23 #: pretix/static/pretixpresale/js/widget/widget.js:23
#, javascript-format #, javascript-format
@@ -394,102 +392,100 @@ msgid "See variations"
msgstr "Zie variaties" msgstr "Zie variaties"
#: pretix/static/pretixpresale/js/widget/widget.js:41 #: pretix/static/pretixpresale/js/widget/widget.js:41
#, fuzzy
#| msgid "Use a different name internally"
msgctxt "widget" msgctxt "widget"
msgid "Choose a different event" msgid "Choose a different event"
msgstr "Gebruik intern een andere naam" msgstr "Ander evenement kiezen"
#: pretix/static/pretixpresale/js/widget/widget.js:42 #: pretix/static/pretixpresale/js/widget/widget.js:42
msgctxt "widget" msgctxt "widget"
msgid "Back" msgid "Back"
msgstr "" msgstr "Terug"
#: pretix/static/pretixpresale/js/widget/widget.js:43 #: pretix/static/pretixpresale/js/widget/widget.js:43
msgctxt "widget" msgctxt "widget"
msgid "Next month" msgid "Next month"
msgstr "" msgstr "Volgende maand"
#: pretix/static/pretixpresale/js/widget/widget.js:44 #: pretix/static/pretixpresale/js/widget/widget.js:44
msgctxt "widget" msgctxt "widget"
msgid "Previous month" msgid "Previous month"
msgstr "" msgstr "Vorige maand"
#: pretix/static/pretixpresale/js/widget/widget.js:46 #: pretix/static/pretixpresale/js/widget/widget.js:46
msgid "Mo" msgid "Mo"
msgstr "" msgstr "Ma"
#: pretix/static/pretixpresale/js/widget/widget.js:47 #: pretix/static/pretixpresale/js/widget/widget.js:47
msgid "Tu" msgid "Tu"
msgstr "" msgstr "Di"
#: pretix/static/pretixpresale/js/widget/widget.js:48 #: pretix/static/pretixpresale/js/widget/widget.js:48
msgid "We" msgid "We"
msgstr "" msgstr "Wo"
#: pretix/static/pretixpresale/js/widget/widget.js:49 #: pretix/static/pretixpresale/js/widget/widget.js:49
msgid "Th" msgid "Th"
msgstr "" msgstr "Do"
#: pretix/static/pretixpresale/js/widget/widget.js:50 #: pretix/static/pretixpresale/js/widget/widget.js:50
msgid "Fr" msgid "Fr"
msgstr "" msgstr "Vr"
#: pretix/static/pretixpresale/js/widget/widget.js:51 #: pretix/static/pretixpresale/js/widget/widget.js:51
msgid "Sa" msgid "Sa"
msgstr "" msgstr "Za"
#: pretix/static/pretixpresale/js/widget/widget.js:52 #: pretix/static/pretixpresale/js/widget/widget.js:52
msgid "Su" msgid "Su"
msgstr "" msgstr "Zo"
#: pretix/static/pretixpresale/js/widget/widget.js:55 #: pretix/static/pretixpresale/js/widget/widget.js:55
msgid "January" msgid "January"
msgstr "" msgstr "Januari"
#: pretix/static/pretixpresale/js/widget/widget.js:56 #: pretix/static/pretixpresale/js/widget/widget.js:56
msgid "February" msgid "February"
msgstr "" msgstr "Februari"
#: pretix/static/pretixpresale/js/widget/widget.js:57 #: pretix/static/pretixpresale/js/widget/widget.js:57
msgid "March" msgid "March"
msgstr "" msgstr "Maart"
#: pretix/static/pretixpresale/js/widget/widget.js:58 #: pretix/static/pretixpresale/js/widget/widget.js:58
msgid "April" msgid "April"
msgstr "" msgstr "April"
#: pretix/static/pretixpresale/js/widget/widget.js:59 #: pretix/static/pretixpresale/js/widget/widget.js:59
msgid "May" msgid "May"
msgstr "" msgstr "Mei"
#: pretix/static/pretixpresale/js/widget/widget.js:60 #: pretix/static/pretixpresale/js/widget/widget.js:60
msgid "June" msgid "June"
msgstr "" msgstr "Juni"
#: pretix/static/pretixpresale/js/widget/widget.js:61 #: pretix/static/pretixpresale/js/widget/widget.js:61
msgid "July" msgid "July"
msgstr "" msgstr "Juli"
#: pretix/static/pretixpresale/js/widget/widget.js:62 #: pretix/static/pretixpresale/js/widget/widget.js:62
msgid "August" msgid "August"
msgstr "" msgstr "Augustus"
#: pretix/static/pretixpresale/js/widget/widget.js:63 #: pretix/static/pretixpresale/js/widget/widget.js:63
msgid "September" msgid "September"
msgstr "" msgstr "September"
#: pretix/static/pretixpresale/js/widget/widget.js:64 #: pretix/static/pretixpresale/js/widget/widget.js:64
msgid "October" msgid "October"
msgstr "" msgstr "Oktober"
#: pretix/static/pretixpresale/js/widget/widget.js:65 #: pretix/static/pretixpresale/js/widget/widget.js:65
msgid "November" msgid "November"
msgstr "" msgstr "November"
#: pretix/static/pretixpresale/js/widget/widget.js:66 #: pretix/static/pretixpresale/js/widget/widget.js:66
msgid "December" msgid "December"
msgstr "" msgstr "December"
#~ msgid "" #~ msgid ""
#~ "Your request has been queued on the server and will now be processed. If " #~ "Your request has been queued on the server and will now be processed. If "

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Automatically generated\n"
"Language-Team: none\n" "Language-Team: none\n"

File diff suppressed because it is too large Load Diff

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2019-03-13 15:49+0000\n" "PO-Revision-Date: 2019-03-27 01:00+0000\n"
"Last-Translator: Maarten van den Berg <maartenberg1@gmail.com>\n" "Last-Translator: Maarten van den Berg <maartenberg1@gmail.com>\n"
"Language-Team: Dutch (informal) <https://translate.pretix.eu/projects/pretix/" "Language-Team: Dutch (informal) <https://translate.pretix.eu/projects/pretix/"
"pretix-js/nl_Informal/>\n" "pretix-js/nl_Informal/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.4\n" "X-Generator: Weblate 3.5.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -41,7 +41,7 @@ msgstr "Betaalde bestellingen"
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27 #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27
msgid "Total revenue" msgid "Total revenue"
msgstr "Volledige omzet" msgstr "Totaalomzet"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:12
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
@@ -228,13 +228,11 @@ msgstr "Aantal"
#: pretix/static/pretixcontrol/js/ui/question.js:120 #: pretix/static/pretixcontrol/js/ui/question.js:120
msgid "Yes" msgid "Yes"
msgstr "" msgstr "Ja"
#: pretix/static/pretixcontrol/js/ui/question.js:121 #: pretix/static/pretixcontrol/js/ui/question.js:121
#, fuzzy
#| msgid "None"
msgid "No" msgid "No"
msgstr "Geen" msgstr "Nee"
#: pretix/static/pretixcontrol/js/ui/subevent.js:108 #: pretix/static/pretixcontrol/js/ui/subevent.js:108
msgid "(one more date)" msgid "(one more date)"
@@ -296,12 +294,12 @@ msgstr "plus %(rate)s% %(taxname)s"
#: pretix/static/pretixpresale/js/widget/widget.js:21 #: pretix/static/pretixpresale/js/widget/widget.js:21
msgctxt "widget" msgctxt "widget"
msgid "incl. taxes" msgid "incl. taxes"
msgstr "" msgstr "incl. belasting"
#: pretix/static/pretixpresale/js/widget/widget.js:22 #: pretix/static/pretixpresale/js/widget/widget.js:22
msgctxt "widget" msgctxt "widget"
msgid "plus taxes" msgid "plus taxes"
msgstr "" msgstr "excl. belasting"
#: pretix/static/pretixpresale/js/widget/widget.js:23 #: pretix/static/pretixpresale/js/widget/widget.js:23
#, javascript-format #, javascript-format
@@ -396,99 +394,97 @@ msgid "See variations"
msgstr "Zie variaties" msgstr "Zie variaties"
#: pretix/static/pretixpresale/js/widget/widget.js:41 #: pretix/static/pretixpresale/js/widget/widget.js:41
#, fuzzy
#| msgid "Use a different name internally"
msgctxt "widget" msgctxt "widget"
msgid "Choose a different event" msgid "Choose a different event"
msgstr "Gebruik intern een andere naam" msgstr "Ander evenement kiezen"
#: pretix/static/pretixpresale/js/widget/widget.js:42 #: pretix/static/pretixpresale/js/widget/widget.js:42
msgctxt "widget" msgctxt "widget"
msgid "Back" msgid "Back"
msgstr "" msgstr "Terug"
#: pretix/static/pretixpresale/js/widget/widget.js:43 #: pretix/static/pretixpresale/js/widget/widget.js:43
msgctxt "widget" msgctxt "widget"
msgid "Next month" msgid "Next month"
msgstr "" msgstr "Volgende maand"
#: pretix/static/pretixpresale/js/widget/widget.js:44 #: pretix/static/pretixpresale/js/widget/widget.js:44
msgctxt "widget" msgctxt "widget"
msgid "Previous month" msgid "Previous month"
msgstr "" msgstr "Vorige maand"
#: pretix/static/pretixpresale/js/widget/widget.js:46 #: pretix/static/pretixpresale/js/widget/widget.js:46
msgid "Mo" msgid "Mo"
msgstr "" msgstr "Ma"
#: pretix/static/pretixpresale/js/widget/widget.js:47 #: pretix/static/pretixpresale/js/widget/widget.js:47
msgid "Tu" msgid "Tu"
msgstr "" msgstr "Di"
#: pretix/static/pretixpresale/js/widget/widget.js:48 #: pretix/static/pretixpresale/js/widget/widget.js:48
msgid "We" msgid "We"
msgstr "" msgstr "Wo"
#: pretix/static/pretixpresale/js/widget/widget.js:49 #: pretix/static/pretixpresale/js/widget/widget.js:49
msgid "Th" msgid "Th"
msgstr "" msgstr "Do"
#: pretix/static/pretixpresale/js/widget/widget.js:50 #: pretix/static/pretixpresale/js/widget/widget.js:50
msgid "Fr" msgid "Fr"
msgstr "" msgstr "Vr"
#: pretix/static/pretixpresale/js/widget/widget.js:51 #: pretix/static/pretixpresale/js/widget/widget.js:51
msgid "Sa" msgid "Sa"
msgstr "" msgstr "Za"
#: pretix/static/pretixpresale/js/widget/widget.js:52 #: pretix/static/pretixpresale/js/widget/widget.js:52
msgid "Su" msgid "Su"
msgstr "" msgstr "Zo"
#: pretix/static/pretixpresale/js/widget/widget.js:55 #: pretix/static/pretixpresale/js/widget/widget.js:55
msgid "January" msgid "January"
msgstr "" msgstr "Januari"
#: pretix/static/pretixpresale/js/widget/widget.js:56 #: pretix/static/pretixpresale/js/widget/widget.js:56
msgid "February" msgid "February"
msgstr "" msgstr "Februari"
#: pretix/static/pretixpresale/js/widget/widget.js:57 #: pretix/static/pretixpresale/js/widget/widget.js:57
msgid "March" msgid "March"
msgstr "" msgstr "Maart"
#: pretix/static/pretixpresale/js/widget/widget.js:58 #: pretix/static/pretixpresale/js/widget/widget.js:58
msgid "April" msgid "April"
msgstr "" msgstr "April"
#: pretix/static/pretixpresale/js/widget/widget.js:59 #: pretix/static/pretixpresale/js/widget/widget.js:59
msgid "May" msgid "May"
msgstr "" msgstr "Mei"
#: pretix/static/pretixpresale/js/widget/widget.js:60 #: pretix/static/pretixpresale/js/widget/widget.js:60
msgid "June" msgid "June"
msgstr "" msgstr "Juni"
#: pretix/static/pretixpresale/js/widget/widget.js:61 #: pretix/static/pretixpresale/js/widget/widget.js:61
msgid "July" msgid "July"
msgstr "" msgstr "Juli"
#: pretix/static/pretixpresale/js/widget/widget.js:62 #: pretix/static/pretixpresale/js/widget/widget.js:62
msgid "August" msgid "August"
msgstr "" msgstr "Augustus"
#: pretix/static/pretixpresale/js/widget/widget.js:63 #: pretix/static/pretixpresale/js/widget/widget.js:63
msgid "September" msgid "September"
msgstr "" msgstr "September"
#: pretix/static/pretixpresale/js/widget/widget.js:64 #: pretix/static/pretixpresale/js/widget/widget.js:64
msgid "October" msgid "October"
msgstr "" msgstr "Oktober"
#: pretix/static/pretixpresale/js/widget/widget.js:65 #: pretix/static/pretixpresale/js/widget/widget.js:65
msgid "November" msgid "November"
msgstr "" msgstr "November"
#: pretix/static/pretixpresale/js/widget/widget.js:66 #: pretix/static/pretixpresale/js/widget/widget.js:66
msgid "December" msgid "December"
msgstr "" msgstr "December"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2019-03-15 11:19+0000\n" "PO-Revision-Date: 2019-03-15 11:19+0000\n"
"Last-Translator: Serge Bazanski <q3k@hackerspace.pl>\n" "Last-Translator: Serge Bazanski <q3k@hackerspace.pl>\n"
"Language-Team: Polish <https://translate.pretix.eu/projects/pretix/pretix-js/" "Language-Team: Polish <https://translate.pretix.eu/projects/pretix/pretix-js/"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Automatically generated\n"
"Language-Team: none\n" "Language-Team: none\n"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2019-03-19 09:00+0000\n" "PO-Revision-Date: 2019-03-19 09:00+0000\n"
"Last-Translator: Vitor Reis <vitor.reis7@gmail.com>\n" "Last-Translator: Vitor Reis <vitor.reis7@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/" "Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2019-01-02 08:21+0000\n" "PO-Revision-Date: 2019-01-02 08:21+0000\n"
"Last-Translator: Alexey Zh <write2aracon@gmail.com>\n" "Last-Translator: Alexey Zh <write2aracon@gmail.com>\n"
"Language-Team: Russian <https://translate.pretix.eu/projects/pretix/pretix-" "Language-Team: Russian <https://translate.pretix.eu/projects/pretix/pretix-"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2018-09-03 06:36+0000\n" "PO-Revision-Date: 2018-09-03 06:36+0000\n"
"Last-Translator: Yunus Fırat Pişkin <firat.piskin@idvlabs.com>\n" "Last-Translator: Yunus Fırat Pişkin <firat.piskin@idvlabs.com>\n"
"Language-Team: Turkish <https://translate.pretix.eu/projects/pretix/pretix-" "Language-Team: Turkish <https://translate.pretix.eu/projects/pretix/pretix-"

File diff suppressed because it is too large Load Diff

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-03-22 14:50+0000\n" "POT-Creation-Date: 2019-04-03 13:19+0000\n"
"PO-Revision-Date: 2019-03-19 09:00+0000\n" "PO-Revision-Date: 2019-03-28 14:00+0000\n"
"Last-Translator: yichengsd <sunzl@jxepub.com>\n" "Last-Translator: yichengsd <sunzl@jxepub.com>\n"
"Language-Team: Chinese (Simplified) <https://translate.pretix.eu/projects/" "Language-Team: Chinese (Simplified) <https://translate.pretix.eu/projects/"
"pretix/pretix-js/zh_Hans/>\n" "pretix/pretix-js/zh_Hans/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.4\n" "X-Generator: Weblate 3.5.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -219,13 +219,11 @@ msgstr "数量"
#: pretix/static/pretixcontrol/js/ui/question.js:120 #: pretix/static/pretixcontrol/js/ui/question.js:120
msgid "Yes" msgid "Yes"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:121 #: pretix/static/pretixcontrol/js/ui/question.js:121
#, fuzzy
#| msgid "None"
msgid "No" msgid "No"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/subevent.js:108 #: pretix/static/pretixcontrol/js/ui/subevent.js:108
msgid "(one more date)" msgid "(one more date)"
@@ -283,12 +281,12 @@ msgstr "另加 %(rate)s% %(taxname)s"
#: pretix/static/pretixpresale/js/widget/widget.js:21 #: pretix/static/pretixpresale/js/widget/widget.js:21
msgctxt "widget" msgctxt "widget"
msgid "incl. taxes" msgid "incl. taxes"
msgstr "" msgstr "包含税"
#: pretix/static/pretixpresale/js/widget/widget.js:22 #: pretix/static/pretixpresale/js/widget/widget.js:22
msgctxt "widget" msgctxt "widget"
msgid "plus taxes" msgid "plus taxes"
msgstr "" msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:23 #: pretix/static/pretixpresale/js/widget/widget.js:23
#, javascript-format #, javascript-format
@@ -381,102 +379,100 @@ msgid "See variations"
msgstr "查看变化" msgstr "查看变化"
#: pretix/static/pretixpresale/js/widget/widget.js:41 #: pretix/static/pretixpresale/js/widget/widget.js:41
#, fuzzy
#| msgid "Use a different name internally"
msgctxt "widget" msgctxt "widget"
msgid "Choose a different event" msgid "Choose a different event"
msgstr "在内部使用一个不同的名称" msgstr "选择一个不同的活动"
#: pretix/static/pretixpresale/js/widget/widget.js:42 #: pretix/static/pretixpresale/js/widget/widget.js:42
msgctxt "widget" msgctxt "widget"
msgid "Back" msgid "Back"
msgstr "" msgstr "后退"
#: pretix/static/pretixpresale/js/widget/widget.js:43 #: pretix/static/pretixpresale/js/widget/widget.js:43
msgctxt "widget" msgctxt "widget"
msgid "Next month" msgid "Next month"
msgstr "" msgstr "下个月"
#: pretix/static/pretixpresale/js/widget/widget.js:44 #: pretix/static/pretixpresale/js/widget/widget.js:44
msgctxt "widget" msgctxt "widget"
msgid "Previous month" msgid "Previous month"
msgstr "" msgstr "上个月"
#: pretix/static/pretixpresale/js/widget/widget.js:46 #: pretix/static/pretixpresale/js/widget/widget.js:46
msgid "Mo" msgid "Mo"
msgstr "" msgstr "周一"
#: pretix/static/pretixpresale/js/widget/widget.js:47 #: pretix/static/pretixpresale/js/widget/widget.js:47
msgid "Tu" msgid "Tu"
msgstr "" msgstr "周二"
#: pretix/static/pretixpresale/js/widget/widget.js:48 #: pretix/static/pretixpresale/js/widget/widget.js:48
msgid "We" msgid "We"
msgstr "" msgstr "周三"
#: pretix/static/pretixpresale/js/widget/widget.js:49 #: pretix/static/pretixpresale/js/widget/widget.js:49
msgid "Th" msgid "Th"
msgstr "" msgstr "周四"
#: pretix/static/pretixpresale/js/widget/widget.js:50 #: pretix/static/pretixpresale/js/widget/widget.js:50
msgid "Fr" msgid "Fr"
msgstr "" msgstr "周五"
#: pretix/static/pretixpresale/js/widget/widget.js:51 #: pretix/static/pretixpresale/js/widget/widget.js:51
msgid "Sa" msgid "Sa"
msgstr "" msgstr "周六"
#: pretix/static/pretixpresale/js/widget/widget.js:52 #: pretix/static/pretixpresale/js/widget/widget.js:52
msgid "Su" msgid "Su"
msgstr "" msgstr "周天"
#: pretix/static/pretixpresale/js/widget/widget.js:55 #: pretix/static/pretixpresale/js/widget/widget.js:55
msgid "January" msgid "January"
msgstr "" msgstr "一月"
#: pretix/static/pretixpresale/js/widget/widget.js:56 #: pretix/static/pretixpresale/js/widget/widget.js:56
msgid "February" msgid "February"
msgstr "" msgstr "二月"
#: pretix/static/pretixpresale/js/widget/widget.js:57 #: pretix/static/pretixpresale/js/widget/widget.js:57
msgid "March" msgid "March"
msgstr "" msgstr "三月"
#: pretix/static/pretixpresale/js/widget/widget.js:58 #: pretix/static/pretixpresale/js/widget/widget.js:58
msgid "April" msgid "April"
msgstr "" msgstr "四月"
#: pretix/static/pretixpresale/js/widget/widget.js:59 #: pretix/static/pretixpresale/js/widget/widget.js:59
msgid "May" msgid "May"
msgstr "" msgstr "五月"
#: pretix/static/pretixpresale/js/widget/widget.js:60 #: pretix/static/pretixpresale/js/widget/widget.js:60
msgid "June" msgid "June"
msgstr "" msgstr "六月"
#: pretix/static/pretixpresale/js/widget/widget.js:61 #: pretix/static/pretixpresale/js/widget/widget.js:61
msgid "July" msgid "July"
msgstr "" msgstr "七月"
#: pretix/static/pretixpresale/js/widget/widget.js:62 #: pretix/static/pretixpresale/js/widget/widget.js:62
msgid "August" msgid "August"
msgstr "" msgstr "八月"
#: pretix/static/pretixpresale/js/widget/widget.js:63 #: pretix/static/pretixpresale/js/widget/widget.js:63
msgid "September" msgid "September"
msgstr "" msgstr "九月"
#: pretix/static/pretixpresale/js/widget/widget.js:64 #: pretix/static/pretixpresale/js/widget/widget.js:64
msgid "October" msgid "October"
msgstr "" msgstr "十月"
#: pretix/static/pretixpresale/js/widget/widget.js:65 #: pretix/static/pretixpresale/js/widget/widget.js:65
msgid "November" msgid "November"
msgstr "" msgstr "十一月"
#: pretix/static/pretixpresale/js/widget/widget.js:66 #: pretix/static/pretixpresale/js/widget/widget.js:66
msgid "December" msgid "December"
msgstr "" msgstr "十二月"
#~ msgid "Ja" #~ msgid "Ja"
#~ msgstr "是" #~ msgstr "是"

View File

@@ -110,9 +110,13 @@
{% if not ev.presale_is_running %} {% if not ev.presale_is_running %}
<div class="alert alert-info"> <div class="alert alert-info">
{% if ev.presale_has_ended %} {% if ev.presale_has_ended %}
{% blocktrans trimmed %} {% if event.settings.presale_has_ended_text %}
The presale period for this event is over. {{ event.settings.presale_has_ended_text|rich_text }}
{% endblocktrans %} {% else %}
{% blocktrans trimmed %}
The presale period for this event is over.
{% endblocktrans %}
{% endif %}
{% elif event.settings.presale_start_show_date %} {% elif event.settings.presale_start_show_date %}
{% blocktrans trimmed with date=ev.presale_start|date:"SHORT_DATE_FORMAT" time=ev.presale_start|time:"TIME_FORMAT" %} {% blocktrans trimmed with date=ev.presale_start|date:"SHORT_DATE_FORMAT" time=ev.presale_start|time:"TIME_FORMAT" %}
The presale for this event will start on {{ date }} at {{ time }}. The presale for this event will start on {{ date }} at {{ time }}.

View File

@@ -426,9 +426,11 @@ class RedeemView(NoSearchIndexViewMixin, EventViewMixin, TemplateView):
) )
if self.request.event.settings.redirect_to_checkout_directly: if self.request.event.settings.redirect_to_checkout_directly:
context['cart_redirect'] = eventreverse(self.request.event, 'presale:event.checkout.start') context['cart_redirect'] = eventreverse(self.request.event, 'presale:event.checkout.start',
kwargs={'cart_namespace': kwargs.get('cart_namespace') or ''})
else: else:
context['cart_redirect'] = eventreverse(self.request.event, 'presale:event.index') context['cart_redirect'] = eventreverse(self.request.event, 'presale:event.index',
kwargs={'cart_namespace': kwargs.get('cart_namespace') or ''})
if context['cart_redirect'].startswith('https:'): if context['cart_redirect'].startswith('https:'):
context['cart_redirect'] = '/' + context['cart_redirect'].split('/', 3)[3] context['cart_redirect'] = '/' + context['cart_redirect'].split('/', 3)[3]

View File

@@ -277,7 +277,7 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
context['years'] = range(now().year - 2, now().year + 3) context['years'] = range(now().year - 2, now().year + 3)
else: else:
context['subevent_list'] = self.request.event.subevents_sorted( context['subevent_list'] = self.request.event.subevents_sorted(
self.request.event.subevents_annotated(self.request.sales_channel) filter_qs_by_attr(self.request.event.subevents_annotated(self.request.sales_channel), self.request)
) )
context['show_cart'] = ( context['show_cart'] = (
@@ -292,7 +292,8 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
) )
) )
if self.request.event.settings.redirect_to_checkout_directly: if self.request.event.settings.redirect_to_checkout_directly:
context['cart_redirect'] = eventreverse(self.request.event, 'presale:event.checkout.start') context['cart_redirect'] = eventreverse(self.request.event, 'presale:event.checkout.start',
kwargs={'cart_namespace': kwargs.get('cart_namespace') or ''})
if context['cart_redirect'].startswith('https:'): if context['cart_redirect'].startswith('https:'):
context['cart_redirect'] = '/' + context['cart_redirect'].split('/', 3)[3] context['cart_redirect'] = '/' + context['cart_redirect'].split('/', 3)[3]
else: else:

View File

@@ -35,6 +35,12 @@ def filter_qs_by_attr(qs, request):
if k.startswith("attr[") and k.endswith("]"): if k.startswith("attr[") and k.endswith("]"):
attrs[k[5:-1]] = v attrs[k[5:-1]] = v
skey = 'filter_qs_by_attr_{}_{}'.format(request.organizer.pk, request.event.pk if hasattr(request, 'event') else '')
if request.GET.get('attr_persist'):
request.session[skey] = attrs
elif skey in request.session:
attrs = request.session[skey]
props = { props = {
p.name: p for p in request.organizer.meta_properties.filter( p.name: p for p in request.organizer.meta_properties.filter(
name__in=attrs.keys() name__in=attrs.keys()

View File

@@ -437,7 +437,10 @@ class WidgetAPIProductList(EventListMixin, View):
if not ev.presale_is_running: if not ev.presale_is_running:
if ev.presale_has_ended: if ev.presale_has_ended:
data['error'] = ugettext('The presale period for this event is over.') if request.event.settings.presale_has_ended_text:
data['error'] = str(request.event.settings.presale_has_ended_text)
else:
data['error'] = ugettext('The presale period for this event is over.')
elif request.event.settings.presale_start_show_date: elif request.event.settings.presale_start_show_date:
data['error'] = ugettext('The presale for this event will start on %(date)s at %(time)s.') % { data['error'] = ugettext('The presale for this event will start on %(date)s at %(time)s.') % {
'date': date_format(ev.presale_start.astimezone(request.event.timezone), "SHORT_DATE_FORMAT"), 'date': date_format(ev.presale_start.astimezone(request.event.timezone), "SHORT_DATE_FORMAT"),

View File

@@ -395,12 +395,15 @@ ALL_LANGUAGES = [
('pt-br', _('Portuguese (Brazil)')), ('pt-br', _('Portuguese (Brazil)')),
('es', _('Spanish')), ('es', _('Spanish')),
('tr', _('Turkish')), ('tr', _('Turkish')),
('pl', _('Polish')),
('it', _('Italian')),
('zh-hans', _('Chinese (simplified)')),
] ]
LANGUAGES_OFFICIAL = { LANGUAGES_OFFICIAL = {
'en', 'de', 'de-informal' 'en', 'de', 'de-informal'
} }
LANGUAGES_INCUBATING = { LANGUAGES_INCUBATING = {
'pt-br', 'da' 'pt-br', 'da', 'pl', 'it'
} }
if DEBUG: if DEBUG:

View File

@@ -93,67 +93,6 @@ $(function () {
show = $("#id_type").val() == "B" && $("#id_required").prop("checked"); show = $("#id_type").val() == "B" && $("#id_required").prop("checked");
$(".alert-required-boolean").toggle(show); $(".alert-required-boolean").toggle(show);
update_default_value_field()
}
function update_default_value_field() {
let input = $('#id_default_value');
let parent = input.parent();
let field = input.prop("tagName") == 'DIV' ? input.children().first() : input;
let common_attrs = ' name="default_value" placeholder="' + field.attr('placeholder') + '" title="' + field.attr('title') + '" id="id_default_value"';
let value = field.val();
switch ($("#id_type").val()) {
case 'N':
input.replaceWith('<input type="number" class="form-control" value="' + value + '" ' + common_attrs + '>');
$('.form-group:has(#id_default_value)').show();
break;
case 'S':
input.replaceWith('<input type="text" maxlength="190" class="form-control" value="' + value + '" ' + common_attrs + '>');
$('.form-group:has(#id_default_value)').show();
break;
case 'T':
input.replaceWith('<textarea cols="40" rows="10" class="form-control" ' + common_attrs + '>' + value + '</textarea>');
$('.form-group:has(#id_default_value)').show();
break;
case 'B':
let checked = (value === 'True' || value === 'on' ? 'checked' : '');
input.replaceWith('<input type="checkbox" ' + common_attrs + ' ' + checked + '>');
$('.form-group:has(#id_default_value)').show();
break;
case 'D':
let dateField = input.replaceWith('<input type="text" class="form-control datepickerfield" value="' + value + '" ' + common_attrs + '>');
form_handlers(parent);
$('.form-group:has(#id_default_value)').show();
break;
case 'H':
let timeField = input.replaceWith('<input type="text" class="form-control timepickerfield" value="' + value + '" ' + common_attrs + '>');
form_handlers(parent);
$('.form-group:has(#id_default_value)').show();
break;
case 'W':
let split = value.split(' ');
let date, time;
if (split.length > 1) {
date = split[0];
time = split[1];
} else {
date = null;
time = null;
}
let dtField = input.replaceWith('<div class="splitdatetimerow" id="id_default_value">\n' +
'<input type="text" class="form-control splitdatetimepart datepickerfield" value="' + date + '" name="default_value_date" placeholder="' + field.attr('placeholder') + '" title="' + field.attr('title') + '">\n' +
'<input type="text" class="form-control splitdatetimepart timepickerfield" value="' + time + '" name="default_value_time" placeholder="' + field.attr('placeholder') + '" title="' + field.attr('title') + '">\n' +
'</div>\n');
form_handlers(parent);
$('.form-group:has(#id_default_value)').show();
break;
default:
// file, choice, and multiple choice are not implemented
$('.form-group:has(#id_default_value)').hide();
input.val('')
}
} }
var $val = $("#id_dependency_value"); var $val = $("#id_dependency_value");

View File

@@ -10,7 +10,7 @@ django-hierarkey==1.0.*,>=1.0.3
django-filter==2.0.* django-filter==2.0.*
reportlab==3.5.* reportlab==3.5.*
PyPDF2==1.26.* PyPDF2==1.26.*
Pillow Pillow==5.*
django-libsass django-libsass
libsass libsass
django-otp==0.4.* django-otp==0.4.*

View File

@@ -97,7 +97,7 @@ setup(
'django-hierarkey==1.0.*,>=1.0.2', 'django-hierarkey==1.0.*,>=1.0.2',
'django-filter==2.0.*', 'django-filter==2.0.*',
'reportlab==3.5.*', 'reportlab==3.5.*',
'Pillow', 'Pillow==5.*',
'PyPDF2==1.26.*', 'PyPDF2==1.26.*',
'django-libsass', 'django-libsass',
'libsass', 'libsass',

View File

@@ -72,7 +72,8 @@ def test_device_auth_valid(client, device):
@pytest.mark.django_db @pytest.mark.django_db
def test_device_auth_revoked(client, device): def test_device_auth_revoked(client, device):
client.credentials(HTTP_AUTHORIZATION='Device ' + device.api_token) client.credentials(HTTP_AUTHORIZATION='Device ' + device.api_token)
device.api_token = None device.revoked = True
device.save() device.save()
resp = client.get('/api/v1/organizers/') resp = client.get('/api/v1/organizers/')
assert resp.status_code == 401 assert resp.status_code == 401
assert str(resp.data['detail']) == "Device access has been revoked."

View File

@@ -145,4 +145,4 @@ def test_revoke_valid(device_client, device: Device):
resp = device_client.post('/api/v1/device/revoke') resp = device_client.post('/api/v1/device/revoke')
assert resp.status_code == 200 assert resp.status_code == 200
device.refresh_from_db() device.refresh_from_db()
assert not device.api_token assert device.revoked

View File

@@ -2295,6 +2295,14 @@ def test_order_create_quota_validation(token_client, organizer, event, item, quo
] ]
} }
res['force'] = True
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/'.format(
organizer.slug, event.slug
), format='json', data=res
)
assert resp.status_code == 201
@pytest.mark.django_db @pytest.mark.django_db
def test_order_create_quota_consume_cart(token_client, organizer, event, item, quota, question): def test_order_create_quota_consume_cart(token_client, organizer, event, item, quota, question):

View File

@@ -80,4 +80,4 @@ def test_revoke_device(event, admin_user, admin_team, device, client):
client.get('/control/organizer/dummy/device/{}/revoke'.format(device.pk)) client.get('/control/organizer/dummy/device/{}/revoke'.format(device.pk))
client.post('/control/organizer/dummy/device/{}/revoke'.format(device.pk), {}, follow=True) client.post('/control/organizer/dummy/device/{}/revoke'.format(device.pk), {}, follow=True)
device.refresh_from_db() device.refresh_from_db()
assert device.api_token is None assert device.revoked

View File

@@ -251,41 +251,6 @@ class QuestionsTest(ItemFormTest):
form_data) form_data)
assert not doc.select(".alert-success") assert not doc.select(".alert-success")
def test_set_default_value(self):
q = Question.objects.create(event=self.event1, question="What city are you from?", type=Question.TYPE_TEXT,
required=True)
doc = self.get_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, q.id))
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
form_data['default_value'] = 'Heidelberg'
doc = self.post_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, q.id),
form_data)
assert doc.select(".alert-success")
q.refresh_from_db()
assert q.default_value == 'Heidelberg'
def test_set_default_value_datetime(self):
q = Question.objects.create(event=self.event1, question="What city are you from?", type=Question.TYPE_DATETIME,
required=True)
doc = self.get_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, q.id))
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
form_data['default_value_date'] = '2019-01-01'
form_data['default_value_time'] = '10:00'
doc = self.post_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, q.id),
form_data)
assert doc.select(".alert-success")
q.refresh_from_db()
assert q.default_value == '2019-01-01T10:00:00+00:00'
def test_set_default_value_invalid(self):
q = Question.objects.create(event=self.event1, question="What city are you from?", type=Question.TYPE_DATE,
required=True)
doc = self.get_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, q.id))
form_data = extract_form_fields(doc.select('.container-fluid form')[0])
form_data['default_value'] = 'foobar'
doc = self.post_doc('/control/event/%s/%s/questions/%s/change' % (self.orga1.slug, self.event1.slug, q.id),
form_data)
assert not doc.select(".alert-success")
class QuotaTest(ItemFormTest): class QuotaTest(ItemFormTest):

View File

@@ -1985,59 +1985,6 @@ class QuestionsTestCase(BaseCheckoutTestCase, TestCase):
self.q3: 'False', self.q3: 'False',
}, should_fail=True) }, should_fail=True)
def test_datetime_defaultvalues(self):
""" Test timezone and format handling for default values """
q1 = Question.objects.create(
event=self.event, question='When did you wake up today?', type=Question.TYPE_TIME,
required=True, default_value='10:00'
)
q2 = Question.objects.create(
event=self.event, question='When was your last haircut?', type=Question.TYPE_DATE,
required=True, default_value='2019-01-01'
)
q3 = Question.objects.create(
event=self.event, question='When are you going to arrive?', type=Question.TYPE_DATETIME,
required=True, default_value='2019-01-01T10:00:00+00:00'
)
self.ticket.questions.add(q1)
self.ticket.questions.add(q2)
self.ticket.questions.add(q3)
cr = CartPosition.objects.create(
event=self.event, cart_id=self.session_key, item=self.ticket,
price=23, expires=now() + timedelta(minutes=10)
)
response = self.client.get('/%s/%s/checkout/questions/' % (self.orga.slug, self.event.slug), follow=True)
doc = BeautifulSoup(response.rendered_content, "lxml")
assert doc.select('input[name="%s-question_%s"]' % (cr.id, q1.id))[0]['value'] == '10:00'
assert doc.select('input[name="%s-question_%s"]' % (cr.id, q2.id))[0]['value'] == '2019-01-01'
assert doc.select('input[name="%s-question_%s_0"]' % (cr.id, q3.id))[0]['value'] == '2019-01-01'
assert doc.select('input[name="%s-question_%s_1"]' % (cr.id, q3.id))[0]['value'] == '10:00'
# set to different timezone, this should affect the datetime question's default value displayed
self.event.settings.set('timezone', 'US/Central')
response = self.client.get('/%s/%s/checkout/questions/' % (self.orga.slug, self.event.slug), follow=True)
doc = BeautifulSoup(response.rendered_content, "lxml")
assert doc.select('input[name="%s-question_%s"]' % (cr.id, q1.id))[0]['value'] == '10:00'
assert doc.select('input[name="%s-question_%s"]' % (cr.id, q2.id))[0]['value'] == '2019-01-01'
assert doc.select('input[name="%s-question_%s_0"]' % (cr.id, q3.id))[0]['value'] == '2019-01-01'
assert doc.select('input[name="%s-question_%s_1"]' % (cr.id, q3.id))[0]['value'] == '04:00'
# set locale, this should affect the date format
self.event.settings.set('locales', ['de'])
self.event.save()
response = self.client.get('/%s/%s/checkout/questions/' % (self.orga.slug, self.event.slug), follow=True)
doc = BeautifulSoup(response.rendered_content, "lxml")
assert doc.select('input[name="%s-question_%s"]' % (cr.id, q1.id))[0]['value'] == '10:00'
assert doc.select('input[name="%s-question_%s"]' % (cr.id, q2.id))[0]['value'] == '01.01.2019'
assert doc.select('input[name="%s-question_%s_0"]' % (cr.id, q3.id))[0]['value'] == '01.01.2019'
assert doc.select('input[name="%s-question_%s_1"]' % (cr.id, q3.id))[0]['value'] == '04:00'
class CheckoutBundleTest(BaseCheckoutTestCase, TestCase): class CheckoutBundleTest(BaseCheckoutTestCase, TestCase):
def setUp(self): def setUp(self):