Compare commits

...
Author SHA1 Message Date
Martin Gross 1c4173a2ab eMail: Ratelimit exponential backup for Amazon SES 2022-04-19 10:39:33 +02:00
Raphael Michel e9c440ceed POS: Allow clients to fetch payment details 2022-04-15 14:09:51 +02:00
Raphael Michel 5cd79ee2b0 Adjust German translation of "Box office" 2022-04-15 13:35:08 +02:00
Raphael Michel 15c6e22414 POS: Show reference for Zettle payments 2022-04-15 13:13:57 +02:00
Raphael Michel 8d04a0183a Docs: Updates to exhibitor API 2022-04-14 15:53:35 +02:00
Richard Schreiber 2f6881934e Calendar view: improve differentiation between events’ states (Z#173939) (#2595) 2022-04-14 15:51:46 +02:00
Richard Schreiber 8f7bc59214 Calendar view: make focus-outline visible (#2594) 2022-04-14 15:51:20 +02:00
Raphael Michel 9bf3b54a83 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4658 of 4658 strings)

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

powered by weblate
2022-04-13 09:52:47 +02:00
Raphael Michel 82cd6e320d Translations: Update German
Currently translated at 100.0% (4658 of 4658 strings)

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

powered by weblate
2022-04-13 09:52:47 +02:00
Raphael Michel e308b38d6f Fix string formatting issue in log message 2022-04-12 17:14:43 +02:00
Raphael Michel 6b7a2e1981 Fix flake8 issue 2022-04-12 11:27:00 +02:00
Richard SchreiberandRaphael Michel d19cb14dc1 Voucher redemption: Raise 404 error if subevent_pk is not an integer (#2590)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-04-12 11:12:06 +02:00
Raphael Michel 3e8e454e92 Fix gettext formatting issues 2022-04-12 10:53:03 +02:00
Raphael Michel f46de92303 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4658 of 4658 strings)

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

powered by weblate
2022-04-12 10:50:20 +02:00
Raphael Michel aeba9542be Translations: Update German
Currently translated at 100.0% (4658 of 4658 strings)

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

powered by weblate
2022-04-12 10:50:20 +02:00
Raphael Michel a380044639 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4646 of 4646 strings)

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

powered by weblate
2022-04-12 10:50:20 +02:00
Raphael Michel 4cbe50f3a2 Translations: Update German
Currently translated at 100.0% (4646 of 4646 strings)

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

powered by weblate
2022-04-12 10:50:20 +02:00
Raphael Michel 278d54e780 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-04-12 10:33:01 +02:00
Raphael Michel 9634598952 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4646 of 4646 strings)

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

powered by weblate
2022-04-12 10:32:02 +02:00
Raphael Michel b60583168b Translations: Update German
Currently translated at 100.0% (4646 of 4646 strings)

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

