Compare commits

...

31 Commits

Author SHA1 Message Date
dependabot[bot]
052aaf937b Update django-oauth-toolkit requirement from ==2.3.* to ==3.0.*
Updates the requirements on [django-oauth-toolkit](https://github.com/jazzband/django-oauth-toolkit) to permit the latest version.
- [Release notes](https://github.com/jazzband/django-oauth-toolkit/releases)
- [Changelog](https://github.com/jazzband/django-oauth-toolkit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jazzband/django-oauth-toolkit/compare/2.3.0...3.0.0)

---
updated-dependencies:
- dependency-name: django-oauth-toolkit
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-06 18:32:03 +00:00
Albizuri
bc6da2512a Translations: Update Basque
Currently translated at 48.4% (113 of 233 strings)

Translation: pretix/pretix (JavaScript parts)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/eu/

powered by weblate
2024-09-06 10:51:38 +02:00
Albizuri
6378dc69b8 Translations: Update Basque
Currently translated at 56.3% (3231 of 5737 strings)

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

powered by weblate
2024-09-06 10:51:38 +02:00
Richard Schreiber
2b53d04a19 Improve labels in mail settings for incomplete payments (#4444) 2024-09-06 08:53:08 +02:00
Richard Schreiber
7efe7b5ff7 Docs: fix typo for SSO provider instead of client 2024-09-05 13:02:20 +02:00
Alberto Ortega
ae5464d486 Translations: Update Spanish
Currently translated at 87.8% (5038 of 5736 strings)

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

powered by weblate
2024-09-05 11:09:47 +02:00
Tinna Sandström
67fec8d1f6 Translations: Update Swedish
Currently translated at 99.1% (5686 of 5736 strings)

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

powered by weblate
2024-09-05 11:09:47 +02:00
Albizuri
95a081676b Translations: Update Basque
Currently translated at 56.2% (3225 of 5737 strings)

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

powered by weblate
2024-08-30 09:17:49 +02:00
dependabot[bot]
7228a6304d Update protobuf requirement from ==5.27.* to ==5.28.* (#4430)
Updates the requirements on [protobuf](https://github.com/protocolbuffers/protobuf) to permit the latest version.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
- [Commits](https://github.com/protocolbuffers/protobuf/compare/v5.27.0-rc1...v5.28.0)

---
updated-dependencies:
- dependency-name: protobuf
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-30 09:11:23 +02:00
Raphael Michel
04b9134e36 Add Basque to languages 2024-08-29 16:52:54 +02:00
Albizuri
2e0769bc41 Translations: Update Basque
Currently translated at 54.4% (3126 of 5737 strings)

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

powered by weblate
2024-08-29 14:51:49 +02:00
Albizuri
4d2f854710 Translations: Update Basque
Currently translated at 48.0% (112 of 233 strings)

Translation: pretix/pretix (JavaScript parts)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/eu/

powered by weblate
2024-08-29 14:51:49 +02:00
Albizuri
b9ac9496d2 Translations: Update Basque
Currently translated at 52.7% (3026 of 5737 strings)

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

powered by weblate
2024-08-29 14:51:49 +02:00
Albizuri
a975f5dc50 Translations: Update Basque
Currently translated at 47.2% (110 of 233 strings)

Translation: pretix/pretix (JavaScript parts)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/eu/

powered by weblate
2024-08-29 14:51:49 +02:00
Albizuri
4ea1f6284a Translations: Update Basque
Currently translated at 47.5% (2726 of 5737 strings)

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

powered by weblate
2024-08-29 14:51:49 +02:00
Raphael Michel
a01d105829 Bank Transfer: Fix weird error code on duplicate match (Z#23164140) (#4428) 2024-08-29 13:58:37 +02:00
Raphael Michel
b1bfa1acee API: Provide useful device_id in checkins (Z#23163025) (#4427) 2024-08-29 12:36:27 +02:00
Raphael Michel
0b4e99c2d8 Fix inprecise wording 2024-08-28 16:41:37 +02:00
Raphael Michel
0cdce7a9cd Add payment_explanation to payment method change (Z#23164112) (#4424) 2024-08-28 15:12:16 +02:00
Richard Schreiber
464f625301 Seating: visually remove waitinglist headline for soldout seating 2024-08-28 14:36:30 +02:00
Richard Schreiber
0c1072503c A11y: improve/unify html-source for uncategorized products 2024-08-28 14:35:35 +02:00
Raphael Michel
9ead82839a API: Add show_dates_on_frontpage to device event settings 2024-08-28 13:47:24 +02:00
Albizuri
c346e3a7f4 Translations: Update Basque
Currently translated at 44.6% (2560 of 5737 strings)

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

powered by weblate
2024-08-28 12:10:11 +02:00
Tinna Sandström
a26f219faf Translations: Update Swedish
Currently translated at 99.0% (5684 of 5736 strings)

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

powered by weblate
2024-08-28 12:10:11 +02:00
Anarion Dunedain
74fb8e7d0c Translations: Update Polish
Currently translated at 100.0% (232 of 232 strings)

Translation: pretix/pretix (JavaScript parts)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/pl/

powered by weblate
2024-08-28 12:10:11 +02:00
Anarion Dunedain
b9dbeef1ef Translations: Update Polish
Currently translated at 100.0% (5736 of 5736 strings)

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

powered by weblate
2024-08-28 12:10:11 +02:00
Raphael Michel
54079797d2 Event list: Do not include old or inactive subevents in event list (Z#23163541) (#4415) 2024-08-28 09:28:35 +02:00
Raphael Michel
02a4ed4be2 Teams: Improve handling of revoked keys and team deletion (Z#23163674) (#4414) 2024-08-28 09:27:53 +02:00
Raphael Michel
7f7c95aedb Bump version to 2024.9.0.dev0 2024-08-28 09:18:59 +02:00
Raphael Michel
47af20d417 Bump version to 2024.8.0 2024-08-28 09:18:35 +02:00
Mira
91e69f793d Show weekday in subevent dates [Z#23161884] (#4383) 2024-08-27 22:22:44 +02:00
33 changed files with 2360 additions and 1735 deletions

View File

@@ -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``)

View File

@@ -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

View File

@@ -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",

View File

@@ -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"

View File

@@ -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)')),

View File

@@ -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',

View File

@@ -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):

View File

@@ -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',
)
)

View File

@@ -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',
)
),

View File

@@ -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'

View File

@@ -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)

View File

@@ -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': {

View File

@@ -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, "

View File

@@ -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 %}

View File

@@ -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):

View File

@@ -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:

View File

@@ -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

View File

@@ -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 theyre 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"

View File

@@ -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"

View File

@@ -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

View File

@@ -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 = {

View File

@@ -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 }}">

View File

@@ -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>

View File

@@ -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 }}">

View File

@@ -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(

View File

@@ -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',
}

View File

@@ -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

View File

@@ -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():

View File

@@ -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():

View File

@@ -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)

View File

@@ -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': '',