mirror of
https://github.com/pretix/pretix.git
synced 2025-12-18 16:12:26 +00:00
Compare commits
1 Commits
clean-docs
...
subevent-e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
58a0791770 |
@@ -48,6 +48,11 @@ seat objects The assigned se
|
||||
└ seat_guid string Identifier of the seat within the seating plan
|
||||
===================================== ========================== =======================================================
|
||||
|
||||
.. versionchanged:: 4.14
|
||||
|
||||
This ``is_bundled`` attribute has been added and the cart creation endpoints have been updated.
|
||||
|
||||
|
||||
Cart position endpoints
|
||||
-----------------------
|
||||
|
||||
|
||||
@@ -9,6 +9,14 @@ This page describes special APIs built for ticket scanning apps. For managing ch
|
||||
please also see :ref:`rest-checkinlists`. The check-in list API also contains endpoints to obtain statistics or log
|
||||
failed scans.
|
||||
|
||||
.. versionchanged:: 4.12
|
||||
|
||||
The endpoints listed on this page have been added.
|
||||
|
||||
.. versionchanged:: 4.18
|
||||
|
||||
The ``source_type`` parameter has been added.
|
||||
|
||||
.. _`rest-checkin-redeem`:
|
||||
|
||||
Checking a ticket in
|
||||
|
||||
@@ -40,6 +40,10 @@ ignore_in_statistics boolean If ``true``, ch
|
||||
consider_tickets_used boolean If ``true`` (default), tickets checked in on this list will be considered "used" by other functionality, i.e. when checking if they can still be canceled.
|
||||
===================================== ========================== =======================================================
|
||||
|
||||
.. versionchanged:: 4.12
|
||||
|
||||
The ``addon_match`` attribute has been added.
|
||||
|
||||
.. versionchanged:: 2023.9
|
||||
|
||||
The ``ignore_in_statistics`` and ``consider_tickets_used`` attributes have been added.
|
||||
|
||||
@@ -34,6 +34,12 @@ password string Can only be set
|
||||
not be included in any responses.
|
||||
===================================== ========================== =======================================================
|
||||
|
||||
.. versionadded:: 4.0
|
||||
|
||||
.. versionchanged:: 4.3
|
||||
|
||||
Passwords can now be set through the API during customer creation.
|
||||
|
||||
.. versionchanged:: 2024.3
|
||||
|
||||
The attribute ``phone`` has been added.
|
||||
|
||||
@@ -61,6 +61,25 @@ public_url string The public, cus
|
||||
Endpoints
|
||||
---------
|
||||
|
||||
.. versionchanged:: 4.0
|
||||
|
||||
The ``clone_from`` parameter has been added to the event creation endpoint.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
|
||||
The ``with_availability_for`` parameter has been added.
|
||||
|
||||
The ``search`` query parameter has been added to filter events by their slug, name, or location in any language.
|
||||
|
||||
.. versionchanged:: 4.17
|
||||
|
||||
The ``public_url`` field has been added.
|
||||
|
||||
.. versionchanged:: 5.0
|
||||
|
||||
The ``date_from_before``, ``date_from_after``, ``date_to_before``, and ``date_to_after`` query parameters have been
|
||||
added.
|
||||
|
||||
.. http:get:: /api/v1/organizers/(organizer)/events/
|
||||
|
||||
Returns a list of all events within a given organizer the authenticated user/token has access to.
|
||||
@@ -611,6 +630,10 @@ organizer level.
|
||||
:statuscode 401: Authentication failure
|
||||
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
|
||||
|
||||
.. versionchanged:: 4.18
|
||||
|
||||
The ``readonly`` flag has been added.
|
||||
|
||||
.. http:patch:: /api/v1/organizers/(organizer)/events/(event)/settings/
|
||||
|
||||
Updates event settings. Note that ``PUT`` is not allowed here, only ``PATCH``.
|
||||
|
||||
@@ -47,6 +47,11 @@ acceptor string Organizer slug
|
||||
this field was added.)
|
||||
===================================== ========================== =======================================================
|
||||
|
||||
.. versionchanged:: 4.20
|
||||
|
||||
The ``owner_ticket`` and ``issuer`` attributes of the gift card and the ``info`` and ``acceptor`` attributes of the
|
||||
gift card transaction resource have been added.
|
||||
|
||||
Endpoints
|
||||
---------
|
||||
|
||||
|
||||
@@ -111,6 +111,18 @@ internal_reference string Customer's refe
|
||||
===================================== ========================== =======================================================
|
||||
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
|
||||
The attributes ``fee_type`` and ``fee_internal_type`` have been added.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
|
||||
The attribute ``lines.event_location`` has been added.
|
||||
|
||||
.. versionchanged:: 4.6
|
||||
|
||||
The attribute ``lines.subevent`` has been added.
|
||||
|
||||
.. versionchanged:: 2023.8
|
||||
|
||||
The ``event`` attribute has been added. The organizer-level endpoint has been added.
|
||||
|
||||
@@ -64,6 +64,10 @@ hide_without_voucher boolean If ``true``, th
|
||||
meta_data object Values set for event-specific meta data parameters.
|
||||
===================================== ========================== =======================================================
|
||||
|
||||
.. versionchanged:: 4.16
|
||||
|
||||
The ``meta_data`` and ``checkin_attention`` attributes have been added.
|
||||
|
||||
.. versionchanged:: 2023.10
|
||||
|
||||
The ``free_price_suggestion`` attribute has been added.
|
||||
|
||||
@@ -211,6 +211,28 @@ bundles list of objects Definition of
|
||||
meta_data object Values set for event-specific meta data parameters.
|
||||
======================================= ========================== =======================================================
|
||||
|
||||
.. versionchanged:: 4.0
|
||||
|
||||
The attributes ``require_membership``, ``require_membership_types``, ``grant_membership_type``, ``grant_membership_duration_like_event``,
|
||||
``grant_membership_duration_days`` and ``grant_membership_duration_months`` have been added.
|
||||
|
||||
.. versionchanged:: 4.4
|
||||
|
||||
The attributes ``require_membership_hidden`` attribute has been added.
|
||||
|
||||
.. versionchanged:: 4.16
|
||||
|
||||
The ``variations[x].meta_data`` and ``variations[x].checkin_attention`` attributes have been added.
|
||||
The ``personalized`` attribute has been added.
|
||||
|
||||
.. versionchanged:: 4.17
|
||||
|
||||
The ``validity_*`` attributes have been added.
|
||||
|
||||
.. versionchanged:: 4.18
|
||||
|
||||
The ``media_policy`` and ``media_type`` attributes have been added.
|
||||
|
||||
.. versionchanged:: 2023.10
|
||||
|
||||
The ``checkin_text`` and ``variations[x].checkin_text`` attributes have been added.
|
||||
|
||||
@@ -114,6 +114,34 @@ plugin_data object Additional data
|
||||
===================================== ========================== =======================================================
|
||||
|
||||
|
||||
.. versionchanged:: 4.0
|
||||
|
||||
The ``customer`` attribute has been added.
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
|
||||
The ``custom_followup_at`` attribute has been added.
|
||||
|
||||
.. versionchanged:: 4.4
|
||||
|
||||
The ``item`` and ``variation`` query parameters have been added.
|
||||
|
||||
.. versionchanged:: 4.6
|
||||
|
||||
The ``subevent`` query parameters has been added.
|
||||
|
||||
.. versionchanged:: 4.8
|
||||
|
||||
The ``order.fees.id`` attribute has been added.
|
||||
|
||||
.. versionchanged:: 4.15
|
||||
|
||||
The ``include`` query parameter has been added.
|
||||
|
||||
.. versionchanged:: 4.16
|
||||
|
||||
The ``valid_if_pending`` attribute has been added.
|
||||
|
||||
.. versionchanged:: 2023.8
|
||||
|
||||
The ``event`` attribute has been added. The organizer-level endpoint has been added.
|
||||
@@ -232,6 +260,10 @@ pdf_data object Data object req
|
||||
plugin_data object Additional data added by plugins.
|
||||
===================================== ========================== =======================================================
|
||||
|
||||
.. versionchanged:: 4.16
|
||||
|
||||
The attributes ``blocked``, ``valid_from`` and ``valid_until`` have been added.
|
||||
|
||||
.. versionchanged:: 2024.9
|
||||
|
||||
The attribute ``print_logs`` has been added.
|
||||
@@ -724,6 +756,10 @@ Fetching individual orders
|
||||
Order ticket download
|
||||
---------------------
|
||||
|
||||
.. versionchanged:: 4.10
|
||||
|
||||
The API now supports ticket downloads for pending orders if allowed by the event settings.
|
||||
|
||||
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/download/(output)/
|
||||
|
||||
Download tickets for an order, identified by its order code. Depending on the chosen output, the response might
|
||||
@@ -1796,6 +1832,10 @@ Fetching individual positions
|
||||
Order position ticket download
|
||||
------------------------------
|
||||
|
||||
.. versionchanged:: 4.10
|
||||
|
||||
The API now supports ticket downloads for pending orders if allowed by the event settings.
|
||||
|
||||
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/(id)/download/(output)/
|
||||
|
||||
Download tickets for one order position, identified by its internal ID.
|
||||
@@ -1848,6 +1888,15 @@ Order position ticket download
|
||||
Manipulating individual positions
|
||||
---------------------------------
|
||||
|
||||
.. versionchanged:: 4.8
|
||||
|
||||
The ``PATCH`` method now supports changing items, variations, subevents, seats, prices, and tax rules.
|
||||
The ``POST`` endpoint to add individual positions has been added.
|
||||
|
||||
.. versionadded:: 4.16
|
||||
|
||||
The endpoints to manage blocks have been added.
|
||||
|
||||
.. versionchanged:: 2024.9
|
||||
|
||||
The API now supports logging ticket and badge prints.
|
||||
@@ -2177,6 +2226,10 @@ multiple changes to an order at once within one transaction. This makes it possi
|
||||
attendees in an order without running into conflicts. This interface also offers some possibilities not available
|
||||
otherwise, such as splitting an order or changing fees.
|
||||
|
||||
.. versionchanged:: 4.8
|
||||
|
||||
This endpoint has been added to the system.
|
||||
|
||||
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/change/
|
||||
|
||||
Performs a change operation on an order. You can supply the following fields:
|
||||
|
||||
@@ -25,6 +25,10 @@ public_url string The public, cus
|
||||
Endpoints
|
||||
---------
|
||||
|
||||
.. versionchanged:: 4.17
|
||||
|
||||
The ``public_url`` field has been added.
|
||||
|
||||
.. http:get:: /api/v1/organizers/
|
||||
|
||||
Returns a list of all organizers the authenticated user/token has access to.
|
||||
|
||||
@@ -36,6 +36,11 @@ available_number integer Number of avail
|
||||
slightly out of date. ``null`` means unlimited.
|
||||
===================================== ========================== =======================================================
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
|
||||
The ``with_availability`` query parameter has been added.
|
||||
|
||||
|
||||
Endpoints
|
||||
---------
|
||||
|
||||
|
||||
@@ -6,6 +6,10 @@ Data shredders
|
||||
pretix and it's plugins include a number of data shredders that allow you to clear personal information from the system.
|
||||
This page shows you how to use these shredders through the API.
|
||||
|
||||
.. versionchanged:: 4.12
|
||||
|
||||
This feature has been added to the API.
|
||||
|
||||
.. warning::
|
||||
|
||||
Unlike the user interface, the API will not force you to download tax-relevant data before you delete it.
|
||||
|
||||
@@ -59,6 +59,15 @@ seat_category_mapping object An object mappi
|
||||
last_modified datetime Last modification of this object
|
||||
===================================== ========================== =======================================================
|
||||
|
||||
.. versionchanged:: 4.15
|
||||
|
||||
The ``search`` query parameter has been added to filter sub-events by their name or location in any language.
|
||||
|
||||
.. versionchanged:: 5.0
|
||||
|
||||
The ``date_from_before``, ``date_from_after``, ``date_to_before``, and ``date_to_after`` query parameters have been
|
||||
added.
|
||||
|
||||
.. versionchanged:: 2023.8.0
|
||||
|
||||
For the organizer-wide endpoint, the ``search`` query parameter has been modified to filter sub-events by their parent events slug too.
|
||||
@@ -66,6 +75,10 @@ last_modified datetime Last modificati
|
||||
Endpoints
|
||||
---------
|
||||
|
||||
.. versionchanged:: 4.1
|
||||
|
||||
The ``with_availability_for`` parameter has been added.
|
||||
|
||||
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/subevents/
|
||||
|
||||
Returns a list of all sub-events of an event.
|
||||
|
||||
@@ -40,6 +40,10 @@ custom_rules object Dynamic rules s
|
||||
===================================== ========================== =======================================================
|
||||
|
||||
|
||||
.. versionchanged:: 4.6
|
||||
|
||||
The ``internal_name`` and ``keep_gross_if_rate_changes`` attributes have been added.
|
||||
|
||||
.. versionchanged:: 2023.6
|
||||
|
||||
The ``custom_rules`` attribute has been added.
|
||||
|
||||
@@ -39,6 +39,10 @@ can_change_vouchers boolean
|
||||
can_checkin_orders boolean
|
||||
===================================== ========================== =======================================================
|
||||
|
||||
.. versionchanged:: 4.18
|
||||
|
||||
The ``can_manage_reusable_media`` permission has been added.
|
||||
|
||||
Team member resource
|
||||
--------------------
|
||||
|
||||
|
||||
@@ -178,6 +178,13 @@ You can then implement a view as you would normally do. It will be automatically
|
||||
* Your plugin is enabled
|
||||
* The locale is set correctly
|
||||
|
||||
.. versionchanged:: 1.7
|
||||
|
||||
The ``event_url()`` wrapper has been added in 1.7 to replace the former ``@event_view`` decorator. The
|
||||
``event_url()`` wrapper is optional and using ``url()`` still works, but you will not be able to set the
|
||||
``require_live`` setting any more via the decorator. The ``@event_view`` decorator is now deprecated and
|
||||
does nothing.
|
||||
|
||||
REST API viewsets
|
||||
-----------------
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ Contents:
|
||||
exporter
|
||||
ticketoutput
|
||||
payment
|
||||
payment_2.0
|
||||
email
|
||||
placeholder
|
||||
invoice
|
||||
|
||||
129
doc/development/api/payment_2.0.rst
Normal file
129
doc/development/api/payment_2.0.rst
Normal file
@@ -0,0 +1,129 @@
|
||||
.. highlight:: python
|
||||
:linenothreshold: 5
|
||||
|
||||
.. _`payment2.0`:
|
||||
|
||||
Porting a payment provider from pretix 1.x to pretix 2.x
|
||||
========================================================
|
||||
|
||||
In pretix 2.x, we changed large parts of the payment provider API. This documentation details the changes we made
|
||||
and shows you how you can make an existing pretix 1.x payment provider compatible with pretix 2.x
|
||||
|
||||
Conceptual overview
|
||||
-------------------
|
||||
|
||||
In pretix 1.x, an order was always directly connected to a payment provider for the full life of an order. As long as
|
||||
an order was unpaid, this could still be changed in some cases, but once an order was paid, no changes to the payment
|
||||
provider were possible any more. Additionally, the internal state of orders allowed orders only to be fully paid or
|
||||
not paid at all. This leads to a couple of consequences:
|
||||
|
||||
* Payment-related functions (like "execute payment" or "do a refund") always operated on full orders.
|
||||
|
||||
* Changing the total of an order was basically impossible once an order was paid, since there was no concept of
|
||||
partial payments or partial refunds.
|
||||
|
||||
* Payment provider plugins needed to take complicated steps to detect cases that require human intervention, like e.g.
|
||||
|
||||
* An order has expired, no quota is left to revive it, but a payment has been received
|
||||
|
||||
* A payment has been received for a canceled order
|
||||
|
||||
* A payment has been received for an order that has already been paid with a different payment method
|
||||
|
||||
* An external payment service notified us of a refund/dispute
|
||||
|
||||
We noticed that we copied and repeated large portions of code in all our official payment provider plugins, just
|
||||
to deal with some of these cases.
|
||||
|
||||
* Sometimes, there is the need to mark an order as refunded within pretix, without automatically triggering a refund
|
||||
with an external API. Every payment method needed to implement a user interface for this independently.
|
||||
|
||||
* If a refund was not possible automatically, there was no way user to track which payments actually have been refunded
|
||||
manually and which are still left to do.
|
||||
|
||||
* When the payment with one payment provider failed and the user changed to a different payment provider, all
|
||||
information about the first payment was lost from the order object and could only be retrieved from order log data,
|
||||
which also made it hard to design a data shredder API to get rid of this data.
|
||||
|
||||
In pretix 2.x, we introduced two new models, :py:class:`OrderPayment <pretix.base.models.OrderPayment>` and
|
||||
:py:class:`OrderRefund <pretix.base.models.OrderRefund>`. Each instance of these is connected to an order and
|
||||
represents one single attempt to pay or refund a specific amount of money. Each one of these has an individual state,
|
||||
can individually fail or succeed, and carries an amount variable that can differ from the order total.
|
||||
|
||||
This has the following advantages:
|
||||
|
||||
* The system can now detect orders that are over- or underpaid, independent of the payment providers in use.
|
||||
|
||||
* Therefore, we can now allow partial payments, partial refunds, and changing paid orders, and automatically detect
|
||||
the cases listed above and notify the user.
|
||||
|
||||
Payment providers now interact with those payment and refund objects more than with orders.
|
||||
|
||||
Your to-do list
|
||||
---------------
|
||||
|
||||
Payment processing
|
||||
""""""""""""""""""
|
||||
|
||||
* The method ``BasePaymentProvider.order_pending_render`` has been removed and replaced by a new
|
||||
``BasePaymentProvider.payment_pending_render(request, payment)`` method that is passed an ``OrderPayment``
|
||||
object instead of an ``Order``.
|
||||
|
||||
* The method ``BasePaymentProvider.payment_form_render`` now receives a new ``total`` parameter.
|
||||
|
||||
* The method ``BasePaymentProvider.payment_perform`` has been removed and replaced by a new method
|
||||
``BasePaymentProvider.execute_payment(request, payment)`` that is passed an ``OrderPayment``
|
||||
object instead of an ``Order``.
|
||||
|
||||
* The function ``pretix.base.services.mark_order_paid`` has been removed, instead call ``payment.confirm()``
|
||||
on a pending ``OrderPayment`` object. If no further payments are required for this order, this will also
|
||||
mark the order as paid automatically. Note that ``payment.confirm()`` can still throw a ``QuotaExceededException``,
|
||||
however it will still mark the payment as complete (not the order!), so you should catch this exception and
|
||||
inform the user, but not abort the transaction.
|
||||
|
||||
* A new property ``BasePaymentProvider.abort_pending_allowed`` has been introduced. Only if set, the user will
|
||||
be able to retry a payment or switch the payment method when the order currently has a payment object in
|
||||
state ``"pending"``. This replaces ``BasePaymentProvider.order_can_retry``, which no longer exists.
|
||||
|
||||
* The methods ``BasePaymentProvider.retry_prepare`` and ``BasePaymentProvider.order_prepare`` have both been
|
||||
replaced by a new method ``BasePaymentProvider.payment_prepare(request, payment)`` that is passed an ``OrderPayment``
|
||||
object instead of an ``Order``. **Keep in mind that this payment object might have an amount property that
|
||||
differs from the order total, if the order is already partially paid.**
|
||||
|
||||
* The method ``BasePaymentProvider.order_paid_render`` has been removed.
|
||||
|
||||
* The method ``BasePaymentProvider.order_control_render`` has been removed and replaced by a new method
|
||||
``BasePaymentProvider.payment_control_render(request, payment)`` that is passed an ``OrderPayment``
|
||||
object instead of an ``Order``.
|
||||
|
||||
* There's no need to manually deal with excess payments or duplicate payments anymore, just setting the ``OrderPayment``
|
||||
methods to the correct state will do the job.
|
||||
|
||||
Creating refunds
|
||||
""""""""""""""""
|
||||
|
||||
* The methods ``BasePaymentProvider.order_control_refund_render`` and ``BasePaymentProvider.order_control_refund_perform``
|
||||
have been removed.
|
||||
|
||||
* Two new boolean methods ``BasePaymentProvider.payment_refund_supported(payment)`` and ``BasePaymentProvider.payment_partial_refund_supported(payment)``
|
||||
have been introduced. They should be set to return ``True`` if and only if the payment API allows to *automatically*
|
||||
transfer the money back to the customer.
|
||||
|
||||
* A new method ``BasePaymentProvider.execute_refund(refund)`` has been introduced. This method is called using a
|
||||
``OrderRefund`` object in ``"created"`` state and is expected to transfer the money back and confirm success with
|
||||
calling ``refund.done()``. This will only ever be called if either ``BasePaymentProvider.payment_refund_supported(payment)``
|
||||
or ``BasePaymentProvider.payment_partial_refund_supported(payment)`` return ``True``.
|
||||
|
||||
Processing external refunds
|
||||
"""""""""""""""""""""""""""
|
||||
|
||||
* If e.g. a webhook API notifies you that a payment has been disputed or refunded with the external API, you are
|
||||
expected to call ``OrderPayment.create_external_refund(self, amount, execution_date, info='{}')`` on this payment.
|
||||
This will create and return an appropriate ``OrderRefund`` object and send out a notification. However, it will not
|
||||
mark the order as refunded, but will ask the event organizer for a decision.
|
||||
|
||||
Data shredders
|
||||
""""""""""""""
|
||||
|
||||
* The method ``BasePaymentProvider.shred_payment_info`` is no longer passed an order, but instead **either**
|
||||
an ``OrderPayment`` **or** an ``OrderRefund``.
|
||||
@@ -107,7 +107,7 @@ dependencies = [
|
||||
[project.optional-dependencies]
|
||||
memcached = ["pylibmc"]
|
||||
dev = [
|
||||
"aiohttp==3.12.*",
|
||||
"aiohttp==3.11.*",
|
||||
"coverage",
|
||||
"coveralls",
|
||||
"fakeredis==2.26.*",
|
||||
@@ -122,7 +122,7 @@ dev = [
|
||||
"pytest-django==4.*",
|
||||
"pytest-mock==3.14.*",
|
||||
"pytest-sugar",
|
||||
"pytest-xdist==3.7.*",
|
||||
"pytest-xdist==3.6.*",
|
||||
"pytest==8.3.*",
|
||||
"responses",
|
||||
]
|
||||
|
||||
@@ -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__ = "2025.6.0.dev0"
|
||||
__version__ = "2025.5.0.dev0"
|
||||
|
||||
@@ -184,7 +184,8 @@ class NamePartsWidget(forms.MultiWidget):
|
||||
these_attrs.pop('data-no-required-attr', None)
|
||||
these_attrs['autocomplete'] = (self.attrs.get('autocomplete', '') + ' ' + self.autofill_map.get(self.scheme['fields'][i][0], 'off')).strip()
|
||||
these_attrs['data-size'] = self.scheme['fields'][i][2]
|
||||
these_attrs['aria-label'] = self.scheme['fields'][i][1]
|
||||
if len(self.widgets) > 1:
|
||||
these_attrs['aria-label'] = self.scheme['fields'][i][1]
|
||||
else:
|
||||
these_attrs = final_attrs
|
||||
output.append(widget.render(name + '_%s' % i, widget_value, these_attrs, renderer=renderer))
|
||||
|
||||
@@ -43,6 +43,7 @@ from zoneinfo import ZoneInfo
|
||||
|
||||
from django import forms
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.core.exceptions import ImproperlyConfigured, ValidationError
|
||||
from django.db import transaction
|
||||
from django.dispatch import receiver
|
||||
@@ -92,73 +93,15 @@ class PaymentProviderForm(Form):
|
||||
cleaned_data = super().clean()
|
||||
for k, v in self.fields.items():
|
||||
val = cleaned_data.get(k)
|
||||
if hasattr(v, '_required') and v._required and not val:
|
||||
if v._required and not val:
|
||||
self.add_error(k, _('This field is required.'))
|
||||
return cleaned_data
|
||||
|
||||
|
||||
class GiftCardPaymentForm(PaymentProviderForm):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.event = kwargs.pop('event')
|
||||
self.testmode = kwargs.pop('testmode')
|
||||
self.positions = kwargs.pop('positions')
|
||||
self.used_cards = kwargs.pop('used_cards')
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
if "code" not in cleaned_data:
|
||||
return cleaned_data
|
||||
|
||||
code = cleaned_data["code"].strip()
|
||||
msg = ""
|
||||
for p in self.positions:
|
||||
if p.item.issue_giftcard:
|
||||
msg = _("You cannot pay with gift cards when buying a gift card.")
|
||||
self.add_error('code', msg)
|
||||
return cleaned_data
|
||||
try:
|
||||
event = self.event
|
||||
gc = event.organizer.accepted_gift_cards.get(
|
||||
secret=code
|
||||
)
|
||||
if gc.currency != event.currency:
|
||||
msg = _("This gift card does not support this currency.")
|
||||
elif gc.testmode and not self.testmode:
|
||||
msg = _("This gift card can only be used in test mode.")
|
||||
elif not gc.testmode and self.testmode:
|
||||
msg = _("Only test gift cards can be used in test mode.")
|
||||
elif gc.expires and gc.expires < time_machine_now():
|
||||
msg = _("This gift card is no longer valid.")
|
||||
elif gc.value <= Decimal("0.00"):
|
||||
msg = _("All credit on this gift card has been used.")
|
||||
|
||||
if msg:
|
||||
self.add_error('code', msg)
|
||||
return cleaned_data
|
||||
|
||||
if gc.pk in self.used_cards:
|
||||
self.add_error('code', _("This gift card is already used for your payment."))
|
||||
return cleaned_data
|
||||
except GiftCard.DoesNotExist:
|
||||
if event.vouchers.filter(code__iexact=code).exists():
|
||||
msg = _("You entered a voucher instead of a gift card. Vouchers can only be entered on the first page of the shop below "
|
||||
"the product selection.")
|
||||
self.add_error('code', msg)
|
||||
else:
|
||||
msg = _("This gift card is not known.")
|
||||
self.add_error('code', msg)
|
||||
except GiftCard.MultipleObjectsReturned:
|
||||
msg = _("This gift card can not be redeemed since its code is not unique. Please contact the organizer of this event.")
|
||||
self.add_error('code', msg)
|
||||
return cleaned_data
|
||||
|
||||
|
||||
class BasePaymentProvider:
|
||||
"""
|
||||
This is the base class for all payment providers.
|
||||
"""
|
||||
payment_form_template_name = 'pretixpresale/event/checkout_payment_form_default.html'
|
||||
|
||||
def __init__(self, event: Event):
|
||||
self.event = event
|
||||
@@ -689,6 +632,11 @@ class BasePaymentProvider:
|
||||
the ``_restrict_countries`` and ``_restrict_to_sales_channels`` setting.
|
||||
|
||||
:param total: The total value without the payment method fee, after taxes.
|
||||
|
||||
.. versionchanged:: 1.17.0
|
||||
|
||||
The ``total`` parameter has been added. For backwards compatibility, this method is called again
|
||||
without this parameter if it raises a ``TypeError`` on first try.
|
||||
"""
|
||||
timing = self._is_available_by_time(cart_id=get_or_create_cart_id(request))
|
||||
pricing = True
|
||||
@@ -746,7 +694,7 @@ class BasePaymentProvider:
|
||||
:param order: Only set when this is a change to a new payment method for an existing order.
|
||||
"""
|
||||
form = self.payment_form(request)
|
||||
template = get_template(self.payment_form_template_name)
|
||||
template = get_template('pretixpresale/event/checkout_payment_form_default.html')
|
||||
ctx = {'request': request, 'form': form}
|
||||
return template.render(ctx)
|
||||
|
||||
@@ -1370,49 +1318,6 @@ class GiftCardPayment(BasePaymentProvider):
|
||||
multi_use_supported = True
|
||||
execute_payment_needs_user = False
|
||||
verbose_name = _("Gift card")
|
||||
payment_form_class = GiftCardPaymentForm
|
||||
payment_form_template_name = 'pretixcontrol/giftcards/checkout.html'
|
||||
|
||||
def payment_form(self, request: HttpRequest) -> Form:
|
||||
# Unfortunately, in payment_form we do not know if we're in checkout
|
||||
# or in an existing order. But we need to do the validation logic in the
|
||||
# form to get the error messages in the right places for accessbility :-(
|
||||
if 'checkout' in request.resolver_match.url_name:
|
||||
cs = cart_session(request)
|
||||
used_cards = [
|
||||
p.get('info_data', {}).get('gift_card')
|
||||
for p in cs.get('payments', [])
|
||||
if p.get('info_data', {}).get('gift_card')
|
||||
]
|
||||
positions = get_cart(request)
|
||||
testmode = self.event.testmode
|
||||
else:
|
||||
used_cards = []
|
||||
order = self.event.orders.get(code=request.resolver_match.kwargs["order"])
|
||||
positions = order.positions.all()
|
||||
testmode = order.testmode
|
||||
|
||||
form = self.payment_form_class(
|
||||
event=self.event,
|
||||
used_cards=used_cards,
|
||||
positions=positions,
|
||||
testmode=testmode,
|
||||
data=(request.POST if request.method == 'POST' and request.POST.get("payment") == self.identifier else None),
|
||||
prefix='payment_%s' % self.identifier,
|
||||
initial={
|
||||
k.replace('payment_%s_' % self.identifier, ''): v
|
||||
for k, v in request.session.items()
|
||||
if k.startswith('payment_%s_' % self.identifier)
|
||||
}
|
||||
)
|
||||
form.fields = self.payment_form_fields
|
||||
|
||||
for k, v in form.fields.items():
|
||||
v._required = v.required
|
||||
v.required = False
|
||||
v.widget.is_required = False
|
||||
|
||||
return form
|
||||
|
||||
@property
|
||||
def public_name(self) -> str:
|
||||
@@ -1445,19 +1350,6 @@ class GiftCardPayment(BasePaymentProvider):
|
||||
f.move_to_end("_enabled", last=False)
|
||||
return f
|
||||
|
||||
@property
|
||||
def payment_form_fields(self):
|
||||
fields = [
|
||||
(
|
||||
"code",
|
||||
forms.CharField(
|
||||
label=_("Gift card code"),
|
||||
required=True,
|
||||
),
|
||||
),
|
||||
]
|
||||
return OrderedDict(fields)
|
||||
|
||||
@property
|
||||
def test_mode_message(self) -> str:
|
||||
return _("In test mode, only test cards will work.")
|
||||
@@ -1468,6 +1360,11 @@ class GiftCardPayment(BasePaymentProvider):
|
||||
def order_change_allowed(self, order: Order) -> bool:
|
||||
return super().order_change_allowed(order) and self.event.organizer.has_gift_cards
|
||||
|
||||
def payment_form_render(self, request: HttpRequest, total: Decimal) -> str:
|
||||
return get_template('pretixcontrol/giftcards/checkout.html').render({
|
||||
'request': request,
|
||||
})
|
||||
|
||||
def checkout_confirm_render(self, request, order=None, info_data=None) -> str:
|
||||
return get_template('pretixcontrol/giftcards/checkout_confirm.html').render({
|
||||
'info_data': info_data,
|
||||
@@ -1535,6 +1432,21 @@ class GiftCardPayment(BasePaymentProvider):
|
||||
def _add_giftcard_to_cart(self, cs, gc):
|
||||
from pretix.base.services.cart import add_payment_to_cart_session
|
||||
|
||||
if gc.currency != self.event.currency:
|
||||
raise ValidationError(_("This gift card does not support this currency."))
|
||||
if gc.testmode and not self.event.testmode:
|
||||
raise ValidationError(_("This gift card can only be used in test mode."))
|
||||
if not gc.testmode and self.event.testmode:
|
||||
raise ValidationError(_("Only test gift cards can be used in test mode."))
|
||||
if gc.expires and gc.expires < time_machine_now():
|
||||
raise ValidationError(_("This gift card is no longer valid."))
|
||||
if gc.value <= Decimal("0.00"):
|
||||
raise ValidationError(_("All credit on this gift card has been used."))
|
||||
|
||||
for p in cs.get('payments', []):
|
||||
if p['provider'] == self.identifier and p['info_data']['gift_card'] == gc.pk:
|
||||
raise ValidationError(_("This gift card is already used for your payment."))
|
||||
|
||||
add_payment_to_cart_session(
|
||||
cs,
|
||||
self,
|
||||
@@ -1546,32 +1458,77 @@ class GiftCardPayment(BasePaymentProvider):
|
||||
)
|
||||
|
||||
def checkout_prepare(self, request: HttpRequest, cart: Dict[str, Any]) -> Union[bool, str, None]:
|
||||
form = self.payment_form(request)
|
||||
if not form.is_valid():
|
||||
return False
|
||||
for p in get_cart(request):
|
||||
if p.item.issue_giftcard:
|
||||
messages.error(request, _("You cannot pay with gift cards when buying a gift card."))
|
||||
return
|
||||
|
||||
gc = self.event.organizer.accepted_gift_cards.get(
|
||||
secret=form.cleaned_data["code"]
|
||||
)
|
||||
cs = cart_session(request)
|
||||
self._add_giftcard_to_cart(cs, gc)
|
||||
return True
|
||||
if not request.POST.get("giftcard"):
|
||||
messages.error(request, _("Please enter the code of your gift card."))
|
||||
return
|
||||
|
||||
try:
|
||||
gc = self.event.organizer.accepted_gift_cards.get(
|
||||
secret=request.POST.get("giftcard").strip()
|
||||
)
|
||||
cs = cart_session(request)
|
||||
try:
|
||||
self._add_giftcard_to_cart(cs, gc)
|
||||
return True
|
||||
except ValidationError as e:
|
||||
messages.error(request, str(e.message))
|
||||
return
|
||||
except GiftCard.DoesNotExist:
|
||||
if self.event.vouchers.filter(code__iexact=request.POST.get("giftcard")).exists():
|
||||
messages.warning(request, _("You entered a voucher instead of a gift card. Vouchers can only be entered on the first page of the shop below "
|
||||
"the product selection."))
|
||||
else:
|
||||
messages.error(request, _("This gift card is not known."))
|
||||
except GiftCard.MultipleObjectsReturned:
|
||||
messages.error(request, _("This gift card can not be redeemed since its code is not unique. Please contact the organizer of this event."))
|
||||
|
||||
def payment_prepare(self, request: HttpRequest, payment: OrderPayment) -> Union[bool, str, None]:
|
||||
form = self.payment_form(request)
|
||||
if not form.is_valid():
|
||||
return False
|
||||
gc = self.event.organizer.accepted_gift_cards.get(
|
||||
secret=form.cleaned_data["code"]
|
||||
)
|
||||
payment.info_data = {
|
||||
'gift_card': gc.pk,
|
||||
'gift_card_secret': gc.secret,
|
||||
'retry': True
|
||||
}
|
||||
payment.amount = min(payment.amount, gc.value)
|
||||
payment.save()
|
||||
return True
|
||||
for p in payment.order.positions.all():
|
||||
if p.item.issue_giftcard:
|
||||
messages.error(request, _("You cannot pay with gift cards when buying a gift card."))
|
||||
return
|
||||
|
||||
try:
|
||||
gc = self.event.organizer.accepted_gift_cards.get(
|
||||
secret=request.POST.get("giftcard").strip()
|
||||
)
|
||||
if gc.currency != self.event.currency:
|
||||
messages.error(request, _("This gift card does not support this currency."))
|
||||
return
|
||||
if gc.testmode and not payment.order.testmode:
|
||||
messages.error(request, _("This gift card can only be used in test mode."))
|
||||
return
|
||||
if not gc.testmode and payment.order.testmode:
|
||||
messages.error(request, _("Only test gift cards can be used in test mode."))
|
||||
return
|
||||
if gc.expires and gc.expires < time_machine_now():
|
||||
messages.error(request, _("This gift card is no longer valid."))
|
||||
return
|
||||
if gc.value <= Decimal("0.00"):
|
||||
messages.error(request, _("All credit on this gift card has been used."))
|
||||
return
|
||||
payment.info_data = {
|
||||
'gift_card': gc.pk,
|
||||
'gift_card_secret': gc.secret,
|
||||
'retry': True
|
||||
}
|
||||
payment.amount = min(payment.amount, gc.value)
|
||||
payment.save()
|
||||
|
||||
return True
|
||||
except GiftCard.DoesNotExist:
|
||||
if self.event.vouchers.filter(code__iexact=request.POST.get("giftcard").strip()).exists():
|
||||
messages.warning(request, _("You entered a voucher instead of a gift card. Vouchers can only be entered on the first page of the shop below "
|
||||
"the product selection."))
|
||||
else:
|
||||
messages.error(request, _("This gift card is not known."))
|
||||
except GiftCard.MultipleObjectsReturned:
|
||||
messages.error(request, _("This gift card can not be redeemed since its code is not unique. Please contact the organizer of this event."))
|
||||
|
||||
def execute_payment(self, request: HttpRequest, payment: OrderPayment, is_early_special_case=False) -> str:
|
||||
for p in payment.order.positions.all():
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{% load i18n %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="14" viewBox="0 0 18 14"
|
||||
class="{{ cls }}" role="img" aria-label="{% trans "Seat" %}">
|
||||
class="{{ cls }}">
|
||||
<path d="M7.713 3.573c-.787-.124-1.677.472-1.511 1.529l.857 3.473c.116.579.578 1.086 1.317 1.086h3.166v3.504c0 1.108 1.556 1.113 1.556.019V8.682c0-.536-.376-1.116-1.099-1.116L9.52 7.563l-.752-2.936c-.147-.648-.583-.981-1.055-1.055v.001Z"></path>
|
||||
<path d="M4.48 5.835a.6.6 0 0 0-.674.725l.71 3.441c.287 1.284 1.39 2.114 2.495 2.114h2.273c.807 0 .811-1.215-.01-1.215H7.188c-.753 0-1.375-.45-1.563-1.289l-.672-3.293c-.062-.3-.26-.452-.474-.483ZM7.433.102a1.468 1.468 0 1 0 0 2.937 1.469 1.469 0 1 0 0-2.937Z"></path>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 695 B After Width: | Height: | Size: 636 B |
@@ -1,7 +1,5 @@
|
||||
{% load i18n %}
|
||||
{% load bootstrap3 %}
|
||||
{% load rich_text %}
|
||||
|
||||
{{ request.event.settings.payment_giftcard_public_description|rich_text }}
|
||||
|
||||
{% bootstrap_form form layout='checkout' %}
|
||||
<input name="giftcard" class="form-control" placeholder="{% trans "Gift card code" %}">
|
||||
|
||||
@@ -5,7 +5,7 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:35+0000\n"
|
||||
"PO-Revision-Date: 2025-05-30 11:15+0000\n"
|
||||
"PO-Revision-Date: 2025-05-27 10:40+0000\n"
|
||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix/de/"
|
||||
">\n"
|
||||
@@ -10699,17 +10699,23 @@ msgstr ""
|
||||
"sammeln."
|
||||
|
||||
#: pretix/base/settings.py:2071
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information URL"
|
||||
msgstr "URL zu Informationen zur Barrierefreiheit"
|
||||
msgstr "Konto-Informationen"
|
||||
|
||||
#: pretix/base/settings.py:2072
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "This should point e.g. to a part of your website that explains how you "
|
||||
#| "use data gathered in your ticket shop."
|
||||
msgid ""
|
||||
"This should point e.g. to a part of your website that explains how your "
|
||||
"ticket shop complies with accessibility regulation."
|
||||
msgstr ""
|
||||
"Dies sollte bspw. ein Link zu einem Teil Ihrer Website sein, auf dem Sie "
|
||||
"beschreiben, wie Ihr Ticketshop im Einklang mit Richtlinien zur "
|
||||
"Barrierefreiheit steht."
|
||||
"beschreiben, wie Sie persönliche Daten nutzen, die Sie in Ihrem Ticketshop "
|
||||
"sammeln."
|
||||
|
||||
#: pretix/base/settings.py:2079
|
||||
#: pretix/presale/templates/pretixpresale/event/base.html:228
|
||||
@@ -10717,16 +10723,22 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/organizers/accessibility.html:6
|
||||
#: pretix/presale/templates/pretixpresale/organizers/base.html:106
|
||||
#: pretix/presale/templates/pretixpresale/organizers/base.html:111
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information"
|
||||
msgstr "Informationen zur Barrierefreiheit"
|
||||
msgstr "Konto-Informationen"
|
||||
|
||||
#: pretix/base/settings.py:2083
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information title"
|
||||
msgstr "Titel für Informationen zur Barrierefreiheit"
|
||||
msgstr "Konto-Informationen"
|
||||
|
||||
#: pretix/base/settings.py:2093
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information text"
|
||||
msgstr "Text für Informationen zur Barrierefreiheit"
|
||||
msgstr "Konto-Informationen"
|
||||
|
||||
#: pretix/base/settings.py:2114
|
||||
msgid "Attach ticket files"
|
||||
@@ -23858,8 +23870,10 @@ msgstr ""
|
||||
"Drittanbietern nicht kennen."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:204
|
||||
#, fuzzy
|
||||
#| msgid "Availability"
|
||||
msgid "Accessibility"
|
||||
msgstr "Barrierefreiheit"
|
||||
msgstr "Verfügbarkeit"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:206
|
||||
msgid ""
|
||||
@@ -23868,19 +23882,12 @@ msgid ""
|
||||
"template in <a href=\"https://docs.pretix.eu/trust/accessibility/\" "
|
||||
"target=\"_blank\">our documentation</a>."
|
||||
msgstr ""
|
||||
"In einigen Regionen, einschließlich der Europäischen Union, sind Sie "
|
||||
"verpflichtet, Informationen über die Barrierefreiheit Ihres Ticketshops zu "
|
||||
"veröffentlichen. Sie finden eine Vorlage in <a href="
|
||||
"\"https://docs.pretix.eu/de/trust/accessibility/\" target=\"_blank\">unserer "
|
||||
"Dokumentation</a>."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:216
|
||||
msgid ""
|
||||
"Instead of an URL, you can also configure a text that will be shown within "
|
||||
"pretix. This will be ignored if a URL is configured."
|
||||
msgstr ""
|
||||
"Statt einer URL kannst du auch einen Text eingeben, der von pretix angezeigt "
|
||||
"wird. Dies wird ignoriert, wenn eine URL konfiguriert wurde."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:228
|
||||
msgid "Barcode media"
|
||||
@@ -33392,6 +33399,8 @@ msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:509
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:48
|
||||
#, fuzzy
|
||||
#| msgid "Extend reservation"
|
||||
msgid "Renew reservation"
|
||||
msgstr "Reservierung verlängern"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:36+0000\n"
|
||||
"PO-Revision-Date: 2025-05-30 11:08+0000\n"
|
||||
"PO-Revision-Date: 2025-05-27 10:40+0000\n"
|
||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
"de/>\n"
|
||||
@@ -728,7 +728,7 @@ msgstr "Warenkorb abgelaufen"
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:59
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:87
|
||||
msgid "Your cart is about to expire."
|
||||
msgstr "Ihr Warenkorb läuft gleich ab."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:64
|
||||
msgid "The items in your cart are reserved for you for one minute."
|
||||
@@ -739,10 +739,16 @@ msgstr[1] ""
|
||||
"Die Produkte in Ihrem Warenkorb sind noch {num} Minuten für Sie reserviert."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:86
|
||||
#, fuzzy
|
||||
#| msgid "Cart expired"
|
||||
msgid "Your cart has expired."
|
||||
msgstr "Ihr Warenkorb ist abgelaufen."
|
||||
msgstr "Warenkorb abgelaufen"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:89
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The items in your cart are no longer reserved for you. You can still "
|
||||
#| "complete your order as long as they’re available."
|
||||
msgid ""
|
||||
"The items in your cart are no longer reserved for you. You can still "
|
||||
"complete your order as long as they're available."
|
||||
@@ -753,11 +759,11 @@ msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:90
|
||||
msgid "Do you want to renew the reservation period?"
|
||||
msgstr "Möchten Sie die Reservierung verlängern?"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:93
|
||||
msgid "Renew reservation"
|
||||
msgstr "Reservierung verlängern"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:194
|
||||
msgid "The organizer keeps %(currency)s %(amount)s"
|
||||
@@ -800,12 +806,12 @@ msgstr "Menge erhöhen"
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:19
|
||||
msgctxt "widget"
|
||||
msgid "Filter events by"
|
||||
msgstr "Veranstaltungen filtern nach"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:20
|
||||
msgctxt "widget"
|
||||
msgid "Filter"
|
||||
msgstr "Filtern"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:21
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:19
|
||||
@@ -1052,16 +1058,17 @@ msgid "Close"
|
||||
msgstr "Schließen"
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:62
|
||||
#, fuzzy
|
||||
#| msgctxt "widget"
|
||||
#| msgid "Resume checkout"
|
||||
msgctxt "widget"
|
||||
msgid "Close checkout"
|
||||
msgstr "Kauf schließen"
|
||||
msgstr "Kauf fortsetzen"
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:63
|
||||
msgctxt "widget"
|
||||
msgid "You cannot cancel this operation. Please wait for loading to finish."
|
||||
msgstr ""
|
||||
"Sie können diese Aktion nicht abbrechen. Bitte warten Sie, bis der "
|
||||
"Ladevorgang abgeschlossen ist."
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:64
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:60
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:35+0000\n"
|
||||
"PO-Revision-Date: 2025-05-30 11:15+0000\n"
|
||||
"PO-Revision-Date: 2025-05-27 10:40+0000\n"
|
||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
|
||||
"pretix/pretix/de_Informal/>\n"
|
||||
@@ -10685,17 +10685,23 @@ msgstr ""
|
||||
"sammelst."
|
||||
|
||||
#: pretix/base/settings.py:2071
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information URL"
|
||||
msgstr "URL zu Informationen zur Barrierefreiheit"
|
||||
msgstr "Konto-Informationen"
|
||||
|
||||
#: pretix/base/settings.py:2072
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "This should point e.g. to a part of your website that explains how you "
|
||||
#| "use data gathered in your ticket shop."
|
||||
msgid ""
|
||||
"This should point e.g. to a part of your website that explains how your "
|
||||
"ticket shop complies with accessibility regulation."
|
||||
msgstr ""
|
||||
"Dies sollte bspw. ein Link zu einem Teil deiner Website sein, auf dem du "
|
||||
"beschreibst, wie dein Ticketshop im Einklang mit Richtlinien zur "
|
||||
"Barrierefreiheit steht."
|
||||
"beschreibst, wie du persönliche Daten nutzt, die du in deinem Ticketshop "
|
||||
"sammelst."
|
||||
|
||||
#: pretix/base/settings.py:2079
|
||||
#: pretix/presale/templates/pretixpresale/event/base.html:228
|
||||
@@ -10703,16 +10709,22 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/organizers/accessibility.html:6
|
||||
#: pretix/presale/templates/pretixpresale/organizers/base.html:106
|
||||
#: pretix/presale/templates/pretixpresale/organizers/base.html:111
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information"
|
||||
msgstr "Informationen zur Barrierefreiheit"
|
||||
msgstr "Konto-Informationen"
|
||||
|
||||
#: pretix/base/settings.py:2083
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information title"
|
||||
msgstr "Titel für Informationen zur Barrierefreiheit"
|
||||
msgstr "Konto-Informationen"
|
||||
|
||||
#: pretix/base/settings.py:2093
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information text"
|
||||
msgstr "Text für Informationen zur Barrierefreiheit"
|
||||
msgstr "Konto-Informationen"
|
||||
|
||||
#: pretix/base/settings.py:2114
|
||||
msgid "Attach ticket files"
|
||||
@@ -23822,8 +23834,10 @@ msgstr ""
|
||||
"eingesetzten Drittanbietern nicht kennen."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:204
|
||||
#, fuzzy
|
||||
#| msgid "Availability"
|
||||
msgid "Accessibility"
|
||||
msgstr "Barrierefreiheit"
|
||||
msgstr "Verfügbarkeit"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:206
|
||||
msgid ""
|
||||
@@ -23832,19 +23846,12 @@ msgid ""
|
||||
"template in <a href=\"https://docs.pretix.eu/trust/accessibility/\" "
|
||||
"target=\"_blank\">our documentation</a>."
|
||||
msgstr ""
|
||||
"In einigen Regionen, einschließlich der Europäischen Union, bist du "
|
||||
"verpflichtet, Informationen über die Barrierefreiheit Ihres Ticketshops zu "
|
||||
"veröffentlichen. Du findest eine Vorlage in <a href="
|
||||
"\"https://docs.pretix.eu/de/trust/accessibility/\" target=\"_blank\">unserer "
|
||||
"Dokumentation</a>."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:216
|
||||
msgid ""
|
||||
"Instead of an URL, you can also configure a text that will be shown within "
|
||||
"pretix. This will be ignored if a URL is configured."
|
||||
msgstr ""
|
||||
"Statt einer URL kannst du auch einen Text eingeben, der von pretix angezeigt "
|
||||
"wird. Dies wird ignoriert, wenn eine URL konfiguriert wurde."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:228
|
||||
msgid "Barcode media"
|
||||
@@ -33335,6 +33342,8 @@ msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:509
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:48
|
||||
#, fuzzy
|
||||
#| msgid "Extend reservation"
|
||||
msgid "Renew reservation"
|
||||
msgstr "Reservierung verlängern"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:36+0000\n"
|
||||
"PO-Revision-Date: 2025-05-30 11:07+0000\n"
|
||||
"PO-Revision-Date: 2025-05-27 10:40+0000\n"
|
||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
|
||||
"pretix/pretix-js/de_Informal/>\n"
|
||||
@@ -728,7 +728,7 @@ msgstr "Warenkorb abgelaufen"
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:59
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:87
|
||||
msgid "Your cart is about to expire."
|
||||
msgstr "Dein Warenkorb läuft gleich ab."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:64
|
||||
msgid "The items in your cart are reserved for you for one minute."
|
||||
@@ -739,10 +739,16 @@ msgstr[1] ""
|
||||
"Die Produkte in deinem Warenkorb sind noch {num} Minuten für dich reserviert."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:86
|
||||
#, fuzzy
|
||||
#| msgid "Cart expired"
|
||||
msgid "Your cart has expired."
|
||||
msgstr "Dein Warenkorb ist abgelaufen."
|
||||
msgstr "Warenkorb abgelaufen"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:89
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The items in your cart are no longer reserved for you. You can still "
|
||||
#| "complete your order as long as they’re available."
|
||||
msgid ""
|
||||
"The items in your cart are no longer reserved for you. You can still "
|
||||
"complete your order as long as they're available."
|
||||
@@ -753,11 +759,11 @@ msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:90
|
||||
msgid "Do you want to renew the reservation period?"
|
||||
msgstr "Möchtest du die Reservierung verlängern?"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:93
|
||||
msgid "Renew reservation"
|
||||
msgstr "Reservierung verlängern"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:194
|
||||
msgid "The organizer keeps %(currency)s %(amount)s"
|
||||
@@ -800,12 +806,12 @@ msgstr "Menge erhöhen"
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:19
|
||||
msgctxt "widget"
|
||||
msgid "Filter events by"
|
||||
msgstr "Veranstaltungen filtern nach"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:20
|
||||
msgctxt "widget"
|
||||
msgid "Filter"
|
||||
msgstr "Filtern"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:21
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:19
|
||||
@@ -1052,16 +1058,17 @@ msgid "Close"
|
||||
msgstr "Schließen"
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:62
|
||||
#, fuzzy
|
||||
#| msgctxt "widget"
|
||||
#| msgid "Resume checkout"
|
||||
msgctxt "widget"
|
||||
msgid "Close checkout"
|
||||
msgstr "Kauf schließen"
|
||||
msgstr "Kauf fortsetzen"
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:63
|
||||
msgctxt "widget"
|
||||
msgid "You cannot cancel this operation. Please wait for loading to finish."
|
||||
msgstr ""
|
||||
"Du kannst diese Aktion nicht abbrechen. Bitte warte, bis der Ladevorgang "
|
||||
"abgeschlossen ist."
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:64
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:60
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:35+0000\n"
|
||||
"PO-Revision-Date: 2025-05-30 11:15+0000\n"
|
||||
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
||||
"PO-Revision-Date: 2025-05-14 02:00+0000\n"
|
||||
"Last-Translator: Zona Vip <contacto@zonavip.mx>\n"
|
||||
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"es/>\n"
|
||||
"Language: es\n"
|
||||
@@ -4379,15 +4379,13 @@ msgstr "Opcional. Ningún producto será vendido antes de esta fecha."
|
||||
|
||||
#: pretix/base/models/event.py:621
|
||||
msgid "This event is remote or partially remote."
|
||||
msgstr "Este evento es remoto o parcialmente remoto."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/models/event.py:622
|
||||
msgid ""
|
||||
"This will be used to let users know if the event is in a different timezone "
|
||||
"and let’s us calculate users’ local times."
|
||||
msgstr ""
|
||||
"Esto se utilizará para que los usuarios sepan si el evento se celebra en una "
|
||||
"zona horaria diferente y nos permite calcular la hora local de los usuarios."
|
||||
|
||||
#: pretix/base/models/event.py:642 pretix/control/navigation.py:65
|
||||
msgid "Plugins"
|
||||
@@ -10690,16 +10688,22 @@ msgstr ""
|
||||
"cómo utiliza los datos recopilados en su taquilla virtual."
|
||||
|
||||
#: pretix/base/settings.py:2071
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information URL"
|
||||
msgstr "Información sobre accesibilidad URL"
|
||||
msgstr "Información de la cuenta"
|
||||
|
||||
#: pretix/base/settings.py:2072
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "This should point e.g. to a part of your website that explains how you "
|
||||
#| "use data gathered in your ticket shop."
|
||||
msgid ""
|
||||
"This should point e.g. to a part of your website that explains how your "
|
||||
"ticket shop complies with accessibility regulation."
|
||||
msgstr ""
|
||||
"Debe remitir, por ejemplo, a una parte de su sitio web que explique cómo su "
|
||||
"tienda de entradas cumple la normativa sobre accesibilidad."
|
||||
"Esto debería señalar, por ejemplo, a una parte de su sitio web que explica "
|
||||
"cómo utiliza los datos recopilados en su taquilla virtual."
|
||||
|
||||
#: pretix/base/settings.py:2079
|
||||
#: pretix/presale/templates/pretixpresale/event/base.html:228
|
||||
@@ -10707,16 +10711,22 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/organizers/accessibility.html:6
|
||||
#: pretix/presale/templates/pretixpresale/organizers/base.html:106
|
||||
#: pretix/presale/templates/pretixpresale/organizers/base.html:111
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information"
|
||||
msgstr "Información sobre accesibilidad"
|
||||
msgstr "Información de la cuenta"
|
||||
|
||||
#: pretix/base/settings.py:2083
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information title"
|
||||
msgstr "Título de la información sobre accesibilidad"
|
||||
msgstr "Información de la cuenta"
|
||||
|
||||
#: pretix/base/settings.py:2093
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information text"
|
||||
msgstr "Texto informativo sobre accesibilidad"
|
||||
msgstr "Información de la cuenta"
|
||||
|
||||
#: pretix/base/settings.py:2114
|
||||
msgid "Attach ticket files"
|
||||
@@ -17811,7 +17821,7 @@ msgstr "Funcionamiento en modo de desarrollo"
|
||||
#: pretix/presale/templates/pretixpresale/postmessage.html:27
|
||||
#: pretix/presale/templates/pretixpresale/waiting.html:42
|
||||
msgid "If this takes longer than a few minutes, please contact us."
|
||||
msgstr "Si tarda más de unos minutos, póngase en contacto con nosotros."
|
||||
msgstr "Si esto tarda más de unos minutos, póngase en contacto con nosotros."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:4
|
||||
#: pretix/control/templates/pretixcontrol/organizers/devices.html:71
|
||||
@@ -23848,8 +23858,10 @@ msgstr ""
|
||||
"proveedores de pago o de seguimiento."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:204
|
||||
#, fuzzy
|
||||
#| msgid "Availability"
|
||||
msgid "Accessibility"
|
||||
msgstr "Accesibilidad"
|
||||
msgstr "Disponibilidad"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:206
|
||||
msgid ""
|
||||
@@ -23858,19 +23870,12 @@ msgid ""
|
||||
"template in <a href=\"https://docs.pretix.eu/trust/accessibility/\" "
|
||||
"target=\"_blank\">our documentation</a>."
|
||||
msgstr ""
|
||||
"Algunas jurisdicciones, incluida la Unión Europea, exigen que publique "
|
||||
"información sobre la accesibilidad de su taquilla/tienda de entradas. Puede "
|
||||
"encontrar una plantilla en <a href="
|
||||
"\"https://docs.pretix.eu/trust/accessibility/\" target=\"_blank\">nuestra "
|
||||
"documentación</a>."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:216
|
||||
msgid ""
|
||||
"Instead of an URL, you can also configure a text that will be shown within "
|
||||
"pretix. This will be ignored if a URL is configured."
|
||||
msgstr ""
|
||||
"En lugar de una URL, también puede configurar un texto que se mostrará "
|
||||
"dentro de pretix. Esto se ignorará si se configura una URL."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:228
|
||||
msgid "Barcode media"
|
||||
@@ -32403,6 +32408,8 @@ msgstr ""
|
||||
"y contraseña."
|
||||
|
||||
#: pretix/presale/forms/customer.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Please verify that you entered the correct email addess."
|
||||
msgid "Please verify that you entered the correct email address."
|
||||
msgstr ""
|
||||
"Compruebe que ha introducido la dirección de correo electrónico correcta."
|
||||
@@ -33383,8 +33390,10 @@ msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:509
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:48
|
||||
#, fuzzy
|
||||
#| msgid "Event description"
|
||||
msgid "Renew reservation"
|
||||
msgstr "Renovar reserva"
|
||||
msgstr "Descripción del evento"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:514
|
||||
msgid "Overview of your ordered products."
|
||||
@@ -34684,8 +34693,10 @@ msgstr ""
|
||||
"Una vez completado el proceso en la nueva ventana, podrás continuar aquí."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:58
|
||||
#, fuzzy
|
||||
#| msgid "Closed"
|
||||
msgid "Close"
|
||||
msgstr "Cerrar"
|
||||
msgstr "Cerrado"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:79
|
||||
msgid "Adjust settings in detail"
|
||||
@@ -34729,6 +34740,8 @@ msgid "Save selection"
|
||||
msgstr "Guarda selección"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:141
|
||||
#, fuzzy
|
||||
#| msgid "You didn’t select any ticket."
|
||||
msgid "You didn't select any ticket."
|
||||
msgstr "No ha seleccionado ninguna entrada."
|
||||
|
||||
|
||||
@@ -8,10 +8,10 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:36+0000\n"
|
||||
"PO-Revision-Date: 2025-05-30 11:15+0000\n"
|
||||
"PO-Revision-Date: 2025-05-22 08:37+0000\n"
|
||||
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
||||
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/"
|
||||
"pretix-js/es/>\n"
|
||||
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||
"js/es/>\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -343,7 +343,7 @@ msgstr "No"
|
||||
|
||||
#: pretix/static/lightbox/js/lightbox.js:96
|
||||
msgid "close"
|
||||
msgstr "cerrar"
|
||||
msgstr "Cerrar"
|
||||
|
||||
#: pretix/static/pretixbase/js/addressform.js:59
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:513
|
||||
@@ -416,7 +416,7 @@ msgstr ""
|
||||
|
||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
||||
msgid "If this takes longer than a few minutes, please contact us."
|
||||
msgstr "Si tarda más de unos minutos, póngase en contacto con nosotros."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
||||
msgid "Close message"
|
||||
@@ -725,7 +725,7 @@ msgstr "El carrito de compra ha expirado"
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:59
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:87
|
||||
msgid "Your cart is about to expire."
|
||||
msgstr "Su carrito está a punto de caducar."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:64
|
||||
msgid "The items in your cart are reserved for you for one minute."
|
||||
@@ -737,10 +737,16 @@ msgstr[1] ""
|
||||
"minutos."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:86
|
||||
#, fuzzy
|
||||
#| msgid "Cart expired"
|
||||
msgid "Your cart has expired."
|
||||
msgstr "Su cesta ha caducado."
|
||||
msgstr "El carrito de compra ha expirado"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:89
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The items in your cart are no longer reserved for you. You can still "
|
||||
#| "complete your order as long as they’re available."
|
||||
msgid ""
|
||||
"The items in your cart are no longer reserved for you. You can still "
|
||||
"complete your order as long as they're available."
|
||||
@@ -750,11 +756,11 @@ msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:90
|
||||
msgid "Do you want to renew the reservation period?"
|
||||
msgstr "¿Desea renovar el periodo de reserva?"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:93
|
||||
msgid "Renew reservation"
|
||||
msgstr "Renovar reserva"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:194
|
||||
msgid "The organizer keeps %(currency)s %(amount)s"
|
||||
@@ -797,12 +803,12 @@ msgstr "Incrementar cantidad"
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:19
|
||||
msgctxt "widget"
|
||||
msgid "Filter events by"
|
||||
msgstr "Filtrar eventos por"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:20
|
||||
msgctxt "widget"
|
||||
msgid "Filter"
|
||||
msgstr "Filtrar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:21
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:19
|
||||
@@ -1050,14 +1056,17 @@ msgid "Close"
|
||||
msgstr "Cerrar"
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:62
|
||||
#, fuzzy
|
||||
#| msgctxt "widget"
|
||||
#| msgid "Resume checkout"
|
||||
msgctxt "widget"
|
||||
msgid "Close checkout"
|
||||
msgstr "Cerrar caja"
|
||||
msgstr "Continuar pago"
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:63
|
||||
msgctxt "widget"
|
||||
msgid "You cannot cancel this operation. Please wait for loading to finish."
|
||||
msgstr "No puede cancelar esta operación. Espere a que finalice la carga."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:64
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:60
|
||||
|
||||
@@ -4,7 +4,7 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:35+0000\n"
|
||||
"PO-Revision-Date: 2025-05-30 11:06+0000\n"
|
||||
"PO-Revision-Date: 2025-04-29 18:00+0000\n"
|
||||
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
||||
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/fr/"
|
||||
">\n"
|
||||
@@ -4396,16 +4396,13 @@ msgstr "Facultatif. Aucun produit ne sera vendu avant cette date."
|
||||
|
||||
#: pretix/base/models/event.py:621
|
||||
msgid "This event is remote or partially remote."
|
||||
msgstr "Cet événement est éloigné ou partiellement éloigné."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/models/event.py:622
|
||||
msgid ""
|
||||
"This will be used to let users know if the event is in a different timezone "
|
||||
"and let’s us calculate users’ local times."
|
||||
msgstr ""
|
||||
"Elle sera utilisée pour indiquer aux utilisateurs si l'événement se déroule "
|
||||
"dans un autre fuseau horaire et nous permettra de calculer l'heure locale "
|
||||
"des utilisateurs."
|
||||
|
||||
#: pretix/base/models/event.py:642 pretix/control/navigation.py:65
|
||||
msgid "Plugins"
|
||||
@@ -10788,17 +10785,22 @@ msgstr ""
|
||||
"explique comment vous utilisez les données collectées dans votre billetterie."
|
||||
|
||||
#: pretix/base/settings.py:2071
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information URL"
|
||||
msgstr "Informations d'accessibilité URL"
|
||||
msgstr "Informations sur le compte"
|
||||
|
||||
#: pretix/base/settings.py:2072
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "This should point e.g. to a part of your website that explains how you "
|
||||
#| "use data gathered in your ticket shop."
|
||||
msgid ""
|
||||
"This should point e.g. to a part of your website that explains how your "
|
||||
"ticket shop complies with accessibility regulation."
|
||||
msgstr ""
|
||||
"Elle doit renvoyer, par exemple, à une partie de votre site web qui explique "
|
||||
"comment votre billetterie est conforme à la réglementation en matière "
|
||||
"d'accessibilité."
|
||||
"Cela devrait pointer par exemple vers une partie de votre site Web qui "
|
||||
"explique comment vous utilisez les données collectées dans votre billetterie."
|
||||
|
||||
#: pretix/base/settings.py:2079
|
||||
#: pretix/presale/templates/pretixpresale/event/base.html:228
|
||||
@@ -10806,16 +10808,22 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/organizers/accessibility.html:6
|
||||
#: pretix/presale/templates/pretixpresale/organizers/base.html:106
|
||||
#: pretix/presale/templates/pretixpresale/organizers/base.html:111
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information"
|
||||
msgstr "Informations sur l'accessibilité"
|
||||
msgstr "Informations sur le compte"
|
||||
|
||||
#: pretix/base/settings.py:2083
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information title"
|
||||
msgstr "Titre de l'information sur l'accessibilité"
|
||||
msgstr "Informations sur le compte"
|
||||
|
||||
#: pretix/base/settings.py:2093
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information text"
|
||||
msgstr "Texte d'information sur l'accessibilité"
|
||||
msgstr "Informations sur le compte"
|
||||
|
||||
#: pretix/base/settings.py:2114
|
||||
msgid "Attach ticket files"
|
||||
@@ -24033,8 +24041,10 @@ msgstr ""
|
||||
"tiers tels que les fournisseurs de paiement ou de suivi."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:204
|
||||
#, fuzzy
|
||||
#| msgid "Availability"
|
||||
msgid "Accessibility"
|
||||
msgstr "Accessibilité"
|
||||
msgstr "Disponibilité"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:206
|
||||
msgid ""
|
||||
@@ -24043,19 +24053,12 @@ msgid ""
|
||||
"template in <a href=\"https://docs.pretix.eu/trust/accessibility/\" "
|
||||
"target=\"_blank\">our documentation</a>."
|
||||
msgstr ""
|
||||
"Certaines juridictions, y compris l'Union européenne, vous obligent à "
|
||||
"publier des informations sur l'accessibilité de votre billetterie. Vous "
|
||||
"pouvez trouver un modèle dans <a href="
|
||||
"\"https://docs.pretix.eu/trust/accessibility/\" target=\"_blank\">notre "
|
||||
"documentation</a>."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:216
|
||||
msgid ""
|
||||
"Instead of an URL, you can also configure a text that will be shown within "
|
||||
"pretix. This will be ignored if a URL is configured."
|
||||
msgstr ""
|
||||
"Au lieu d'une URL, vous pouvez également configurer un texte qui sera "
|
||||
"affiché dans pretix. Ce texte sera ignoré si une URL est configurée."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:228
|
||||
msgid "Barcode media"
|
||||
@@ -32664,8 +32667,10 @@ msgstr ""
|
||||
"passe."
|
||||
|
||||
#: pretix/presale/forms/customer.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Please verify that you entered the correct email addess."
|
||||
msgid "Please verify that you entered the correct email address."
|
||||
msgstr "Veuillez vérifier que vous avez saisi l'adresse électronique correcte."
|
||||
msgstr "Veuillez vérifier que vous avez saisi une adresse e-mail conforme."
|
||||
|
||||
#: pretix/presale/forms/customer.py:75
|
||||
msgid "Please enter the correct password."
|
||||
@@ -33656,8 +33661,10 @@ msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:509
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:48
|
||||
#, fuzzy
|
||||
#| msgid "Event description"
|
||||
msgid "Renew reservation"
|
||||
msgstr "Renouveler la réservation"
|
||||
msgstr "Description de l’événement"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:514
|
||||
msgid "Overview of your ordered products."
|
||||
@@ -34995,8 +35002,10 @@ msgstr ""
|
||||
"continuer ici."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:58
|
||||
#, fuzzy
|
||||
#| msgid "Closed"
|
||||
msgid "Close"
|
||||
msgstr "Fermer"
|
||||
msgstr "Fermé"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:79
|
||||
msgid "Adjust settings in detail"
|
||||
@@ -35040,6 +35049,8 @@ msgid "Save selection"
|
||||
msgstr "Enregistrer la sélection"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:141
|
||||
#, fuzzy
|
||||
#| msgid "You didn’t select any ticket."
|
||||
msgid "You didn't select any ticket."
|
||||
msgstr "Vous n'avez sélectionné aucun billet."
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgstr ""
|
||||
"Project-Id-Version: French\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:36+0000\n"
|
||||
"PO-Revision-Date: 2025-05-30 11:06+0000\n"
|
||||
"PO-Revision-Date: 2025-05-22 08:37+0000\n"
|
||||
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
||||
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
"fr/>\n"
|
||||
@@ -417,7 +417,7 @@ msgstr ""
|
||||
|
||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
||||
msgid "If this takes longer than a few minutes, please contact us."
|
||||
msgstr "Si cela prend plus de quelques minutes, veuillez nous contacter."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
||||
msgid "Close message"
|
||||
@@ -634,7 +634,8 @@ msgstr "Erreur inconnue."
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/main.js:292
|
||||
msgid "Your color has great contrast and will provide excellent accessibility."
|
||||
msgstr "Votre choix de couleur a un bon contraste et il est très facile à lire."
|
||||
msgstr ""
|
||||
"Votre choix de couleur a un bon contraste et il est très facile à lire !"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/main.js:296
|
||||
msgid ""
|
||||
@@ -642,7 +643,7 @@ msgid ""
|
||||
"requirements."
|
||||
msgstr ""
|
||||
"Votre choix de couleur est assez bon pour la lecture et offre un bon "
|
||||
"contraste."
|
||||
"contraste !"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/main.js:300
|
||||
msgid ""
|
||||
@@ -726,7 +727,7 @@ msgstr "Panier expiré"
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:59
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:87
|
||||
msgid "Your cart is about to expire."
|
||||
msgstr "Votre panier est sur le point d'expirer."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:64
|
||||
msgid "The items in your cart are reserved for you for one minute."
|
||||
@@ -735,24 +736,30 @@ msgstr[0] "Les articles de votre panier sont réservés pour une minute."
|
||||
msgstr[1] "Les articles de votre panier sont réservés pendant {num} minutes."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:86
|
||||
#, fuzzy
|
||||
#| msgid "Cart expired"
|
||||
msgid "Your cart has expired."
|
||||
msgstr "Votre panier a expiré."
|
||||
msgstr "Panier expiré"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:89
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The items in your cart are no longer reserved for you. You can still "
|
||||
#| "complete your order as long as they’re available."
|
||||
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 ""
|
||||
"Les articles de votre panier ne vous sont plus réservés. Vous pouvez encore "
|
||||
"compléter votre commande tant qu'ils sont disponibles."
|
||||
"Les articles de votre panier ne vous sont plus réservés. Vous pouvez "
|
||||
"toujours compléter votre commande tant qu'ils sont disponibles."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:90
|
||||
msgid "Do you want to renew the reservation period?"
|
||||
msgstr "Souhaitez-vous renouveler la période de réservation ?"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:93
|
||||
msgid "Renew reservation"
|
||||
msgstr "Renouveler la réservation"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:194
|
||||
msgid "The organizer keeps %(currency)s %(amount)s"
|
||||
@@ -796,12 +803,12 @@ msgstr "Augmenter la quantité"
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:19
|
||||
msgctxt "widget"
|
||||
msgid "Filter events by"
|
||||
msgstr "Filtrer les événements par"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:20
|
||||
msgctxt "widget"
|
||||
msgid "Filter"
|
||||
msgstr "Filtrer"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:21
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:19
|
||||
@@ -1049,16 +1056,17 @@ msgid "Close"
|
||||
msgstr "Fermer"
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:62
|
||||
#, fuzzy
|
||||
#| msgctxt "widget"
|
||||
#| msgid "Resume checkout"
|
||||
msgctxt "widget"
|
||||
msgid "Close checkout"
|
||||
msgstr "Fermer la caisse"
|
||||
msgstr "Finaliser ma commande"
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:63
|
||||
msgctxt "widget"
|
||||
msgid "You cannot cancel this operation. Please wait for loading to finish."
|
||||
msgstr ""
|
||||
"Vous ne pouvez pas annuler cette opération. Veuillez attendre la fin du "
|
||||
"chargement."
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:64
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:60
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:35+0000\n"
|
||||
"PO-Revision-Date: 2025-06-02 09:00+0000\n"
|
||||
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
|
||||
"PO-Revision-Date: 2025-05-27 23:00+0000\n"
|
||||
"Last-Translator: Yasunobu YesNo Kawaguchi <kawaguti@gmail.com>\n"
|
||||
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"ja/>\n"
|
||||
"Language: ja\n"
|
||||
@@ -32540,8 +32540,10 @@ msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:509
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:48
|
||||
#, fuzzy
|
||||
#| msgid "Event description"
|
||||
msgid "Renew reservation"
|
||||
msgstr "予約を更新"
|
||||
msgstr "イベントの説明"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:514
|
||||
msgid "Overview of your ordered products."
|
||||
|
||||
@@ -8,10 +8,10 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:36+0000\n"
|
||||
"PO-Revision-Date: 2025-06-02 09:00+0000\n"
|
||||
"PO-Revision-Date: 2025-05-12 13:00+0000\n"
|
||||
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
|
||||
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/"
|
||||
"pretix-js/ja/>\n"
|
||||
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||
"js/ja/>\n"
|
||||
"Language: ja\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -727,27 +727,34 @@ msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] "カート内の商品の予約は {num} 分以内に完了します。"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:86
|
||||
#, fuzzy
|
||||
#| msgid "Cart expired"
|
||||
msgid "Your cart has expired."
|
||||
msgstr "カートの保存期限が切れています。"
|
||||
msgstr "カートの有効期限が切れています"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:89
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The items in your cart are no longer reserved for you. You can still "
|
||||
#| "complete your order as long as they’re available."
|
||||
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 "カートに入っている商品はお取り置きできません。在庫があれば、このまま注文を進"
|
||||
"めることができます。"
|
||||
msgstr ""
|
||||
"カートに入っている商品は現在売り切れです。在庫があれば、このまま注文を完了す"
|
||||
"ることができます。"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:90
|
||||
msgid "Do you want to renew the reservation period?"
|
||||
msgstr "予約の期間を更新しますか?"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:93
|
||||
msgid "Renew reservation"
|
||||
msgstr "予約を更新"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:194
|
||||
msgid "The organizer keeps %(currency)s %(amount)s"
|
||||
msgstr "主催者は%(currency)s %(amount)sを留保します"
|
||||
msgstr "主催者には%(currency)s %(amount)sが与えられます"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "You get %(currency)s %(amount)s back"
|
||||
@@ -755,7 +762,7 @@ msgstr "%(currency)s %(amount)s が払い戻されます"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:218
|
||||
msgid "Please enter the amount the organizer can keep."
|
||||
msgstr "主催者が留保する料金を入力してください。"
|
||||
msgstr "イベント開催者が受け取る料金を入力してください。"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:558
|
||||
msgid "Your local time:"
|
||||
|
||||
@@ -79,7 +79,7 @@ class CheckoutFieldRenderer(FieldRenderer):
|
||||
def __init__(self, *args, **kwargs):
|
||||
kwargs['layout'] = 'horizontal'
|
||||
super().__init__(*args, **kwargs)
|
||||
self.is_group_widget = isinstance(self.widget, (CheckboxSelectMultiple, RadioSelect, )) or self.is_multi_widget
|
||||
self.is_group_widget = isinstance(self.widget, (CheckboxSelectMultiple, RadioSelect, )) or (self.is_multi_widget and len(self.widget.widgets) > 1)
|
||||
|
||||
def get_form_group_class(self):
|
||||
form_group_class = self.form_group_class
|
||||
|
||||
@@ -16,17 +16,16 @@
|
||||
{% for p in current_payments %}
|
||||
<div class="list-group-item">
|
||||
<div class="row">
|
||||
<div class="col-md-7 col-sm-6 col-xs-8">
|
||||
<strong id="payment-label-{{ forloop.counter }}">{{ p.provider_name }}</strong>
|
||||
<div class="col-xs-9">
|
||||
{{ p.provider_name }}
|
||||
</div>
|
||||
<div class="col-md-2 col-sm-2 col-xs-4 text-right">
|
||||
<div class="col-xs-2 text-right">
|
||||
{{ p.payment_amount|money:request.event.currency }}
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-4 col-xs-12 text-right">
|
||||
<button name="remove_payment" value="{{ p.id }}" aria-describedby="payment-label-{{ forloop.counter }}"
|
||||
class="btn btn-danger">
|
||||
<span class="fa fa-trash"></span>
|
||||
{% trans "Remove payment" %}
|
||||
<div class="col-xs-1 text-right">
|
||||
<button name="remove_payment" value="{{ p.id }}" title="{% trans "Remove payment" %}"
|
||||
class="btn btn-link btn-xs">
|
||||
<span class="fa fa-trash text-danger"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -35,11 +34,11 @@
|
||||
{% if remaining %}
|
||||
<div class="list-group-item">
|
||||
<div class="row">
|
||||
<div class="col-md-7 col-sm-6 col-xs-8">
|
||||
<div class="col-xs-9">
|
||||
<strong>{% trans "Remaining balance" %}</strong><br>
|
||||
<span class="text-muted">{% trans "Please select a payment method below." %}</span>
|
||||
</div>
|
||||
<div class="col-md-2 col-sm-2 col-xs-4 text-right">
|
||||
<div class="col-xs-2 text-right">
|
||||
<strong>
|
||||
{{ remaining|money:request.event.currency }}
|
||||
</strong>
|
||||
|
||||
@@ -186,7 +186,7 @@
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if not item.current_unavailability_reason and not var.current_unavailability_reason and var.cached_availability.0 == 100 or var.initial %}
|
||||
{% if var.cached_availability.0 == 100 or var.initial %}
|
||||
<div class="col-md-2 col-sm-3 col-xs-6 availability-box available">
|
||||
{% if c.max_count == 1 or not c.multi_allowed %}
|
||||
<label class="btn btn-default btn-checkbox">
|
||||
@@ -327,7 +327,7 @@
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
{% if not item.current_unavailability_reason and item.cached_availability.0 == 100 or item.initial %}
|
||||
{% if item.cached_availability.0 == 100 or item.initial %}
|
||||
<div class="col-md-2 col-sm-3 col-xs-6 availability-box available">
|
||||
{% if c.max_count == 1 or not c.multi_allowed %}
|
||||
<label class="btn btn-default btn-checkbox">
|
||||
|
||||
@@ -2,21 +2,22 @@
|
||||
{% load eventurl %}
|
||||
{% load urlreplace %}
|
||||
|
||||
<div class="btn-group" role="navigation" aria-label="{% trans "Event overview by month, week, etc." %}">
|
||||
<a href="?{% url_replace request "style" "list" "date" "" %}"
|
||||
class="btn btn-default{% if style == "list" %} active" aria-current="page{% endif %}">
|
||||
<div class="btn-group" role="group">
|
||||
<a href="?{% url_replace request "style" "list" "date" "" %}" type="button"
|
||||
class="btn btn-default{% if style == "list" %} active{% endif %}">
|
||||
{% trans "List" %}
|
||||
</a>
|
||||
<a href="?{% if "date" in request.GET %}{% url_replace request "style" "week" "old" "" "page" "" "date" date|date:"o-\WW" %}{% else %}{% url_replace request "style" "week" "old" "" "page" "" %}{% endif %}"
|
||||
class="btn btn-default{% if style == "week" %} active" aria-current="page{% endif %}">
|
||||
<a href="?{% if "date" in request.GET %}{% url_replace request "style" "week" "old" "" "page" "" "date" date|date:"o-\WW" %}{% else %}{% url_replace request "style" "week" "old" "" "page" "" %}{% endif %}" type="button"
|
||||
class="btn btn-default{% if style == "week" %} active{% endif %}">
|
||||
{% trans "Week" %}
|
||||
</a>
|
||||
<a href="?{% if "date" in request.GET %}{% url_replace request "style" "calendar" "old" "" "page" "" "date" date|date:"Y-m" %}{% else %}{% url_replace request "style" "calendar" "old" "" "page" "" %}{% endif %}"
|
||||
class="btn btn-default{% if style == "calendar" %} active" aria-current="page{% endif %}">
|
||||
type="button"
|
||||
class="btn btn-default{% if style == "calendar" %} active{% endif %}">
|
||||
{% trans "Month" %}
|
||||
</a>
|
||||
<a href="?{% if "date" in request.GET %}{% url_replace request "style" "day" "old" "" "page" "" "date" date|date:"Y-m-d" %}{% else %}{% url_replace request "style" "day" "old" "" "page" "" "date" %}{% endif %}"
|
||||
class="btn btn-default{% if style == "day" %} active" aria-current="page{% endif %}">
|
||||
<a href="?{% if "date" in request.GET %}{% url_replace request "style" "day" "old" "" "page" "" "date" date|date:"Y-m-d" %}{% else %}{% url_replace request "style" "day" "old" "" "page" "" "date" %}{% endif %}" type="button"
|
||||
class="btn btn-default{% if style == "day" %} active{% endif %}">
|
||||
{% trans "Day" %}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -4,11 +4,7 @@
|
||||
{% load rich_text %}
|
||||
{% load eventurl %}
|
||||
{% load urlreplace %}
|
||||
{% block title %}
|
||||
{% blocktrans trimmed with month=date|date:"F Y" %}
|
||||
Events in {{ month }}
|
||||
{% endblocktrans %}
|
||||
{% endblock %}
|
||||
{% block title %}{% trans "Event overview" %}{% endblock %}
|
||||
{% block content %}
|
||||
{% if organizer_homepage_text %}
|
||||
<div class="blank-after">
|
||||
|
||||
@@ -4,11 +4,7 @@
|
||||
{% load rich_text %}
|
||||
{% load eventurl %}
|
||||
{% load urlreplace %}
|
||||
{% block title %}
|
||||
{% blocktrans trimmed with day=date|date:"DATE_FORMAT" %}
|
||||
Events on {{ day }}
|
||||
{% endblocktrans %}
|
||||
{% endblock %}
|
||||
{% block title %}{% trans "Event overview" %}{% endblock %}
|
||||
{% block content %}
|
||||
{% if organizer_homepage_text %}
|
||||
<div class="blank-after">
|
||||
|
||||
@@ -4,11 +4,7 @@
|
||||
{% load rich_text %}
|
||||
{% load eventurl %}
|
||||
{% load urlreplace %}
|
||||
{% block title %}
|
||||
{% blocktrans trimmed with week=date|date:week_format week_day_from=date|date:short_month_day_format week_day_to=date_to|date:short_month_day_format %}
|
||||
Events in {{ week }} ({{ week_day_from }} – {{ week_day_to }})
|
||||
{% endblocktrans %}
|
||||
{% endblock %}
|
||||
{% block title %}{% trans "Event overview" %}{% endblock %}
|
||||
{% block content %}
|
||||
{% if organizer_homepage_text %}
|
||||
<div class="blank-after">
|
||||
@@ -22,7 +18,7 @@
|
||||
<div class="panel-heading">
|
||||
<h2 class="panel-title">
|
||||
<strong>
|
||||
{% blocktrans trimmed with week=date|date:week_format week_day_from=date|date:short_month_day_format week_day_to=date_to|date:short_month_day_format %}
|
||||
{% blocktrans trimmed with week=date|date:week_format week_day_from=date|date:short_month_day_format week_day_to=date|date:short_month_day_format %}
|
||||
Events in {{ week }} ({{ week_day_from }} – {{ week_day_to }})
|
||||
{% endblocktrans %}
|
||||
</strong>
|
||||
|
||||
@@ -70,7 +70,7 @@ from pretix.helpers.http import redirect_to_url
|
||||
from pretix.multidomain.urlreverse import eventreverse
|
||||
from pretix.presale.views import (
|
||||
CartMixin, EventViewMixin, allow_cors_if_namespaced,
|
||||
allow_frame_if_namespaced, get_cart, iframe_entry_view_wrapper,
|
||||
allow_frame_if_namespaced, iframe_entry_view_wrapper,
|
||||
)
|
||||
from pretix.presale.views.event import (
|
||||
get_grouped_items, item_group_by_category,
|
||||
@@ -441,7 +441,7 @@ class CartApplyVoucher(EventViewMixin, CartActionMixin, AsyncAction, View):
|
||||
return _('We applied the voucher to as many products in your cart as we could.')
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
from pretix.base.payment import GiftCardPayment, GiftCardPaymentForm
|
||||
from pretix.base.payment import GiftCardPayment
|
||||
|
||||
if 'voucher' in request.POST:
|
||||
code = request.POST.get('voucher').strip()
|
||||
@@ -454,22 +454,6 @@ class CartApplyVoucher(EventViewMixin, CartActionMixin, AsyncAction, View):
|
||||
raise ValidationError(error_messages['voucher_invalid'])
|
||||
else:
|
||||
cs = cart_session(request)
|
||||
used_cards = [
|
||||
p.get('info_data', {}).get('gift_card')
|
||||
for p in cs.get('payments', [])
|
||||
if p.get('info_data', {}).get('gift_card')
|
||||
]
|
||||
form = GiftCardPaymentForm(
|
||||
event=request.event,
|
||||
used_cards=used_cards,
|
||||
positions=get_cart(request),
|
||||
testmode=request.event.testmode,
|
||||
data={'code': code},
|
||||
)
|
||||
form.fields = gcp.payment_form_fields
|
||||
if not form.is_valid():
|
||||
# raise first validation-error in form
|
||||
raise next(iter(form.errors.as_data().values()))[0]
|
||||
gcp._add_giftcard_to_cart(cs, gc)
|
||||
messages.success(
|
||||
request,
|
||||
@@ -710,7 +694,7 @@ class RedeemView(NoSearchIndexViewMixin, EventViewMixin, CartMixin, TemplateView
|
||||
return context
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
from pretix.base.payment import GiftCardPayment, GiftCardPaymentForm
|
||||
from pretix.base.payment import GiftCardPayment
|
||||
|
||||
err = None
|
||||
v = request.GET.get('voucher')
|
||||
@@ -735,28 +719,12 @@ class RedeemView(NoSearchIndexViewMixin, EventViewMixin, CartMixin, TemplateView
|
||||
err = error_messages['voucher_redeemed_cart'] % self.request.event.settings.reservation_time
|
||||
except Voucher.DoesNotExist:
|
||||
try:
|
||||
gc = request.event.organizer.accepted_gift_cards.get(secret=v)
|
||||
gcp = GiftCardPayment(request.event)
|
||||
if not gcp.is_enabled or not gcp.is_allowed(request, Decimal("1.00")):
|
||||
gc = self.request.event.organizer.accepted_gift_cards.get(secret=v.strip())
|
||||
gcp = GiftCardPayment(self.request.event)
|
||||
if not gcp.is_enabled or not gcp.is_allowed(self.request, Decimal("1.00")):
|
||||
err = error_messages['voucher_invalid']
|
||||
else:
|
||||
cs = cart_session(request)
|
||||
used_cards = [
|
||||
p.get('info_data', {}).get('gift_card')
|
||||
for p in cs.get('payments', [])
|
||||
if p.get('info_data', {}).get('gift_card')
|
||||
]
|
||||
form = GiftCardPaymentForm(
|
||||
event=request.event,
|
||||
used_cards=used_cards,
|
||||
positions=get_cart(request),
|
||||
testmode=request.event.testmode,
|
||||
data={'code': v},
|
||||
)
|
||||
form.fields = gcp.payment_form_fields
|
||||
if not form.is_valid():
|
||||
# raise first validation-error in form
|
||||
raise next(iter(form.errors.as_data().values()))[0]
|
||||
gcp._add_giftcard_to_cart(cs, gc)
|
||||
messages.success(
|
||||
request,
|
||||
|
||||
@@ -683,8 +683,6 @@ class OrderPayChangeMethod(EventViewMixin, OrderDetailMixin, TemplateView):
|
||||
ctx['show_fees'] = any(p['fee_diff'] for p in self.provider_forms)
|
||||
if len(self.provider_forms) == 1:
|
||||
ctx['selected'] = self.provider_forms[0]['provider'].identifier
|
||||
elif "payment" in self.request.POST:
|
||||
ctx['selected'] = self.request.POST.get("payment")
|
||||
return ctx
|
||||
|
||||
def get_confirm_url(self, payment):
|
||||
|
||||
@@ -811,7 +811,6 @@ class WeekCalendarView(OrganizerViewMixin, EventListMixin, TemplateView):
|
||||
) + timedelta(days=1)
|
||||
|
||||
ctx['date'] = week.monday()
|
||||
ctx['date_to'] = week.sunday()
|
||||
ctx['before'] = before
|
||||
ctx['after'] = after
|
||||
|
||||
|
||||
258
src/pretix/static/npm_dir/package-lock.json
generated
258
src/pretix/static/npm_dir/package-lock.json
generated
@@ -8,8 +8,8 @@
|
||||
"name": "pretix",
|
||||
"version": "0.0.0",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.27.4",
|
||||
"@babel/preset-env": "^7.27.2",
|
||||
"@babel/core": "^7.27.1",
|
||||
"@babel/preset-env": "^7.27.1",
|
||||
"@rollup/plugin-babel": "^6.0.4",
|
||||
"@rollup/plugin-node-resolve": "^16.0.1",
|
||||
"rollup": "^2.79.1",
|
||||
@@ -45,30 +45,30 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/compat-data": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.3.tgz",
|
||||
"integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.1.tgz",
|
||||
"integrity": "sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/core": {
|
||||
"version": "7.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz",
|
||||
"integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz",
|
||||
"integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@ampproject/remapping": "^2.2.0",
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.27.3",
|
||||
"@babel/helper-compilation-targets": "^7.27.2",
|
||||
"@babel/helper-module-transforms": "^7.27.3",
|
||||
"@babel/helpers": "^7.27.4",
|
||||
"@babel/parser": "^7.27.4",
|
||||
"@babel/template": "^7.27.2",
|
||||
"@babel/traverse": "^7.27.4",
|
||||
"@babel/types": "^7.27.3",
|
||||
"@babel/generator": "^7.27.1",
|
||||
"@babel/helper-compilation-targets": "^7.27.1",
|
||||
"@babel/helper-module-transforms": "^7.27.1",
|
||||
"@babel/helpers": "^7.27.1",
|
||||
"@babel/parser": "^7.27.1",
|
||||
"@babel/template": "^7.27.1",
|
||||
"@babel/traverse": "^7.27.1",
|
||||
"@babel/types": "^7.27.1",
|
||||
"convert-source-map": "^2.0.0",
|
||||
"debug": "^4.1.0",
|
||||
"gensync": "^1.0.0-beta.2",
|
||||
@@ -103,13 +103,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/generator": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz",
|
||||
"integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz",
|
||||
"integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.27.3",
|
||||
"@babel/types": "^7.27.3",
|
||||
"@babel/parser": "^7.27.1",
|
||||
"@babel/types": "^7.27.1",
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.25",
|
||||
"jsesc": "^3.0.2"
|
||||
@@ -144,12 +144,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets": {
|
||||
"version": "7.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
|
||||
"integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.1.tgz",
|
||||
"integrity": "sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/compat-data": "^7.27.2",
|
||||
"@babel/compat-data": "^7.27.1",
|
||||
"@babel/helper-validator-option": "^7.27.1",
|
||||
"browserslist": "^4.24.0",
|
||||
"lru-cache": "^5.1.1",
|
||||
@@ -278,14 +278,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-module-transforms": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",
|
||||
"integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz",
|
||||
"integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-module-imports": "^7.27.1",
|
||||
"@babel/helper-validator-identifier": "^7.27.1",
|
||||
"@babel/traverse": "^7.27.3"
|
||||
"@babel/traverse": "^7.27.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -404,25 +404,25 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helpers": {
|
||||
"version": "7.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.4.tgz",
|
||||
"integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz",
|
||||
"integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/template": "^7.27.2",
|
||||
"@babel/types": "^7.27.3"
|
||||
"@babel/template": "^7.27.1",
|
||||
"@babel/types": "^7.27.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.4.tgz",
|
||||
"integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.1.tgz",
|
||||
"integrity": "sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.27.3"
|
||||
"@babel/types": "^7.27.1"
|
||||
},
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
@@ -714,9 +714,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-destructuring": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz",
|
||||
"integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.1.tgz",
|
||||
"integrity": "sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.27.1"
|
||||
@@ -1041,14 +1041,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-object-rest-spread": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz",
|
||||
"integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.1.tgz",
|
||||
"integrity": "sha512-/sSliVc9gHE20/7D5qsdGlq7RG5NCDTWsAhyqzGuq174EtWJoGzIu1BQ7G56eDsTcy1jseBZwv50olSdXOlGuA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-compilation-targets": "^7.27.2",
|
||||
"@babel/helper-compilation-targets": "^7.27.1",
|
||||
"@babel/helper-plugin-utils": "^7.27.1",
|
||||
"@babel/plugin-transform-destructuring": "^7.27.3",
|
||||
"@babel/plugin-transform-parameters": "^7.27.1"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1354,13 +1353,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/preset-env": {
|
||||
"version": "7.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz",
|
||||
"integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.1.tgz",
|
||||
"integrity": "sha512-TZ5USxFpLgKDpdEt8YWBR7p6g+bZo6sHaXLqP2BY/U0acaoI8FTVflcYCr/v94twM1C5IWFdZ/hscq9WjUeLXA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/compat-data": "^7.27.2",
|
||||
"@babel/helper-compilation-targets": "^7.27.2",
|
||||
"@babel/compat-data": "^7.27.1",
|
||||
"@babel/helper-compilation-targets": "^7.27.1",
|
||||
"@babel/helper-plugin-utils": "^7.27.1",
|
||||
"@babel/helper-validator-option": "^7.27.1",
|
||||
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1",
|
||||
@@ -1402,7 +1401,7 @@
|
||||
"@babel/plugin-transform-new-target": "^7.27.1",
|
||||
"@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1",
|
||||
"@babel/plugin-transform-numeric-separator": "^7.27.1",
|
||||
"@babel/plugin-transform-object-rest-spread": "^7.27.2",
|
||||
"@babel/plugin-transform-object-rest-spread": "^7.27.1",
|
||||
"@babel/plugin-transform-object-super": "^7.27.1",
|
||||
"@babel/plugin-transform-optional-catch-binding": "^7.27.1",
|
||||
"@babel/plugin-transform-optional-chaining": "^7.27.1",
|
||||
@@ -1458,13 +1457,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/template": {
|
||||
"version": "7.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
|
||||
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.1.tgz",
|
||||
"integrity": "sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/parser": "^7.27.2",
|
||||
"@babel/parser": "^7.27.1",
|
||||
"@babel/types": "^7.27.1"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1472,16 +1471,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/traverse": {
|
||||
"version": "7.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz",
|
||||
"integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz",
|
||||
"integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.27.3",
|
||||
"@babel/parser": "^7.27.4",
|
||||
"@babel/template": "^7.27.2",
|
||||
"@babel/types": "^7.27.3",
|
||||
"@babel/generator": "^7.27.1",
|
||||
"@babel/parser": "^7.27.1",
|
||||
"@babel/template": "^7.27.1",
|
||||
"@babel/types": "^7.27.1",
|
||||
"debug": "^4.3.1",
|
||||
"globals": "^11.1.0"
|
||||
},
|
||||
@@ -1490,9 +1489,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz",
|
||||
"integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz",
|
||||
"integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-string-parser": "^7.27.1",
|
||||
@@ -3839,25 +3838,25 @@
|
||||
}
|
||||
},
|
||||
"@babel/compat-data": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.3.tgz",
|
||||
"integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw=="
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.1.tgz",
|
||||
"integrity": "sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A=="
|
||||
},
|
||||
"@babel/core": {
|
||||
"version": "7.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz",
|
||||
"integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz",
|
||||
"integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==",
|
||||
"requires": {
|
||||
"@ampproject/remapping": "^2.2.0",
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.27.3",
|
||||
"@babel/helper-compilation-targets": "^7.27.2",
|
||||
"@babel/helper-module-transforms": "^7.27.3",
|
||||
"@babel/helpers": "^7.27.4",
|
||||
"@babel/parser": "^7.27.4",
|
||||
"@babel/template": "^7.27.2",
|
||||
"@babel/traverse": "^7.27.4",
|
||||
"@babel/types": "^7.27.3",
|
||||
"@babel/generator": "^7.27.1",
|
||||
"@babel/helper-compilation-targets": "^7.27.1",
|
||||
"@babel/helper-module-transforms": "^7.27.1",
|
||||
"@babel/helpers": "^7.27.1",
|
||||
"@babel/parser": "^7.27.1",
|
||||
"@babel/template": "^7.27.1",
|
||||
"@babel/traverse": "^7.27.1",
|
||||
"@babel/types": "^7.27.1",
|
||||
"convert-source-map": "^2.0.0",
|
||||
"debug": "^4.1.0",
|
||||
"gensync": "^1.0.0-beta.2",
|
||||
@@ -3878,12 +3877,12 @@
|
||||
}
|
||||
},
|
||||
"@babel/generator": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz",
|
||||
"integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz",
|
||||
"integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==",
|
||||
"requires": {
|
||||
"@babel/parser": "^7.27.3",
|
||||
"@babel/types": "^7.27.3",
|
||||
"@babel/parser": "^7.27.1",
|
||||
"@babel/types": "^7.27.1",
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.25",
|
||||
"jsesc": "^3.0.2"
|
||||
@@ -3910,11 +3909,11 @@
|
||||
}
|
||||
},
|
||||
"@babel/helper-compilation-targets": {
|
||||
"version": "7.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
|
||||
"integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.1.tgz",
|
||||
"integrity": "sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==",
|
||||
"requires": {
|
||||
"@babel/compat-data": "^7.27.2",
|
||||
"@babel/compat-data": "^7.27.1",
|
||||
"@babel/helper-validator-option": "^7.27.1",
|
||||
"browserslist": "^4.24.0",
|
||||
"lru-cache": "^5.1.1",
|
||||
@@ -4010,13 +4009,13 @@
|
||||
}
|
||||
},
|
||||
"@babel/helper-module-transforms": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",
|
||||
"integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz",
|
||||
"integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==",
|
||||
"requires": {
|
||||
"@babel/helper-module-imports": "^7.27.1",
|
||||
"@babel/helper-validator-identifier": "^7.27.1",
|
||||
"@babel/traverse": "^7.27.3"
|
||||
"@babel/traverse": "^7.27.1"
|
||||
}
|
||||
},
|
||||
"@babel/helper-optimise-call-expression": {
|
||||
@@ -4087,20 +4086,20 @@
|
||||
}
|
||||
},
|
||||
"@babel/helpers": {
|
||||
"version": "7.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.4.tgz",
|
||||
"integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz",
|
||||
"integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==",
|
||||
"requires": {
|
||||
"@babel/template": "^7.27.2",
|
||||
"@babel/types": "^7.27.3"
|
||||
"@babel/template": "^7.27.1",
|
||||
"@babel/types": "^7.27.1"
|
||||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.4.tgz",
|
||||
"integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.1.tgz",
|
||||
"integrity": "sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.27.3"
|
||||
"@babel/types": "^7.27.1"
|
||||
}
|
||||
},
|
||||
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
|
||||
@@ -4263,9 +4262,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-destructuring": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz",
|
||||
"integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.1.tgz",
|
||||
"integrity": "sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==",
|
||||
"requires": {
|
||||
"@babel/helper-plugin-utils": "^7.27.1"
|
||||
}
|
||||
@@ -4443,13 +4442,12 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-object-rest-spread": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz",
|
||||
"integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.1.tgz",
|
||||
"integrity": "sha512-/sSliVc9gHE20/7D5qsdGlq7RG5NCDTWsAhyqzGuq174EtWJoGzIu1BQ7G56eDsTcy1jseBZwv50olSdXOlGuA==",
|
||||
"requires": {
|
||||
"@babel/helper-compilation-targets": "^7.27.2",
|
||||
"@babel/helper-compilation-targets": "^7.27.1",
|
||||
"@babel/helper-plugin-utils": "^7.27.1",
|
||||
"@babel/plugin-transform-destructuring": "^7.27.3",
|
||||
"@babel/plugin-transform-parameters": "^7.27.1"
|
||||
}
|
||||
},
|
||||
@@ -4616,12 +4614,12 @@
|
||||
}
|
||||
},
|
||||
"@babel/preset-env": {
|
||||
"version": "7.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz",
|
||||
"integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.1.tgz",
|
||||
"integrity": "sha512-TZ5USxFpLgKDpdEt8YWBR7p6g+bZo6sHaXLqP2BY/U0acaoI8FTVflcYCr/v94twM1C5IWFdZ/hscq9WjUeLXA==",
|
||||
"requires": {
|
||||
"@babel/compat-data": "^7.27.2",
|
||||
"@babel/helper-compilation-targets": "^7.27.2",
|
||||
"@babel/compat-data": "^7.27.1",
|
||||
"@babel/helper-compilation-targets": "^7.27.1",
|
||||
"@babel/helper-plugin-utils": "^7.27.1",
|
||||
"@babel/helper-validator-option": "^7.27.1",
|
||||
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1",
|
||||
@@ -4663,7 +4661,7 @@
|
||||
"@babel/plugin-transform-new-target": "^7.27.1",
|
||||
"@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1",
|
||||
"@babel/plugin-transform-numeric-separator": "^7.27.1",
|
||||
"@babel/plugin-transform-object-rest-spread": "^7.27.2",
|
||||
"@babel/plugin-transform-object-rest-spread": "^7.27.1",
|
||||
"@babel/plugin-transform-object-super": "^7.27.1",
|
||||
"@babel/plugin-transform-optional-catch-binding": "^7.27.1",
|
||||
"@babel/plugin-transform-optional-chaining": "^7.27.1",
|
||||
@@ -4709,33 +4707,33 @@
|
||||
}
|
||||
},
|
||||
"@babel/template": {
|
||||
"version": "7.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
|
||||
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.1.tgz",
|
||||
"integrity": "sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/parser": "^7.27.2",
|
||||
"@babel/parser": "^7.27.1",
|
||||
"@babel/types": "^7.27.1"
|
||||
}
|
||||
},
|
||||
"@babel/traverse": {
|
||||
"version": "7.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz",
|
||||
"integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz",
|
||||
"integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.27.3",
|
||||
"@babel/parser": "^7.27.4",
|
||||
"@babel/template": "^7.27.2",
|
||||
"@babel/types": "^7.27.3",
|
||||
"@babel/generator": "^7.27.1",
|
||||
"@babel/parser": "^7.27.1",
|
||||
"@babel/template": "^7.27.1",
|
||||
"@babel/types": "^7.27.1",
|
||||
"debug": "^4.3.1",
|
||||
"globals": "^11.1.0"
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.27.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz",
|
||||
"integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==",
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz",
|
||||
"integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==",
|
||||
"requires": {
|
||||
"@babel/helper-string-parser": "^7.27.1",
|
||||
"@babel/helper-validator-identifier": "^7.27.1"
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
"private": true,
|
||||
"scripts": {},
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.27.4",
|
||||
"@babel/preset-env": "^7.27.2",
|
||||
"@babel/core": "^7.27.1",
|
||||
"@babel/preset-env": "^7.27.1",
|
||||
"@rollup/plugin-babel": "^6.0.4",
|
||||
"@rollup/plugin-node-resolve": "^16.0.1",
|
||||
"vue": "^2.7.16",
|
||||
|
||||
@@ -10,12 +10,6 @@ body {
|
||||
padding: 50px 0;
|
||||
}
|
||||
|
||||
*:focus, .btn:focus {
|
||||
outline: 2px solid $link-hover-color;
|
||||
outline-offset: 2px;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.big-icon {
|
||||
font-size: 200px;
|
||||
color: $navbar-inverse-bg;
|
||||
|
||||
@@ -170,10 +170,6 @@ input:focus, .form-control:focus {
|
||||
.btn-checkbox input:focus, .input-item-count-group input:focus, .input-group-price input:focus {
|
||||
outline: none;
|
||||
}
|
||||
/* bootstrap sets dark background for active elements with hover/focus, we need to match specifity of selector */
|
||||
.btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus, .open > .btn-default.dropdown-toggle:hover, .open > .btn-default.dropdown-toggle:focus, .open > .btn-default.dropdown-toggle.focus {
|
||||
background-color: inherit;
|
||||
}
|
||||
/* border-radius on these containers is needed for correctly rounded focus-outlines */
|
||||
.input-item-count-group, .input-group-price {
|
||||
border-radius: var(--pretix-border-radius-base);
|
||||
|
||||
@@ -1591,7 +1591,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
self.assertEqual(len(doc.select('input[name="payment"]')), 3)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
self.assertRedirects(response, '/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug),
|
||||
target_status_code=200)
|
||||
@@ -1636,7 +1636,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
self.assertEqual(len(doc.select('input[name="payment"]')), 3)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
self.assertRedirects(response, '/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug),
|
||||
target_status_code=200)
|
||||
@@ -1646,7 +1646,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc2.secret
|
||||
'giftcard': gc2.secret
|
||||
}, follow=True)
|
||||
self.assertRedirects(response, '/%s/%s/checkout/confirm/' % (self.orga.slug, self.event.slug),
|
||||
target_status_code=200)
|
||||
@@ -1677,7 +1677,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
self.assertEqual(len(doc.select('input[name="payment"]')), 3)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
self.assertRedirects(response, '/%s/%s/checkout/confirm/' % (self.orga.slug, self.event.slug),
|
||||
target_status_code=200)
|
||||
@@ -1706,7 +1706,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
self.assertEqual(len(doc.select('input[name="payment"]')), 3)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
self.assertRedirects(response, '/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug),
|
||||
target_status_code=200)
|
||||
@@ -1748,7 +1748,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
assert 'This gift card is no longer valid.' in response.content.decode()
|
||||
|
||||
@@ -1763,7 +1763,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
assert 'This gift card does not support this currency.' in response.content.decode()
|
||||
|
||||
@@ -1780,7 +1780,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
assert 'This gift card is not known.' in response.content.decode()
|
||||
|
||||
@@ -1798,7 +1798,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
self.assertRedirects(response, '/%s/%s/checkout/confirm/' % (self.orga.slug, self.event.slug),
|
||||
target_status_code=200)
|
||||
@@ -1828,7 +1828,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
assert 'This gift card is not known.' in response.content.decode()
|
||||
|
||||
@@ -1845,7 +1845,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
assert 'Only test gift cards can be used in test mode.' in response.content.decode()
|
||||
|
||||
@@ -1860,7 +1860,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
assert 'This gift card can only be used in test mode.' in response.content.decode()
|
||||
|
||||
@@ -1874,7 +1874,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
assert 'All credit on this gift card has been used.' in response.content.decode()
|
||||
|
||||
@@ -1889,11 +1889,11 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
assert 'This gift card is already used for your payment.' in response.content.decode()
|
||||
|
||||
@@ -1910,7 +1910,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
assert 'You cannot pay with gift cards when buying a gift card.' in response.content.decode()
|
||||
|
||||
@@ -1964,7 +1964,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
self.assertRedirects(response, '/%s/%s/checkout/confirm/' % (self.orga.slug, self.event.slug),
|
||||
target_status_code=200)
|
||||
@@ -2006,7 +2006,7 @@ class CheckoutTestCase(BaseCheckoutTestCase, TimemachineTestMixin, TestCase):
|
||||
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
self.assertRedirects(response, '/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug),
|
||||
target_status_code=200)
|
||||
|
||||
@@ -673,7 +673,7 @@ class OrdersTest(BaseOrdersTest):
|
||||
assert "gift card" in response.content.decode()
|
||||
response = self.client.post(
|
||||
'/%s/%s/order/%s/%s/cancel/do' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret), {
|
||||
'payment_giftcard-code': 'false'
|
||||
'giftcard': 'false'
|
||||
}, follow=True)
|
||||
self.assertRedirects(response,
|
||||
'/%s/%s/order/%s/%s/' % (self.orga.slug, self.event.slug, self.order.code,
|
||||
@@ -1421,7 +1421,7 @@ class OrdersTest(BaseOrdersTest):
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
with scopes_disabled():
|
||||
@@ -1458,7 +1458,7 @@ class OrdersTest(BaseOrdersTest):
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
assert "You cannot pay with gift cards when buying a gift card." in response.content.decode()
|
||||
@@ -1471,7 +1471,7 @@ class OrdersTest(BaseOrdersTest):
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
assert "This gift card does not support this currency." in response.content.decode()
|
||||
@@ -1486,7 +1486,7 @@ class OrdersTest(BaseOrdersTest):
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
assert "Only test gift cards can be used in test mode." in response.content.decode()
|
||||
@@ -1499,7 +1499,7 @@ class OrdersTest(BaseOrdersTest):
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
assert "This gift card can only be used in test mode." in response.content.decode()
|
||||
@@ -1511,7 +1511,7 @@ class OrdersTest(BaseOrdersTest):
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
assert "All credit on this gift card has been used." in response.content.decode()
|
||||
@@ -1526,7 +1526,7 @@ class OrdersTest(BaseOrdersTest):
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
assert "This gift card is not known." in response.content.decode()
|
||||
@@ -1548,7 +1548,7 @@ class OrdersTest(BaseOrdersTest):
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'payment_giftcard-code': gc.secret
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
with scopes_disabled():
|
||||
|
||||
Reference in New Issue
Block a user