mirror of
https://github.com/pretix/pretix.git
synced 2025-12-20 16:32:26 +00:00
Upgrade to Django 3.0 and other dependencies (#1568)
* Upgrade Django to 3.0 and other dependencies to recent versions * Fix otp version contsraint * Remove six dependency * Resolve some warnings * Fix failing tests * Update django-countries * Resolve all RemovedInDjango31Warnings in test suite * Run isort * Fix import * Update PostgreSQL version on travis
This commit is contained in:
18
.travis.yml
18
.travis.yml
@@ -13,24 +13,24 @@ services:
|
|||||||
- postgresql
|
- postgresql
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- python: 3.7
|
- python: 3.8
|
||||||
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_sqlite.cfg
|
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_sqlite.cfg
|
||||||
- python: 3.7
|
- python: 3.8
|
||||||
env: JOB=tests-cov PRETIX_CONFIG_FILE=tests/travis_postgres.cfg
|
env: JOB=tests-cov PRETIX_CONFIG_FILE=tests/travis_postgres.cfg
|
||||||
- python: 3.7
|
- python: 3.8
|
||||||
env: JOB=style
|
env: JOB=style
|
||||||
- python: 3.7
|
- python: 3.8
|
||||||
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_mysql.cfg
|
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_mysql.cfg
|
||||||
- python: 3.7
|
- python: 3.8
|
||||||
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_postgres.cfg
|
|
||||||
- python: 3.5
|
|
||||||
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_postgres.cfg
|
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_postgres.cfg
|
||||||
- python: 3.7
|
- python: 3.7
|
||||||
|
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_postgres.cfg
|
||||||
|
- python: 3.8
|
||||||
env: JOB=doc-spelling
|
env: JOB=doc-spelling
|
||||||
- python: 3.7
|
- python: 3.8
|
||||||
env: JOB=translation-spelling
|
env: JOB=translation-spelling
|
||||||
addons:
|
addons:
|
||||||
postgresql: "9.4"
|
postgresql: "10"
|
||||||
mariadb: '10.3'
|
mariadb: '10.3'
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ solution with many things readily set-up, look at :ref:`dockersmallscale`.
|
|||||||
get it right. If you're not feeling comfortable managing a Linux server, check out our hosting and service
|
get it right. If you're not feeling comfortable managing a Linux server, check out our hosting and service
|
||||||
offers at `pretix.eu`_.
|
offers at `pretix.eu`_.
|
||||||
|
|
||||||
We tested this guide on the Linux distribution **Debian 8.0** but it should work very similar on other
|
We tested this guide on the Linux distribution **Debian 10.0** but it should work very similar on other
|
||||||
modern distributions, especially on all systemd-based ones.
|
modern distributions, especially on all systemd-based ones.
|
||||||
|
|
||||||
Requirements
|
Requirements
|
||||||
@@ -133,7 +133,7 @@ command if you're running MySQL::
|
|||||||
|
|
||||||
(venv)$ pip3 install "pretix[postgres]" gunicorn
|
(venv)$ pip3 install "pretix[postgres]" gunicorn
|
||||||
|
|
||||||
Note that you need Python 3.5 or newer. You can find out your Python version using ``python -V``.
|
Note that you need Python 3.6 or newer. You can find out your Python version using ``python -V``.
|
||||||
|
|
||||||
We also need to create a data directory::
|
We also need to create a data directory::
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ event-related views, there is also a signal that allows you to add the view to t
|
|||||||
|
|
||||||
from django.urls import resolve, reverse
|
from django.urls import resolve, reverse
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from pretix.control.signals import nav_event
|
from pretix.control.signals import nav_event
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ A working example would be::
|
|||||||
from pretix.base.plugins import PluginConfig
|
from pretix.base.plugins import PluginConfig
|
||||||
except ImportError:
|
except ImportError:
|
||||||
raise RuntimeError("Please use pretix 2.7 or above to run this plugin!")
|
raise RuntimeError("Please use pretix 2.7 or above to run this plugin!")
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class PaypalApp(PluginConfig):
|
class PaypalApp(PluginConfig):
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ We now need a way to translate the action codes like ``pretix.event.changed`` in
|
|||||||
strings. The :py:attr:`pretix.base.signals.logentry_display` signals allows you to do so. A simple
|
strings. The :py:attr:`pretix.base.signals.logentry_display` signals allows you to do so. A simple
|
||||||
implementation could look like::
|
implementation could look like::
|
||||||
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from pretix.base.signals import logentry_display
|
from pretix.base.signals import logentry_display
|
||||||
|
|
||||||
@receiver(signal=logentry_display)
|
@receiver(signal=logentry_display)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from datetime import timedelta
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from oauth2_provider.generators import (
|
from oauth2_provider.generators import (
|
||||||
generate_client_id, generate_client_secret,
|
generate_client_id, generate_client_secret,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from datetime import timedelta
|
|||||||
|
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy
|
from django.utils.translation import gettext_lazy
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@ class CartPositionCreateSerializer(I18nAwareModelSerializer):
|
|||||||
else validated_data.get('item').quotas.filter(subevent=validated_data.get('subevent')))
|
else validated_data.get('item').quotas.filter(subevent=validated_data.get('subevent')))
|
||||||
if len(new_quotas) == 0:
|
if len(new_quotas) == 0:
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
ugettext_lazy('The product "{}" is not assigned to a quota.').format(
|
gettext_lazy('The product "{}" is not assigned to a quota.').format(
|
||||||
str(validated_data.get('item'))
|
str(validated_data.get('item'))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -64,7 +64,7 @@ class CartPositionCreateSerializer(I18nAwareModelSerializer):
|
|||||||
avail = quota.availability()
|
avail = quota.availability()
|
||||||
if avail[0] != Quota.AVAILABILITY_OK or (avail[1] is not None and avail[1] < 1):
|
if avail[0] != Quota.AVAILABILITY_OK or (avail[1] is not None and avail[1] < 1):
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
ugettext_lazy('There is not enough quota available on quota "{}" to perform '
|
gettext_lazy('There is not enough quota available on quota "{}" to perform '
|
||||||
'the operation.').format(
|
'the operation.').format(
|
||||||
quota.name
|
quota.name
|
||||||
)
|
)
|
||||||
@@ -88,7 +88,7 @@ class CartPositionCreateSerializer(I18nAwareModelSerializer):
|
|||||||
else:
|
else:
|
||||||
validated_data['seat'] = seat
|
validated_data['seat'] = seat
|
||||||
if not seat.is_available(sales_channel=validated_data.get('sales_channel', 'web')):
|
if not seat.is_available(sales_channel=validated_data.get('sales_channel', 'web')):
|
||||||
raise ValidationError(ugettext_lazy('The selected seat "{seat}" is not available.').format(seat=seat.name))
|
raise ValidationError(gettext_lazy('The selected seat "{seat}" is not available.').format(seat=seat.name))
|
||||||
elif seated:
|
elif seated:
|
||||||
raise ValidationError('The specified product requires to choose a seat.')
|
raise ValidationError('The specified product requires to choose a seat.')
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from django.conf import settings
|
|||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django_countries.serializers import CountryFieldMixin
|
from django_countries.serializers import CountryFieldMixin
|
||||||
from hierarkey.proxy import HierarkeyProxy
|
from hierarkey.proxy import HierarkeyProxy
|
||||||
from pytz import common_timezones
|
from pytz import common_timezones
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from decimal import Decimal
|
|||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from pretix.api.serializers.event import MetaDataField
|
from pretix.api.serializers.event import MetaDataField
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from decimal import Decimal
|
|||||||
import pycountry
|
import pycountry
|
||||||
from django.db.models import F, Q
|
from django.db.models import F, Q
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy
|
from django.utils.translation import gettext_lazy
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
@@ -862,7 +862,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
|
|||||||
else:
|
else:
|
||||||
pos_data['seat'] = seat
|
pos_data['seat'] = seat
|
||||||
if (seat not in free_seats and not seat.is_available(sales_channel=validated_data.get('sales_channel', 'web'))) or seat in seats_seen:
|
if (seat not in free_seats and not seat.is_available(sales_channel=validated_data.get('sales_channel', 'web'))) or seat in seats_seen:
|
||||||
errs[i]['seat'] = [ugettext_lazy('The selected seat "{seat}" is not available.').format(seat=seat.name)]
|
errs[i]['seat'] = [gettext_lazy('The selected seat "{seat}" is not available.').format(seat=seat.name)]
|
||||||
seats_seen.add(seat)
|
seats_seen.add(seat)
|
||||||
elif seated:
|
elif seated:
|
||||||
errs[i]['seat'] = ['The specified product requires to choose a seat.']
|
errs[i]['seat'] = ['The specified product requires to choose a seat.']
|
||||||
@@ -877,7 +877,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
|
|||||||
if pos_data.get('variation')
|
if pos_data.get('variation')
|
||||||
else pos_data.get('item').quotas.filter(subevent=pos_data.get('subevent')))
|
else pos_data.get('item').quotas.filter(subevent=pos_data.get('subevent')))
|
||||||
if len(new_quotas) == 0:
|
if len(new_quotas) == 0:
|
||||||
errs[i]['item'] = [ugettext_lazy('The product "{}" is not assigned to a quota.').format(
|
errs[i]['item'] = [gettext_lazy('The product "{}" is not assigned to a quota.').format(
|
||||||
str(pos_data.get('item'))
|
str(pos_data.get('item'))
|
||||||
)]
|
)]
|
||||||
else:
|
else:
|
||||||
@@ -889,7 +889,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
|
|||||||
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(
|
gettext_lazy('There is not enough quota available on quota "{}" to perform the operation.').format(
|
||||||
quota.name
|
quota.name
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils.translation import get_language, ugettext_lazy as _
|
from django.utils.translation import get_language, gettext_lazy as _
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import logging
|
|||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from oauth2_provider.exceptions import OAuthToolkitError
|
from oauth2_provider.exceptions import OAuthToolkitError
|
||||||
from oauth2_provider.forms import AllowForm
|
from oauth2_provider.forms import AllowForm
|
||||||
from oauth2_provider.views import (
|
from oauth2_provider.views import (
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from django.db.models.functions import Coalesce, Concat
|
|||||||
from django.http import FileResponse, HttpResponse
|
from django.http import FileResponse, HttpResponse
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django.utils.timezone import make_aware, now
|
from django.utils.timezone import make_aware, now
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django_filters.rest_framework import DjangoFilterBackend, FilterSet
|
from django_filters.rest_framework import DjangoFilterBackend, FilterSet
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
from rest_framework import mixins, serializers, status, viewsets
|
from rest_framework import mixins, serializers, status, viewsets
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import requests
|
|||||||
from celery.exceptions import MaxRetriesExceededError
|
from celery.exceptions import MaxRetriesExceededError
|
||||||
from django.db.models import Exists, OuterRef, Q
|
from django.db.models import Exists, OuterRef, Q
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django_scopes import scope, scopes_disabled
|
from django_scopes import scope, scopes_disabled
|
||||||
from requests import RequestException
|
from requests import RequestException
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import logging
|
|||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.signals import register_sales_channels
|
from pretix.base.signals import register_sales_channels
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from django.core.mail.backends.smtp import EmailBackend
|
|||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.template.loader import get_template
|
from django.template.loader import get_template
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import get_language, ugettext_lazy as _
|
from django.utils.translation import get_language, gettext_lazy as _
|
||||||
from inlinestyler.utils import inline_css
|
from inlinestyler.utils import inline_css
|
||||||
|
|
||||||
from pretix.base.i18n import LazyCurrencyNumber, LazyDate, LazyNumber
|
from pretix.base.i18n import LazyCurrencyNumber, LazyDate, LazyNumber
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from typing import Tuple
|
|||||||
from defusedcsv import csv
|
from defusedcsv import csv
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.formats import localize
|
from django.utils.formats import localize
|
||||||
from django.utils.translation import ugettext, ugettext_lazy as _
|
from django.utils.translation import gettext, gettext_lazy as _
|
||||||
from openpyxl import Workbook
|
from openpyxl import Workbook
|
||||||
from openpyxl.cell.cell import KNOWN_TYPES
|
from openpyxl.cell.cell import KNOWN_TYPES
|
||||||
|
|
||||||
@@ -180,9 +180,9 @@ class MultiSheetListExporter(ListExporter):
|
|||||||
]
|
]
|
||||||
for s, l in self.sheets:
|
for s, l in self.sheets:
|
||||||
choices += [
|
choices += [
|
||||||
(s + ':default', str(l) + ' – ' + ugettext('CSV (with commas)')),
|
(s + ':default', str(l) + ' – ' + gettext('CSV (with commas)')),
|
||||||
(s + ':excel', str(l) + ' – ' + ugettext('CSV (Excel-style)')),
|
(s + ':excel', str(l) + ' – ' + gettext('CSV (Excel-style)')),
|
||||||
(s + ':semicolon', str(l) + ' – ' + ugettext('CSV (with semicolons)')),
|
(s + ':semicolon', str(l) + ' – ' + gettext('CSV (with semicolons)')),
|
||||||
]
|
]
|
||||||
ff = OrderedDict(
|
ff = OrderedDict(
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from zipfile import ZipFile
|
|||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.models import QuestionAnswer
|
from pretix.base.models import QuestionAnswer
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import dateutil
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.core.serializers.json import DjangoJSONEncoder
|
from django.core.serializers.json import DjangoJSONEncoder
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.translation import ugettext, ugettext_lazy
|
from django.utils.translation import gettext, gettext_lazy
|
||||||
|
|
||||||
from pretix.base.i18n import language
|
from pretix.base.i18n import language
|
||||||
from pretix.base.models import Invoice, OrderPayment
|
from pretix.base.models import Invoice, OrderPayment
|
||||||
@@ -79,7 +79,7 @@ class DekodiNREIExporter(BaseExporter):
|
|||||||
payments.append({
|
payments.append({
|
||||||
'PTID': '5',
|
'PTID': '5',
|
||||||
'PTN': 'Lastschrift',
|
'PTN': 'Lastschrift',
|
||||||
'PTNo4': ugettext('Event ticket {event}-{code}').format(
|
'PTNo4': gettext('Event ticket {event}-{code}').format(
|
||||||
event=self.event.slug.upper(),
|
event=self.event.slug.upper(),
|
||||||
code=invoice.order.code
|
code=invoice.order.code
|
||||||
),
|
),
|
||||||
@@ -199,18 +199,18 @@ class DekodiNREIExporter(BaseExporter):
|
|||||||
[
|
[
|
||||||
('date_from',
|
('date_from',
|
||||||
forms.DateField(
|
forms.DateField(
|
||||||
label=ugettext_lazy('Start date'),
|
label=gettext_lazy('Start date'),
|
||||||
widget=forms.DateInput(attrs={'class': 'datepickerfield'}),
|
widget=forms.DateInput(attrs={'class': 'datepickerfield'}),
|
||||||
required=False,
|
required=False,
|
||||||
help_text=ugettext_lazy('Only include invoices issued on or after this date. Note that the invoice date does '
|
help_text=gettext_lazy('Only include invoices issued on or after this date. Note that the invoice date does '
|
||||||
'not always correspond to the order or payment date.')
|
'not always correspond to the order or payment date.')
|
||||||
)),
|
)),
|
||||||
('date_to',
|
('date_to',
|
||||||
forms.DateField(
|
forms.DateField(
|
||||||
label=ugettext_lazy('End date'),
|
label=gettext_lazy('End date'),
|
||||||
widget=forms.DateInput(attrs={'class': 'datepickerfield'}),
|
widget=forms.DateInput(attrs={'class': 'datepickerfield'}),
|
||||||
required=False,
|
required=False,
|
||||||
help_text=ugettext_lazy('Only include invoices issued on or before this date. Note that the invoice date '
|
help_text=gettext_lazy('Only include invoices issued on or before this date. Note that the invoice date '
|
||||||
'does not always correspond to the order or payment date.')
|
'does not always correspond to the order or payment date.')
|
||||||
)),
|
)),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import dateutil.parser
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.db.models import Exists, OuterRef, Q
|
from django.db.models import Exists, OuterRef, Q
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.models import OrderPayment
|
from pretix.base.models import OrderPayment
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from collections import OrderedDict
|
|||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.models import OrderPosition
|
from pretix.base.models import OrderPosition
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from django.db.models import (
|
|||||||
)
|
)
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.formats import date_format
|
from django.utils.formats import date_format
|
||||||
from django.utils.translation import pgettext, ugettext as _, ugettext_lazy
|
from django.utils.translation import gettext as _, gettext_lazy, pgettext
|
||||||
|
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
InvoiceAddress, InvoiceLine, Order, OrderPosition, Question,
|
InvoiceAddress, InvoiceLine, Order, OrderPosition, Question,
|
||||||
@@ -22,7 +22,7 @@ from ..signals import register_data_exporters
|
|||||||
|
|
||||||
class OrderListExporter(MultiSheetListExporter):
|
class OrderListExporter(MultiSheetListExporter):
|
||||||
identifier = 'orderlist'
|
identifier = 'orderlist'
|
||||||
verbose_name = ugettext_lazy('Order data')
|
verbose_name = gettext_lazy('Order data')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def sheets(self):
|
def sheets(self):
|
||||||
@@ -414,7 +414,7 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
|
|
||||||
class PaymentListExporter(ListExporter):
|
class PaymentListExporter(ListExporter):
|
||||||
identifier = 'paymentlist'
|
identifier = 'paymentlist'
|
||||||
verbose_name = ugettext_lazy('Order payments and refunds')
|
verbose_name = gettext_lazy('Order payments and refunds')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def additional_form_fields(self):
|
def additional_form_fields(self):
|
||||||
@@ -485,7 +485,7 @@ class PaymentListExporter(ListExporter):
|
|||||||
|
|
||||||
class QuotaListExporter(ListExporter):
|
class QuotaListExporter(ListExporter):
|
||||||
identifier = 'quotalist'
|
identifier = 'quotalist'
|
||||||
verbose_name = ugettext_lazy('Quota availabilities')
|
verbose_name = gettext_lazy('Quota availabilities')
|
||||||
|
|
||||||
def iterate_list(self, form_data):
|
def iterate_list(self, form_data):
|
||||||
headers = [
|
headers = [
|
||||||
@@ -514,7 +514,7 @@ class QuotaListExporter(ListExporter):
|
|||||||
|
|
||||||
class InvoiceDataExporter(MultiSheetListExporter):
|
class InvoiceDataExporter(MultiSheetListExporter):
|
||||||
identifier = 'invoicedata'
|
identifier = 'invoicedata'
|
||||||
verbose_name = ugettext_lazy('Invoice data')
|
verbose_name = gettext_lazy('Invoice data')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def sheets(self):
|
def sheets(self):
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import logging
|
|||||||
import i18nfield.forms
|
import i18nfield.forms
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.forms.models import ModelFormMetaclass
|
from django.forms.models import ModelFormMetaclass
|
||||||
from django.utils import six
|
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from formtools.wizard.views import SessionWizardView
|
from formtools.wizard.views import SessionWizardView
|
||||||
from hierarkey.forms import HierarkeyForm
|
from hierarkey.forms import HierarkeyForm
|
||||||
@@ -25,7 +24,7 @@ class BaseI18nModelForm(i18nfield.forms.BaseI18nModelForm):
|
|||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class I18nModelForm(six.with_metaclass(ModelFormMetaclass, BaseI18nModelForm)):
|
class I18nModelForm(BaseI18nModelForm, metaclass=ModelFormMetaclass):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,10 @@ from django.conf import settings
|
|||||||
from django.contrib.auth.password_validation import (
|
from django.contrib.auth.password_validation import (
|
||||||
password_validators_help_texts, validate_password,
|
password_validators_help_texts, validate_password,
|
||||||
)
|
)
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.models import User
|
from pretix.base.models import User
|
||||||
|
from pretix.helpers.dicts import move_to_end
|
||||||
|
|
||||||
|
|
||||||
class LoginForm(forms.Form):
|
class LoginForm(forms.Form):
|
||||||
@@ -36,7 +37,7 @@ class LoginForm(forms.Form):
|
|||||||
if not settings.PRETIX_LONG_SESSIONS or backend.url:
|
if not settings.PRETIX_LONG_SESSIONS or backend.url:
|
||||||
del self.fields['keep_logged_in']
|
del self.fields['keep_logged_in']
|
||||||
else:
|
else:
|
||||||
self.fields.move_to_end('keep_logged_in')
|
move_to_end(self.fields, 'keep_logged_in')
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
if all(k in self.cleaned_data for k, f in self.fields.items() if f.required):
|
if all(k in self.cleaned_data for k, f in self.fields.items() if f.required):
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ from django.forms import Select
|
|||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import (
|
from django.utils.translation import (
|
||||||
get_language, pgettext_lazy, ugettext_lazy as _,
|
get_language, gettext_lazy as _, pgettext_lazy,
|
||||||
)
|
)
|
||||||
from django_countries import countries
|
from django_countries import countries
|
||||||
from django_countries.fields import Country, CountryField
|
from django_countries.fields import Country, CountryField
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from django.contrib.auth.password_validation import (
|
|||||||
password_validators_help_texts, validate_password,
|
password_validators_help_texts, validate_password,
|
||||||
)
|
)
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from pytz import common_timezones
|
from pytz import common_timezones
|
||||||
|
|
||||||
from pretix.base.models import User
|
from pretix.base.models import User
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import re
|
|||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.validators import BaseValidator
|
from django.core.validators import BaseValidator
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from django import forms
|
|||||||
from django.utils.formats import get_format
|
from django.utils.formats import get_format
|
||||||
from django.utils.functional import lazy
|
from django.utils.functional import lazy
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class DatePickerWidget(forms.DateInput):
|
class DatePickerWidget(forms.DateInput):
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from contextlib import contextmanager
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils import translation
|
from django.utils import translation
|
||||||
from django.utils.formats import date_format, number_format
|
from django.utils.formats import date_format, number_format
|
||||||
from django.utils.translation import ugettext
|
from django.utils.translation import gettext
|
||||||
from i18nfield.fields import ( # noqa
|
from i18nfield.fields import ( # noqa
|
||||||
I18nCharField, I18nTextarea, I18nTextField, I18nTextInput,
|
I18nCharField, I18nTextarea, I18nTextField, I18nTextInput,
|
||||||
)
|
)
|
||||||
@@ -69,6 +69,6 @@ class LazyLocaleException(Exception):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
if self.msgargs:
|
if self.msgargs:
|
||||||
return ugettext(self.msg) % self.msgargs
|
return gettext(self.msg) % self.msgargs
|
||||||
else:
|
else:
|
||||||
return ugettext(self.msg)
|
return gettext(self.msg)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from django.contrib.staticfiles import finders
|
|||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.formats import date_format, localize
|
from django.utils.formats import date_format, localize
|
||||||
from django.utils.translation import (
|
from django.utils.translation import (
|
||||||
get_language, pgettext, ugettext, ugettext_lazy,
|
get_language, gettext, gettext_lazy, pgettext,
|
||||||
)
|
)
|
||||||
from PIL.Image import BICUBIC
|
from PIL.Image import BICUBIC
|
||||||
from reportlab.lib import pagesizes
|
from reportlab.lib import pagesizes
|
||||||
@@ -423,7 +423,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
|
|||||||
canvas.saveState()
|
canvas.saveState()
|
||||||
canvas.setFont('OpenSansBd', 30)
|
canvas.setFont('OpenSansBd', 30)
|
||||||
canvas.setFillColorRGB(32, 0, 0)
|
canvas.setFillColorRGB(32, 0, 0)
|
||||||
canvas.drawRightString(self.pagesize[0] - 20 * mm, (297 - 100) * mm, ugettext('TEST MODE'))
|
canvas.drawRightString(self.pagesize[0] - 20 * mm, (297 - 100) * mm, gettext('TEST MODE'))
|
||||||
canvas.restoreState()
|
canvas.restoreState()
|
||||||
|
|
||||||
def _on_first_page(self, canvas: Canvas, doc):
|
def _on_first_page(self, canvas: Canvas, doc):
|
||||||
@@ -688,7 +688,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
|
|||||||
|
|
||||||
class Modern1Renderer(ClassicInvoiceRenderer):
|
class Modern1Renderer(ClassicInvoiceRenderer):
|
||||||
identifier = 'modern1'
|
identifier = 'modern1'
|
||||||
verbose_name = ugettext_lazy('Modern Invoice Renderer (pretix 2.7)')
|
verbose_name = gettext_lazy('Modern Invoice Renderer (pretix 2.7)')
|
||||||
bottom_margin = 16.9 * mm
|
bottom_margin = 16.9 * mm
|
||||||
top_margin = 16.9 * mm
|
top_margin = 16.9 * mm
|
||||||
right_margin = 20 * mm
|
right_margin = 20 * mm
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import django.core.validators
|
|||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
import pretix.base.validators
|
import pretix.base.validators
|
||||||
from pretix.base.i18n import language
|
from pretix.base.i18n import language
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from django.db import migrations, models
|
|||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from django.db.models.functions import Concat
|
from django.db.models.functions import Concat
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
import pretix.base.models.auth
|
import pretix.base.models.auth
|
||||||
import pretix.base.validators
|
import pretix.base.validators
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from django.db import models
|
|||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils.crypto import get_random_string, salted_hmac
|
from django.utils.crypto import get_random_string, salted_hmac
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django_otp.models import Device
|
from django_otp.models import Device
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
from u2flib_server.utils import (
|
from u2flib_server.utils import (
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import Exists, OuterRef
|
from django.db.models import Exists, OuterRef
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
from django_scopes import ScopedManager
|
from django_scopes import ScopedManager
|
||||||
|
|
||||||
from pretix.base.models import LoggedModel
|
from pretix.base.models import LoggedModel
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import string
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import Max
|
from django.db.models import Max
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django_scopes import ScopedManager, scopes_disabled
|
from django_scopes import ScopedManager, scopes_disabled
|
||||||
|
|
||||||
from pretix.base.models import LoggedModel
|
from pretix.base.models import LoggedModel
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from django.template.defaultfilters import date as _date
|
|||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.timezone import make_aware, now
|
from django.utils.timezone import make_aware, now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django_scopes import ScopedManager, scopes_disabled
|
from django_scopes import ScopedManager, scopes_disabled
|
||||||
from i18nfield.fields import I18nCharField, I18nTextField
|
from i18nfield.fields import I18nCharField, I18nTextField
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from django.core.validators import RegexValidator
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import Sum
|
from django.db.models import Sum
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.banlist import banned
|
from pretix.base.banlist import banned
|
||||||
from pretix.base.models import LoggedModel
|
from pretix.base.models import LoggedModel
|
||||||
@@ -83,6 +83,7 @@ class GiftCard(LoggedModel):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = (('secret', 'issuer'),)
|
unique_together = (('secret', 'issuer'),)
|
||||||
|
ordering = ("issuance",)
|
||||||
|
|
||||||
|
|
||||||
class GiftCardTransaction(models.Model):
|
class GiftCardTransaction(models.Model):
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from django.utils import formats
|
|||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.timezone import is_naive, make_aware, now
|
from django.utils.timezone import is_naive, make_aware, now
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from django_scopes import ScopedManager
|
from django_scopes import ScopedManager
|
||||||
from i18nfield.fields import I18nCharField, I18nTextField
|
from i18nfield.fields import I18nCharField, I18nTextField
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from django.db import models
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
|
|
||||||
from pretix.base.signals import logentry_object_link
|
from pretix.base.signals import logentry_object_link
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class NotificationSetting(models.Model):
|
class NotificationSetting(models.Model):
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ from django.utils.encoding import escape_uri_path
|
|||||||
from django.utils.formats import date_format
|
from django.utils.formats import date_format
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.timezone import make_aware, now
|
from django.utils.timezone import make_aware, now
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
from django_countries.fields import Country, CountryField
|
from django_countries.fields import Country, CountryField
|
||||||
from django_scopes import ScopedManager, scopes_disabled
|
from django_scopes import ScopedManager, scopes_disabled
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from django.db import models
|
|||||||
from django.db.models import Exists, OuterRef, Q
|
from django.db.models import Exists, OuterRef, Q
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.models.base import LoggedModel
|
from pretix.base.models.base import LoggedModel
|
||||||
from pretix.base.validators import OrganizerSlugBanlistValidator
|
from pretix.base.validators import OrganizerSlugBanlistValidator
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from django.db import models
|
|||||||
from django.db.models import F, Q
|
from django.db.models import F, Q
|
||||||
from django.utils.deconstruct import deconstructible
|
from django.utils.deconstruct import deconstructible
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import gettext, ugettext_lazy as _
|
from django.utils.translation import gettext, gettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.models import Event, Item, LoggedModel, Organizer, SubEvent
|
from pretix.base.models import Event, Item, LoggedModel, Organizer, SubEvent
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from decimal import Decimal
|
|||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.formats import localize
|
from django.utils.formats import localize
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django_countries.fields import CountryField
|
from django_countries.fields import CountryField
|
||||||
from i18nfield.fields import I18nCharField
|
from i18nfield.fields import I18nCharField
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from django.db.models import F, OuterRef, Q, Subquery, Sum
|
|||||||
from django.db.models.functions import Coalesce
|
from django.db.models.functions import Coalesce
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
from django_scopes import ScopedManager, scopes_disabled
|
from django_scopes import ScopedManager, scopes_disabled
|
||||||
|
|
||||||
from pretix.base.banlist import banned
|
from pretix.base.banlist import banned
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from datetime import timedelta
|
|||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import models, transaction
|
from django.db import models, transaction
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
from django_scopes import ScopedManager
|
from django_scopes import ScopedManager
|
||||||
|
|
||||||
from pretix.base.email import get_email_context
|
from pretix.base.email import get_email_context
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from collections import OrderedDict, namedtuple
|
|||||||
|
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.formats import date_format
|
from django.utils.formats import date_format
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
|
|
||||||
from pretix.base.models import Event, LogEntry
|
from pretix.base.models import Event, LogEntry
|
||||||
from pretix.base.signals import register_notification_types
|
from pretix.base.signals import register_notification_types
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from django.http import HttpRequest
|
|||||||
from django.template.loader import get_template
|
from django.template.loader import get_template
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
from django_countries import Countries
|
from django_countries import Countries
|
||||||
from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput
|
from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from django.dispatch import receiver
|
|||||||
from django.utils.formats import date_format
|
from django.utils.formats import date_format
|
||||||
from django.utils.html import conditional_escape
|
from django.utils.html import conditional_escape
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from PyPDF2 import PdfFileReader
|
from PyPDF2 import PdfFileReader
|
||||||
from pytz import timezone
|
from pytz import timezone
|
||||||
from reportlab.graphics import renderPDF
|
from reportlab.graphics import renderPDF
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from dateutil import parser
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
BASE_CHOICES = (
|
BASE_CHOICES = (
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from django.db import DatabaseError, transaction
|
|||||||
from django.db.models import Count, Exists, OuterRef, Q
|
from django.db.models import Count, Exists, OuterRef, Q
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.timezone import make_aware, now
|
from django.utils.timezone import make_aware, now
|
||||||
from django.utils.translation import pgettext_lazy, ugettext as _
|
from django.utils.translation import gettext as _, pgettext_lazy
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
|
||||||
from pretix.base.channels import get_all_sales_channels
|
from pretix.base.channels import get_all_sales_channels
|
||||||
@@ -213,7 +213,7 @@ class CartManager:
|
|||||||
has_variations=Count('variations'),
|
has_variations=Count('variations'),
|
||||||
).filter(
|
).filter(
|
||||||
id__in=[i for i in item_ids if i and i not in self._items_cache]
|
id__in=[i for i in item_ids if i and i not in self._items_cache]
|
||||||
)
|
).order_by()
|
||||||
})
|
})
|
||||||
self._variations_cache.update({
|
self._variations_cache.update({
|
||||||
v.pk: v
|
v.pk: v
|
||||||
@@ -221,7 +221,7 @@ class CartManager:
|
|||||||
'quotas'
|
'quotas'
|
||||||
).select_related('item', 'item__event').filter(
|
).select_related('item', 'item__event').filter(
|
||||||
id__in=[i for i in variation_ids if i and i not in self._variations_cache]
|
id__in=[i for i in variation_ids if i and i not in self._variations_cache]
|
||||||
)
|
).order_by()
|
||||||
})
|
})
|
||||||
|
|
||||||
def _check_max_cart_size(self):
|
def _check_max_cart_size(self):
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from django.db import transaction
|
|||||||
from django.db.models import Prefetch
|
from django.db.models import Prefetch
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
Checkin, CheckinList, Order, OrderPosition, Question, QuestionOption,
|
Checkin, CheckinList, Order, OrderPosition, Question, QuestionOption,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from typing import Any, Dict
|
|||||||
|
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.utils.timezone import override
|
from django.utils.timezone import override
|
||||||
from django.utils.translation import ugettext
|
from django.utils.translation import gettext
|
||||||
|
|
||||||
from pretix.base.i18n import LazyLocaleException, language
|
from pretix.base.i18n import LazyLocaleException, language
|
||||||
from pretix.base.models import CachedFile, Event, cachedfile_name
|
from pretix.base.models import CachedFile, Event, cachedfile_name
|
||||||
@@ -26,7 +26,7 @@ def export(event: Event, fileid: str, provider: str, form_data: Dict[str, Any])
|
|||||||
d = ex.render(form_data)
|
d = ex.render(form_data)
|
||||||
if d is None:
|
if d is None:
|
||||||
raise ExportError(
|
raise ExportError(
|
||||||
ugettext('Your export did not contain any data.')
|
gettext('Your export did not contain any data.')
|
||||||
)
|
)
|
||||||
file.filename, file.type, data = d
|
file.filename, file.type, data = d
|
||||||
file.file.save(cachedfile_name(file, file.filename), ContentFile(data))
|
file.file.save(cachedfile_name(file, file.filename), ContentFile(data))
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from django.dispatch import receiver
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.formats import date_format
|
from django.utils.formats import date_format
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import pgettext, ugettext as _
|
from django.utils.translation import gettext as _, pgettext
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from django_scopes import scope, scopes_disabled
|
from django_scopes import scope, scopes_disabled
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from django.core.mail import (
|
|||||||
)
|
)
|
||||||
from django.core.mail.message import SafeMIMEText
|
from django.core.mail.message import SafeMIMEText
|
||||||
from django.template.loader import get_template
|
from django.template.loader import get_template
|
||||||
from django.utils.translation import pgettext, ugettext as _
|
from django.utils.translation import gettext as _, pgettext
|
||||||
from django_scopes import scope, scopes_disabled
|
from django_scopes import scope, scopes_disabled
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from django.db.transaction import get_connection
|
|||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.timezone import make_aware, now
|
from django.utils.timezone import make_aware, now
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
|
||||||
from pretix.api.models import OAuthApplication
|
from pretix.api.models import OAuthApplication
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from django.db.models import Count, Q
|
from django.db.models import Count, Q
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.i18n import LazyLocaleException
|
from pretix.base.i18n import LazyLocaleException
|
||||||
from pretix.base.models import CartPosition, Seat
|
from pretix.base.models import CartPosition, Seat
|
||||||
@@ -25,7 +25,7 @@ def validate_plan_change(event, subevent, plan):
|
|||||||
subevent=subevent,
|
subevent=subevent,
|
||||||
).filter(
|
).filter(
|
||||||
Q(has_v=True) | Q(has_op=True)
|
Q(has_v=True) | Q(has_op=True)
|
||||||
).values_list('seat_guid', flat=True)
|
).values_list('seat_guid', flat=True).order_by()
|
||||||
)
|
)
|
||||||
new_seats = {
|
new_seats = {
|
||||||
ss.guid for ss in plan.iter_all_seats()
|
ss.guid for ss in plan.iter_all_seats()
|
||||||
@@ -40,7 +40,7 @@ def generate_seats(event, subevent, plan, mapping):
|
|||||||
current_seats = {}
|
current_seats = {}
|
||||||
for s in event.seats.select_related('product').annotate(
|
for s in event.seats.select_related('product').annotate(
|
||||||
has_op=Count('orderposition'), has_v=Count('vouchers')
|
has_op=Count('orderposition'), has_v=Count('vouchers')
|
||||||
).filter(subevent=subevent):
|
).filter(subevent=subevent).order_by():
|
||||||
if s.seat_guid in current_seats:
|
if s.seat_guid in current_seats:
|
||||||
s.delete() # Duplicates should not exist
|
s.delete() # Duplicates should not exist
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from dateutil.parser import parse
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.models import CachedFile, Event, cachedfile_name
|
from pretix.base.models import CachedFile, Event, cachedfile_name
|
||||||
from pretix.base.services.tasks import ProfiledEventTask
|
from pretix.base.services.tasks import ProfiledEventTask
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from django.db.models import (
|
|||||||
Case, Count, DateTimeField, F, Max, OuterRef, Subquery, Sum, Value, When,
|
Case, Count, DateTimeField, F, Max, OuterRef, Subquery, Sum, Value, When,
|
||||||
)
|
)
|
||||||
from django.utils.timezone import make_aware
|
from django.utils.timezone import make_aware
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.models import Event, Item, ItemCategory, Order, OrderPosition
|
from pretix.base.models import Event, Item, ItemCategory, Order, OrderPosition
|
||||||
from pretix.base.models.event import SubEvent
|
from pretix.base.models.event import SubEvent
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import os
|
|||||||
|
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
|
||||||
from pretix.base.i18n import language
|
from pretix.base.i18n import language
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from datetime import timedelta
|
|||||||
import requests
|
import requests
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _, ugettext_noop
|
from django.utils.translation import gettext_lazy as _, gettext_noop
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ def send_update_notification_email():
|
|||||||
gs.settings.update_check_email,
|
gs.settings.update_check_email,
|
||||||
_('pretix update available'),
|
_('pretix update available'),
|
||||||
LazyI18nString.from_gettext(
|
LazyI18nString.from_gettext(
|
||||||
ugettext_noop(
|
gettext_noop(
|
||||||
'Hi!\n\nAn update is available for pretix or for one of the plugins you installed in your '
|
'Hi!\n\nAn update is available for pretix or for one of the plugins you installed in your '
|
||||||
'pretix installation. Please click on the following link for more information:\n\n {url} \n\n'
|
'pretix installation. Please click on the following link for more information:\n\n {url} \n\n'
|
||||||
'You can always find information on the latest updates on the pretix.eu blog:\n\n'
|
'You can always find information on the latest updates on the pretix.eu blog:\n\n'
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from django.core.files import File
|
|||||||
from django.core.validators import MaxValueValidator, MinValueValidator
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
||||||
from django.db.models import Model
|
from django.db.models import Model
|
||||||
from django.utils.translation import (
|
from django.utils.translation import (
|
||||||
pgettext, pgettext_lazy, ugettext_lazy as _, ugettext_noop,
|
gettext_lazy as _, gettext_noop, pgettext, pgettext_lazy,
|
||||||
)
|
)
|
||||||
from django_countries import countries
|
from django_countries import countries
|
||||||
from hierarkey.models import GlobalSettingsBase, Hierarkey
|
from hierarkey.models import GlobalSettingsBase, Hierarkey
|
||||||
@@ -1006,7 +1006,7 @@ DEFAULTS = {
|
|||||||
},
|
},
|
||||||
'mail_text_resend_link': {
|
'mail_text_resend_link': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
you receive this message because you asked us to send you the link
|
you receive this message because you asked us to send you the link
|
||||||
to your order for {event}.
|
to your order for {event}.
|
||||||
@@ -1019,7 +1019,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_resend_all_links': {
|
'mail_text_resend_all_links': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
somebody requested a list of your orders for {event}.
|
somebody requested a list of your orders for {event}.
|
||||||
The list is as follows:
|
The list is as follows:
|
||||||
@@ -1031,7 +1031,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_free_attendee': {
|
'mail_text_order_free_attendee': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello {attendee_name},
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello {attendee_name},
|
||||||
|
|
||||||
you have been registered for {event} successfully.
|
you have been registered for {event} successfully.
|
||||||
|
|
||||||
@@ -1043,7 +1043,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_free': {
|
'mail_text_order_free': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
your order for {event} was successful. As you only ordered free products,
|
your order for {event} was successful. As you only ordered free products,
|
||||||
no payment is required.
|
no payment is required.
|
||||||
@@ -1060,7 +1060,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_placed_require_approval': {
|
'mail_text_order_placed_require_approval': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
we successfully received your order for {event}. Since you ordered
|
we successfully received your order for {event}. Since you ordered
|
||||||
a product that requires approval by the event organizer, we ask you to
|
a product that requires approval by the event organizer, we ask you to
|
||||||
@@ -1074,7 +1074,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_placed': {
|
'mail_text_order_placed': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
we successfully received your order for {event} with a total value
|
we successfully received your order for {event} with a total value
|
||||||
of {total_with_currency}. Please complete your payment before {expire_date}.
|
of {total_with_currency}. Please complete your payment before {expire_date}.
|
||||||
@@ -1093,7 +1093,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_placed_attendee': {
|
'mail_text_order_placed_attendee': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello {attendee_name},
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello {attendee_name},
|
||||||
|
|
||||||
a ticket for {event} has been ordered for you.
|
a ticket for {event} has been ordered for you.
|
||||||
|
|
||||||
@@ -1105,7 +1105,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_changed': {
|
'mail_text_order_changed': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
your order for {event} has been changed.
|
your order for {event} has been changed.
|
||||||
|
|
||||||
@@ -1117,7 +1117,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_paid': {
|
'mail_text_order_paid': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
we successfully received your payment for {event}. Thank you!
|
we successfully received your payment for {event}. Thank you!
|
||||||
|
|
||||||
@@ -1135,7 +1135,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_paid_attendee': {
|
'mail_text_order_paid_attendee': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello {attendee_name},
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello {attendee_name},
|
||||||
|
|
||||||
a ticket for {event} that has been ordered for you is now paid.
|
a ticket for {event} that has been ordered for you is now paid.
|
||||||
|
|
||||||
@@ -1151,7 +1151,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_expire_warning': {
|
'mail_text_order_expire_warning': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
we did not yet receive a full payment for your order for {event}.
|
we did not yet receive a full payment for your order for {event}.
|
||||||
Please keep in mind that we only guarantee your order if we receive
|
Please keep in mind that we only guarantee your order if we receive
|
||||||
@@ -1165,7 +1165,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_waiting_list': {
|
'mail_text_waiting_list': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
you submitted yourself to the waiting list for {event},
|
you submitted yourself to the waiting list for {event},
|
||||||
for the product {product}.
|
for the product {product}.
|
||||||
@@ -1188,7 +1188,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_canceled': {
|
'mail_text_order_canceled': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
your order {code} for {event} has been canceled.
|
your order {code} for {event} has been canceled.
|
||||||
|
|
||||||
@@ -1200,7 +1200,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_approved': {
|
'mail_text_order_approved': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
we approved your order for {event} and will be happy to welcome you
|
we approved your order for {event} and will be happy to welcome you
|
||||||
at our event.
|
at our event.
|
||||||
@@ -1216,7 +1216,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_denied': {
|
'mail_text_order_denied': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
unfortunately, we denied your order request for {event}.
|
unfortunately, we denied your order request for {event}.
|
||||||
|
|
||||||
@@ -1231,7 +1231,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_order_custom_mail': {
|
'mail_text_order_custom_mail': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
You can change your order details and view the status of your order at
|
You can change your order details and view the status of your order at
|
||||||
{url}
|
{url}
|
||||||
@@ -1249,7 +1249,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_download_reminder_attendee': {
|
'mail_text_download_reminder_attendee': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello {attendee_name},
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello {attendee_name},
|
||||||
|
|
||||||
you are registered for {event}.
|
you are registered for {event}.
|
||||||
|
|
||||||
@@ -1261,7 +1261,7 @@ Your {event} team"""))
|
|||||||
},
|
},
|
||||||
'mail_text_download_reminder': {
|
'mail_text_download_reminder': {
|
||||||
'type': LazyI18nString,
|
'type': LazyI18nString,
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
|
'default': LazyI18nString.from_gettext(gettext_noop("""Hello,
|
||||||
|
|
||||||
you bought a ticket for {event}.
|
you bought a ticket for {event}.
|
||||||
|
|
||||||
@@ -1391,7 +1391,7 @@ Your {event} team"""))
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
'checkout_email_helptext': {
|
'checkout_email_helptext': {
|
||||||
'default': LazyI18nString.from_gettext(ugettext_noop(
|
'default': LazyI18nString.from_gettext(gettext_noop(
|
||||||
'Make sure to enter a valid email address. We will send you an order '
|
'Make sure to enter a valid email address. We will send you an order '
|
||||||
'confirmation including a link that you need to access your order later.'
|
'confirmation including a link that you need to access your order later.'
|
||||||
)),
|
)),
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from django.db.models import Max, Q
|
|||||||
from django.db.models.functions import Greatest
|
from django.db.models.functions import Greatest
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from pretix.api.serializers.order import (
|
from pretix.api.serializers.order import (
|
||||||
AnswerSerializer, InvoiceAddressSerializer,
|
AnswerSerializer, InvoiceAddressSerializer,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from django import template
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core import signing
|
from django.core import signing
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.http import is_safe_url
|
from django.utils.http import url_has_allowed_host_and_scheme
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
|
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
@@ -66,7 +66,7 @@ ALLOWED_PROTOCOLS = ['http', 'https', 'mailto', 'tel']
|
|||||||
|
|
||||||
def safelink_callback(attrs, new=False):
|
def safelink_callback(attrs, new=False):
|
||||||
url = attrs.get((None, 'href'), '/')
|
url = attrs.get((None, 'href'), '/')
|
||||||
if not is_safe_url(url, allowed_hosts=None) and not url.startswith('mailto:') and not url.startswith('tel:'):
|
if not url_has_allowed_host_and_scheme(url, allowed_hosts=None) and not url.startswith('mailto:') and not url.startswith('tel:'):
|
||||||
signer = signing.Signer(salt='safe-redirect')
|
signer = signing.Signer(salt='safe-redirect')
|
||||||
attrs[None, 'href'] = reverse('redirect') + '?url=' + urllib.parse.quote(signer.sign(url))
|
attrs[None, 'href'] = reverse('redirect') + '?url=' + urllib.parse.quote(signer.sign(url))
|
||||||
attrs[None, 'target'] = '_blank'
|
attrs[None, 'target'] = '_blank'
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from zipfile import ZipFile
|
|||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.models import Event, Order, OrderPosition
|
from pretix.base.models import Event, Order, OrderPosition
|
||||||
from pretix.base.settings import SettingsSandbox
|
from pretix.base.settings import SettingsSandbox
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.utils.deconstruct import deconstructible
|
from django.utils.deconstruct import deconstructible
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class BanlistValidator:
|
class BanlistValidator:
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from django.middleware.csrf import REASON_NO_CSRF_COOKIE, REASON_NO_REFERER
|
|||||||
from django.template import TemplateDoesNotExist, loader
|
from django.template import TemplateDoesNotExist, loader
|
||||||
from django.template.loader import get_template
|
from django.template.loader import get_template
|
||||||
from django.utils.functional import Promise
|
from django.utils.functional import Promise
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.decorators.csrf import requires_csrf_token
|
from django.views.decorators.csrf import requires_csrf_token
|
||||||
from sentry_sdk import last_event_id
|
from sentry_sdk import last_event_id
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from django.conf import settings
|
|||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.shortcuts import redirect, render
|
from django.shortcuts import redirect, render
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from pretix.celery_app import app
|
from pretix.celery_app import app
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from django.conf import settings
|
|||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.files import File
|
from django.core.files import File
|
||||||
from django.forms.utils import from_current_timezone
|
from django.forms.utils import from_current_timezone
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from ...base.forms import I18nModelForm
|
from ...base.forms import I18nModelForm
|
||||||
# Import for backwards compatibility with okd import paths
|
# Import for backwards compatibility with okd import paths
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from django.urls import reverse
|
|||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.timezone import get_current_timezone_name
|
from django.utils.timezone import get_current_timezone_name
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
from django_countries import Countries
|
from django_countries import Countries
|
||||||
from django_countries.fields import LazyTypedChoiceField
|
from django_countries.fields import LazyTypedChoiceField
|
||||||
from i18nfield.forms import (
|
from i18nfield.forms import (
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from django.db.models.functions import Coalesce, ExtractWeekDay
|
|||||||
from django.urls import reverse, reverse_lazy
|
from django.urls import reverse, reverse_lazy
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.timezone import get_current_timezone, make_aware, now
|
from django.utils.timezone import get_current_timezone, make_aware, now
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
|
|
||||||
from pretix.base.forms.widgets import DatePickerWidget
|
from pretix.base.forms.widgets import DatePickerWidget
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput
|
from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput
|
||||||
|
|
||||||
from pretix.base.forms import SettingsForm
|
from pretix.base.forms import SettingsForm
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from django.db.models import Max
|
|||||||
from django.forms.formsets import DELETION_FIELD_NAME
|
from django.forms.formsets import DELETION_FIELD_NAME
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import (
|
from django.utils.translation import (
|
||||||
pgettext_lazy, ugettext as __, ugettext_lazy as _,
|
gettext as __, gettext_lazy as _, pgettext_lazy,
|
||||||
)
|
)
|
||||||
from django_scopes.forms import (
|
from django_scopes.forms import (
|
||||||
SafeModelChoiceField, SafeModelMultipleChoiceField,
|
SafeModelChoiceField, SafeModelMultipleChoiceField,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from django.db import models
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.timezone import make_aware, now
|
from django.utils.timezone import make_aware, now
|
||||||
from django.utils.translation import (
|
from django.utils.translation import (
|
||||||
gettext_noop, pgettext_lazy, ugettext_lazy as _,
|
gettext_lazy as _, gettext_noop, pgettext_lazy,
|
||||||
)
|
)
|
||||||
from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput
|
from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from django.core.exceptions import ValidationError
|
|||||||
from django.core.validators import RegexValidator
|
from django.core.validators import RegexValidator
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
from django_scopes.forms import SafeModelMultipleChoiceField
|
from django_scopes.forms import SafeModelMultipleChoiceField
|
||||||
from i18nfield.forms import I18nFormField, I18nTextarea
|
from i18nfield.forms import I18nFormField, I18nTextarea
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from django.urls import reverse
|
|||||||
from django.utils.dates import MONTHS, WEEKDAYS
|
from django.utils.dates import MONTHS, WEEKDAYS
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
from i18nfield.forms import I18nInlineFormSet
|
from i18nfield.forms import I18nInlineFormSet
|
||||||
|
|
||||||
from pretix.base.forms import I18nModelForm
|
from pretix.base.forms import I18nModelForm
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from django.contrib.auth.password_validation import (
|
|||||||
password_validators_help_texts, validate_password,
|
password_validators_help_texts, validate_password,
|
||||||
)
|
)
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from pytz import common_timezones
|
from pytz import common_timezones
|
||||||
|
|
||||||
from pretix.base.models import User
|
from pretix.base.models import User
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
|||||||
from django.core.validators import EmailValidator
|
from django.core.validators import EmailValidator
|
||||||
from django.db.models.functions import Lower
|
from django.db.models.functions import Lower
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
from django_scopes.forms import SafeModelChoiceField
|
from django_scopes.forms import SafeModelChoiceField
|
||||||
|
|
||||||
from pretix.base.email import get_available_placeholders
|
from pretix.base.email import get_available_placeholders
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from django.urls import reverse
|
|||||||
from django.utils.formats import date_format
|
from django.utils.formats import date_format
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
|
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from django.shortcuts import get_object_or_404, redirect, resolve_url
|
|||||||
from django.template.response import TemplateResponse
|
from django.template.response import TemplateResponse
|
||||||
from django.urls import get_script_prefix, resolve, reverse
|
from django.urls import get_script_prefix, resolve, reverse
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django_scopes import scope
|
from django_scopes import scope
|
||||||
from hijack.templatetags.hijack_tags import is_hijacked
|
from hijack.templatetags.hijack_tags import is_hijacked
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
|
|
||||||
from pretix.control.signals import (
|
from pretix.control.signals import (
|
||||||
nav_event, nav_event_settings, nav_global, nav_organizer,
|
nav_event, nav_event_settings, nav_global, nav_organizer,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from urllib.parse import quote
|
|||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
|
||||||
def event_permission_required(permission):
|
def event_permission_required(permission):
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from django import template
|
from django import template
|
||||||
from django.template import Node
|
from django.template import Node
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from pretix.base.models import Event
|
from pretix.base.models import Event
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import warnings
|
|||||||
from django.core.paginator import (
|
from django.core.paginator import (
|
||||||
EmptyPage, PageNotAnInteger, UnorderedObjectListWarning,
|
EmptyPage, PageNotAnInteger, UnorderedObjectListWarning,
|
||||||
)
|
)
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import edit
|
from django.views.generic import edit
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ from django.db import transaction
|
|||||||
from django.shortcuts import redirect, render
|
from django.shortcuts import redirect, render
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.http import is_safe_url
|
from django.utils.http import url_has_allowed_host_and_scheme
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
from django_otp import match_token
|
from django_otp import match_token
|
||||||
|
|
||||||
@@ -44,13 +44,13 @@ def process_login(request, user, keep_logged_in):
|
|||||||
request.session['pretix_auth_2fa_user'] = user.pk
|
request.session['pretix_auth_2fa_user'] = user.pk
|
||||||
request.session['pretix_auth_2fa_time'] = str(int(time.time()))
|
request.session['pretix_auth_2fa_time'] = str(int(time.time()))
|
||||||
twofa_url = reverse('control:auth.login.2fa')
|
twofa_url = reverse('control:auth.login.2fa')
|
||||||
if next_url and is_safe_url(next_url, allowed_hosts=None):
|
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
|
||||||
twofa_url += '?next=' + quote(next_url)
|
twofa_url += '?next=' + quote(next_url)
|
||||||
return redirect(twofa_url)
|
return redirect(twofa_url)
|
||||||
else:
|
else:
|
||||||
auth_login(request, user)
|
auth_login(request, user)
|
||||||
request.session['pretix_auth_login_time'] = int(time.time())
|
request.session['pretix_auth_login_time'] = int(time.time())
|
||||||
if next_url and is_safe_url(next_url, allowed_hosts=None):
|
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
|
||||||
return redirect(next_url)
|
return redirect(next_url)
|
||||||
return redirect(reverse('control:index'))
|
return redirect(reverse('control:index'))
|
||||||
|
|
||||||
@@ -96,9 +96,9 @@ def logout(request):
|
|||||||
auth_logout(request)
|
auth_logout(request)
|
||||||
request.session['pretix_auth_login_time'] = 0
|
request.session['pretix_auth_login_time'] = 0
|
||||||
next = reverse('control:auth.login')
|
next = reverse('control:auth.login')
|
||||||
if 'next' in request.GET and is_safe_url(request.GET.get('next'), allowed_hosts=None):
|
if 'next' in request.GET and url_has_allowed_host_and_scheme(request.GET.get('next'), allowed_hosts=None):
|
||||||
next += '?next=' + quote(request.GET.get('next'))
|
next += '?next=' + quote(request.GET.get('next'))
|
||||||
if 'back' in request.GET and is_safe_url(request.GET.get('back'), allowed_hosts=None):
|
if 'back' in request.GET and url_has_allowed_host_and_scheme(request.GET.get('back'), allowed_hosts=None):
|
||||||
return redirect(request.GET.get('back'))
|
return redirect(request.GET.get('back'))
|
||||||
return redirect(next)
|
return redirect(next)
|
||||||
|
|
||||||
@@ -405,7 +405,7 @@ class Login2FAView(TemplateView):
|
|||||||
request.session['pretix_auth_login_time'] = int(time.time())
|
request.session['pretix_auth_login_time'] = int(time.time())
|
||||||
del request.session['pretix_auth_2fa_user']
|
del request.session['pretix_auth_2fa_user']
|
||||||
del request.session['pretix_auth_2fa_time']
|
del request.session['pretix_auth_2fa_time']
|
||||||
if "next" in request.GET and is_safe_url(request.GET.get("next"), allowed_hosts=None):
|
if "next" in request.GET and url_has_allowed_host_and_scheme(request.GET.get("next"), allowed_hosts=None):
|
||||||
return redirect(request.GET.get("next"))
|
return redirect(request.GET.get("next"))
|
||||||
return redirect(reverse('control:index'))
|
return redirect(reverse('control:index'))
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from django.shortcuts import get_object_or_404, redirect
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.timezone import is_aware, make_aware, now
|
from django.utils.timezone import is_aware, make_aware, now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import DeleteView, ListView
|
from django.views.generic import DeleteView, ListView
|
||||||
from pytz import UTC
|
from pytz import UTC
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ from django.utils import formats
|
|||||||
from django.utils.formats import date_format
|
from django.utils.formats import date_format
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import pgettext, ugettext_lazy as _, ungettext
|
from django.utils.translation import gettext_lazy as _, pgettext, ungettext
|
||||||
|
|
||||||
from pretix.base.decimal import round_decimal
|
from pretix.base.decimal import round_decimal
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ from django.urls import reverse
|
|||||||
from django.utils import translation
|
from django.utils import translation
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext, ugettext_lazy as _
|
from django.utils.translation import gettext, gettext_lazy as _
|
||||||
from django.views.generic import DeleteView, FormView, ListView
|
from django.views.generic import DeleteView, FormView, ListView
|
||||||
from django.views.generic.base import TemplateView, View
|
from django.views.generic.base import TemplateView, View
|
||||||
from django.views.generic.detail import SingleObjectMixin
|
from django.views.generic.detail import SingleObjectMixin
|
||||||
@@ -667,14 +667,14 @@ class MailSettingsRendererPreview(MailSettingsPreview):
|
|||||||
with rolledback_transaction():
|
with rolledback_transaction():
|
||||||
order = request.event.orders.create(status=Order.STATUS_PENDING, datetime=now(),
|
order = request.event.orders.create(status=Order.STATUS_PENDING, datetime=now(),
|
||||||
expires=now(), code="PREVIEW", total=119)
|
expires=now(), code="PREVIEW", total=119)
|
||||||
item = request.event.items.create(name=ugettext("Sample product"), default_price=42.23,
|
item = request.event.items.create(name=gettext("Sample product"), default_price=42.23,
|
||||||
description=ugettext("Sample product description"))
|
description=gettext("Sample product description"))
|
||||||
p = order.positions.create(item=item, attendee_name_parts={'_legacy': ugettext("John Doe")},
|
p = order.positions.create(item=item, attendee_name_parts={'_legacy': gettext("John Doe")},
|
||||||
price=item.default_price)
|
price=item.default_price)
|
||||||
v = renderers[request.GET.get('renderer')].render(
|
v = renderers[request.GET.get('renderer')].render(
|
||||||
v,
|
v,
|
||||||
str(request.event.settings.mail_text_signature),
|
str(request.event.settings.mail_text_signature),
|
||||||
ugettext('Your order: %(code)s') % {'code': order.code},
|
gettext('Your order: %(code)s') % {'code': order.code},
|
||||||
order,
|
order,
|
||||||
position=p
|
position=p
|
||||||
)
|
)
|
||||||
@@ -1058,7 +1058,7 @@ class TaxCreate(EventSettingsViewMixin, EventPermissionRequiredMixin, CreateView
|
|||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
return {
|
return {
|
||||||
'name': LazyI18nString.from_gettext(ugettext('VAT'))
|
'name': LazyI18nString.from_gettext(gettext('VAT'))
|
||||||
}
|
}
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
@@ -1317,9 +1317,9 @@ class QuickSetupView(FormView):
|
|||||||
tax_rule = self.request.event.tax_rules.first()
|
tax_rule = self.request.event.tax_rules.first()
|
||||||
if any(f not in self.formset.deleted_forms for f in self.formset):
|
if any(f not in self.formset.deleted_forms for f in self.formset):
|
||||||
category = self.request.event.categories.create(
|
category = self.request.event.categories.create(
|
||||||
name=LazyI18nString.from_gettext(ugettext('Tickets'))
|
name=LazyI18nString.from_gettext(gettext('Tickets'))
|
||||||
)
|
)
|
||||||
category.log_action('pretix.event.category.added', data={'name': ugettext('Tickets')},
|
category.log_action('pretix.event.category.added', data={'name': gettext('Tickets')},
|
||||||
user=self.request.user)
|
user=self.request.user)
|
||||||
|
|
||||||
subevent = self.request.event.subevents.first()
|
subevent = self.request.event.subevents.first()
|
||||||
@@ -1350,12 +1350,12 @@ class QuickSetupView(FormView):
|
|||||||
|
|
||||||
if form.cleaned_data['total_quota']:
|
if form.cleaned_data['total_quota']:
|
||||||
quota = self.request.event.quotas.create(
|
quota = self.request.event.quotas.create(
|
||||||
name=ugettext('Tickets'),
|
name=gettext('Tickets'),
|
||||||
size=form.cleaned_data['total_quota'],
|
size=form.cleaned_data['total_quota'],
|
||||||
subevent=subevent,
|
subevent=subevent,
|
||||||
)
|
)
|
||||||
quota.log_action('pretix.event.quota.added', user=self.request.user, data={
|
quota.log_action('pretix.event.quota.added', user=self.request.user, data={
|
||||||
'name': ugettext('Tickets'),
|
'name': gettext('Tickets'),
|
||||||
'size': quota.size
|
'size': quota.size
|
||||||
})
|
})
|
||||||
quota.items.add(*items)
|
quota.items.add(*items)
|
||||||
@@ -1381,12 +1381,12 @@ class QuickSetupView(FormView):
|
|||||||
event=self.request.event,
|
event=self.request.event,
|
||||||
initial=[
|
initial=[
|
||||||
{
|
{
|
||||||
'name': LazyI18nString.from_gettext(ugettext('Regular ticket')),
|
'name': LazyI18nString.from_gettext(gettext('Regular ticket')),
|
||||||
'default_price': Decimal('35.00'),
|
'default_price': Decimal('35.00'),
|
||||||
'quota': 100,
|
'quota': 100,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name': LazyI18nString.from_gettext(ugettext('Reduced ticket')),
|
'name': LazyI18nString.from_gettext(gettext('Reduced ticket')),
|
||||||
'default_price': Decimal('29.00'),
|
'default_price': Decimal('29.00'),
|
||||||
'quota': 50,
|
'quota': 50,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.shortcuts import get_object_or_404, redirect, reverse
|
from django.shortcuts import get_object_or_404, redirect, reverse
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views import View
|
from django.views import View
|
||||||
from django.views.generic import FormView, TemplateView
|
from django.views.generic import FormView, TemplateView
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from django.shortcuts import redirect
|
|||||||
from django.urls import resolve, reverse
|
from django.urls import resolve, reverse
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext, ugettext_lazy as _
|
from django.utils.translation import gettext, gettext_lazy as _
|
||||||
from django.views.generic import ListView
|
from django.views.generic import ListView
|
||||||
from django.views.generic.detail import DetailView, SingleObjectMixin
|
from django.views.generic.detail import DetailView, SingleObjectMixin
|
||||||
from django.views.generic.edit import DeleteView
|
from django.views.generic.edit import DeleteView
|
||||||
@@ -499,7 +499,7 @@ class QuestionView(EventPermissionRequiredMixin, QuestionMixin, ChartContainingV
|
|||||||
if self.object.type == Question.TYPE_FILE:
|
if self.object.type == Question.TYPE_FILE:
|
||||||
qs = [
|
qs = [
|
||||||
{
|
{
|
||||||
'answer': ugettext('File uploaded'),
|
'answer': gettext('File uploaded'),
|
||||||
'count': qs.filter(file__isnull=False).count(),
|
'count': qs.filter(file__isnull=False).count(),
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -523,7 +523,7 @@ class QuestionView(EventPermissionRequiredMixin, QuestionMixin, ChartContainingV
|
|||||||
if self.object.type == Question.TYPE_BOOLEAN:
|
if self.object.type == Question.TYPE_BOOLEAN:
|
||||||
for a in qs:
|
for a in qs:
|
||||||
a['alink'] = a['answer']
|
a['alink'] = a['answer']
|
||||||
a['answer'] = ugettext('Yes') if a['answer'] == 'True' else ugettext('No')
|
a['answer'] = gettext('Yes') if a['answer'] == 'True' else gettext('No')
|
||||||
a['answer_bool'] = a['answer'] == 'True'
|
a['answer_bool'] = a['answer'] == 'True'
|
||||||
elif self.object.type == Question.TYPE_COUNTRYCODE:
|
elif self.object.type == Question.TYPE_COUNTRYCODE:
|
||||||
for a in qs:
|
for a in qs:
|
||||||
@@ -724,45 +724,45 @@ class QuotaView(ChartContainingView, DetailView):
|
|||||||
|
|
||||||
data = [
|
data = [
|
||||||
{
|
{
|
||||||
'label': ugettext('Paid orders'),
|
'label': gettext('Paid orders'),
|
||||||
'value': self.object.count_paid_orders(),
|
'value': self.object.count_paid_orders(),
|
||||||
'sum': True,
|
'sum': True,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'label': ugettext('Pending orders'),
|
'label': gettext('Pending orders'),
|
||||||
'value': self.object.count_pending_orders(),
|
'value': self.object.count_pending_orders(),
|
||||||
'sum': True,
|
'sum': True,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'label': ugettext('Vouchers and waiting list reservations'),
|
'label': gettext('Vouchers and waiting list reservations'),
|
||||||
'value': self.object.count_blocking_vouchers(),
|
'value': self.object.count_blocking_vouchers(),
|
||||||
'sum': True,
|
'sum': True,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'label': ugettext('Current user\'s carts'),
|
'label': gettext('Current user\'s carts'),
|
||||||
'value': self.object.count_in_cart(),
|
'value': self.object.count_in_cart(),
|
||||||
'sum': True,
|
'sum': True,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
sum_values = sum([d['value'] for d in data if d['sum']])
|
sum_values = sum([d['value'] for d in data if d['sum']])
|
||||||
s = self.object.size - sum_values if self.object.size is not None else ugettext('Infinite')
|
s = self.object.size - sum_values if self.object.size is not None else gettext('Infinite')
|
||||||
|
|
||||||
data.append({
|
data.append({
|
||||||
'label': ugettext('Available quota'),
|
'label': gettext('Available quota'),
|
||||||
'value': s,
|
'value': s,
|
||||||
'sum': False,
|
'sum': False,
|
||||||
'strong': True
|
'strong': True
|
||||||
})
|
})
|
||||||
data.append({
|
data.append({
|
||||||
'label': ugettext('Waiting list (pending)'),
|
'label': gettext('Waiting list (pending)'),
|
||||||
'value': self.object.count_waiting_list_pending(),
|
'value': self.object.count_waiting_list_pending(),
|
||||||
'sum': False,
|
'sum': False,
|
||||||
})
|
})
|
||||||
|
|
||||||
if self.object.size is not None:
|
if self.object.size is not None:
|
||||||
data.append({
|
data.append({
|
||||||
'label': ugettext('Currently for sale'),
|
'label': gettext('Currently for sale'),
|
||||||
'value': avail[1],
|
'value': avail[1],
|
||||||
'sum': False,
|
'sum': False,
|
||||||
'strong': True
|
'strong': True
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from django.shortcuts import redirect
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.translation import ugettext, ugettext_lazy as _
|
from django.utils.translation import gettext, gettext_lazy as _
|
||||||
from django.views import View
|
from django.views import View
|
||||||
from django.views.generic import ListView
|
from django.views.generic import ListView
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
@@ -284,7 +284,7 @@ class EventWizard(SafeSessionWizardView):
|
|||||||
if basics_data['tax_rate']:
|
if basics_data['tax_rate']:
|
||||||
if not event.settings.tax_rate_default or event.settings.tax_rate_default.rate != basics_data['tax_rate']:
|
if not event.settings.tax_rate_default or event.settings.tax_rate_default.rate != basics_data['tax_rate']:
|
||||||
event.settings.tax_rate_default = event.tax_rules.create(
|
event.settings.tax_rate_default = event.tax_rules.create(
|
||||||
name=LazyI18nString.from_gettext(ugettext('VAT')),
|
name=LazyI18nString.from_gettext(gettext('VAT')),
|
||||||
rate=basics_data['tax_rate']
|
rate=basics_data['tax_rate']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from django.contrib import messages
|
|||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import DetailView, ListView
|
from django.views.generic import DetailView, ListView
|
||||||
from oauth2_provider.generators import generate_client_secret
|
from oauth2_provider.generators import generate_client_secret
|
||||||
from oauth2_provider.models import get_application_model
|
from oauth2_provider.models import get_application_model
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from django.shortcuts import get_object_or_404, redirect
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import FormView, TemplateView
|
from django.views.generic import FormView, TemplateView
|
||||||
|
|
||||||
from pretix.base.models import CachedFile
|
from pretix.base.models import CachedFile
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ from django.utils import formats
|
|||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.http import is_safe_url
|
from django.utils.http import is_safe_url
|
||||||
from django.utils.timezone import make_aware, now
|
from django.utils.timezone import make_aware, now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import (
|
from django.views.generic import (
|
||||||
DetailView, FormView, ListView, TemplateView, View,
|
DetailView, FormView, ListView, TemplateView, View,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from django.http import JsonResponse
|
|||||||
from django.shortcuts import get_object_or_404, redirect
|
from django.shortcuts import get_object_or_404, redirect
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views import View
|
from django.views import View
|
||||||
from django.views.generic import (
|
from django.views.generic import (
|
||||||
CreateView, DeleteView, DetailView, FormView, ListView, UpdateView,
|
CreateView, DeleteView, DetailView, FormView, ListView, UpdateView,
|
||||||
@@ -935,7 +935,7 @@ class GiftCardListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixi
|
|||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
qs = self.request.organizer.issued_gift_cards.annotate(
|
qs = self.request.organizer.issued_gift_cards.annotate(
|
||||||
cached_value=Coalesce(Sum('transactions__value'), Decimal('0.00'))
|
cached_value=Coalesce(Sum('transactions__value'), Decimal('0.00'))
|
||||||
)
|
).order_by('-issuance')
|
||||||
if self.filter_form.is_valid():
|
if self.filter_form.is_valid():
|
||||||
qs = self.filter_form.filter_qs(qs)
|
qs = self.filter_form.filter_qs(qs)
|
||||||
return qs
|
return qs
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from django.shortcuts import get_object_or_404
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
from PyPDF2 import PdfFileWriter
|
from PyPDF2 import PdfFileWriter
|
||||||
from reportlab.lib.units import mm
|
from reportlab.lib.units import mm
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from collections import OrderedDict
|
|||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views import View
|
from django.views import View
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from django.shortcuts import redirect, render
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.timezone import make_aware
|
from django.utils.timezone import make_aware
|
||||||
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||||
from django.views import View
|
from django.views import View
|
||||||
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
|
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from django.shortcuts import get_object_or_404
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.formats import get_format
|
from django.utils.formats import get_format
|
||||||
from django.utils.timezone import make_aware
|
from django.utils.timezone import make_aware
|
||||||
from django.utils.translation import pgettext, ugettext as _
|
from django.utils.translation import gettext as _, pgettext
|
||||||
|
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
EventMetaProperty, EventMetaValue, ItemMetaProperty, ItemMetaValue, Order,
|
EventMetaProperty, EventMetaValue, ItemMetaProperty, ItemMetaValue, Order,
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user