forked from CGM_Public/pretix_original
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6db9b1711b |
@@ -14,13 +14,10 @@ on:
|
|||||||
- 'src/pretix/static/**'
|
- 'src/pretix/static/**'
|
||||||
- 'src/tests/**'
|
- 'src/tests/**'
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read # to fetch code (actions/checkout)
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
spelling:
|
spelling:
|
||||||
name: Spellcheck
|
name: Spellcheck
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Set up Python 3.8
|
- name: Set up Python 3.8
|
||||||
@@ -34,7 +31,7 @@ jobs:
|
|||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-pip-
|
${{ runner.os }}-pip-
|
||||||
- name: Install system packages
|
- name: Install system packages
|
||||||
run: sudo apt update && sudo apt install enchant-2 hunspell aspell-en
|
run: sudo apt update && sudo apt install enchant hunspell aspell-en
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: pip3 install -Ur requirements.txt
|
run: pip3 install -Ur requirements.txt
|
||||||
working-directory: ./doc
|
working-directory: ./doc
|
||||||
|
|||||||
@@ -12,12 +12,9 @@ on:
|
|||||||
- 'doc/**'
|
- 'doc/**'
|
||||||
- 'src/pretix/locale/**'
|
- 'src/pretix/locale/**'
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read # to fetch code (actions/checkout)
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
compile:
|
compile:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-latest
|
||||||
name: Check gettext syntax
|
name: Check gettext syntax
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
@@ -43,7 +40,7 @@ jobs:
|
|||||||
run: python manage.py compilejsi18n
|
run: python manage.py compilejsi18n
|
||||||
working-directory: ./src
|
working-directory: ./src
|
||||||
spelling:
|
spelling:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-latest
|
||||||
name: Spellcheck
|
name: Spellcheck
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
@@ -58,7 +55,7 @@ jobs:
|
|||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-pip-
|
${{ runner.os }}-pip-
|
||||||
- name: Install system packages
|
- name: Install system packages
|
||||||
run: sudo apt update && sudo apt install enchant-2 hunspell hunspell-de-de aspell-en aspell-de
|
run: sudo apt update && sudo apt install enchant hunspell hunspell-de-de aspell-en aspell-de
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: pip3 install -e ".[dev]"
|
run: pip3 install -e ".[dev]"
|
||||||
working-directory: ./src
|
working-directory: ./src
|
||||||
|
|||||||
@@ -12,13 +12,10 @@ on:
|
|||||||
- 'src/pretix/locale/**'
|
- 'src/pretix/locale/**'
|
||||||
- 'src/pretix/static/**'
|
- 'src/pretix/static/**'
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read # to fetch code (actions/checkout)
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
isort:
|
isort:
|
||||||
name: isort
|
name: isort
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Set up Python 3.8
|
- name: Set up Python 3.8
|
||||||
@@ -39,7 +36,7 @@ jobs:
|
|||||||
working-directory: ./src
|
working-directory: ./src
|
||||||
flake:
|
flake:
|
||||||
name: flake8
|
name: flake8
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Set up Python 3.8
|
- name: Set up Python 3.8
|
||||||
@@ -60,7 +57,7 @@ jobs:
|
|||||||
working-directory: ./src
|
working-directory: ./src
|
||||||
licenseheader:
|
licenseheader:
|
||||||
name: licenseheaders
|
name: licenseheaders
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Set up Python 3.8
|
- name: Set up Python 3.8
|
||||||
|
|||||||
@@ -12,26 +12,23 @@ on:
|
|||||||
- 'doc/**'
|
- 'doc/**'
|
||||||
- 'src/pretix/locale/**'
|
- 'src/pretix/locale/**'
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read # to fetch code (actions/checkout)
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-latest
|
||||||
name: Tests
|
name: Tests
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ["3.7", "3.9", "3.10"]
|
python-version: ["3.7", "3.8", "3.9"]
|
||||||
database: [sqlite, postgres, mysql]
|
database: [sqlite, postgres, mysql]
|
||||||
exclude:
|
exclude:
|
||||||
- database: mysql
|
- database: mysql
|
||||||
python-version: "3.10"
|
python-version: "3.8"
|
||||||
- database: mysql
|
- database: mysql
|
||||||
python-version: "3.9"
|
python-version: "3.9"
|
||||||
- database: sqlite
|
- database: sqlite
|
||||||
python-version: "3.7"
|
python-version: "3.7"
|
||||||
- database: sqlite
|
- database: sqlite
|
||||||
python-version: "3.10"
|
python-version: "3.8"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: getong/mariadb-action@v1.1
|
- uses: getong/mariadb-action@v1.1
|
||||||
@@ -58,7 +55,7 @@ jobs:
|
|||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-pip-
|
${{ runner.os }}-pip-
|
||||||
- name: Install system dependencies
|
- name: Install system dependencies
|
||||||
run: sudo apt update && sudo apt install gettext mariadb-client
|
run: sudo apt update && sudo apt install gettext mariadb-client-10.3
|
||||||
- name: Install Python dependencies
|
- name: Install Python dependencies
|
||||||
run: pip3 install -e ".[dev]" mysqlclient psycopg2-binary
|
run: pip3 install -e ".[dev]" mysqlclient psycopg2-binary
|
||||||
working-directory: ./src
|
working-directory: ./src
|
||||||
@@ -79,4 +76,4 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
file: src/coverage.xml
|
file: src/coverage.xml
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: true
|
||||||
if: matrix.database == 'postgres' && matrix.python-version == '3.10'
|
if: matrix.database == 'postgres' && matrix.python-version == '3.8'
|
||||||
|
|||||||
@@ -399,9 +399,9 @@ The two ``transport_options`` entries can be omitted in most cases.
|
|||||||
If they are present they need to be a valid JSON dictionary.
|
If they are present they need to be a valid JSON dictionary.
|
||||||
For possible entries in that dictionary see the `Celery documentation`_.
|
For possible entries in that dictionary see the `Celery documentation`_.
|
||||||
|
|
||||||
To use redis with sentinels set the broker or backend to ``sentinel://sentinel_host_1:26379;sentinel_host_2:26379/0``
|
To use redis with sentinels set the broker or backend to ``sentinel://sentinel_host_1:26379;sentinal_host_2:26379/0``
|
||||||
and the respective transport_options to ``{"master_name":"mymaster"}``.
|
and the respective transport_options to ``{"master_name":"mymaster"}``.
|
||||||
If your redis instances behind the sentinel have a password use ``sentinel://:my_password@sentinel_host_1:26379;sentinel_host_2:26379/0``.
|
If your redis instances behind the sentinel have a password use ``sentinel://:my_password@sentinel_host_1:26379;sentinal_host_2:26379/0``.
|
||||||
If your redis sentinels themselves have a password set the transport_options to ``{"master_name":"mymaster","sentinel_kwargs":{"password":"my_password"}}``.
|
If your redis sentinels themselves have a password set the transport_options to ``{"master_name":"mymaster","sentinel_kwargs":{"password":"my_password"}}``.
|
||||||
|
|
||||||
Sentry
|
Sentry
|
||||||
|
|||||||
@@ -43,6 +43,10 @@ seat objects The assigned se
|
|||||||
└ seat_guid string Identifier of the seat within the seating plan
|
└ seat_guid string Identifier of the seat within the seating plan
|
||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
|
.. versionchanged:: 3.0
|
||||||
|
|
||||||
|
This ``seat`` attribute has been added.
|
||||||
|
|
||||||
.. versionchanged:: 4.14
|
.. versionchanged:: 4.14
|
||||||
|
|
||||||
This ``is_bundled`` attribute has been added and the cart creation endpoints have been updated.
|
This ``is_bundled`` attribute has been added and the cart creation endpoints have been updated.
|
||||||
|
|||||||
@@ -39,6 +39,23 @@ exit_all_at datetime Automatically c
|
|||||||
addon_match boolean If ``true``, tickets on this list can be redeemed by scanning their parent ticket if this still leads to an unambiguous match.
|
addon_match boolean If ``true``, tickets on this list can be redeemed by scanning their parent ticket if this still leads to an unambiguous match.
|
||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
|
.. versionchanged:: 3.9
|
||||||
|
|
||||||
|
The ``subevent`` attribute may now be ``null`` inside event series. The ``allow_multiple_entries``,
|
||||||
|
``allow_entry_after_exit``, and ``rules`` attributes have been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.11
|
||||||
|
|
||||||
|
The ``subevent_match`` and ``exclude`` query parameters have been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.12
|
||||||
|
|
||||||
|
The ``exit_all_at`` attribute has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.17
|
||||||
|
|
||||||
|
The ``ends_after`` and ``expand`` query parameters have been added.
|
||||||
|
|
||||||
.. versionchanged:: 4.12
|
.. versionchanged:: 4.12
|
||||||
|
|
||||||
The ``addon_match`` attribute has been added.
|
The ``addon_match`` attribute has been added.
|
||||||
|
|||||||
@@ -52,9 +52,34 @@ sales_channels list A list of sales
|
|||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
|
|
||||||
|
.. versionchanged:: 3.3
|
||||||
|
|
||||||
|
The attributes ``geo_lat`` and ``geo_lon`` have been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.4
|
||||||
|
|
||||||
|
The attribute ``timezone`` has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.7
|
||||||
|
|
||||||
|
The attribute ``item_meta_properties`` has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.12
|
||||||
|
|
||||||
|
The attribute ``valid_keys`` has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.14
|
||||||
|
|
||||||
|
The attribute ``sales_channels`` has been added.
|
||||||
|
|
||||||
|
|
||||||
Endpoints
|
Endpoints
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
.. versionchanged:: 3.3
|
||||||
|
|
||||||
|
The events resource can now be filtered by meta data attributes.
|
||||||
|
|
||||||
.. versionchanged:: 4.0
|
.. versionchanged:: 4.0
|
||||||
|
|
||||||
The ``clone_from`` parameter has been added to the event creation endpoint.
|
The ``clone_from`` parameter has been added to the event creation endpoint.
|
||||||
@@ -542,6 +567,10 @@ information about the properties.
|
|||||||
.. warning:: This API is intended for advanced users. Even though we take care to validate your input, you will be
|
.. warning:: This API is intended for advanced users. Even though we take care to validate your input, you will be
|
||||||
able to break your event using this API by creating situations of conflicting settings. Please take care.
|
able to break your event using this API by creating situations of conflicting settings. Please take care.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.6
|
||||||
|
|
||||||
|
Initial support for settings has been added to the API.
|
||||||
|
|
||||||
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/settings/
|
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/settings/
|
||||||
|
|
||||||
Get current values of event settings.
|
Get current values of event settings.
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ Data exporters
|
|||||||
pretix and it's plugins include a number of data exporters that allow you to bulk download various data from pretix in
|
pretix and it's plugins include a number of data exporters that allow you to bulk download various data from pretix in
|
||||||
different formats. This page shows you how to use these exporters through the API.
|
different formats. This page shows you how to use these exporters through the API.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.13
|
||||||
|
|
||||||
|
This feature has been added to the API.
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
|
|
||||||
While we consider the methods listed on this page to be a stable API, the availability and specific input field
|
While we consider the methods listed on this page to be a stable API, the availability and specific input field
|
||||||
|
|||||||
@@ -40,6 +40,10 @@ text string Custom text of
|
|||||||
Endpoints
|
Endpoints
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
.. versionadded:: 3.14
|
||||||
|
|
||||||
|
The transaction list endpoint was added.
|
||||||
|
|
||||||
.. http:get:: /api/v1/organizers/(organizer)/giftcards/
|
.. http:get:: /api/v1/organizers/(organizer)/giftcards/
|
||||||
|
|
||||||
Returns a list of all gift cards issued by a given organizer.
|
Returns a list of all gift cards issued by a given organizer.
|
||||||
@@ -253,6 +257,10 @@ Endpoints
|
|||||||
"value": "15.37"
|
"value": "15.37"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.. versionchanged:: 3.5
|
||||||
|
|
||||||
|
This endpoint now returns status code ``409`` if the transaction would lead to a negative gift card value.
|
||||||
|
|
||||||
:param organizer: The ``slug`` field of the organizer to modify
|
:param organizer: The ``slug`` field of the organizer to modify
|
||||||
:param id: The ``id`` field of the gift card to modify
|
:param id: The ``id`` field of the gift card to modify
|
||||||
:query boolean include_accepted: Also show gift cards issued by other organizers that are accepted by this organizer.
|
:query boolean include_accepted: Also show gift cards issued by other organizers that are accepted by this organizer.
|
||||||
|
|||||||
@@ -108,6 +108,16 @@ internal_reference string Customer's refe
|
|||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
|
|
||||||
|
.. versionchanged:: 3.4
|
||||||
|
|
||||||
|
The attribute ``lines.number`` has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.17
|
||||||
|
|
||||||
|
The attribute ``invoice_to_*``, ``invoice_from_*``, ``custom_field``, ``lines.item``, ``lines.variation``, ``lines.event_date_from``,
|
||||||
|
``lines.event_date_to``, and ``lines.attendee_name`` have been added.
|
||||||
|
``refers`` now returns an invoice number including the prefix.
|
||||||
|
|
||||||
.. versionchanged:: 4.1
|
.. versionchanged:: 4.1
|
||||||
|
|
||||||
The attributes ``fee_type`` and ``fee_internal_type`` have been added.
|
The attributes ``fee_type`` and ``fee_internal_type`` have been added.
|
||||||
|
|||||||
@@ -146,6 +146,14 @@ bundles list of objects Definition of b
|
|||||||
meta_data object Values set for event-specific meta data parameters.
|
meta_data object Values set for event-specific meta data parameters.
|
||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
|
.. versionchanged:: 3.7
|
||||||
|
|
||||||
|
The attribute ``meta_data`` has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.10
|
||||||
|
|
||||||
|
The attribute ``multi_allowed`` has been added to ``addons``.
|
||||||
|
|
||||||
.. versionchanged:: 4.0
|
.. versionchanged:: 4.0
|
||||||
|
|
||||||
The attributes ``require_membership``, ``require_membership_types``, ``grant_membership_type``, ``grant_membership_duration_like_event``,
|
The attributes ``require_membership``, ``require_membership_types``, ``grant_membership_type``, ``grant_membership_duration_like_event``,
|
||||||
|
|||||||
@@ -98,6 +98,30 @@ last_modified datetime Last modificati
|
|||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
|
|
||||||
|
.. versionchanged:: 3.5
|
||||||
|
|
||||||
|
The ``order.fees.canceled`` attribute has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.8
|
||||||
|
|
||||||
|
The ``reactivate`` operation has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.10
|
||||||
|
|
||||||
|
The ``search`` query parameter has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.11
|
||||||
|
|
||||||
|
The ``exclude`` and ``subevent_after`` query parameter has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.13
|
||||||
|
|
||||||
|
The ``subevent_before`` query parameter has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.14
|
||||||
|
|
||||||
|
The ``phone`` attribute has been added.
|
||||||
|
|
||||||
.. versionchanged:: 4.0
|
.. versionchanged:: 4.0
|
||||||
|
|
||||||
The ``customer`` attribute has been added.
|
The ``customer`` attribute has been added.
|
||||||
@@ -118,10 +142,6 @@ last_modified datetime Last modificati
|
|||||||
|
|
||||||
The ``order.fees.id`` attribute has been added.
|
The ``order.fees.id`` attribute has been added.
|
||||||
|
|
||||||
.. versionchanged:: 4.15
|
|
||||||
|
|
||||||
The ``include`` query parameter has been added.
|
|
||||||
|
|
||||||
|
|
||||||
.. _order-position-resource:
|
.. _order-position-resource:
|
||||||
|
|
||||||
@@ -186,6 +206,27 @@ pdf_data object Data object req
|
|||||||
``pdf_data=true`` query parameter to your request.
|
``pdf_data=true`` query parameter to your request.
|
||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
|
.. versionchanged:: 3.3
|
||||||
|
|
||||||
|
The ``url`` of a ticket ``download`` can now also return a ``text/uri-list`` instead of a file. See
|
||||||
|
:ref:`order-position-ticket-download` for details.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.5
|
||||||
|
|
||||||
|
The attribute ``canceled`` has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.8
|
||||||
|
|
||||||
|
The attributes ``company``, ``street``, ``zipcode``, ``city``, ``country``, and ``state`` have been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.9
|
||||||
|
|
||||||
|
The ``checkin.type`` attribute has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.16
|
||||||
|
|
||||||
|
Answers to file questions are now returned as an URL.
|
||||||
|
|
||||||
.. _order-payment-resource:
|
.. _order-payment-resource:
|
||||||
|
|
||||||
Order payment resource
|
Order payment resource
|
||||||
@@ -232,20 +273,15 @@ created datetime Date and time o
|
|||||||
comment string Reason for refund (shown to the customer in some cases, can be ``null``).
|
comment string Reason for refund (shown to the customer in some cases, can be ``null``).
|
||||||
execution_date datetime Date and time of completion of this refund (or ``null``)
|
execution_date datetime Date and time of completion of this refund (or ``null``)
|
||||||
provider string Identification string of the payment provider
|
provider string Identification string of the payment provider
|
||||||
details object Refund-specific information. This is a dictionary
|
|
||||||
with various fields that can be different between
|
|
||||||
payment providers, versions, payment states, etc. If
|
|
||||||
you read this field, you always need to be able to
|
|
||||||
deal with situations where values that you expect are
|
|
||||||
missing. Mostly, the field contains various IDs that
|
|
||||||
can be used for matching with other systems. If a
|
|
||||||
payment provider does not implement this feature,
|
|
||||||
the object is empty.
|
|
||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
List of all orders
|
List of all orders
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
.. versionchanged:: 3.5
|
||||||
|
|
||||||
|
The ``include_canceled_positions`` and ``include_canceled_fees`` query parameters have been added.
|
||||||
|
|
||||||
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/
|
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/
|
||||||
|
|
||||||
Returns a list of all orders within a given event.
|
Returns a list of all orders within a given event.
|
||||||
@@ -413,7 +449,6 @@ List of all orders
|
|||||||
:query datetime subevent_after: Only return orders that contain a ticket for a subevent taking place after the given date. This is an exclusive after, and it considers the **end** of the subevent (or its start, if the end is not set).
|
:query datetime subevent_after: Only return orders that contain a ticket for a subevent taking place after the given date. This is an exclusive after, and it considers the **end** of the subevent (or its start, if the end is not set).
|
||||||
:query datetime subevent_before: Only return orders that contain a ticket for a subevent taking place after the given date. This is an exclusive before, and it considers the **start** of the subevent.
|
:query datetime subevent_before: Only return orders that contain a ticket for a subevent taking place after the given date. This is an exclusive before, and it considers the **start** of the subevent.
|
||||||
:query string exclude: Exclude a field from the output, e.g. ``fees`` or ``positions.downloads``. Can be used as a performance optimization. Can be passed multiple times.
|
:query string exclude: Exclude a field from the output, e.g. ``fees`` or ``positions.downloads``. Can be used as a performance optimization. Can be passed multiple times.
|
||||||
:query string include: Include only the given field in the output, e.g. ``fees`` or ``positions.downloads``. Can be used as a performance optimization. Can be passed multiple times. ``include`` is applied before ``exclude``, so ``exclude`` takes precedence.
|
|
||||||
:param organizer: The ``slug`` field of the organizer to fetch
|
:param organizer: The ``slug`` field of the organizer to fetch
|
||||||
:param event: The ``slug`` field of the event to fetch
|
:param event: The ``slug`` field of the event to fetch
|
||||||
:resheader X-Page-Generated: The server time at the beginning of the operation. If you're using this API to fetch
|
:resheader X-Page-Generated: The server time at the beginning of the operation. If you're using this API to fetch
|
||||||
@@ -425,6 +460,10 @@ List of all orders
|
|||||||
Fetching individual orders
|
Fetching individual orders
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
.. versionchanged:: 3.5
|
||||||
|
|
||||||
|
The ``include_canceled_positions`` and ``include_canceled_fees`` query parameters have been added.
|
||||||
|
|
||||||
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/
|
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/
|
||||||
|
|
||||||
Returns information on one order, identified by its order code.
|
Returns information on one order, identified by its order code.
|
||||||
@@ -999,6 +1038,10 @@ Creating orders
|
|||||||
Order state operations
|
Order state operations
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
.. versionchanged:: 3.12
|
||||||
|
|
||||||
|
The ``mark_paid`` operation now takes a ``send_email`` parameter.
|
||||||
|
|
||||||
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/mark_paid/
|
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/mark_paid/
|
||||||
|
|
||||||
Marks a pending or expired order as successfully paid.
|
Marks a pending or expired order as successfully paid.
|
||||||
@@ -1400,6 +1443,10 @@ Sending e-mails
|
|||||||
List of all order positions
|
List of all order positions
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
.. versionchanged:: 3.5
|
||||||
|
|
||||||
|
The ``include_canceled_positions`` and ``include_canceled_fees`` query parameters have been added.
|
||||||
|
|
||||||
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/
|
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/
|
||||||
|
|
||||||
Returns a list of all order positions within a given event.
|
Returns a list of all order positions within a given event.
|
||||||
@@ -1654,6 +1701,10 @@ Order position ticket download
|
|||||||
Manipulating individual positions
|
Manipulating individual positions
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
|
.. versionchanged:: 3.15
|
||||||
|
|
||||||
|
The ``PATCH`` method has been added for individual positions.
|
||||||
|
|
||||||
.. versionchanged:: 4.8
|
.. versionchanged:: 4.8
|
||||||
|
|
||||||
The ``PATCH`` method now supports changing items, variations, subevents, seats, prices, and tax rules.
|
The ``PATCH`` method now supports changing items, variations, subevents, seats, prices, and tax rules.
|
||||||
@@ -1960,6 +2011,14 @@ otherwise, such as splitting an order or changing fees.
|
|||||||
Order payment endpoints
|
Order payment endpoints
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
|
.. versionchanged:: 3.6
|
||||||
|
|
||||||
|
Payments can now be created through the API.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.12
|
||||||
|
|
||||||
|
The ``confirm`` operation now takes a ``send_email`` parameter.
|
||||||
|
|
||||||
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/payments/
|
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/payments/
|
||||||
|
|
||||||
Returns a list of all payments for an order.
|
Returns a list of all payments for an order.
|
||||||
@@ -2265,7 +2324,6 @@ Order refund endpoints
|
|||||||
"created": "2017-12-01T10:00:00Z",
|
"created": "2017-12-01T10:00:00Z",
|
||||||
"execution_date": "2017-12-04T12:13:12Z",
|
"execution_date": "2017-12-04T12:13:12Z",
|
||||||
"comment": "Cancellation",
|
"comment": "Cancellation",
|
||||||
"details": {},
|
|
||||||
"provider": "banktransfer"
|
"provider": "banktransfer"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2309,7 +2367,6 @@ Order refund endpoints
|
|||||||
"created": "2017-12-01T10:00:00Z",
|
"created": "2017-12-01T10:00:00Z",
|
||||||
"execution_date": "2017-12-04T12:13:12Z",
|
"execution_date": "2017-12-04T12:13:12Z",
|
||||||
"comment": "Cancellation",
|
"comment": "Cancellation",
|
||||||
"details": {},
|
|
||||||
"provider": "banktransfer"
|
"provider": "banktransfer"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2367,7 +2424,6 @@ Order refund endpoints
|
|||||||
"created": "2017-12-01T10:00:00Z",
|
"created": "2017-12-01T10:00:00Z",
|
||||||
"execution_date": null,
|
"execution_date": null,
|
||||||
"comment": "Cancellation",
|
"comment": "Cancellation",
|
||||||
"details": {},
|
|
||||||
"provider": "manual"
|
"provider": "manual"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2497,6 +2553,10 @@ Revoked ticket secrets
|
|||||||
|
|
||||||
With some non-default ticket secret generation methods, a list of revoked ticket secrets is required for proper validation.
|
With some non-default ticket secret generation methods, a list of revoked ticket secrets is required for proper validation.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.12
|
||||||
|
|
||||||
|
Added revocation lists.
|
||||||
|
|
||||||
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/revokedsecrets/
|
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/revokedsecrets/
|
||||||
|
|
||||||
Returns a list of all revoked secrets within a given event.
|
Returns a list of all revoked secrets within a given event.
|
||||||
|
|||||||
@@ -109,6 +109,10 @@ information about the properties.
|
|||||||
.. warning:: This API is intended for advanced users. Even though we take care to validate your input, you will be
|
.. warning:: This API is intended for advanced users. Even though we take care to validate your input, you will be
|
||||||
able to break your shops using this API by creating situations of conflicting settings. Please take care.
|
able to break your shops using this API by creating situations of conflicting settings. Please take care.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.14
|
||||||
|
|
||||||
|
Initial support for settings has been added to the API.
|
||||||
|
|
||||||
.. http:get:: /api/v1/organizers/(organizer)/settings/
|
.. http:get:: /api/v1/organizers/(organizer)/settings/
|
||||||
|
|
||||||
Get current values of organizer settings.
|
Get current values of organizer settings.
|
||||||
|
|||||||
@@ -76,9 +76,26 @@ dependency_value string An old version
|
|||||||
for one value. **Deprecated.**
|
for one value. **Deprecated.**
|
||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
|
.. versionchanged:: 3.5
|
||||||
|
|
||||||
|
The attribute ``help_text`` has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.14
|
||||||
|
|
||||||
|
The attributes ``valid_*`` have been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.18
|
||||||
|
|
||||||
|
The attribute ``valid_file_portrait`` have been added.
|
||||||
|
|
||||||
Endpoints
|
Endpoints
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
.. versionchanged:: 1.15
|
||||||
|
|
||||||
|
The questions endpoint has been extended by the filter queries ``ask_during_checkin``, ``requred``, and
|
||||||
|
``identifier``.
|
||||||
|
|
||||||
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/questions/
|
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/questions/
|
||||||
|
|
||||||
Returns a list of all questions within a given event.
|
Returns a list of all questions within a given event.
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ available_number integer Number of avail
|
|||||||
slightly out of date. ``null`` means unlimited.
|
slightly out of date. ``null`` means unlimited.
|
||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
|
.. versionchanged:: 3.10
|
||||||
|
|
||||||
|
The attribute ``release_after_exit`` has been added.
|
||||||
|
|
||||||
.. versionchanged:: 4.1
|
.. versionchanged:: 4.1
|
||||||
|
|
||||||
The ``with_availability`` query parameter has been added.
|
The ``with_availability`` query parameter has been added.
|
||||||
|
|||||||
@@ -59,13 +59,29 @@ seat_category_mapping object An object mappi
|
|||||||
last_modified datetime Last modification of this object
|
last_modified datetime Last modification of this object
|
||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
.. versionchanged:: 4.15
|
.. versionchanged:: 3.3
|
||||||
|
|
||||||
The ``search`` query parameter has been added to filter sub-events by their name or location in any language.
|
The attributes ``geo_lat`` and ``geo_lon`` have been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.10
|
||||||
|
|
||||||
|
The ``disabled`` attribute has been added to ``item_price_overrides`` and ``variation_price_overrides``.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.12
|
||||||
|
|
||||||
|
The ``last_modified`` attribute has been added.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.18
|
||||||
|
|
||||||
|
The ``available_from``/``available_until`` attributes have been added to ``item_price_overrides`` and ``variation_price_overrides``.
|
||||||
|
|
||||||
Endpoints
|
Endpoints
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
.. versionchanged:: 3.3
|
||||||
|
|
||||||
|
The sub-events resource can now be filtered by meta data attributes.
|
||||||
|
|
||||||
.. versionchanged:: 4.1
|
.. versionchanged:: 4.1
|
||||||
|
|
||||||
The ``with_availability_for`` parameter has been added.
|
The ``with_availability_for`` parameter has been added.
|
||||||
@@ -131,7 +147,6 @@ Endpoints
|
|||||||
:query is_future: If set to ``true`` (``false``), only events that happen currently or in the future are (not) returned.
|
:query is_future: If set to ``true`` (``false``), only events that happen currently or in the future are (not) returned.
|
||||||
:query is_past: If set to ``true`` (``false``), only events that are over are (not) returned.
|
:query is_past: If set to ``true`` (``false``), only events that are over are (not) returned.
|
||||||
:query ends_after: If set to a date and time, only events that happen during of after the given time are returned.
|
:query ends_after: If set to a date and time, only events that happen during of after the given time are returned.
|
||||||
:query search: Only return events matching a given search query.
|
|
||||||
:param organizer: The ``slug`` field of a valid organizer
|
:param organizer: The ``slug`` field of a valid organizer
|
||||||
:param event: The ``slug`` field of the main event
|
:param event: The ``slug`` field of the main event
|
||||||
:query datetime modified_since: Only return objects that have changed since the given date. Be careful: This does not
|
:query datetime modified_since: Only return objects that have changed since the given date. Be careful: This does not
|
||||||
|
|||||||
@@ -50,6 +50,10 @@ show_hidden_items boolean Only if set to
|
|||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
|
|
||||||
|
.. versionchanged:: 3.4
|
||||||
|
|
||||||
|
The attribute ``seat`` has been added.
|
||||||
|
|
||||||
Endpoints
|
Endpoints
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,12 @@ subevent integer ID of the date
|
|||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
|
|
||||||
|
.. versionchanged:: 1.15
|
||||||
|
|
||||||
|
The write operations ``POST``, ``PATCH``, ``PUT``, and ``DELETE`` have been added as well as a method to send out
|
||||||
|
vouchers.
|
||||||
|
|
||||||
|
|
||||||
Endpoints
|
Endpoints
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
|||||||
@@ -126,8 +126,6 @@ The provider class
|
|||||||
|
|
||||||
.. automethod:: api_payment_details
|
.. automethod:: api_payment_details
|
||||||
|
|
||||||
.. automethod:: api_refund_details
|
|
||||||
|
|
||||||
.. automethod:: matching_id
|
.. automethod:: matching_id
|
||||||
|
|
||||||
.. automethod:: shred_payment_info
|
.. automethod:: shred_payment_info
|
||||||
@@ -138,10 +136,6 @@ The provider class
|
|||||||
|
|
||||||
.. autoattribute:: is_meta
|
.. autoattribute:: is_meta
|
||||||
|
|
||||||
.. autoattribute:: execute_payment_needs_user
|
|
||||||
|
|
||||||
.. autoattribute:: multi_use_supported
|
|
||||||
|
|
||||||
.. autoattribute:: test_mode_message
|
.. autoattribute:: test_mode_message
|
||||||
|
|
||||||
.. autoattribute:: requires_invoice_immediately
|
.. autoattribute:: requires_invoice_immediately
|
||||||
|
|||||||
@@ -184,6 +184,11 @@ Most of these methods work identically on :class:`pretix.base.models.TeamAPIToke
|
|||||||
Staff sessions
|
Staff sessions
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
.. versionchanged:: 1.14
|
||||||
|
|
||||||
|
In 1.14, the ``User.is_superuser`` attribute has been deprecated and statically set to return ``False``. Staff
|
||||||
|
sessions have been newly introduced.
|
||||||
|
|
||||||
System administrators of a pretix instance are identified by the ``is_staff`` attribute on the user model. By default,
|
System administrators of a pretix instance are identified by the ``is_staff`` attribute on the user model. By default,
|
||||||
the regular permission rules apply for users with ``is_staff = True``. The only difference is that such users can
|
the regular permission rules apply for users with ``is_staff = True``. The only difference is that such users can
|
||||||
temporarily turn on "staff mode" via a button in the user interface that grants them **all permissions** as long as
|
temporarily turn on "staff mode" via a button in the user interface that grants them **all permissions** as long as
|
||||||
|
|||||||
@@ -447,4 +447,8 @@ Hosted or pretix Enterprise are active, you can pass the following fields:
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
.. versionchanged:: 3.6
|
||||||
|
|
||||||
|
Dynamically opening the widget has been added in pretix 3.6.
|
||||||
|
|
||||||
.. _Let's Encrypt: https://letsencrypt.org/
|
.. _Let's Encrypt: https://letsencrypt.org/
|
||||||
|
|||||||
@@ -19,4 +19,4 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
# 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/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
__version__ = "4.15.0"
|
__version__ = "4.15.0.dev0"
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import pycountry
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.files import File
|
from django.core.files import File
|
||||||
from django.db.models import F, Q
|
from django.db.models import F, Q
|
||||||
from django.utils.encoding import force_str
|
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import gettext_lazy
|
from django.utils.translation import gettext_lazy
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
@@ -62,25 +61,14 @@ from pretix.base.services.pricing import (
|
|||||||
)
|
)
|
||||||
from pretix.base.settings import COUNTRIES_WITH_STATE_IN_ADDRESS
|
from pretix.base.settings import COUNTRIES_WITH_STATE_IN_ADDRESS
|
||||||
from pretix.base.signals import register_ticket_outputs
|
from pretix.base.signals import register_ticket_outputs
|
||||||
from pretix.helpers.countries import CachedCountries
|
|
||||||
from pretix.multidomain.urlreverse import build_absolute_uri
|
from pretix.multidomain.urlreverse import build_absolute_uri
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class CompatibleCountryField(serializers.Field):
|
class CompatibleCountryField(serializers.Field):
|
||||||
countries = CachedCountries()
|
|
||||||
default_error_messages = {
|
|
||||||
'invalid_choice': gettext_lazy('"{input}" is not a valid choice.')
|
|
||||||
}
|
|
||||||
|
|
||||||
def to_internal_value(self, data):
|
def to_internal_value(self, data):
|
||||||
country = self.countries.alpha2(data)
|
return {self.field_name: Country(data)}
|
||||||
if data and not country:
|
|
||||||
country = self.countries.by_name(force_str(data))
|
|
||||||
if not country:
|
|
||||||
self.fail("invalid_choice", input=data)
|
|
||||||
return {self.field_name: Country(country)}
|
|
||||||
|
|
||||||
def to_representation(self, instance: InvoiceAddress):
|
def to_representation(self, instance: InvoiceAddress):
|
||||||
if instance.country:
|
if instance.country:
|
||||||
@@ -565,22 +553,12 @@ class OrderPaymentSerializer(I18nAwareModelSerializer):
|
|||||||
'details')
|
'details')
|
||||||
|
|
||||||
|
|
||||||
class RefundDetailsField(serializers.Field):
|
|
||||||
def to_representation(self, value: OrderRefund):
|
|
||||||
pp = value.payment_provider
|
|
||||||
if not pp:
|
|
||||||
return {}
|
|
||||||
return pp.api_refund_details(value)
|
|
||||||
|
|
||||||
|
|
||||||
class OrderRefundSerializer(I18nAwareModelSerializer):
|
class OrderRefundSerializer(I18nAwareModelSerializer):
|
||||||
payment = SlugRelatedField(slug_field='local_id', read_only=True)
|
payment = SlugRelatedField(slug_field='local_id', read_only=True)
|
||||||
details = RefundDetailsField(source='*', allow_null=True, read_only=True)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = OrderRefund
|
model = OrderRefund
|
||||||
fields = ('local_id', 'state', 'source', 'amount', 'payment', 'created', 'execution_date', 'comment', 'provider',
|
fields = ('local_id', 'state', 'source', 'amount', 'payment', 'created', 'execution_date', 'comment', 'provider')
|
||||||
'details')
|
|
||||||
|
|
||||||
|
|
||||||
class OrderURLField(serializers.URLField):
|
class OrderURLField(serializers.URLField):
|
||||||
@@ -622,23 +600,6 @@ class OrderSerializer(I18nAwareModelSerializer):
|
|||||||
if not self.context['pdf_data']:
|
if not self.context['pdf_data']:
|
||||||
self.fields['positions'].child.fields.pop('pdf_data', None)
|
self.fields['positions'].child.fields.pop('pdf_data', None)
|
||||||
|
|
||||||
includes = set(self.context['include'])
|
|
||||||
if includes:
|
|
||||||
for fname, field in list(self.fields.items()):
|
|
||||||
if fname in includes:
|
|
||||||
continue
|
|
||||||
elif hasattr(field, 'child'):
|
|
||||||
found_any = False
|
|
||||||
for childfname, childfield in list(field.child.fields.items()):
|
|
||||||
if f'{fname}.{childfname}' not in includes:
|
|
||||||
field.child.fields.pop(childfname)
|
|
||||||
else:
|
|
||||||
found_any = True
|
|
||||||
if not found_any:
|
|
||||||
self.fields.pop(fname)
|
|
||||||
else:
|
|
||||||
self.fields.pop(fname)
|
|
||||||
|
|
||||||
for exclude_field in self.context['exclude']:
|
for exclude_field in self.context['exclude']:
|
||||||
p = exclude_field.split('.')
|
p = exclude_field.split('.')
|
||||||
if p[0] in self.fields:
|
if p[0] in self.fields:
|
||||||
|
|||||||
@@ -332,7 +332,6 @@ with scopes_disabled():
|
|||||||
ends_after = django_filters.rest_framework.IsoDateTimeFilter(method='ends_after_qs')
|
ends_after = django_filters.rest_framework.IsoDateTimeFilter(method='ends_after_qs')
|
||||||
modified_since = django_filters.IsoDateTimeFilter(field_name='last_modified', lookup_expr='gte')
|
modified_since = django_filters.IsoDateTimeFilter(field_name='last_modified', lookup_expr='gte')
|
||||||
sales_channel = django_filters.rest_framework.CharFilter(method='sales_channel_qs')
|
sales_channel = django_filters.rest_framework.CharFilter(method='sales_channel_qs')
|
||||||
search = django_filters.rest_framework.CharFilter(method='search_qs')
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SubEvent
|
model = SubEvent
|
||||||
@@ -368,12 +367,6 @@ with scopes_disabled():
|
|||||||
def sales_channel_qs(self, queryset, name, value):
|
def sales_channel_qs(self, queryset, name, value):
|
||||||
return queryset.filter(event__sales_channels__contains=value)
|
return queryset.filter(event__sales_channels__contains=value)
|
||||||
|
|
||||||
def search_qs(self, queryset, name, value):
|
|
||||||
return queryset.filter(
|
|
||||||
Q(name__icontains=i18ncomp(value))
|
|
||||||
| Q(location__icontains=i18ncomp(value))
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class SubEventViewSet(ConditionalListView, viewsets.ModelViewSet):
|
class SubEventViewSet(ConditionalListView, viewsets.ModelViewSet):
|
||||||
serializer_class = SubEventSerializer
|
serializer_class = SubEventSerializer
|
||||||
|
|||||||
@@ -191,7 +191,6 @@ class OrderViewSet(viewsets.ModelViewSet):
|
|||||||
ctx['event'] = self.request.event
|
ctx['event'] = self.request.event
|
||||||
ctx['pdf_data'] = self.request.query_params.get('pdf_data', 'false') == 'true'
|
ctx['pdf_data'] = self.request.query_params.get('pdf_data', 'false') == 'true'
|
||||||
ctx['exclude'] = self.request.query_params.getlist('exclude')
|
ctx['exclude'] = self.request.query_params.getlist('exclude')
|
||||||
ctx['include'] = self.request.query_params.getlist('include')
|
|
||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
@@ -700,8 +699,8 @@ class OrderViewSet(viewsets.ModelViewSet):
|
|||||||
subject_attendees_template = request.event.settings.mail_subject_order_placed_attendee
|
subject_attendees_template = request.event.settings.mail_subject_order_placed_attendee
|
||||||
|
|
||||||
_order_placed_email(
|
_order_placed_email(
|
||||||
request.event, order, email_template, subject_template,
|
request.event, order, payment.payment_provider if payment else None, email_template, subject_template,
|
||||||
log_entry, invoice, [payment] if payment else [], is_free=free_flow
|
log_entry, invoice, payment, is_free=free_flow
|
||||||
)
|
)
|
||||||
if email_attendees:
|
if email_attendees:
|
||||||
for p in order.positions.all():
|
for p in order.positions.all():
|
||||||
|
|||||||
@@ -320,18 +320,13 @@ def get_email_context(**kwargs):
|
|||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
def _placeholder_payments(order, payments):
|
def _placeholder_payment(order, payment):
|
||||||
d = []
|
if not payment:
|
||||||
for payment in payments:
|
return None
|
||||||
if 'payment' in inspect.signature(payment.payment_provider.order_pending_mail_render).parameters:
|
if 'payment' in inspect.signature(payment.payment_provider.order_pending_mail_render).parameters:
|
||||||
d.append(str(payment.payment_provider.order_pending_mail_render(order, payment)))
|
return str(payment.payment_provider.order_pending_mail_render(order, payment))
|
||||||
else:
|
|
||||||
d.append(str(payment.payment_provider.order_pending_mail_render(order)))
|
|
||||||
d = [line for line in d if line.strip()]
|
|
||||||
if d:
|
|
||||||
return '\n\n'.join(d)
|
|
||||||
else:
|
else:
|
||||||
return ''
|
return str(payment.payment_provider.order_pending_mail_render(order))
|
||||||
|
|
||||||
|
|
||||||
def get_best_name(position_or_address, parts=False):
|
def get_best_name(position_or_address, parts=False):
|
||||||
@@ -622,7 +617,7 @@ def base_placeholders(sender, **kwargs):
|
|||||||
_('An individual text with a reason can be inserted here.'),
|
_('An individual text with a reason can be inserted here.'),
|
||||||
),
|
),
|
||||||
SimpleFunctionalMailTextPlaceholder(
|
SimpleFunctionalMailTextPlaceholder(
|
||||||
'payment_info', ['order', 'payments'], _placeholder_payments,
|
'payment_info', ['order', 'payment'], _placeholder_payment,
|
||||||
_('The amount has been charged to your card.'),
|
_('The amount has been charged to your card.'),
|
||||||
),
|
),
|
||||||
SimpleFunctionalMailTextPlaceholder(
|
SimpleFunctionalMailTextPlaceholder(
|
||||||
|
|||||||
@@ -303,8 +303,6 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
for id, vn in payment_methods:
|
for id, vn in payment_methods:
|
||||||
headers.append(_('Paid by {method}').format(method=vn))
|
headers.append(_('Paid by {method}').format(method=vn))
|
||||||
|
|
||||||
# get meta_data labels from first cached event
|
|
||||||
headers += next(iter(self.event_object_cache.values())).meta_data.keys()
|
|
||||||
yield headers
|
yield headers
|
||||||
|
|
||||||
full_fee_sum_cache = {
|
full_fee_sum_cache = {
|
||||||
@@ -418,7 +416,6 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
payment_sum_cache.get((order.id, id), Decimal('0.00')) -
|
payment_sum_cache.get((order.id, id), Decimal('0.00')) -
|
||||||
refund_sum_cache.get((order.id, id), Decimal('0.00'))
|
refund_sum_cache.get((order.id, id), Decimal('0.00'))
|
||||||
)
|
)
|
||||||
row += self.event_object_cache[order.event_id].meta_data.values()
|
|
||||||
yield row
|
yield row
|
||||||
|
|
||||||
def iterate_fees(self, form_data: dict):
|
def iterate_fees(self, form_data: dict):
|
||||||
@@ -468,9 +465,6 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
|
|
||||||
headers.append(_('External customer ID'))
|
headers.append(_('External customer ID'))
|
||||||
headers.append(_('Payment providers'))
|
headers.append(_('Payment providers'))
|
||||||
|
|
||||||
# get meta_data labels from first cached event
|
|
||||||
headers += next(iter(self.event_object_cache.values())).meta_data.keys()
|
|
||||||
yield headers
|
yield headers
|
||||||
|
|
||||||
yield self.ProgressSetTotal(total=qs.count())
|
yield self.ProgressSetTotal(total=qs.count())
|
||||||
@@ -518,7 +512,6 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
str(self.providers.get(p, p)) for p in sorted(set((op.payment_providers or '').split(',')))
|
str(self.providers.get(p, p)) for p in sorted(set((op.payment_providers or '').split(',')))
|
||||||
if p and p != 'free'
|
if p and p != 'free'
|
||||||
]))
|
]))
|
||||||
row += self.event_object_cache[order.event_id].meta_data.values()
|
|
||||||
yield row
|
yield row
|
||||||
|
|
||||||
def iterate_positions(self, form_data: dict):
|
def iterate_positions(self, form_data: dict):
|
||||||
@@ -540,7 +533,6 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
'order', 'order__invoice_address', 'order__customer', 'item', 'variation',
|
'order', 'order__invoice_address', 'order__customer', 'item', 'variation',
|
||||||
'voucher', 'tax_rule'
|
'voucher', 'tax_rule'
|
||||||
).prefetch_related(
|
).prefetch_related(
|
||||||
'subevent', 'subevent__meta_values',
|
|
||||||
'answers', 'answers__question', 'answers__options'
|
'answers', 'answers__question', 'answers__options'
|
||||||
)
|
)
|
||||||
if form_data['paid_only']:
|
if form_data['paid_only']:
|
||||||
@@ -632,10 +624,6 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
_('Payment providers'),
|
_('Payment providers'),
|
||||||
]
|
]
|
||||||
|
|
||||||
# get meta_data labels from first cached event
|
|
||||||
meta_data_labels = next(iter(self.event_object_cache.values())).meta_data.keys()
|
|
||||||
if has_subevents:
|
|
||||||
headers += meta_data_labels
|
|
||||||
yield headers
|
yield headers
|
||||||
|
|
||||||
all_ids = list(base_qs.order_by('order__datetime', 'positionid').values_list('pk', flat=True))
|
all_ids = list(base_qs.order_by('order__datetime', 'positionid').values_list('pk', flat=True))
|
||||||
@@ -759,12 +747,6 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
str(self.providers.get(p, p)) for p in sorted(set((op.payment_providers or '').split(',')))
|
str(self.providers.get(p, p)) for p in sorted(set((op.payment_providers or '').split(',')))
|
||||||
if p and p != 'free'
|
if p and p != 'free'
|
||||||
]))
|
]))
|
||||||
|
|
||||||
if has_subevents:
|
|
||||||
if op.subevent:
|
|
||||||
row += op.subevent.meta_data.values()
|
|
||||||
else:
|
|
||||||
row += [''] * len(meta_data_labels)
|
|
||||||
yield row
|
yield row
|
||||||
|
|
||||||
def get_filename(self):
|
def get_filename(self):
|
||||||
|
|||||||
+12
-29
@@ -23,7 +23,6 @@ import logging
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from itertools import groupby
|
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
import bleach
|
import bleach
|
||||||
@@ -555,47 +554,31 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
|
|||||||
pgettext('invoice', 'Amount'),
|
pgettext('invoice', 'Amount'),
|
||||||
)]
|
)]
|
||||||
|
|
||||||
def _group_key(line):
|
|
||||||
return (line.description, line.tax_rate, line.tax_name, line.net_value, line.gross_value, line.subevent_id,
|
|
||||||
line.event_date_from, line.event_date_to)
|
|
||||||
|
|
||||||
total = Decimal('0.00')
|
total = Decimal('0.00')
|
||||||
for (description, tax_rate, tax_name, net_value, gross_value, *ignored), lines in groupby(self.invoice.lines.all(), key=_group_key):
|
for line in self.invoice.lines.all():
|
||||||
lines = list(lines)
|
|
||||||
if has_taxes:
|
if has_taxes:
|
||||||
if len(lines) > 1:
|
|
||||||
single_price_line = pgettext('invoice', 'Single price: {net_price} net / {gross_price} gross').format(
|
|
||||||
net_price=money_filter(net_value, self.invoice.event.currency),
|
|
||||||
gross_price=money_filter(gross_value, self.invoice.event.currency),
|
|
||||||
)
|
|
||||||
description = description + "\n" + single_price_line
|
|
||||||
tdata.append((
|
tdata.append((
|
||||||
Paragraph(
|
Paragraph(
|
||||||
bleach.clean(description, tags=['br']).strip().replace('<br>', '<br/>').replace('\n', '<br />\n'),
|
bleach.clean(line.description, tags=['br']).strip().replace('<br>', '<br/>').replace('\n', '<br />\n'),
|
||||||
self.stylesheet['Normal']
|
self.stylesheet['Normal']
|
||||||
),
|
),
|
||||||
str(len(lines)),
|
"1",
|
||||||
localize(tax_rate) + " %",
|
localize(line.tax_rate) + " %",
|
||||||
money_filter(net_value * len(lines), self.invoice.event.currency),
|
money_filter(line.net_value, self.invoice.event.currency),
|
||||||
money_filter(gross_value * len(lines), self.invoice.event.currency),
|
money_filter(line.gross_value, self.invoice.event.currency),
|
||||||
))
|
))
|
||||||
else:
|
else:
|
||||||
if len(lines) > 1:
|
|
||||||
single_price_line = pgettext('invoice', 'Single price: {price}').format(
|
|
||||||
price=money_filter(gross_value, self.invoice.event.currency),
|
|
||||||
)
|
|
||||||
description = description + "\n" + single_price_line
|
|
||||||
tdata.append((
|
tdata.append((
|
||||||
Paragraph(
|
Paragraph(
|
||||||
bleach.clean(description, tags=['br']).strip().replace('<br>', '<br/>').replace('\n', '<br />\n'),
|
bleach.clean(line.description, tags=['br']).strip().replace('<br>', '<br/>').replace('\n', '<br />\n'),
|
||||||
self.stylesheet['Normal']
|
self.stylesheet['Normal']
|
||||||
),
|
),
|
||||||
str(len(lines)),
|
"1",
|
||||||
money_filter(gross_value * len(lines), self.invoice.event.currency),
|
money_filter(line.gross_value, self.invoice.event.currency),
|
||||||
))
|
))
|
||||||
taxvalue_map[tax_rate, tax_name] += (gross_value - net_value) * len(lines)
|
taxvalue_map[line.tax_rate, line.tax_name] += line.tax_value
|
||||||
grossvalue_map[tax_rate, tax_name] += gross_value * len(lines)
|
grossvalue_map[line.tax_rate, line.tax_name] += line.gross_value
|
||||||
total += gross_value * len(lines)
|
total += line.gross_value
|
||||||
|
|
||||||
if has_taxes:
|
if has_taxes:
|
||||||
tdata.append([
|
tdata.append([
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
# Generated by Django 3.2.16 on 2022-11-14 11:32
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('pretixbase', '0223_voucher_min_usages'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='eventmetaproperty',
|
|
||||||
name='filter_allowed',
|
|
||||||
field=models.BooleanField(default=True),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
# Generated by Django 3.2.16 on 2022-11-17 15:27
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('pretixbase', '0224_eventmetaproperty_filter_allowed'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='orderpayment',
|
|
||||||
name='process_initiated',
|
|
||||||
field=models.BooleanField(null=True),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@@ -1580,11 +1580,6 @@ class EventMetaProperty(LoggedModel):
|
|||||||
verbose_name=_("Valid values"),
|
verbose_name=_("Valid values"),
|
||||||
help_text=_("If you keep this empty, any value is allowed. Otherwise, enter one possible value per line.")
|
help_text=_("If you keep this empty, any value is allowed. Otherwise, enter one possible value per line.")
|
||||||
)
|
)
|
||||||
filter_allowed = models.BooleanField(
|
|
||||||
default=True, verbose_name=_("Can be used for filtering"),
|
|
||||||
help_text=_("This field will be shown to filter events or reports in the backend, and it can also be used "
|
|
||||||
"for hidden filter parameters in the frontend (e.g. using the widget).")
|
|
||||||
)
|
|
||||||
|
|
||||||
def full_clean(self, exclude=None, validate_unique=True):
|
def full_clean(self, exclude=None, validate_unique=True):
|
||||||
super().full_clean(exclude, validate_unique)
|
super().full_clean(exclude, validate_unique)
|
||||||
|
|||||||
@@ -581,15 +581,18 @@ class Item(LoggedModel):
|
|||||||
def tax(self, price=None, base_price_is='auto', currency=None, invoice_address=None, override_tax_rate=None, include_bundled=False):
|
def tax(self, price=None, base_price_is='auto', currency=None, invoice_address=None, override_tax_rate=None, include_bundled=False):
|
||||||
price = price if price is not None else self.default_price
|
price = price if price is not None else self.default_price
|
||||||
|
|
||||||
bundled_sum = Decimal('0.00')
|
if not self.tax_rule:
|
||||||
bundled_sum_net = Decimal('0.00')
|
t = TaxedPrice(gross=price, net=price, tax=Decimal('0.00'),
|
||||||
bundled_sum_tax = Decimal('0.00')
|
rate=Decimal('0.00'), name='')
|
||||||
|
else:
|
||||||
|
t = self.tax_rule.tax(price, base_price_is=base_price_is, invoice_address=invoice_address,
|
||||||
|
override_tax_rate=override_tax_rate, currency=currency or self.event.currency)
|
||||||
|
|
||||||
if include_bundled:
|
if include_bundled:
|
||||||
for b in self.bundles.all():
|
for b in self.bundles.all():
|
||||||
if b.designated_price and b.bundled_item.tax_rule_id != self.tax_rule_id:
|
if b.designated_price and b.bundled_item.tax_rule_id != self.tax_rule_id:
|
||||||
if b.bundled_variation:
|
if b.bundled_variation:
|
||||||
bprice = b.bundled_variation.tax(b.designated_price * b.count,
|
bprice = b.bundled_variation.tax(b.designated_price * b.count, base_price_is='gross',
|
||||||
base_price_is='gross',
|
|
||||||
invoice_address=invoice_address,
|
invoice_address=invoice_address,
|
||||||
currency=currency)
|
currency=currency)
|
||||||
else:
|
else:
|
||||||
@@ -597,23 +600,17 @@ class Item(LoggedModel):
|
|||||||
invoice_address=invoice_address,
|
invoice_address=invoice_address,
|
||||||
base_price_is='gross',
|
base_price_is='gross',
|
||||||
currency=currency)
|
currency=currency)
|
||||||
bundled_sum += bprice.gross
|
if not self.tax_rule:
|
||||||
bundled_sum_net += bprice.net
|
compare_price = TaxedPrice(gross=b.designated_price * b.count, net=b.designated_price * b.count,
|
||||||
bundled_sum_tax += bprice.tax
|
tax=Decimal('0.00'), rate=Decimal('0.00'), name='')
|
||||||
|
else:
|
||||||
if not self.tax_rule:
|
compare_price = self.tax_rule.tax(b.designated_price * b.count,
|
||||||
t = TaxedPrice(gross=price - bundled_sum, net=price - bundled_sum, tax=Decimal('0.00'),
|
override_tax_rate=override_tax_rate,
|
||||||
rate=Decimal('0.00'), name='')
|
invoice_address=invoice_address,
|
||||||
else:
|
currency=currency)
|
||||||
t = self.tax_rule.tax(price, base_price_is=base_price_is, invoice_address=invoice_address,
|
t.net += bprice.net - compare_price.net
|
||||||
override_tax_rate=override_tax_rate, currency=currency or self.event.currency,
|
t.tax += bprice.tax - compare_price.tax
|
||||||
subtract_from_gross=bundled_sum)
|
t.name = "MIXED!"
|
||||||
|
|
||||||
if bundled_sum:
|
|
||||||
t.name = "MIXED!"
|
|
||||||
t.gross += bundled_sum
|
|
||||||
t.net += bundled_sum_net
|
|
||||||
t.tax += bundled_sum_tax
|
|
||||||
|
|
||||||
return t
|
return t
|
||||||
|
|
||||||
@@ -1384,10 +1381,8 @@ class Question(LoggedModel):
|
|||||||
if self.type == Question.TYPE_CHOICE:
|
if self.type == Question.TYPE_CHOICE:
|
||||||
if isinstance(answer, QuestionOption):
|
if isinstance(answer, QuestionOption):
|
||||||
return answer
|
return answer
|
||||||
if not isinstance(answer, (int, str)):
|
|
||||||
raise ValidationError(_('Invalid input type.'))
|
|
||||||
q = Q(identifier=answer)
|
q = Q(identifier=answer)
|
||||||
if isinstance(answer, int) or (isinstance(answer, str) and answer.isdigit()):
|
if isinstance(answer, int) or answer.isdigit():
|
||||||
q |= Q(pk=answer)
|
q |= Q(pk=answer)
|
||||||
o = self.options.filter(q).first()
|
o = self.options.filter(q).first()
|
||||||
if not o:
|
if not o:
|
||||||
|
|||||||
@@ -1509,9 +1509,6 @@ class OrderPayment(models.Model):
|
|||||||
:type info: str
|
:type info: str
|
||||||
:param fee: The ``OrderFee`` object used to track the fee for this order.
|
:param fee: The ``OrderFee`` object used to track the fee for this order.
|
||||||
:type fee: pretix.base.models.OrderFee
|
:type fee: pretix.base.models.OrderFee
|
||||||
:param process_initiated: Only for internal use inside pretix.presale to check which payments have started
|
|
||||||
the execution process.
|
|
||||||
:type process_initiated: bool
|
|
||||||
"""
|
"""
|
||||||
PAYMENT_STATE_CREATED = 'created'
|
PAYMENT_STATE_CREATED = 'created'
|
||||||
PAYMENT_STATE_PENDING = 'pending'
|
PAYMENT_STATE_PENDING = 'pending'
|
||||||
@@ -1562,9 +1559,6 @@ class OrderPayment(models.Model):
|
|||||||
null=True, blank=True, related_name='payments', on_delete=models.SET_NULL
|
null=True, blank=True, related_name='payments', on_delete=models.SET_NULL
|
||||||
)
|
)
|
||||||
migrated = models.BooleanField(default=False)
|
migrated = models.BooleanField(default=False)
|
||||||
process_initiated = models.BooleanField(
|
|
||||||
null=True # null = created before this field was introduced
|
|
||||||
)
|
|
||||||
|
|
||||||
objects = ScopedManager(organizer='order__event__organizer')
|
objects = ScopedManager(organizer='order__event__organizer')
|
||||||
|
|
||||||
@@ -2743,7 +2737,6 @@ class CartPosition(AbstractPosition):
|
|||||||
tax_rule=self.item.tax_rule,
|
tax_rule=self.item.tax_rule,
|
||||||
invoice_address=invoice_address,
|
invoice_address=invoice_address,
|
||||||
bundled_sum=sum([b.price_after_voucher for b in bundled_positions]),
|
bundled_sum=sum([b.price_after_voucher for b in bundled_positions]),
|
||||||
is_bundled=self.is_bundled,
|
|
||||||
)
|
)
|
||||||
if line_price.gross != self.line_price_gross or line_price.rate != self.tax_rate:
|
if line_price.gross != self.line_price_gross or line_price.rate != self.tax_rate:
|
||||||
self.line_price_gross = line_price.gross
|
self.line_price_gross = line_price.gross
|
||||||
|
|||||||
+66
-158
@@ -63,13 +63,14 @@ from pretix.base.models import (
|
|||||||
OrderRefund, Quota,
|
OrderRefund, Quota,
|
||||||
)
|
)
|
||||||
from pretix.base.reldate import RelativeDateField, RelativeDateWrapper
|
from pretix.base.reldate import RelativeDateField, RelativeDateWrapper
|
||||||
|
from pretix.base.services.cart import get_fees
|
||||||
from pretix.base.settings import SettingsSandbox
|
from pretix.base.settings import SettingsSandbox
|
||||||
from pretix.base.signals import register_payment_providers
|
from pretix.base.signals import register_payment_providers
|
||||||
from pretix.base.templatetags.money import money_filter
|
from pretix.base.templatetags.money import money_filter
|
||||||
from pretix.base.templatetags.rich_text import rich_text
|
from pretix.base.templatetags.rich_text import rich_text
|
||||||
from pretix.helpers.countries import CachedCountries
|
from pretix.helpers.countries import CachedCountries
|
||||||
from pretix.helpers.money import DecimalTextInput
|
from pretix.helpers.money import DecimalTextInput
|
||||||
from pretix.multidomain.urlreverse import build_absolute_uri
|
from pretix.multidomain.urlreverse import build_absolute_uri, eventreverse
|
||||||
from pretix.presale.views import get_cart, get_cart_total
|
from pretix.presale.views import get_cart, get_cart_total
|
||||||
from pretix.presale.views.cart import cart_session, get_or_create_cart_id
|
from pretix.presale.views.cart import cart_session, get_or_create_cart_id
|
||||||
|
|
||||||
@@ -137,48 +138,6 @@ class BasePaymentProvider:
|
|||||||
"""
|
"""
|
||||||
return self.settings.get('_enabled', as_type=bool)
|
return self.settings.get('_enabled', as_type=bool)
|
||||||
|
|
||||||
@property
|
|
||||||
def multi_use_supported(self) -> bool:
|
|
||||||
"""
|
|
||||||
Returns whether or whether not this payment provider supports being used multiple times in the same
|
|
||||||
checkout, or in addition to a different payment provider. This is usually only useful for payment providers
|
|
||||||
that represent gift cards, i.e. payment methods with an upper limit per payment instrument that can usually
|
|
||||||
be combined with other instruments.
|
|
||||||
|
|
||||||
If you set this property to ``True``, the behavior of how pretix interacts with your payment provider changes
|
|
||||||
and you will need to respect the following rules:
|
|
||||||
|
|
||||||
- ``payment_form_render`` must not depend on session state, it must always allow a user to add a new payment.
|
|
||||||
Editing a payment is not possible, but pretix will give users an option to delete it.
|
|
||||||
|
|
||||||
- Returning ``True`` from ``checkout_prepare`` is no longer enough. Instead, you must *also* call
|
|
||||||
``pretix.base.services.cart.add_payment_to_cart(request, provider, min_value, max_value, info_data)``
|
|
||||||
to add the payment to the session. You are still allowed to do a redirect from ``checkout_prepare`` and then
|
|
||||||
call this function upon return.
|
|
||||||
|
|
||||||
- Unlike in the general case, when ``checkout_prepare`` is called, the ``cart['total']`` parameter will _not yet_
|
|
||||||
include payment fees charged by your provider as we don't yet know the amount of the charge, so you need to
|
|
||||||
take care of that yourself when setting your maximum amount.
|
|
||||||
|
|
||||||
- ``payment_is_valid_session`` will not be called during checkout, don't rely on it. If you called
|
|
||||||
``add_payment_to_cart``, we'll trust the payment is okay and your next chance to change that will be
|
|
||||||
``execute_payment``.
|
|
||||||
|
|
||||||
The changed behavior currently only affects the behavior during initial checkout (i.e. ``checkout_prepare``),
|
|
||||||
for ``payment_prepare`` the regular behavior applies and you are expected to just modify the amount of the
|
|
||||||
``OrderPayment`` object if you need to.
|
|
||||||
"""
|
|
||||||
return False
|
|
||||||
|
|
||||||
@property
|
|
||||||
def execute_payment_needs_user(self) -> bool:
|
|
||||||
"""
|
|
||||||
Set this to ``True`` if your ``execute_payment`` function needs to be triggered by a user request, i.e. either
|
|
||||||
needs the ``request`` object or might require a browser redirect. If this is ``False``, you will not receive
|
|
||||||
a ``request`` and may not redirect since execute_payment might be called server-side.
|
|
||||||
"""
|
|
||||||
return True
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def test_mode_message(self) -> str:
|
def test_mode_message(self) -> str:
|
||||||
"""
|
"""
|
||||||
@@ -615,7 +574,7 @@ class BasePaymentProvider:
|
|||||||
ctx = {'request': request, 'form': form}
|
ctx = {'request': request, 'form': form}
|
||||||
return template.render(ctx)
|
return template.render(ctx)
|
||||||
|
|
||||||
def checkout_confirm_render(self, request, order: Order=None, info_data: dict=None) -> str:
|
def checkout_confirm_render(self, request, order: Order=None) -> str:
|
||||||
"""
|
"""
|
||||||
If the user has successfully filled in their payment data, they will be redirected
|
If the user has successfully filled in their payment data, they will be redirected
|
||||||
to a confirmation page which lists all details of their order for a final review.
|
to a confirmation page which lists all details of their order for a final review.
|
||||||
@@ -625,9 +584,7 @@ class BasePaymentProvider:
|
|||||||
In most cases, this should include a short summary of the user's input and
|
In most cases, this should include a short summary of the user's input and
|
||||||
a short explanation on how the payment process will continue.
|
a short explanation on how the payment process will continue.
|
||||||
|
|
||||||
:param request: The current HTTP request.
|
|
||||||
:param order: Only set when this is a change to a new payment method for an existing order.
|
:param order: Only set when this is a change to a new payment method for an existing order.
|
||||||
:param info_data: The ``info_data`` dictionary you set during ``add_payment_to_cart`` (only filled if ``multi_use_supported`` is set)
|
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError() # NOQA
|
raise NotImplementedError() # NOQA
|
||||||
|
|
||||||
@@ -661,10 +618,6 @@ class BasePaymentProvider:
|
|||||||
.. IMPORTANT:: If this is called, the user has not yet confirmed their order.
|
.. IMPORTANT:: If this is called, the user has not yet confirmed their order.
|
||||||
You may NOT do anything which actually moves money.
|
You may NOT do anything which actually moves money.
|
||||||
|
|
||||||
Note: The behavior of this method changes significantly when you set
|
|
||||||
``multi_use_supported``. Please refer to the ``multi_use_supported`` documentation
|
|
||||||
for more information.
|
|
||||||
|
|
||||||
:param cart: This dictionary contains at least the following keys:
|
:param cart: This dictionary contains at least the following keys:
|
||||||
|
|
||||||
positions:
|
positions:
|
||||||
@@ -704,9 +657,9 @@ class BasePaymentProvider:
|
|||||||
You will be passed an :py:class:`pretix.base.models.OrderPayment` object that contains
|
You will be passed an :py:class:`pretix.base.models.OrderPayment` object that contains
|
||||||
the amount of money that should be paid.
|
the amount of money that should be paid.
|
||||||
|
|
||||||
If you need any special behavior, you can return a string containing the URL the user will be redirected to.
|
If you need any special behavior, you can return a string
|
||||||
If you are done with your process you should return the user to the order's detail page. Redirection is not
|
containing the URL the user will be redirected to. If you are done with your process
|
||||||
allowed if you set ``execute_payment_needs_user`` to ``True``.
|
you should return the user to the order's detail page.
|
||||||
|
|
||||||
If the payment is completed, you should call ``payment.confirm()``. Please note that this might
|
If the payment is completed, you should call ``payment.confirm()``. Please note that this might
|
||||||
raise a ``Quota.QuotaExceededException`` if (and only if) the payment term of this order is over and
|
raise a ``Quota.QuotaExceededException`` if (and only if) the payment term of this order is over and
|
||||||
@@ -718,7 +671,7 @@ class BasePaymentProvider:
|
|||||||
|
|
||||||
On errors, you should raise a ``PaymentException``.
|
On errors, you should raise a ``PaymentException``.
|
||||||
|
|
||||||
:param request: A HTTP request, except if ``execute_payment_needs_user`` is ``False``
|
:param order: The order object
|
||||||
:param payment: An ``OrderPayment`` instance
|
:param payment: An ``OrderPayment`` instance
|
||||||
"""
|
"""
|
||||||
return None
|
return None
|
||||||
@@ -924,15 +877,6 @@ class BasePaymentProvider:
|
|||||||
"""
|
"""
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
def api_refund_details(self, refund: OrderRefund):
|
|
||||||
"""
|
|
||||||
Will be called to populate the ``details`` parameter of the refund in the REST API.
|
|
||||||
|
|
||||||
:param refund: The refund in question.
|
|
||||||
:return: A serializable dictionary
|
|
||||||
"""
|
|
||||||
return {}
|
|
||||||
|
|
||||||
def matching_id(self, payment: OrderPayment):
|
def matching_id(self, payment: OrderPayment):
|
||||||
"""
|
"""
|
||||||
Will be called to get an ID for matching this payment when comparing pretix records with records of an external
|
Will be called to get an ID for matching this payment when comparing pretix records with records of an external
|
||||||
@@ -952,7 +896,6 @@ class FreeOrderProvider(BasePaymentProvider):
|
|||||||
is_implicit = True
|
is_implicit = True
|
||||||
is_enabled = True
|
is_enabled = True
|
||||||
identifier = "free"
|
identifier = "free"
|
||||||
execute_payment_needs_user = False
|
|
||||||
|
|
||||||
def checkout_confirm_render(self, request: HttpRequest) -> str:
|
def checkout_confirm_render(self, request: HttpRequest) -> str:
|
||||||
return _("No payment is required as this order only includes products which are free of charge.")
|
return _("No payment is required as this order only includes products which are free of charge.")
|
||||||
@@ -1016,9 +959,6 @@ class BoxOfficeProvider(BasePaymentProvider):
|
|||||||
"payment_data": payment.info_data.get('payment_data', {}),
|
"payment_data": payment.info_data.get('payment_data', {}),
|
||||||
}
|
}
|
||||||
|
|
||||||
def api_refund_details(self, refund: OrderRefund):
|
|
||||||
return self.api_payment_details(refund)
|
|
||||||
|
|
||||||
def payment_control_render(self, request, payment) -> str:
|
def payment_control_render(self, request, payment) -> str:
|
||||||
if not payment.info:
|
if not payment.info:
|
||||||
return
|
return
|
||||||
@@ -1039,7 +979,6 @@ class BoxOfficeProvider(BasePaymentProvider):
|
|||||||
class ManualPayment(BasePaymentProvider):
|
class ManualPayment(BasePaymentProvider):
|
||||||
identifier = 'manual'
|
identifier = 'manual'
|
||||||
verbose_name = _('Manual payment')
|
verbose_name = _('Manual payment')
|
||||||
execute_payment_needs_user = False
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def test_mode_message(self):
|
def test_mode_message(self):
|
||||||
@@ -1180,42 +1119,18 @@ class OffsettingProvider(BasePaymentProvider):
|
|||||||
|
|
||||||
class GiftCardPayment(BasePaymentProvider):
|
class GiftCardPayment(BasePaymentProvider):
|
||||||
identifier = "giftcard"
|
identifier = "giftcard"
|
||||||
priority = 10
|
|
||||||
multi_use_supported = True
|
|
||||||
execute_payment_needs_user = False
|
|
||||||
verbose_name = _("Gift card")
|
verbose_name = _("Gift card")
|
||||||
|
priority = 10
|
||||||
@property
|
|
||||||
def public_name(self) -> str:
|
|
||||||
return str(self.settings.get("public_name", as_type=LazyI18nString)) or _(
|
|
||||||
"Gift card"
|
|
||||||
)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def settings_form_fields(self):
|
def settings_form_fields(self):
|
||||||
fields = [
|
f = super().settings_form_fields
|
||||||
(
|
|
||||||
"public_name",
|
|
||||||
I18nFormField(
|
|
||||||
label=_("Payment method name"), widget=I18nTextInput, required=False
|
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"public_description",
|
|
||||||
I18nFormField(
|
|
||||||
label=_("Payment method description"), widget=I18nTextarea, required=False
|
|
||||||
),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|
|
||||||
f = OrderedDict(fields + list(super().settings_form_fields.items()))
|
|
||||||
del f['_fee_abs']
|
del f['_fee_abs']
|
||||||
del f['_fee_percent']
|
del f['_fee_percent']
|
||||||
del f['_fee_reverse_calc']
|
del f['_fee_reverse_calc']
|
||||||
del f['_total_min']
|
del f['_total_min']
|
||||||
del f['_total_max']
|
del f['_total_max']
|
||||||
del f['_invoice_text']
|
del f['_invoice_text']
|
||||||
f.move_to_end("_enabled", last=False)
|
|
||||||
return f
|
return f
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -1229,14 +1144,10 @@ class GiftCardPayment(BasePaymentProvider):
|
|||||||
return super().order_change_allowed(order) and self.event.organizer.has_gift_cards
|
return super().order_change_allowed(order) and self.event.organizer.has_gift_cards
|
||||||
|
|
||||||
def payment_form_render(self, request: HttpRequest, total: Decimal) -> str:
|
def payment_form_render(self, request: HttpRequest, total: Decimal) -> str:
|
||||||
return get_template('pretixcontrol/giftcards/checkout.html').render({
|
return get_template('pretixcontrol/giftcards/checkout.html').render({})
|
||||||
'request': request,
|
|
||||||
})
|
|
||||||
|
|
||||||
def checkout_confirm_render(self, request, order=None, info_data=None) -> str:
|
def checkout_confirm_render(self, request) -> str:
|
||||||
return get_template('pretixcontrol/giftcards/checkout_confirm.html').render({
|
return get_template('pretixcontrol/giftcards/checkout_confirm.html').render({})
|
||||||
'info_data': info_data,
|
|
||||||
})
|
|
||||||
|
|
||||||
def refund_control_render(self, request, refund) -> str:
|
def refund_control_render(self, request, refund) -> str:
|
||||||
from .models import GiftCard
|
from .models import GiftCard
|
||||||
@@ -1280,9 +1191,6 @@ class GiftCardPayment(BasePaymentProvider):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def api_refund_details(self, refund: OrderRefund):
|
|
||||||
return self.api_payment_details(refund)
|
|
||||||
|
|
||||||
def payment_partial_refund_supported(self, payment: OrderPayment) -> bool:
|
def payment_partial_refund_supported(self, payment: OrderPayment) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -1290,8 +1198,6 @@ class GiftCardPayment(BasePaymentProvider):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def checkout_prepare(self, request: HttpRequest, cart: Dict[str, Any]) -> Union[bool, str, None]:
|
def checkout_prepare(self, request: HttpRequest, cart: Dict[str, Any]) -> Union[bool, str, None]:
|
||||||
from pretix.base.services.cart import add_payment_to_cart
|
|
||||||
|
|
||||||
for p in get_cart(request):
|
for p in get_cart(request):
|
||||||
if p.item.issue_giftcard:
|
if p.item.issue_giftcard:
|
||||||
messages.error(request, _("You cannot pay with gift cards when buying a gift card."))
|
messages.error(request, _("You cannot pay with gift cards when buying a gift card."))
|
||||||
@@ -1300,7 +1206,7 @@ class GiftCardPayment(BasePaymentProvider):
|
|||||||
cs = cart_session(request)
|
cs = cart_session(request)
|
||||||
try:
|
try:
|
||||||
gc = self.event.organizer.accepted_gift_cards.get(
|
gc = self.event.organizer.accepted_gift_cards.get(
|
||||||
secret=request.POST.get("giftcard").strip()
|
secret=request.POST.get("giftcard")
|
||||||
)
|
)
|
||||||
if gc.currency != self.event.currency:
|
if gc.currency != self.event.currency:
|
||||||
messages.error(request, _("This gift card does not support this currency."))
|
messages.error(request, _("This gift card does not support this currency."))
|
||||||
@@ -1317,22 +1223,34 @@ class GiftCardPayment(BasePaymentProvider):
|
|||||||
if gc.value <= Decimal("0.00"):
|
if gc.value <= Decimal("0.00"):
|
||||||
messages.error(request, _("All credit on this gift card has been used."))
|
messages.error(request, _("All credit on this gift card has been used."))
|
||||||
return
|
return
|
||||||
|
if 'gift_cards' not in cs:
|
||||||
|
cs['gift_cards'] = []
|
||||||
|
elif gc.pk in cs['gift_cards']:
|
||||||
|
messages.error(request, _("This gift card is already used for your payment."))
|
||||||
|
return
|
||||||
|
cs['gift_cards'] = cs['gift_cards'] + [gc.pk]
|
||||||
|
|
||||||
for p in cs.get('payments', []):
|
total = sum(p.total for p in cart['positions'])
|
||||||
if p['provider'] == self.identifier and p['info_data']['gift_card'] == gc.pk:
|
# Recompute fees. Some plugins, e.g. pretix-servicefees, change their fee schedule if a gift card is
|
||||||
messages.error(request, _("This gift card is already used for your payment."))
|
# applied.
|
||||||
return
|
fees = get_fees(
|
||||||
|
self.event, request, total, cart['invoice_address'], cs.get('payment'),
|
||||||
add_payment_to_cart(
|
cart['raw']
|
||||||
request,
|
|
||||||
self,
|
|
||||||
max_value=gc.value,
|
|
||||||
info_data={
|
|
||||||
'gift_card': gc.pk,
|
|
||||||
'gift_card_secret': gc.secret,
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
return True
|
total += sum([f.value for f in fees])
|
||||||
|
remainder = total
|
||||||
|
if remainder > Decimal('0.00'):
|
||||||
|
del cs['payment']
|
||||||
|
messages.success(request, _("Your gift card has been applied, but {} still need to be paid. Please select a payment method.").format(
|
||||||
|
money_filter(remainder, self.event.currency)
|
||||||
|
))
|
||||||
|
else:
|
||||||
|
messages.success(request, _("Your gift card has been applied."))
|
||||||
|
|
||||||
|
kwargs = {'step': 'payment'}
|
||||||
|
if request.resolver_match and 'cart_namespace' in request.resolver_match.kwargs:
|
||||||
|
kwargs['cart_namespace'] = request.resolver_match.kwargs['cart_namespace']
|
||||||
|
return eventreverse(self.event, 'presale:event.checkout', kwargs=kwargs)
|
||||||
except GiftCard.DoesNotExist:
|
except GiftCard.DoesNotExist:
|
||||||
if self.event.vouchers.filter(code__iexact=request.POST.get("giftcard")).exists():
|
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 "
|
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 "
|
||||||
@@ -1350,7 +1268,7 @@ class GiftCardPayment(BasePaymentProvider):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
gc = self.event.organizer.accepted_gift_cards.get(
|
gc = self.event.organizer.accepted_gift_cards.get(
|
||||||
secret=request.POST.get("giftcard").strip()
|
secret=request.POST.get("giftcard")
|
||||||
)
|
)
|
||||||
if gc.currency != self.event.currency:
|
if gc.currency != self.event.currency:
|
||||||
messages.error(request, _("This gift card does not support this currency."))
|
messages.error(request, _("This gift card does not support this currency."))
|
||||||
@@ -1369,7 +1287,6 @@ class GiftCardPayment(BasePaymentProvider):
|
|||||||
return
|
return
|
||||||
payment.info_data = {
|
payment.info_data = {
|
||||||
'gift_card': gc.pk,
|
'gift_card': gc.pk,
|
||||||
'gift_card_secret': gc.secret,
|
|
||||||
'retry': True
|
'retry': True
|
||||||
}
|
}
|
||||||
payment.amount = min(payment.amount, gc.value)
|
payment.amount = min(payment.amount, gc.value)
|
||||||
@@ -1377,7 +1294,7 @@ class GiftCardPayment(BasePaymentProvider):
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
except GiftCard.DoesNotExist:
|
except GiftCard.DoesNotExist:
|
||||||
if self.event.vouchers.filter(code__iexact=request.POST.get("giftcard").strip()).exists():
|
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 "
|
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."))
|
"the product selection."))
|
||||||
else:
|
else:
|
||||||
@@ -1386,45 +1303,36 @@ class GiftCardPayment(BasePaymentProvider):
|
|||||||
messages.error(request, _("This gift card can not be redeemed since its code is not unique. Please contact the organizer of this event."))
|
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) -> str:
|
def execute_payment(self, request: HttpRequest, payment: OrderPayment) -> str:
|
||||||
for p in payment.order.positions.all():
|
# This method will only be called when retrying payments, e.g. after a payment_prepare call. It is not called
|
||||||
|
# during the order creation phase because this payment provider is a special case.
|
||||||
|
for p in payment.order.positions.all(): # noqa - just a safeguard
|
||||||
if p.item.issue_giftcard:
|
if p.item.issue_giftcard:
|
||||||
raise PaymentException(_("You cannot pay with gift cards when buying a gift card."))
|
raise PaymentException(_("You cannot pay with gift cards when buying a gift card."))
|
||||||
|
|
||||||
gcpk = payment.info_data.get('gift_card')
|
gcpk = payment.info_data.get('gift_card')
|
||||||
if not gcpk:
|
if not gcpk or not payment.info_data.get('retry'):
|
||||||
raise PaymentException("Invalid state, should never occur.")
|
raise PaymentException("Invalid state, should never occur.")
|
||||||
try:
|
with transaction.atomic():
|
||||||
with transaction.atomic():
|
gc = GiftCard.objects.select_for_update().get(pk=gcpk)
|
||||||
try:
|
if gc.currency != self.event.currency: # noqa - just a safeguard
|
||||||
gc = GiftCard.objects.select_for_update().get(pk=gcpk)
|
raise PaymentException(_("This gift card does not support this currency."))
|
||||||
except GiftCard.DoesNotExist:
|
if not gc.accepted_by(self.event.organizer): # noqa - just a safeguard
|
||||||
raise PaymentException(_("This gift card does not support this currency."))
|
raise PaymentException(_("This gift card is not accepted by this event organizer."))
|
||||||
if gc.currency != self.event.currency: # noqa - just a safeguard
|
if payment.amount > gc.value: # noqa - just a safeguard
|
||||||
raise PaymentException(_("This gift card does not support this currency."))
|
raise PaymentException(_("This gift card was used in the meantime. Please try again."))
|
||||||
if not gc.accepted_by(self.event.organizer):
|
if gc.expires and gc.expires < now(): # noqa - just a safeguard
|
||||||
raise PaymentException(_("This gift card is not accepted by this event organizer."))
|
messages.error(request, _("This gift card is no longer valid."))
|
||||||
if payment.amount > gc.value:
|
return
|
||||||
raise PaymentException(_("This gift card was used in the meantime. Please try again."))
|
trans = gc.transactions.create(
|
||||||
if gc.testmode and not payment.order.testmode:
|
value=-1 * payment.amount,
|
||||||
raise PaymentException(_("This gift card can only be used in test mode."))
|
order=payment.order,
|
||||||
if not gc.testmode and payment.order.testmode:
|
payment=payment
|
||||||
raise PaymentException(_("Only test gift cards can be used in test mode."))
|
)
|
||||||
if gc.expires and gc.expires < now():
|
payment.info_data = {
|
||||||
raise PaymentException(_("This gift card is no longer valid."))
|
'gift_card': gc.pk,
|
||||||
|
'transaction_id': trans.pk,
|
||||||
trans = gc.transactions.create(
|
}
|
||||||
value=-1 * payment.amount,
|
payment.confirm()
|
||||||
order=payment.order,
|
|
||||||
payment=payment
|
|
||||||
)
|
|
||||||
payment.info_data = {
|
|
||||||
'gift_card': gc.pk,
|
|
||||||
'transaction_id': trans.pk,
|
|
||||||
}
|
|
||||||
payment.confirm()
|
|
||||||
except PaymentException as e:
|
|
||||||
payment.fail(info={'error': str(e)})
|
|
||||||
raise e
|
|
||||||
|
|
||||||
def payment_is_valid_session(self, request: HttpRequest) -> bool:
|
def payment_is_valid_session(self, request: HttpRequest) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
# Unless required by applicable law or agreed to in writing, software distributed under the Apache License 2.0 is
|
# Unless required by applicable law or agreed to in writing, software distributed under the Apache License 2.0 is
|
||||||
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations under the License.
|
# License for the specific language governing permissions and limitations under the License.
|
||||||
import uuid
|
|
||||||
from collections import Counter, defaultdict, namedtuple
|
from collections import Counter, defaultdict, namedtuple
|
||||||
from datetime import datetime, time, timedelta
|
from datetime import datetime, time, timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
@@ -453,15 +453,12 @@ class CartManager:
|
|||||||
if cp.is_bundled:
|
if cp.is_bundled:
|
||||||
bundle = cp.addon_to.item.bundles.filter(bundled_item=cp.item, bundled_variation=cp.variation).first()
|
bundle = cp.addon_to.item.bundles.filter(bundled_item=cp.item, bundled_variation=cp.variation).first()
|
||||||
if bundle:
|
if bundle:
|
||||||
listed_price = bundle.designated_price or Decimal('0.00')
|
listed_price = bundle.designated_price or 0
|
||||||
else:
|
else:
|
||||||
listed_price = cp.price
|
listed_price = cp.price
|
||||||
price_after_voucher = listed_price
|
price_after_voucher = listed_price
|
||||||
else:
|
else:
|
||||||
if cp.addon_to_id and is_included_for_free(cp.item, cp.addon_to):
|
listed_price = get_listed_price(cp.item, cp.variation, cp.subevent)
|
||||||
listed_price = Decimal('0.00')
|
|
||||||
else:
|
|
||||||
listed_price = get_listed_price(cp.item, cp.variation, cp.subevent)
|
|
||||||
if cp.voucher:
|
if cp.voucher:
|
||||||
price_after_voucher = cp.voucher.calculate_price(listed_price)
|
price_after_voucher = cp.voucher.calculate_price(listed_price)
|
||||||
else:
|
else:
|
||||||
@@ -1265,71 +1262,44 @@ class CartManager:
|
|||||||
raise CartError(err)
|
raise CartError(err)
|
||||||
|
|
||||||
|
|
||||||
def add_payment_to_cart(request, provider, min_value: Decimal=None, max_value: Decimal=None, info_data: dict=None):
|
def get_fees(event, request, total, invoice_address, provider, positions):
|
||||||
"""
|
|
||||||
:param request: The current HTTP request context.
|
|
||||||
:param provider: The instance of your payment provider.
|
|
||||||
:param min_value: The minimum value this payment instrument supports, or ``None`` for unlimited.
|
|
||||||
:param max_value: The maximum value this payment instrument supports, or ``None`` for unlimited. Highly discouraged
|
|
||||||
to use for payment providers which charge a payment fee, as this can be very user-unfriendly if
|
|
||||||
users need a second payment method just for the payment fee of the first method.
|
|
||||||
:param info_data: A dictionary of information that will be passed through to the ``OrderPayment.info_data`` attribute.
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
from pretix.presale.views.cart import cart_session
|
from pretix.presale.views.cart import cart_session
|
||||||
|
|
||||||
cs = cart_session(request)
|
|
||||||
cs.setdefault('payments', [])
|
|
||||||
|
|
||||||
cs['payments'].append({
|
|
||||||
'id': str(uuid.uuid4()),
|
|
||||||
'provider': provider.identifier,
|
|
||||||
'multi_use_supported': provider.multi_use_supported,
|
|
||||||
'min_value': str(min_value) if min_value is not None else None,
|
|
||||||
'max_value': str(max_value) if max_value is not None else None,
|
|
||||||
'info_data': info_data or {},
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
def get_fees(event, request, total, invoice_address, payments, positions):
|
|
||||||
if payments and not isinstance(payments, list):
|
|
||||||
raise TypeError("payments must now be a list")
|
|
||||||
|
|
||||||
fees = []
|
fees = []
|
||||||
for recv, resp in fee_calculation_for_cart.send(sender=event, request=request, invoice_address=invoice_address,
|
for recv, resp in fee_calculation_for_cart.send(sender=event, request=request, invoice_address=invoice_address,
|
||||||
total=total, positions=positions, payment_requests=payments):
|
total=total, positions=positions):
|
||||||
if resp:
|
if resp:
|
||||||
fees += resp
|
fees += resp
|
||||||
|
|
||||||
total = total + sum(f.value for f in fees)
|
total = total + sum(f.value for f in fees)
|
||||||
|
|
||||||
if total != 0 and payments:
|
cs = cart_session(request)
|
||||||
total_remaining = total
|
if cs.get('gift_cards'):
|
||||||
for p in payments:
|
gcs = cs['gift_cards']
|
||||||
# This algorithm of treating min/max values and fees needs to stay in sync between the following
|
gc_qs = event.organizer.accepted_gift_cards.filter(pk__in=cs.get('gift_cards'), currency=event.currency)
|
||||||
# places in the code base:
|
for gc in gc_qs:
|
||||||
# - pretix.base.services.cart.get_fees
|
if gc.testmode != event.testmode:
|
||||||
# - pretix.base.services.orders._get_fees
|
gcs.remove(gc.pk)
|
||||||
# - pretix.presale.views.CartMixin.current_selected_payments
|
|
||||||
if p.get('min_value') and total_remaining < Decimal(p['min_value']):
|
|
||||||
continue
|
continue
|
||||||
|
fval = Decimal(gc.value) # TODO: don't require an extra query
|
||||||
|
fval = min(fval, total)
|
||||||
|
if fval > 0:
|
||||||
|
total -= fval
|
||||||
|
fees.append(OrderFee(
|
||||||
|
fee_type=OrderFee.FEE_TYPE_GIFTCARD,
|
||||||
|
internal_type='giftcard',
|
||||||
|
description=gc.secret,
|
||||||
|
value=-1 * fval,
|
||||||
|
tax_rate=Decimal('0.00'),
|
||||||
|
tax_value=Decimal('0.00'),
|
||||||
|
tax_rule=TaxRule.zero()
|
||||||
|
))
|
||||||
|
cs['gift_cards'] = gcs
|
||||||
|
|
||||||
to_pay = total_remaining
|
if provider and total != 0:
|
||||||
if p.get('max_value') and to_pay > Decimal(p['max_value']):
|
provider = event.get_payment_providers().get(provider)
|
||||||
to_pay = min(to_pay, Decimal(p['max_value']))
|
if provider:
|
||||||
|
payment_fee = provider.calculate_fee(total)
|
||||||
pprov = event.get_payment_providers(cached=True).get(p['provider'])
|
|
||||||
if not pprov:
|
|
||||||
continue
|
|
||||||
|
|
||||||
payment_fee = pprov.calculate_fee(to_pay)
|
|
||||||
total_remaining += payment_fee
|
|
||||||
to_pay += payment_fee
|
|
||||||
|
|
||||||
if p.get('max_value') and to_pay > Decimal(p['max_value']):
|
|
||||||
to_pay = min(to_pay, Decimal(p['max_value']))
|
|
||||||
|
|
||||||
total_remaining -= to_pay
|
|
||||||
|
|
||||||
if payment_fee:
|
if payment_fee:
|
||||||
payment_fee_tax_rule = event.settings.tax_rate_default or TaxRule.zero()
|
payment_fee_tax_rule = event.settings.tax_rate_default or TaxRule.zero()
|
||||||
|
|||||||
@@ -452,19 +452,17 @@ def build_preview_invoice_pdf(event):
|
|||||||
|
|
||||||
if event.tax_rules.exists():
|
if event.tax_rules.exists():
|
||||||
for i, tr in enumerate(event.tax_rules.all()):
|
for i, tr in enumerate(event.tax_rules.all()):
|
||||||
for j in range(150):
|
tax = tr.tax(Decimal('100.00'), base_price_is='gross')
|
||||||
tax = tr.tax(Decimal('100.00'), base_price_is='gross')
|
|
||||||
InvoiceLine.objects.create(
|
|
||||||
invoice=invoice, description=_("Sample product {}").format(i + 1),
|
|
||||||
gross_value=tax.gross, tax_value=tax.tax,
|
|
||||||
tax_rate=tax.rate
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
for i in range(150):
|
|
||||||
InvoiceLine.objects.create(
|
InvoiceLine.objects.create(
|
||||||
invoice=invoice, description=_("Sample product A"),
|
invoice=invoice, description=_("Sample product {}").format(i + 1),
|
||||||
gross_value=100, tax_value=0, tax_rate=0
|
gross_value=tax.gross, tax_value=tax.tax,
|
||||||
|
tax_rate=tax.rate
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
InvoiceLine.objects.create(
|
||||||
|
invoice=invoice, description=_("Sample product A"),
|
||||||
|
gross_value=100, tax_value=0, tax_rate=0
|
||||||
|
)
|
||||||
|
|
||||||
return event.invoice_renderer.generate(invoice)
|
return event.invoice_renderer.generate(invoice)
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ from pretix.base.models.orders import (
|
|||||||
)
|
)
|
||||||
from pretix.base.models.organizer import TeamAPIToken
|
from pretix.base.models.organizer import TeamAPIToken
|
||||||
from pretix.base.models.tax import TAXED_ZERO, TaxedPrice, TaxRule
|
from pretix.base.models.tax import TAXED_ZERO, TaxedPrice, TaxRule
|
||||||
from pretix.base.payment import PaymentException
|
from pretix.base.payment import BasePaymentProvider, PaymentException
|
||||||
from pretix.base.reldate import RelativeDateWrapper
|
from pretix.base.reldate import RelativeDateWrapper
|
||||||
from pretix.base.secrets import assign_ticket_secret
|
from pretix.base.secrets import assign_ticket_secret
|
||||||
from pretix.base.services import tickets
|
from pretix.base.services import tickets
|
||||||
@@ -793,75 +793,68 @@ def _check_positions(event: Event, now_dt: datetime, positions: List[CartPositio
|
|||||||
raise OrderError(err, errargs)
|
raise OrderError(err, errargs)
|
||||||
|
|
||||||
|
|
||||||
def _get_fees(positions: List[CartPosition], payment_requests: List[dict], address: InvoiceAddress,
|
def _get_fees(positions: List[CartPosition], payment_provider: BasePaymentProvider, address: InvoiceAddress,
|
||||||
meta_info: dict, event: Event, require_approval=False):
|
meta_info: dict, event: Event, gift_cards: List[GiftCard]):
|
||||||
fees = []
|
fees = []
|
||||||
total = sum([c.price for c in positions])
|
total = sum([c.price for c in positions])
|
||||||
|
|
||||||
gift_cards = [] # for backwards compatibility
|
for recv, resp in order_fee_calculation.send(sender=event, invoice_address=address, total=total,
|
||||||
for p in payment_requests:
|
|
||||||
if p['provider'] == 'giftcard':
|
|
||||||
gift_cards.append(GiftCard.objects.get(pk=p['info_data']['gift_card']))
|
|
||||||
|
|
||||||
for recv, resp in order_fee_calculation.send(sender=event, invoice_address=address, total=total, payment_requests=payment_requests,
|
|
||||||
meta_info=meta_info, positions=positions, gift_cards=gift_cards):
|
meta_info=meta_info, positions=positions, gift_cards=gift_cards):
|
||||||
if resp:
|
if resp:
|
||||||
fees += resp
|
fees += resp
|
||||||
total += sum(f.value for f in fees)
|
total += sum(f.value for f in fees)
|
||||||
|
|
||||||
total_remaining = total
|
gift_card_values = {}
|
||||||
for p in payment_requests:
|
for gc in gift_cards:
|
||||||
# This algorithm of treating min/max values and fees needs to stay in sync between the following
|
fval = Decimal(gc.value) # TODO: don't require an extra query
|
||||||
# places in the code base:
|
fval = min(fval, total)
|
||||||
# - pretix.base.services.cart.get_fees
|
if fval > 0:
|
||||||
# - pretix.base.services.orders._get_fees
|
total -= fval
|
||||||
# - pretix.presale.views.CartMixin.current_selected_payments
|
gift_card_values[gc] = fval
|
||||||
if p.get('min_value') and total_remaining < Decimal(p['min_value']):
|
|
||||||
p['payment_amount'] = Decimal('0.00')
|
|
||||||
continue
|
|
||||||
|
|
||||||
to_pay = total_remaining
|
if payment_provider:
|
||||||
if p.get('max_value') and to_pay > Decimal(p['max_value']):
|
payment_fee = payment_provider.calculate_fee(total)
|
||||||
to_pay = min(to_pay, Decimal(p['max_value']))
|
else:
|
||||||
|
payment_fee = 0
|
||||||
|
pf = None
|
||||||
|
if payment_fee:
|
||||||
|
pf = OrderFee(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=payment_fee,
|
||||||
|
internal_type=payment_provider.identifier)
|
||||||
|
fees.append(pf)
|
||||||
|
|
||||||
payment_fee = p['pprov'].calculate_fee(to_pay)
|
return fees, pf, gift_card_values
|
||||||
total_remaining += payment_fee
|
|
||||||
to_pay += payment_fee
|
|
||||||
|
|
||||||
if p.get('max_value') and to_pay > Decimal(p['max_value']):
|
|
||||||
to_pay = min(to_pay, Decimal(p['max_value']))
|
|
||||||
|
|
||||||
total_remaining -= to_pay
|
|
||||||
|
|
||||||
p['payment_amount'] = to_pay
|
|
||||||
if payment_fee:
|
|
||||||
pf = OrderFee(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=payment_fee,
|
|
||||||
internal_type=p['pprov'].identifier)
|
|
||||||
fees.append(pf)
|
|
||||||
p['fee'] = pf
|
|
||||||
|
|
||||||
if total_remaining != Decimal('0.00') and not require_approval:
|
|
||||||
raise OrderError(_("The selected payment methods do not cover the total balance."))
|
|
||||||
|
|
||||||
return fees
|
|
||||||
|
|
||||||
|
|
||||||
def _create_order(event: Event, email: str, positions: List[CartPosition], now_dt: datetime,
|
def _create_order(event: Event, email: str, positions: List[CartPosition], now_dt: datetime,
|
||||||
payment_requests: List[dict], locale: str=None, address: InvoiceAddress=None,
|
payment_provider: BasePaymentProvider, locale: str=None, address: InvoiceAddress=None,
|
||||||
meta_info: dict=None, sales_channel: str='web', shown_total=None,
|
meta_info: dict=None, sales_channel: str='web', gift_cards: list=None, shown_total=None,
|
||||||
customer=None):
|
customer=None):
|
||||||
payments = []
|
p = None
|
||||||
sales_channel = get_all_sales_channels()[sales_channel]
|
sales_channel = get_all_sales_channels()[sales_channel]
|
||||||
|
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
|
checked_gift_cards = []
|
||||||
|
if gift_cards:
|
||||||
|
gc_qs = GiftCard.objects.select_for_update().filter(pk__in=gift_cards)
|
||||||
|
for gc in gc_qs:
|
||||||
|
if gc.currency != event.currency:
|
||||||
|
raise OrderError(_("This gift card does not support this currency."))
|
||||||
|
if gc.testmode and not event.testmode:
|
||||||
|
raise OrderError(_("This gift card can only be used in test mode."))
|
||||||
|
if not gc.testmode and event.testmode:
|
||||||
|
raise OrderError(_("Only test gift cards can be used in test mode."))
|
||||||
|
if not gc.accepted_by(event.organizer):
|
||||||
|
raise OrderError(_("This gift card is not accepted by this event organizer."))
|
||||||
|
checked_gift_cards.append(gc)
|
||||||
|
if checked_gift_cards and any(c.item.issue_giftcard for c in positions):
|
||||||
|
raise OrderError(_("You cannot pay with gift cards when buying a gift card."))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
validate_memberships_in_order(customer, positions, event, lock=True, testmode=event.testmode)
|
validate_memberships_in_order(customer, positions, event, lock=True, testmode=event.testmode)
|
||||||
except ValidationError as e:
|
except ValidationError as e:
|
||||||
raise OrderError(e.message)
|
raise OrderError(e.message)
|
||||||
|
|
||||||
require_approval = any(p.requires_approval(invoice_address=address) for p in positions)
|
fees, pf, gift_card_values = _get_fees(positions, payment_provider, address, meta_info, event, checked_gift_cards)
|
||||||
fees = _get_fees(positions, payment_requests, address, meta_info, event, require_approval=require_approval)
|
|
||||||
total = pending_sum = sum([c.price for c in positions]) + sum([c.value for c in fees])
|
total = pending_sum = sum([c.price for c in positions]) + sum([c.value for c in fees])
|
||||||
|
|
||||||
order = Order(
|
order = Order(
|
||||||
@@ -874,7 +867,7 @@ def _create_order(event: Event, email: str, positions: List[CartPosition], now_d
|
|||||||
total=total,
|
total=total,
|
||||||
testmode=True if sales_channel.testmode_supported and event.testmode else False,
|
testmode=True if sales_channel.testmode_supported and event.testmode else False,
|
||||||
meta_info=json.dumps(meta_info or {}),
|
meta_info=json.dumps(meta_info or {}),
|
||||||
require_approval=require_approval,
|
require_approval=any(p.requires_approval(invoice_address=address) for p in positions),
|
||||||
sales_channel=sales_channel.identifier,
|
sales_channel=sales_channel.identifier,
|
||||||
customer=customer,
|
customer=customer,
|
||||||
)
|
)
|
||||||
@@ -898,11 +891,28 @@ def _create_order(event: Event, email: str, positions: List[CartPosition], now_d
|
|||||||
fee.tax_rule = None # TODO: deprecate
|
fee.tax_rule = None # TODO: deprecate
|
||||||
fee.save()
|
fee.save()
|
||||||
|
|
||||||
|
for gc, val in gift_card_values.items():
|
||||||
|
p = order.payments.create(
|
||||||
|
state=OrderPayment.PAYMENT_STATE_CONFIRMED,
|
||||||
|
provider='giftcard',
|
||||||
|
amount=val,
|
||||||
|
fee=pf
|
||||||
|
)
|
||||||
|
trans = gc.transactions.create(
|
||||||
|
value=-1 * val,
|
||||||
|
order=order,
|
||||||
|
payment=p
|
||||||
|
)
|
||||||
|
p.info_data = {
|
||||||
|
'gift_card': gc.pk,
|
||||||
|
'transaction_id': trans.pk,
|
||||||
|
}
|
||||||
|
p.save()
|
||||||
|
pending_sum -= val
|
||||||
|
|
||||||
# Safety check: Is the amount we're now going to charge the same amount the user has been shown when they
|
# Safety check: Is the amount we're now going to charge the same amount the user has been shown when they
|
||||||
# pressed "Confirm purchase"? If not, we should better warn the user and show the confirmation page again.
|
# pressed "Confirm purchase"? If not, we should better warn the user and show the confirmation page again.
|
||||||
# We used to have a *known* case where this happened is if a gift card is used in two concurrent sessions,
|
# The only *known* case where this happens is if a gift card is used in two concurrent sessions.
|
||||||
# but this is now a payment error instead. So currently this code branch is usually only triggered by bugs
|
|
||||||
# in other places (e.g. tax calculation).
|
|
||||||
if shown_total is not None:
|
if shown_total is not None:
|
||||||
if Decimal(shown_total) != pending_sum:
|
if Decimal(shown_total) != pending_sum:
|
||||||
raise OrderError(
|
raise OrderError(
|
||||||
@@ -911,17 +921,13 @@ def _create_order(event: Event, email: str, positions: List[CartPosition], now_d
|
|||||||
'check the prices below and try again.')
|
'check the prices below and try again.')
|
||||||
)
|
)
|
||||||
|
|
||||||
if payment_requests and not order.require_approval:
|
if payment_provider and not order.require_approval:
|
||||||
for p in payment_requests:
|
p = order.payments.create(
|
||||||
if not p.get('multi_use_supported') or p['payment_amount'] > Decimal('0.00'):
|
state=OrderPayment.PAYMENT_STATE_CREATED,
|
||||||
payments.append(order.payments.create(
|
provider=payment_provider.identifier,
|
||||||
state=OrderPayment.PAYMENT_STATE_CREATED,
|
amount=pending_sum,
|
||||||
provider=p['provider'],
|
fee=pf
|
||||||
amount=p['payment_amount'],
|
)
|
||||||
fee=p.get('fee'),
|
|
||||||
info=json.dumps(p['info_data']),
|
|
||||||
process_initiated=False,
|
|
||||||
))
|
|
||||||
|
|
||||||
orderpositions = OrderPosition.transform_cart_positions(positions, order)
|
orderpositions = OrderPosition.transform_cart_positions(positions, order)
|
||||||
order.create_transactions(positions=orderpositions, fees=fees, is_new=True)
|
order.create_transactions(positions=orderpositions, fees=fees, is_new=True)
|
||||||
@@ -933,12 +939,12 @@ def _create_order(event: Event, email: str, positions: List[CartPosition], now_d
|
|||||||
order.log_action('pretix.event.order.consent', data={'msg': msg})
|
order.log_action('pretix.event.order.consent', data={'msg': msg})
|
||||||
|
|
||||||
order_placed.send(event, order=order)
|
order_placed.send(event, order=order)
|
||||||
return order, payments
|
return order, p
|
||||||
|
|
||||||
|
|
||||||
def _order_placed_email(event: Event, order: Order, email_template, subject_template,
|
def _order_placed_email(event: Event, order: Order, pprov: BasePaymentProvider, email_template, subject_template,
|
||||||
log_entry: str, invoice, payments: List[OrderPayment], is_free=False):
|
log_entry: str, invoice, payment: OrderPayment, is_free=False):
|
||||||
email_context = get_email_context(event=event, order=order, payments=payments)
|
email_context = get_email_context(event=event, order=order, payment=payment if pprov else None)
|
||||||
try:
|
try:
|
||||||
order.send_mail(
|
order.send_mail(
|
||||||
subject_template, email_template, email_context,
|
subject_template, email_template, email_context,
|
||||||
@@ -973,13 +979,15 @@ def _order_placed_email_attendee(event: Event, order: Order, position: OrderPosi
|
|||||||
logger.exception('Order received email could not be sent to attendee')
|
logger.exception('Order received email could not be sent to attendee')
|
||||||
|
|
||||||
|
|
||||||
def _perform_order(event: Event, payment_requests: List[dict], position_ids: List[str],
|
def _perform_order(event: Event, payment_provider: str, position_ids: List[str],
|
||||||
email: str, locale: str, address: int, meta_info: dict=None, sales_channel: str='web',
|
email: str, locale: str, address: int, meta_info: dict=None, sales_channel: str='web',
|
||||||
shown_total=None, customer=None):
|
gift_cards: list=None, shown_total=None, customer=None):
|
||||||
for p in payment_requests:
|
if payment_provider:
|
||||||
p['pprov'] = event.get_payment_providers(cached=True)[p['provider']]
|
pprov = event.get_payment_providers().get(payment_provider)
|
||||||
if not p['pprov']:
|
if not pprov:
|
||||||
raise OrderError(error_messages['internal'])
|
raise OrderError(error_messages['internal'])
|
||||||
|
else:
|
||||||
|
pprov = None
|
||||||
|
|
||||||
if customer:
|
if customer:
|
||||||
customer = event.organizer.customers.get(pk=customer)
|
customer = event.organizer.customers.get(pk=customer)
|
||||||
@@ -1009,17 +1017,8 @@ def _perform_order(event: Event, payment_requests: List[dict], position_ids: Lis
|
|||||||
id__in=position_ids, event=event
|
id__in=position_ids, event=event
|
||||||
)
|
)
|
||||||
|
|
||||||
validate_order.send(
|
validate_order.send(event, payment_provider=pprov, email=email, positions=positions, locale=locale,
|
||||||
event,
|
invoice_address=addr, meta_info=meta_info, customer=customer)
|
||||||
payment_provider=payment_requests[0]['provider'] if payment_requests else None, # only for backwards compatibility
|
|
||||||
payments=payment_requests,
|
|
||||||
email=email,
|
|
||||||
positions=positions,
|
|
||||||
locale=locale,
|
|
||||||
invoice_address=addr,
|
|
||||||
meta_info=meta_info,
|
|
||||||
customer=customer,
|
|
||||||
)
|
|
||||||
|
|
||||||
lockfn = NoLockManager
|
lockfn = NoLockManager
|
||||||
locked = False
|
locked = False
|
||||||
@@ -1039,28 +1038,21 @@ def _perform_order(event: Event, payment_requests: List[dict], position_ids: Lis
|
|||||||
if len(position_ids) != len(positions):
|
if len(position_ids) != len(positions):
|
||||||
raise OrderError(error_messages['internal'])
|
raise OrderError(error_messages['internal'])
|
||||||
_check_positions(event, now_dt, positions, address=addr, sales_channel=sales_channel, customer=customer)
|
_check_positions(event, now_dt, positions, address=addr, sales_channel=sales_channel, customer=customer)
|
||||||
order, payment_objs = _create_order(event, email, positions, now_dt, payment_requests,
|
order, payment = _create_order(event, email, positions, now_dt, pprov,
|
||||||
locale=locale, address=addr, meta_info=meta_info, sales_channel=sales_channel,
|
locale=locale, address=addr, meta_info=meta_info, sales_channel=sales_channel,
|
||||||
shown_total=shown_total, customer=customer)
|
gift_cards=gift_cards, shown_total=shown_total, customer=customer)
|
||||||
|
|
||||||
free_order_flow = (
|
free_order_flow = payment and payment_provider == 'free' and order.pending_sum == Decimal('0.00') and not order.require_approval
|
||||||
payment_objs and
|
|
||||||
any(p['provider'] == 'free' for p in payment_requests) and
|
|
||||||
order.pending_sum == Decimal('0.00') and
|
|
||||||
not order.require_approval
|
|
||||||
)
|
|
||||||
if free_order_flow:
|
if free_order_flow:
|
||||||
try:
|
try:
|
||||||
for p in payment_objs:
|
payment.confirm(send_mail=False, lock=not locked)
|
||||||
if p.provider == 'free':
|
|
||||||
p.confirm(send_mail=False, lock=not locked)
|
|
||||||
except Quota.QuotaExceededException:
|
except Quota.QuotaExceededException:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
invoice = order.invoices.last() # Might be generated by plugin already
|
invoice = order.invoices.last() # Might be generated by plugin already
|
||||||
if not invoice and invoice_qualified(order):
|
if not invoice and invoice_qualified(order):
|
||||||
if event.settings.get('invoice_generate') == 'True' or (
|
if event.settings.get('invoice_generate') == 'True' or (
|
||||||
event.settings.get('invoice_generate') == 'paid' and any(p['pprov'].requires_invoice_immediately for p in payment_requests)):
|
event.settings.get('invoice_generate') == 'paid' and payment.payment_provider.requires_invoice_immediately):
|
||||||
invoice = generate_invoice(
|
invoice = generate_invoice(
|
||||||
order,
|
order,
|
||||||
trigger_pdf=not event.settings.invoice_email_attachment or not order.email
|
trigger_pdf=not event.settings.invoice_email_attachment or not order.email
|
||||||
@@ -1092,7 +1084,7 @@ def _perform_order(event: Event, payment_requests: List[dict], position_ids: Lis
|
|||||||
subject_attendees_template = event.settings.mail_subject_order_placed_attendee
|
subject_attendees_template = event.settings.mail_subject_order_placed_attendee
|
||||||
|
|
||||||
if sales_channel in event.settings.mail_sales_channel_placed_paid:
|
if sales_channel in event.settings.mail_sales_channel_placed_paid:
|
||||||
_order_placed_email(event, order, email_template, subject_template, log_entry, invoice, payment_objs,
|
_order_placed_email(event, order, pprov, email_template, subject_template, log_entry, invoice, payment,
|
||||||
is_free=free_order_flow)
|
is_free=free_order_flow)
|
||||||
if email_attendees:
|
if email_attendees:
|
||||||
for p in order.positions.all():
|
for p in order.positions.all():
|
||||||
@@ -1100,33 +1092,7 @@ def _perform_order(event: Event, payment_requests: List[dict], position_ids: Lis
|
|||||||
_order_placed_email_attendee(event, order, p, email_attendees_template, subject_attendees_template, log_entry,
|
_order_placed_email_attendee(event, order, p, email_attendees_template, subject_attendees_template, log_entry,
|
||||||
is_free=free_order_flow)
|
is_free=free_order_flow)
|
||||||
|
|
||||||
warnings = []
|
return order.id
|
||||||
any_failed = False
|
|
||||||
for p in payment_objs:
|
|
||||||
if not p.payment_provider.execute_payment_needs_user:
|
|
||||||
try:
|
|
||||||
p.process_initiated = True
|
|
||||||
p.save(update_fields=['process_initiated'])
|
|
||||||
resp = p.payment_provider.execute_payment(None, p)
|
|
||||||
if isinstance(resp, str):
|
|
||||||
logger.warning('Payment provider returned URL from execute_payment even though execute_payment_needs_user is not set')
|
|
||||||
except PaymentException as e:
|
|
||||||
warnings.append(str(e))
|
|
||||||
any_failed = True
|
|
||||||
except Exception:
|
|
||||||
logger.exception('Error during payment attempt')
|
|
||||||
|
|
||||||
if any_failed:
|
|
||||||
# Cancel all other payments because their amount might be wrong now.
|
|
||||||
for p in payment_objs:
|
|
||||||
if p.state == OrderPayment.PAYMENT_STATE_CREATED:
|
|
||||||
p.state = OrderPayment.PAYMENT_STATE_CANCELED
|
|
||||||
p.save(update_fields=['state'])
|
|
||||||
|
|
||||||
return {
|
|
||||||
'order_id': order.id,
|
|
||||||
'warnings': warnings,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@receiver(signal=periodic_task)
|
@receiver(signal=periodic_task)
|
||||||
@@ -2428,14 +2394,14 @@ class OrderChangeManager:
|
|||||||
|
|
||||||
|
|
||||||
@app.task(base=ProfiledEventTask, bind=True, max_retries=5, default_retry_delay=1, throws=(OrderError,))
|
@app.task(base=ProfiledEventTask, bind=True, max_retries=5, default_retry_delay=1, throws=(OrderError,))
|
||||||
def perform_order(self, event: Event, payments: List[dict], positions: List[str],
|
def perform_order(self, event: Event, payment_provider: str, positions: List[str],
|
||||||
email: str=None, locale: str=None, address: int=None, meta_info: dict=None,
|
email: str=None, locale: str=None, address: int=None, meta_info: dict=None,
|
||||||
sales_channel: str='web', shown_total=None, customer=None):
|
sales_channel: str='web', gift_cards: list=None, shown_total=None, customer=None):
|
||||||
with language(locale):
|
with language(locale):
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
return _perform_order(event, payments, positions, email, locale, address, meta_info,
|
return _perform_order(event, payment_provider, positions, email, locale, address, meta_info,
|
||||||
sales_channel, shown_total, customer)
|
sales_channel, gift_cards, shown_total, customer)
|
||||||
except LockTimeoutException:
|
except LockTimeoutException:
|
||||||
self.retry()
|
self.retry()
|
||||||
except (MaxRetriesExceededError, LockTimeoutException):
|
except (MaxRetriesExceededError, LockTimeoutException):
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ def get_listed_price(item: Item, variation: ItemVariation = None, subevent: SubE
|
|||||||
|
|
||||||
|
|
||||||
def get_line_price(price_after_voucher: Decimal, custom_price_input: Decimal, custom_price_input_is_net: bool,
|
def get_line_price(price_after_voucher: Decimal, custom_price_input: Decimal, custom_price_input_is_net: bool,
|
||||||
tax_rule: TaxRule, invoice_address: InvoiceAddress, bundled_sum: Decimal, is_bundled=False) -> TaxedPrice:
|
tax_rule: TaxRule, invoice_address: InvoiceAddress, bundled_sum: Decimal) -> TaxedPrice:
|
||||||
if not tax_rule:
|
if not tax_rule:
|
||||||
tax_rule = TaxRule(
|
tax_rule = TaxRule(
|
||||||
name='',
|
name='',
|
||||||
@@ -135,8 +135,7 @@ def get_line_price(price_after_voucher: Decimal, custom_price_input: Decimal, cu
|
|||||||
price = tax_rule.tax(max(custom_price_input, price.gross), base_price_is='gross', override_tax_rate=price.rate,
|
price = tax_rule.tax(max(custom_price_input, price.gross), base_price_is='gross', override_tax_rate=price.rate,
|
||||||
invoice_address=invoice_address, subtract_from_gross=bundled_sum)
|
invoice_address=invoice_address, subtract_from_gross=bundled_sum)
|
||||||
else:
|
else:
|
||||||
price = tax_rule.tax(price_after_voucher, invoice_address=invoice_address, subtract_from_gross=bundled_sum,
|
price = tax_rule.tax(price_after_voucher, invoice_address=invoice_address, subtract_from_gross=bundled_sum)
|
||||||
base_price_is='gross' if is_bundled else 'auto')
|
|
||||||
|
|
||||||
return price
|
return price
|
||||||
|
|
||||||
|
|||||||
@@ -743,18 +743,6 @@ DEFAULTS = {
|
|||||||
'default': 'True',
|
'default': 'True',
|
||||||
'type': bool
|
'type': bool
|
||||||
},
|
},
|
||||||
'payment_giftcard_public_name': {
|
|
||||||
'default': LazyI18nString.from_gettext(gettext_noop('Gift card')),
|
|
||||||
'type': LazyI18nString
|
|
||||||
},
|
|
||||||
'payment_giftcard_public_description': {
|
|
||||||
'default': LazyI18nString.from_gettext(gettext_noop(
|
|
||||||
'If you have a gift card, please enter the gift card code here. If the gift card does not have '
|
|
||||||
'enough credit to pay for the full order, you will be shown this page again and you can either '
|
|
||||||
'redeem another gift card or select a different payment method for the difference.'
|
|
||||||
)),
|
|
||||||
'type': LazyI18nString
|
|
||||||
},
|
|
||||||
'payment_resellers__restrict_to_sales_channels': {
|
'payment_resellers__restrict_to_sales_channels': {
|
||||||
'default': ['resellers'],
|
'default': ['resellers'],
|
||||||
'type': list
|
'type': list
|
||||||
|
|||||||
@@ -307,7 +307,7 @@ The ``sender`` keyword argument will contain an organizer.
|
|||||||
validate_order = EventPluginSignal(
|
validate_order = EventPluginSignal(
|
||||||
)
|
)
|
||||||
"""
|
"""
|
||||||
Arguments: ``payments``, ``positions``, ``email``, ``locale``, ``invoice_address``,
|
Arguments: ``payment_provider``, ``positions``, ``email``, ``locale``, ``invoice_address``,
|
||||||
``meta_info``, ``customer``
|
``meta_info``, ``customer``
|
||||||
|
|
||||||
This signal is sent out when the user tries to confirm the order, before we actually create
|
This signal is sent out when the user tries to confirm the order, before we actually create
|
||||||
@@ -316,9 +316,6 @@ but you can raise an OrderError with an appropriate exception message if you lik
|
|||||||
the order. We strongly discourage making changes to the order here.
|
the order. We strongly discourage making changes to the order here.
|
||||||
|
|
||||||
As with all event-plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event-plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
|
|
||||||
**DEPRECTATION:** Stop listening to the ``payment_provider`` attribute, it will be removed
|
|
||||||
in the future, as the ``payments`` attribute gives more information.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
validate_cart = EventPluginSignal()
|
validate_cart = EventPluginSignal()
|
||||||
@@ -567,7 +564,7 @@ an OrderedDict of (setting name, form field).
|
|||||||
|
|
||||||
order_fee_calculation = EventPluginSignal()
|
order_fee_calculation = EventPluginSignal()
|
||||||
"""
|
"""
|
||||||
Arguments: ``positions``, ``invoice_address``, ``meta_info``, ``total``, ``gift_cards``, ``payment_requests``
|
Arguments: ``positions``, ``invoice_address``, ``meta_info``, ``total``, ``gift_cards``
|
||||||
|
|
||||||
This signals allows you to add fees to an order while it is being created. You are expected to
|
This signals allows you to add fees to an order while it is being created. You are expected to
|
||||||
return a list of ``OrderFee`` objects that are not yet saved to the database
|
return a list of ``OrderFee`` objects that are not yet saved to the database
|
||||||
@@ -577,10 +574,8 @@ As with all plugin signals, the ``sender`` keyword argument will contain the eve
|
|||||||
argument will contain the cart positions and ``invoice_address`` the invoice address (useful for
|
argument will contain the cart positions and ``invoice_address`` the invoice address (useful for
|
||||||
tax calculation). The argument ``meta_info`` contains the order's meta dictionary. The ``total``
|
tax calculation). The argument ``meta_info`` contains the order's meta dictionary. The ``total``
|
||||||
keyword argument will contain the total cart sum without any fees. You should not rely on this
|
keyword argument will contain the total cart sum without any fees. You should not rely on this
|
||||||
``total`` value for fee calculations as other fees might interfere. The ``gift_cards`` argument
|
``total`` value for fee calculations as other fees might interfere. The ``gift_cards`` argument lists
|
||||||
lists the gift cards in use.
|
the gift cards in use.
|
||||||
|
|
||||||
**DEPRECTATION:** Stop listening to the ``gift_cards`` attribute, it will be removed in the future.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
order_fee_type_name = EventPluginSignal()
|
order_fee_type_name = EventPluginSignal()
|
||||||
|
|||||||
@@ -1171,8 +1171,8 @@ class MailSettingsForm(SettingsForm):
|
|||||||
widget=I18nTextarea,
|
widget=I18nTextarea,
|
||||||
)
|
)
|
||||||
base_context = {
|
base_context = {
|
||||||
'mail_text_order_placed': ['event', 'order', 'payments'],
|
'mail_text_order_placed': ['event', 'order', 'payment'],
|
||||||
'mail_subject_order_placed': ['event', 'order', 'payments'],
|
'mail_subject_order_placed': ['event', 'order', 'payment'],
|
||||||
'mail_text_order_placed_attendee': ['event', 'order', 'position'],
|
'mail_text_order_placed_attendee': ['event', 'order', 'position'],
|
||||||
'mail_subject_order_placed_attendee': ['event', 'order', 'position'],
|
'mail_subject_order_placed_attendee': ['event', 'order', 'position'],
|
||||||
'mail_text_order_placed_require_approval': ['event', 'order'],
|
'mail_text_order_placed_require_approval': ['event', 'order'],
|
||||||
|
|||||||
@@ -806,8 +806,7 @@ class OrderSearchFilterForm(OrderFilterForm):
|
|||||||
# We ignore superuser permissions here. This is intentional – we do not want to show super
|
# We ignore superuser permissions here. This is intentional – we do not want to show super
|
||||||
# users a form with all meta properties ever assigned.
|
# users a form with all meta properties ever assigned.
|
||||||
return EventMetaProperty.objects.filter(
|
return EventMetaProperty.objects.filter(
|
||||||
organizer_id__in=self.request.user.teams.values_list('organizer', flat=True),
|
organizer_id__in=self.request.user.teams.values_list('organizer', flat=True)
|
||||||
filter_allowed=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -1546,13 +1545,12 @@ class EventFilterForm(FilterForm):
|
|||||||
@cached_property
|
@cached_property
|
||||||
def meta_properties(self):
|
def meta_properties(self):
|
||||||
if self.organizer:
|
if self.organizer:
|
||||||
return self.organizer.meta_properties.filter(filter_allowed=True)
|
return self.organizer.meta_properties.all()
|
||||||
else:
|
else:
|
||||||
# We ignore superuser permissions here. This is intentional – we do not want to show super
|
# We ignore superuser permissions here. This is intentional – we do not want to show super
|
||||||
# users a form with all meta properties ever assigned.
|
# users a form with all meta properties ever assigned.
|
||||||
return EventMetaProperty.objects.filter(
|
return EventMetaProperty.objects.filter(
|
||||||
organizer_id__in=self.request.user.teams.values_list('organizer', flat=True),
|
organizer_id__in=self.request.user.teams.values_list('organizer', flat=True)
|
||||||
filter_allowed=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -38,9 +38,7 @@ from decimal import Decimal
|
|||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.files.uploadedfile import UploadedFile
|
|
||||||
from django.db.models import Max
|
from django.db.models import Max
|
||||||
from django.forms.formsets import DELETION_FIELD_NAME
|
from django.forms.formsets import DELETION_FIELD_NAME
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
@@ -63,8 +61,7 @@ from pretix.base.models import (
|
|||||||
from pretix.base.models.items import ItemAddOn, ItemBundle, ItemMetaValue
|
from pretix.base.models.items import ItemAddOn, ItemBundle, ItemMetaValue
|
||||||
from pretix.base.signals import item_copy_data
|
from pretix.base.signals import item_copy_data
|
||||||
from pretix.control.forms import (
|
from pretix.control.forms import (
|
||||||
ItemMultipleChoiceField, SizeValidationMixin, SplitDateTimeField,
|
ItemMultipleChoiceField, SplitDateTimeField, SplitDateTimePickerWidget,
|
||||||
SplitDateTimePickerWidget,
|
|
||||||
)
|
)
|
||||||
from pretix.control.forms.widgets import Select2
|
from pretix.control.forms.widgets import Select2
|
||||||
from pretix.helpers.models import modelcopy
|
from pretix.helpers.models import modelcopy
|
||||||
@@ -587,14 +584,6 @@ class ItemUpdateForm(I18nModelForm):
|
|||||||
)
|
)
|
||||||
return d
|
return d
|
||||||
|
|
||||||
def clean_picture(self):
|
|
||||||
value = self.cleaned_data.get('picture')
|
|
||||||
if isinstance(value, UploadedFile) and value.size > settings.FILE_UPLOAD_MAX_SIZE_IMAGE:
|
|
||||||
raise forms.ValidationError(_("Please do not upload files larger than {size}!").format(
|
|
||||||
size=SizeValidationMixin._sizeof_fmt(settings.FILE_UPLOAD_MAX_SIZE_IMAGE)
|
|
||||||
))
|
|
||||||
return value
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Item
|
model = Item
|
||||||
localized_fields = '__all__'
|
localized_fields = '__all__'
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ class OrganizerUpdateForm(OrganizerForm):
|
|||||||
class EventMetaPropertyForm(forms.ModelForm):
|
class EventMetaPropertyForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = EventMetaProperty
|
model = EventMetaProperty
|
||||||
fields = ['name', 'default', 'required', 'protected', 'allowed_values', 'filter_allowed']
|
fields = ['name', 'default', 'required', 'protected', 'allowed_values']
|
||||||
widgets = {
|
widgets = {
|
||||||
'default': forms.TextInput()
|
'default': forms.TextInput()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
#
|
|
||||||
# This file is part of pretix (Community Edition).
|
|
||||||
#
|
|
||||||
# Copyright (C) 2014-2020 Raphael Michel and contributors
|
|
||||||
# Copyright (C) 2020-2021 rami.io GmbH and contributors
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
|
|
||||||
# Public License as published by the Free Software Foundation in version 3 of the License.
|
|
||||||
#
|
|
||||||
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
|
|
||||||
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
|
|
||||||
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
|
|
||||||
# this file, see <https://pretix.eu/about/en/license>.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
||||||
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# 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/>.
|
|
||||||
#
|
|
||||||
from django.urls import reverse
|
|
||||||
from django_scopes.forms import SafeModelChoiceField
|
|
||||||
|
|
||||||
from pretix.base.forms import I18nModelForm
|
|
||||||
from pretix.base.models import WaitingListEntry
|
|
||||||
from pretix.control.forms.widgets import Select2
|
|
||||||
|
|
||||||
|
|
||||||
class WaitingListEntryTransferForm(I18nModelForm):
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
if self.event.has_subevents:
|
|
||||||
self.fields['subevent'].required = True
|
|
||||||
self.fields['subevent'].queryset = self.event.subevents.all()
|
|
||||||
self.fields['subevent'].widget = Select2(
|
|
||||||
attrs={
|
|
||||||
'data-model-select2': 'event',
|
|
||||||
'data-select2-url': reverse('control:event.subevents.select2', kwargs={
|
|
||||||
'event': self.event.slug,
|
|
||||||
'organizer': self.event.organizer.slug,
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
self.fields['subevent'].widget.choices = self.fields['subevent'].choices
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = WaitingListEntry
|
|
||||||
fields = [
|
|
||||||
'subevent',
|
|
||||||
]
|
|
||||||
field_classes = {
|
|
||||||
'subevent': SafeModelChoiceField,
|
|
||||||
}
|
|
||||||
@@ -487,7 +487,6 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs):
|
|||||||
'pretix.event.permissions.deleted': _('A user has been removed from the event team.'),
|
'pretix.event.permissions.deleted': _('A user has been removed from the event team.'),
|
||||||
'pretix.waitinglist.voucher': _('A voucher has been sent to a person on the waiting list.'),
|
'pretix.waitinglist.voucher': _('A voucher has been sent to a person on the waiting list.'),
|
||||||
'pretix.event.orders.waitinglist.deleted': _('An entry has been removed from the waiting list.'),
|
'pretix.event.orders.waitinglist.deleted': _('An entry has been removed from the waiting list.'),
|
||||||
'pretix.event.orders.waitinglist.transferred': _('An entry has been transferred to another waiting list.'),
|
|
||||||
'pretix.event.orders.waitinglist.changed': _('An entry has been changed on the waiting list.'),
|
'pretix.event.orders.waitinglist.changed': _('An entry has been changed on the waiting list.'),
|
||||||
'pretix.event.orders.waitinglist.added': _('An entry has been added to the waiting list.'),
|
'pretix.event.orders.waitinglist.added': _('An entry has been added to the waiting list.'),
|
||||||
'pretix.team.created': _('The team has been created.'),
|
'pretix.team.created': _('The team has been created.'),
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load rich_text %}
|
|
||||||
|
|
||||||
{{ request.event.settings.payment_giftcard_public_description|rich_text }}
|
<p>
|
||||||
|
{% blocktrans %}
|
||||||
|
If you have a gift card, please enter the gift card code here. If the gift card does not have
|
||||||
|
enough credit to pay for the full order, you will be shown this page again and you can either
|
||||||
|
redeem another gift card or select a different payment method for the difference.
|
||||||
|
{% endblocktrans %}
|
||||||
|
</p>
|
||||||
<input name="giftcard" class="form-control" placeholder="{% trans "Gift card code" %}">
|
<input name="giftcard" class="form-control" placeholder="{% trans "Gift card code" %}">
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
{% blocktrans trimmed with card=info_data.gift_card_secret %}
|
{% blocktrans %}
|
||||||
Your gift card {{ card }} will be used to pay for this order.
|
Your gift card will be used to pay for this order. If the credit on the gift card is lower than the order total, you will be able to pay the
|
||||||
|
difference with a different payment method. If the credit is higher than the order total, you will be able to re-use the gift card in the future.
|
||||||
{% endblocktrans %}
|
{% endblocktrans %}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -118,6 +118,10 @@
|
|||||||
<button type="button" class="btn btn-default" data-formset-add>
|
<button type="button" class="btn btn-default" data-formset-add>
|
||||||
<i class="fa fa-plus"></i> {% trans "Add a new option" %}</button>
|
<i class="fa fa-plus"></i> {% trans "Add a new option" %}</button>
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
{% trans "or add options from a csv file" %}
|
||||||
|
<input type="file" id="add-options-csv" accept=".csv" aria-label="{% trans "csv file with answer options" %}">
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|||||||
@@ -242,13 +242,6 @@
|
|||||||
data-toggle="tooltip" title="{% trans "Move to the end of the list" %}">
|
data-toggle="tooltip" title="{% trans "Move to the end of the list" %}">
|
||||||
<span class="fa fa-thumbs-down"></span>
|
<span class="fa fa-thumbs-down"></span>
|
||||||
</button>
|
</button>
|
||||||
{% if request.event.has_subevents %}
|
|
||||||
<a href="{% url "control:event.orders.waitinglist.transfer" organizer=request.event.organizer.slug event=request.event.slug entry=e.id %}"
|
|
||||||
class="btn btn-default btn-sm" title="{% trans "Transfer to other date" context "subevent" %}"
|
|
||||||
data-toggle="tooltip">
|
|
||||||
<i class="fa fa-calendar" aria-hidden="true"></i>
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
<a href="{% url "control:event.orders.waitinglist.delete" organizer=request.event.organizer.slug event=request.event.slug entry=e.id %}?next={{ request.get_full_path|urlencode }}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
|
<a href="{% url "control:event.orders.waitinglist.delete" organizer=request.event.organizer.slug event=request.event.slug entry=e.id %}?next={{ request.get_full_path|urlencode }}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<button class="btn btn-default btn-sm disabled">
|
<button class="btn btn-default btn-sm disabled">
|
||||||
@@ -268,11 +261,9 @@
|
|||||||
{% if "can_change_orders" in request.eventpermset %}
|
{% if "can_change_orders" in request.eventpermset %}
|
||||||
<div class="batch-select-actions">
|
<div class="batch-select-actions">
|
||||||
<button type="submit" class="btn btn-danger btn-save" name="action" value="delete">
|
<button type="submit" class="btn btn-danger btn-save" name="action" value="delete">
|
||||||
<i class="fa fa-trash"></i>
|
<i class="fa fa-trash"></i>{% trans "Delete selected" %}
|
||||||
{% trans "Delete selected" %}
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</form>
|
</form>
|
||||||
{% include "pretixcontrol/pagination.html" %}
|
{% include "pretixcontrol/pagination.html" %}
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
{% extends "pretixcontrol/event/base.html" %}
|
|
||||||
{% load i18n %}
|
|
||||||
{% load bootstrap3 %}
|
|
||||||
{% block title %}{% trans "Transfer entry" %}{% endblock %}
|
|
||||||
{% block content %}
|
|
||||||
<h1>{% trans "Transfer entry" %}</h1>
|
|
||||||
<form action="" method="post" class="form-horizontal">
|
|
||||||
{% csrf_token %}
|
|
||||||
<p>{% blocktrans trimmed context "subevent" %}
|
|
||||||
Please select the date to which the following waiting list entry should be
|
|
||||||
transferred: <strong>{{ entry }}</strong>?
|
|
||||||
{% endblocktrans %}</p>
|
|
||||||
{% bootstrap_field form.subevent layout="control" %}
|
|
||||||
<div class="form-group submit-group">
|
|
||||||
<a href="{% url "control:event.orders.waitinglist" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default btn-cancel">
|
|
||||||
{% trans "Cancel" %}
|
|
||||||
</a>
|
|
||||||
<button type="submit" class="btn btn-primary btn-save">
|
|
||||||
{% trans "Transfer" %}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -401,8 +401,6 @@ urlpatterns = [
|
|||||||
re_path(r'^waitinglist/auto_assign$', waitinglist.AutoAssign.as_view(), name='event.orders.waitinglist.auto'),
|
re_path(r'^waitinglist/auto_assign$', waitinglist.AutoAssign.as_view(), name='event.orders.waitinglist.auto'),
|
||||||
re_path(r'^waitinglist/(?P<entry>\d+)/delete$', waitinglist.EntryDelete.as_view(),
|
re_path(r'^waitinglist/(?P<entry>\d+)/delete$', waitinglist.EntryDelete.as_view(),
|
||||||
name='event.orders.waitinglist.delete'),
|
name='event.orders.waitinglist.delete'),
|
||||||
re_path(r'^waitinglist/(?P<entry>\d+)/transfer$', waitinglist.EntryTransfer.as_view(),
|
|
||||||
name='event.orders.waitinglist.transfer'),
|
|
||||||
re_path(r'^checkins/$', checkin.CheckinListView.as_view(), name='event.orders.checkins'),
|
re_path(r'^checkins/$', checkin.CheckinListView.as_view(), name='event.orders.checkins'),
|
||||||
re_path(r'^checkinlists/$', checkin.CheckinListList.as_view(), name='event.orders.checkinlists'),
|
re_path(r'^checkinlists/$', checkin.CheckinListList.as_view(), name='event.orders.checkinlists'),
|
||||||
re_path(r'^checkinlists/add$', checkin.CheckinListCreate.as_view(), name='event.orders.checkinlists.add'),
|
re_path(r'^checkinlists/add$', checkin.CheckinListCreate.as_view(), name='event.orders.checkinlists.add'),
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ from pretix.base.forms.auth import (
|
|||||||
)
|
)
|
||||||
from pretix.base.models import TeamInvite, U2FDevice, User, WebAuthnDevice
|
from pretix.base.models import TeamInvite, U2FDevice, User, WebAuthnDevice
|
||||||
from pretix.base.services.mail import SendMailException
|
from pretix.base.services.mail import SendMailException
|
||||||
from pretix.helpers.http import redirect_to_url
|
|
||||||
from pretix.helpers.webauthn import generate_challenge
|
from pretix.helpers.webauthn import generate_challenge
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -82,7 +81,7 @@ def process_login(request, user, keep_logged_in):
|
|||||||
twofa_url = reverse('control:auth.login.2fa')
|
twofa_url = reverse('control:auth.login.2fa')
|
||||||
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
|
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
|
||||||
twofa_url += '?next=' + quote(next_url)
|
twofa_url += '?next=' + quote(next_url)
|
||||||
return redirect_to_url(twofa_url)
|
return redirect(twofa_url)
|
||||||
else:
|
else:
|
||||||
auth_login(request, user)
|
auth_login(request, user)
|
||||||
request.session['pretix_auth_login_time'] = int(time.time())
|
request.session['pretix_auth_login_time'] = int(time.time())
|
||||||
@@ -111,7 +110,7 @@ def login(request):
|
|||||||
if request.user.is_authenticated:
|
if request.user.is_authenticated:
|
||||||
next_url = backend.get_next_url(request) or 'control:index'
|
next_url = backend.get_next_url(request) or 'control:index'
|
||||||
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
|
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
|
||||||
return redirect_to_url(next_url)
|
return redirect(next_url)
|
||||||
return redirect(reverse('control:index'))
|
return redirect(reverse('control:index'))
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = LoginForm(backend=backend, data=request.POST, request=request)
|
form = LoginForm(backend=backend, data=request.POST, request=request)
|
||||||
@@ -137,8 +136,8 @@ def logout(request):
|
|||||||
if 'next' in request.GET and url_has_allowed_host_and_scheme(request.GET.get('next'), allowed_hosts=None):
|
if 'next' in request.GET and url_has_allowed_host_and_scheme(request.GET.get('next'), allowed_hosts=None):
|
||||||
next += '?next=' + quote(request.GET.get('next'))
|
next += '?next=' + quote(request.GET.get('next'))
|
||||||
if 'back' in request.GET and url_has_allowed_host_and_scheme(request.GET.get('back'), allowed_hosts=None):
|
if 'back' in request.GET and url_has_allowed_host_and_scheme(request.GET.get('back'), allowed_hosts=None):
|
||||||
return redirect_to_url(request.GET.get('back'))
|
return redirect(request.GET.get('back'))
|
||||||
return redirect_to_url(next)
|
return redirect(next)
|
||||||
|
|
||||||
|
|
||||||
def register(request):
|
def register(request):
|
||||||
@@ -444,7 +443,7 @@ class Login2FAView(TemplateView):
|
|||||||
del request.session['pretix_auth_2fa_user']
|
del request.session['pretix_auth_2fa_user']
|
||||||
del request.session['pretix_auth_2fa_time']
|
del request.session['pretix_auth_2fa_time']
|
||||||
if "next" in request.GET and url_has_allowed_host_and_scheme(request.GET.get("next"), allowed_hosts=None):
|
if "next" in request.GET and url_has_allowed_host_and_scheme(request.GET.get("next"), allowed_hosts=None):
|
||||||
return redirect_to_url(request.GET.get("next"))
|
return redirect(request.GET.get("next"))
|
||||||
return redirect(reverse('control:index'))
|
return redirect(reverse('control:index'))
|
||||||
else:
|
else:
|
||||||
messages.error(request, _('Invalid code, please try again.'))
|
messages.error(request, _('Invalid code, please try again.'))
|
||||||
|
|||||||
@@ -387,7 +387,7 @@ class EventPlugins(EventSettingsViewMixin, EventPermissionRequiredMixin, Templat
|
|||||||
if key.startswith("plugin:"):
|
if key.startswith("plugin:"):
|
||||||
module = key.split(":")[1]
|
module = key.split(":")[1]
|
||||||
if value == "enable" and module in plugins_available:
|
if value == "enable" and module in plugins_available:
|
||||||
if getattr(plugins_available[module].app, 'restricted', False):
|
if getattr(plugins_available[module], 'restricted', False):
|
||||||
if module not in request.event.settings.allowed_restricted_plugins:
|
if module not in request.event.settings.allowed_restricted_plugins:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|||||||
@@ -257,10 +257,7 @@ class EventWizard(SafeSessionWizardView):
|
|||||||
def done(self, form_list, form_dict, **kwargs):
|
def done(self, form_list, form_dict, **kwargs):
|
||||||
foundation_data = self.get_cleaned_data_for_step('foundation')
|
foundation_data = self.get_cleaned_data_for_step('foundation')
|
||||||
basics_data = self.get_cleaned_data_for_step('basics')
|
basics_data = self.get_cleaned_data_for_step('basics')
|
||||||
try:
|
copy_data = self.get_cleaned_data_for_step('copy')
|
||||||
copy_data = self.get_cleaned_data_for_step('copy')
|
|
||||||
except KeyError:
|
|
||||||
copy_data = None
|
|
||||||
|
|
||||||
with transaction.atomic(), language(basics_data['locale']):
|
with transaction.atomic(), language(basics_data['locale']):
|
||||||
event = form_dict['basics'].instance
|
event = form_dict['basics'].instance
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ class OrganizerDetail(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin
|
|||||||
ctx = super().get_context_data(**kwargs)
|
ctx = super().get_context_data(**kwargs)
|
||||||
ctx['filter_form'] = self.filter_form
|
ctx['filter_form'] = self.filter_form
|
||||||
ctx['meta_fields'] = [
|
ctx['meta_fields'] = [
|
||||||
self.filter_form['meta_{}'.format(p.name)] for p in self.organizer.meta_properties.filter(filter_allowed=True)
|
self.filter_form['meta_{}'.format(p.name)] for p in self.organizer.meta_properties.all()
|
||||||
]
|
]
|
||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
@@ -2214,7 +2214,7 @@ class CustomerDetailView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMi
|
|||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
q = Q(customer=self.customer)
|
q = Q(customer=self.customer)
|
||||||
if self.request.organizer.settings.customer_accounts_link_by_email and self.customer.email:
|
if self.request.organizer.settings.customer_accounts_link_by_email:
|
||||||
# This is safe because we only let customers with verified emails log in
|
# This is safe because we only let customers with verified emails log in
|
||||||
q |= Q(email__iexact=self.customer.email)
|
q |= Q(email__iexact=self.customer.email)
|
||||||
qs = Order.objects.filter(
|
qs = Order.objects.filter(
|
||||||
|
|||||||
@@ -71,7 +71,6 @@ from pretix.control.permissions import (
|
|||||||
AdministratorPermissionRequiredMixin, StaffMemberRequiredMixin,
|
AdministratorPermissionRequiredMixin, StaffMemberRequiredMixin,
|
||||||
)
|
)
|
||||||
from pretix.control.views.auth import get_u2f_appid
|
from pretix.control.views.auth import get_u2f_appid
|
||||||
from pretix.helpers.http import redirect_to_url
|
|
||||||
from pretix.helpers.webauthn import generate_challenge, generate_ukey
|
from pretix.helpers.webauthn import generate_challenge, generate_ukey
|
||||||
|
|
||||||
REAL_DEVICE_TYPES = (TOTPDevice, WebAuthnDevice, U2FDevice)
|
REAL_DEVICE_TYPES = (TOTPDevice, WebAuthnDevice, U2FDevice)
|
||||||
@@ -139,7 +138,7 @@ class ReauthView(TemplateView):
|
|||||||
request.session['pretix_auth_last_used'] = t
|
request.session['pretix_auth_last_used'] = t
|
||||||
next_url = get_auth_backends()[request.user.auth_backend].get_next_url(request)
|
next_url = get_auth_backends()[request.user.auth_backend].get_next_url(request)
|
||||||
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
|
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
|
||||||
return redirect_to_url(next_url)
|
return redirect(next_url)
|
||||||
return redirect(reverse('control:index'))
|
return redirect(reverse('control:index'))
|
||||||
else:
|
else:
|
||||||
messages.error(request, _('The password you entered was invalid, please try again.'))
|
messages.error(request, _('The password you entered was invalid, please try again.'))
|
||||||
@@ -154,7 +153,7 @@ class ReauthView(TemplateView):
|
|||||||
request.session['pretix_auth_login_time'] = t
|
request.session['pretix_auth_login_time'] = t
|
||||||
request.session['pretix_auth_last_used'] = t
|
request.session['pretix_auth_last_used'] = t
|
||||||
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
|
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
|
||||||
return redirect_to_url(next_url)
|
return redirect(next_url)
|
||||||
return redirect(reverse('control:index'))
|
return redirect(reverse('control:index'))
|
||||||
return super().get(request, *args, **kwargs)
|
return super().get(request, *args, **kwargs)
|
||||||
|
|
||||||
@@ -750,7 +749,7 @@ class StartStaffSession(StaffMemberRequiredMixin, RecentAuthenticationRequiredMi
|
|||||||
)
|
)
|
||||||
|
|
||||||
if "next" in request.GET and url_has_allowed_host_and_scheme(request.GET.get("next"), allowed_hosts=None):
|
if "next" in request.GET and url_has_allowed_host_and_scheme(request.GET.get("next"), allowed_hosts=None):
|
||||||
return redirect_to_url(request.GET.get("next"))
|
return redirect(request.GET.get("next"))
|
||||||
else:
|
else:
|
||||||
return redirect(reverse("control:index"))
|
return redirect(reverse("control:index"))
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ from django.db import transaction
|
|||||||
from django.db.models import F, Max, Min, Q, Sum
|
from django.db.models import F, Max, Min, Q, Sum
|
||||||
from django.db.models.functions import Coalesce
|
from django.db.models.functions import Coalesce
|
||||||
from django.http import Http404, HttpResponse, HttpResponseRedirect
|
from django.http import Http404, HttpResponse, HttpResponseRedirect
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import redirect, render
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.utils.http import is_safe_url
|
from django.utils.http import is_safe_url
|
||||||
@@ -54,12 +54,9 @@ from pretix.base.models import Item, Quota, WaitingListEntry
|
|||||||
from pretix.base.models.waitinglist import WaitingListException
|
from pretix.base.models.waitinglist import WaitingListException
|
||||||
from pretix.base.services.waitinglist import assign_automatically
|
from pretix.base.services.waitinglist import assign_automatically
|
||||||
from pretix.base.views.tasks import AsyncAction
|
from pretix.base.views.tasks import AsyncAction
|
||||||
from pretix.control.forms.waitinglist import WaitingListEntryTransferForm
|
|
||||||
from pretix.control.permissions import EventPermissionRequiredMixin
|
from pretix.control.permissions import EventPermissionRequiredMixin
|
||||||
from pretix.control.views import PaginationMixin
|
from pretix.control.views import PaginationMixin
|
||||||
|
|
||||||
from . import UpdateView
|
|
||||||
|
|
||||||
|
|
||||||
class AutoAssign(EventPermissionRequiredMixin, AsyncAction, View):
|
class AutoAssign(EventPermissionRequiredMixin, AsyncAction, View):
|
||||||
task = assign_automatically
|
task = assign_automatically
|
||||||
@@ -369,40 +366,3 @@ class EntryDelete(EventPermissionRequiredMixin, DeleteView):
|
|||||||
'event': self.request.event.slug,
|
'event': self.request.event.slug,
|
||||||
'organizer': self.request.event.organizer.slug
|
'organizer': self.request.event.organizer.slug
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
class EntryTransfer(EventPermissionRequiredMixin, UpdateView):
|
|
||||||
model = WaitingListEntry
|
|
||||||
template_name = 'pretixcontrol/waitinglist/transfer.html'
|
|
||||||
permission = 'can_change_orders'
|
|
||||||
form_class = WaitingListEntryTransferForm
|
|
||||||
context_object_name = 'entry'
|
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
|
||||||
if not self.request.event.has_subevents:
|
|
||||||
raise Http404(_("This is not an event series."))
|
|
||||||
return super().dispatch(request, *args, **kwargs)
|
|
||||||
|
|
||||||
def get_object(self, queryset=None) -> WaitingListEntry:
|
|
||||||
return get_object_or_404(WaitingListEntry, pk=self.kwargs['entry'], event=self.request.event, voucher__isnull=True)
|
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def form_valid(self, form):
|
|
||||||
messages.success(self.request, _('The waitinglist entry has been transferred.'))
|
|
||||||
if form.has_changed():
|
|
||||||
self.object.log_action(
|
|
||||||
'pretix.event.order.waitinglist.transferred', user=self.request.user, data={
|
|
||||||
k: form.cleaned_data.get(k) for k in form.changed_data
|
|
||||||
}
|
|
||||||
)
|
|
||||||
return super().form_valid(form)
|
|
||||||
|
|
||||||
def form_invalid(self, form):
|
|
||||||
messages.error(self.request, _('We could not save your changes. See below for details.'))
|
|
||||||
return super().form_invalid(form)
|
|
||||||
|
|
||||||
def get_success_url(self) -> str:
|
|
||||||
return reverse('control:event.orders.waitinglist', kwargs={
|
|
||||||
'event': self.request.event.slug,
|
|
||||||
'organizer': self.request.event.organizer.slug
|
|
||||||
})
|
|
||||||
|
|||||||
@@ -20,9 +20,7 @@
|
|||||||
# <https://www.gnu.org/licenses/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.http import (
|
from django.http import StreamingHttpResponse
|
||||||
HttpResponsePermanentRedirect, HttpResponseRedirect, StreamingHttpResponse,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class ChunkBasedFileResponse(StreamingHttpResponse):
|
class ChunkBasedFileResponse(StreamingHttpResponse):
|
||||||
@@ -42,8 +40,3 @@ def get_client_ip(request):
|
|||||||
if x_forwarded_for:
|
if x_forwarded_for:
|
||||||
ip = x_forwarded_for.split(',')[0]
|
ip = x_forwarded_for.split(',')[0]
|
||||||
return ip
|
return ip
|
||||||
|
|
||||||
|
|
||||||
def redirect_to_url(to, permanent=False):
|
|
||||||
redirect_class = HttpResponsePermanentRedirect if permanent else HttpResponseRedirect
|
|
||||||
return redirect_class(to)
|
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
# Generated by Django 3.2.16 on 2022-11-21 17:22
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('pretixhelpers', '0002_auto_20180320_1219'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='thumbnail',
|
|
||||||
name='created',
|
|
||||||
field=models.DateTimeField(auto_now_add=True, null=True),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@@ -29,7 +29,6 @@ class Thumbnail(models.Model):
|
|||||||
source = models.CharField(max_length=255)
|
source = models.CharField(max_length=255)
|
||||||
size = models.CharField(max_length=255)
|
size = models.CharField(max_length=255)
|
||||||
thumb = models.FileField(upload_to='pub/thumbs/', max_length=255)
|
thumb = models.FileField(upload_to='pub/thumbs/', max_length=255)
|
||||||
created = models.DateTimeField(auto_now_add=True, null=True)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = (('source', 'size'),)
|
unique_together = (('source', 'size'),)
|
||||||
|
|||||||
+2070
-2310
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2021-09-15 11:22+0000\n"
|
"PO-Revision-Date: 2021-09-15 11:22+0000\n"
|
||||||
"Last-Translator: Mohamed Tawfiq <mtawfiq@wafyapp.com>\n"
|
"Last-Translator: Mohamed Tawfiq <mtawfiq@wafyapp.com>\n"
|
||||||
"Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -132,18 +132,18 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "المتابعة"
|
msgstr "المتابعة"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "جاري تأكيد الدفع الخاص بك …"
|
msgstr "جاري تأكيد الدفع الخاص بك …"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -486,48 +486,48 @@ msgstr "الدقائق"
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "QR الدخول"
|
msgstr "QR الدخول"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr "لا يمكن تحميل ملف PDF الخلفية للأسباب التالية:"
|
msgstr "لا يمكن تحميل ملف PDF الخلفية للأسباب التالية:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "مجموعة من العناصر"
|
msgstr "مجموعة من العناصر"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "عنصر نص"
|
msgstr "عنصر نص"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "منطقة باركود"
|
msgstr "منطقة باركود"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "منطقة صورة"
|
msgstr "منطقة صورة"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "مدعوم من pretix"
|
msgstr "مدعوم من pretix"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "عنصر"
|
msgstr "عنصر"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "تصميم التذكرة"
|
msgstr "تصميم التذكرة"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "فشلت عملية الحفظ."
|
msgstr "فشلت عملية الحفظ."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr "حصل خطأ أثناء رفع ملف PDF الخاص بك، يرجى المحاولة مرة أخرى."
|
msgstr "حصل خطأ أثناء رفع ملف PDF الخاص بك، يرجى المحاولة مرة أخرى."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr "هل تريد أن تغادر المحرر دون حفظ التعديلات؟"
|
msgstr "هل تريد أن تغادر المحرر دون حفظ التعديلات؟"
|
||||||
|
|
||||||
|
|||||||
+2056
-2272
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2020-12-19 07:00+0000\n"
|
"PO-Revision-Date: 2020-12-19 07:00+0000\n"
|
||||||
"Last-Translator: albert <albert.serra.monner@gmail.com>\n"
|
"Last-Translator: albert <albert.serra.monner@gmail.com>\n"
|
||||||
"Language-Team: Catalan <https://translate.pretix.eu/projects/pretix/pretix-"
|
"Language-Team: Catalan <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||||
@@ -129,18 +129,18 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -469,48 +469,48 @@ msgstr ""
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Disseny del tiquet"
|
msgstr "Disseny del tiquet"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
+2053
-2243
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2021-12-06 23:00+0000\n"
|
"PO-Revision-Date: 2021-12-06 23:00+0000\n"
|
||||||
"Last-Translator: Ondřej Sokol <osokol@treesoft.cz>\n"
|
"Last-Translator: Ondřej Sokol <osokol@treesoft.cz>\n"
|
||||||
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -131,18 +131,18 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Pokračovat"
|
msgstr "Pokračovat"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "Potvrzuji vaši platbu …"
|
msgstr "Potvrzuji vaši platbu …"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -483,48 +483,48 @@ msgstr "minuty"
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "Check-in QR kód"
|
msgstr "Check-in QR kód"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr "Pozadí PDF nemohl být načten:"
|
msgstr "Pozadí PDF nemohl být načten:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "Skupina objektů"
|
msgstr "Skupina objektů"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Textový objekt"
|
msgstr "Textový objekt"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "Oblast s QR kódem"
|
msgstr "Oblast s QR kódem"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Oblast obrazu"
|
msgstr "Oblast obrazu"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Poháněno společností pretix"
|
msgstr "Poháněno společností pretix"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "Objekt"
|
msgstr "Objekt"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Design vstupenky"
|
msgstr "Design vstupenky"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "Uložení se nepodařilo."
|
msgstr "Uložení se nepodařilo."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr "Při nahrávání souboru PDF došlo k problému, zkuste to prosím znovu."
|
msgstr "Při nahrávání souboru PDF došlo k problému, zkuste to prosím znovu."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr "Opravdu chcete opustit editor bez uložení změn?"
|
msgstr "Opravdu chcete opustit editor bez uložení změn?"
|
||||||
|
|
||||||
|
|||||||
+2053
-2248
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2022-04-01 13:36+0000\n"
|
"PO-Revision-Date: 2022-04-01 13:36+0000\n"
|
||||||
"Last-Translator: Anna-itk <abc@aarhus.dk>\n"
|
"Last-Translator: Anna-itk <abc@aarhus.dk>\n"
|
||||||
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -130,7 +130,7 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgctxt "widget"
|
#| msgctxt "widget"
|
||||||
@@ -138,13 +138,13 @@ msgstr ""
|
|||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Fortsæt"
|
msgstr "Fortsæt"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "Bekræfter din betaling …"
|
msgstr "Bekræfter din betaling …"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -511,50 +511,50 @@ msgstr ""
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "Check-in QR"
|
msgstr "Check-in QR"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr "Baggrunds-pdf'en kunne ikke hentes af følgende grund:"
|
msgstr "Baggrunds-pdf'en kunne ikke hentes af følgende grund:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "Gruppe af objekter"
|
msgstr "Gruppe af objekter"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Tekstobjekt"
|
msgstr "Tekstobjekt"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "QR-kode-område"
|
msgstr "QR-kode-område"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Barcode area"
|
#| msgid "Barcode area"
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "QR-kode-område"
|
msgstr "QR-kode-område"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Drevet af pretix"
|
msgstr "Drevet af pretix"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "Objekt"
|
msgstr "Objekt"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Billetdesign"
|
msgstr "Billetdesign"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "Gem fejlede."
|
msgstr "Gem fejlede."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr "Fejl under upload af pdf. Prøv venligt igen."
|
msgstr "Fejl under upload af pdf. Prøv venligt igen."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Er du sikker på at du vil forlade editoren uden at gemme dine ændringer?"
|
"Er du sikker på at du vil forlade editoren uden at gemme dine ændringer?"
|
||||||
|
|||||||
+2490
-2458
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2022-07-26 08:58+0000\n"
|
"PO-Revision-Date: 2022-07-26 08:58+0000\n"
|
||||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||||
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -129,18 +129,18 @@ msgstr "WeChat Pay"
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr "Mercado Pago"
|
msgstr "Mercado Pago"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Fortfahren"
|
msgstr "Fortfahren"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "Zahlung wird bestätigt …"
|
msgstr "Zahlung wird bestätigt …"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr "Zahlungsmethode nicht verfügbar"
|
msgstr "Zahlungsmethode nicht verfügbar"
|
||||||
|
|
||||||
@@ -484,49 +484,49 @@ msgstr "Minuten"
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "Check-in-QR-Code"
|
msgstr "Check-in-QR-Code"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr "Die Hintergrund-PDF-Datei konnte nicht geladen werden:"
|
msgstr "Die Hintergrund-PDF-Datei konnte nicht geladen werden:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "Gruppe von Objekten"
|
msgstr "Gruppe von Objekten"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Text-Objekt"
|
msgstr "Text-Objekt"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "QR-Code-Bereich"
|
msgstr "QR-Code-Bereich"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Bildbereich"
|
msgstr "Bildbereich"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Event-Ticketshop von pretix"
|
msgstr "Event-Ticketshop von pretix"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "Objekt"
|
msgstr "Objekt"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Ticket-Design"
|
msgstr "Ticket-Design"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "Speichern fehlgeschlagen."
|
msgstr "Speichern fehlgeschlagen."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Es gab ein Problem beim Hochladen der PDF-Datei, bitte erneut versuchen."
|
"Es gab ein Problem beim Hochladen der PDF-Datei, bitte erneut versuchen."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Möchten Sie den Editor wirklich schließen ohne Ihre Änderungen zu speichern?"
|
"Möchten Sie den Editor wirklich schließen ohne Ihre Änderungen zu speichern?"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2022-07-26 08:58+0000\n"
|
"PO-Revision-Date: 2022-07-26 08:58+0000\n"
|
||||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||||
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
|
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
|
||||||
@@ -129,18 +129,18 @@ msgstr "WeChat Pay"
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr "Mercado Pago"
|
msgstr "Mercado Pago"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Fortfahren"
|
msgstr "Fortfahren"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "Zahlung wird bestätigt …"
|
msgstr "Zahlung wird bestätigt …"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr "Zahlungsmethode nicht verfügbar"
|
msgstr "Zahlungsmethode nicht verfügbar"
|
||||||
|
|
||||||
@@ -483,49 +483,49 @@ msgstr "Minuten"
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "Check-in-QR-Code"
|
msgstr "Check-in-QR-Code"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr "Die Hintergrund-PDF-Datei konnte nicht geladen werden:"
|
msgstr "Die Hintergrund-PDF-Datei konnte nicht geladen werden:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "Gruppe von Objekten"
|
msgstr "Gruppe von Objekten"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Text-Objekt"
|
msgstr "Text-Objekt"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "QR-Code-Bereich"
|
msgstr "QR-Code-Bereich"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Bildbereich"
|
msgstr "Bildbereich"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Event-Ticketshop von pretix"
|
msgstr "Event-Ticketshop von pretix"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "Objekt"
|
msgstr "Objekt"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Ticket-Design"
|
msgstr "Ticket-Design"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "Speichern fehlgeschlagen."
|
msgstr "Speichern fehlgeschlagen."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Es gab ein Problem beim Hochladen der PDF-Datei, bitte erneut versuchen."
|
"Es gab ein Problem beim Hochladen der PDF-Datei, bitte erneut versuchen."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Möchtest du den Editor wirklich schließen ohne Ihre Änderungen zu speichern?"
|
"Möchtest du den Editor wirklich schließen ohne Ihre Änderungen zu speichern?"
|
||||||
|
|||||||
+2054
-2212
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -128,18 +128,18 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -468,48 +468,48 @@ msgstr ""
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
+2058
-2281
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2019-10-03 19:00+0000\n"
|
"PO-Revision-Date: 2019-10-03 19:00+0000\n"
|
||||||
"Last-Translator: Chris Spy <chrispiropoulou@hotmail.com>\n"
|
"Last-Translator: Chris Spy <chrispiropoulou@hotmail.com>\n"
|
||||||
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -131,7 +131,7 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgctxt "widget"
|
#| msgctxt "widget"
|
||||||
@@ -139,13 +139,13 @@ msgstr ""
|
|||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Συνέχεια"
|
msgstr "Συνέχεια"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -518,51 +518,51 @@ msgstr ""
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "Έλεγχος QR"
|
msgstr "Έλεγχος QR"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Το αρχείο φόντου PDF δεν ήταν δυνατό να φορτωθεί για τον ακόλουθο λόγο:"
|
"Το αρχείο φόντου PDF δεν ήταν δυνατό να φορτωθεί για τον ακόλουθο λόγο:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "Ομάδα αντικειμένων"
|
msgstr "Ομάδα αντικειμένων"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Αντικείμενο κειμένου"
|
msgstr "Αντικείμενο κειμένου"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "Περιοχή Barcode"
|
msgstr "Περιοχή Barcode"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Barcode area"
|
#| msgid "Barcode area"
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Περιοχή Barcode"
|
msgstr "Περιοχή Barcode"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Υποστηρίζεται από το Pretix"
|
msgstr "Υποστηρίζεται από το Pretix"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "Αντικείμενο"
|
msgstr "Αντικείμενο"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Σχεδιασμός εισιτηρίων"
|
msgstr "Σχεδιασμός εισιτηρίων"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "Η αποθήκευση απέτυχε."
|
msgstr "Η αποθήκευση απέτυχε."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr "Σφάλμα κατά τη μεταφόρτωση του αρχείου PDF, δοκιμάστε ξανά."
|
msgstr "Σφάλμα κατά τη μεταφόρτωση του αρχείου PDF, δοκιμάστε ξανά."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Θέλετε πραγματικά να αφήσετε τον επεξεργαστή χωρίς να αποθηκεύσετε τις "
|
"Θέλετε πραγματικά να αφήσετε τον επεξεργαστή χωρίς να αποθηκεύσετε τις "
|
||||||
|
|||||||
+2067
-2290
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2021-11-25 21:00+0000\n"
|
"PO-Revision-Date: 2021-11-25 21:00+0000\n"
|
||||||
"Last-Translator: Ismael Menéndez Fernández <ismael.menendez@balidea.com>\n"
|
"Last-Translator: Ismael Menéndez Fernández <ismael.menendez@balidea.com>\n"
|
||||||
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
|
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||||
@@ -131,18 +131,18 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Continuar"
|
msgstr "Continuar"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "Confirmando el pago…"
|
msgstr "Confirmando el pago…"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -483,51 +483,51 @@ msgstr "minutos"
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "QR de Chequeo"
|
msgstr "QR de Chequeo"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"El archivo PDF de fondo no ha podido ser cargado debido al siguiente motivo:"
|
"El archivo PDF de fondo no ha podido ser cargado debido al siguiente motivo:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "Grupo de objetos"
|
msgstr "Grupo de objetos"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Objeto de texto"
|
msgstr "Objeto de texto"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "Área para código de barras"
|
msgstr "Área para código de barras"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Área de imagen"
|
msgstr "Área de imagen"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Proveído por pretix"
|
msgstr "Proveído por pretix"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "Objeto"
|
msgstr "Objeto"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Diseño del ticket"
|
msgstr "Diseño del ticket"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "El guardado falló."
|
msgstr "El guardado falló."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ha habido un error mientras se cargaba el archivo PDF, por favor, intente de "
|
"Ha habido un error mientras se cargaba el archivo PDF, por favor, intente de "
|
||||||
"nuevo."
|
"nuevo."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr "¿Realmente desea salir del editor sin haber guardado sus cambios?"
|
msgstr "¿Realmente desea salir del editor sin haber guardado sus cambios?"
|
||||||
|
|
||||||
|
|||||||
+2058
-2256
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2021-11-10 05:00+0000\n"
|
"PO-Revision-Date: 2021-11-10 05:00+0000\n"
|
||||||
"Last-Translator: Jaakko Rinta-Filppula <jaakko@r-f.fi>\n"
|
"Last-Translator: Jaakko Rinta-Filppula <jaakko@r-f.fi>\n"
|
||||||
"Language-Team: Finnish <https://translate.pretix.eu/projects/pretix/pretix-"
|
"Language-Team: Finnish <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||||
@@ -131,7 +131,7 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgctxt "widget"
|
#| msgctxt "widget"
|
||||||
@@ -139,13 +139,13 @@ msgstr ""
|
|||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Jatka"
|
msgstr "Jatka"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "Maksuasi vahvistetaan …"
|
msgstr "Maksuasi vahvistetaan …"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -487,50 +487,50 @@ msgstr ""
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Tekstiobjekti"
|
msgstr "Tekstiobjekti"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "Viivakoodialue"
|
msgstr "Viivakoodialue"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Barcode area"
|
#| msgid "Barcode area"
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Viivakoodialue"
|
msgstr "Viivakoodialue"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "Tallennus epäonnistui."
|
msgstr "Tallennus epäonnistui."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
+2086
-2280
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: French\n"
|
"Project-Id-Version: French\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2022-04-07 10:40+0000\n"
|
"PO-Revision-Date: 2022-04-07 10:40+0000\n"
|
||||||
"Last-Translator: Eva-Maria Obermann <obermann@rami.io>\n"
|
"Last-Translator: Eva-Maria Obermann <obermann@rami.io>\n"
|
||||||
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -130,7 +130,7 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgctxt "widget"
|
#| msgctxt "widget"
|
||||||
@@ -138,13 +138,13 @@ msgstr ""
|
|||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Continuer"
|
msgstr "Continuer"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "Confirmation de votre paiment…"
|
msgstr "Confirmation de votre paiment…"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -511,53 +511,53 @@ msgstr ""
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "Enregistrement QR code"
|
msgstr "Enregistrement QR code"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Le fichier PDF généré en arrière-plan n'a pas pu être chargé pour la raison "
|
"Le fichier PDF généré en arrière-plan n'a pas pu être chargé pour la raison "
|
||||||
"suivante :"
|
"suivante :"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "Groupe d'objets"
|
msgstr "Groupe d'objets"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Objet texte"
|
msgstr "Objet texte"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "Zone de code-barres"
|
msgstr "Zone de code-barres"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Barcode area"
|
#| msgid "Barcode area"
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Zone de code-barres"
|
msgstr "Zone de code-barres"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Propulsé par pretix"
|
msgstr "Propulsé par pretix"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "Objet"
|
msgstr "Objet"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Conception des billets"
|
msgstr "Conception des billets"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "L'enregistrement a échoué."
|
msgstr "L'enregistrement a échoué."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Erreur lors du téléchargement de votre fichier PDF, veuillez réessayer."
|
"Erreur lors du téléchargement de votre fichier PDF, veuillez réessayer."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Voulez-vous vraiment quitter l'éditeur sans sauvegarder vos modifications ?"
|
"Voulez-vous vraiment quitter l'éditeur sans sauvegarder vos modifications ?"
|
||||||
|
|||||||
+2067
-2255
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2022-02-22 22:00+0000\n"
|
"PO-Revision-Date: 2022-02-22 22:00+0000\n"
|
||||||
"Last-Translator: Ismael Menéndez Fernández <ismael.menendez@balidea.com>\n"
|
"Last-Translator: Ismael Menéndez Fernández <ismael.menendez@balidea.com>\n"
|
||||||
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix-"
|
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||||
@@ -131,18 +131,18 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Continuar"
|
msgstr "Continuar"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "Confirmando o pagamento…"
|
msgstr "Confirmando o pagamento…"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -483,49 +483,49 @@ msgstr "minutos"
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "QR de validación"
|
msgstr "QR de validación"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr "O arquivo PDF de fondo non se puido cargar polo motivo seguinte:"
|
msgstr "O arquivo PDF de fondo non se puido cargar polo motivo seguinte:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "Grupo de obxectos"
|
msgstr "Grupo de obxectos"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Obxecto de texto"
|
msgstr "Obxecto de texto"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "Área para código de barras"
|
msgstr "Área para código de barras"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Área de imaxe"
|
msgstr "Área de imaxe"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Desenvolto por Pretix"
|
msgstr "Desenvolto por Pretix"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "Obxecto"
|
msgstr "Obxecto"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Deseño do tícket"
|
msgstr "Deseño do tícket"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "O gardado fallou."
|
msgstr "O gardado fallou."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Houbo un erro mentres se cargaba o arquivo PDF. Por favor, inténteo de novo."
|
"Houbo un erro mentres se cargaba o arquivo PDF. Por favor, inténteo de novo."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr "Realmente desexa saír do editor sen gardar os cambios?"
|
msgstr "Realmente desexa saír do editor sen gardar os cambios?"
|
||||||
|
|
||||||
|
|||||||
+2054
-2212
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2021-09-24 13:54+0000\n"
|
"PO-Revision-Date: 2021-09-24 13:54+0000\n"
|
||||||
"Last-Translator: ofirtro <ofir.tro@gmail.com>\n"
|
"Last-Translator: ofirtro <ofir.tro@gmail.com>\n"
|
||||||
"Language-Team: Hebrew <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: Hebrew <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -130,18 +130,18 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "המשך"
|
msgstr "המשך"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "מאמת את התשלום שלך…"
|
msgstr "מאמת את התשלום שלך…"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -472,48 +472,48 @@ msgstr ""
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
+2054
-2222
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2020-01-24 08:00+0000\n"
|
"PO-Revision-Date: 2020-01-24 08:00+0000\n"
|
||||||
"Last-Translator: Prokaj Miklós <mixolid0@gmail.com>\n"
|
"Last-Translator: Prokaj Miklós <mixolid0@gmail.com>\n"
|
||||||
"Language-Team: Hungarian <https://translate.pretix.eu/projects/pretix/pretix-"
|
"Language-Team: Hungarian <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||||
@@ -131,7 +131,7 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgctxt "widget"
|
#| msgctxt "widget"
|
||||||
@@ -139,13 +139,13 @@ msgstr ""
|
|||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Folytatás"
|
msgstr "Folytatás"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "A fizetés megerősítése…"
|
msgstr "A fizetés megerősítése…"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -511,50 +511,50 @@ msgstr ""
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "Check in QR"
|
msgstr "Check in QR"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr "A PDF háttér fájl nem tölthető be a következők miatt:"
|
msgstr "A PDF háttér fájl nem tölthető be a következők miatt:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "tárgy csoport"
|
msgstr "tárgy csoport"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Szöveg"
|
msgstr "Szöveg"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "Vonalkód terület"
|
msgstr "Vonalkód terület"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Barcode area"
|
#| msgid "Barcode area"
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Vonalkód terület"
|
msgstr "Vonalkód terület"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "pretix által működtetett"
|
msgstr "pretix által működtetett"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "objektum"
|
msgstr "objektum"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Jegy design"
|
msgstr "Jegy design"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "Mentés sikertelen."
|
msgstr "Mentés sikertelen."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr "Hiba a PDF fájl feltöltése közben, próbálja újra."
|
msgstr "Hiba a PDF fájl feltöltése közben, próbálja újra."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr "Biztosan ki akar lépni a szerkesztőből a változtatások mentése nélkül?"
|
msgstr "Biztosan ki akar lépni a szerkesztőből a változtatások mentése nélkül?"
|
||||||
|
|
||||||
|
|||||||
+2053
-2250
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2022-05-08 19:00+0000\n"
|
"PO-Revision-Date: 2022-05-08 19:00+0000\n"
|
||||||
"Last-Translator: Emanuele Signoretta <signorettae@gmail.com>\n"
|
"Last-Translator: Emanuele Signoretta <signorettae@gmail.com>\n"
|
||||||
"Language-Team: Italian <https://translate.pretix.eu/projects/pretix/pretix-"
|
"Language-Team: Italian <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||||
@@ -133,18 +133,18 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Continua"
|
msgstr "Continua"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "Stiamo processando il tuo pagamento …"
|
msgstr "Stiamo processando il tuo pagamento …"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -485,48 +485,48 @@ msgstr "minuti"
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "Check-in con QR"
|
msgstr "Check-in con QR"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr "Il file PDF di sfondo non può essere caricato per le seguenti ragioni:"
|
msgstr "Il file PDF di sfondo non può essere caricato per le seguenti ragioni:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "Gruppo di oggetti"
|
msgstr "Gruppo di oggetti"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Oggetto testo"
|
msgstr "Oggetto testo"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "Area codice a barra"
|
msgstr "Area codice a barra"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Area immagini"
|
msgstr "Area immagini"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Powered by Pretix"
|
msgstr "Powered by Pretix"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "Oggetto"
|
msgstr "Oggetto"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Design biglietto"
|
msgstr "Design biglietto"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "Salvataggio fallito."
|
msgstr "Salvataggio fallito."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr "Errore durante il caricamento del tuo file PDF, prova di nuovo."
|
msgstr "Errore durante il caricamento del tuo file PDF, prova di nuovo."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr "Vuoi davvero abbandonare l'editor senza salvare le modifiche?"
|
msgstr "Vuoi davvero abbandonare l'editor senza salvare le modifiche?"
|
||||||
|
|
||||||
|
|||||||
+2054
-2218
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2022-03-15 00:00+0000\n"
|
"PO-Revision-Date: 2022-03-15 00:00+0000\n"
|
||||||
"Last-Translator: Yuriko Matsunami <y.matsunami@enobyte.com>\n"
|
"Last-Translator: Yuriko Matsunami <y.matsunami@enobyte.com>\n"
|
||||||
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix-"
|
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||||
@@ -131,18 +131,18 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "次へ"
|
msgstr "次へ"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "お支払い内容の確認"
|
msgstr "お支払い内容の確認"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -482,48 +482,48 @@ msgstr "分"
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "チェックイン用QRコード"
|
msgstr "チェックイン用QRコード"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr "以下の理由によりPDFファイルの読み込みに失敗しました:"
|
msgstr "以下の理由によりPDFファイルの読み込みに失敗しました:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "オブジェクトグループ"
|
msgstr "オブジェクトグループ"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "テキストオブジェクト"
|
msgstr "テキストオブジェクト"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "バーコードエリア"
|
msgstr "バーコードエリア"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "画像エリア"
|
msgstr "画像エリア"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Pretixのイベントチケット売り場"
|
msgstr "Pretixのイベントチケット売り場"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "オブジェクト"
|
msgstr "オブジェクト"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "チケットのデザイン"
|
msgstr "チケットのデザイン"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "保存できませんでした。"
|
msgstr "保存できませんでした。"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr "PDFのアップロード中に問題が発生しました。再試行してください。"
|
msgstr "PDFのアップロード中に問題が発生しました。再試行してください。"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr "変更内容を保存せずに編集を終了しますか?"
|
msgstr "変更内容を保存せずに編集を終了しますか?"
|
||||||
|
|
||||||
|
|||||||
+2052
-2264
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2022-04-06 03:00+0000\n"
|
"PO-Revision-Date: 2022-04-06 03:00+0000\n"
|
||||||
"Last-Translator: Liga V <lerning_by_dreaming@gmx.de>\n"
|
"Last-Translator: Liga V <lerning_by_dreaming@gmx.de>\n"
|
||||||
"Language-Team: Latvian <https://translate.pretix.eu/projects/pretix/pretix-"
|
"Language-Team: Latvian <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||||
@@ -132,18 +132,18 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Turpināt"
|
msgstr "Turpināt"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "Jūsu maksājums tiek apstrādāts …"
|
msgstr "Jūsu maksājums tiek apstrādāts …"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -484,49 +484,49 @@ msgstr "minūtes"
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "Reģistrācijas QR"
|
msgstr "Reģistrācijas QR"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr "Fona PDF fails nevarēja ielādēties sekojoša iemesla dēļ:"
|
msgstr "Fona PDF fails nevarēja ielādēties sekojoša iemesla dēļ:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "Objektu grupa"
|
msgstr "Objektu grupa"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Teksta objekts"
|
msgstr "Teksta objekts"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "Svītru koda lauks"
|
msgstr "Svītru koda lauks"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Attēla lauks"
|
msgstr "Attēla lauks"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Pretix atbalstīts"
|
msgstr "Pretix atbalstīts"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "Objekts"
|
msgstr "Objekts"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Biļešu dizains"
|
msgstr "Biļešu dizains"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "Saglabāšana neizdevās."
|
msgstr "Saglabāšana neizdevās."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Radusies kļūda augšupielādējot jūsu PDF failu, lūdzu, mēģiniet vēlreiz."
|
"Radusies kļūda augšupielādējot jūsu PDF failu, lūdzu, mēģiniet vēlreiz."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vai jūs tiešām vēlaties iziet no rediģēšanas lauka bez veikto izmaiņu "
|
"Vai jūs tiešām vēlaties iziet no rediģēšanas lauka bez veikto izmaiņu "
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2022-06-20 02:00+0000\n"
|
"PO-Revision-Date: 2022-06-20 02:00+0000\n"
|
||||||
"Last-Translator: fyksen <fredrik@fyksen.me>\n"
|
"Last-Translator: fyksen <fredrik@fyksen.me>\n"
|
||||||
"Language-Team: Norwegian Bokmål <https://translate.pretix.eu/projects/pretix/"
|
"Language-Team: Norwegian Bokmål <https://translate.pretix.eu/projects/pretix/"
|
||||||
@@ -129,18 +129,18 @@ msgstr "WeChat Pay"
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr "Mercado Pago"
|
msgstr "Mercado Pago"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Fortsett"
|
msgstr "Fortsett"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "Bekrefter betalingen din…"
|
msgstr "Bekrefter betalingen din…"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr "Betalingsmetode ikke tilgjengelig"
|
msgstr "Betalingsmetode ikke tilgjengelig"
|
||||||
|
|
||||||
@@ -479,48 +479,48 @@ msgstr "minutter"
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "Sjekk-in QR"
|
msgstr "Sjekk-in QR"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr "PDF bakgrunnsfilen kunne ikke lastes av følgende årsak:"
|
msgstr "PDF bakgrunnsfilen kunne ikke lastes av følgende årsak:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "Gruppe med objekter"
|
msgstr "Gruppe med objekter"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Tekst objekt"
|
msgstr "Tekst objekt"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "Strekkodeområde"
|
msgstr "Strekkodeområde"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Bildeområde"
|
msgstr "Bildeområde"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Drevet av pretix"
|
msgstr "Drevet av pretix"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "Objekt"
|
msgstr "Objekt"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Billett design"
|
msgstr "Billett design"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "Lagring feilet."
|
msgstr "Lagring feilet."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr "Feil ved opplasting av PDF fil, prøv på nytt."
|
msgstr "Feil ved opplasting av PDF fil, prøv på nytt."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr "Vil du avslutte editoren uten å lagre endringene?"
|
msgstr "Vil du avslutte editoren uten å lagre endringene?"
|
||||||
|
|
||||||
|
|||||||
+2073
-2318
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: 1\n"
|
"Project-Id-Version: 1\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-29 20:31+0000\n"
|
"POT-Creation-Date: 2022-11-07 15:22+0000\n"
|
||||||
"PO-Revision-Date: 2021-10-29 02:00+0000\n"
|
"PO-Revision-Date: 2021-10-29 02:00+0000\n"
|
||||||
"Last-Translator: Maarten van den Berg <maartenberg1@gmail.com>\n"
|
"Last-Translator: Maarten van den Berg <maartenberg1@gmail.com>\n"
|
||||||
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -130,18 +130,18 @@ msgstr ""
|
|||||||
msgid "Mercado Pago"
|
msgid "Mercado Pago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:163
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:159
|
||||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Doorgaan"
|
msgstr "Doorgaan"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:221
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:217
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
|
||||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
|
||||||
msgid "Confirming your payment …"
|
msgid "Confirming your payment …"
|
||||||
msgstr "Betaling bevestigen …"
|
msgstr "Betaling bevestigen …"
|
||||||
|
|
||||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:246
|
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:242
|
||||||
msgid "Payment method unavailable"
|
msgid "Payment method unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -481,48 +481,48 @@ msgstr "minuten"
|
|||||||
msgid "Check-in QR"
|
msgid "Check-in QR"
|
||||||
msgstr "QR-code voor check-in"
|
msgstr "QR-code voor check-in"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:384
|
#: pretix/static/pretixcontrol/js/ui/editor.js:378
|
||||||
msgid "The PDF background file could not be loaded for the following reason:"
|
msgid "The PDF background file could not be loaded for the following reason:"
|
||||||
msgstr "Het PDF-achtergrondbestand kon niet geladen worden met als reden:"
|
msgstr "Het PDF-achtergrondbestand kon niet geladen worden met als reden:"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:653
|
#: pretix/static/pretixcontrol/js/ui/editor.js:648
|
||||||
msgid "Group of objects"
|
msgid "Group of objects"
|
||||||
msgstr "Groep van objecten"
|
msgstr "Groep van objecten"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:659
|
#: pretix/static/pretixcontrol/js/ui/editor.js:654
|
||||||
msgid "Text object"
|
msgid "Text object"
|
||||||
msgstr "Tekstobject"
|
msgstr "Tekstobject"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:661
|
#: pretix/static/pretixcontrol/js/ui/editor.js:656
|
||||||
msgid "Barcode area"
|
msgid "Barcode area"
|
||||||
msgstr "Barcode gebied"
|
msgstr "Barcode gebied"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:663
|
#: pretix/static/pretixcontrol/js/ui/editor.js:658
|
||||||
msgid "Image area"
|
msgid "Image area"
|
||||||
msgstr "Afbeeldingsgebied"
|
msgstr "Afbeeldingsgebied"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:665
|
#: pretix/static/pretixcontrol/js/ui/editor.js:660
|
||||||
msgid "Powered by pretix"
|
msgid "Powered by pretix"
|
||||||
msgstr "Mogelijk gemaakt door pretix"
|
msgstr "Mogelijk gemaakt door pretix"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:667
|
#: pretix/static/pretixcontrol/js/ui/editor.js:662
|
||||||
msgid "Object"
|
msgid "Object"
|
||||||
msgstr "Object"
|
msgstr "Object"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:671
|
#: pretix/static/pretixcontrol/js/ui/editor.js:666
|
||||||
msgid "Ticket design"
|
msgid "Ticket design"
|
||||||
msgstr "Ticketontwerp"
|
msgstr "Ticketontwerp"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:961
|
#: pretix/static/pretixcontrol/js/ui/editor.js:956
|
||||||
msgid "Saving failed."
|
msgid "Saving failed."
|
||||||
msgstr "Opslaan mislukt."
|
msgstr "Opslaan mislukt."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1011
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1050
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1045
|
||||||
msgid "Error while uploading your PDF file, please try again."
|
msgid "Error while uploading your PDF file, please try again."
|
||||||
msgstr "Probleem bij het uploaden van het PDF-bestand, probeer het opnieuw."
|
msgstr "Probleem bij het uploaden van het PDF-bestand, probeer het opnieuw."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/editor.js:1035
|
#: pretix/static/pretixcontrol/js/ui/editor.js:1030
|
||||||
msgid "Do you really want to leave the editor without saving your changes?"
|
msgid "Do you really want to leave the editor without saving your changes?"
|
||||||
msgstr "Wilt u de editor verlaten zonder uw wijzigingen op te slaan?"
|
msgstr "Wilt u de editor verlaten zonder uw wijzigingen op te slaan?"
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user