forked from CGM_Public/pretix_original
Compare commits
31 Commits
event-date
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
052aaf937b | ||
|
|
bc6da2512a | ||
|
|
6378dc69b8 | ||
|
|
2b53d04a19 | ||
|
|
7efe7b5ff7 | ||
|
|
ae5464d486 | ||
|
|
67fec8d1f6 | ||
|
|
95a081676b | ||
|
|
7228a6304d | ||
|
|
04b9134e36 | ||
|
|
2e0769bc41 | ||
|
|
4d2f854710 | ||
|
|
b9ac9496d2 | ||
|
|
a975f5dc50 | ||
|
|
4ea1f6284a | ||
|
|
a01d105829 | ||
|
|
b1bfa1acee | ||
|
|
0b4e99c2d8 | ||
|
|
0cdce7a9cd | ||
|
|
464f625301 | ||
|
|
0c1072503c | ||
|
|
9ead82839a | ||
|
|
c346e3a7f4 | ||
|
|
a26f219faf | ||
|
|
74fb8e7d0c | ||
|
|
b9dbeef1ef | ||
|
|
54079797d2 | ||
|
|
02a4ed4be2 | ||
|
|
7f7c95aedb | ||
|
|
47af20d417 | ||
|
|
91e69f793d |
@@ -203,7 +203,8 @@ checkins list of objects List of **succe
|
||||
├ datetime datetime Time of check-in
|
||||
├ type string Type of scan (defaults to ``entry``)
|
||||
├ gate integer Internal ID of the gate. Can be ``null``.
|
||||
├ device integer Internal ID of the device. Can be ``null``.
|
||||
├ device integer Internal ID of the device. Can be ``null``. **Deprecated**, since this ID is not otherwise used in the API and is therefore not very useful.
|
||||
├ device_id integer Attribute ``device_id`` of the device. Can be ``null``.
|
||||
└ auto_checked_in boolean Indicates if this check-in been performed automatically by the system
|
||||
downloads list of objects List of ticket download options
|
||||
├ output string Ticket output provider (e.g. ``pdf``, ``passbook``)
|
||||
|
||||
@@ -175,7 +175,7 @@ without any special behavior.
|
||||
Connecting SSO providers (pretix as the SSO client)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
To connect an external application as a SSO client, go to "Customer accounts" → "SSO providers" → "Create a new SSO provider"
|
||||
To connect an external application as a SSO provider, go to "Customer accounts" → "SSO providers" → "Create a new SSO provider"
|
||||
in your organizer account.
|
||||
|
||||
.. thumbnail:: ../../screens/organizer/customer_ssoprovider_add.png
|
||||
|
||||
@@ -48,7 +48,7 @@ dependencies = [
|
||||
"django-libsass==0.9",
|
||||
"django-localflavor==4.0",
|
||||
"django-markup",
|
||||
"django-oauth-toolkit==2.3.*",
|
||||
"django-oauth-toolkit==3.0.*",
|
||||
"django-otp==1.5.*",
|
||||
"django-phonenumber-field==7.3.*",
|
||||
"django-redis==5.4.*",
|
||||
@@ -76,7 +76,7 @@ dependencies = [
|
||||
"phonenumberslite==8.13.*",
|
||||
"Pillow==10.4.*",
|
||||
"pretix-plugin-build",
|
||||
"protobuf==5.27.*",
|
||||
"protobuf==5.28.*",
|
||||
"psycopg2-binary",
|
||||
"pycountry",
|
||||
"pycparser==2.22",
|
||||
|
||||
@@ -19,4 +19,4 @@
|
||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
__version__ = "2024.8.0.dev0"
|
||||
__version__ = "2024.9.0.dev0"
|
||||
|
||||
@@ -80,6 +80,7 @@ ALL_LANGUAGES = [
|
||||
('de', _('German')),
|
||||
('de-informal', _('German (informal)')),
|
||||
('ar', _('Arabic')),
|
||||
('eu', _('Basque')),
|
||||
('ca', _('Catalan')),
|
||||
('zh-hans', _('Chinese (simplified)')),
|
||||
('zh-hant', _('Chinese (traditional)')),
|
||||
|
||||
@@ -896,6 +896,7 @@ class DeviceEventSettingsSerializer(EventSettingsSerializer):
|
||||
'locale',
|
||||
'last_order_modification_date',
|
||||
'show_quota_left',
|
||||
'show_dates_on_frontpage',
|
||||
'max_items_per_order',
|
||||
'attendee_names_asked',
|
||||
'attendee_names_required',
|
||||
|
||||
@@ -273,9 +273,15 @@ class AnswerSerializer(I18nAwareModelSerializer):
|
||||
|
||||
|
||||
class CheckinSerializer(I18nAwareModelSerializer):
|
||||
device_id = serializers.SlugRelatedField(
|
||||
source='device',
|
||||
slug_field='device_id',
|
||||
read_only=True,
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Checkin
|
||||
fields = ('id', 'datetime', 'list', 'auto_checked_in', 'gate', 'device', 'type')
|
||||
fields = ('id', 'datetime', 'list', 'auto_checked_in', 'gate', 'device', 'device_id', 'type')
|
||||
|
||||
|
||||
class FailedCheckinSerializer(I18nAwareModelSerializer):
|
||||
|
||||
@@ -377,7 +377,7 @@ def _checkin_list_position_queryset(checkinlists, ignore_status=False, ignore_pr
|
||||
Prefetch(
|
||||
'positions',
|
||||
OrderPosition.objects.prefetch_related(
|
||||
Prefetch('checkins', queryset=Checkin.objects.all()),
|
||||
Prefetch('checkins', queryset=Checkin.objects.select_related('device')),
|
||||
'item', 'variation', 'answers', 'answers__options', 'answers__question',
|
||||
)
|
||||
)
|
||||
|
||||
@@ -78,7 +78,7 @@ class ReusableMediaViewSet(viewsets.ModelViewSet):
|
||||
queryset=OrderPosition.objects.select_related(
|
||||
'order', 'order__event', 'order__event__organizer', 'seat',
|
||||
).prefetch_related(
|
||||
Prefetch('checkins', queryset=Checkin.objects.all()),
|
||||
Prefetch('checkins', queryset=Checkin.objects.select_related('device')),
|
||||
'answers', 'answers__options', 'answers__question',
|
||||
)
|
||||
),
|
||||
|
||||
@@ -258,7 +258,7 @@ class OrderViewSetMixin:
|
||||
return Prefetch(
|
||||
'positions',
|
||||
opq.all().prefetch_related(
|
||||
Prefetch('checkins', queryset=Checkin.objects.all()),
|
||||
Prefetch('checkins', queryset=Checkin.objects.select_related('device')),
|
||||
Prefetch('item', queryset=self.request.event.items.prefetch_related(
|
||||
Prefetch('meta_values', ItemMetaValue.objects.select_related('property'), to_attr='meta_values_cached')
|
||||
)),
|
||||
@@ -279,7 +279,7 @@ class OrderViewSetMixin:
|
||||
return Prefetch(
|
||||
'positions',
|
||||
opq.all().prefetch_related(
|
||||
Prefetch('checkins', queryset=Checkin.objects.all()),
|
||||
Prefetch('checkins', queryset=Checkin.objects.select_related('device')),
|
||||
'item', 'variation',
|
||||
Prefetch('answers', queryset=QuestionAnswer.objects.prefetch_related('options', 'question').order_by('question__position')),
|
||||
'seat',
|
||||
@@ -1092,7 +1092,7 @@ class OrderPositionViewSet(viewsets.ModelViewSet):
|
||||
'item_meta_properties',
|
||||
)
|
||||
qs = qs.prefetch_related(
|
||||
Prefetch('checkins', queryset=Checkin.objects.all()),
|
||||
Prefetch('checkins', queryset=Checkin.objects.select_related("device")),
|
||||
Prefetch('item', queryset=self.request.event.items.prefetch_related(
|
||||
Prefetch('meta_values', ItemMetaValue.objects.select_related('property'),
|
||||
to_attr='meta_values_cached')
|
||||
@@ -1111,7 +1111,7 @@ class OrderPositionViewSet(viewsets.ModelViewSet):
|
||||
Prefetch(
|
||||
'positions',
|
||||
qs.prefetch_related(
|
||||
Prefetch('checkins', queryset=Checkin.objects.all()),
|
||||
Prefetch('checkins', queryset=Checkin.objects.select_related('device')),
|
||||
Prefetch('item', queryset=self.request.event.items.prefetch_related(
|
||||
Prefetch('meta_values', ItemMetaValue.objects.select_related('property'),
|
||||
to_attr='meta_values_cached')
|
||||
@@ -1135,7 +1135,7 @@ class OrderPositionViewSet(viewsets.ModelViewSet):
|
||||
)
|
||||
else:
|
||||
qs = qs.prefetch_related(
|
||||
Prefetch('checkins', queryset=Checkin.objects.all()),
|
||||
Prefetch('checkins', queryset=Checkin.objects.select_related("device")),
|
||||
'answers', 'answers__options', 'answers__question',
|
||||
).select_related(
|
||||
'item', 'order', 'order__event', 'order__event__organizer', 'seat'
|
||||
|
||||
@@ -60,7 +60,6 @@ from django.urls import reverse
|
||||
from django.utils.crypto import get_random_string
|
||||
from django.utils.formats import date_format
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils.html import format_html
|
||||
from django.utils.timezone import make_aware, now
|
||||
from django.utils.translation import gettext, gettext_lazy as _
|
||||
from django_scopes import ScopedManager, scopes_disabled
|
||||
@@ -180,14 +179,10 @@ class EventMixin:
|
||||
"""
|
||||
tz = tz or self.timezone
|
||||
if (not self.settings.show_date_to and not force_show_end) or not self.date_to:
|
||||
if as_html:
|
||||
return format_html(
|
||||
"<time datetime=\"{}\">{}</time>",
|
||||
_date(self.date_from.astimezone(tz), "Y-m-d"),
|
||||
_date(self.date_from.astimezone(tz), "DATE_FORMAT"),
|
||||
)
|
||||
return _date(self.date_from.astimezone(tz), "DATE_FORMAT")
|
||||
return daterange(self.date_from.astimezone(tz), self.date_to.astimezone(tz), as_html)
|
||||
df, dt = self.date_from, self.date_from
|
||||
else:
|
||||
df, dt = self.date_from, self.date_to
|
||||
return daterange(df.astimezone(tz), dt.astimezone(tz), as_html)
|
||||
|
||||
def get_date_range_display_as_html(self, tz=None, force_show_end=False) -> str:
|
||||
return self.get_date_range_display(tz, force_show_end, as_html=True)
|
||||
|
||||
@@ -1295,7 +1295,8 @@ DEFAULTS = {
|
||||
'form_kwargs': dict(
|
||||
label=_("Show event times and dates on the ticket shop"),
|
||||
help_text=_("If disabled, no date or time will be shown on the ticket shop's front page. This settings "
|
||||
"does however not affect the display in other locations."),
|
||||
"also affects a few other locations, however it should not be expected that the date of the "
|
||||
"event is shown nowhere to users."),
|
||||
)
|
||||
},
|
||||
'show_date_to': {
|
||||
|
||||
@@ -1143,12 +1143,12 @@ class MailSettingsForm(FormPlaceholderMixin, SettingsForm):
|
||||
widget=I18nTextInput,
|
||||
)
|
||||
mail_subject_order_incomplete_payment = I18nFormField(
|
||||
label=_("Subject"),
|
||||
label=_("Subject (if an incomplete payment was received)"),
|
||||
required=False,
|
||||
widget=I18nTextInput,
|
||||
)
|
||||
mail_text_order_incomplete_payment = I18nFormField(
|
||||
label=_("Text"),
|
||||
label=_("Text (if an incomplete payment was received)"),
|
||||
required=False,
|
||||
widget=I18nMarkdownTextarea,
|
||||
help_text=_("This email only applies to payment methods that can receive incomplete payments, "
|
||||
|
||||
@@ -102,16 +102,24 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for t in team.active_tokens %}
|
||||
{% for t in tokens %}
|
||||
<tr>
|
||||
<td>
|
||||
<td {% if not t.active %}class="text-muted"{% endif %}>
|
||||
{% if not t.active %}
|
||||
<del>
|
||||
{% endif %}
|
||||
{{ t.name }}
|
||||
{% if not t.active %}
|
||||
</del>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-right flip">
|
||||
<button type="submit" name="remove-token" value="{{ t.id }}"
|
||||
class="btn btn-danger btn-sm btn-block">
|
||||
<i class="fa fa-times"></i> {% trans "Remove" %}
|
||||
</button>
|
||||
{% if t.active %}
|
||||
<button type="submit" name="remove-token" value="{{ t.id }}"
|
||||
class="btn btn-danger btn-sm btn-block">
|
||||
<i class="fa fa-times"></i> {% trans "Remove" %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
@@ -686,14 +686,24 @@ class TeamDeleteView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin,
|
||||
try:
|
||||
self.object.log_action('pretix.team.deleted', user=self.request.user)
|
||||
self.object.delete()
|
||||
except ProtectedError:
|
||||
messages.error(
|
||||
self.request,
|
||||
_(
|
||||
'The team could not be deleted as some constraints (e.g. data created by '
|
||||
'plug-ins) do not allow it.'
|
||||
except ProtectedError as e:
|
||||
is_logs = any(isinstance(e, LogEntry) for e in e.protected_objects)
|
||||
if is_logs:
|
||||
messages.error(
|
||||
self.request,
|
||||
_(
|
||||
"The team could not be deleted because the team or one of its API tokens is part of "
|
||||
"historical audit logs."
|
||||
)
|
||||
)
|
||||
else:
|
||||
messages.error(
|
||||
self.request,
|
||||
_(
|
||||
'The team could not be deleted as some constraints (e.g. data created by '
|
||||
'plug-ins) do not allow it.'
|
||||
)
|
||||
)
|
||||
)
|
||||
return redirect(success_url)
|
||||
|
||||
messages.success(request, _('The selected team has been deleted.'))
|
||||
@@ -723,6 +733,7 @@ class TeamMemberView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin,
|
||||
ctx = super().get_context_data(**kwargs)
|
||||
ctx['add_form'] = self.add_form
|
||||
ctx['add_token_form'] = self.add_token_form
|
||||
ctx['tokens'] = self.object.tokens.order_by("-active", "name", "pk")
|
||||
return ctx
|
||||
|
||||
def _send_invite(self, instance):
|
||||
|
||||
@@ -53,14 +53,14 @@ def daterange(df, dt, as_html=False):
|
||||
|
||||
if lng.startswith("de"):
|
||||
if df.year == dt.year and df.month == dt.month and df.day == dt.day:
|
||||
return format_html(base_format, _date(df, "j. F Y"))
|
||||
return format_html(base_format, _date(df, "D, j. F Y"))
|
||||
elif df.year == dt.year and df.month == dt.month:
|
||||
return format_html(base_format, _date(df, "j."), "–", _date(dt, "j. F Y"))
|
||||
elif df.year == dt.year:
|
||||
return format_html(base_format, _date(df, "j. F"), " – ", _date(dt, "j. F Y"))
|
||||
elif lng.startswith("en"):
|
||||
if df.year == dt.year and df.month == dt.month and df.day == dt.day:
|
||||
return format_html(base_format, _date(df, "N jS, Y"))
|
||||
return format_html(base_format, _date(df, "D, N jS, Y"))
|
||||
elif df.year == dt.year and df.month == dt.month:
|
||||
return format_html(base_format, _date(df, "N jS"), " – ", _date(dt, "jS, Y"))
|
||||
elif df.year == dt.year:
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
|
||||
"PO-Revision-Date: 2024-07-23 10:22+0000\n"
|
||||
"PO-Revision-Date: 2024-09-03 00:00+0000\n"
|
||||
"Last-Translator: Alberto Ortega <ortega16.cieza@gmail.com>\n"
|
||||
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"es/>\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
"X-Generator: Weblate 5.7\n"
|
||||
|
||||
#: pretix/_base_settings.py:79
|
||||
msgid "English"
|
||||
@@ -3984,8 +3984,9 @@ msgstr ""
|
||||
|
||||
#: pretix/base/models/customers.py:299 pretix/base/models/orders.py:1513
|
||||
#: pretix/base/models/orders.py:3175 pretix/base/settings.py:1096
|
||||
#, fuzzy
|
||||
msgid "Company name"
|
||||
msgstr "Nombre de la Compañía"
|
||||
msgstr "Razón Social / Organización"
|
||||
|
||||
#: pretix/base/models/customers.py:303 pretix/base/models/orders.py:1517
|
||||
#: pretix/base/models/orders.py:3182 pretix/base/settings.py:81
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
|
||||
"PO-Revision-Date: 2024-08-26 15:00+0000\n"
|
||||
"PO-Revision-Date: 2024-09-06 08:47+0000\n"
|
||||
"Last-Translator: Albizuri <oier@puntu.eus>\n"
|
||||
"Language-Team: Basque <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
"eu/>\n"
|
||||
@@ -602,7 +602,7 @@ msgstr ""
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:913
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:673
|
||||
msgid "Ticket design"
|
||||
msgstr ""
|
||||
msgstr "Sarrera diseinua"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1250
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:972
|
||||
@@ -720,16 +720,18 @@ msgid ""
|
||||
"The items in your cart are no longer reserved for you. You can still "
|
||||
"complete your order as long as they’re available."
|
||||
msgstr ""
|
||||
"Zure saskiko produktuak ez daude zuretzat erreserbatuta. Oraindik ere zure "
|
||||
"eskaera bete dezakezu, baldin eta eskuragarri badaude."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:45
|
||||
msgid "Cart expired"
|
||||
msgstr ""
|
||||
msgstr "Saskia iraungita"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:50
|
||||
msgid "The items in your cart are reserved for you for one minute."
|
||||
msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "Zure saskiko produktuak minutu -ez erreserbatuta daude zuretzat."
|
||||
msgstr[1] "Zure saskiko produktuak {num} minutuz erreserbatuta daude zuretzat."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:203
|
||||
msgid "The organizer keeps %(currency)s %(amount)s"
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
|
||||
"PO-Revision-Date: 2024-07-01 16:00+0000\n"
|
||||
"PO-Revision-Date: 2024-08-28 10:03+0000\n"
|
||||
"Last-Translator: Anarion Dunedain <anarion80@gmail.com>\n"
|
||||
"Language-Team: Polish <https://translate.pretix.eu/projects/pretix/pretix/pl/"
|
||||
">\n"
|
||||
@@ -18,7 +18,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.6.1\n"
|
||||
"X-Generator: Weblate 5.7\n"
|
||||
|
||||
#: pretix/_base_settings.py:79
|
||||
msgid "English"
|
||||
@@ -259,10 +259,9 @@ msgid "Unknown plugin: '{name}'."
|
||||
msgstr "Nieznany plugin: '{name}'."
|
||||
|
||||
#: pretix/api/serializers/event.py:295
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Unknown plugin: '{name}'."
|
||||
#, python-brace-format
|
||||
msgid "Restricted plugin: '{name}'."
|
||||
msgstr "Nieznany plugin: '{name}'."
|
||||
msgstr "Plugin z ograniczeniami: '{name}'."
|
||||
|
||||
#: pretix/api/serializers/item.py:86 pretix/api/serializers/item.py:148
|
||||
#: pretix/api/serializers/item.py:359
|
||||
@@ -505,10 +504,8 @@ msgid "Order denied"
|
||||
msgstr "Zamówienie odrzucone"
|
||||
|
||||
#: pretix/api/webhooks.py:313
|
||||
#, fuzzy
|
||||
#| msgid "Order denied"
|
||||
msgid "Order deleted"
|
||||
msgstr "Zamówienie odrzucone"
|
||||
msgstr "Zamówienie skasowane"
|
||||
|
||||
#: pretix/api/webhooks.py:317
|
||||
msgid "Ticket checked in"
|
||||
@@ -2287,10 +2284,8 @@ msgid "Order comment"
|
||||
msgstr "Komentarz do zamówienia"
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:622
|
||||
#, fuzzy
|
||||
#| msgid "Add-On to position #%(posid)s"
|
||||
msgid "Add-on to position ID"
|
||||
msgstr "Dodatek do pozycji #%(posid)s"
|
||||
msgstr "Dodatek do pozycji ID"
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:650 pretix/base/pdf.py:340
|
||||
msgid "Invoice address street"
|
||||
@@ -3873,6 +3868,10 @@ msgid ""
|
||||
"replacement, our new plugin \"Auto check-in\" can be used. When we remove "
|
||||
"this option, we will automatically migrate your event to use the new plugin."
|
||||
msgstr ""
|
||||
"Ta opcja jest przestarzała i zostanie usunięta w ciągu najbliższych "
|
||||
"miesięcy. Jako zamiennik można użyć naszej nowej wtyczki „Auto check-in”. "
|
||||
"Gdy usuniemy tę opcję, automatycznie zmigrujemy Twoje wydarzenie do "
|
||||
"korzystania z nowej wtyczki."
|
||||
|
||||
#: pretix/base/models/checkin.py:340
|
||||
msgid "Entry"
|
||||
@@ -5711,10 +5710,8 @@ msgid "Meta information"
|
||||
msgstr "Metadane"
|
||||
|
||||
#: pretix/base/models/orders.py:303
|
||||
#, fuzzy
|
||||
#| msgid "Meta information"
|
||||
msgid "API meta information"
|
||||
msgstr "Metadane"
|
||||
msgstr "Metadane API"
|
||||
|
||||
#: pretix/base/models/orders.py:392 pretix/plugins/sendmail/forms.py:236
|
||||
#: pretix/plugins/sendmail/forms.py:391 pretix/plugins/sendmail/views.py:272
|
||||
@@ -8041,10 +8038,9 @@ msgstr ""
|
||||
"wydarzenia."
|
||||
|
||||
#: pretix/base/services/mail.py:121
|
||||
#, fuzzy
|
||||
#| msgid "The selected media type is not enabled in your organizer settings."
|
||||
msgid "This prefix has been set in your event or organizer settings."
|
||||
msgstr "Wybrany typ nośnika nie jest włączony w ustawieniach organizatora."
|
||||
msgstr ""
|
||||
"Prefiks ten został ustawiony w ustawieniach wydarzenia lub organizatora."
|
||||
|
||||
#: pretix/base/services/mail.py:278
|
||||
#, python-brace-format
|
||||
@@ -9675,6 +9671,11 @@ msgid ""
|
||||
"if they want more than one ticket, as every entry only grants one single "
|
||||
"ticket at a time."
|
||||
msgstr ""
|
||||
"Przy zwiększonym limicie klient może poprosić o więcej niż jeden bilet na "
|
||||
"konkretny produkt przy użyciu tego samego, unikalnego adresu e-mail. Jednak "
|
||||
"niezależnie od tego ustawienia, klient będzie musiał wypełnić formularz "
|
||||
"listy oczekujących wielokrotnie, jeśli chce otrzymać więcej niż jeden bilet, "
|
||||
"ponieważ każdy wpis przyznaje tylko jeden bilet na raz."
|
||||
|
||||
#: pretix/base/settings.py:1493
|
||||
msgid "Show number of check-ins to customer"
|
||||
@@ -11705,10 +11706,9 @@ msgstr ""
|
||||
"Data ostatniej płatności nie może przypadać przed końcem przedsprzedaży."
|
||||
|
||||
#: pretix/base/settings.py:3811
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Please enter a valid sales channel."
|
||||
#, python-brace-format
|
||||
msgid "The value \"{identifier}\" is not a valid sales channel."
|
||||
msgstr "Wprowadź dostępny kanał sprzedaży."
|
||||
msgstr "Wartość \"{identifier} nie jest prawidłowym kanałem sprzedaży."
|
||||
|
||||
#: pretix/base/settings.py:3826
|
||||
msgid "This needs to be disabled if other NFC-based types are active."
|
||||
@@ -15034,19 +15034,14 @@ msgid "or"
|
||||
msgstr "lub"
|
||||
|
||||
#: pretix/control/forms/vouchers.py:293
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "You can either supply a list of email addresses with one email address "
|
||||
#| "per line, or a CSV file with a title column and one or more of the "
|
||||
#| "columns \"email\", \"number\", \"name\", or \"tag\"."
|
||||
msgid ""
|
||||
"You can either supply a list of email addresses with one email address per "
|
||||
"line, or the contents of a CSV file with a title column and one or more of "
|
||||
"the columns \"email\", \"number\", \"name\", or \"tag\"."
|
||||
msgstr ""
|
||||
"Możesz dostarczyć listę adresów e-mail z jednym adresem e-mail na wiersz lub "
|
||||
"plik CSV z kolumną tytułu i jedną lub kilkoma kolumnami \"e-mail\", "
|
||||
"\"numer\", \"nazwa\" lub \"tag\"."
|
||||
"zawartość pliku CSV z kolumną tytułu i jedną lub kilkoma kolumnami \"e-mail\""
|
||||
", \"numer\", \"nazwa\" lub \"tag\"."
|
||||
|
||||
#: pretix/control/forms/vouchers.py:327
|
||||
msgid "Maximum usages per voucher"
|
||||
@@ -19187,17 +19182,12 @@ msgstr ""
|
||||
"używana razem z funkcją minimalnej odległości w naszym module planu miejsc."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/event/settings.html:377
|
||||
#, fuzzy
|
||||
#| msgctxt "sendmail_form"
|
||||
#| msgid "Waiting for"
|
||||
msgid "Waiting customers"
|
||||
msgstr "Oczekiwanie na"
|
||||
msgstr "Oczekujący klienci"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/event/settings.html:383
|
||||
#, fuzzy
|
||||
#| msgid "Enable waiting list"
|
||||
msgid "Manage waiting list"
|
||||
msgstr "Włącz listę oczekujących"
|
||||
msgstr "Zarządzaj listą oczekujących"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/event/settings.html:396
|
||||
msgid "Item metadata"
|
||||
@@ -21128,6 +21118,9 @@ msgid ""
|
||||
"will not affect the membership. Memberships can be managed in the customer "
|
||||
"account."
|
||||
msgstr ""
|
||||
"Sprzedaż tej pozycji spowodowała utworzenie członkostwa. Zmiana produktu w "
|
||||
"tym miejscu nie wpłynie na członkostwo. Członkostwem można zarządzać na "
|
||||
"koncie klienta."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/change.html:208
|
||||
#: pretix/control/templates/pretixcontrol/order/change.html:426
|
||||
@@ -21178,6 +21171,9 @@ msgid ""
|
||||
"ticket here will not affect the membership. Memberships can be managed in "
|
||||
"the customer account."
|
||||
msgstr ""
|
||||
"Sprzedaż tej pozycji spowodowała utworzenie członkostwa. Zmiana ważności "
|
||||
"biletu w tym miejscu nie wpłynie na członkostwo. Członkostwem można "
|
||||
"zarządzać na koncie klienta."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/change.html:290
|
||||
msgid ""
|
||||
@@ -23943,30 +23939,24 @@ msgid "Flow multiple lines downward from specified position"
|
||||
msgstr "Wypełnij wiele linii w dół od określonej pozycji"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:452
|
||||
#, fuzzy
|
||||
#| msgid "Automatically refund money if possible"
|
||||
msgid "Automatically reduce font size to fit content"
|
||||
msgstr "Automatycznie zwróć pieniądze, jeśli to możliwe"
|
||||
msgstr "Automatyczne zmniejsz rozmiar czcionki w celu dopasowania do treści"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:458
|
||||
msgid "Allow long words to be split (preview is not accurate)"
|
||||
msgstr ""
|
||||
msgstr "Zezwalaj na dzielenie długich słów (podgląd nie jest dokładny)"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:469
|
||||
msgid "Add a new object"
|
||||
msgstr "Dodaj nowy obiekt"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:474
|
||||
#, fuzzy
|
||||
#| msgid "Text color"
|
||||
msgid "Text box"
|
||||
msgstr "Kolor tekstu"
|
||||
msgstr "Pole tekstowe"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:478
|
||||
#, fuzzy
|
||||
#| msgid "Event created"
|
||||
msgid "Text (deprecated)"
|
||||
msgstr "Wydarzenie utworzone"
|
||||
msgstr "Tekst (przestarzałe)"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:482
|
||||
msgid "QR code for Check-In"
|
||||
@@ -24005,6 +23995,9 @@ msgid ""
|
||||
"use pretixPRINT version %(print_version)s (or newer) or pretixSCAN Desktop "
|
||||
"version %(scan_version)s (or newer)."
|
||||
msgstr ""
|
||||
"Ten układ wykorzystuje nowe funkcje. Jeśli drukujesz ze swojego urządzenia, "
|
||||
"upewnij się, że używasz pretixPRINT w wersji %(print_version)s (lub nowszej) "
|
||||
"lub pretixSCAN Desktop w wersji %(scan_version)s (lub nowszej)."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/placeholders.html:16
|
||||
msgid "Available placeholders"
|
||||
@@ -27223,133 +27216,99 @@ msgstr "Zespół Pretix"
|
||||
|
||||
#: pretix/plugins/autocheckin/apps.py:39
|
||||
msgid "Automatically check-in specific tickets after they have been sold."
|
||||
msgstr ""
|
||||
msgstr "Automatycznie odpraw określone bilety po ich sprzedaży."
|
||||
|
||||
#: pretix/plugins/autocheckin/forms.py:60
|
||||
#: pretix/plugins/autocheckin/models.py:82
|
||||
#, fuzzy
|
||||
#| msgid "All payment providers"
|
||||
msgid "Only including usage of payment providers"
|
||||
msgstr "Wszyscy dostawcy płatności"
|
||||
msgstr "Tylko z uwzględnieniem korzystania z dostawców usług płatniczych"
|
||||
|
||||
#: pretix/plugins/autocheckin/forms.py:120
|
||||
#, fuzzy
|
||||
#| msgid "All actions"
|
||||
msgid "All variations"
|
||||
msgstr "Wszystkie działania"
|
||||
msgstr "Wszystkie warianty"
|
||||
|
||||
#: pretix/plugins/autocheckin/forms.py:248
|
||||
msgid ""
|
||||
"When restricting by payment method, the rule should run after the payment "
|
||||
"was received."
|
||||
msgstr ""
|
||||
"W przypadku ograniczenia według metody płatności reguła powinna zostać "
|
||||
"uruchomiona po otrzymaniu płatności."
|
||||
|
||||
#: pretix/plugins/autocheckin/models.py:36
|
||||
#, fuzzy
|
||||
#| msgid "New order placed"
|
||||
msgid "After order was placed"
|
||||
msgstr "Złożono zamówienie"
|
||||
msgstr "Po złożeniu zamówienia"
|
||||
|
||||
#: pretix/plugins/autocheckin/models.py:37
|
||||
#, fuzzy
|
||||
#| msgid "Mark order as paid"
|
||||
msgid "After order was paid"
|
||||
msgstr "Oznacz zamówienie jako opłacone"
|
||||
msgstr "Po opłaceniu zamówienia"
|
||||
|
||||
#: pretix/plugins/autocheckin/models.py:48
|
||||
#, fuzzy
|
||||
#| msgid "If you keep this empty, all input will be allowed."
|
||||
msgid ""
|
||||
"If you keep this empty, all lists that match the purchased product will be "
|
||||
"used."
|
||||
msgstr ""
|
||||
"Jeśli pozostawisz to pole puste, wszystkie dane wejściowe będą dozwolone."
|
||||
"Jeśli to pole pozostanie puste, użyte zostaną wszystkie listy pasujące do "
|
||||
"zakupionego produktu."
|
||||
|
||||
#: pretix/plugins/autocheckin/models.py:59
|
||||
#, fuzzy
|
||||
#| msgid "Add sales channel"
|
||||
msgid "All sales channels"
|
||||
msgstr "Dodaj kanał sprzedaży"
|
||||
msgstr "Wszystkie kanały sprzedaży"
|
||||
|
||||
#: pretix/plugins/autocheckin/models.py:69
|
||||
#, fuzzy
|
||||
#| msgid "Product variations"
|
||||
msgid "All products and variations"
|
||||
msgstr "Warianty produktu"
|
||||
msgstr "Wszystkie produkty i warianty produktu"
|
||||
|
||||
#: pretix/plugins/autocheckin/models.py:78
|
||||
#, fuzzy
|
||||
#| msgid "Enable payment method"
|
||||
msgid "All payment methods"
|
||||
msgstr "Aktywuj metodę płatności"
|
||||
msgstr "Wszystkie metody płatności"
|
||||
|
||||
#: pretix/plugins/autocheckin/signals.py:47
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/add.html:13
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/edit.html:13
|
||||
#, fuzzy
|
||||
#| msgid "Automated check-in"
|
||||
msgid "Auto check-in"
|
||||
msgstr "Automatyczna odprawa"
|
||||
msgstr "Auto-odprawa"
|
||||
|
||||
#: pretix/plugins/autocheckin/signals.py:70
|
||||
#, fuzzy
|
||||
#| msgid "An email rule was created"
|
||||
msgid "An auto check-in rule was created"
|
||||
msgstr "Utworzono regułę wiadomości e-mail"
|
||||
msgstr "Utworzono regułę auto-odprawy"
|
||||
|
||||
#: pretix/plugins/autocheckin/signals.py:72
|
||||
#, fuzzy
|
||||
#| msgid "An email rule was updated"
|
||||
msgid "An auto check-in rule was updated"
|
||||
msgstr "Zaktualizowano regułę wiadomości e-mail"
|
||||
msgstr "Zaktualizowano regułę auto-odprawy"
|
||||
|
||||
#: pretix/plugins/autocheckin/signals.py:75
|
||||
#, fuzzy
|
||||
#| msgid "An email rule was deleted"
|
||||
msgid "An auto check-in rule was deleted"
|
||||
msgstr "Usunięto regułę wiadomości e-mail"
|
||||
msgstr "Usunięto regułę auto-odprawy"
|
||||
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/add.html:4
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/add.html:6
|
||||
#, fuzzy
|
||||
#| msgid "Custom check-in rule"
|
||||
msgid "Create auto check-in rule"
|
||||
msgstr "Niestandardowa reguła odprawy"
|
||||
msgstr "Utwórz regułę auto-odprawy"
|
||||
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/add.html:18
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/edit.html:18
|
||||
#, fuzzy
|
||||
#| msgctxt "discount"
|
||||
#| msgid "Condition"
|
||||
msgid "Conditions"
|
||||
msgstr "Stan"
|
||||
msgstr "Warunki"
|
||||
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/delete.html:4
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/delete.html:6
|
||||
#, fuzzy
|
||||
#| msgid "Delete check-in list"
|
||||
msgid "Delete auto check-in rule"
|
||||
msgstr "Usuń listę odpraw"
|
||||
msgstr "Usuń regułę auto-odprawy"
|
||||
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/delete.html:9
|
||||
#, fuzzy
|
||||
#| msgid "Are you sure you want to delete the gate?"
|
||||
msgid "Are you sure you want to delete the auto check-in rule?"
|
||||
msgstr "Czy na pewno chcesz usunąć bramkę?"
|
||||
msgstr "Czy na pewno chcesz usunąć regułę auto-odprawy?"
|
||||
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/edit.html:4
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/edit.html:6
|
||||
#, fuzzy
|
||||
#| msgid "Custom check-in rule"
|
||||
msgid "Auto check-in rule"
|
||||
msgstr "Niestandardowa reguła odprawy"
|
||||
msgstr "Reguła auto-odprawy"
|
||||
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:5
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:7
|
||||
#, fuzzy
|
||||
#| msgid "Custom check-in rule"
|
||||
msgid "Auto check-in rules"
|
||||
msgstr "Niestandardowa reguła odprawy"
|
||||
msgstr "Reguły auto-odprawy"
|
||||
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:11
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_list.html:96
|
||||
@@ -27358,16 +27317,12 @@ msgstr "Nie stworzyłeś jeszcze żadnych zasad."
|
||||
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:17
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:22
|
||||
#, fuzzy
|
||||
#| msgid "Create a new check-in list"
|
||||
msgid "Create a new check-in rule"
|
||||
msgstr "Utwórz nową listę odpraw"
|
||||
msgstr "Utwórz nową regułę odpraw"
|
||||
|
||||
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:32
|
||||
#, fuzzy
|
||||
#| msgid "Payment method"
|
||||
msgid "Payment methods"
|
||||
msgstr "Metoda płatności"
|
||||
msgstr "Metody płatności"
|
||||
|
||||
#: pretix/plugins/autocheckin/views.py:119 pretix/plugins/sendmail/views.py:628
|
||||
msgid "Your rule has been created."
|
||||
@@ -29040,6 +28995,9 @@ msgid ""
|
||||
"Refunding the amount via PayPal failed: The original payment does not "
|
||||
"contain the required information to issue an automated refund."
|
||||
msgstr ""
|
||||
"Zwrot kwoty za pośrednictwem systemu PayPal nie powiódł się: Oryginalna "
|
||||
"płatność nie zawiera informacji wymaganych do automatycznego zwrotu "
|
||||
"pieniędzy."
|
||||
|
||||
#: pretix/plugins/paypal2/payment.py:1087
|
||||
msgid "PayPal APM"
|
||||
@@ -30684,26 +30642,20 @@ msgstr ""
|
||||
"WeChat. Prosimy o zachowanie danych logowania."
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1788
|
||||
#, fuzzy
|
||||
#| msgid "WeChat Pay via Stripe"
|
||||
msgid "Revolut Pay via Stripe"
|
||||
msgstr "WeChat Pay przez Stripe"
|
||||
msgstr "Revolut Pay przez Stripe"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1789
|
||||
msgid "Revolut Pay"
|
||||
msgstr ""
|
||||
msgstr "Revolut Pay"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1793
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "This payment method is available to users of the Chinese app WeChat. "
|
||||
#| "Please keep your login information available."
|
||||
msgid ""
|
||||
"This payment method is available to users of the Revolut app. Please keep "
|
||||
"your login information available."
|
||||
msgstr ""
|
||||
"Ta metoda płatności jest dostępna dla użytkowników chińskiej aplikacji "
|
||||
"WeChat. Prosimy o zachowanie danych logowania."
|
||||
"Ta metoda płatności jest dostępna dla użytkowników aplikacji Revolut. "
|
||||
"Prosimy o zachowanie danych logowania."
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1807
|
||||
msgid "PayPal via Stripe"
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
|
||||
"PO-Revision-Date: 2024-06-27 17:00+0000\n"
|
||||
"PO-Revision-Date: 2024-08-28 10:03+0000\n"
|
||||
"Last-Translator: Anarion Dunedain <anarion80@gmail.com>\n"
|
||||
"Language-Team: Polish <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
"pl/>\n"
|
||||
@@ -18,7 +18,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.6.1\n"
|
||||
"X-Generator: Weblate 5.7\n"
|
||||
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
|
||||
@@ -572,16 +572,12 @@ msgid "Group of objects"
|
||||
msgstr "Grupa obiektów"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:899
|
||||
#, fuzzy
|
||||
#| msgid "Text object"
|
||||
msgid "Text object (deprecated)"
|
||||
msgstr "Obiekt tekstowy"
|
||||
msgstr "Obiekt tekstowy (przestarzały)"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:901
|
||||
#, fuzzy
|
||||
#| msgid "Text object"
|
||||
msgid "Text box"
|
||||
msgstr "Obiekt tekstowy"
|
||||
msgstr "Pole tekstowe"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:903
|
||||
msgid "Barcode area"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -162,6 +162,21 @@ def _handle_transaction(trans: BankTransaction, matches: tuple, event: Event = N
|
||||
else:
|
||||
trans.order = orders[0]
|
||||
|
||||
if len(orders) > 1:
|
||||
# Multi-match! Can we split this automatically?
|
||||
order_pending_sum = sum(o.pending_sum for o in orders)
|
||||
if order_pending_sum != trans.amount:
|
||||
# we can't :( this needs to be dealt with by a human
|
||||
trans.state = BankTransaction.STATE_NOMATCH
|
||||
trans.message = gettext_noop('Automatic split to multiple orders not possible.')
|
||||
trans.save()
|
||||
return
|
||||
|
||||
# we can!
|
||||
splits = [(o, o.pending_sum) for o in orders]
|
||||
else:
|
||||
splits = [(orders[0], trans.amount)]
|
||||
|
||||
for o in orders:
|
||||
if o.status == Order.STATUS_PAID and o.pending_sum <= Decimal('0.00'):
|
||||
trans.state = BankTransaction.STATE_DUPLICATE
|
||||
@@ -179,21 +194,6 @@ def _handle_transaction(trans: BankTransaction, matches: tuple, event: Event = N
|
||||
trans.save()
|
||||
return
|
||||
|
||||
if len(orders) > 1:
|
||||
# Multi-match! Can we split this automatically?
|
||||
order_pending_sum = sum(o.pending_sum for o in orders)
|
||||
if order_pending_sum != trans.amount:
|
||||
# we can't :( this needs to be dealt with by a human
|
||||
trans.state = BankTransaction.STATE_NOMATCH
|
||||
trans.message = gettext_noop('Automatic split to multiple orders not possible.')
|
||||
trans.save()
|
||||
return
|
||||
|
||||
# we can!
|
||||
splits = [(o, o.pending_sum) for o in orders]
|
||||
else:
|
||||
splits = [(orders[0], trans.amount)]
|
||||
|
||||
trans.state = BankTransaction.STATE_VALID
|
||||
for order, amount in splits:
|
||||
info_data = {
|
||||
|
||||
@@ -6,13 +6,16 @@
|
||||
{% load eventsignal %}
|
||||
{% load rich_text %}
|
||||
{% for tup in items_by_category %}
|
||||
<section {% if tup.0 %}aria-labelledby="category-{{ tup.0.id }}"{% else %}aria-label="{% trans "Uncategorized items" %}"{% endif %}{% if tup.0.description %} aria-describedby="category-info-{{ tup.0.id }}"{% endif %}>
|
||||
{% if tup.0 %}
|
||||
{% if tup.0 %}
|
||||
<section aria-labelledby="category-{{ tup.0.id }}"{% if tup.0.description %} aria-describedby="category-info-{{ tup.0.id }}"{% endif %}>
|
||||
<h3 id="category-{{ tup.0.id }}">{{ tup.0.name }}</h3>
|
||||
{% if tup.0.description %}
|
||||
<div id="category-info-{{ tup.0.id }}">{{ tup.0.description|localize|rich_text }}</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<section aria-labelledby="category-none">
|
||||
<h3 id="category-none" class="sr-only">{% trans "Uncategorized items" %}</h3>
|
||||
{% endif %}
|
||||
{% for item in tup.1 %}
|
||||
{% if item.has_variations %}
|
||||
<article aria-labelledby="item-{{ item.pk }}-legend"{% if item.description %} aria-describedby="item-{{ item.pk }}-description"{% endif %} class="item-with-variations{% if event.settings.show_variations_expanded %} details-open{% endif %}" id="item-{{ item.pk }}">
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
|
||||
{% if waitinglist_seated %}
|
||||
<aside class="front-page" aria-labelledby="waiting-list">
|
||||
<h3 id="waiting-list">{% trans "Waiting list" %}</h3>
|
||||
<h3 id="waiting-list" class="sr-only">{% trans "Waiting list" %}</h3>
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-sm-6 col-xs-12">
|
||||
<p>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{% extends "pretixpresale/event/base.html" %}
|
||||
{% load i18n %}
|
||||
{% load eventurl %}
|
||||
{% load rich_text %}
|
||||
{% load money %}
|
||||
{% block title %}{% trans "Change payment method" %}{% endblock %}
|
||||
{% block custom_header %}
|
||||
@@ -23,6 +24,9 @@
|
||||
{% endif %}
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
{% if event.settings.payment_explanation %}
|
||||
{{ event.settings.payment_explanation|rich_text }}
|
||||
{% endif %}
|
||||
<div class="panel-group" id="payment_accordion">
|
||||
{% for p in providers %}
|
||||
<div class="panel panel-default" data-total="{{ p.total|money_numberfield:request.event.currency }}">
|
||||
|
||||
@@ -186,14 +186,23 @@ class EventListMixin:
|
||||
query = Q(is_public=True) & Q(live=True)
|
||||
qs = self.request.organizer.events.using(settings.DATABASE_REPLICA).filter(query)
|
||||
qs = qs.filter(Q(all_sales_channels=True) | Q(limit_sales_channels=self.request.sales_channel))
|
||||
|
||||
show_old = "old" in self.request.GET
|
||||
|
||||
subevent_filter = Q(subevents__active=True, subevents__is_public=True)
|
||||
if not show_old:
|
||||
subevent_filter &= Q(
|
||||
Q(subevents__date_to__gte=now()) | Q(subevents__date_from__gte=now())
|
||||
)
|
||||
|
||||
qs = qs.annotate(
|
||||
min_from=Min('subevents__date_from'),
|
||||
min_to=Min('subevents__date_to'),
|
||||
max_from=Max('subevents__date_from'),
|
||||
max_to=Max('subevents__date_to'),
|
||||
max_fromto=Greatest(Max('subevents__date_to'), Max('subevents__date_from')),
|
||||
min_from=Min('subevents__date_from', filter=subevent_filter),
|
||||
min_to=Min('subevents__date_to', filter=subevent_filter),
|
||||
max_from=Max('subevents__date_from', filter=subevent_filter),
|
||||
max_to=Max('subevents__date_to', filter=subevent_filter),
|
||||
max_fromto=Greatest(Max('subevents__date_to', filter=subevent_filter), Max('subevents__date_from', filter=subevent_filter)),
|
||||
)
|
||||
if "old" in self.request.GET:
|
||||
if show_old:
|
||||
date_q = Q(date_to__lt=now()) | (Q(date_to__isnull=True) & Q(date_from__lt=now()))
|
||||
qs = qs.filter(
|
||||
Q(Q(has_subevents=False) & date_q) | Q(
|
||||
|
||||
@@ -498,6 +498,7 @@ def test_list_all_items_positions(token_client, organizer, event, clist, clist_a
|
||||
'datetime': c.datetime.isoformat().replace('+00:00', 'Z'),
|
||||
'auto_checked_in': False,
|
||||
'device': None,
|
||||
'device_id': None,
|
||||
'gate': None,
|
||||
'type': 'entry',
|
||||
}
|
||||
@@ -540,6 +541,7 @@ def test_list_all_items_positions(token_client, organizer, event, clist, clist_a
|
||||
'datetime': c.datetime.isoformat().replace('+00:00', 'Z'),
|
||||
'auto_checked_in': False,
|
||||
'device': None,
|
||||
'device_id': None,
|
||||
'gate': None,
|
||||
'type': 'entry',
|
||||
}
|
||||
|
||||
@@ -959,7 +959,7 @@ def test_refund_cancel(token_client, organizer, event, order):
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_orderposition_list(token_client, organizer, event, order, item, subevent, subevent2, question):
|
||||
def test_orderposition_list(token_client, organizer, device, event, order, item, subevent, subevent2, question, django_assert_num_queries):
|
||||
i2 = copy.copy(item)
|
||||
i2.pk = None
|
||||
i2.save()
|
||||
@@ -1060,19 +1060,22 @@ def test_orderposition_list(token_client, organizer, event, order, item, subeven
|
||||
|
||||
with scopes_disabled():
|
||||
cl = event.checkin_lists.create(name="Default")
|
||||
c = op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=datetime.timezone.utc), list=cl)
|
||||
c = op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=datetime.timezone.utc), list=cl, device=device)
|
||||
op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=datetime.timezone.utc), list=cl, successful=False)
|
||||
res['checkins'] = [{ # successful only
|
||||
'id': c.pk,
|
||||
'datetime': '2017-12-26T10:00:00Z',
|
||||
'list': cl.pk,
|
||||
'auto_checked_in': False,
|
||||
'device': None,
|
||||
'device': device.pk,
|
||||
'device_id': device.device_id,
|
||||
'gate': None,
|
||||
'type': 'entry'
|
||||
}]
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=true'.format(organizer.slug, event.slug))
|
||||
with django_assert_num_queries(15):
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=true'.format(organizer.slug, event.slug)
|
||||
)
|
||||
assert [res] == resp.data['results']
|
||||
|
||||
op.subevent = subevent
|
||||
|
||||
@@ -43,15 +43,15 @@ from pretix.helpers.daterange import daterange, datetimerange
|
||||
def test_same_day_german():
|
||||
with translation.override('de'):
|
||||
df = date(2003, 2, 1)
|
||||
assert daterange(df, df) == "1. Februar 2003"
|
||||
assert daterange(df, df, as_html=True) == '<time datetime="2003-02-01">1. Februar 2003</time>'
|
||||
assert daterange(df, df) == "Sa, 1. Februar 2003"
|
||||
assert daterange(df, df, as_html=True) == '<time datetime="2003-02-01">Sa, 1. Februar 2003</time>'
|
||||
|
||||
|
||||
def test_same_day_english():
|
||||
with translation.override('en'):
|
||||
df = date(2003, 2, 1)
|
||||
assert daterange(df, df) == "Feb. 1st, 2003"
|
||||
assert daterange(df, df, as_html=True) == '<time datetime="2003-02-01">Feb. 1st, 2003</time>'
|
||||
assert daterange(df, df) == "Sat, Feb. 1st, 2003"
|
||||
assert daterange(df, df, as_html=True) == '<time datetime="2003-02-01">Sat, Feb. 1st, 2003</time>'
|
||||
|
||||
|
||||
def test_same_day_spanish():
|
||||
|
||||
@@ -471,6 +471,33 @@ def test_split_payment_success(env, orga_job):
|
||||
assert o4.payments.get().amount == Decimal('12.00')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_valid_plus_invalid_match(env, orga_job):
|
||||
with scopes_disabled():
|
||||
o4 = Order.objects.create(
|
||||
code='99999', event=env[0],
|
||||
status=Order.STATUS_PAID,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=12,
|
||||
sales_channel=env[0].organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
o4.payments.create(
|
||||
provider='paypal',
|
||||
state=OrderPayment.PAYMENT_STATE_CONFIRMED,
|
||||
amount=o4.total
|
||||
)
|
||||
process_banktransfers(orga_job, [{
|
||||
'payer': 'Karla Kundin',
|
||||
'reference': 'Bestellungen DUMMY-1Z3AS DUMMY-99999',
|
||||
'date': '2016-01-26',
|
||||
'amount': '.00'
|
||||
}])
|
||||
with scopes_disabled():
|
||||
job = BankImportJob.objects.last()
|
||||
t = job.transactions.last()
|
||||
assert t.state == BankTransaction.STATE_NOMATCH
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_split_payment_mismatch(env, orga_job):
|
||||
with scopes_disabled():
|
||||
|
||||
@@ -1599,7 +1599,7 @@ class EventLocaleTest(EventTestMixin, SoupTest):
|
||||
'/%s/%s/' % (self.orga.slug, self.event.slug)
|
||||
)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertIn('Dec. 26,', response.rendered_content)
|
||||
self.assertIn('Fri, Dec. 26th,', response.rendered_content)
|
||||
self.assertIn('14:00', response.rendered_content)
|
||||
|
||||
def test_english_region_US(self):
|
||||
@@ -1609,7 +1609,7 @@ class EventLocaleTest(EventTestMixin, SoupTest):
|
||||
'/%s/%s/' % (self.orga.slug, self.event.slug)
|
||||
)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertIn('Dec. 26,', response.rendered_content)
|
||||
self.assertIn('Fri, Dec. 26th,', response.rendered_content)
|
||||
self.assertIn('2 p.m.', response.rendered_content)
|
||||
|
||||
def test_german_region_US(self):
|
||||
@@ -1619,5 +1619,5 @@ class EventLocaleTest(EventTestMixin, SoupTest):
|
||||
'/%s/%s/' % (self.orga.slug, self.event.slug)
|
||||
)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertIn('26. Dezember', response.rendered_content)
|
||||
self.assertIn('Fr, 26. Dezember', response.rendered_content)
|
||||
self.assertIn('14:00', response.rendered_content)
|
||||
|
||||
@@ -169,7 +169,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
"target_url": "http://example.com/ccc/30c3/",
|
||||
"subevent": None,
|
||||
"name": "30C3",
|
||||
"date_range": f"Dec. 26, {self.event.date_from.year} 00:00",
|
||||
"date_range": f"{self.event.date_from.strftime('%a')}, Dec. 26th, {self.event.date_from.year} 00:00",
|
||||
"frontpage_text": "",
|
||||
"location": "",
|
||||
"currency": "EUR",
|
||||
@@ -375,7 +375,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
"target_url": "http://example.com/ccc/30c3/",
|
||||
"subevent": None,
|
||||
"name": "30C3",
|
||||
"date_range": f"Dec. 26, {self.event.date_from.year} 00:00",
|
||||
"date_range": f"{self.event.date_from.strftime('%a')}, Dec. 26th, {self.event.date_from.year} 00:00",
|
||||
"frontpage_text": "",
|
||||
"location": "",
|
||||
"currency": "EUR",
|
||||
@@ -435,7 +435,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
"target_url": "http://example.com/ccc/30c3/",
|
||||
"subevent": None,
|
||||
"name": "30C3",
|
||||
"date_range": f"Dec. 26, {self.event.date_from.year} 00:00",
|
||||
"date_range": f"{self.event.date_from.strftime('%a')}, Dec. 26th, {self.event.date_from.year} 00:00",
|
||||
"frontpage_text": "",
|
||||
"location": "",
|
||||
"currency": "EUR",
|
||||
@@ -520,7 +520,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
"target_url": "http://example.com/ccc/30c3/",
|
||||
"subevent": None,
|
||||
"name": "30C3",
|
||||
"date_range": f"Dec. 26, {self.event.date_from.year} 00:00",
|
||||
"date_range": f"{self.event.date_from.strftime('%a')}, Dec. 26th, {self.event.date_from.year} 00:00",
|
||||
"frontpage_text": "",
|
||||
"location": "",
|
||||
"currency": "EUR",
|
||||
@@ -627,9 +627,9 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
'poweredby': '<a href="https://pretix.eu" target="_blank" rel="noopener">ticketing powered by pretix</a>',
|
||||
'has_more_events': False,
|
||||
'events': [
|
||||
{'name': 'Present', 'date_range': 'Jan. 1, 2019 11:00', 'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
{'name': 'Present', 'date_range': 'Tue, Jan. 1st, 2019 11:00', 'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
'event_url': 'http://example.com/ccc/30c3/', 'subevent': se1.pk, 'location': ''},
|
||||
{'name': 'Future', 'date_range': 'Jan. 4, 2019 11:00', 'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
{'name': 'Future', 'date_range': 'Fri, Jan. 4th, 2019 11:00', 'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
'event_url': 'http://example.com/ccc/30c3/', 'subevent': se2.pk, 'location': ''}
|
||||
]
|
||||
}
|
||||
@@ -659,14 +659,14 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
[
|
||||
None,
|
||||
{'day': 1, 'date': '2019-01-01', 'events': [
|
||||
{'name': 'Present', 'time': '11:00', 'continued': False, 'date_range': 'Jan. 1, 2019 11:00',
|
||||
{'name': 'Present', 'time': '11:00', 'continued': False, 'date_range': 'Tue, Jan. 1st, 2019 11:00',
|
||||
'location': '',
|
||||
'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
'event_url': 'http://example.com/ccc/30c3/', 'subevent': se1.pk}]},
|
||||
{'day': 2, 'date': '2019-01-02', 'events': []},
|
||||
{'day': 3, 'date': '2019-01-03', 'events': []},
|
||||
{'day': 4, 'date': '2019-01-04', 'events': [
|
||||
{'name': 'Future', 'time': '11:00', 'continued': False, 'date_range': 'Jan. 4, 2019 11:00',
|
||||
{'name': 'Future', 'time': '11:00', 'continued': False, 'date_range': 'Fri, Jan. 4th, 2019 11:00',
|
||||
'location': '',
|
||||
'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
'event_url': 'http://example.com/ccc/30c3/', 'subevent': se2.pk}]},
|
||||
@@ -734,14 +734,14 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
'days': [
|
||||
{'day_formatted': 'Mon, Dec 31st', 'date': '2018-12-31', 'events': [], 'today': False},
|
||||
{'day_formatted': 'Tue, Jan 1st', 'date': '2019-01-01', 'events': [
|
||||
{'name': 'Present', 'time': '11:00', 'continued': False, 'date_range': 'Jan. 1, 2019 11:00',
|
||||
{'name': 'Present', 'time': '11:00', 'continued': False, 'date_range': 'Tue, Jan. 1st, 2019 11:00',
|
||||
'location': '',
|
||||
'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
'event_url': 'http://example.com/ccc/30c3/', 'subevent': se1.pk}], 'today': True},
|
||||
{'day_formatted': 'Wed, Jan 2nd', 'date': '2019-01-02', 'events': [], 'today': False},
|
||||
{'day_formatted': 'Thu, Jan 3rd', 'date': '2019-01-03', 'events': [], 'today': False},
|
||||
{'day_formatted': 'Fri, Jan 4th', 'date': '2019-01-04', 'events': [
|
||||
{'name': 'Future', 'time': '11:00', 'continued': False, 'date_range': 'Jan. 4, 2019 11:00',
|
||||
{'name': 'Future', 'time': '11:00', 'continued': False, 'date_range': 'Fri, Jan. 4th, 2019 11:00',
|
||||
'location': '',
|
||||
'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
'event_url': 'http://example.com/ccc/30c3/', 'subevent': se2.pk}], 'today': False},
|
||||
@@ -773,17 +773,17 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
'poweredby': '<a href="https://pretix.eu" target="_blank" rel="noopener">ticketing powered by pretix</a>',
|
||||
'events': [
|
||||
{'availability': {'color': 'none', 'text': 'Event series'},
|
||||
'date_range': 'Dec. 29, 2018 – Jan. 4, 2019',
|
||||
'date_range': 'Jan. 1st – 4th, 2019',
|
||||
'event_url': 'http://example.com/ccc/30c3/',
|
||||
'location': '',
|
||||
'name': '30C3'},
|
||||
{'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
'date_range': 'Jan. 1, 2019 10:00',
|
||||
'date_range': 'Tue, Jan. 1st, 2019 10:00',
|
||||
'location': '',
|
||||
'event_url': 'http://example.com/ccc/present/',
|
||||
'name': 'Present'},
|
||||
{'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
'date_range': 'Jan. 4, 2019 10:00',
|
||||
'date_range': 'Fri, Jan. 4th, 2019 10:00',
|
||||
'location': '',
|
||||
'event_url': 'http://example.com/ccc/future/',
|
||||
'name': 'Future'}
|
||||
@@ -884,7 +884,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
'day': 1,
|
||||
'events': [{'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
'continued': False,
|
||||
'date_range': 'Jan. 1, 2019 10:00',
|
||||
'date_range': 'Tue, Jan. 1st, 2019 10:00',
|
||||
'event_url': 'http://example.com/ccc/present/',
|
||||
'name': 'Present',
|
||||
'location': '',
|
||||
@@ -892,7 +892,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
'time': '10:00'},
|
||||
{'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
'continued': False,
|
||||
'date_range': 'Jan. 1, 2019 11:00',
|
||||
'date_range': 'Tue, Jan. 1st, 2019 11:00',
|
||||
'event_url': 'http://example.com/ccc/30c3/',
|
||||
'name': 'Present',
|
||||
'location': '',
|
||||
@@ -904,7 +904,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
'day': 4,
|
||||
'events': [{'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
'continued': False,
|
||||
'date_range': 'Jan. 4, 2019 10:00',
|
||||
'date_range': 'Fri, Jan. 4th, 2019 10:00',
|
||||
'event_url': 'http://example.com/ccc/future/',
|
||||
'name': 'Future',
|
||||
'location': '',
|
||||
@@ -912,7 +912,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
'time': '10:00'},
|
||||
{'availability': {'color': 'none', 'text': 'More info', 'reason': 'unknown'},
|
||||
'continued': False,
|
||||
'date_range': 'Jan. 4, 2019 11:00',
|
||||
'date_range': 'Fri, Jan. 4th, 2019 11:00',
|
||||
'event_url': 'http://example.com/ccc/30c3/',
|
||||
'name': 'Future',
|
||||
'location': '',
|
||||
|
||||
Reference in New Issue
Block a user