powered by weblate
2022-04-12 10:32:02 +02:00
Raphael Michel ea8630d3d7 Fix order email subject in wrong language if plugin changes order.locale (#2588) 2022-04-12 10:31:49 +02:00
Raphael Michel 3cdf578c14 Allow to add a comment when cancelling an order (#2580) 2022-04-12 09:53:02 +02:00
Richard Schreiber f7c0921f18 Check-in list: Fix salutation not being localized in CSV-export (Z#184037) (#2586) 2022-04-12 09:51:20 +02:00
Raphael Michel a7ae556478 Fix order email subject in wrong language if plugin changes order.locale 2022-04-12 09:33:10 +02:00
Raphael MichelandRichard Schreiber a755bfd22c Allow to bulk-edit devices (#2583)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2022-04-12 08:54:45 +02:00
Raphael Michel 22920a7318 Analyze check-in rules for missing products (#2582) 2022-04-11 18:53:07 +02:00
Raphael Michel cf6a8c333a Improve visual indicators in multiselect select2 components 2022-04-09 14:26:39 +02:00
Raphael Michel 2623bfd2db Item selection typeahead: Use consistent ordering of items 2022-04-09 14:26:27 +02:00
Raphael Michel dcc1a93b72 Fix CI builds (#2581) 2022-04-08 17:50:48 +02:00
Raphael Michel 3aeea82d2e Allow to filter log view by action type 2022-04-07 17:58:56 +02:00
Raphael Michel 732621f121 Fix incorrect log display of reverted checkins 2022-04-07 17:58:45 +02:00
Raphael Michel 24e7be4142 Allow plugins to declare fonts "pdf-only" 2022-04-07 17:58:33 +02:00
Raphael Michel 20c6f0b327 Fix logging in shell_scoped with --override 2022-04-07 14:24:27 +02:00
luto e4817518d8 Add Czech translation 2022-04-07 14:07:16 +02:00
Eva-Maria Obermann 35c443f90f Translated on translate.pretix.eu (French)
Currently translated at 63.7% (109 of 171 strings)

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

powered by weblate
2022-04-07 14:07:00 +02:00
Eva-Maria Obermann de669156cd Translations: Update French
Currently translated at 48.1% (2237 of 4646 strings)

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

powered by weblate
2022-04-07 14:07:00 +02:00
Liga V d8e3b49b04 Translated on translate.pretix.eu (Latvian)
Currently translated at 100.0% (171 of 171 strings)

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

powered by weblate
2022-04-07 14:07:00 +02:00
Svyatoslav 567f68965d Translations: Update Latvian
Currently translated at 46.3% (2154 of 4646 strings)

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

powered by weblate
2022-04-07 14:07:00 +02:00
Zane Smite 65f6892896 Translations: Update Latvian
Currently translated at 46.3% (2154 of 4646 strings)

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

powered by weblate
2022-04-07 14:07:00 +02:00
Liga V ec9800b215 Translations: Update Latvian
Currently translated at 46.3% (2154 of 4646 strings)

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

powered by weblate
2022-04-07 14:07:00 +02:00
Svyatoslav 9010d8f6a1 Translations: Update Latvian
Currently translated at 43.0% (2001 of 4646 strings)

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

powered by weblate
2022-04-07 14:07:00 +02:00
Svyatoslav f260945fdf Translations: Update Latvian
Currently translated at 43.0% (2000 of 4646 strings)

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

powered by weblate
2022-04-07 14:07:00 +02:00
Liga V b7241825c3 Translations: Update Latvian
Currently translated at 43.0% (2000 of 4646 strings)

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

powered by weblate
2022-04-07 14:07:00 +02:00
Raphael Michel c9ed155870 PDF renderer: Fix placeholers using meta: and itemmeta: 2022-04-07 12:40:40 +02:00
Martin Gross 69d0a20674 Checkin Log: Sort devices by device ID 2022-04-07 09:10:03 +02:00
Raphael Michel b699e8977a Fix incorrect translation of <= from json logic to SQL 2022-04-06 18:56:53 +02:00
Raphael Michel 4f25d8ba89 shell_scoped: Add --print-sql argument 2022-04-06 18:56:18 +02:00
Raphael Michel 71f5303a5e Fix invisible error message when mixing gift card products and admission products 2022-04-06 16:44:20 +02:00
Raphael Michel 69f91e54e6 Make error message about tax rules and gift cards easier to understand 2022-04-06 16:43:52 +02:00
Raphael Michel bcee2c231a Use internal name of product in filter forms 2022-04-06 13:08:16 +02:00
dependabot[bot] d1745bb703 Bump rollup from 2.68.0 to 2.70.1 in /src/pretix/static/npm_dir (#2567)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-05 11:05:20 +02:00
dependabot[bot] f468b393c0 Bump @babel/core from 7.17.5 to 7.17.8 in /src/pretix/static/npm_dir (#2568)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-05 11:05:09 +02:00
Maico Timmerman 4b0c38e4ee Widget: Introduce addCloseListener (#2569) 2022-04-05 11:04:54 +02:00
Maico Timmerman 6768bbb486 Event cancellation: Fix default email subject translations (#2574) 2022-04-05 11:04:12 +02:00
Liga V f2c9b46d3e Translations: Update Latvian
Currently translated at 39.2% (1825 of 4646 strings)

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

powered by weblate
2022-04-05 11:03:12 +02:00
Liga V b7a3db2ac0 Translations: Update Latvian
Currently translated at 39.0% (1816 of 4646 strings)

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

powered by weblate
2022-04-05 11:03:12 +02:00
Liga V 307a6654f2 Translations: Update Latvian
Currently translated at 37.1% (1726 of 4646 strings)

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

powered by weblate
2022-04-05 11:03:12 +02:00
Ismael Menéndez Fernández f2cc8c77e8 Translations: Update Spanish
Currently translated at 64.1% (2982 of 4646 strings)

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

powered by weblate
2022-04-05 11:03:12 +02:00
Raphael Michel 830d48255e Translations: Update Latvian
Currently translated at 37.1% (1726 of 4646 strings)

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

powered by weblate
2022-04-05 11:03:12 +02:00
Liga V df2b428aa1 Translated on translate.pretix.eu (Latvian)
Currently translated at 100.0% (171 of 171 strings)

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

powered by weblate
2022-04-05 11:03:12 +02:00
Liga V 7d1d05de02 Translations: Update Latvian
Currently translated at 37.1% (1726 of 4646 strings)

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

powered by weblate
2022-04-05 11:03:12 +02:00
Liga V 921d8b6057 Translations: Update Latvian
Currently translated at 30.8% (1432 of 4646 strings)

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

powered by weblate
2022-04-05 11:03:12 +02:00
Ismael Menéndez Fernández 0b13ec49f1 Translations: Update Galician
Currently translated at 11.5% (538 of 4646 strings)

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

powered by weblate
2022-04-05 11:03:12 +02:00
Anna-itk 62ef89f87c Translated on translate.pretix.eu (Danish)
Currently translated at 58.4% (100 of 171 strings)

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

powered by weblate
2022-04-05 11:03:12 +02:00
Anna-itk d0920caf32 Translations: Update Danish
Currently translated at 37.0% (1720 of 4646 strings)

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

powered by weblate
2022-04-05 11:03:12 +02:00
Raphael Michel d0474afdfe Fix further Pillow compatibility issues 2022-04-05 09:57:11 +02:00
Raphael Michel 4ab298dd10 Order API search: Disable voucher search to work around an immediate performance problem 2022-04-05 09:55:08 +02:00
Raphael Michel db39b89ae4 Fix Pillow import to resolve deprecation warning 2022-04-04 19:14:53 +02:00
Raphael Michel 162ae3ead7 Waiting list: Use a more neutral success message 2022-04-04 18:42:17 +02:00
Raphael Michel 65a7e8516e Display self-service cancellation fee during backend cancellation 2022-04-04 13:42:26 +02:00
Raphael Michel cccd4af6dd Create log entry for question when cloing an item 2022-04-04 12:04:15 +02:00
Raphael Michel 751cfdf203 Fix attendee emails not being sent on free boxoffice orders 2022-04-04 12:02:03 +02:00
Raphael Michel 898776b617 Fix revocation of secrets that did not exist in the first place 2022-04-03 16:33:02 +02:00
Raphael Michel b4db81d6c3 Update MANIFEST.in 2022-03-31 22:56:13 +02:00
Raphael Michel e96fdf2a2c Bump to 4.9.0.dev0 2022-03-31 22:42:44 +02:00
Raphael Michel 9052b39f9c Bump to 4.8.0 2022-03-31 22:41:45 +02:00
Raphael Michel 725725223e Docs: Remove duplicate API endpoint 2022-03-31 21:25:06 +02:00
pretix translation botandRaphael Michel 71b4c3117f Update translations (#2565)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-03-31 20:57:12 +02:00
Raphael Michel 5e1dc5ac5b Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-03-31 14:36:20 +02:00
Raphael Michel 0b403b7b3a Fix accidental test failures 2022-03-30 18:12:39 +02:00
dependabot[bot] be46a00d38 Bump minimist from 1.2.5 to 1.2.6 in /src/pretix/static/npm_dir (#2557)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-30 18:03:12 +02:00
Raphael MichelandRichard Schreiber 22f3412ad0 Allow users to see the number of checkins (#2561)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2022-03-30 18:03:05 +02:00
Anna-itk c23a3fcfcd Translations: Update Danish
Currently translated at 37.0% (1720 of 4648 strings)

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

powered by weblate
2022-03-30 18:01:42 +02:00
Martin Gross 1412b0afdb Translations: Update Danish
Currently translated at 36.9% (1719 of 4648 strings)

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

powered by weblate
2022-03-30 18:01:42 +02:00
Anna-itk 60f14b6a68 Translations: Update Danish
Currently translated at 36.9% (1719 of 4648 strings)

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

powered by weblate
2022-03-30 18:01:42 +02:00
alroiv dc440d6cc5 Translations: Update Romanian
Currently translated at 1.4% (67 of 4636 strings)

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

powered by weblate
2022-03-30 18:01:42 +02:00
alroiv 7cef7b4d5d Translations: Update Spanish
Currently translated at 64.3% (2982 of 4636 strings)

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

powered by weblate
2022-03-30 18:01:42 +02:00
Raphael Michel 659a587cdf PDF render: Fall back to seat of parent position (#2559) 2022-03-30 17:44:14 +02:00
Raphael Michel ee72009e73 Improvements to PDF text placeholders (#2562) 2022-03-30 17:43:26 +02:00
Raphael Michel 69375f4092 API: Allow to change orders (#2552) 2022-03-30 17:36:10 +02:00
Raphael Michel 76475039b5 Allow to print expiry date of gift card in PDFs (#2560) 2022-03-30 17:25:29 +02:00
Martin Gross 8a8524a346 ItemList: Order items by category the same way as in presale and CategoryList 2022-03-29 10:14:34 +02:00
Raphael Michel e7996c693a Fix phone number not being saved in customer registration form 2022-03-27 15:09:53 +02:00
Richard Schreiber 551bd3e284 Fix #2556 -- Remove attestation from 2FA-device registration
As we currently do not verify attestation in 2FA-device registration, we can safely remove it. This circumvents a bug in webkit when registering Touch-ID as 2FA-device on M1 Macs. See https://bugs.webkit.org/show_bug.cgi?id=224042

For more info on why we do not use attestation, see https://fidoalliance.org/fido-technotes-the-truth-about-attestation/
2022-03-25 12:25:15 +01:00
141 changed files with 59156 additions and 51121 deletions
+1 -1
View File
@@ -55,7 +55,7 @@ jobs:
restore-keys: |
${{ runner.os }}-pip-
- 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
run: pip3 install -e ".[dev]" mysqlclient psycopg2-binary
working-directory: ./src
+1
View File
@@ -60,6 +60,7 @@ that your clients can deal with them properly:
* Support of new HTTP methods for a given API endpoint
* Support of new query parameters for a given API endpoint
* New fields contained in API responses
* Response body structure or message texts on failed requests (``4xx``, ``5xx`` response codes)
We treat the following types of changes as *backwards-incompatible*:
+260 -2
View File
@@ -68,6 +68,7 @@ positions list of objects List of order p
non-canceled positions are included.
fees list of objects List of fees included in the order total. By default, only
non-canceled fees are included.
├ id integer Internal ID of the fee record
├ fee_type string Type of fee (currently ``payment``, ``passbook``,
``other``)
├ value money (string) Fee amount
@@ -136,6 +137,10 @@ last_modified datetime Last modificati
The ``subevent`` query parameters has been added.
.. versionchanged:: 4.8
The ``order.fees.id`` attribute has been added.
.. _order-position-resource:
@@ -735,6 +740,37 @@ Generating new secrets
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to update this order.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/(id)/regenerate_secrets/
Triggers generation of a new ``secret`` attribute for a single order position.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/orderpositions/23/regenerate_secrets/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
(Full order position resource, see above.)
:param organizer: The ``slug`` field of the organizer of the event
:param event: The ``slug`` field of the event
:param code: The ``id`` field of the order position to update
:statuscode 200: no error
:statuscode 400: The order position could not be updated due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to update this order position.
Deleting orders
---------------
@@ -1046,6 +1082,9 @@ Order state operations
will instead stay paid, but all positions will be removed (or marked as canceled) and replaced by the cancellation
fee as the only component of the order.
You can control whether the customer is notified through ``send_email`` (defaults to ``true``).
You can pass a ``comment`` that can be visible to the user if it is used in the email template.
**Example request**:
.. sourcecode:: http
@@ -1057,6 +1096,7 @@ Order state operations
{
"send_email": true,
"comment": "Event was canceled.",
"cancellation_fee": null
}
@@ -1642,6 +1682,8 @@ Order position ticket download
:statuscode 409: The file is not yet ready and will now be prepared. Retry the request after waiting for a few
seconds.
.. _rest-orderpositions-manipulate:
Manipulating individual positions
---------------------------------
@@ -1649,6 +1691,11 @@ Manipulating individual positions
The ``PATCH`` method has been added for individual positions.
.. versionchanged:: 4.8
The ``PATCH`` method now supports changing items, variations, subevents, seats, prices, and tax rules.
The ``POST`` endpoint to add individual positions has been added.
.. http:patch:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/(id)/
Updates specific fields on an order position. Currently, only the following fields are supported:
@@ -1675,6 +1722,21 @@ Manipulating individual positions
and ``option_identifiers`` will be ignored. As a special case, you can submit the magic value
``"file:keep"`` as the answer to a file question to keep the current value without re-uploading it.
* ``item``
* ``variation``
* ``subevent``
* ``seat`` (specified as a string mapping to a ``string_guid``)
* ``price``
* ``tax_rule``
Changing parameters such as ``item`` or ``price`` will **not** automatically trigger creation of a new invoice,
you need to take care of that yourself.
**Example request**:
.. sourcecode:: http
@@ -1696,7 +1758,7 @@ Manipulating individual positions
Vary: Accept
Content-Type: application/json
(Full order resource, see above.)
(Full order position resource, see above.)
:param organizer: The ``slug`` field of the organizer of the event
:param event: The ``slug`` field of the event
@@ -1707,9 +1769,83 @@ Manipulating individual positions
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to update this order.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/
Adds a new position to an order. Currently, only the following fields are supported:
* ``order`` (mandatory, specified as a string mapping to a ``code``)
* ``addon_to`` (optional, specified as an integer mapping to the ``positionid`` of the parent position)
* ``item`` (mandatory)
* ``variation`` (mandatory depending on item)
* ``subevent`` (mandatory depending on event)
* ``seat`` (specified as a string mapping to a ``string_guid``, mandatory depending on event and item)
* ``price`` (default price will be used if unset)
* ``attendee_email``
* ``attendee_name_parts`` or ``attendee_name``
* ``company``
* ``street``
* ``zipcode``
* ``city``
* ``country``
* ``state``
* ``answers``: Validation is handled the same way as when creating orders through the API. You are therefore
expected to provide ``question``, ``answer``, and possibly ``options``. ``question_identifier``
and ``option_identifiers`` will be ignored. As a special case, you can submit the magic value
``"file:keep"`` as the answer to a file question to keep the current value without re-uploading it.
This will **not** automatically trigger creation of a new invoice, you need to take care of that yourself.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/orderpositions/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"order": "ABC12",
"item": 5,
"addon_to": 1
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
(Full order position resource, see above.)
:param organizer: The ``slug`` field of the organizer of the event
:param event: The ``slug`` field of the event
:statuscode 200: no error
:statuscode 400: The position could not be created due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to create this position.
.. http:delete:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/(id)/
Deletes an order position, identified by its internal ID.
Cancels an order position, identified by its internal ID.
**Example request**:
@@ -1735,6 +1871,128 @@ Manipulating individual positions
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
:statuscode 404: The requested order position does not exist.
Changing order contents
-----------------------
While you can :ref:`change positions individually <rest-orderpositions-manipulate>` sometimes it is necessary to make
multiple changes to an order at once within one transaction. This makes it possible to e.g. swap the seats of two
attendees in an order without running into conflicts. This interface also offers some possibilities not available
otherwise, such as splitting an order or changing fees.
.. versionchanged:: 4.8
This endpoint has been added to the system.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/change/
Performs a change operation on an order. You can supply the following fields:
* ``patch_positions``: A list of objects with the two keys ``position`` specifying an order position ID and
``body`` specifying the desired changed values of the position (``item``, ``variation``, ``subevent``, ``seat``,
``price``, ``tax_rule``).
* ``cancel_positions``: A list of objects with the single key ``position`` specifying an order position ID.
* ``split_positions``: A list of objects with the single key ``position`` specifying an order position ID.
* ``create_positions``: A list of objects describing new order positions with the same fields supported as when
creating them individually through the ``POST …/orderpositions/`` endpoint.
* ``patch_fees``: A list of objects with the two keys ``fee`` specifying an order fee ID and
``body`` specifying the desired changed values of the position (``value``).
* ``cancel_fees``: A list of objects with the single key ``fee`` specifying an order fee ID.
* ``recalculate_taxes``: If set to ``"keep_net"``, all taxes will be recalculated based on the tax rule and invoice
address, the net price will be kept. If set to ``"keep_gross"``, the gross price will be kept. If set to ``null``
(the default) the taxes are not recalculated.
* ``send_email``: If set to ``true``, the customer will be notified about the change. Defaults to ``false``.
* ``reissue_invoice``: If set to ``true`` and an invoice exists for the order, it will be canceled and a new invoice
will be issued. Defaults to ``true``.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/orders/ABC12/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"cancel_positions": [
{
"position": 12373
}
],
"patch_positions": [
{
"position": 12374,
"body": {
"item": 12,
"variation": None,
"subevent": 562,
"seat": "seat-guid-2",
"price": "99.99",
"tax_rule": 15
}
}
],
"split_positions": [
{
"position": 12375
}
],
"create_positions": [
{
"item": 12,
"variation": None,
"subevent": 562,
"seat": "seat-guid-2",
"price": "99.99",
"addon_to": 12374,
"attendee_name": "Peter",
}
],
"cancel_fees": [
{
"fee": 49
}
],
"change_fees": [
{
"fee": 51,
"body": {
"value": "12.00"
}
}
],
"reissue_invoice": true,
"send_email": true,
"recalculate_taxes": "keep_gross"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
(Full order position resource, see above.)
:param organizer: The ``slug`` field of the organizer of the event
:param event: The ``slug`` field of the event
:param code: The ``code`` field of the order to update
:statuscode 200: no error
:statuscode 400: The order could not be updated due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to update this order.
Order payment endpoints
-----------------------
+72 -4
View File
@@ -57,7 +57,10 @@ notes string A note taken by
tags list of strings Additional tags selected by the exhibitor
first_upload datetime Date and time of the first upload of this lead
data list of objects Attendee data set that may be shown to the exhibitor based o
the event's configuration. Each entry contains the fields ``id``, ``label``, and ``value``.
the event's configuration. Each entry contains the fields ``id``,
``label``, ``value``, and ``details``. ``details`` is usually empty
except in a few cases where it contains an additional list of objects
with ``value`` and ``label`` keys (e.g. splitting of names).
device_name string User-defined name for the device used for scanning (or ``null``).
===================================== ========================== =======================================================
@@ -205,7 +208,11 @@ Endpoints
{
"id": "attendee_name",
"label": "Attendee name",
"value": "Peter",
"value": "Peter Miller",
"details": [
{"label": "Given name", "value": "Peter"},
{"label": "Family name", "value": "Miller"},
]
}
]
}
@@ -542,12 +549,17 @@ The request for this looks like this:
{
"id": "attendee_name",
"label": "Name",
"value": "Jon Doe"
"value": "Jon Doe",
"details": [
{"label": "Given name", "value": "John"},
{"label": "Family name", "value": "Doe"},
]
},
{
"id": "attendee_email",
"label": "Email",
"value": "test@example.com"
"value": "test@example.com",
"details": []
}
]
},
@@ -560,3 +572,59 @@ The request for this looks like this:
:statuscode 201: No error, leads was scanned for the first time
:statuscode 400: Invalid data submitted
:statuscode 401: Invalid authentication code
You can also fetch existing leads (if you are authorized to do so):
.. http:get:: /exhibitors/api/v1/leads/
**Example request:**
.. sourcecode:: http
GET /exhibitors/api/v1/leads/ HTTP/1.1
Authorization: Exhibitor ABCDE123
Accept: application/json, text/javascript
**Example response:**
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"attendee": {
"fields": [
{
"id": "attendee_name",
"label": "Name",
"value": "Jon Doe",
"details": [
{"label": "Given name", "value": "John"},
{"label": "Family name", "value": "Doe"},
]
},
{
"id": "attendee_email",
"label": "Email",
"value": "test@example.com",
"details": []
}
]
},
"rating": 4,
"tags": ["foo"],
"notes": "Great customer, wants our newsletter"
}
]
}
:statuscode 200: No error
:statuscode 401: Invalid authentication code
:statuscode 403: Not permitted to access bulk data
+8 -5
View File
@@ -253,18 +253,21 @@ If you want, you can suppress us loading the widget and/or modify the user data
If you then later want to trigger loading the widgets, just call ``window.PretixWidget.buildWidgets()``.
Waiting for the widget to load
------------------------------
Waiting for the widget to load or close
---------------------------------------
If you want to run custom JavaScript once the widget is fully loaded, you can register a callback function. Note that
this function might be run multiple times, for example if you have multiple widgets on a page or if the user switches
e.g. from an event list to an event detail view::
If you want to run custom JavaScript once the widget is fully loaded or when it is closed, you can register callback
functions. Note that these function might be run multiple times, for example if you have multiple widgets on a page
or if the user switches e.g. from an event list to an event detail view::
<script type="text/javascript">
window.pretixWidgetCallback = function () {
window.PretixWidget.addLoadListener(function () {
console.log("Widget has loaded!");
});
window.PretixWidget.addCloseListener(function () {
console.log("Widget has been closed!");
});
}
</script>
+1
View File
@@ -13,6 +13,7 @@ recursive-include pretix/plugins/banktransfer/static *
recursive-include pretix/plugins/manualpayment/templates *
recursive-include pretix/plugins/manualpayment/static *
recursive-include pretix/plugins/paypal/templates *
recursive-include pretix/plugins/paypal/static *
recursive-include pretix/plugins/pretixdroid/templates *
recursive-include pretix/plugins/pretixdroid/static *
recursive-include pretix/plugins/sendmail/templates *
+1 -1
View File
@@ -19,4 +19,4 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
__version__ = "4.8.0.dev0"
__version__ = "4.9.0.dev0"
+8 -85
View File
@@ -424,88 +424,7 @@ class OrderPositionSerializer(I18nAwareModelSerializer):
self.fields.pop('pdf_data', None)
def validate(self, data):
if data.get('attendee_name') and data.get('attendee_name_parts'):
raise ValidationError(
{'attendee_name': ['Do not specify attendee_name if you specified attendee_name_parts.']}
)
if data.get('attendee_name_parts') and '_scheme' not in data.get('attendee_name_parts'):
data['attendee_name_parts']['_scheme'] = self.context['request'].event.settings.name_scheme
if data.get('country'):
if not pycountry.countries.get(alpha_2=data.get('country').code):
raise ValidationError(
{'country': ['Invalid country code.']}
)
if data.get('state'):
cc = str(data.get('country') or self.instance.country or '')
if cc not in COUNTRIES_WITH_STATE_IN_ADDRESS:
raise ValidationError(
{'state': ['States are not supported in country "{}".'.format(cc)]}
)
if not pycountry.subdivisions.get(code=cc + '-' + data.get('state')):
raise ValidationError(
{'state': ['"{}" is not a known subdivision of the country "{}".'.format(data.get('state'), cc)]}
)
return data
def update(self, instance, validated_data):
# Even though all fields that shouldn't be edited are marked as read_only in the serializer
# (hopefully), we'll be extra careful here and be explicit about the model fields we update.
update_fields = [
'attendee_name_parts', 'company', 'street', 'zipcode', 'city', 'country',
'state', 'attendee_email',
]
answers_data = validated_data.pop('answers', None)
name = validated_data.pop('attendee_name', '')
if name and not validated_data.get('attendee_name_parts'):
validated_data['attendee_name_parts'] = {
'_legacy': name
}
for attr, value in validated_data.items():
if attr in update_fields:
setattr(instance, attr, value)
instance.save(update_fields=update_fields)
if answers_data is not None:
qs_seen = set()
answercache = {
a.question_id: a for a in instance.answers.all()
}
for answ_data in answers_data:
options = answ_data.pop('options', [])
if answ_data['question'].pk in qs_seen:
raise ValidationError(f'Question {answ_data["question"]} was sent twice.')
if answ_data['question'].pk in answercache:
a = answercache[answ_data['question'].pk]
if isinstance(answ_data['answer'], File):
a.file.save(answ_data['answer'].name, answ_data['answer'], save=False)
a.answer = 'file://' + a.file.name
elif a.answer.startswith('file://') and answ_data['answer'] == "file:keep":
pass # keep current file
else:
for attr, value in answ_data.items():
setattr(a, attr, value)
a.save()
else:
if isinstance(answ_data['answer'], File):
an = answ_data.pop('answer')
a = instance.answers.create(**answ_data, answer='')
a.file.save(os.path.basename(an.name), an, save=False)
a.answer = 'file://' + a.file.name
a.save()
else:
a = instance.answers.create(**answ_data)
a.options.set(options)
qs_seen.add(a.question_id)
for qid, a in answercache.items():
if qid not in qs_seen:
a.delete()
return instance
raise TypeError("this serializer is readonly")
class RequireAttentionField(serializers.Field):
@@ -593,7 +512,7 @@ class OrderPaymentDateField(serializers.DateField):
class OrderFeeSerializer(I18nAwareModelSerializer):
class Meta:
model = OrderFee
fields = ('fee_type', 'value', 'description', 'internal_type', 'tax_rate', 'tax_value', 'tax_rule', 'canceled')
fields = ('id', 'fee_type', 'value', 'description', 'internal_type', 'tax_rate', 'tax_value', 'tax_rule', 'canceled')
class PaymentURLField(serializers.URLField):
@@ -1361,14 +1280,18 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
f.order = order._wrapped if simulate else order
f._calculate_tax()
fees.append(f)
if not simulate:
if simulate:
f.id = 0
else:
f.save()
else:
f = OrderFee(**fee_data)
f.order = order._wrapped if simulate else order
f._calculate_tax()
fees.append(f)
if not simulate:
if simulate:
f.id = 0
else:
f.save()
order.total += sum([f.value for f in fees])
+424
View File
@@ -0,0 +1,424 @@
#
# 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/>.
#
import logging
import os
import pycountry
from django.core.files import File
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from pretix.api.serializers.order import (
AnswerCreateSerializer, AnswerSerializer, CompatibleCountryField,
OrderPositionCreateSerializer,
)
from pretix.base.models import ItemVariation, Order, OrderFee, OrderPosition
from pretix.base.services.orders import OrderError
from pretix.base.settings import COUNTRIES_WITH_STATE_IN_ADDRESS
logger = logging.getLogger(__name__)
class OrderPositionCreateForExistingOrderSerializer(OrderPositionCreateSerializer):
order = serializers.SlugRelatedField(slug_field='code', queryset=Order.objects.none(), required=True, allow_null=False)
answers = AnswerCreateSerializer(many=True, required=False)
addon_to = serializers.IntegerField(required=False, allow_null=True)
secret = serializers.CharField(required=False)
attendee_name = serializers.CharField(required=False, allow_null=True)
seat = serializers.CharField(required=False, allow_null=True)
price = serializers.DecimalField(required=False, allow_null=True, decimal_places=2,
max_digits=10)
country = CompatibleCountryField(source='*')
class Meta:
model = OrderPosition
fields = ('order', 'item', 'variation', 'price', 'attendee_name', 'attendee_name_parts', 'attendee_email',
'company', 'street', 'zipcode', 'city', 'country', 'state',
'secret', 'addon_to', 'subevent', 'answers', 'seat')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if not self.context:
return
self.fields['order'].queryset = self.context['event'].orders.all()
self.fields['item'].queryset = self.context['event'].items.all()
self.fields['subevent'].queryset = self.context['event'].subevents.all()
self.fields['seat'].queryset = self.context['event'].seats.all()
self.fields['variation'].queryset = ItemVariation.objects.filter(item__event=self.context['event'])
if 'order' in self.context:
del self.fields['order']
def validate(self, data):
data = super().validate(data)
if data.get('addon_to'):
try:
data['addon_to'] = data['order'].positions.get(positionid=data['addon_to'])
except OrderPosition.DoesNotExist:
raise ValidationError({
'addon_to': ['addon_to refers to an unknown position ID for this order.']
})
return data
def create(self, validated_data):
ocm = self.context['ocm']
try:
ocm.add_position(
item=validated_data['item'],
variation=validated_data.get('variation'),
price=validated_data.get('price'),
addon_to=validated_data.get('addon_to'),
subevent=validated_data.get('subevent'),
seat=validated_data.get('seat'),
)
if self.context.get('commit', True):
ocm.commit()
return validated_data['order'].positions.order_by('-positionid').first()
else:
return OrderPosition() # fake to appease DRF
except OrderError as e:
raise ValidationError(str(e))
class OrderPositionInfoPatchSerializer(serializers.ModelSerializer):
answers = AnswerSerializer(many=True)
country = CompatibleCountryField(source='*')
attendee_name = serializers.CharField(required=False)
class Meta:
model = OrderPosition
fields = (
'attendee_name', 'attendee_name_parts', 'company', 'street', 'zipcode', 'city', 'country',
'state', 'attendee_email', 'answers',
)
def validate(self, data):
if data.get('attendee_name') and data.get('attendee_name_parts'):
raise ValidationError(
{'attendee_name': ['Do not specify attendee_name if you specified attendee_name_parts.']}
)
if data.get('attendee_name_parts') and '_scheme' not in data.get('attendee_name_parts'):
data['attendee_name_parts']['_scheme'] = self.context['request'].event.settings.name_scheme
if data.get('country'):
if not pycountry.countries.get(alpha_2=data.get('country').code):
raise ValidationError(
{'country': ['Invalid country code.']}
)
if data.get('state'):
cc = str(data.get('country') or self.instance.country or '')
if cc not in COUNTRIES_WITH_STATE_IN_ADDRESS:
raise ValidationError(
{'state': ['States are not supported in country "{}".'.format(cc)]}
)
if not pycountry.subdivisions.get(code=cc + '-' + data.get('state')):
raise ValidationError(
{'state': ['"{}" is not a known subdivision of the country "{}".'.format(data.get('state'), cc)]}
)
return data
def update(self, instance, validated_data):
answers_data = validated_data.pop('answers', None)
name = validated_data.pop('attendee_name', '')
if name and not validated_data.get('attendee_name_parts'):
validated_data['attendee_name_parts'] = {
'_legacy': name
}
for attr, value in validated_data.items():
if attr in self.fields:
setattr(instance, attr, value)
instance.save(update_fields=list(validated_data.keys()))
if answers_data is not None:
qs_seen = set()
answercache = {
a.question_id: a for a in instance.answers.all()
}
for answ_data in answers_data:
options = answ_data.pop('options', [])
if answ_data['question'].pk in qs_seen:
raise ValidationError(f'Question {answ_data["question"]} was sent twice.')
if answ_data['question'].pk in answercache:
a = answercache[answ_data['question'].pk]
if isinstance(answ_data['answer'], File):
a.file.save(answ_data['answer'].name, answ_data['answer'], save=False)
a.answer = 'file://' + a.file.name
elif a.answer.startswith('file://') and answ_data['answer'] == "file:keep":
pass # keep current file
else:
for attr, value in answ_data.items():
setattr(a, attr, value)
a.save()
else:
if isinstance(answ_data['answer'], File):
an = answ_data.pop('answer')
a = instance.answers.create(**answ_data, answer='')
a.file.save(os.path.basename(an.name), an, save=False)
a.answer = 'file://' + a.file.name
a.save()
else:
a = instance.answers.create(**answ_data)
a.options.set(options)
qs_seen.add(a.question_id)
for qid, a in answercache.items():
if qid not in qs_seen:
a.delete()
return instance
class OrderPositionChangeSerializer(serializers.ModelSerializer):
seat = serializers.CharField(source='seat.seat_guid', allow_null=True, required=False)
class Meta:
model = OrderPosition
fields = (
'item', 'variation', 'subevent', 'seat', 'price', 'tax_rule',
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if not self.context:
return
self.fields['item'].queryset = self.context['event'].items.all()
self.fields['subevent'].queryset = self.context['event'].subevents.all()
self.fields['tax_rule'].queryset = self.context['event'].tax_rules.all()
if kwargs.get('partial'):
for k, v in self.fields.items():
self.fields[k].required = False
def validate_item(self, item):
if item.event != self.context['event']:
raise ValidationError(
'The specified item does not belong to this event.'
)
return item
def validate_subevent(self, subevent):
if self.context['event'].has_subevents:
if not subevent:
raise ValidationError(
'You need to set a subevent.'
)
if subevent.event != self.context['event']:
raise ValidationError(
'The specified subevent does not belong to this event.'
)
elif subevent:
raise ValidationError(
'You cannot set a subevent for this event.'
)
return subevent
def validate(self, data, instance=None):
instance = instance or self.instance
if instance is None:
return data # needs to be done later
if data.get('item', instance.item):
if data.get('item', instance.item).has_variations:
if not data.get('variation', instance.variation):
raise ValidationError({'variation': ['You should specify a variation for this item.']})
else:
if data.get('variation', instance.variation).item != data.get('item', instance.item):
raise ValidationError(
{'variation': ['The specified variation does not belong to the specified item.']}
)
elif data.get('variation', instance.variation):
raise ValidationError(
{'variation': ['You cannot specify a variation for this item.']}
)
return data
def update(self, instance, validated_data):
ocm = self.context['ocm']
current_seat = {'seat_guid': instance.seat.seat_guid} if instance.seat else None
item = validated_data.get('item', instance.item)
variation = validated_data.get('variation', instance.variation)
subevent = validated_data.get('subevent', instance.subevent)
price = validated_data.get('price', instance.price)
seat = validated_data.get('seat', current_seat)
tax_rule = validated_data.get('tax_rule', instance.tax_rule)
change_item = None
if item != instance.item or variation != instance.variation:
change_item = (item, variation)
change_subevent = None
if self.context['event'].has_subevents and subevent != instance.subevent:
change_subevent = (subevent,)
try:
if change_item is not None and change_subevent is not None:
ocm.change_item_and_subevent(instance, *change_item, *change_subevent)
elif change_item is not None:
ocm.change_item(instance, *change_item)
elif change_subevent is not None:
ocm.change_subevent(instance, *change_subevent)
if seat != current_seat or change_subevent:
ocm.change_seat(instance, seat['seat_guid'] if seat else None)
if price != instance.price:
ocm.change_price(instance, price)
if tax_rule != instance.tax_rule:
ocm.change_tax_rule(instance, tax_rule)
if self.context.get('commit', True):
ocm.commit()
instance.refresh_from_db()
except OrderError as e:
raise ValidationError(str(e))
return instance
class PatchPositionSerializer(serializers.Serializer):
position = serializers.PrimaryKeyRelatedField(queryset=OrderPosition.all.none())
def validate_position(self, value):
self.fields['body'].instance = value # hack around DRFs validation order
return value
def validate(self, data):
OrderPositionChangeSerializer(context=self.context, partial=True).validate(data['body'], data['position'])
return data
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['position'].queryset = self.context['order'].positions.all()
self.fields['body'] = OrderPositionChangeSerializer(context=self.context, partial=True)
class SelectPositionSerializer(serializers.Serializer):
position = serializers.PrimaryKeyRelatedField(queryset=OrderPosition.all.none())
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['position'].queryset = self.context['order'].positions.all()
class OrderFeeChangeSerializer(serializers.ModelSerializer):
class Meta:
model = OrderFee
fields = (
'value',
)
def update(self, instance, validated_data):
ocm = self.context['ocm']
value = validated_data.get('value', instance.value)
try:
if value != instance.value:
ocm.change_fee(instance, value)
if self.context.get('commit', True):
ocm.commit()
instance.refresh_from_db()
except OrderError as e:
raise ValidationError(str(e))
return instance
class PatchFeeSerializer(serializers.Serializer):
fee = serializers.PrimaryKeyRelatedField(queryset=OrderFee.all.none())
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['fee'].queryset = self.context['order'].fees.all()
self.fields['body'] = OrderFeeChangeSerializer(context=self.context)
class SelectFeeSerializer(serializers.Serializer):
fee = serializers.PrimaryKeyRelatedField(queryset=OrderFee.all.none())
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if not self.context:
return
self.fields['fee'].queryset = self.context['order'].fees.all()
class OrderChangeOperationSerializer(serializers.Serializer):
send_email = serializers.BooleanField(default=False, required=False)
reissue_invoice = serializers.BooleanField(default=True, required=False)
recalculate_taxes = serializers.ChoiceField(default=None, allow_null=True, required=False, choices=[
('keep_net', 'keep_net'),
('keep_gross', 'keep_gross'),
])
def __init__(self, *args, **kwargs):
super().__init__(self, *args, **kwargs)
self.fields['patch_positions'] = PatchPositionSerializer(
many=True, required=False, context=self.context
)
self.fields['cancel_positions'] = SelectPositionSerializer(
many=True, required=False, context=self.context
)
self.fields['create_positions'] = OrderPositionCreateForExistingOrderSerializer(
many=True, required=False, context=self.context
)
self.fields['split_positions'] = SelectPositionSerializer(
many=True, required=False, context=self.context
)
self.fields['patch_fees'] = PatchFeeSerializer(
many=True, required=False, context=self.context
)
self.fields['cancel_fees'] = SelectFeeSerializer(
many=True, required=False, context=self.context
)
def validate(self, data):
seen_positions = set()
for d in data.get('patch_positions', []):
print(d, seen_positions)
if d['position'] in seen_positions:
raise ValidationError({'patch_positions': ['You have specified the same object twice.']})
seen_positions.add(d['position'])
seen_positions = set()
for d in data.get('cancel_positions', []):
if d['position'] in seen_positions:
raise ValidationError({'cancel_positions': ['You have specified the same object twice.']})
seen_positions.add(d['position'])
seen_positions = set()
for d in data.get('split_positions', []):
if d['position'] in seen_positions:
raise ValidationError({'split_positions': ['You have specified the same object twice.']})
seen_positions.add(d['position'])
seen_fees = set()
for d in data.get('patch_fees', []):
if d['fee'] in seen_fees:
raise ValidationError({'patch_fees': ['You have specified the same object twice.']})
seen_positions.add(d['fee'])
seen_fees = set()
for d in data.get('cancel_fees', []):
if d['fee'] in seen_fees:
raise ValidationError({'cancel_fees': ['You have specified the same object twice.']})
seen_positions.add(d['fee'])
return data
+201 -17
View File
@@ -36,7 +36,7 @@ from django.utils.translation import gettext as _
from django_filters.rest_framework import DjangoFilterBackend, FilterSet
from django_scopes import scopes_disabled
from PIL import Image
from rest_framework import mixins, serializers, status, viewsets
from rest_framework import serializers, status, viewsets
from rest_framework.decorators import action
from rest_framework.exceptions import (
APIException, NotFound, PermissionDenied, ValidationError,
@@ -53,6 +53,12 @@ from pretix.api.serializers.order import (
PriceCalcSerializer, RevokedTicketSecretSerializer,
SimulatedOrderSerializer,
)
from pretix.api.serializers.orderchange import (
OrderChangeOperationSerializer, OrderFeeChangeSerializer,
OrderPositionChangeSerializer,
OrderPositionCreateForExistingOrderSerializer,
OrderPositionInfoPatchSerializer,
)
from pretix.base.i18n import language
from pretix.base.models import (
CachedCombinedTicket, CachedTicket, Checkin, Device, Event, Invoice,
@@ -144,7 +150,8 @@ with scopes_disabled():
matching_positions = OrderPosition.objects.filter(
Q(order=OuterRef('pk')) & Q(
Q(attendee_name_cached__icontains=u) | Q(attendee_email__icontains=u)
| Q(secret__istartswith=u) | Q(voucher__code__icontains=u)
| Q(secret__istartswith=u)
# | Q(voucher__code__icontains=u) # temporarily removed since it caused bad query performance on postgres
)
).values('id')
@@ -338,6 +345,7 @@ class OrderViewSet(viewsets.ModelViewSet):
@action(detail=True, methods=['POST'])
def mark_canceled(self, request, **kwargs):
send_mail = request.data.get('send_email', True)
comment = request.data.get('comment', None)
cancellation_fee = request.data.get('cancellation_fee', None)
if cancellation_fee:
try:
@@ -360,6 +368,7 @@ class OrderViewSet(viewsets.ModelViewSet):
device=request.auth if isinstance(request.auth, Device) else None,
oauth_application=request.auth.application if isinstance(request.auth, OAuthAccessToken) else None,
send_mail=send_mail,
email_comment=comment,
cancellation_fee=cancellation_fee
)
except OrderError as e:
@@ -644,7 +653,7 @@ class OrderViewSet(viewsets.ModelViewSet):
if send_mail:
free_flow = (
payment and order.total == Decimal('0.00') and order.status == Order.STATUS_PAID and
not order.require_approval and payment.provider == "free"
not order.require_approval and payment.provider in ("free", "boxoffice")
)
if order.require_approval:
email_template = request.event.settings.mail_text_order_placed_require_approval
@@ -782,6 +791,79 @@ class OrderViewSet(viewsets.ModelViewSet):
with transaction.atomic():
self.get_object().gracefully_delete(user=self.request.user if self.request.user.is_authenticated else None, auth=self.request.auth)
@action(detail=True, methods=['POST'])
def change(self, request, **kwargs):
order = self.get_object()
serializer = OrderChangeOperationSerializer(
context={'order': order, **self.get_serializer_context()},
data=request.data,
)
serializer.is_valid(raise_exception=True)
try:
ocm = OrderChangeManager(
order=order,
user=self.request.user if self.request.user.is_authenticated else None,
auth=request.auth,
notify=serializer.validated_data.get('send_email', False),
reissue_invoice=serializer.validated_data.get('reissue_invoice', True),
)
canceled_positions = set()
for r in serializer.validated_data.get('cancel_positions', []):
ocm.cancel(r['position'])
canceled_positions.add(r['position'])
for r in serializer.validated_data.get('patch_positions', []):
if r['position'] in canceled_positions:
continue
pos_serializer = OrderPositionChangeSerializer(
context={'ocm': ocm, 'commit': False, 'event': request.event, **self.get_serializer_context()},
partial=True,
)
pos_serializer.update(r['position'], r['body'])
for r in serializer.validated_data.get('split_positions', []):
if r['position'] in canceled_positions:
continue
ocm.split(r['position'])
for r in serializer.validated_data.get('create_positions', []):
pos_serializer = OrderPositionCreateForExistingOrderSerializer(
context={'ocm': ocm, 'commit': False, 'event': request.event, **self.get_serializer_context()},
)
pos_serializer.create(r)
canceled_fees = set()
for r in serializer.validated_data.get('cancel_fees', []):
ocm.cancel_fee(r['fee'])
canceled_fees.add(r['fee'])
for r in serializer.validated_data.get('patch_fees', []):
if r['fee'] in canceled_fees:
continue
pos_serializer = OrderFeeChangeSerializer(
context={'ocm': ocm, 'commit': False, 'event': request.event, **self.get_serializer_context()},
)
pos_serializer.update(r['fee'], r['body'])
if serializer.validated_data.get('recalculate_taxes') == 'keep_net':
ocm.recalculate_taxes(keep='net')
elif serializer.validated_data.get('recalculate_taxes') == 'keep_gross':
ocm.recalculate_taxes(keep='gross')
ocm.commit()
except OrderError as e:
raise ValidationError(str(e))
order.refresh_from_db()
serializer = OrderSerializer(
instance=order,
context=self.get_serializer_context(),
)
return Response(serializer.data)
with scopes_disabled():
class OrderPositionFilter(FilterSet):
@@ -823,7 +905,7 @@ with scopes_disabled():
}
class OrderPositionViewSet(mixins.DestroyModelMixin, mixins.UpdateModelMixin, viewsets.ReadOnlyModelViewSet):
class OrderPositionViewSet(viewsets.ModelViewSet):
serializer_class = OrderPositionSerializer
queryset = OrderPosition.all.none()
filter_backends = (DjangoFilterBackend, OrderingFilter)
@@ -1060,6 +1142,25 @@ class OrderPositionViewSet(mixins.DestroyModelMixin, mixins.UpdateModelMixin, vi
)
return resp
@action(detail=True, methods=['POST'])
def regenerate_secrets(self, request, **kwargs):
instance = self.get_object()
try:
ocm = OrderChangeManager(
instance.order,
user=self.request.user if self.request.user.is_authenticated else None,
auth=self.request.auth,
notify=False,
reissue_invoice=False,
)
ocm.regenerate_secret(instance)
ocm.commit()
except OrderError as e:
raise ValidationError(str(e))
except Quota.QuotaExceededException as e:
raise ValidationError(str(e))
return self.retrieve(request, [], **kwargs)
def perform_destroy(self, instance):
try:
ocm = OrderChangeManager(
@@ -1075,18 +1176,33 @@ class OrderPositionViewSet(mixins.DestroyModelMixin, mixins.UpdateModelMixin, vi
except Quota.QuotaExceededException as e:
raise ValidationError(str(e))
def update(self, request, *args, **kwargs):
partial = kwargs.get('partial', False)
if not partial:
return Response(
{"detail": "Method \"PUT\" not allowed."},
status=status.HTTP_405_METHOD_NOT_ALLOWED,
)
return super().update(request, *args, **kwargs)
def perform_update(self, serializer):
def create(self, request, *args, **kwargs):
with transaction.atomic():
old_data = self.get_serializer_class()(instance=serializer.instance, context=self.get_serializer_context()).data
serializer = OrderPositionCreateForExistingOrderSerializer(
data=request.data,
context=self.get_serializer_context(),
)
serializer.is_valid(raise_exception=True)
order = serializer.validated_data['order']
ocm = OrderChangeManager(
order=order,
user=self.request.user if self.request.user.is_authenticated else None,
auth=request.auth,
notify=False,
reissue_invoice=False,
)
serializer.context['ocm'] = ocm
serializer.save()
# Fields that can be easily patched after the position was added
old_data = OrderPositionInfoPatchSerializer(instance=serializer.instance, context=self.get_serializer_context()).data
serializer = OrderPositionInfoPatchSerializer(
instance=serializer.instance,
context=self.get_serializer_context(),
partial=True,
data=request.data
)
serializer.is_valid(raise_exception=True)
serializer.save()
new_data = serializer.data
@@ -1109,9 +1225,77 @@ class OrderPositionViewSet(mixins.DestroyModelMixin, mixins.UpdateModelMixin, vi
]
}
)
tickets.invalidate_cache.apply_async(
kwargs={'event': serializer.instance.order.event.pk, 'order': serializer.instance.order.pk})
order_modified.send(sender=serializer.instance.order.event, order=serializer.instance.order)
return Response(
OrderPositionSerializer(serializer.instance, context=self.get_serializer_context()).data,
status=status.HTTP_201_CREATED,
)
tickets.invalidate_cache.apply_async(kwargs={'event': serializer.instance.order.event.pk, 'order': serializer.instance.order.pk})
order_modified.send(sender=serializer.instance.order.event, order=serializer.instance.order)
def update(self, request, *args, **kwargs):
partial = kwargs.get('partial', False)
if not partial:
return Response(
{"detail": "Method \"PUT\" not allowed."},
status=status.HTTP_405_METHOD_NOT_ALLOWED,
)
with transaction.atomic():
instance = self.get_object()
ocm = OrderChangeManager(
order=instance.order,
user=self.request.user if self.request.user.is_authenticated else None,
auth=request.auth,
notify=False,
reissue_invoice=False,
)
# Field that need to go through OrderChangeManager
serializer = OrderPositionChangeSerializer(
instance=instance,
context={'ocm': ocm, **self.get_serializer_context()},
partial=True,
data=request.data
)
serializer.is_valid(raise_exception=True)
serializer.save()
# Fields that can be easily patched
old_data = OrderPositionInfoPatchSerializer(instance=instance, context=self.get_serializer_context()).data
serializer = OrderPositionInfoPatchSerializer(
instance=instance,
context=self.get_serializer_context(),
partial=True,
data=request.data
)
serializer.is_valid(raise_exception=True)
serializer.save()
new_data = serializer.data
if old_data != new_data:
log_data = self.request.data
if 'answers' in log_data:
for a in new_data['answers']:
log_data[f'question_{a["question"]}'] = a["answer"]
log_data.pop('answers', None)
serializer.instance.order.log_action(
'pretix.event.order.modified',
user=self.request.user,
auth=self.request.auth,
data={
'data': [
dict(
position=serializer.instance.pk,
**log_data
)
]
}
)
tickets.invalidate_cache.apply_async(kwargs={'event': serializer.instance.order.event.pk, 'order': serializer.instance.order.pk})
order_modified.send(sender=serializer.instance.order.event, order=serializer.instance.order)
return Response(self.get_serializer_class()(instance=serializer.instance, context=self.get_serializer_context()).data)
class PaymentViewSet(CreateModelMixin, viewsets.ReadOnlyModelViewSet):
@@ -19,11 +19,13 @@
# 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/>.
#
import logging
import sys
from django.apps import apps
from django.core.management import call_command
from django.core.management.base import BaseCommand
from django.db import connection
from django_scopes import scope, scopes_disabled
@@ -33,6 +35,13 @@ class Command(BaseCommand):
parser.parse_args = lambda x: parser.parse_known_args(x)[0]
return parser
def add_arguments(self, parser):
parser.add_argument(
'--print-sql',
action='store_true',
help='Print all SQL queries.',
)
def handle(self, *args, **options):
try:
from django_extensions.management.commands import shell_plus # noqa
@@ -41,6 +50,11 @@ class Command(BaseCommand):
cmd = 'shell'
del options['skip_checks']
if options['print_sql']:
connection.force_debug_cursor = True
logger = logging.getLogger("django.db.backends")
logger.setLevel(logging.DEBUG)
parser = self.create_parser(sys.argv[0], sys.argv[1])
flags = parser.parse_known_args(sys.argv[2:])[1]
if "--override" in flags:
+2
View File
@@ -955,6 +955,8 @@ class BoxOfficeProvider(BasePaymentProvider):
return {
"pos_id": payment.info_data.get('pos_id', None),
"receipt_id": payment.info_data.get('receipt_id', None),
"payment_type": payment.info_data.get('payment_type', None),
"payment_data": payment.info_data.get('payment_data', {}),
}
def payment_control_render(self, request, payment) -> str:
+58 -7
View File
@@ -49,6 +49,7 @@ from arabic_reshaper import ArabicReshaper
from bidi.algorithm import get_display
from django.conf import settings
from django.contrib.staticfiles import finders
from django.db.models import Max, Min
from django.dispatch import receiver
from django.utils.formats import date_format
from django.utils.functional import SimpleLazyObject
@@ -394,30 +395,41 @@ DEFAULT_VARIABLES = OrderedDict((
("seat", {
"label": _("Seat: Full name"),
"editor_sample": _("Ground floor, Row 3, Seat 4"),
"evaluate": lambda op, order, ev: str(op.seat if op.seat else
"evaluate": lambda op, order, ev: str(get_seat(op) if get_seat(op) else
_('General admission') if ev.seating_plan_id is not None else "")
}),
("seat_zone", {
"label": _("Seat: zone"),
"editor_sample": _("Ground floor"),
"evaluate": lambda op, order, ev: str(op.seat.zone_name if op.seat else
"evaluate": lambda op, order, ev: str(get_seat(op).zone_name if get_seat(op) else
_('General admission') if ev.seating_plan_id is not None else "")
}),
("seat_row", {
"label": _("Seat: row"),
"editor_sample": "3",
"evaluate": lambda op, order, ev: str(op.seat.row_name if op.seat else "")
"evaluate": lambda op, order, ev: str(get_seat(op).row_name if get_seat(op) else "")
}),
("seat_number", {
"label": _("Seat: seat number"),
"editor_sample": 4,
"evaluate": lambda op, order, ev: str(op.seat.seat_number if op.seat else "")
"evaluate": lambda op, order, ev: str(get_seat(op).seat_number if get_seat(op) else "")
}),
("first_scan", {
"label": _("Date and time of first scan"),
"editor_sample": _("2017-05-31 19:00"),
"evaluate": lambda op, order, ev: get_first_scan(op)
}),
("giftcard_issuance_date", {
"label": _("Gift card: Issuance date"),
"editor_sample": _("2017-05-31"),
"evaluate": lambda op, order, ev: get_giftcard_issuance(op, ev)
}),
("giftcard_expiry_date", {
"label": _("Gift card: Expiration date"),
"editor_sample": _("2017-05-31"),
"evaluate": lambda op, order, ev: get_giftcard_expiry(op, ev)
}),
))
DEFAULT_IMAGES = OrderedDict([])
@@ -492,10 +504,17 @@ def variables_from_questions(sender, *args, **kwargs):
for q in sender.questions.all():
if q.type == Question.TYPE_FILE:
continue
d['question_{}'.format(q.identifier)] = {
'label': _('Question: {question}').format(question=q.question),
'editor_sample': _('<Answer: {question}>').format(question=q.question),
'evaluate': partial(get_answer, question_id=q.pk),
'migrate_from': 'question_{}'.format(q.pk)
}
d['question_{}'.format(q.pk)] = {
'label': _('Question: {question}').format(question=q.question),
'editor_sample': _('<Answer: {question}>').format(question=q.question),
'evaluate': partial(get_answer, question_id=q.pk)
'evaluate': partial(get_answer, question_id=q.pk),
'hidden': True,
}
return d
@@ -553,6 +572,24 @@ def get_variables(event):
return v
def get_giftcard_expiry(op: OrderPosition, ev):
if not op.item.issue_giftcard:
return "" # performance optimization
m = op.issued_gift_cards.aggregate(m=Min('expires'))['m']
if not m:
return ""
return date_format(m.astimezone(ev.timezone), "SHORT_DATE_FORMAT")
def get_giftcard_issuance(op: OrderPosition, ev):
if not op.item.issue_giftcard:
return "" # performance optimization
m = op.issued_gift_cards.aggregate(m=Max('issuance'))['m']
if not m:
return ""
return date_format(m.astimezone(ev.timezone), "SHORT_DATE_FORMAT")
def get_first_scan(op: OrderPosition):
scans = list(op.checkins.all())
@@ -564,6 +601,14 @@ def get_first_scan(op: OrderPosition):
return ""
def get_seat(op: OrderPosition):
if op.seat_id:
return op.seat
if op.addon_to_id:
return op.addon_to.seat
return None
reshaper = SimpleLazyObject(lambda: ArabicReshaper(configuration={
'delete_harakat': True,
'support_ligatures': False,
@@ -668,11 +713,17 @@ class Renderer:
text = o['text']
def replace(x):
if x.group(1) not in self.variables:
print(x.group(1))
if x.group(1).startswith('itemmeta:'):
return op.item.meta_data.get(x.group(1)[9:]) or ''
elif x.group(1).startswith('meta:'):
return ev.meta_data.get(x.group(1)[5:]) or ''
elif x.group(1) not in self.variables:
return x.group(0)
if x.group(1) == 'secret':
# Do not use shortened version
return op.secret
try:
return self.variables[x.group(1)]['evaluate'](op, order, ev)
except:
@@ -681,7 +732,7 @@ class Renderer:
# We do not use str.format like in emails so we (a) can evaluate lazily and (b) can re-implement this
# 1:1 on other platforms that render PDFs through our API (libpretixprint)
return re.sub(r'\{([a-zA-Z0-9_]+)\}', replace, text)
return re.sub(r'\{([a-zA-Z0-9:_]+)\}', replace, text)
elif o['content'].startswith('itemmeta:'):
return op.item.meta_data.get(o['content'][9:]) or ''
+1 -1
View File
@@ -247,7 +247,7 @@ def assign_ticket_secret(event, position, force_invalidate_if_revokation_list_us
**kwargs
)
changed = position.secret != secret
if position.secret and changed and gen.use_revocation_list:
if position.secret and changed and gen.use_revocation_list and position.pk:
position.revoked_secrets.create(event=event, secret=position.secret)
position.secret = secret
if save and changed:
+5 -2
View File
@@ -485,14 +485,17 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
try:
backend.send_messages([email])
except (smtplib.SMTPResponseException, smtplib.SMTPSenderRefused) as e:
if e.smtp_code in (101, 111, 421, 422, 431, 432, 442, 447, 452):
if e.smtp_code == 432 and settings.HAS_REDIS:
if e.smtp_code in (101, 111, 421, 422, 431, 432, 442, 447, 452, 454):
if e.smtp_code in (432, 454) and settings.HAS_REDIS:
# This is likely Microsoft Exchange Online which has a pretty bad rate limit of max. 3 concurrent
# SMTP connections which is *easily* exceeded with many celery threads. Just retrying with exponential
# backoff won't be good enough if we have a lot of emails, instead we'll need to make sure our retry
# intervals scatter such that the email won't all be retried at the same time again and cause the
# same problem.
# See also https://docs.microsoft.com/en-us/exchange/troubleshoot/send-emails/smtp-submission-improvements
#
# Also observed on AWS SES with 454:
# https://aws.amazon.com/blogs/messaging-and-targeting/how-to-handle-a-throttling-maximum-sending-rate-exceeded-error/
from django_redis import get_redis_connection
redis_key = "pretix_mail_retry_" + hashlib.sha1(f"{getattr(backend, 'username', '_')}@{getattr(backend, 'host', '_')}".encode()).hexdigest()
+13 -11
View File
@@ -53,7 +53,7 @@ from django.db.transaction import get_connection
from django.dispatch import receiver
from django.utils.functional import cached_property
from django.utils.timezone import make_aware, now
from django.utils.translation import gettext as _
from django.utils.translation import gettext as _, gettext_lazy
from django_scopes import scopes_disabled
from pretix.api.models import OAuthApplication
@@ -384,7 +384,7 @@ def deny_order(order, comment='', user=None, send_mail: bool=True, auth=None):
def _cancel_order(order, user=None, send_mail: bool=True, api_token=None, device=None, oauth_application=None,
cancellation_fee=None, keep_fees=None, cancel_invoice=True):
cancellation_fee=None, keep_fees=None, cancel_invoice=True, comment=None):
"""
Mark this order as canceled
:param order: The order to change
@@ -481,7 +481,7 @@ def _cancel_order(order, user=None, send_mail: bool=True, api_token=None, device
Voucher.objects.filter(pk=position.voucher.pk).update(redeemed=Greatest(0, F('redeemed') - 1))
order.log_action('pretix.event.order.canceled', user=user, auth=api_token or oauth_application or device,
data={'cancellation_fee': cancellation_fee})
data={'cancellation_fee': cancellation_fee, 'comment': comment})
order.cancellation_requests.all().delete()
order.create_transactions()
@@ -489,7 +489,7 @@ def _cancel_order(order, user=None, send_mail: bool=True, api_token=None, device
if send_mail:
email_template = order.event.settings.mail_text_order_canceled
with language(order.locale, order.event.settings.region):
email_context = get_email_context(event=order.event, order=order)
email_context = get_email_context(event=order.event, order=order, comment=comment or "")
email_subject = _('Order canceled: %(code)s') % {'code': order.code}
try:
order.send_mail(
@@ -934,7 +934,7 @@ def _create_order(event: Event, email: str, positions: List[CartPosition], now_d
def _order_placed_email(event: Event, order: Order, pprov: BasePaymentProvider, email_template, log_entry: str,
invoice, payment: OrderPayment, is_free=False):
email_context = get_email_context(event=event, order=order, payment=payment if pprov else None)
email_subject = _('Your order: %(code)s') % {'code': order.code}
email_subject = gettext_lazy('Your order: {code}')
try:
order.send_mail(
email_subject, email_template, email_context,
@@ -952,7 +952,7 @@ def _order_placed_email(event: Event, order: Order, pprov: BasePaymentProvider,
def _order_placed_email_attendee(event: Event, order: Order, position: OrderPosition, email_template, log_entry: str, is_free=False):
email_context = get_email_context(event=event, order=order, position=position)
email_subject = _('Your event registration: %(code)s') % {'code': order.code}
email_subject = gettext_lazy('Your event registration: {code}')
try:
position.send_mail(
@@ -1467,7 +1467,7 @@ class OrderChangeManager:
if self.order.event.settings.invoice_include_free or position.price != Decimal('0.00'):
self._invoice_dirty = True
def add_position(self, item: Item, variation: ItemVariation, price: Decimal, addon_to: Order = None,
def add_position(self, item: Item, variation: ItemVariation, price: Decimal, addon_to: OrderPosition = None,
subevent: SubEvent = None, seat: Seat = None, membership: Membership = None):
if isinstance(seat, str):
if not seat:
@@ -1492,6 +1492,8 @@ class OrderChangeManager:
if price is None:
raise OrderError(self.error_messages['product_invalid'])
if item.variations.exists() and not variation:
raise OrderError(self.error_messages['product_without_variation'])
if not addon_to and item.category and item.category.is_addon:
raise OrderError(self.error_messages['addon_to_required'])
if addon_to:
@@ -2504,15 +2506,15 @@ def _try_auto_refund(order, auto_refund=True, manual_refund=False, allow_partial
@app.task(base=ProfiledTask, bind=True, max_retries=5, default_retry_delay=1, throws=(OrderError,))
@scopes_disabled()
def cancel_order(self, order: int, user: int=None, send_mail: bool=True, api_token=None, oauth_application=None,
device=None, cancellation_fee=None, try_auto_refund=False, refund_as_giftcard=False, comment=None,
cancel_invoice=True):
device=None, cancellation_fee=None, try_auto_refund=False, refund_as_giftcard=False,
email_comment=None, refund_comment=None, cancel_invoice=True):
try:
try:
ret = _cancel_order(order, user, send_mail, api_token, device, oauth_application,
cancellation_fee, cancel_invoice=cancel_invoice)
cancellation_fee, cancel_invoice=cancel_invoice, comment=email_comment)
if try_auto_refund:
_try_auto_refund(order, refund_as_giftcard=refund_as_giftcard,
comment=comment)
comment=refund_comment)
return ret
except LockTimeoutException:
self.retry()
+19 -4
View File
@@ -86,9 +86,9 @@ def primary_font_kwargs():
from pretix.presale.style import get_fonts
choices = [('Open Sans', 'Open Sans')]
choices += [
(a, {"title": a, "data": v}) for a, v in get_fonts().items()
]
choices += sorted([
(a, {"title": a, "data": v}) for a, v in get_fonts().items() if not v.get('pdf_only', False)
], key=lambda a: a[0])
return {
'choices': choices,
}
@@ -1195,7 +1195,20 @@ DEFAULTS = {
help_text=_("If you ask for a phone number, explain why you do so and what you will use the phone number for.")
)
},
'show_checkin_number_user': {
'default': 'False',
'type': bool,
'serializer_class': serializers.BooleanField,
'form_class': forms.BooleanField,
'form_kwargs': dict(
label=_("Show number of check-ins to customer"),
help_text=_('With this option enabled, your customers will be able how many times they entered '
'the event. This is usually not necessary, but might be useful in combination with tickets '
'that are usable a specific number of times, so customers can see how many times they have '
'already been used. Exits or failed scans will not be counted, and the user will not see '
'the different check-in lists.'),
)
},
'ticket_download': {
'default': 'False',
'type': bool,
@@ -1901,6 +1914,8 @@ Your {event} team"""))
your order {code} for {event} has been canceled.
{comment}
You can view the details of your order at
{url}
+2 -1
View File
@@ -523,6 +523,7 @@ class EventSettingsForm(SettingsForm):
'last_order_modification_date',
'allow_modifications_after_checkin',
'checkout_show_copy_answers_button',
'show_checkin_number_user',
'primary_color',
'theme_color_success',
'theme_color_danger',
@@ -1074,7 +1075,7 @@ class MailSettingsForm(SettingsForm):
'mail_text_order_free': ['event', 'order'],
'mail_text_order_free_attendee': ['event', 'order', 'position'],
'mail_text_order_changed': ['event', 'order'],
'mail_text_order_canceled': ['event', 'order'],
'mail_text_order_canceled': ['event', 'order', 'comment'],
'mail_text_order_expire_warning': ['event', 'order'],
'mail_text_order_custom_mail': ['event', 'order'],
'mail_text_download_reminder': ['event', 'order'],
+7 -7
View File
@@ -1859,11 +1859,11 @@ class VoucherFilterForm(FilterForm):
for i in self.event.items.prefetch_related('variations').all():
variations = list(i.variations.all())
if variations:
choices.append((str(i.pk), _('{product} Any variation').format(product=i.name)))
choices.append((str(i.pk), _('{product} Any variation').format(product=str(i))))
for v in variations:
choices.append(('%d-%d' % (i.pk, v.pk), '%s %s' % (i.name, v.value)))
choices.append(('%d-%d' % (i.pk, v.pk), '%s %s' % (str(i), v.value)))
else:
choices.append((str(i.pk), i.name))
choices.append((str(i.pk), str(i)))
for q in self.event.quotas.all():
choices.append(('q-%d' % q.pk, _('Any product in quota "{quota}"').format(quota=q)))
self.fields['itemvar'].choices = choices
@@ -2120,7 +2120,7 @@ class CheckinFilterForm(FilterForm):
self.event = kwargs.pop('event')
super().__init__(*args, **kwargs)
self.fields['device'].queryset = self.event.organizer.devices.all()
self.fields['device'].queryset = self.event.organizer.devices.all().order_by('device_id')
self.fields['gate'].queryset = self.event.organizer.gates.all()
self.fields['checkin_list'].queryset = self.event.checkin_lists.all()
@@ -2141,11 +2141,11 @@ class CheckinFilterForm(FilterForm):
for i in self.event.items.prefetch_related('variations').all():
variations = list(i.variations.all())
if variations:
choices.append((str(i.pk), _('{product} Any variation').format(product=i.name)))
choices.append((str(i.pk), _('{product} Any variation').format(product=str(i))))
for v in variations:
choices.append(('%d-%d' % (i.pk, v.pk), '%s %s' % (i.name, v.value)))
choices.append(('%d-%d' % (i.pk, v.pk), '%s %s' % (str(i), v.value)))
else:
choices.append((str(i.pk), i.name))
choices.append((str(i.pk), str(i)))
self.fields['itemvar'].choices = choices
def filter_qs(self, qs):
+4 -1
View File
@@ -434,6 +434,9 @@ class ItemCreateForm(I18nModelForm):
if self.cleaned_data.get('copy_from'):
for question in self.cleaned_data['copy_from'].questions.all():
question.items.add(instance)
question.log_action('pretix.event.question.changed', user=self.user, data={
'item_added': self.instance.pk
})
for a in self.cleaned_data['copy_from'].addons.all():
instance.addons.create(addon_category=a.addon_category, min_count=a.min_count, max_count=a.max_count,
price_included=a.price_included, position=a.position,
@@ -563,7 +566,7 @@ class ItemUpdateForm(I18nModelForm):
if d['tax_rule'] and d['tax_rule'].rate > 0:
self.add_error(
'tax_rule',
_("Gift card products should not be associated with non-zero tax rates since sales tax will be applied when the gift card is redeemed.")
_("Gift card products should use a tax rule with a rate of 0 percent since sales tax will be applied when the gift card is redeemed.")
)
if d['admission']:
self.add_error(
+8 -2
View File
@@ -167,6 +167,12 @@ class CancelForm(ForceQuotaConfirmationForm):
initial=True,
required=False
)
comment = forms.CharField(
label=_('Comment (will be sent to the user)'),
help_text=_('Will be included in the notification email when the respective placeholder is present in the '
'configured email text.'),
required=False,
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@@ -844,7 +850,7 @@ class EventCancelForm(forms.Form):
label=_("Subject"),
required=True,
widget_kwargs={'attrs': {'data-display-dependency': '#id_send'}},
initial=_('Canceled: {event}'),
initial=LazyI18nString.from_gettext(gettext_noop('Canceled: {event}')),
widget=I18nTextInput,
locales=self.event.settings.get('locales'),
)
@@ -870,7 +876,7 @@ class EventCancelForm(forms.Form):
self.fields['send_waitinglist_subject'] = I18nFormField(
label=_("Subject"),
required=True,
initial=_('Canceled: {event}'),
initial=LazyI18nString.from_gettext(gettext_noop('Canceled: {event}')),
widget=I18nTextInput,
widget_kwargs={'attrs': {'data-display-dependency': '#id_send_waitinglist'}},
locales=self.event.settings.get('locales'),
+64
View File
@@ -39,6 +39,7 @@ from django import forms
from django.conf import settings
from django.core.exceptions import ValidationError
from django.db.models import Q
from django.forms.utils import ErrorDict
from django.utils.crypto import get_random_string
from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _, pgettext_lazy
@@ -268,6 +269,69 @@ class DeviceForm(forms.ModelForm):
}
class DeviceBulkEditForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
organizer = kwargs.pop('organizer')
self.mixed_values = kwargs.pop('mixed_values')
self.queryset = kwargs.pop('queryset')
super().__init__(*args, **kwargs)
self.fields['limit_events'].queryset = organizer.events.all().order_by(
'-has_subevents', '-date_from'
)
self.fields['gate'].queryset = organizer.gates.all()
def clean(self):
d = super().clean()
if self.prefix + '__events' in self.data.getlist('_bulk') and not d['all_events'] and not d['limit_events']:
raise ValidationError(_('Your device will not have access to anything, please select some events.'))
return d
class Meta:
model = Device
fields = ['all_events', 'limit_events', 'security_profile', 'gate']
widgets = {
'limit_events': forms.CheckboxSelectMultiple(attrs={
'data-inverse-dependency': '#id_all_events',
'class': 'scrolling-multiple-choice scrolling-multiple-choice-large',
}),
}
field_classes = {
'limit_events': SafeEventMultipleChoiceField
}
def save(self, commit=True):
objs = list(self.queryset)
fields = set()
check_map = {
'all_events': '__events',
'limit_events': '__events',
}
for k in self.fields:
cb_val = self.prefix + check_map.get(k, k)
if cb_val not in self.data.getlist('_bulk'):
continue
fields.add(k)
for obj in objs:
if k == 'limit_events':
getattr(obj, k).set(self.cleaned_data[k])
else:
setattr(obj, k, self.cleaned_data[k])
if fields:
Device.objects.bulk_update(objs, [f for f in fields if f != 'limit_events'], 200)
def full_clean(self):
if len(self.data) == 0:
# form wasn't submitted
self._errors = ErrorDict()
return
super().full_clean()
class OrganizerSettingsForm(SettingsForm):
timezone = forms.ChoiceField(
choices=((a, a) for a in common_timezones),
+21 -15
View File
@@ -341,7 +341,6 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs):
'pretix.event.order.paid': _('The order has been marked as paid.'),
'pretix.event.order.cancellationrequest.deleted': _('The cancellation request has been deleted.'),
'pretix.event.order.refunded': _('The order has been refunded.'),
'pretix.event.order.canceled': _('The order has been canceled.'),
'pretix.event.order.reactivated': _('The order has been reactivated.'),
'pretix.event.order.deleted': _('The test mode order {code} has been deleted.'),
'pretix.event.order.placed': _('The order has been created.'),
@@ -532,6 +531,27 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs):
bleach.clean(logentry.parsed_data.get('msg'), tags=[], strip=True)
)
if logentry.action_type == 'pretix.event.order.canceled':
comment = logentry.parsed_data.get('comment')
if comment:
return _('The order has been canceled (comment: "{comment}").').format(comment=comment)
else:
return _('The order has been canceled.')
if logentry.action_type in ('pretix.control.views.checkin.reverted', 'pretix.event.checkin.reverted'):
if 'list' in data:
try:
checkin_list = sender.checkin_lists.get(pk=data.get('list')).name
except CheckinList.DoesNotExist:
checkin_list = _("(unknown)")
else:
checkin_list = _("(unknown)")
return _('The check-in of position #{posid} on list "{list}" has been reverted.').format(
posid=data.get('positionid'),
list=checkin_list,
)
if sender and logentry.action_type.startswith('pretix.event.checkin'):
return _display_checkin(sender, logentry)
@@ -560,20 +580,6 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs):
list=checkin_list
)
if logentry.action_type in ('pretix.control.views.checkin.reverted', 'pretix.event.checkin.reverted'):
if 'list' in data:
try:
checkin_list = sender.checkin_lists.get(pk=data.get('list')).name
except CheckinList.DoesNotExist:
checkin_list = _("(unknown)")
else:
checkin_list = _("(unknown)")
return _('The check-in of position #{posid} on list "{list}" has been reverted.').format(
posid=data.get('positionid'),
list=checkin_list,
)
if logentry.action_type == 'pretix.team.member.added':
return _('{user} has been added to the team.').format(user=data.get('email'))
@@ -57,7 +57,11 @@
{% endif %}
{% elif payment_info.payment_type == "izettle" %}
<dt>{% trans "Payment provider" %}</dt>
<dd>iZettle</dd>
<dd>Zettle</dd>
{% if payment_info.payment_data.reference %}
<dt>{% trans "Paymeant reference" %}</dt>
<dd>{{ payment_info.payment_data.reference }}</dd>
{% endif %}
<dt>{% trans "Payment Application" %}</dt>
<dd>{{ payment_info.payment_data.applicationName }}</dd>
<dt>{% trans "Card Entry Mode" %}</dt>
@@ -93,6 +93,17 @@
</div>
</div>
<div class="alert alert-info" v-if="missingItems.length">
<p>
{% trans "Your rule always filters by product or variation, but the following products or variations are not contained in any of your rule parts so people with these tickets will not get in:" %}
</p>
<ul>
<li v-for="h in missingItems">{{ "{" }}{h}{{ "}" }}</li>
</ul>
<p>
{% trans "Please double-check if this was intentional." %}
</p>
</div>
</div>
<div class="disabled-withoutjs sr-only">
{{ form.rules }}
@@ -105,6 +116,7 @@
</button>
</div>
</form>
{{ items|json_script:"items" }}
{% compress js %}
<script type="text/javascript" src="{% static "vuejs/vue.js" %}"></script>
@@ -118,6 +130,7 @@
<script type="text/javascript" src="{% static "d3/d3-transition.v2.js" %}"></script>
<script type="text/javascript" src="{% static "d3/d3-drag.v2.js" %}"></script>
<script type="text/javascript" src="{% static "d3/d3-zoom.v2.js" %}"></script>
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/checkinrules/jsonlogic-boolalg.js" %}"></script>
<script type="text/vue" src="{% static 'pretixcontrol/js/ui/checkinrules/datetimefield.vue' %}"></script>
<script type="text/vue" src="{% static 'pretixcontrol/js/ui/checkinrules/timefield.vue' %}"></script>
<script type="text/vue" src="{% static 'pretixcontrol/js/ui/checkinrules/lookup-select2.vue' %}"></script>
@@ -221,6 +221,7 @@
{% bootstrap_field sform.show_items_outside_presale_period layout="control" %}
{% bootstrap_field sform.last_order_modification_date layout="control" %}
{% bootstrap_field sform.allow_modifications_after_checkin layout="control" %}
{% bootstrap_field sform.show_checkin_number_user layout="control" %}
</fieldset>
<fieldset>
<legend>{% trans "Display" %}</legend>
@@ -20,6 +20,11 @@
<div class="form-group">
<label class="col-md-3 control-label">{% trans "Product type" %}</label>
<div class="col-md-9">
{% for e in form.errors.admission %}
<div class="alert alert-danger has-error">
{{ e }}
</div>
{% endfor %}
<div class="big-radio radio">
<label>
<input type="radio" value="on" name="{{ form.admission.html_name }}" {% if form.admission.value %}checked{% endif %}>
@@ -1,6 +1,7 @@
{% extends "pretixcontrol/event/base.html" %}
{% load i18n %}
{% load bootstrap3 %}
{% load money %}
{% block title %}
{% trans "Cancel order" %}
{% endblock %}
@@ -22,13 +23,22 @@
{% csrf_token %}
<input type="hidden" name="status" value="c"/>
{% bootstrap_form_errors form %}
{% if form.cancellation_fee %}
{% if fee %}
{% with fee|money:request.event.currency as f %}
<p>{% blocktrans trimmed with fee="<strong>"|add:f|add:"</strong>"|safe %}
The configured cancellation fee for a self-service cancellation would be {{ fee }} for this
order, but for a cancellation performed by you, you need to set the cancellation fee here:
{% endblocktrans %}</p>
{% endwith %}
{% endif %}
{% bootstrap_field form.cancellation_fee layout='' %}
{% endif %}
{% bootstrap_field form.send_email layout='' %}
{% bootstrap_field form.comment layout='' %}
{% if form.cancel_invoice %}
{% bootstrap_field form.cancel_invoice layout='' %}
{% endif %}
{% if form.cancellation_fee %}
{% bootstrap_field form.cancellation_fee layout='' %}
{% endif %}
<div class="row checkout-button-row">
<div class="col-md-4">
<a class="btn btn-block btn-default btn-lg"
@@ -0,0 +1,46 @@
{% extends "pretixcontrol/organizers/base.html" %}
{% load i18n %}
{% load bootstrap3 %}
{% block inner %}
<h1>
{% trans "Change multiple devices" %}
<small>
{% blocktrans trimmed with number=devices.count %}
{{ number }} selected
{% endblocktrans %}
</small>
</h1>
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
{% bootstrap_form_errors form %}
<div class="hidden">
{% for d in devices %}
<input type="hidden" name="device" value="{{ d.pk }}">
{% endfor %}
</div>
<fieldset>
<legend>{% trans "General" %}</legend>
<div class="bulk-edit-field-group">
<label class="field-toggle">
<input type="checkbox" name="_bulk" value="{{ form.prefix }}__events" {% if form.prefix|add:"__events" in bulk_selected %}checked{% endif %}>
{% trans "change" context "form_bulk" %}
</label>
<div class="field-content">
{% bootstrap_field form.all_events layout="control" %}
{% bootstrap_field form.limit_events layout="control" %}
</div>
</div>
</fieldset>
<p>&nbsp;</p>
<fieldset>
<legend>{% trans "Advanced settings" %}</legend>
{% bootstrap_field form.security_profile layout="bulkedit" %}
{% bootstrap_field form.gate layout="bulkedit" %}
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}
</button>
</div>
</form>
{% endblock %}
@@ -21,7 +21,7 @@
</p>
<a href="{% url "control:organizer.device.add" organizer=request.organizer.slug %}"
class="btn btn-primary btn-lg"><i class="fa fa-plus"></i> {% trans "Connect a device" %}</a>
class="btn btn-primary btn-lg"><i class="fa fa-plus"></i> {% trans "Connect a device" %}</a>
</div>
{% else %}
<div class="panel panel-default">
@@ -53,101 +53,139 @@
</div>
<p>
<a href="{% url "control:organizer.device.add" organizer=request.organizer.slug %}"
class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Connect a device" %}</a>
class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Connect a device" %}</a>
</p>
<div class="table-responsive">
<table class="table table-condensed table-hover">
<thead>
<tr>
<th>{% trans "Device ID" %}
<a href="?{% url_replace request 'ordering' '-device_id' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'device_id' %}"><i class="fa fa-caret-up"></i></a></th>
</th>
<th>{% trans "Name" %}
<a href="?{% url_replace request 'ordering' '-name' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'name' %}"><i class="fa fa-caret-up"></i></a></th>
</th>
<th>{% trans "Hardware model" %}</th>
<th>{% trans "Software" %}</th>
<th>{% trans "Setup date" %}
<a href="?{% url_replace request 'ordering' '-initialized' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'initialized' %}"><i class="fa fa-caret-up"></i></a></th>
</th>
<th>{% trans "Events" %}</th>
<th></th>
</tr>
</thead>
<tbody>
{% for d in devices %}
<tr {% if d.revoked %}class="text-muted"{% endif %}>
<td>
{{ d.device_id }}
</td>
<td>
{% if d.revoked %}<del>{% endif %}
{{ d.name }}
{% if d.revoked %}</del>{% endif %}
{% if d.gate %}
<br>
<small class="text-muted">{{ d.gate.name }}</small>
{% endif %}
<br>
<small class="text-muted">{{ d.unique_serial }}</small>
</td>
<td>
{{ d.hardware_brand|default_if_none:"" }} {{ d.hardware_model|default_if_none:"" }}
</td>
<td>
{{ d.software_brand|default_if_none:"" }} {{ d.software_version|default_if_none:"" }}
</td>
<td>
{% if d.initialized %}
{{ d.initialized|date:"SHORT_DATETIME_FORMAT" }}
{% else %}
<em>{% trans "Not yet initialized" %}</em>
{% endif %}
{% if d.revoked %}
<span class="label label-danger">{% trans "Revoked" %}</span>
{% endif %}
</td>
<td>
{% if d.all_events %}
{% trans "All" %}
{% else %}
<ul>
{% for e in d.limit_events.all %}
<li>
<a href="{% url "control:event.index" organizer=request.organizer.slug event=e.slug %}">
{{ e }}
</a>
</li>
{% endfor %}
</ul>
{% endif %}
</td>
<td class="text-right flip">
{% if not d.initialized %}
<a href="{% url "control:organizer.device.connect" organizer=request.organizer.slug device=d.id %}"
class="btn btn-primary btn-sm"><i class="fa fa-link"></i>
{% trans "Connect" %}</a>
{% elif d.api_token %}
<a href="{% url "control:organizer.device.revoke" organizer=request.organizer.slug device=d.id %}"
class="btn btn-default btn-sm">
{% trans "Revoke access" %}</a>
{% endif %}
<a href="{% url "control:organizer.device.logs" organizer=request.organizer.slug device=d.id %}"
class="btn btn-default btn-sm">
<span class="fa fa-list-alt"></span>
{% trans "Logs" %}
</a>
<a href="{% url "control:organizer.device.edit" organizer=request.organizer.slug device=d.id %}"
class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
</td>
<form action="{% url "control:organizer.device.bulk_edit" organizer=request.organizer.slug %}" method="post">
{% csrf_token %}
<div class="hidden">
{{ filter_form.as_p }}
</div>
<div class="table-responsive">
<table class="table table-condensed table-hover table-quotas">
<thead>
<tr>
<th>
<label aria-label="{% trans "select all rows for batch-operation" %}"
class="batch-select-label"><input type="checkbox" data-toggle-table/></label>
</th>
<th>{% trans "Device ID" %}
<a href="?{% url_replace request 'ordering' '-device_id' %}"><i
class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'device_id' %}"><i
class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Name" %}
<a href="?{% url_replace request 'ordering' '-name' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'name' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Hardware model" %}</th>
<th>{% trans "Software" %}</th>
<th>{% trans "Setup date" %}
<a href="?{% url_replace request 'ordering' '-initialized' %}"><i
class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'initialized' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Events" %}</th>
<th></th>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% if page_obj.paginator.num_pages > 1 %}
<tr class="table-select-all warning hidden">
<td>
<input type="checkbox" name="__ALL" id="__all"
data-results-total="{{ page_obj.paginator.count }}">
</td>
<td colspan="7">
<label for="__all">
{% trans "Select all results on other pages as well" %}
</label>
</td>
</tr>
{% endif %}
</thead>
<tbody>
{% for d in devices %}
<tr {% if d.revoked %}class="text-muted"{% endif %}>
<td>
<label aria-label="{% trans "select row for batch-operation" %}"
class="batch-select-label"><input type="checkbox" name="device"
class="batch-select-checkbox"
value="{{ d.pk }}"/></label>
</td>
<td>
{{ d.device_id }}
</td>
<td>
{% if d.revoked %}
<del>{% endif %}
{{ d.name }}
{% if d.revoked %}</del>{% endif %}
{% if d.gate %}
<br>
<small class="text-muted">{{ d.gate.name }}</small>
{% endif %}
<br>
<small class="text-muted">{{ d.unique_serial }}</small>
</td>
<td>
{{ d.hardware_brand|default_if_none:"" }} {{ d.hardware_model|default_if_none:"" }}
</td>
<td>
{{ d.software_brand|default_if_none:"" }} {{ d.software_version|default_if_none:"" }}
</td>
<td>
{% if d.initialized %}
{{ d.initialized|date:"SHORT_DATETIME_FORMAT" }}
{% else %}
<em>{% trans "Not yet initialized" %}</em>
{% endif %}
{% if d.revoked %}
<span class="label label-danger">{% trans "Revoked" %}</span>
{% endif %}
</td>
<td>
{% if d.all_events %}
{% trans "All" %}
{% else %}
<ul>
{% for e in d.limit_events.all %}
<li>
<a href="{% url "control:event.index" organizer=request.organizer.slug event=e.slug %}">
{{ e }}
</a>
</li>
{% endfor %}
</ul>
{% endif %}
</td>
<td class="text-right flip">
{% if not d.initialized %}
<a href="{% url "control:organizer.device.connect" organizer=request.organizer.slug device=d.id %}"
class="btn btn-primary btn-sm"><i class="fa fa-link"></i>
{% trans "Connect" %}</a>
{% elif d.api_token %}
<a href="{% url "control:organizer.device.revoke" organizer=request.organizer.slug device=d.id %}"
class="btn btn-default btn-sm">
{% trans "Revoke access" %}</a>
{% endif %}
<a href="{% url "control:organizer.device.logs" organizer=request.organizer.slug device=d.id %}"
class="btn btn-default btn-sm">
<span class="fa fa-list-alt"></span>
{% trans "Logs" %}
</a>
<a href="{% url "control:organizer.device.edit" organizer=request.organizer.slug device=d.id %}"
class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="batch-select-actions">
<button type="submit" class="btn btn-primary btn-save" name="action" value="edit">
<i class="fa fa-edit"></i>{% trans "Edit selected" %}
</button>
</div>
</form>
{% include "pretixcontrol/pagination.html" %}
{% endif %}
{% endblock %}
@@ -372,7 +372,9 @@
<label>{% trans "Content" %}</label><br>
<select class="input-block-level form-control" id="toolbox-content">
{% for varname, var in variables.items %}
<option data-sample="{{ var.editor_sample }}" value="{{ varname }}">{{ var.label }}</option>
{% if not var.hidden %}
<option data-sample="{{ var.editor_sample }}" {% if var.migrate_from %}data-old-value="{{ var.migrate_from }}"{% endif %} value="{{ varname }}">{{ var.label }}</option>
{% endif %}
{% endfor %}
{% for p in request.organizer.meta_properties.all %}
<option value="meta:{{ p.name }}">
@@ -394,6 +396,9 @@
<textarea id="toolbox-content-other-{{ l }}" rows="3" class="input-block-level form-control" title="{{ l }}" lang="{{ l }}"></textarea>
{% endfor %}
</div>
<p class="help-block" id="toolbox-content-other-help">
<a href="?placeholders=true" target="_blank">{% trans "Show available placeholders" %}</a>
</p>
</div>
</div>
</div>
@@ -0,0 +1,68 @@
{% extends "pretixcontrol/event/base.html" %}
{% load i18n %}
{% load static %}
{% load compress %}
{% block title %}{% trans "PDF Editor" %}{% endblock %}
{% block custom_header %}
{{ block.super }}
{% compress css %}
<link type="text/css" rel="stylesheet" href="{% static "pretixcontrol/scss/pdfeditor.css" %}">
{% endcompress %}
<link type="text/css" rel="stylesheet" href="{% url "control:pdf.css" %}">
{% endblock %}
{% block content %}
<h1>
{% trans "PDF Editor" %}
<small>{% trans "Available placeholders" %}</small>
</h1>
<p>
{% blocktrans trimmed %}
You can use placeholders in custom texts on tickets to enrich your text with individual data. Which
placeholders are available depends on your event settings, activated plugins, the selected product,
as well as user input.
This page lists all placeholders technically available for your event, however most of them can also
be empty in some cases depending on configuration.
{% endblocktrans %}
</p>
<div class="table-responsive">
<table class="table table-hover table-condensed">
<thead>
<tr>
<th>{% trans "Placeholder" %}</th>
<th>{% trans "Description" %}</th>
<th>{% trans "Formatting example" %}</th>
</tr>
</thead>
<tbody>
{% for varname, var in variables.items %}
{% if not var.hidden %}
<tr>
<td><code>{{ "{" }}{{ varname }}{{ "}" }}</code></td>
<td>{{ var.label }}</td>
<td>{{ var.editor_sample }}</td>
</tr>
{% endif %}
{% endfor %}
{% for p in request.organizer.meta_properties.all %}
<tr>
<td><code>{{ "{" }}meta:{{ p.name }}{{ "}" }}</code></td>
<td>
{% trans "Event attribute:" %} {{ p.name }}
</td>
<td></td>
</tr>
{% endfor %}
{% for p in request.event.item_meta_properties.all %}
<tr>
<td><code>{{ "{" }}itemmeta:{{ p.name }}{{ "}" }}</code></td>
<td>
{% trans "Item attribute:" %} {{ p.name }}
</td>
<td></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
@@ -188,7 +188,7 @@
<button type="submit" class="btn btn-danger btn-save" name="action" value="delete">
<i class="fa fa-trash"></i>{% trans "Delete selected" %}
</button>
<button type="submit" class="btn btn-primary btn-save" name="action" value="disable"
<button type="submit" class="btn btn-primary btn-save" name="action" value="edit"
formaction="{% url "control:event.subevents.bulkedit" organizer=request.event.organizer.slug event=request.event.slug %}">
<i class="fa fa-edit"></i>{% trans "Edit selected" %}
</button>
+2
View File
@@ -164,6 +164,8 @@ urlpatterns = [
re_path(r'^organizer/(?P<organizer>[^/]+)/devices$', organizer.DeviceListView.as_view(), name='organizer.devices'),
re_path(r'^organizer/(?P<organizer>[^/]+)/device/add$', organizer.DeviceCreateView.as_view(),
name='organizer.device.add'),
re_path(r'^organizer/(?P<organizer>[^/]+)/device/bulk_edit$', organizer.DeviceBulkUpdateView.as_view(),
name='organizer.device.bulk_edit'),
re_path(r'^organizer/(?P<organizer>[^/]+)/device/(?P<device>[^/]+)/edit$', organizer.DeviceUpdateView.as_view(),
name='organizer.device.edit'),
re_path(r'^organizer/(?P<organizer>[^/]+)/device/(?P<device>[^/]+)/connect$', organizer.DeviceConnectView.as_view(),
+17
View File
@@ -313,6 +313,23 @@ class CheckinListUpdate(EventPermissionRequiredMixin, UpdateView):
r['Content-Security-Policy'] = 'script-src \'unsafe-eval\''
return r
def get_context_data(self, **kwargs):
return {
'items': [
{
'id': i.pk,
'name': str(i),
'variations': [
{
'id': v.pk,
'name': str(v.value)
} for v in i.variations.all()
]
} for i in self.request.event.items.filter(active=True).prefetch_related('variations')
],
**super().get_context_data(),
}
def get_object(self, queryset=None) -> CheckinList:
try:
return self.request.event.checkin_lists.get(
+3
View File
@@ -1055,6 +1055,9 @@ class EventLog(EventPermissionRequiredMixin, PaginationMixin, ListView):
elif self.request.GET.get('user'):
qs = qs.filter(user_id=self.request.GET.get('user'))
if self.request.GET.get('action_type'):
qs = qs.filter(action_type=self.request.GET['action_type'])
if self.request.GET.get('content_type'):
qs = qs.filter(content_type=get_object_or_404(ContentType, pk=self.request.GET.get('content_type')))
+1 -1
View File
@@ -102,7 +102,7 @@ class ItemList(ListView):
).annotate(
var_count=Count('variations')
).prefetch_related("category").order_by(
F('category__position').desc(nulls_first=True),
F('category__position').asc(nulls_first=True),
'category', 'position'
)
+2
View File
@@ -1266,6 +1266,7 @@ class OrderTransition(OrderView):
elif self.order.cancel_allowed() and to == 'c' and self.mark_canceled_form.is_valid():
try:
cancel_order(self.order.pk, user=self.request.user,
email_comment=self.mark_canceled_form.cleaned_data['comment'],
send_mail=self.mark_canceled_form.cleaned_data['send_email'],
cancel_invoice=self.mark_canceled_form.cleaned_data.get('cancel_invoice', True),
cancellation_fee=self.mark_canceled_form.cleaned_data.get('cancellation_fee'))
@@ -1303,6 +1304,7 @@ class OrderTransition(OrderView):
elif self.order.cancel_allowed() and to == 'c':
return render(self.request, 'pretixcontrol/order/cancel.html', {
'form': self.mark_canceled_form,
'fee': self.order.user_cancel_fee,
'order': self.order,
})
else:
+154 -16
View File
@@ -42,14 +42,14 @@ from django.conf import settings
from django.contrib import messages
from django.core.exceptions import PermissionDenied, ValidationError
from django.core.files import File
from django.db import transaction
from django.db import connections, transaction
from django.db.models import (
Count, Exists, IntegerField, Max, Min, OuterRef, Prefetch, ProtectedError,
Q, Subquery, Sum,
)
from django.db.models.functions import Coalesce, Greatest
from django.forms import DecimalField
from django.http import HttpResponseBadRequest, JsonResponse
from django.http import HttpResponse, HttpResponseBadRequest, JsonResponse
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
from django.utils.functional import cached_property
@@ -89,11 +89,11 @@ from pretix.control.forms.filter import (
)
from pretix.control.forms.orders import ExporterForm
from pretix.control.forms.organizer import (
CustomerCreateForm, CustomerUpdateForm, DeviceForm, EventMetaPropertyForm,
GateForm, GiftCardCreateForm, GiftCardUpdateForm, MailSettingsForm,
MembershipTypeForm, MembershipUpdateForm, OrganizerDeleteForm,
OrganizerForm, OrganizerSettingsForm, OrganizerUpdateForm, TeamForm,
WebHookForm,
CustomerCreateForm, CustomerUpdateForm, DeviceBulkEditForm, DeviceForm,
EventMetaPropertyForm, GateForm, GiftCardCreateForm, GiftCardUpdateForm,
MailSettingsForm, MembershipTypeForm, MembershipUpdateForm,
OrganizerDeleteForm, OrganizerForm, OrganizerSettingsForm,
OrganizerUpdateForm, TeamForm, WebHookForm,
)
from pretix.control.logdisplay import OVERVIEW_BANLIST
from pretix.control.permissions import (
@@ -102,6 +102,7 @@ from pretix.control.permissions import (
from pretix.control.signals import nav_organizer
from pretix.control.views import PaginationMixin
from pretix.control.views.mailsetup import MailSettingsSetupView
from pretix.helpers import GroupConcat
from pretix.helpers.dicts import merge_dicts
from pretix.helpers.urls import build_absolute_uri as build_global_uri
from pretix.multidomain.urlreverse import build_absolute_uri
@@ -819,11 +820,17 @@ class TeamMemberView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin,
})
class DeviceListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView):
model = Device
template_name = 'pretixcontrol/organizers/devices.html'
permission = 'can_change_organizer_settings'
context_object_name = 'devices'
class DeviceQueryMixin:
@cached_property
def request_data(self):
if self.request.method == "POST":
return self.request.POST
return self.request.GET
@cached_property
def filter_form(self):
return DeviceFilterForm(data=self.request.GET, request=self.request)
def get_queryset(self):
qs = self.request.organizer.devices.prefetch_related(
@@ -831,17 +838,27 @@ class DeviceListView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin,
).order_by('revoked', '-device_id')
if self.filter_form.is_valid():
qs = self.filter_form.filter_qs(qs)
if 'device' in self.request_data and '__ALL' not in self.request_data:
qs = qs.filter(
id__in=self.request_data.getlist('device')
)
return qs
class DeviceListView(DeviceQueryMixin, OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, ListView):
model = Device
template_name = 'pretixcontrol/organizers/devices.html'
permission = 'can_change_organizer_settings'
context_object_name = 'devices'
paginate_by = 100
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['filter_form'] = self.filter_form
return ctx
@cached_property
def filter_form(self):
return DeviceFilterForm(data=self.request.GET, request=self.request)
class DeviceCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView):
model = Device
@@ -935,6 +952,125 @@ class DeviceUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixi
return super().form_invalid(form)
class DeviceBulkUpdateView(DeviceQueryMixin, OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, FormView):
template_name = 'pretixcontrol/organizers/device_bulk_edit.html'
permission = 'can_change_organizer_settings'
context_object_name = 'device'
form_class = DeviceBulkEditForm
def get_queryset(self):
return super().get_queryset().prefetch_related(None).order_by()
def get(self, request, *args, **kwargs):
return HttpResponse(status=405)
@cached_property
def is_submitted(self):
# Usually, django considers a form "bound" / "submitted" on every POST request. However, this view is always
# called with POST method, even if just to pass the selection of objects to work on, so we want to modify
# that behaviour
return '_bulk' in self.request.POST
def get_form_kwargs(self):
initial = {}
mixed_values = set()
qs = self.get_queryset().annotate(
limit_events_list=Subquery(
Device.limit_events.through.objects.filter(
device_id=OuterRef('pk')
).order_by('device_id', 'event_id').values('device_id').annotate(
g=GroupConcat('event_id', separator=',')
).values('g')
)
)
fields = {
'all_events': 'all_events',
'limit_events': 'limit_events_list',
'security_profile': 'security_profile',
'gate': 'gate',
}
for k, f in fields.items():
existing_values = list(qs.order_by(f).values(f).annotate(c=Count('*')))
if len(existing_values) == 1:
if k == 'limit_events':
if existing_values[0][f]:
initial[k] = self.request.organizer.events.filter(id__in=existing_values[0][f].split(","))
else:
initial[k] = []
else:
initial[k] = existing_values[0][f]
elif len(existing_values) > 1:
mixed_values.add(k)
initial[k] = None
kwargs = super().get_form_kwargs()
kwargs['organizer'] = self.request.organizer
kwargs['prefix'] = 'bulkedit'
kwargs['initial'] = initial
kwargs['queryset'] = self.get_queryset()
kwargs['mixed_values'] = mixed_values
if not self.is_submitted:
kwargs['data'] = None
kwargs['files'] = None
return kwargs
def get_object(self, queryset=None):
return get_object_or_404(Device, organizer=self.request.organizer, pk=self.kwargs.get('device'))
def get_success_url(self):
return reverse('control:organizer.devices', kwargs={
'organizer': self.request.organizer.slug,
})
@transaction.atomic()
def form_valid(self, form):
log_entries = []
# Main form
form.save()
data = {
k: (v if k != 'limit_events' else [e.id for e in v])
for k, v in form.cleaned_data.items()
if k in form.changed_data
}
data['_raw_bulk_data'] = self.request.POST.dict()
for obj in self.get_queryset():
log_entries.append(
obj.log_action('pretix.device.changed', data=data, user=self.request.user, save=False)
)
if connections['default'].features.can_return_rows_from_bulk_insert:
LogEntry.objects.bulk_create(log_entries, batch_size=200)
LogEntry.bulk_postprocess(log_entries)
else:
for le in log_entries:
le.save()
LogEntry.bulk_postprocess(log_entries)
messages.success(self.request, _('Your changes have been saved.'))
return super().form_valid(form)
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['devices'] = self.get_queryset()
ctx['bulk_selected'] = self.request.POST.getlist("_bulk")
return ctx
def post(self, request, *args, **kwargs):
form = self.get_form()
is_valid = (
self.is_submitted and
form.is_valid()
)
if is_valid:
return self.form_valid(form)
else:
if self.is_submitted:
messages.error(self.request, _('We could not save your changes. See below for details.'))
return self.form_invalid(form)
class DeviceConnectView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView):
model = Device
template_name = 'pretixcontrol/organizers/device_connect.html'
@@ -1624,6 +1760,8 @@ class LogView(OrganizerPermissionRequiredMixin, PaginationMixin, ListView):
'user', 'content_type', 'api_token', 'oauth_application', 'device'
).order_by('-datetime')
qs = qs.exclude(action_type__in=OVERVIEW_BANLIST)
if self.request.GET.get('action_type'):
qs = qs.filter(action_type=self.request.GET['action_type'])
if self.request.GET.get('user'):
qs = qs.filter(user_id=self.request.GET.get('user'))
return qs
+8 -1
View File
@@ -33,7 +33,7 @@ from django.core.files.storage import default_storage
from django.http import (
FileResponse, HttpResponse, HttpResponseBadRequest, JsonResponse,
)
from django.shortcuts import get_object_or_404
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django.utils.crypto import get_random_string
from django.utils.timezone import now
@@ -65,10 +65,17 @@ class BaseEditorView(EventPermissionRequiredMixin, TemplateView):
title = None
def get(self, request, *args, **kwargs):
if 'placeholders' in request.GET:
return self.get_placeholders_help(request)
resp = super().get(request, *args, **kwargs)
resp._csp_ignore = True
return resp
def get_placeholders_help(self, request):
ctx = {}
ctx['variables'] = self.get_variables()
return render(request, 'pretixcontrol/pdf/placeholders.html', ctx)
def process_upload(self):
f = self.request.FILES.get('background')
error = False
+15 -3
View File
@@ -37,7 +37,7 @@ from datetime import datetime, time
import pytz
from dateutil.parser import parse
from django.core.exceptions import PermissionDenied
from django.db.models import Max, Min, Q
from django.db.models import F, Max, Min, Q
from django.db.models.functions import Coalesce, Greatest
from django.http import JsonResponse
from django.shortcuts import get_object_or_404
@@ -402,7 +402,12 @@ def items_select2(request, **kwargs):
qs = request.event.items.filter(
name__icontains=i18ncomp(query)
).order_by('position')
).order_by(
F('category__position').asc(nulls_first=True),
'category',
'position',
'pk'
)
total = qs.count()
pagesize = 20
@@ -434,7 +439,14 @@ def variations_select2(request, **kwargs):
for word in query.split():
q &= Q(value__icontains=i18ncomp(word)) | Q(item__name__icontains=i18ncomp(ord))
qs = ItemVariation.objects.filter(q).order_by('item__position', 'item__name', 'position', 'value').select_related('item')
qs = ItemVariation.objects.filter(q).order_by(
F('item__category__position').asc(nulls_first=True),
'item__category_id',
'item__position',
'item__pk'
'position',
'value'
).select_related('item')
total = qs.count()
pagesize = 20
+2 -1
View File
@@ -399,7 +399,8 @@ class User2FADeviceConfirmWebAuthnView(RecentAuthenticationRequiredMixin, Templa
ukey,
self.request.user.email,
str(self.request.user),
settings.SITE_URL
settings.SITE_URL,
attestation="none"
)
ctx['jsondata'] = json.dumps(make_credential_options.registration_dict)
+2 -2
View File
@@ -35,7 +35,7 @@ def convert_to_dnf(rules):
def _distribute_or_over_and(r):
operator = list(r.keys())[0]
values = rules[operator]
values = r[operator]
if operator == "and":
arg_to_distribute = [arg for arg in values if isinstance(arg, dict) and "or" in arg]
if not arg_to_distribute:
@@ -57,7 +57,7 @@ def convert_to_dnf(rules):
if not isinstance(r, dict):
return r
operator = list(r.keys())[0]
values = rules[operator]
values = r[operator]
if operator not in ("or", "and"):
return r
new_values = []
+1 -1
View File
@@ -46,7 +46,7 @@ class GreaterEqualThan(Func):
class LowerEqualThan(Func):
arg_joiner = ' < '
arg_joiner = ' <= '
arity = 2
function = ''
+2 -2
View File
@@ -19,7 +19,7 @@
# 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 PIL.Image import BICUBIC
from PIL.Image import Resampling
from reportlab.lib.utils import ImageReader
@@ -31,7 +31,7 @@ class ThumbnailingImageReader(ImageReader):
height = width * self._image.size[1] / self._image.size[0]
self._image.thumbnail(
size=(int(width * dpi / 72), int(height * dpi / 72)),
resample=BICUBIC
resample=Resampling.BICUBIC
)
self._data = None
return width, height
+2 -2
View File
@@ -26,7 +26,7 @@ from io import BytesIO
from django.core.files.base import ContentFile
from django.core.files.storage import default_storage
from PIL import Image, ImageOps
from PIL.Image import LANCZOS
from PIL.Image import Resampling
from pretix.helpers.models import Thumbnail
@@ -141,7 +141,7 @@ def resize_image(image, size):
image = ImageOps.exif_transpose(image)
new_size, crop = get_sizes(size, image.size)
image = image.resize(new_size, resample=LANCZOS)
image = image.resize(new_size, resample=Resampling.LANCZOS)
if crop:
image = image.crop(crop)
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2021-09-15 11:22+0000\n"
"Last-Translator: Mohamed Tawfiq <mtawfiq@wafyapp.com>\n"
"Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -318,43 +318,43 @@ msgstr "عدد المدخلات السابقة قبل منتصف الليل"
msgid "Number of days with a previous entry"
msgstr "عدد الأيام التي تحتوي على مدخل سابق"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr "جميع الشروط في الأسفل"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr "خيار واحد على الأقل"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "بداية الفعالية"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "نهاية الفعالية"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr "تسجيل الفعالية"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr "تحديد التاريخ والوقت"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "الوقت المحدد"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "القدرة على التحمل (الدقائق)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "أضف شرطا"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr "الدقائق"
@@ -366,44 +366,44 @@ msgstr "QR الدخول"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "لا يمكن تحميل ملف PDF الخلفية للأسباب التالية:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "مجموعة من العناصر"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "عنصر نص"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "منطقة باركود"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr "منطقة صورة"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "مدعوم من pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "عنصر"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "تصميم التذكرة"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "فشلت عملية الحفظ."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr "حصل خطأ أثناء رفع ملف PDF الخاص بك، يرجى المحاولة مرة أخرى."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "هل تريد أن تغادر المحرر دون حفظ التعديلات؟"
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2020-12-19 07:00+0000\n"
"Last-Translator: albert <albert.serra.monner@gmail.com>\n"
"Language-Team: Catalan <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -303,43 +303,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -351,44 +351,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Disseny del tiquet"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2021-12-06 23:00+0000\n"
"Last-Translator: Ondřej Sokol <osokol@treesoft.cz>\n"
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -315,43 +315,43 @@ msgstr "Počet záznamů od půlnoci"
msgid "Number of days with a previous entry"
msgstr "Počet dní bez úprav"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr "Všechny následující podmínky (AND)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr "Alespoň jedna z následujících podmínek (OR)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "Začátek akce"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "Konec akce"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr "Vstup na akci"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr "Pevný termín"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "Pevná doba"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "Tolerance (v minutách)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "Přidat podmínku"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr "minuty"
@@ -363,44 +363,44 @@ msgstr "Check-in QR kód"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Pozadí PDF nemohl být načten:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Skupina objektů"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Textový objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Oblast s QR kódem"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr "Oblast obrazu"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Poháněno společností pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Design vstupenky"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Uložení se nepodařilo."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
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."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Opravdu chcete opustit editor bez uložení změn?"
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"PO-Revision-Date: 2021-09-13 09:48+0000\n"
"Last-Translator: Mie Frydensbjerg <mif@aarhus.dk>\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2022-04-01 13:36+0000\n"
"Last-Translator: Anna-itk <abc@aarhus.dk>\n"
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/"
"da/>\n"
"Language: da\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.8\n"
"X-Generator: Weblate 4.11.2\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -343,43 +343,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -391,46 +391,46 @@ msgstr "Check-in QR"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Baggrunds-pdf'en kunne ikke hentes af følgende grund:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Gruppe af objekter"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Tekstobjekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "QR-kode-område"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "QR-kode-område"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Drevet af pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Billetdesign"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Gem fejlede."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr "Fejl under upload af pdf. Prøv venligt igen."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Er du sikker på at du vil forlade editoren uden at gemme dine ændringer?"
@@ -520,12 +520,12 @@ msgstr[0] "(en dato mere)"
msgstr[1] "({num} datoer mere)"
#: pretix/static/pretixpresale/js/ui/cart.js:43
#, fuzzy
#| msgid "The items in your cart are no longer reserved for you."
msgid ""
"The items in your cart are no longer reserved for you. You can still "
"complete your order as long as theyre available."
msgstr "Varerne i din kurv er ikke længere reserverede for dig."
msgstr ""
"Varerne i din indkøbskurv er ikke længere reserverede til dig. Du kan stadig "
"færdiggøre din ordre, så længe der er ledige billetter."
#: pretix/static/pretixpresale/js/ui/cart.js:45
msgid "Cart expired"
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2021-10-25 15:40+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -318,43 +318,43 @@ msgstr "Anzahl bisheriger Eintritte seit Mitternacht"
msgid "Number of days with a previous entry"
msgstr "Anzahl an Tagen mit vorherigem Eintritt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr "Alle der folgenden Bedingungen (UND)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr "Mindestens eine der folgenden Bedingungen (ODER)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "Veranstaltungsbeginn"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "Veranstaltungsende"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr "Einlass"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr "Fester Zeitpunkt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "Feste Uhrzeit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "Toleranz (Minuten)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "Bedingung hinzufügen"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr "Minuten"
@@ -366,45 +366,45 @@ msgstr "Check-in-QR-Code"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Die Hintergrund-PDF-Datei konnte nicht geladen werden:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Gruppe von Objekten"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Text-Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "QR-Code-Bereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr "Bildbereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Event-Ticketshop von pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Ticket-Design"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Speichern fehlgeschlagen."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
"Es gab ein Problem beim Hochladen der PDF-Datei, bitte erneut versuchen."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"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 ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2021-10-25 15:40+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
@@ -317,43 +317,43 @@ msgstr "Anzahl bisheriger Eintritte seit Mitternacht"
msgid "Number of days with a previous entry"
msgstr "Anzahl an Tagen mit vorherigem Eintritt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr "Alle der folgenden Bedingungen (UND)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr "Mindestens eine der folgenden Bedingungen (ODER)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "Veranstaltungsbeginn"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "Veranstaltungsende"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr "Einlass"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr "Fester Zeitpunkt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "Feste Uhrzeit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "Toleranz (Minuten)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "Bedingung hinzufügen"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr "Minuten"
@@ -365,45 +365,45 @@ msgstr "Check-in-QR-Code"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Die Hintergrund-PDF-Datei konnte nicht geladen werden:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Gruppe von Objekten"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Text-Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "QR-Code-Bereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr "Bildbereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Event-Ticketshop von pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Ticket-Design"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Speichern fehlgeschlagen."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
"Es gab ein Problem beim Hochladen der PDF-Datei, bitte erneut versuchen."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Möchtest du den Editor wirklich schließen ohne Ihre Änderungen zu speichern?"
+1432 -1290
View File
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -302,43 +302,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -350,44 +350,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2019-10-03 19:00+0000\n"
"Last-Translator: Chris Spy <chrispiropoulou@hotmail.com>\n"
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -350,43 +350,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -399,46 +399,46 @@ msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
"Το αρχείο φόντου PDF δεν ήταν δυνατό να φορτωθεί για τον ακόλουθο λόγο:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Ομάδα αντικειμένων"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Αντικείμενο κειμένου"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Περιοχή Barcode"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Περιοχή Barcode"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Υποστηρίζεται από το Pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Αντικείμενο"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Σχεδιασμός εισιτηρίων"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Η αποθήκευση απέτυχε."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr "Σφάλμα κατά τη μεταφόρτωση του αρχείου PDF, δοκιμάστε ξανά."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Θέλετε πραγματικά να αφήσετε τον επεξεργαστή χωρίς να αποθηκεύσετε τις "
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2021-11-25 21:00+0000\n"
"Last-Translator: Ismael Menéndez Fernández <ismael.menendez@balidea.com>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -315,43 +315,43 @@ msgstr "Número de entradas previas desde medianoche"
msgid "Number of days with a previous entry"
msgstr "Número de días con una entrada previa"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr "Todas las siguientes condiciones (Y)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr "Al menos una de las siguientes condiciones (O)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "Inicio del evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "Fin del evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr "Admisión al evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr "seleccionar fecha y hora"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "seleccionar hora"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "Tolerancia (en minutos)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "Añadir condición"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr "minutos"
@@ -364,46 +364,46 @@ msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
"El archivo PDF de fondo no ha podido ser cargado debido al siguiente motivo:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Grupo de objetos"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Objeto de texto"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Área para código de barras"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr "Área de imagen"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Proveído por pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Objeto"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Diseño del ticket"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "El guardado falló."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
"Ha habido un error mientras se cargaba el archivo PDF, por favor, intente de "
"nuevo."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "¿Realmente desea salir del editor sin haber guardado sus cambios?"
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2021-11-10 05:00+0000\n"
"Last-Translator: Jaakko Rinta-Filppula <jaakko@r-f.fi>\n"
"Language-Team: Finnish <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -317,45 +317,45 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "Tapahtuma alkaa"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "Tapahtuma päättyy"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#, fuzzy
#| msgid "Current date and time"
msgid "custom date and time"
msgstr "Nykyinen päivämäärä ja aika"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "mukautettu aika"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "Toleranssi (minuuttia)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "Lisää ehto"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -367,46 +367,46 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Tekstiobjekti"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Viivakoodialue"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Viivakoodialue"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Tallennus epäonnistui."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
File diff suppressed because it is too large Load Diff
+26 -30
View File
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: French\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"PO-Revision-Date: 2021-12-04 01:00+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2022-04-07 10:40+0000\n"
"Last-Translator: Eva-Maria Obermann <obermann@rami.io>\n"
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/"
"fr/>\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.8\n"
"X-Generator: Weblate 4.11.2\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -343,43 +343,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "Début de l'événement"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "Fin de l'événement"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -393,47 +393,47 @@ msgstr ""
"Le fichier PDF généré en arrière-plan n'a pas pu être chargé pour la raison "
"suivante :"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Groupe d'objets"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Objet texte"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Zone de code-barres"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Zone de code-barres"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Propulsé par pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Objet"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Conception des billets"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "L'enregistrement a échoué."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
"Erreur lors du téléchargement de votre fichier PDF, veuillez réessayer."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Voulez-vous vraiment quitter l'éditeur sans sauvegarder vos modifications ?"
@@ -536,14 +536,10 @@ msgid "Cart expired"
msgstr "Panier expiré"
#: pretix/static/pretixpresale/js/ui/cart.js:50
#, fuzzy
#| msgid "The items in your cart are reserved for you for one minute."
#| msgid_plural ""
#| "The items in your cart are reserved for you for {num} minutes."
msgid "The items in your cart are reserved for you for one minute."
msgid_plural "The items in your cart are reserved for you for {num} minutes."
msgstr[0] "Les articles de votre panier vous sont réservés pour une minute."
msgstr[1] "Les articles de votre panier vous sont réservés pour {num} minutes."
msgstr[0] "Les articles de votre panier sont réservés pour une minute."
msgstr[1] "Les articles de votre panier sont réservés pendant {num} minutes."
#: pretix/static/pretixpresale/js/ui/main.js:144
#, fuzzy
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2022-02-22 22:00+0000\n"
"Last-Translator: Ismael Menéndez Fernández <ismael.menendez@balidea.com>\n"
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -315,43 +315,43 @@ msgstr "Número de entradas previas desde a medianoite"
msgid "Number of days with a previous entry"
msgstr "Número de días cunha entrada previa"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr "Todas as condicións seguintes (E)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr "Polo menos unha das seguintes condicións (OU)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "Comezo do evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "Fin do evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr "Admisión ao evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr "Seleccionar data e hora"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "Seleccionar hora"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "Tolerancia (en minutos)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "Engadir condición"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr "minutos"
@@ -363,45 +363,45 @@ msgstr "QR de validación"
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:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Grupo de obxectos"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Obxecto de texto"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Área para código de barras"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr "Área de imaxe"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Desenvolto por Pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Obxecto"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Deseño do tícket"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "O gardado fallou."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
"Houbo un erro mentres se cargaba o arquivo PDF. Por favor, inténteo de novo."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Realmente desexa saír do editor sen gardar os cambios?"
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2021-09-24 13:54+0000\n"
"Last-Translator: ofirtro <ofir.tro@gmail.com>\n"
"Language-Team: Hebrew <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -306,43 +306,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -354,44 +354,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2020-01-24 08:00+0000\n"
"Last-Translator: Prokaj Miklós <mixolid0@gmail.com>\n"
"Language-Team: Hungarian <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -343,43 +343,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -391,46 +391,46 @@ msgstr "Check in QR"
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:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "tárgy csoport"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Szöveg"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Vonalkód terület"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Vonalkód terület"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "pretix által működtetett"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "objektum"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Jegy design"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Mentés sikertelen."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
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."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
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?"
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2022-02-28 23:00+0000\n"
"Last-Translator: Emanuele Signoretta <signorettae@gmail.com>\n"
"Language-Team: Italian <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -315,43 +315,43 @@ msgstr "Numero di inserimenti precedenti fino a mezzanotte"
msgid "Number of days with a previous entry"
msgstr "Nunmero di giorni con un inserimento precedente"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr "Tutte le condizioni sottostanti (e)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr "Almeno una delle condizioni sottostanti (oppure)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "Evento inizia"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "Evento termina"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr "Ammissione all'evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr "data e ora personalizzate"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "Orario personalizzato"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "Tolleranza (minuti)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "Aggiungi condizione"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr "minuti"
@@ -363,44 +363,44 @@ msgstr "Check-in con QR"
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:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Gruppo di oggetti"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Oggetto testo"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Area codice a barra"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr "Area immagini"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Powered by Pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Oggetto"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Design biglietto"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Salvataggio fallito."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr "Errore durante il caricamento del tuo file PDF, prova di nuovo."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Vuoi davvero abbandonare l'editor senza salvare le modifiche?"
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2022-03-15 00:00+0000\n"
"Last-Translator: Yuriko Matsunami <y.matsunami@enobyte.com>\n"
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -314,43 +314,43 @@ msgstr "0時から現在までの入力件数"
msgid "Number of days with a previous entry"
msgstr "これまでの入力日数"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr "以下全ての条件(と)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr "以下の条件のうち、最低1つ(または)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "イベント開始"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "イベント終了"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr "イベントの入場"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr "日時確定"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "時刻確定"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "許容誤差(分)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "条件を追加"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr "分"
@@ -362,44 +362,44 @@ msgstr "チェックイン用QRコード"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "以下の理由によりPDFファイルの読み込みに失敗しました:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "オブジェクトグループ"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "テキストオブジェクト"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "バーコードエリア"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr "画像エリア"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Pretixのイベントチケット売り場"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "オブジェクト"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "チケットのデザイン"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "保存できませんでした。"
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr "PDFのアップロード中に問題が発生しました。再試行してください。"
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "変更内容を保存せずに編集を終了しますか?"
File diff suppressed because it is too large Load Diff
+27 -27
View File
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"PO-Revision-Date: 2021-12-09 15:49+0000\n"
"Last-Translator: Ilona Zilgalve <i.zilgalve@riga-jurmala.com>\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2022-04-06 03:00+0000\n"
"Last-Translator: Liga V <lerning_by_dreaming@gmx.de>\n"
"Language-Team: Latvian <https://translate.pretix.eu/projects/pretix/pretix-"
"js/lv/>\n"
"Language: lv\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
"X-Generator: Weblate 4.8\n"
"X-Generator: Weblate 4.11.2\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -316,43 +316,43 @@ msgstr "Iepriekšējo pieslēgumu skaits kopš pusnakts"
msgid "Number of days with a previous entry"
msgstr "Dienu skaits ar iepriekšējo ierakstu"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr "Visi nosacījumi, kas zemāk (AND)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr "Vismaz viens nosacījums, kas zemāk (OR)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "Pasākums sākas"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "Pasākums beidzas"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr "Ieeja pasākumā"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr "pielāgots datums un laiks"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "pielāgots laiks"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "Pielaide (minūtes)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "Pievienot nosacījumu"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr "minūtes"
@@ -364,45 +364,45 @@ msgstr "Reģistrācijas QR"
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ēļ:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Objektu grupa"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Teksta objekts"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Svītru koda lauks"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr "Attēla lauks"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Pretix atbalstīts"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Objekts"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Biļetes dizains"
msgstr "Biļešu dizains"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Saglabāšana neizdevās."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
"Radusies kļūda augšupielādējot jūsu PDF failu, lūdzu, mēģiniet vēlreiz."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Vai jūs tiešām vēlaties iziet no rediģēšanas lauka bez veikto izmaiņu "
@@ -581,7 +581,7 @@ msgstr "iesk. %(rate)s% %(taxname)s"
#: pretix/static/pretixpresale/js/widget/widget.js:24
msgctxt "widget"
msgid "plus %(rate)s% %(taxname)s"
msgstr "plus %(rate)s% %(taxname)s"
msgstr "papildus %(rate)s% %(taxname)s"
#: pretix/static/pretixpresale/js/widget/widget.js:25
msgctxt "widget"
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2021-05-31 11:26+0000\n"
"Last-Translator: zackern <zacker@zacker.no>\n"
"Language-Team: Norwegian Bokmål <https://translate.pretix.eu/projects/pretix/"
@@ -314,43 +314,43 @@ msgstr "Antall tidligere oppføringer siden midnatt"
msgid "Number of days with a previous entry"
msgstr "Antall dager med en tidligere oppføring"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -362,44 +362,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2021-10-29 02:00+0000\n"
"Last-Translator: Maarten van den Berg <maartenberg1@gmail.com>\n"
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -313,43 +313,43 @@ msgstr "Aantal eerdere binnenkomsten sinds middernacht"
msgid "Number of days with a previous entry"
msgstr "Aantal dagen met een eerdere binnenkomst"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr "Alle volgende voorwaarden (EN)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr "Ten minste één van de volgende voorwaarden (OF)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "Start van het evenement"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "Einde van het evenement"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr "Toegangstijd evenement"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr "Aangepaste datum en tijd"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "aangepaste tijd"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "Speling (minuten)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "Voorwaarde toevoegen"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr "minuten"
@@ -361,44 +361,44 @@ msgstr "QR-code voor check-in"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Het PDF-achtergrondbestand kon niet geladen worden met als reden:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Groep van objecten"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Tekstobject"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Barcode gebied"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr "Afbeeldingsgebied"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Mogelijk gemaakt door pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Object"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Ticketontwerp"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Opslaan mislukt."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr "Probleem bij het uploaden van het PDF-bestand, probeer het opnieuw."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
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?"
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -301,43 +301,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -349,44 +349,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
File diff suppressed because it is too large Load Diff
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2021-08-05 04:00+0000\n"
"Last-Translator: Maarten van den Berg <maartenberg1@gmail.com>\n"
"Language-Team: Dutch (informal) <https://translate.pretix.eu/projects/pretix/"
@@ -317,43 +317,43 @@ msgstr "Aantal eerdere binnenkomsten sinds middernacht"
msgid "Number of days with a previous entry"
msgstr "Aantal dagen met een eerdere binnenkomst"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr "Alle volgende voorwaarden (EN)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr "Ten minste één van de volgende voorwaarden (OF)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "Start van het evenement"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "Einde van het evenement"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr "Toegangstijd evenement"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr "Aangepaste datum en tijd"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "aangepaste tijd"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "Speling (minuten)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "Voorwaarde toevoegen"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr "minuten"
@@ -366,44 +366,44 @@ msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
"Het PDF-achtergrondbestand kon niet geladen worden om de volgende reden:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Groep van objecten"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Tekstobject"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Barcodegebied"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr "Afbeeldingsgebied"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Mogelijk gemaakt door pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Object"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Kaartjesontwerp"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Opslaan mislukt."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr "Probleem bij het uploaden van het PDF-bestand, probeer het opnieuw."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Wil je de editor verlaten zonder je wijzigingen op te slaan?"
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2019-09-24 19:00+0000\n"
"Last-Translator: Serge Bazanski <q3k@hackerspace.pl>\n"
"Language-Team: Polish <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -348,43 +348,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -396,46 +396,46 @@ msgstr "QR zameldowania"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Błąd ładowania pliku PDF tła:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Grupa obiektów"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Obiekt tekstowy"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Miejsce na kod kreskowy"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Miejsce na kod kreskowy"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Wygenerowane przez pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Obiekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Projekt biletu"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Błąd zapisu."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr "Błąd uploadu pliku PDF, prosimy spróbować ponownie."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Czy na pewno opuścić edytor bez zapisania zmian?"
File diff suppressed because it is too large Load Diff
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -302,43 +302,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -350,44 +350,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -302,43 +302,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -350,44 +350,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2019-03-19 09:00+0000\n"
"Last-Translator: Vitor Reis <vitor.reis7@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
@@ -353,43 +353,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -401,46 +401,46 @@ msgstr "QR Check-in"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "O arquivo de fundo PDF não pôde ser carregado pelo seguinte motivo:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Grupo de objetos"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Objeto de texto"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Área de código de barras"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Área de código de barras"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Distribuído por pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Objeto"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Design de bilhetes"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Erro ao salvar."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr "Erro durante o upload do seu arquivo PDF, tente novamente."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Você realmente quer deixar o editor sem salvar suas mudanças?"
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: 2020-10-27 06:00+0000\n"
"Last-Translator: David Vaz <davidmgvaz@gmail.com>\n"
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
@@ -331,45 +331,45 @@ msgstr "Número de entradas prévias desde a meia noite"
msgid "Number of days with a previous entry"
msgstr "Número de dias com entrada prévia"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr "Todas as condições abaixo (E)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr "Pelo menos uma das condições abaixo (Ou)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr "Início do evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr "Fim do evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr "Admissão ao evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#, fuzzy
#| msgid "Current date and time"
msgid "custom date and time"
msgstr "Data e hora atual"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr "Hora personalisada"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr "Tolerância (minutos)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr "Adicionar condição"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -381,46 +381,46 @@ msgstr "Check-in QR"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "O ficheiro de fundo PDF não pôde ser carregado pela seguinte razão:"
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr "Grupo de objectos"
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr "Objecto de texto"
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr "Área do código de barras"
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Área do código de barras"
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr "Powered by pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr "Objecto"
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr "Design do Bilhete"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr "Salvar falhou."
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr "Erro ao carregar o seu ficheiro PDF, por favor tente novamente."
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Quer mesmo deixar o editor sem guardar as suas alterações?"
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-21 15:59+0000\n"
"POT-Creation-Date: 2022-04-12 08:33+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -302,43 +302,43 @@ msgstr ""
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:97
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:98
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:100
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:101
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:102
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:104
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:105
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:108
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:106
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:109
msgid "minutes"
msgstr ""
@@ -350,44 +350,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:615
#: pretix/static/pretixcontrol/js/ui/editor.js:624
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:621
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:623
#: pretix/static/pretixcontrol/js/ui/editor.js:632
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:625
#: pretix/static/pretixcontrol/js/ui/editor.js:634
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:627
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:629
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:633
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:923
#: pretix/static/pretixcontrol/js/ui/editor.js:932
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:973
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:997
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""

Some files were not shown because too many files have changed in this diff Show More