Compare commits

..

182 Commits

Author SHA1 Message Date
Raphael Michel
ec48c2a373 Add option to scan add-on based on its parent position's secret 2022-07-06 10:15:19 +02:00
Raphael Michel
b1b4177947 Bump django-debug-toolbar to 3.5 2022-07-06 10:15:04 +02:00
Raphael Michel
fe28a8f539 Fix isort issues 2022-07-06 09:16:10 +02:00
Raphael Michel
86be7b7934 HTML Filter: Allow <ol start="2"> attribute to prevent "wrong" markdown results 2022-07-06 09:06:03 +02:00
Raphael Michel
5ded99c74a ItemDataExporter: Fix generate_tickets null value 2022-07-06 08:54:59 +02:00
Raphael Michel
a52cee2c45 PPv2: Prevent payments to ISU platform account 2022-07-05 21:05:22 +02:00
Raphael Michel
c2cb968b82 Fix variations in ItemDataExporter 2022-07-05 18:55:57 +02:00
Raphael Michel
52fafa115c Widget: Allow to filter by variation 2022-07-05 16:04:26 +02:00
Raphael Michel
39f7bfe16f [SECURITY] Add untrusted_input flag to ticket redemption API 2022-07-05 14:42:58 +02:00
Raphael Michel
3c0ba3c8e8 More accurate phrasing of "attachments skipped" message 2022-07-05 12:29:20 +02:00
Raphael Michel
db1c480905 Add exporter for list of products 2022-07-05 12:29:20 +02:00
Martin Gross
96b57f9a50 PPv2/ISU: Set cache token forever/non-expiring 2022-07-04 17:03:10 +02:00
Martin Gross
0faf245290 PPv2: Default pretix_paypal_token_hash_cycle to 1 and not 0 2022-07-04 16:52:51 +02:00
Martin Gross
cee72b5a6d PPv2: Fix CHECKOUT.ORDER.APPROVED Webhook for skeleton payments (PRETIXEU-6TN) 2022-07-04 11:15:01 +02:00
Raphael Michel
76e8cc42c2 Update pyjwt requirement from ==2.0.* to ==2.4.* 2022-07-04 11:04:01 +02:00
dependabot[bot]
d22feada57 Bump @babel/core from 7.18.2 to 7.18.6 in /src/pretix/static/npm_dir
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.2 to 7.18.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.18.6/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-04 11:00:53 +02:00
dependabot[bot]
c792621bcb Bump rollup from 2.75.5 to 2.75.7 in /src/pretix/static/npm_dir
Bumps [rollup](https://github.com/rollup/rollup) from 2.75.5 to 2.75.7.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.75.5...v2.75.7)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-04 11:00:44 +02:00
Richard Schreiber
d9a58cf27f Fix timezone in email placeholder event_admission_time 2022-07-04 10:58:28 +02:00
dependabot[bot]
79ba2185fd Bump @babel/preset-env in /src/pretix/static/npm_dir
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.18.2 to 7.18.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.18.6/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-04 10:18:12 +02:00
dependabot[bot]
fcf4750d5f Bump vue and vue-template-compiler in /src/pretix/static/npm_dir
Bumps [vue](https://github.com/vuejs/core) and [vue-template-compiler](https://github.com/vuejs/vue). These dependencies needed to be updated together.

Updates `vue` from 2.6.14 to 2.7.0
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/commits)

Updates `vue-template-compiler` from 2.6.14 to 2.7.0
- [Release notes](https://github.com/vuejs/vue/releases)
- [Changelog](https://github.com/vuejs/vue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue/compare/v2.6.14...v2.7.0)

---
updated-dependencies:
- dependency-name: vue
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: vue-template-compiler
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-04 10:18:01 +02:00
Raphael Michel
5c56139b56 PPv2: Fix crash in error handling of isu_return (PRETIXEU-6ZR) 2022-07-04 09:46:56 +02:00
Raphael Michel
1f8da968ba OrderPayment.fail: Allow to add custom log_data 2022-07-04 09:46:46 +02:00
Raphael Michel
6ee034784d Fix crash in Order.payment_term_last (PRETIXEU-6ZK) 2022-07-04 09:36:55 +02:00
Raphael Michel
1ab701c100 Update texts claiming the Android app cannot to signed barcodes 2022-07-04 09:16:13 +02:00
Raphael Michel
f0661fb11c Bump to 4.12.0.dev0 2022-07-01 10:48:16 +02:00
Raphael Michel
443283de66 Fix check-manifest errors 2022-07-01 10:47:33 +02:00
Raphael Michel
a4a9c07506 Bump version to 4.11.0 2022-07-01 10:36:06 +02:00
Raphael Michel
866cd1f0e5 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4760 of 4760 strings)

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

powered by weblate
2022-07-01 10:35:21 +02:00
Raphael Michel
f539bf9b13 Translations: Update German
Currently translated at 100.0% (4760 of 4760 strings)

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

powered by weblate
2022-07-01 10:35:21 +02:00
Raphael Michel
c016bcdb1c Update wordlist for German translation 2022-07-01 10:13:40 +02:00
Raphael Michel
f2fcf8fb11 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-07-01 09:50:23 +02:00
Janine Steitz
243a94723e Translations: Update Italian
Currently translated at 18.0% (857 of 4748 strings)

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

powered by weblate
2022-07-01 09:48:34 +02:00
Yang JianCheng
2437692e69 Translations: Update Chinese (Simplified)
Currently translated at 63.1% (2997 of 4748 strings)

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

powered by weblate
2022-07-01 09:48:34 +02:00
Martin Gross
af27154d8d PP/PPv2: Fix display of retry-message on pending captures (Fixes: PRETIXEU-6ZF) 2022-06-29 16:38:34 +02:00
Martin Gross
7f0604ff8b PP/PPv2: Fix display of retry-message on pending captures 2022-06-29 15:41:52 +02:00
Richard Schreiber
20e281d0a4 Fix: handle ProtectedError when deleting a team (Z#23102243) 2022-06-28 10:01:15 +02:00
Richard Schreiber
b8761b3b37 Banktransfer: add help-text to name of account holder 2022-06-28 09:23:19 +02:00
Raphael Michel
ca860f73c2 Include Transaction in Event.delete_all_orders 2022-06-27 12:44:12 +02:00
Hari Har Wolfer
8326f762ab Translations: Update French
Currently translated at 47.7% (2267 of 4748 strings)

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

powered by weblate
2022-06-27 12:42:09 +02:00
Anna-itk
0d8a4c1f4d Translations: Update Danish
Currently translated at 36.2% (1720 of 4748 strings)

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

powered by weblate
2022-06-27 12:42:09 +02:00
fyksen
bfc9773142 Translations: Update Norwegian Bokmål
Currently translated at 100.0% (200 of 200 strings)

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

powered by weblate
2022-06-27 12:42:09 +02:00
Mathias Moen
f141a27cc2 Translations: Update Norwegian Bokmål
Currently translated at 100.0% (200 of 200 strings)

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

powered by weblate
2022-06-27 12:42:09 +02:00
fyksen
d1c9aa47f5 Translations: Update Norwegian Bokmål
Currently translated at 7.2% (343 of 4748 strings)

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

powered by weblate
2022-06-27 12:42:09 +02:00
Mathias Moen
6fbca2e55f Translations: Update Norwegian Bokmål
Currently translated at 3.6% (175 of 4748 strings)

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

powered by weblate
2022-06-27 12:42:09 +02:00
Mathias Moen
a3eb59de36 Translations: Update Norwegian Bokmål
Currently translated at 3.6% (173 of 4748 strings)

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

powered by weblate
2022-06-27 12:42:09 +02:00
fyksen
e87548becd Translations: Update Norwegian Bokmål
Currently translated at 3.6% (173 of 4748 strings)

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

powered by weblate
2022-06-27 12:42:09 +02:00
Mathias Moen
82a79d9a4a Translations: Update Norwegian Bokmål
Currently translated at 99.5% (199 of 200 strings)

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

powered by weblate
2022-06-27 12:42:09 +02:00
fyksen
0200c3b243 Translations: Update Norwegian Bokmål
Currently translated at 99.5% (199 of 200 strings)

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

powered by weblate
2022-06-27 12:42:09 +02:00
Raphael Michel
5a6b7d783b API: Fix order total after order change operation (#2700) 2022-06-27 12:41:54 +02:00
Raphael Michel
c6c8e00f43 Bank transfer: Fix crash on empty date
Fixes PRETIXEU-6YN
2022-06-27 12:26:15 +02:00
Raphael Michel
127eb08f19 Fix invalid link name
Fixes PRETIXEU-6YM
2022-06-27 12:25:19 +02:00
Raphael Michel
e6e5c8f733 Fix validation of total name length
Fixes PRETIXEU-6XM
2022-06-27 12:15:48 +02:00
Richard Schreiber
e62a5e18a2 PDF render: enable word-wrap on hyphens (Z#23101879) 2022-06-21 10:23:48 +02:00
Richard Schreiber
550cb28a0e PayPal2: improve error-logging in isu_return 2022-06-20 14:27:41 +02:00
Richard Schreiber
ec2da30c74 Upgrade django-phonenumber-field to 6.3.* 2022-06-20 10:57:31 +02:00
Raphael Michel
f3583488ef Translations: Update Dutch (informal) (nl_Informal)
Currently translated at 85.2% (4049 of 4748 strings)

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

powered by weblate
2022-06-16 11:37:38 +02:00
Samir
57ee2280aa Translations: Update Dutch (informal) (nl_Informal)
Currently translated at 85.2% (4049 of 4748 strings)

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

powered by weblate
2022-06-16 11:37:38 +02:00
Raphael Michel
75c069111e Add customized links to page footer (#2685)
Co-authored-by: Richard Schreiber <wiffbi@gmail.com>
2022-06-16 11:21:11 +02:00
Raphael Michel
54a4631e22 Thumbnails: Support animated GIFs (#2686)
Co-authored-by: Richard Schreiber <wiffbi@gmail.com>
2022-06-15 18:21:43 +02:00
Raphael Michel
8eaa8999e5 Docs: Add shipping plugin API 2022-06-15 17:06:29 +02:00
Richard Schreiber
979e02ec73 Improve free price input auto-checking/selecting items and addons 2022-06-15 13:25:31 +02:00
Raphael Michel
dfebcf5294 Add missing __init__ files 2022-06-14 14:20:07 +02:00
Raphael Michel
90891504fc Change handling of attach size to match earlier behaviour 2022-06-14 10:13:06 +02:00
Raphael Michel
b3383a24e8 Change default email attachment limit back to 5MB 2022-06-14 10:12:57 +02:00
Raphael Michel
bd299f9afb Fix crash during manual check-in (PRETIXEU-6WX) 2022-06-13 14:06:30 +02:00
Raphael Michel
9b7088f7fc Reduce number of SQL queries in API order creation 2022-06-13 12:05:14 +02:00
Raphael Michel
635344a32f Fix large number of SQL queries in check-in history 2022-06-13 11:38:42 +02:00
Raphael Michel
fc1d3f7fb1 Docs: Add new pretix-exhibitors endpoints 2022-06-10 14:45:18 +02:00
Raphael Michel
334c1c4b5e Hotfix JS issue 2022-06-10 13:00:01 +02:00
Raphael Michel
86085d9368 Allow to bulk-select many tickets to check in or out (#2678)
* Allow to bulk-select many tickets to check in or out

* Update tests

* Add permission test

* Update src/pretix/control/templates/pretixcontrol/checkin/index.html

Co-authored-by: Richard Schreiber <wiffbi@gmail.com>

* Update src/pretix/static/pretixbase/js/asynctask.js

Co-authored-by: Richard Schreiber <wiffbi@gmail.com>

* Remove console.warn

* Simplify stuff

* minor refactor

* fix missing checked-out success message

Co-authored-by: Richard Schreiber <wiffbi@gmail.com>
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2022-06-10 12:14:44 +02:00
Raphael Michel
f3a84c1d6e Make IE11 warning in backend bigger (#2680)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2022-06-10 12:13:30 +02:00
Raphael Michel
2a9eb2772a Add idempotency.query to all security profiles 2022-06-10 09:24:47 +02:00
Raphael Michel
9a08f7fec5 Spellcheck: Add Transaktions-ID to list of weird words 2022-06-09 17:58:15 +02:00
pretix translation bot
193842b43b Update translations (#2679)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-06-09 17:57:38 +02:00
Raphael Michel
cd321f3e0a Remove more duplicate strings 2022-06-09 17:49:19 +02:00
Raphael Michel
00ad6f7d53 Reduce number of translatable strings 2022-06-09 17:46:56 +02:00
Raphael Michel
88770ed7b6 Adjust translation strings 2022-06-09 17:43:37 +02:00
Raphael Michel
2ec50f6184 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-06-09 17:07:44 +02:00
Raphael Michel
d45bc0f37b Fix text for free orders pending approval 2022-06-09 17:06:41 +02:00
Martin Gross
03a7a4e210 POS: Detail renderer for izettle_qrc POS payments 2022-06-09 16:52:55 +02:00
Martin Gross
8892fad228 POS: Detail renderer for adyen_legacy POS terminal payments 2022-06-09 16:40:48 +02:00
Martin Gross
b206509345 PPv2: ISU-Return: explicitly set incr cache key if not set 2022-06-08 13:30:12 +02:00
Martin Gross
fdee69cd69 PPv2: Revert ISU Return-Retry; Add access token cache invalidation on ISU return 2022-06-08 12:59:30 +02:00
pretix translation bot
0d5f3697a1 Update translations (#2677)
Co-authored-by: Martin Gross <martin@pc-coholic.de>
2022-06-07 18:34:44 +02:00
Martin Gross
50d4ed827d PPv2: Remove stray text suffix 2022-06-07 18:29:57 +02:00
Martin Gross
a0218093f2 Update po files
[CI skip]

Signed-off-by: Martin Gross <gross@rami.io>
2022-06-07 18:19:01 +02:00
Martin Gross
ea920fb67e PPv2: Change APM redirect text 2022-06-07 18:16:20 +02:00
Martin Gross
73f166c54a PPv2: Simplify "use the button/form below" on paypage. 2022-06-07 18:14:54 +02:00
Martin Gross
5b5cd72f80 PPv2: Load PayPal SDK in current cart language whenever possible 2022-06-07 18:11:34 +02:00
Martin Gross
87b3f91ad3 PPv2: ISU: Retry up to three times to retrieve connected merchant information before failing. 2022-06-07 17:25:39 +02:00
Raphael Michel
7cefd69b4e Order API: Do not lock event with infinite quota when creating an order (#2675) 2022-06-07 17:21:12 +02:00
Raphael Michel
597089a89b PayPal: Patch API client to cache access tokens (#2600) 2022-06-07 17:20:38 +02:00
Abdullah
b2c76a9e36 Translations: Update Arabic
Currently translated at 81.3% (3838 of 4718 strings)

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

powered by weblate
2022-06-07 17:04:31 +02:00
Raphael Michel
846be07a5e Fix ticket download date not being shown 2022-06-07 12:12:22 +02:00
Martin Gross
2d3cd8f3dc PPv2: Limit description and custom_id to 127 chars (Z#23101013) 2022-06-07 09:39:32 +02:00
Raphael Michel
0dfef2699f Silence ResponseError from redis (#2674) 2022-06-06 12:27:33 +02:00
dependabot[bot]
97e74e4afb Bump @babel/preset-env from 7.17.10 to 7.18.2 in /src/pretix/static/npm_dir (#2673)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Raphael Michel <michel@rami.io>
2022-06-06 11:53:43 +02:00
dependabot[bot]
fe04d97d51 Bump @babel/core from 7.17.10 to 7.18.2 in /src/pretix/static/npm_dir (#2672)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-06 11:52:44 +02:00
dependabot[bot]
911917c9d1 Bump rollup from 2.71.1 to 2.75.5 in /src/pretix/static/npm_dir (#2671)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-06 11:52:36 +02:00
dependabot[bot]
14bb17435b Bump @rollup/plugin-node-resolve from 13.2.1 to 13.3.0 in /src/pretix/static/npm_dir (#2670)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-06 11:52:29 +02:00
Mauro Amico
a8c78674bd Upgrade NodeJS to version 16 LTS (#2664) 2022-06-06 11:52:22 +02:00
Tommi
a49de96416 Translations: Update Italian
Currently translated at 18.1% (855 of 4718 strings)

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

powered by weblate
2022-06-06 11:51:51 +02:00
Marco Giacopuzzi
9f7dca8288 Translations: Update Italian
Currently translated at 18.1% (855 of 4718 strings)

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

powered by weblate
2022-06-06 11:51:51 +02:00
Ismael Menéndez Fernández
be9c40939e Translations: Update Galician
Currently translated at 11.8% (557 of 4718 strings)

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

powered by weblate
2022-06-06 11:51:51 +02:00
Aya Yabuki
eec092ef8d Translations: Update Japanese
Currently translated at 3.7% (176 of 4718 strings)

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

powered by weblate
2022-06-06 11:51:51 +02:00
Ismael Menéndez Fernández
8c35b1c1a7 Translations: Update Galician
Currently translated at 11.7% (553 of 4718 strings)

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

powered by weblate
2022-06-06 11:51:51 +02:00
Ismael Menéndez Fernández
61ad81277e Translations: Update Spanish
Currently translated at 63.4% (2995 of 4718 strings)

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

powered by weblate
2022-06-06 11:51:51 +02:00
Raphael Michel
d98cb6402c Improve handling of protected subevents during deletion 2022-06-03 14:05:20 +02:00
Raphael Michel
772a4ce494 Order list: Use constant width for sales channel icon 2022-06-03 14:05:20 +02:00
Raphael Michel
825673b0c5 Seating plan migration: Fix deletion of carts if addons are present 2022-06-03 14:05:20 +02:00
Martin Gross
ea6c698b3a PPv2: Call get_fees without explicit payment provider. 2022-06-01 12:20:28 +02:00
Martin Gross
d2d6a30623 PPv2: minor XHR/get_fees cleanup 2022-06-01 12:12:49 +02:00
Martin Gross
68097291ca PPv2: Include other fees than payment fees into the XHR-calculation 2022-06-01 12:10:58 +02:00
Martin Gross
a8286f77d8 PPv2: Fix fee calculation if no payment fee is present 2022-06-01 10:58:02 +02:00
Martin Gross
d8e96c16bb Add t.paypal.com to img-src CSP 2022-06-01 10:07:55 +02:00
Martin Gross
e20c2c56f0 PPv2: Surface error-messages if XHR-call fails 2022-05-31 19:23:57 +02:00
Martin Gross
823de60e8c PPv2: Make XHR view a proper view and not a TemplateView 2022-05-31 19:02:55 +02:00
Raphael Michel
25fb5fb741 Fix inconsistent translation 2022-05-31 16:48:56 +02:00
Martin Gross
017638cc29 PPv2: Only transmit the user's main language without any possible "-informal"-tags 2022-05-31 16:15:29 +02:00
Martin Gross
4e37acf8d4 PPv2: Do not run capture if PPOrder has not been approved by user. 2022-05-31 12:01:30 +02:00
Martin Gross
40d273e145 PayPal v2: Control-view: Show Capture ID instead of Order ID 2022-05-30 17:07:52 +02:00
Raphael Michel
88f4ee0f95 Event timeline: Always show effective end of sale 2022-05-30 16:47:25 +02:00
Raphael Michel
925b8334a9 PayPal: Migrate to Order v2 API and ISU authentication (#2493) (#2614)
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Martin Gross <gross@rami.io>
2022-05-30 15:44:22 +02:00
Raphael Michel
2e0be8c801 Allow to filter subevents by sales channel 2022-05-27 18:17:56 +02:00
Raphael Michel
6306b8e97d Bump to 4.11.0.dev0 2022-05-27 17:16:40 +02:00
Raphael Michel
927745ca13 Bump to 4.10.0 2022-05-27 17:15:58 +02:00
Raphael Michel
251b2c4b5c Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4718 of 4718 strings)

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

powered by weblate
2022-05-27 16:25:59 +02:00
Raphael Michel
c1fd8a5b7b Translations: Update German
Currently translated at 100.0% (4718 of 4718 strings)

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

powered by weblate
2022-05-27 16:25:59 +02:00
Raphael Michel
7d9b002ef5 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4718 of 4718 strings)

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

powered by weblate
2022-05-27 16:25:59 +02:00
Raphael Michel
a03e2387b0 Translations: Update German
Currently translated at 100.0% (4718 of 4718 strings)

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

powered by weblate
2022-05-27 16:25:59 +02:00
Raphael Michel
3b12ab8b82 Remove print statement 2022-05-27 15:58:18 +02:00
Raphael Michel
63a6a8cfd3 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-05-27 15:57:32 +02:00
Raphael Michel
6ee649f91e PDF editor: Fix saving QR codes with custom i18n content 2022-05-27 14:16:09 +02:00
Ismael Menéndez Fernández
72646d00e7 Translations: Update Galician
Currently translated at 11.6% (551 of 4732 strings)

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

powered by weblate
2022-05-27 08:55:44 +02:00
Mie Frydensbjerg
fe24683495 Translations: Update Danish
Currently translated at 36.3% (1721 of 4732 strings)

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

powered by weblate
2022-05-27 08:55:44 +02:00
Ismael Menéndez Fernández
da425533cf Translations: Update Galician
Currently translated at 11.5% (546 of 4732 strings)

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

powered by weblate
2022-05-27 08:55:44 +02:00
Ismael Menéndez Fernández
2024fc8792 Translations: Update Spanish
Currently translated at 63.2% (2993 of 4732 strings)

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

powered by weblate
2022-05-27 08:55:44 +02:00
Mauro Amico
335e96d1c9 Translations: Update Italian
Currently translated at 17.7% (840 of 4732 strings)

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

powered by weblate
2022-05-27 08:55:44 +02:00
Emanat Institute
936bc882f0 Translations: Update Slovenian
Currently translated at 26.9% (1276 of 4732 strings)

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

powered by weblate
2022-05-27 08:55:44 +02:00
Ola Ola
7a749e2c56 Translations: Update Ukrainian
Currently translated at 76.7% (3632 of 4732 strings)

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

powered by weblate
2022-05-27 08:55:44 +02:00
hmontheline
7ed01f55f6 Translations: Update French
Currently translated at 47.6% (2257 of 4732 strings)

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

powered by weblate
2022-05-27 08:55:44 +02:00
Olha Dolinska
76fd1be397 Translations: Update Ukrainian
Currently translated at 76.3% (3615 of 4732 strings)

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

powered by weblate
2022-05-27 08:55:44 +02:00
Ismael Menéndez Fernández
5ab1116aed Translations: Update Galician
Currently translated at 11.4% (543 of 4732 strings)

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

powered by weblate
2022-05-27 08:55:44 +02:00
Ismael Menéndez Fernández
1437dde1e1 Translations: Update Spanish
Currently translated at 63.1% (2988 of 4732 strings)

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

powered by weblate
2022-05-27 08:55:44 +02:00
Raphael Michel
64aca08d34 Week calendar: Fix interference between mobile mode and widget 2022-05-25 17:29:56 +02:00
Raphael Michel
3790d04ed2 Add experimental API call to query idempotency logs 2022-05-25 13:00:31 +02:00
Raphael Michel
d1644e62f0 Remove a sentence if payment_pending_hidden is set 2022-05-24 11:15:50 +02:00
Raphael Michel
96a656bc8a Fix bug in test test_cartpos_create_with_voucher_invalid_subevent 2022-05-24 10:55:17 +02:00
Richard Schreiber
763c003487 Fix alignment of checkout success message (Z#2399724)
When a customized checkout_success_text is used, that has other elements than `<p>`, the alignment was off. This fixes the alignment for all types of elements, that are a direct child of the thank-you-element `.thank-you > *`.
2022-05-24 10:04:12 +02:00
Raphael Michel
81c251208c Cart API: Fix validation of subevent-bound vouchers 2022-05-23 17:55:14 +02:00
Richard Schreiber
9ca2c8894d Fix #2651 - Crash when editing add-on products after order 2022-05-23 13:21:11 +02:00
Raphael Michel
d4825d00fb Fix copying variations when copying items 2022-05-20 16:09:57 +02:00
Raphael Michel
591f5a75ef Fix error handling on add-ons selection step (#2659)
Co-authored-by: Richard Schreiber <wiffbi@gmail.com>
2022-05-19 13:27:28 +02:00
Dennis Lichtenthäler
15407732ea Translations: Update German
Currently translated at 100.0% (4732 of 4732 strings)

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

powered by weblate
2022-05-19 09:58:18 +02:00
Ola Ola
82534f49da Translations: Update Ukrainian
Currently translated at 76.3% (3615 of 4732 strings)

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

powered by weblate
2022-05-19 09:58:18 +02:00
Raphael Michel
6c7f76fe96 Orders API: Allow downloading tickets for pending orders (#2657)
Co-authored-by: Richard Schreiber <wiffbi@gmail.com>
2022-05-19 09:58:06 +02:00
Raphael Michel
08590f9d98 Explicitly store whether checkins were offline (#2617) 2022-05-17 14:32:14 +02:00
Raphael Michel
074252a9c0 SecretKeySettingsWidget: Fix issue during form validation 2022-05-17 13:56:38 +02:00
Raphael Michel
615f7ed2cf Translations: Update Ukrainian
Currently translated at 76.3% (3612 of 4732 strings)

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

powered by weblate
2022-05-13 17:13:05 +02:00
Iryna Loik
e3a4435356 Translations: Update Ukrainian
Currently translated at 76.3% (3612 of 4732 strings)

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

powered by weblate
2022-05-13 17:13:05 +02:00
Jonathan Berger
e8ec2a8d1f Translations: Update French
Currently translated at 47.6% (2254 of 4732 strings)

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

powered by weblate
2022-05-13 17:13:05 +02:00
hmontheline
17cac62c31 Translations: Update French
Currently translated at 47.6% (2254 of 4732 strings)

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

powered by weblate
2022-05-13 17:13:05 +02:00
Jonathan Berger
73beabedea Translations: Update French
Currently translated at 47.4% (2244 of 4732 strings)

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

powered by weblate
2022-05-13 17:13:05 +02:00
Iryna Loik
93f0e818e4 Translations: Update Ukrainian
Currently translated at 69.9% (3309 of 4732 strings)

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

powered by weblate
2022-05-13 17:13:05 +02:00
Iryna N
54ff5967fc Translations: Update Ukrainian
Currently translated at 69.9% (3309 of 4732 strings)

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

powered by weblate
2022-05-13 17:13:05 +02:00
Richard Schreiber
41b18b9419 Make customer identifier unique per organizer (#2647) 2022-05-13 16:40:34 +02:00
Raphael Michel
750a2511d5 Fix incorrect escaping of QR code secrets 2022-05-13 16:36:48 +02:00
Richard Schreiber
e1c6103dc4 Limit identifiers (Question, QuestionOption, Customer) to alphanum, dot, dash, and underscore 2022-05-12 17:24:17 +02:00
Richard Schreiber
5e88a3cfc3 PDF Editor: Fix CSS-selector for non-alphanum question identifiers (Z#2399663) 2022-05-12 14:01:00 +02:00
Iryna N
f9c71743d1 Translations: Update Ukrainian
Currently translated at 68.0% (3221 of 4732 strings)

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

powered by weblate
2022-05-12 10:00:16 +02:00
Raphael Michel
ed4bc87198 Show better error message if a gift card is used in apply_voucher 2022-05-11 17:06:20 +02:00
Richard Schreiber
351e06168e PDF Editor: set textfield to ??? to hint at unknown placeholder (Z#2399245) 2022-05-11 13:46:22 +02:00
Richard Schreiber
75dc134b45 PDF Editor: support Mac-like (CMD/metaKey) keyboard shortcuts 2022-05-11 13:44:50 +02:00
Richard Schreiber
53419b9e49 Fix check for mariadb 2022-05-11 13:41:45 +02:00
Raphael Michel
aca3e29bd2 Bump django-compressor to 3.1, get rid of annoying warnings (#2459) 2022-05-10 14:13:19 +02:00
Raphael Michel
2fcd6bb3f5 API: Support creating cart positions with vouchers (#2635) 2022-05-10 12:19:04 +02:00
Richard Schreiber
25313bf044 Add placeholder name_for_salutation to editor/PDF to improve handling of salutation „Mx“ (#2639)
* add name_for_salutation to editor/pdf

* improve order of fields

* add safe fallback for attendee_name_parts being None
2022-05-10 11:36:10 +02:00
Iryna Loik
7012605c9e Translations: Update Ukrainian
Currently translated at 63.6% (3012 of 4732 strings)

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

powered by weblate
2022-05-10 11:33:55 +02:00
Iryna N
5e8ce33470 Translations: Update Ukrainian
Currently translated at 84.5% (169 of 200 strings)

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

powered by weblate
2022-05-10 11:33:55 +02:00
Iryna N
4dfc037267 Translations: Update Ukrainian
Currently translated at 63.1% (2988 of 4732 strings)

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

powered by weblate
2022-05-10 11:33:55 +02:00
Raphael Michel
64ac69a81a Seating frame view: Allow to pass a voucher from query parameter 2022-05-10 11:31:27 +02:00
Richard Schreiber
40297b3d3f Localize salutation of invoice address in editor/PDFs 2022-05-10 11:22:54 +02:00
221 changed files with 74193 additions and 58885 deletions

View File

@@ -31,7 +31,7 @@ RUN apt-get update && \
echo 'pretixuser ALL=(ALL) NOPASSWD:SETENV: /usr/bin/supervisord' >> /etc/sudoers && \
mkdir /static && \
mkdir /etc/supervisord && \
curl -fsSL https://deb.nodesource.com/setup_15.x | sudo -E bash - && \
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - && \
apt-get install -y nodejs && \
curl -qL https://www.npmjs.com/install.sh | sh

View File

@@ -172,8 +172,6 @@ Cart position endpoints
* does not check or calculate prices but believes any prices you send
* does not support the redemption of vouchers
* does not prevent you from buying items that can only be bought with a voucher
* does not support file upload questions
@@ -191,6 +189,7 @@ Cart position endpoints
* ``expires`` (optional)
* ``includes_tax`` (optional, **deprecated**, do not use, will be removed)
* ``sales_channel`` (optional)
* ``voucher`` (optional, expect a voucher code)
* ``answers``
* ``question``

View File

@@ -34,6 +34,7 @@ allow_multiple_entries boolean If ``true``, su
allow_entry_after_exit boolean If ``true``, subsequent scans of a ticket on this list are valid if the last scan of the ticket was an exit scan.
rules object Custom check-in logic. The contents of this field are currently not considered a stable API and modifications through the API are highly discouraged.
exit_all_at datetime Automatically check out (i.e. perform an exit scan) at this point in time. After this happened, this property will automatically be set exactly one day into the future. Note that this field is considered "internal configuration" and if you pull the list with ``If-Modified-Since``, the daily change in this field will not trigger a response.
addon_match boolean If ``true``, tickets on this list can be redeemed by scanning their parent ticket if this still leads to an unambiguous match.
===================================== ========================== =======================================================
.. versionchanged:: 3.9
@@ -53,6 +54,10 @@ exit_all_at datetime Automatically c
The ``ends_after`` and ``expand`` query parameters have been added.
.. versionchanged:: 4.12
The ``addon_match`` attribute has been added.
Endpoints
---------
@@ -94,6 +99,7 @@ Endpoints
"allow_entry_after_exit": true,
"exit_all_at": null,
"rules": {},
"addon_match": false,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -146,6 +152,7 @@ Endpoints
"allow_entry_after_exit": true,
"exit_all_at": null,
"rules": {},
"addon_match": false,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -245,6 +252,7 @@ Endpoints
"subevent": null,
"allow_multiple_entries": false,
"allow_entry_after_exit": true,
"addon_match": false,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -269,6 +277,7 @@ Endpoints
"subevent": null,
"allow_multiple_entries": false,
"allow_entry_after_exit": true,
"addon_match": false,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -323,6 +332,7 @@ Endpoints
"subevent": null,
"allow_multiple_entries": false,
"allow_entry_after_exit": true,
"addon_match": false,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -611,8 +621,12 @@ Order position endpoints
Tries to redeem an order position, identified by its internal ID, i.e. checks the attendee in. This endpoint
accepts a number of optional requests in the body.
**Tip:** Instead of an ID, you can also use the ``secret`` field as the lookup parameter.
**Tip:** Instead of an ID, you can also use the ``secret`` field as the lookup parameter. In this case, you should
always set ``untrusted_input=true`` as a query parameter to avoid security issues.
:query boolean untrusted_input: If set to true, the lookup parameter is **always** interpreted as a ``secret``, never
as an ``id``. This should be always set if you are passing through untrusted, scanned
data to avoid guessing of ticket IDs.
:<json boolean questions_supported: When this parameter is set to ``true``, handling of questions is supported. If
you do not implement question handling in your user interface, you **must**
set this to ``false``. In that case, questions will just be ignored. Defaults
@@ -739,6 +753,7 @@ Order position endpoints
* ``already_redeemed`` - Ticket already has been redeemed
* ``product`` - Tickets with this product may not be scanned at this device
* ``rules`` - Check-in prevented by a user-defined rule
* ``ambiguous`` - Multiple tickets match scan, rejected
In case of reason ``rules``, there might be an additional response field ``reason_explanation`` with a human-readable
description of the violated rules. However, that field can also be missing or be ``null``.

View File

@@ -609,13 +609,17 @@ Fetching individual orders
Order ticket download
---------------------
.. versionchanged:: 4.10
The API now supports ticket downloads for pending orders if allowed by the event settings.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/download/(output)/
Download tickets for an order, identified by its order code. Depending on the chosen output, the response might
be a ZIP file, PDF file or something else. The order details response contains a list of output options for this
particular order.
Tickets can be only downloaded if the order is paid and if ticket downloads are active. Note that in some cases the
Tickets can only be downloaded if ticket downloads are active and depending on event settings the order is either paid or pending. Note that in some cases the
ticket file might not yet have been created. In that case, you will receive a status code :http:statuscode:`409` and
you are expected to retry the request after a short period of waiting.
@@ -1635,6 +1639,10 @@ Fetching individual positions
Order position ticket download
------------------------------
.. versionchanged:: 4.10
The API now supports ticket downloads for pending orders if allowed by the event settings.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/(id)/download/(output)/
Download tickets for one order position, identified by its internal ID.
@@ -1646,7 +1654,7 @@ Order position ticket download
The referenced URL can provide a download or a regular, human-viewable website - so it is advised to open this URL
in a webbrowser and leave it up to the user to handle the result.
Tickets can be only downloaded if the order is paid and if ticket downloads are active. Also, depending on event
Tickets can only be downloaded if ticket downloads are active and depending on event settings the order is either paid or pending. Also, depending on event
configuration downloads might be only unavailable for add-on products or non-admission products.
Note that in some cases the ticket file might not yet have been created. In that case, you will receive a status
code :http:statuscode:`409` and you are expected to retry the request after a short period of waiting.

View File

@@ -474,6 +474,7 @@ Endpoints
:query is_future: If set to ``true`` (``false``), only events that happen currently or in the future are (not) returned.
:query is_past: If set to ``true`` (``false``), only events that are over are (not) returned.
:query ends_after: If set to a date and time, only events that happen during of after the given time are returned.
:query sales_channel: If set to a sales channel identifier, the response will only contain subevents from events available on this sales channel.
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the event to fetch
:statuscode 200: no error

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 274 KiB

View File

@@ -2,8 +2,25 @@
partition "data-based check" {
"Check based on local database" --> "Is the order in status PAID or PENDING\nand is the position not canceled?"
"Check based on local database" -down-> "Is addon_match set to true?"
--> if "" then
-down->[no] "Is the order in status PAID or PENDING\nand is the position not canceled?"
else
-right->[yes] "Build a list that includes the position\nas well as all its add-ons"
-down-> "Filter list for products that are part of the check-in list"
--> if "" then
-down->[one found] Proceed with the matching position
--> "Is the order in status PAID or PENDING\nand is the position not canceled?"
else
--> if "" then
-right->[none found] "Return error PRODUCT "
else
-down->[multiple found] Return error AMBIGUOUS
endif
endif
endif
"Is the order in status PAID or PENDING\nand is the position not canceled?" --> if "" then
-right->[no] "Return error CANCELED"
else
-down->[yes] "Is the product part of the check-in list?"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 175 KiB

View File

@@ -19,8 +19,25 @@ else
endif
===CHECK=== -down-> "Is the order in status PAID or PENDING\nand is the position not canceled?"
===CHECK=== -down-> "Is addon_match set to true?"
--> if "" then
-down->[no] "Is the order in status PAID or PENDING\nand is the position not canceled?"
else
-right->[yes] "Build a list that includes the position\nas well as all its add-ons"
-down-> "Filter list for products that are part of the check-in list"
--> if "" then
-down->[one found] Proceed with the matching position
--> "Is the order in status PAID or PENDING\nand is the position not canceled?"
else
--> if "" then
-right->[none found] "Return error PRODUCT "
else
-down->[multiple found] Return error AMBIGUOUS
endif
endif
endif
"Is the order in status PAID or PENDING\nand is the position not canceled?" --> if "" then
-right->[no] "Return error CANCELED"
else
-down->[yes] "Is the product part of the check-in list?"

View File

@@ -227,6 +227,108 @@ Endpoints
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer or event or exhibitor does not exist **or** you have no permission to view it.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/exhibitors/(id)/vouchers/
Returns a list of all vouchers connected to an exhibitor. The response contains the same data as described in
:ref:`rest-vouchers`.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/exhibitors/1/vouchers/ 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
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"code": "43K6LKM37FBVR2YG",
"max_usages": 1,
"redeemed": 0,
"valid_until": null,
"block_quota": false,
"allow_ignore_quota": false,
"price_mode": "set",
"value": "12.00",
"item": 1,
"variation": null,
"quota": null,
"tag": "testvoucher",
"comment": "",
"seat": null,
"subevent": null
}
]
}
:query page: The page number in case of a multi-page result set, default is 1
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the event to fetch
:param id: The ``id`` field of the exhibitor to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer or event or exhibitor does not exist **or** you have no permission to view it.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/exhibitors/(id)/vouchers/attach/
Attaches an **existing** voucher to an exhibitor. You need to send either the ``id`` **or** the ``code`` field of
the voucher.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/exhibitors/1/vouchers/attach/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
{
"id": 15
}
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/exhibitors/1/vouchers/attach/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
{
"code": "43K6LKM37FBVR2YG"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{}
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the event to use
:param id: The ``id`` field of the exhibitor to use
:statuscode 200: no error
:statuscode 400: Invalid data sent, e.g. voucher does not exist
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer or event or exhibitor does not exist **or** you have no permission to view it.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/exhibitors/
Create a new exhibitor.

View File

@@ -19,6 +19,7 @@ If you want to **create** a plugin, please go to the
certificates
digital
exhibitors
shipping
imported_secrets
webinar
presale-saml

235
doc/plugins/shipping.rst Normal file
View File

@@ -0,0 +1,235 @@
Shipping
========
The shipping plugin provides a HTTP API that exposes the various layouts used to generate PDF badges.
Shipping address resource
-------------------------
The shipping address resource contains the following public fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
company string Customer company name
name string Customer name
street string Customer street
zipcode string Customer ZIP code
city string Customer city
country string Customer country code
state string Customer state (ISO 3166-2 code). Only supported in
AU, BR, CA, CN, MY, MX, and US.
gift boolean Request by customer to not disclose prices in the shipping
===================================== ========================== =======================================================
Shipping status resource
------------------------
The shipping status resource contains the following public fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
method integer Internal ID of shipping method
status string Status, one of ``"new"`` or ``"shipped"``
method_type string Method type, one of ``"ship"``, ``"online"``, or ``"collect"``
===================================== ========================== =======================================================
Print job resource
------------------
The print job resource contains the following public fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
code string Order code of the ticket order
event string Event slug
status string Status, one of ``"new"`` or ``"shipped"``
method string Method type, one of ``"ship"``, ``"online"``, or ``"collect"``
===================================== ========================== =======================================================
Endpoints
---------
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/shippingaddress/
Returns the shipping address of an order
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/democon/orders/ABC12/shippingaddress/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: text/javascript
{
"company": "ACME Corp",
"name": "John Doe",
"street": "Sesame Street 12\nAp. 5",
"zipcode": "12345",
"city": "Berlin",
"country": "DE",
"state": "",
"gift": false
}
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of a valid event
:param order: The ``code`` field of a valid order
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view it.
:statuscode 404: The order does not exist or no shipping address is attached.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/shippingaddress/
Returns the shipping status of an order
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/democon/orders/ABC12/shippingstatus/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: text/javascript
{
"method": 23,
"method_type": "ship",
"status": "new"
}
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of a valid event
:param order: The ``code`` field of a valid order
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view it.
:statuscode 404: The order does not exist or no shipping address is attached.
.. http:get:: /api/v1/organizers/(organizer)/printjobs/
Returns a list of ticket orders, only useful with some query filters
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/printjobs/?method=ship&status=new HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: text/javascript
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"event": "democon",
"order": "ABC12",
"method": "ship",
"status": "new"
}
]
}
:query string method: Filter by response field ``method`` (can be passed multiple times)
:query string status: Filter by response field ``status``
:query string event: Filter by response field ``event``
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of a valid event
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view it.
.. http:get:: /api/v1/organizers/(organizer)/printjobs/poll/
Returns the PDF file for the next job to print.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/printjobs/poll/?method=ship&status=new 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/pdf
X-Pretix-Order-Code: ABC12
...
:query string method: Filter by response field ``method`` (can be passed multiple times)
:query string status: Filter by response field ``status``
:query string event: Filter by response field ``event``
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of a valid event
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view it.
.. http:post:: /api/v1/organizers/(organizer)/printjobs/(order)/ack/
Change an order's status to "shipped".
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/printjobs/ABC12/ack/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 204 No Content
Vary: Accept
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of a valid event
:param order: The ``code`` field of a valid order
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view it.
:statuscode 404: The order does not exist.

View File

@@ -78,7 +78,7 @@ Synchronization setting any
----------------------------------------------- ----------------------------------- ----------------------------------------------------------------------- -----------------------------------------------------------------------
Ticket secrets any Random Signed Random Signed
=============================================== =================================== =================================== =================================== ================================= =====================================
Scenario supported on platforms Android, Desktop, iOS Android, Desktop, iOS Android, Desktop Android, Desktop Android, Desktop
Scenario supported on platforms Android, Desktop, iOS Android, Desktop, iOS Android, Desktop Android, Desktop, iOS Android, Desktop, iOS
Synchronization speed for large data sets slow slow fast fast
Tickets can be scanned yes yes yes no yes
Ticket is valid after sale immediately next sync (~5 minutes) immediately never immediately
@@ -90,6 +90,7 @@ Name and seat visible on scanner yes
Order-specific check-in attention flag yes yes yes (except directly after sale) n/a no
Ticket search by order code or name yes yes yes (except directly after sale) no no
Check-in statistics on scanner yes yes mostly accurate no no
Support for add-on check-in with main ticket yes yes yes (except directly after sale) no no
=============================================== =================================== =================================== =================================== ================================= =====================================
.. _EdDSA: https://en.wikipedia.org/wiki/EdDSA#Ed25519

View File

@@ -135,6 +135,10 @@ Alternatively, you can select one or more categories to be shown::
<pretix-widget event="https://pretix.eu/demo/democon/" categories="12,25"></pretix-widget>
Or variation IDs::
<pretix-widget event="https://pretix.eu/demo/democon/" variations="15,2,68"></pretix-widget>
Multi-event selection
---------------------

View File

@@ -14,6 +14,8 @@ 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/paypal2/templates *
recursive-include pretix/plugins/paypal2/static *
recursive-include pretix/plugins/pretixdroid/templates *
recursive-include pretix/plugins/pretixdroid/static *
recursive-include pretix/plugins/sendmail/templates *

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.10.0.dev0"
__version__ = "4.12.0.dev0"

View File

@@ -45,6 +45,7 @@ class PretixScanSecurityProfile(AllowListSecurityProfile):
allowlist = (
('GET', 'api-v1:version'),
('GET', 'api-v1:device.eventselection'),
('GET', 'api-v1:idempotency.query'),
('POST', 'api-v1:device.update'),
('POST', 'api-v1:device.revoke'),
('POST', 'api-v1:device.roll'),
@@ -76,6 +77,7 @@ class PretixScanNoSyncNoSearchSecurityProfile(AllowListSecurityProfile):
allowlist = (
('GET', 'api-v1:version'),
('GET', 'api-v1:device.eventselection'),
('GET', 'api-v1:idempotency.query'),
('POST', 'api-v1:device.update'),
('POST', 'api-v1:device.revoke'),
('POST', 'api-v1:device.roll'),
@@ -105,6 +107,7 @@ class PretixScanNoSyncSecurityProfile(AllowListSecurityProfile):
allowlist = (
('GET', 'api-v1:version'),
('GET', 'api-v1:device.eventselection'),
('GET', 'api-v1:idempotency.query'),
('POST', 'api-v1:device.update'),
('POST', 'api-v1:device.revoke'),
('POST', 'api-v1:device.roll'),
@@ -135,6 +138,7 @@ class PretixPosSecurityProfile(AllowListSecurityProfile):
allowlist = (
('GET', 'api-v1:version'),
('GET', 'api-v1:device.eventselection'),
('GET', 'api-v1:idempotency.query'),
('POST', 'api-v1:device.update'),
('POST', 'api-v1:device.revoke'),
('POST', 'api-v1:device.roll'),

View File

@@ -23,6 +23,7 @@ import os
from datetime import timedelta
from django.core.files import File
from django.db.models import Q
from django.utils.crypto import get_random_string
from django.utils.timezone import now
from django.utils.translation import gettext_lazy
@@ -33,7 +34,7 @@ from pretix.api.serializers.i18n import I18nAwareModelSerializer
from pretix.api.serializers.order import (
AnswerCreateSerializer, AnswerSerializer, InlineSeatSerializer,
)
from pretix.base.models import Quota, Seat
from pretix.base.models import Quota, Seat, Voucher
from pretix.base.models.orders import CartPosition
@@ -61,11 +62,12 @@ class CartPositionCreateSerializer(I18nAwareModelSerializer):
seat = serializers.CharField(required=False, allow_null=True)
sales_channel = serializers.CharField(required=False, default='sales_channel')
includes_tax = serializers.BooleanField(required=False, allow_null=True)
voucher = serializers.CharField(required=False, allow_null=True)
class Meta:
model = CartPosition
fields = ('cart_id', 'item', 'variation', 'price', 'attendee_name', 'attendee_name_parts', 'attendee_email',
'subevent', 'expires', 'includes_tax', 'answers', 'seat', 'sales_channel')
'subevent', 'expires', 'includes_tax', 'answers', 'seat', 'sales_channel', 'voucher')
def create(self, validated_data):
answers_data = validated_data.pop('answers')
@@ -125,14 +127,46 @@ class CartPositionCreateSerializer(I18nAwareModelSerializer):
raise ValidationError('The specified seat ID is not unique.')
else:
validated_data['seat'] = seat
if not seat.is_available(
sales_channel=validated_data.get('sales_channel', 'web'),
distance_ignore_cart_id=validated_data['cart_id'],
):
raise ValidationError(gettext_lazy('The selected seat "{seat}" is not available.').format(seat=seat.name))
elif seated:
raise ValidationError('The specified product requires to choose a seat.')
if validated_data.get('voucher'):
try:
voucher = self.context['event'].vouchers.get(code__iexact=validated_data.get('voucher'))
except Voucher.DoesNotExist:
raise ValidationError('The specified voucher does not exist.')
if voucher and not voucher.applies_to(validated_data.get('item'), validated_data.get('variation')):
raise ValidationError('The specified voucher is not valid for the given item and variation.')
if voucher and voucher.seat and voucher.seat != validated_data.get('seat'):
raise ValidationError('The specified voucher is not valid for this seat.')
if voucher and voucher.subevent_id and (not validated_data.get('subevent') or voucher.subevent_id != validated_data['subevent'].pk):
raise ValidationError('The specified voucher is not valid for this subevent.')
if voucher.valid_until is not None and voucher.valid_until < now():
raise ValidationError('The specified voucher is expired.')
redeemed_in_carts = CartPosition.objects.filter(
Q(voucher=voucher) & Q(event=self.context['event']) & Q(expires__gte=now())
)
cart_count = redeemed_in_carts.count()
v_avail = voucher.max_usages - voucher.redeemed - cart_count
if v_avail < 1:
raise ValidationError('The specified voucher has already been used the maximum number of times.')
validated_data['voucher'] = voucher
if validated_data.get('seat'):
if not validated_data['seat'].is_available(
sales_channel=validated_data.get('sales_channel', 'web'),
distance_ignore_cart_id=validated_data['cart_id'],
ignore_voucher_id=validated_data['voucher'].pk if validated_data.get('voucher') else None,
):
raise ValidationError(
gettext_lazy('The selected seat "{seat}" is not available.').format(seat=validated_data['seat'].name))
validated_data.pop('sales_channel')
# todo: does this make sense?
validated_data['custom_price_input'] = validated_data['price']

View File

@@ -37,7 +37,7 @@ class CheckinListSerializer(I18nAwareModelSerializer):
model = CheckinList
fields = ('id', 'name', 'all_products', 'limit_products', 'subevent', 'checkin_count', 'position_count',
'include_pending', 'auto_checkin_sales_channels', 'allow_multiple_entries', 'allow_entry_after_exit',
'rules', 'exit_all_at')
'rules', 'exit_all_at', 'addon_match')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

View File

@@ -977,8 +977,18 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
else:
ia = None
lock_required = False
for pos_data in positions_data:
pos_data['_quotas'] = list(
pos_data.get('variation').quotas.filter(subevent=pos_data.get('subevent'))
if pos_data.get('variation')
else pos_data.get('item').quotas.filter(subevent=pos_data.get('subevent'))
)
if pos_data.get('voucher') or pos_data.get('seat') or any(q.size is not None for q in pos_data['_quotas']):
lock_required = True
lockfn = self.context['event'].lock
if simulate:
if simulate or not lock_required:
lockfn = NoLockManager
with lockfn() as now_dt:
free_seats = set()
@@ -1102,9 +1112,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
str(pos_data.get('item'))
)]
new_quotas = (pos_data.get('variation').quotas.filter(subevent=pos_data.get('subevent'))
if pos_data.get('variation')
else pos_data.get('item').quotas.filter(subevent=pos_data.get('subevent')))
new_quotas = pos_data['_quotas']
if len(new_quotas) == 0:
errs[i]['item'] = [gettext_lazy('The product "{}" is not assigned to a quota.').format(
str(pos_data.get('item'))
@@ -1158,7 +1166,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
pos_data['attendee_name_parts'] = {
'_legacy': attendee_name
}
pos = OrderPosition(**{k: v for k, v in pos_data.items() if k != 'answers'})
pos = OrderPosition(**{k: v for k, v in pos_data.items() if k != 'answers' and k != '_quotas'})
if simulate:
pos.order = order._wrapped
else:

View File

@@ -41,8 +41,8 @@ from rest_framework import routers
from pretix.api.views import cart
from .views import (
checkin, device, discount, event, exporters, item, oauth, order, organizer,
upload, user, version, voucher, waitinglist, webhooks,
checkin, device, discount, event, exporters, idempotency, item, oauth,
order, organizer, upload, user, version, voucher, waitinglist, webhooks,
)
router = routers.DefaultRouter()
@@ -133,6 +133,7 @@ urlpatterns = [
re_path(r"^device/roll$", device.RollKeyView.as_view(), name="device.roll"),
re_path(r"^device/revoke$", device.RevokeKeyView.as_view(), name="device.revoke"),
re_path(r"^device/eventselection$", device.EventSelectionView.as_view(), name="device.eventselection"),
re_path(r"^idempotency_query$", idempotency.IdempotencyQueryView.as_view(), name="idempotency.query"),
re_path(r"^upload$", upload.UploadView.as_view(), name="upload"),
re_path(r"^me$", user.MeView.as_view(), name="user.me"),
re_path(r"^version$", version.VersionView.as_view(), name="version"),

View File

@@ -25,6 +25,7 @@ from django.core.exceptions import ValidationError
from django.db import transaction
from django.db.models import (
Count, Exists, F, Max, OrderBy, OuterRef, Prefetch, Q, Subquery,
prefetch_related_objects,
)
from django.db.models.functions import Coalesce
from django.http import Http404
@@ -157,6 +158,7 @@ class CheckinListViewSet(viewsets.ModelViewSet):
list=self.get_object(),
successful=False,
forced=True,
force_sent=True,
device=self.request.auth if isinstance(self.request.auth, Device) else None,
gate=self.request.auth.gate if isinstance(self.request.auth, Device) else None,
**kwargs,
@@ -279,7 +281,7 @@ class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet):
serializer_class = CheckinListOrderPositionSerializer
queryset = OrderPosition.all.none()
filter_backends = (ExtendedBackend, RichOrderingFilter)
ordering = ('attendee_name_cached', 'positionid')
ordering = (F('attendee_name_cached').asc(nulls_last=True), 'positionid')
ordering_fields = (
'order__code', 'order__datetime', 'positionid', 'attendee_name',
'last_checked_in', 'order__email',
@@ -407,6 +409,13 @@ class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet):
raise ValidationError("Invalid check-in type.")
ignore_unpaid = bool(self.request.data.get('ignore_unpaid', False))
nonce = self.request.data.get('nonce')
untrusted_input = (
self.request.GET.get('untrusted_input', '') not in ('0', 'false', 'False', '')
or (isinstance(self.request.auth, Device) and 'pretixscan' in (self.request.auth.software_brand or '').lower())
)
if not self.checkinlist.all_products:
prefetch_related_objects([self.checkinlist], 'limit_products')
if 'datetime' in self.request.data:
dt = DateTimeField().to_internal_value(self.request.data.get('datetime'))
@@ -426,19 +435,32 @@ class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet):
raw_barcode_for_checkin = None
from_revoked_secret = False
try:
queryset = self.get_queryset(ignore_status=True, ignore_products=True)
if self.kwargs['pk'].isnumeric():
op = queryset.get(Q(pk=self.kwargs['pk']) | Q(secret=self.kwargs['pk']))
else:
# In application/x-www-form-urlencoded, you can encodes space ' ' with '+' instead of '%20'.
# `id`, however, is part of a path where this technically is not allowed. Old versions of our
# scan apps still do it, so we try work around it!
try:
op = queryset.get(secret=self.kwargs['pk'])
except OrderPosition.DoesNotExist:
op = queryset.get(secret=self.kwargs['pk'].replace('+', ' '))
except OrderPosition.DoesNotExist:
# 1. Gather a list of positions that could be the one we looking fore, either from their ID, secret or
# parent secret
queryset = self.get_queryset(ignore_status=True, ignore_products=True).order_by(
F('addon_to').asc(nulls_first=True)
)
q = Q(secret=self.kwargs['pk'])
if self.checkinlist.addon_match:
q |= Q(addon_to__secret=self.kwargs['pk'])
if self.kwargs['pk'].isnumeric() and not untrusted_input:
q |= Q(pk=self.kwargs['pk'])
op_candidates = list(queryset.filter(q))
if not op_candidates and '+' in self.kwargs['pk']:
# In application/x-www-form-urlencoded, you can encodes space ' ' with '+' instead of '%20'.
# `id`, however, is part of a path where this technically is not allowed. Old versions of our
# scan apps still do it, so we try work around it!
q = Q(secret=self.kwargs['pk'].replace('+', ' '))
if self.checkinlist.addon_match:
q |= Q(addon_to__secret=self.kwargs['pk'].replace('+', ' '))
op_candidates = list(queryset.filter(q))
# 2. Handle the "nothing found" case: Either it's really a bogus secret that we don't know (-> error), or it
# might be a revoked one that we actually know (-> error, but with better error message and logging and
# with respecting the force option).
if not op_candidates:
revoked_matches = list(self.request.event.revoked_secrets.filter(secret=self.kwargs['pk']))
if len(revoked_matches) == 0:
self.request.event.log_action('pretix.event.checkin.unknown', data={
@@ -498,7 +520,9 @@ class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet):
'require_attention': False,
}, status=404)
elif revoked_matches and force:
op = revoked_matches[0].position
op_candidates = [revoked_matches[0].position]
if self.checkinlist.addon_match:
op_candidates += list(revoked_matches[0].position.addons.all())
raw_barcode_for_checkin = self.kwargs['pk']
from_revoked_secret = True
else:
@@ -523,6 +547,56 @@ class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet):
'position': CheckinListOrderPositionSerializer(op, context=self.get_serializer_context()).data
}, status=400)
# 3. Handle the "multiple options found" case: Except for the unlikely case of a secret being also a valid primary
# key on the same list, we're probably dealing with the ``addon_match`` case here and need to figure out
# which add-on has the right product.
if len(op_candidates) > 1:
if self.checkinlist.addon_match and not self.checkinlist.all_products:
op_candidates_matching_product = [
op for op in op_candidates if op.item_id in {i.pk for i in self.checkinlist.limit_products.all()}
]
else:
op_candidates_matching_product = op_candidates
if len(op_candidates_matching_product) == 0:
# None of the found add-ons has the correct product, too bad! We could just error out here, but
# instead we just continue with *any* product and have it rejected by the check in perform_checkin.
# This has the advantage of a better error message.
op_candidates = [op_candidates[0]]
elif len(op_candidates_matching_product) > 1:
# It's still ambiguous, we'll error out.
# We choose the first match (regardless of product) for the logging since it's most likely to be the
# base product according to our order_by above.
op = op_candidates[0]
op.order.log_action('pretix.event.checkin.denied', data={
'position': op.id,
'positionid': op.positionid,
'errorcode': Checkin.REASON_AMBIGUOUS,
'reason_explanation': None,
'force': force,
'datetime': dt,
'type': type,
'list': self.checkinlist.pk
}, user=self.request.user, auth=self.request.auth)
Checkin.objects.create(
position=op,
successful=False,
error_reason=Checkin.REASON_AMBIGUOUS,
error_explanation=None,
**common_checkin_args,
)
return Response({
'status': 'error',
'reason': Checkin.REASON_AMBIGUOUS,
'reason_explanation': None,
'require_attention': op.item.checkin_attention or op.order.checkin_attention,
'position': CheckinListOrderPositionSerializer(op, context=self.get_serializer_context()).data
}, status=400)
else:
op_candidates = op_candidates_matching_product
op = op_candidates[0]
# 5. Pre-validate all incoming answers, handle file upload
given_answers = {}
if 'answers' in self.request.data:
aws = self.request.data.get('answers')
@@ -536,6 +610,7 @@ class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet):
except ValidationError:
pass
# 6. Pass to our actual check-in logic
with language(self.request.event.settings.locale):
try:
perform_checkin(

View File

@@ -321,6 +321,7 @@ with scopes_disabled():
is_future = django_filters.rest_framework.BooleanFilter(method='is_future_qs')
ends_after = django_filters.rest_framework.IsoDateTimeFilter(method='ends_after_qs')
modified_since = django_filters.IsoDateTimeFilter(field_name='last_modified', lookup_expr='gte')
sales_channel = django_filters.rest_framework.CharFilter(method='sales_channel_qs')
class Meta:
model = SubEvent
@@ -353,6 +354,9 @@ with scopes_disabled():
else:
return queryset.exclude(expr)
def sales_channel_qs(self, queryset, name, value):
return queryset.filter(event__sales_channels__contains=value)
class SubEventViewSet(ConditionalListView, viewsets.ModelViewSet):
serializer_class = SubEventSerializer

View File

@@ -0,0 +1,80 @@
#
# 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 json
import logging
from hashlib import sha1
from django.conf import settings
from django.http import HttpResponse, JsonResponse
from rest_framework import status
from rest_framework.views import APIView
from pretix.api.models import ApiCall
logger = logging.getLogger(__name__)
class IdempotencyQueryView(APIView):
# Experimental feature, therefore undocumented for now
authentication_classes = ()
permission_classes = ()
def get(self, request, format=None):
idempotency_key = request.GET.get("key")
auth_hash_parts = '{}:{}'.format(
request.headers.get('Authorization', ''),
request.COOKIES.get(settings.SESSION_COOKIE_NAME, '')
)
auth_hash = sha1(auth_hash_parts.encode()).hexdigest()
if not idempotency_key:
return JsonResponse({
'detail': 'No idempotency key given.'
}, status=status.HTTP_404_NOT_FOUND)
try:
call = ApiCall.objects.get(
auth_hash=auth_hash,
idempotency_key=idempotency_key,
)
except ApiCall.DoesNotExist:
return JsonResponse({
'detail': 'Idempotency key not seen before.'
}, status=status.HTTP_404_NOT_FOUND)
if call.locked:
r = JsonResponse(
{'detail': 'Concurrent request with idempotency key.'},
status=status.HTTP_409_CONFLICT,
)
r['Retry-After'] = 5
return r
content = call.response_body
if isinstance(content, memoryview):
content = content.tobytes()
r = HttpResponse(
content=content,
status=call.response_code,
)
for k, v in json.loads(call.response_headers).values():
r[k] = v
return r

View File

@@ -27,7 +27,9 @@ from decimal import Decimal
import django_filters
import pytz
from django.db import transaction
from django.db.models import Exists, F, OuterRef, Prefetch, Q, Subquery
from django.db.models import (
Exists, F, OuterRef, Prefetch, Q, Subquery, prefetch_related_objects,
)
from django.db.models.functions import Coalesce, Concat
from django.http import FileResponse, HttpResponse
from django.shortcuts import get_object_or_404
@@ -202,37 +204,35 @@ class OrderViewSet(viewsets.ModelViewSet):
if 'invoice_address' not in self.request.GET.getlist('exclude'):
qs = qs.select_related('invoice_address')
if self.request.query_params.get('include_canceled_positions', 'false') == 'true':
qs = qs.prefetch_related(self._positions_prefetch(self.request))
return qs
def _positions_prefetch(self, request):
if request.query_params.get('include_canceled_positions', 'false') == 'true':
opq = OrderPosition.all
else:
opq = OrderPosition.objects
if self.request.query_params.get('pdf_data', 'false') == 'true':
qs = qs.prefetch_related(
Prefetch(
'positions',
opq.all().prefetch_related(
Prefetch('checkins', queryset=Checkin.objects.all()),
'item', 'variation', 'answers', 'answers__options', 'answers__question',
'item__category', 'addon_to', 'seat',
Prefetch('addons', opq.select_related('item', 'variation', 'seat'))
)
if request.query_params.get('pdf_data', 'false') == 'true':
return Prefetch(
'positions',
opq.all().prefetch_related(
Prefetch('checkins', queryset=Checkin.objects.all()),
'item', 'variation', 'answers', 'answers__options', 'answers__question',
'item__category', 'addon_to', 'seat',
Prefetch('addons', opq.select_related('item', 'variation', 'seat'))
)
)
else:
qs = qs.prefetch_related(
Prefetch(
'positions',
opq.all().prefetch_related(
Prefetch('checkins', queryset=Checkin.objects.all()),
'item', 'variation',
Prefetch('answers', queryset=QuestionAnswer.objects.prefetch_related('options', 'question').order_by('question__position')),
'seat',
)
return Prefetch(
'positions',
opq.all().prefetch_related(
Prefetch('checkins', queryset=Checkin.objects.all()),
'item', 'variation',
Prefetch('answers', queryset=QuestionAnswer.objects.prefetch_related('options', 'question').order_by('question__position')),
'seat',
)
)
return qs
def _get_output_provider(self, identifier):
responses = register_ticket_outputs.send(self.request.event)
for receiver, response in responses:
@@ -261,8 +261,11 @@ class OrderViewSet(viewsets.ModelViewSet):
provider = self._get_output_provider(output)
order = self.get_object()
if order.status != Order.STATUS_PAID:
raise PermissionDenied("Downloads are not available for unpaid orders.")
if order.status in (Order.STATUS_CANCELED, Order.STATUS_EXPIRED):
raise PermissionDenied("Downloads are not available for canceled or expired orders.")
if order.status == Order.STATUS_PENDING and not request.event.settings.ticket_download_pending:
raise PermissionDenied("Downloads are not available for pending orders.")
ct = CachedCombinedTicket.objects.filter(
order=order, provider=provider.identifier, file__isnull=False
@@ -616,6 +619,7 @@ class OrderViewSet(viewsets.ModelViewSet):
serializer = SimulatedOrderSerializer(order, context=serializer.context)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
prefetch_related_objects([order], self._positions_prefetch(request))
serializer = OrderSerializer(order, context=serializer.context)
order.log_action(
@@ -1119,8 +1123,11 @@ class OrderPositionViewSet(viewsets.ModelViewSet):
provider = self._get_output_provider(output)
pos = self.get_object()
if pos.order.status != Order.STATUS_PAID:
raise PermissionDenied("Downloads are not available for unpaid orders.")
if pos.order.status in (Order.STATUS_CANCELED, Order.STATUS_EXPIRED):
raise PermissionDenied("Downloads are not available for canceled or expired orders.")
if pos.order.status == Order.STATUS_PENDING and not request.event.settings.ticket_download_pending:
raise PermissionDenied("Downloads are not available for pending orders.")
if not pos.generate_ticket:
raise PermissionDenied("Downloads are not enabled for this product.")

View File

@@ -25,7 +25,7 @@ from django.db import transaction
from django.db.models import F, Q
from django.utils.timezone import now
from django_filters.rest_framework import (
BooleanFilter, DjangoFilterBackend, FilterSet,
BooleanFilter, CharFilter, DjangoFilterBackend, FilterSet,
)
from django_scopes import scopes_disabled
from rest_framework import status, viewsets
@@ -40,6 +40,7 @@ from pretix.base.models import Voucher
with scopes_disabled():
class VoucherFilter(FilterSet):
active = BooleanFilter(method='filter_active')
code = CharFilter(lookup_expr='iexact')
class Meta:
model = Voucher

View File

@@ -475,8 +475,11 @@ def base_placeholders(sender, **kwargs):
),
SimpleFunctionalMailTextPlaceholder(
'event_admission_time', ['event_or_subevent'],
lambda event_or_subevent: date_format(event_or_subevent.date_admission, 'TIME_FORMAT') if event_or_subevent.date_admission else '',
lambda event: date_format(event.date_admission, 'TIME_FORMAT') if event.date_admission else '',
lambda event_or_subevent:
date_format(event_or_subevent.date_admission.astimezone(event_or_subevent.timezone), 'TIME_FORMAT')
if event_or_subevent.date_admission
else '',
lambda event: date_format(event.date_admission.astimezone(event.timezone), 'TIME_FORMAT') if event.date_admission else '',
),
SimpleFunctionalMailTextPlaceholder(
'subevent', ['waiting_list_entry', 'event'],

View File

@@ -23,6 +23,7 @@ from .answers import * # noqa
from .dekodi import * # noqa
from .events import * # noqa
from .invoices import * # noqa
from .items import * # noqa
from .json import * # noqa
from .mail import * # noqa
from .orderlist import * # noqa

View File

@@ -0,0 +1,222 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from django.db.models import Prefetch
from django.dispatch import receiver
from django.utils.formats import date_format
from django.utils.translation import gettext_lazy as _
from openpyxl.styles import Alignment
from openpyxl.utils import get_column_letter
from ...helpers.safe_openpyxl import SafeCell
from ..channels import get_all_sales_channels
from ..exporter import ListExporter
from ..models import ItemMetaValue
from ..signals import register_data_exporters
def _max(a1, a2):
if a1 and a2:
return max(a1, a2)
return a1 or a2
def _min(a1, a2):
if a1 and a2:
return min(a1, a2)
return a1 or a2
class ItemDataExporter(ListExporter):
identifier = 'itemdata'
verbose_name = _('Product data')
def iterate_list(self, form_data):
locales = self.event.settings.locales
scs = get_all_sales_channels()
header = [
_("Product ID"),
_("Variation ID"),
_("Product category"),
_("Internal name"),
]
for l in locales:
header.append(
_("Item name") + f" ({l})"
)
for l in locales:
header.append(
_("Variation") + f" ({l})"
)
header += [
_("Active"),
_("Sales channels"),
_("Default price"),
_("Free price input"),
_("Sales tax"),
_("Is an admission ticket"),
_("Generate tickets"),
_("Waiting list"),
_("Available from"),
_("Available until"),
_("This product can only be bought using a voucher."),
_("This product will only be shown if a voucher matching the product is redeemed."),
_("Buying this product requires approval"),
_("Only sell this product as part of a bundle"),
_("Allow product to be canceled or changed"),
_("Minimum amount per order"),
_("Maximum amount per order"),
_("Requires special attention"),
_("Original price"),
_("This product is a gift card"),
_("Require a valid membership"),
_("Hide without a valid membership"),
]
props = list(self.event.item_meta_properties.all())
for p in props:
header.append(p.name)
if form_data["_format"] == "xlsx":
row = []
for h in header:
c = SafeCell(self.__ws, value=h)
c.alignment = Alignment(wrap_text=True, vertical='top')
row.append(c)
else:
row = header
yield row
for i in self.event.items.prefetch_related(
'variations',
Prefetch(
'meta_values',
ItemMetaValue.objects.select_related('property'),
to_attr='meta_values_cached'
)
).select_related('category', 'tax_rule'):
m = i.meta_data
vars = list(i.variations.all())
if vars:
for v in vars:
row = [
i.pk,
v.pk,
str(i.category) if i.category else "",
i.internal_name or "",
]
for l in locales:
row.append(i.name.localize(l))
for l in locales:
row.append(v.value.localize(l))
row += [
_("Yes") if i.active and v.active else "",
", ".join([str(sn.verbose_name) for s, sn in scs.items() if s in i.sales_channels and s in v.sales_channels]),
v.default_price or i.default_price,
_("Yes") if i.free_price else "",
str(i.tax_rule) if i.tax_rule else "",
_("Yes") if i.admission else "",
_("Yes") if i.generate_tickets else (_("Default") if i.generate_tickets is None else ""),
_("Yes") if i.allow_waitinglist else "",
date_format(_max(i.available_from, v.available_from).astimezone(self.timezone),
"SHORT_DATETIME_FORMAT") if i.available_from or v.available_from else "",
date_format(_min(i.available_until, v.available_until).astimezone(self.timezone),
"SHORT_DATETIME_FORMAT") if i.available_until or v.available_until else "",
_("Yes") if i.require_voucher else "",
_("Yes") if i.hide_without_voucher or v.hide_without_voucher else "",
_("Yes") if i.require_approval or v.require_approval else "",
_("Yes") if i.require_bundling else "",
_("Yes") if i.allow_cancel else "",
i.min_per_order if i.min_per_order is not None else "",
i.max_per_order if i.max_per_order is not None else "",
_("Yes") if i.checkin_attention else "",
v.original_price or i.original_price or "",
_("Yes") if i.issue_giftcard else "",
_("Yes") if i.require_membership or v.require_membership else "",
_("Yes") if i.require_membership_hidden or v.require_membership_hidden else "",
]
row += [
m.get(p.name, '') for p in props
]
yield row
else:
row = [
i.pk,
"",
str(i.category) if i.category else "",
i.internal_name or "",
]
for l in locales:
row.append(i.name.localize(l))
for l in locales:
row.append("")
row += [
_("Yes") if i.active else "",
", ".join([str(sn.verbose_name) for s, sn in scs.items() if s in i.sales_channels]),
i.default_price,
_("Yes") if i.free_price else "",
str(i.tax_rule) if i.tax_rule else "",
_("Yes") if i.admission else "",
_("Yes") if i.generate_tickets else (_("Default") if i.generate_tickets is None else ""),
_("Yes") if i.allow_waitinglist else "",
date_format(i.available_from.astimezone(self.timezone),
"SHORT_DATETIME_FORMAT") if i.available_from else "",
date_format(i.available_until.astimezone(self.timezone),
"SHORT_DATETIME_FORMAT") if i.available_until else "",
_("Yes") if i.require_voucher else "",
_("Yes") if i.hide_without_voucher else "",
_("Yes") if i.require_approval else "",
_("Yes") if i.require_bundling else "",
_("Yes") if i.allow_cancel else "",
i.min_per_order if i.min_per_order is not None else "",
i.max_per_order if i.max_per_order is not None else "",
_("Yes") if i.checkin_attention else "",
i.original_price or "",
_("Yes") if i.issue_giftcard else "",
_("Yes") if i.require_membership else "",
_("Yes") if i.require_membership_hidden else "",
]
row += [
m.get(p.name, '') for p in props
]
yield row
def get_filename(self):
return '{}_products'.format(self.events.first().organizer.slug)
def prepare_xlsx_sheet(self, ws):
self.__ws = ws
ws.freeze_panes = 'A1'
ws.column_dimensions['C'].width = 25
ws.column_dimensions['D'].width = 25
for i in range(len(self.event.settings.locales)):
ws.column_dimensions[get_column_letter(5 + 2 * i + 0)].width = 25
ws.column_dimensions[get_column_letter(5 + 2 * i + 1)].width = 25
ws.column_dimensions[get_column_letter(5 + 2 * len(self.event.settings.locales) + 1)].width = 25
ws.row_dimensions[1].height = 40
@receiver(register_data_exporters, dispatch_uid="exporter_itemdata")
def register_itemdata_exporter(sender, **kwargs):
return ItemDataExporter

View File

@@ -196,10 +196,16 @@ class SecretKeySettingsWidget(forms.TextInput):
attrs.update({
'autocomplete': 'new-password' # see https://bugs.chromium.org/p/chromium/issues/detail?id=370363#c7
})
self.__reflect_value = False
super().__init__(attrs)
def value_from_datadict(self, data, files, name):
value = super().value_from_datadict(data, files, name)
self.__reflect_value = value and value != SECRET_REDACTED
return value
def get_context(self, name, value, attrs):
if value:
if value and not self.__reflect_value:
value = SECRET_REDACTED
return super().get_context(name, value, attrs)

View File

@@ -253,7 +253,7 @@ class NamePartsFormField(forms.MultiValueField):
if self.require_all_fields and not all(v for v in value):
raise forms.ValidationError(self.error_messages['incomplete'], code='required')
if sum(len(v) for v in value if v) > 250:
if sum(len(v) for v in value.values() if v) > 250:
raise forms.ValidationError(_('Please enter a shorter name.'), code='max_length')
return value

View File

@@ -4,7 +4,6 @@
from django.core.exceptions import ImproperlyConfigured
from django.db import migrations, models
from django_mysql.checks import mysql_connections
from django_mysql.utils import connection_is_mariadb
def set_attendee_name_parts(apps, schema_editor):
@@ -31,7 +30,7 @@ def check_mysqlversion(apps, schema_editor):
conns = list(mysql_connections())
found = 'Unknown version'
for alias, conn in conns:
if connection_is_mariadb(conn) and hasattr(conn, 'mysql_version'):
if hasattr(conn, 'mysql_is_mariadb') and conn.mysql_is_mariadb and hasattr(conn, 'mysql_version'):
if conn.mysql_version >= (10, 2, 7):
any_conn_works = True
else:

View File

@@ -0,0 +1,22 @@
# Generated by Django 3.2.12 on 2022-05-12 15:34
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0214_customer_notes_ext_id'),
]
operations = [
migrations.AlterField(
model_name='customer',
name='identifier',
field=models.CharField(db_index=True, max_length=190),
),
migrations.AlterUniqueTogether(
name='customer',
unique_together={('organizer', 'email'), ('organizer', 'identifier')},
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2022-04-29 13:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0215_customer_organizer_identifier_unique'),
]
operations = [
migrations.AddField(
model_name='checkin',
name='force_sent',
field=models.BooleanField(default=False, null=True),
),
]

View File

@@ -0,0 +1,33 @@
# Generated by Django 3.2.12 on 2022-06-15 08:10
import django.db.models.deletion
import i18nfield.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0216_checkin_forced_sent'),
]
operations = [
migrations.CreateModel(
name='OrganizerFooterLink',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)),
('label', i18nfield.fields.I18nCharField(max_length=200)),
('url', models.URLField()),
('organizer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='footer_links', to='pretixbase.organizer')),
],
),
migrations.CreateModel(
name='EventFooterLink',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)),
('label', i18nfield.fields.I18nCharField(max_length=200)),
('url', models.URLField()),
('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='footer_links', to='pretixbase.event')),
],
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.2 on 2022-06-29 17:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0217_eventfooterlink_organizerfooterlink'),
]
operations = [
migrations.AddField(
model_name='checkinlist',
name='addon_match',
field=models.BooleanField(default=False),
),
]

View File

@@ -56,6 +56,12 @@ class CheckinList(LoggedModel):
default=False,
help_text=_('With this option, people will be able to check in even if the '
'order has not been paid.'))
addon_match = models.BooleanField(
verbose_name=_('Allow checking in add-on tickets by scanning the main ticket'),
default=False,
help_text=_('A scan will only be possible if the check-in list is configured such that there is always exactly '
'one matching add-on ticket. Ambiguous scans will be rejected..')
)
gates = models.ManyToManyField(
'Gate', verbose_name=_("Gates"), blank=True,
help_text=_("Does not have any effect for the validation of tickets, only for the automatic configuration of "
@@ -258,6 +264,7 @@ class Checkin(models.Model):
REASON_REVOKED = 'revoked'
REASON_INCOMPLETE = 'incomplete'
REASON_ALREADY_REDEEMED = 'already_redeemed'
REASON_AMBIGUOUS = 'ambiguous'
REASON_ERROR = 'error'
REASONS = (
(REASON_CANCELED, _('Order canceled')),
@@ -268,6 +275,7 @@ class Checkin(models.Model):
(REASON_INCOMPLETE, _('Information required')),
(REASON_ALREADY_REDEEMED, _('Ticket already used')),
(REASON_PRODUCT, _('Ticket type not allowed here')),
(REASON_AMBIGUOUS, _('Ticket code is ambiguous on list')),
(REASON_ERROR, _('Server error')),
)
@@ -326,7 +334,13 @@ class Checkin(models.Model):
type = models.CharField(max_length=100, choices=CHECKIN_TYPES, default=TYPE_ENTRY)
nonce = models.CharField(max_length=190, null=True, blank=True)
# Whether or not the scan was made offline
force_sent = models.BooleanField(default=False, null=True, blank=True)
# Whether the scan was made offline AND would have not been possible online
forced = models.BooleanField(default=False)
device = models.ForeignKey(
'pretixbase.Device', related_name='checkins', on_delete=models.PROTECT, null=True, blank=True
)

View File

@@ -24,6 +24,7 @@ from django.conf import settings
from django.contrib.auth.hashers import (
check_password, is_password_usable, make_password,
)
from django.core.validators import RegexValidator
from django.db import models
from django.db.models import F, Q
from django.utils.crypto import get_random_string, salted_hmac
@@ -44,7 +45,18 @@ class Customer(LoggedModel):
"""
id = models.BigAutoField(primary_key=True)
organizer = models.ForeignKey(Organizer, related_name='customers', on_delete=models.CASCADE)
identifier = models.CharField(max_length=190, db_index=True, unique=True)
identifier = models.CharField(
max_length=190,
db_index=True,
help_text=_('You can enter any value here to make it easier to match the data with other sources. If you do '
'not input one, we will generate one automatically.'),
validators=[
RegexValidator(
regex=r"^[a-zA-Z0-9]([a-zA-Z0-9.\-_]*[a-zA-Z0-9])?$",
message=_("The identifier may only contain letters, numbers, dots, dashes, and underscores. It must start and end with a letter or number."),
),
],
)
email = models.EmailField(db_index=True, null=True, blank=False, verbose_name=_('E-mail'), max_length=190)
phone = PhoneNumberField(null=True, blank=True, verbose_name=_('Phone number'))
password = models.CharField(verbose_name=_('Password'), max_length=128)
@@ -65,7 +77,7 @@ class Customer(LoggedModel):
objects = ScopedManager(organizer='organizer')
class Meta:
unique_together = [['organizer', 'email']]
unique_together = [['organizer', 'email'], ['organizer', 'identifier']]
ordering = ('email',)
def get_email_field_name(self):

View File

@@ -608,11 +608,14 @@ class Event(EventMixin, LoggedModel):
return super().presale_has_ended
def delete_all_orders(self, really=False):
from .orders import OrderFee, OrderPayment, OrderPosition, OrderRefund
from .orders import (
OrderFee, OrderPayment, OrderPosition, OrderRefund, Transaction,
)
if not really:
raise TypeError("Pass really=True as a parameter.")
Transaction.objects.filter(order__event=self).delete()
OrderPosition.all.filter(order__event=self, addon_to__isnull=False).delete()
OrderPosition.all.filter(order__event=self).delete()
OrderFee.objects.filter(order__event=self).delete()
@@ -718,6 +721,11 @@ class Event(EventMixin, LoggedModel):
self.save()
self.log_action('pretix.object.cloned', data={'source': other.slug, 'source_id': other.pk})
for fl in EventFooterLink.objects.filter(event=other):
fl.pk = None
fl.event = self
fl.save(force_insert=True)
tax_map = {}
for t in other.tax_rules.all():
tax_map[t.pk] = t
@@ -1226,7 +1234,7 @@ class Event(EventMixin, LoggedModel):
self.set_active_plugins(plugins_active)
plugins_available = self.get_available_plugins()
if hasattr(plugins_available[module].app, 'uninstalled'):
if module in plugins_available and hasattr(plugins_available[module].app, 'uninstalled'):
getattr(plugins_available[module].app, 'uninstalled')(self)
regenerate_css.apply_async(args=(self.pk,))
@@ -1612,3 +1620,25 @@ class SubEventMetaValue(LoggedModel):
super().save(*args, **kwargs)
if self.subevent:
self.subevent.event.cache.clear()
class EventFooterLink(models.Model):
"""
A footer link assigned to an event.
"""
event = models.ForeignKey('Event', on_delete=models.CASCADE, related_name='footer_links')
label = I18nCharField(
max_length=200,
verbose_name=_("Link text"),
)
url = models.URLField(
verbose_name=_("Link URL"),
)
def delete(self, *args, **kwargs):
super().delete(*args, **kwargs)
self.event.cache.clear()
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
self.event.cache.clear()

View File

@@ -1243,7 +1243,13 @@ class Question(LoggedModel):
max_length=190,
verbose_name=_("Internal identifier"),
help_text=_('You can enter any value here to make it easier to match the data with other sources. If you do '
'not input one, we will generate one automatically.')
'not input one, we will generate one automatically.'),
validators=[
RegexValidator(
regex=r"^[a-zA-Z0-9.\-_]+$",
message=_("The identifier may only contain letters, numbers, dots, dashes, and underscores."),
),
],
)
help_text = I18nTextField(
verbose_name=_("Help text"),
@@ -1461,7 +1467,17 @@ class Question(LoggedModel):
class QuestionOption(models.Model):
question = models.ForeignKey('Question', related_name='options', on_delete=models.CASCADE)
identifier = models.CharField(max_length=190)
identifier = models.CharField(
max_length=190,
help_text=_('You can enter any value here to make it easier to match the data with other sources. If you do '
'not input one, we will generate one automatically.'),
validators=[
RegexValidator(
regex=r"^[a-zA-Z0-9.\-_]+$",
message=_("The identifier may only contain letters, numbers, dots, dashes, and underscores."),
),
],
)
answer = I18nCharField(verbose_name=_('Answer'))
position = models.IntegerField(default=0)

View File

@@ -843,7 +843,7 @@ class Order(LockModel, LoggedModel):
if terms:
term_last = min(terms)
else:
term_last = None
return None
else:
term_last = term_last.datetime(self.event).date()
term_last = make_aware(datetime.combine(
@@ -1588,7 +1588,7 @@ class OrderPayment(models.Model):
if status_change:
self.order.create_transactions()
def fail(self, info=None, user=None, auth=None):
def fail(self, info=None, user=None, auth=None, log_data=None):
"""
Marks the order as failed and sets info to ``info``, but only if the order is in ``created`` or ``pending``
state. This is equivalent to setting ``state`` to ``OrderPayment.PAYMENT_STATE_FAILED`` and logging a failure,
@@ -1616,6 +1616,7 @@ class OrderPayment(models.Model):
'local_id': self.local_id,
'provider': self.provider,
'info': info,
'data': log_data,
}, user=user, auth=auth)
def confirm(self, count_waitinglist=True, send_mail=True, force=False, user=None, auth=None, mail_text='',

View File

@@ -46,6 +46,7 @@ from django.utils.crypto import get_random_string
from django.utils.functional import cached_property
from django.utils.timezone import get_current_timezone, make_aware, now
from django.utils.translation import gettext_lazy as _
from i18nfield.fields import I18nCharField
from pretix.base.models.base import LoggedModel
from pretix.base.validators import OrganizerSlugBanlistValidator
@@ -464,3 +465,25 @@ class TeamAPIToken(models.Model):
return self.get_events_with_any_permission()
else:
return self.team.organizer.events.none()
class OrganizerFooterLink(models.Model):
"""
A footer link assigned to an organizer.
"""
organizer = models.ForeignKey('Organizer', on_delete=models.CASCADE, related_name='footer_links')
label = I18nCharField(
max_length=200,
verbose_name=_("Link text"),
)
url = models.URLField(
verbose_name=_("Link URL"),
)
def delete(self, *args, **kwargs):
super().delete(*args, **kwargs)
self.organizer.cache.clear()
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
self.organizer.cache.clear()

View File

@@ -530,7 +530,10 @@ def _get_attendee_name_part(key, op, order, ev):
def _get_ia_name_part(key, op, order, ev):
return order.invoice_address.name_parts.get(key, '') if getattr(order, 'invoice_address', None) else ''
value = order.invoice_address.name_parts.get(key, '') if getattr(order, 'invoice_address', None) else ''
if key == 'salutation' and value:
return pgettext('person_name_salutation', value)
return value
def get_images(event):
@@ -731,7 +734,6 @@ class Renderer:
text = o['text']
def replace(x):
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:'):
@@ -829,9 +831,10 @@ class Renderer:
textColor=Color(o['color'][0] / 255, o['color'][1] / 255, o['color'][2] / 255),
alignment=align_map[o['align']]
)
# add an almost-invisible space &hairsp; after hyphens as word-wrap in ReportLab only works on space chars
text = conditional_escape(
self._get_text_content(op, order, o) or "",
).replace("\n", "<br/>\n")
).replace("\n", "<br/>\n").replace("-", "-&hairsp;")
# reportlab does not support RTL, ligature-heavy scripts like Arabic. Therefore, we use ArabicReshaper
# to resolve all ligatures and python-bidi to switch RTL texts.

View File

@@ -143,8 +143,8 @@ class Sig1TicketSecretGenerator(BaseTicketSecretGenerator):
The resulting string is REVERSED, to avoid all secrets of same length beginning with the same 10
characters, which would make it impossible to search for secrets manually.
"""
verbose_name = _('pretix signature scheme 1 (for very large events, does not work with pretixSCAN on iOS and '
'changes semantics of offline scanning please refer to documentation or support for details)')
verbose_name = _('pretix signature scheme 1 (for very large events, changes semantics of offline scanning '
'please refer to documentation or support for details)')
identifier = 'pretix_sig1'
use_revocation_list = True

View File

@@ -447,7 +447,10 @@ class CartManager:
try:
voucher = self.event.vouchers.get(code__iexact=voucher_code.strip())
except Voucher.DoesNotExist:
raise CartError(error_messages['voucher_invalid'])
if self.event.organizer.accepted_gift_cards.filter(secret__iexact=voucher_code).exists():
raise CartError(error_messages['gift_card'])
else:
raise CartError(error_messages['voucher_invalid'])
voucher_use_diff = Counter()
ops = []

View File

@@ -796,6 +796,7 @@ def perform_checkin(op: OrderPosition, clist: CheckinList, given_answers: dict,
gate=device.gate if device else None,
nonce=nonce,
forced=force and (not entry_allowed or from_revoked_secret),
force_sent=force,
raw_barcode=raw_barcode,
)
op.order.log_action('pretix.event.checkin', data={

View File

@@ -412,8 +412,9 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
logger.exception('Could not attach invoice to email')
pass
if attach_size < settings.FILE_UPLOAD_MAX_SIZE_EMAIL_ATTACHMENT:
# Do not attach more than 4MB, it will bounce way to often.
if attach_size < settings.FILE_UPLOAD_MAX_SIZE_EMAIL_ATTACHMENT - 1:
# Do not attach more than (limit - 1 MB) in tickets (1MB space for invoice, email itself, …),
# it will bounce way to often.
for a in args:
try:
email.attach(*a)

View File

@@ -2304,6 +2304,11 @@ class OrderChangeManager:
# Do nothing
return
# Clear prefetched objects cache of order. We're going to modify the positions and fees and we have no guarantee
# that every operation tuple points to a position/fee instance that has been fetched from the same object cache,
# so it's dangerous to keep the cache around.
self.order._prefetched_objects_cache = {}
# finally, incorporate difference in payment fees
self._payment_fee_diff()

View File

@@ -132,6 +132,7 @@ def generate_seats(event, subevent, plan, mapping, blocked_guids=None):
'already used in a voucher.', s.name))
Seat.objects.bulk_create(create_seats)
CartPosition.objects.filter(addon_to__seat__in=[s.pk for s in current_seats.values()]).delete()
CartPosition.objects.filter(seat__in=[s.pk for s in current_seats.values()]).delete()
OrderPosition.all.filter(
Q(canceled=True) | Q(order__status__in=(Order.STATUS_CANCELED, Order.STATUS_EXPIRED)),

View File

View File

@@ -96,6 +96,7 @@ ALLOWED_ATTRIBUTES = {
'div': ['class'],
'p': ['class'],
'span': ['class', 'title'],
'ol': ['start'],
# Update doc/user/markdown.rst if you change this!
}

View File

@@ -84,13 +84,17 @@ def timeline_for_event(event, subevent=None):
edit_url=ev_edit_url
))
if ev.presale_end:
tl.append(TimelineEvent(
event=event, subevent=subevent,
datetime=ev.presale_end,
description=pgettext_lazy('timeline', 'End of ticket sales'),
edit_url=ev_edit_url
))
tl.append(TimelineEvent(
event=event, subevent=subevent,
datetime=(
ev.presale_end or ev.date_to or ev.date_from.astimezone(ev.timezone).replace(hour=23, minute=59, second=59)
),
description='{}{}'.format(
pgettext_lazy('timeline', 'End of ticket sales'),
f" ({pgettext_lazy('timeline', 'automatically because the event is over and no end of presale has been configured')})" if not ev.presale_end else ""
),
edit_url=ev_edit_url
))
rd = event.settings.get('last_order_modification_date', as_type=RelativeDateWrapper)
if rd:

View File

@@ -29,13 +29,15 @@ from celery.result import AsyncResult
from django.conf import settings
from django.contrib import messages
from django.core.exceptions import ValidationError
from django.http import JsonResponse, QueryDict
from django.http import HttpResponse, JsonResponse, QueryDict
from django.shortcuts import redirect, render
from django.test import RequestFactory
from django.utils import timezone, translation
from django.utils.timezone import get_current_timezone
from django.utils.translation import get_language, gettext as _
from django.views import View
from django.views.generic import FormView
from redis import ResponseError
from pretix.base.models import User
from pretix.base.services.tasks import ProfiledEventTask
@@ -68,6 +70,11 @@ class AsyncMixin:
res.get(timeout=timeout, propagate=False)
except celery.exceptions.TimeoutError:
pass
except ResponseError:
# There is a long-standing concurrency issue in either celery or redis-py that hasn't been fixed
# yet. Instead of crashing, we can ignore it and the client will retry their request and hopefully
# it is fixed next time.
logger.warning('Ignored ResponseError in AsyncResult.get()')
except ConnectionError:
# Redis probably just restarted, let's just report not ready and retry next time
data = self._ajax_response_data()
@@ -306,3 +313,94 @@ class AsyncFormView(AsyncMixin, FormView):
else:
return self.error(res.info)
return redirect(self.get_check_url(res.id, False))
class AsyncPostView(AsyncMixin, View):
"""
View variant in which instead of ``post``, an ``async_post`` is executed in a celery task.
Note that this places some severe limitations on the form and the view, e.g. ``async_post`` may not
depend on the request object unless specifically supported by this class. File upload is currently also
not supported.
"""
known_errortypes = ['ValidationError']
expected_exceptions = (ValidationError,)
task_base = ProfiledEventTask
def __init_subclass__(cls):
def async_execute(self, *, request_path, url_args, url_kwargs, query_string, post_data, locale, tz,
organizer=None, event=None, user=None, session_key=None):
view_instance = cls()
req = RequestFactory().post(
request_path + '?' + query_string,
data=post_data,
content_type='application/x-www-form-urlencoded'
)
view_instance.request = req
if event:
view_instance.request.event = event
view_instance.request.organizer = event.organizer
elif organizer:
view_instance.request.organizer = organizer
if user:
view_instance.request.user = User.objects.get(pk=user) if isinstance(user, int) else user
if session_key:
engine = import_module(settings.SESSION_ENGINE)
self.SessionStore = engine.SessionStore
view_instance.request.session = self.SessionStore(session_key)
with translation.override(locale), timezone.override(pytz.timezone(tz)):
return view_instance.async_post(view_instance.request, *url_args, **url_kwargs)
cls.async_execute = app.task(
base=cls.task_base,
bind=True,
name=cls.__module__ + '.' + cls.__name__ + '.async_execute',
throws=cls.expected_exceptions
)(async_execute)
def async_post(self, request, *args, **kwargs):
pass
def get(self, request, *args, **kwargs):
if 'async_id' in request.GET and settings.HAS_CELERY:
return self.get_result(request)
return HttpResponse(status=405)
def post(self, request, *args, **kwargs):
if request.FILES:
raise TypeError('File upload currently not supported in AsyncPostView')
kwargs = {
'request_path': self.request.path,
'query_string': self.request.GET.urlencode(),
'post_data': self.request.POST.urlencode(),
'locale': get_language(),
'url_args': args,
'url_kwargs': kwargs,
'tz': get_current_timezone().zone,
}
if hasattr(self.request, 'organizer'):
kwargs['organizer'] = self.request.organizer.pk
if self.request.user.is_authenticated:
kwargs['user'] = self.request.user.pk
if hasattr(self.request, 'event'):
kwargs['event'] = self.request.event.pk
if hasattr(self.request, 'session'):
kwargs['session_key'] = self.request.session.session_key
try:
res = type(self).async_execute.apply_async(kwargs=kwargs)
except ConnectionError:
# Task very likely not yet sent, due to redis restarting etc. Let's try once again
res = type(self).async_execute.apply_async(kwargs=kwargs)
if 'ajax' in self.request.GET or 'ajax' in self.request.POST:
data = self._return_ajax_result(res)
data['check_url'] = self.get_check_url(res.id, True)
return JsonResponse(data)
else:
if res.ready():
if res.successful() and not isinstance(res.info, Exception):
return self.success(res.info)
else:
return self.error(res.info)
return redirect(self.get_check_url(res.id, False))

View File

@@ -22,9 +22,10 @@
from datetime import datetime, timedelta
from django import forms
from django.core.exceptions import ValidationError
from django.urls import reverse
from django.utils.timezone import get_current_timezone, make_aware, now
from django.utils.translation import pgettext_lazy
from django.utils.translation import gettext_lazy as _, pgettext_lazy
from django_scopes.forms import (
SafeModelChoiceField, SafeModelMultipleChoiceField,
)
@@ -109,6 +110,7 @@ class CheckinListForm(forms.ModelForm):
'rules',
'gates',
'exit_all_at',
'addon_match',
]
widgets = {
'limit_products': forms.CheckboxSelectMultiple(attrs={
@@ -130,6 +132,12 @@ class CheckinListForm(forms.ModelForm):
def clean(self):
d = super().clean()
d['rules'] = CheckinList.validate_rules(d.get('rules'))
if d.get('addon_match') and d.get('all_products'):
raise ValidationError(_('If you allow checking in add-on tickets by scanning the main ticket, you must '
'select a specific set of products for this check-in list, only including the '
'possible add-on products.'))
return d

View File

@@ -41,7 +41,9 @@ from django.conf import settings
from django.core.exceptions import ValidationError
from django.core.validators import validate_email
from django.db.models import Prefetch, Q, prefetch_related_objects
from django.forms import CheckboxSelectMultiple, formset_factory
from django.forms import (
CheckboxSelectMultiple, formset_factory, inlineformset_factory,
)
from django.urls import reverse
from django.utils.functional import cached_property
from django.utils.html import escape
@@ -58,7 +60,7 @@ from pretix.base.channels import get_all_sales_channels
from pretix.base.email import get_available_placeholders
from pretix.base.forms import I18nModelForm, PlaceholderValidator, SettingsForm
from pretix.base.models import Event, Organizer, TaxRule, Team
from pretix.base.models.event import EventMetaValue, SubEvent
from pretix.base.models.event import EventFooterLink, EventMetaValue, SubEvent
from pretix.base.reldate import RelativeDateField, RelativeDateTimeField
from pretix.base.settings import (
PERSON_NAME_SCHEMES, PERSON_NAME_TITLE_GROUPS, validate_event_settings,
@@ -1484,3 +1486,25 @@ ConfirmTextFormset = formset_factory(
formset=BaseConfirmTextFormSet,
can_order=True, can_delete=True, extra=0
)
class EventFooterLinkForm(I18nModelForm):
class Meta:
model = EventFooterLink
fields = ('label', 'url')
class BaseEventFooterLinkFormSet(I18nFormSetMixin, forms.BaseInlineFormSet):
def __init__(self, *args, **kwargs):
event = kwargs.pop('event', None)
if event:
kwargs['locales'] = event.settings.get('locales')
super().__init__(*args, **kwargs)
EventFooterLinkFormset = inlineformset_factory(
Event, EventFooterLink,
EventFooterLinkForm,
formset=BaseEventFooterLinkFormSet,
can_order=False, can_delete=True, extra=0
)

View File

@@ -32,6 +32,7 @@
# Unless required by applicable law or agreed to in writing, software distributed under the Apache License 2.0 is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under the License.
import copy
import os
from decimal import Decimal
from urllib.parse import urlencode
@@ -423,9 +424,10 @@ class ItemCreateForm(I18nModelForm):
if self.cleaned_data.get('has_variations'):
if self.cleaned_data.get('copy_from') and self.cleaned_data.get('copy_from').has_variations:
for variation in self.cleaned_data['copy_from'].variations.all():
ItemVariation.objects.create(item=instance, value=variation.value, active=variation.active,
position=variation.position, default_price=variation.default_price,
description=variation.description, original_price=variation.original_price)
v = copy.copy(variation)
v.pk = None
v.item = instance
v.save()
else:
ItemVariation.objects.create(
item=instance, value=__('Standard')

View File

@@ -39,12 +39,13 @@ from django import forms
from django.conf import settings
from django.core.exceptions import ValidationError
from django.db.models import Q
from django.forms import inlineformset_factory
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
from django_scopes.forms import SafeModelMultipleChoiceField
from i18nfield.forms import I18nFormField, I18nTextarea
from i18nfield.forms import I18nFormField, I18nFormSetMixin, I18nTextarea
from phonenumber_field.formfields import PhoneNumberField
from pytz import common_timezones
@@ -60,6 +61,7 @@ from pretix.base.models import (
Customer, Device, EventMetaProperty, Gate, GiftCard, Membership,
MembershipType, Organizer, Team,
)
from pretix.base.models.organizer import OrganizerFooterLink
from pretix.base.settings import PERSON_NAME_SCHEMES, PERSON_NAME_TITLE_GROUPS
from pretix.control.forms import ExtFileField, SplitDateTimeField
from pretix.control.forms.event import (
@@ -682,3 +684,25 @@ class MembershipUpdateForm(forms.ModelForm):
titles=self.instance.customer.organizer.settings.name_scheme_titles,
label=_('Attendee name'),
)
class OrganizerFooterLinkForm(I18nModelForm):
class Meta:
model = OrganizerFooterLink
fields = ('label', 'url')
class BaseOrganizerFooterLinkFormSet(I18nFormSetMixin, forms.BaseInlineFormSet):
def __init__(self, *args, **kwargs):
organizer = kwargs.pop('organizer', None)
if organizer:
kwargs['locales'] = organizer.settings.get('locales')
super().__init__(*args, **kwargs)
OrganizerFooterLinkFormset = inlineformset_factory(
Organizer, OrganizerFooterLink,
OrganizerFooterLinkForm,
formset=BaseOrganizerFooterLinkFormSet,
can_order=False, can_delete=True, extra=0
)

View File

@@ -314,6 +314,7 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs):
'pretix.object.cloned': _('This object has been created by cloning.'),
'pretix.organizer.changed': _('The organizer has been changed.'),
'pretix.organizer.settings': _('The organizer settings have been changed.'),
'pretix.organizer.footerlinks.changed': _('The footer links have been changed.'),
'pretix.giftcards.acceptance.added': _('Gift card acceptance for another organizer has been added.'),
'pretix.giftcards.acceptance.removed': _('Gift card acceptance for another organizer has been removed.'),
'pretix.webhook.created': _('The webhook has been created.'),
@@ -365,7 +366,7 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs):
'pretix.event.order.payment.changed': _('A new payment {local_id} has been started instead of the previous one.'),
'pretix.event.order.email.sent': _('An unidentified type email has been sent.'),
'pretix.event.order.email.error': _('Sending of an email has failed.'),
'pretix.event.order.email.attachments.skipped': _('The email has been sent without attachments since they '
'pretix.event.order.email.attachments.skipped': _('The email has been sent without attached tickets since they '
'would have been too large to be likely to arrive.'),
'pretix.event.order.email.custom_sent': _('A custom email has been sent.'),
'pretix.event.order.position.email.custom_sent': _('A custom email has been sent to an attendee.'),
@@ -468,6 +469,7 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs):
'pretix.event.testmode.deactivated': _('The test mode has been disabled.'),
'pretix.event.added': _('The event has been created.'),
'pretix.event.changed': _('The event details have been changed.'),
'pretix.event.footerlinks.changed': _('The footer links have been changed.'),
'pretix.event.question.option.added': _('An answer option has been added to the question.'),
'pretix.event.question.option.deleted': _('An answer option has been removed from the question.'),
'pretix.event.question.option.changed': _('An answer option has been changed.'),

View File

@@ -72,5 +72,31 @@
</dd>
<dt>{% trans "Authorization Code" %}</dt>
<dd>{{ payment_info.payment_data.authorizationCode }}</dd>
{% elif payment_info.payment_type == "izettle_qrc" %}
<dt>{% trans "Payment provider" %}</dt>
<dd>PayPal QRC via Zettle</dd>
<dt>{% trans "Payment reference" %}</dt>
<dd>{{ payment_info.payment_data.reference }}</dd>
<dt>{% trans "Transaction ID" %}</dt>
<dd>{{ payment_info.payment_data.transactionId }}</dd>
{% elif payment_info.payment_type == "adyen_legacy" %}
<dt>{% trans "Payment provider" %}</dt>
<dd>Adyen POS</dd>
<dt>{% trans "Reference" %}</dt>
<dd>{{ payment_info.payment_data.pspReference }}</dd>
<dt>{% trans "Terminal ID" %}</dt>
<dd>{{ payment_info.payment_data.terminalId }}</dd>
<dt>{% trans "Payment method" %}</dt>
<dd>{{ payment_info.payment_data.paymentMethod }} ({{ payment_info.payment_data.cardType }} / {{ payment_info.payment_data.cardScheme }} / {{ payment_info.payment_data.paymentMethodVariant }})</dd>
<dt>{% trans "Card holder" %}</dt>
<dd>{{ payment_info.payment_data.cardHolderName }}</dd>
<dt>{% trans "Card number" %}</dt>
<dd>{{ payment_info.payment_data.cardBin }} **** {{ payment_info.payment_data.cardSummary }}</dd>
<dt>{% trans "Card expiration" %}</dt>
<dd>{{ payment_info.payment_data.expiryMonth }} / {{ payment_info.payment_data.expiryYear }}</dd>
<dt>{% trans "Card Entry Mode" %}</dt>
<dd>{{ payment_info.payment_data.posEntryMode }}</dd>
<dt>{% trans "Result Code" %}</dt>
<dd>{{ payment_info.payment_data.posResultCode }}</dd>
{% endif %}
</dl>

View File

@@ -80,13 +80,17 @@
{% elif c.forced and c.successful %}
<span class="fa fa-fw fa-warning" data-toggle="tooltip"
title="{% blocktrans trimmed with date=c.datetime|date:'SHORT_DATETIME_FORMAT' %}Additional entry scan: {{ date }}{% endblocktrans %}"></span>
{% elif c.forced and not c.successful %}
<br>
<small class="text-muted">{% trans "Failed in offline mode" %}</small>
{% elif c.force_sent %}
<span class="fa fa-fw fa-cloud-upload" data-toggle="tooltip"
title="{% blocktrans trimmed with date=c.created|date:'SHORT_DATETIME_FORMAT' %}Offline scan. Upload time: {{ date }}{% endblocktrans %}"></span>
{% elif c.auto_checked_in %}
<span class="fa fa-fw fa-magic" data-toggle="tooltip"
title="{% blocktrans trimmed with date=c.datetime|date:'SHORT_DATETIME_FORMAT' %}Automatically checked in: {{ date }}{% endblocktrans %}"></span>
{% endif %}
{% if c.forced and not c.successful %}
<br>
<small class="text-muted">{% trans "Failed in offline mode" %}</small>
{% endif %}
</td>
<td>
{% if c.type == "exit" %}<span class="fa fa-fw fa-sign-out"></span>{% endif %}

View File

@@ -71,13 +71,20 @@
</p>
</div>
{% else %}
<form method="post" action="">
<form method="post" action="{% url "control:event.orders.checkinlists.bulk_action" event=request.event.slug organizer=request.event.organizer.slug list=checkinlist.pk %}" data-asynctask>
<div class="hidden">
{{ filter_form.as_p }}
<input name="returnquery" type="hidden" value="{{ request.META.QUERY_STRING }}">
</div>
{% csrf_token %}
<div class="table-responsive">
<table class="table table-condensed table-hover">
<thead>
<tr>
<th></th>
<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 "Order code" %} <a href="?{% url_replace request 'ordering' '-code'%}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'code'%}"><i class="fa fa-caret-up"></i></a></th>
<th>{% trans "Item" %} <a href="?{% url_replace request 'ordering' '-item'%}"><i class="fa fa-caret-down"></i></a>
@@ -100,6 +107,19 @@
<th>{% trans "Timestamp" %} <a href="?{% url_replace request 'ordering' '-timestamp'%}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'timestamp'%}"><i class="fa fa-caret-up"></i></a></th>
</tr>
{% 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="8">
<label for="__all">
{% trans "Select all results on other pages as well" %}
</label>
</td>
</tr>
{% endif %}
</thead>
<tbody>
{% for e in entries %}
@@ -180,13 +200,16 @@
</div>
{% if "can_change_orders" in request.eventpermset %}
<button type="submit" class="btn btn-primary btn-save">
<span class="fa fa-sign-in" aria-hidden="true"></span>
{% trans "Check-In selected attendees" %}
</button>
<button type="submit" class="btn btn-default btn-save" name="checkout" value="true">
<span class="fa fa-sign-out" aria-hidden="true"></span>
{% trans "Check-Out selected attendees" %}
</button>
<button type="submit" class="btn btn-default btn-save" name="revert" value="true">
{% trans "Revert selected check-ins" %}
<button type="submit" class="btn btn-danger btn-save" name="revert" value="true">
<span class="fa fa-trash" aria-hidden="true"></span>
{% trans "Delete all check-ins of selected attendees" %}
</button>
{% endif %}
</form>

View File

@@ -48,16 +48,14 @@
Make sure to always use the latest version of our scanning apps for these options to work.
{% endblocktrans %}
<br>
<strong>
{% blocktrans trimmed %}
If you make use of these advanced options, we recommend using our Android and Desktop apps.
Custom check-in rules do not work offline with our iOS scanning app.
{% endblocktrans %}
</strong>
{% blocktrans trimmed %}
If you make use of these advanced options, we recommend using our Android and Desktop apps.
{% endblocktrans %}
</div>
{% bootstrap_field form.allow_multiple_entries layout="control" %}
{% bootstrap_field form.allow_entry_after_exit layout="control" %}
{% bootstrap_field form.addon_match layout="control" %}
{% bootstrap_field form.exit_all_at layout="control" %}
{% bootstrap_field form.auto_checkin_sales_channels layout="control" %}
{% if form.gates %}

View File

@@ -69,7 +69,8 @@
</label>
<div class="col-md-9">
<div class="checkbox">
<label><input type="checkbox" checked="checked" disabled="disabled"> {% trans "Ask and require input" %}</label>
<label><input type="checkbox" checked="checked"
disabled="disabled"> {% trans "Ask and require input" %}</label>
</div>
</div>
</div>
@@ -81,7 +82,8 @@
</label>
<div class="col-md-9 static-form-row">
<p>
<a href="{% url "control:event.settings.invoice" event=request.event.slug organizer=request.organizer.slug %}#tab-0-1-open" target="_blank">
<a href="{% url "control:event.settings.invoice" event=request.event.slug organizer=request.organizer.slug %}#tab-0-1-open"
target="_blank">
{% trans "See invoice settings" %}
</a>
</p>
@@ -101,7 +103,8 @@
</label>
<div class="col-md-9 static-form-row">
<p>
<a href="{% url "control:event.items.questions" event=request.event.slug organizer=request.organizer.slug %}" target="_blank">
<a href="{% url "control:event.items.questions" event=request.event.slug organizer=request.organizer.slug %}"
target="_blank">
{% trans "Manage questions" %}
</a>
</p>
@@ -232,10 +235,74 @@
{% bootstrap_field sform.display_net_prices layout="control" %}
{% bootstrap_field sform.show_variations_expanded layout="control" %}
{% bootstrap_field sform.hide_sold_out layout="control" %}
{% url "control:organizer.edit" organizer=request.organizer.slug as org_url %}
{% propagated request.event org_url "meta_noindex" %}
{% bootstrap_field sform.meta_noindex layout="control" %}
{% endpropagated %}
<div class="form-group">
<label class="col-md-3 control-label">
{% trans "Footer links" %}<br>
<span class="optional">{% trans "Optional" %}</span>
</label>
<div class="col-md-9">
<p class="help-block">
{% blocktrans trimmed %}
These links will be shown in the footer of your ticket shop. You could
for example link your terms of service here. Your contact address, imprint, and privacy
policy will be linked automatically (if you configured them), so you do not need to add
them here.
{% endblocktrans %}
</p>
<div class="formset" data-formset data-formset-prefix="{{ footer_links_formset.prefix }}">
{{ footer_links_formset.management_form }}
{% bootstrap_formset_errors footer_links_formset %}
<div data-formset-body>
{% for form in footer_links_formset %}
<div class="row formset-row" data-formset-form>
<div class="sr-only">
{{ form.id }}
{% bootstrap_field form.DELETE form_group_class="" layout="inline" %}
</div>
<div class="col-md-5">
{% bootstrap_form_errors form %}
{% bootstrap_field form.label layout='inline' form_group_class="" %}
</div>
<div class="col-md-5">
{% bootstrap_field form.url layout='inline' form_group_class="" %}
</div>
<div class="col-md-2 text-right flip">
<button type="button" class="btn btn-danger" data-formset-delete-button>
<i class="fa fa-trash"></i></button>
</div>
</div>
{% endfor %}
</div>
<script type="form-template" data-formset-empty-form>
{% escapescript %}
<div class="row formset-row" data-formset-form>
<div class="sr-only">
{{ footer_links_formset.empty_form.id }}
{% bootstrap_field footer_links_formset.empty_form.DELETE form_group_class="" layout="inline" %}
</div>
<div class="col-md-5">
{% bootstrap_field footer_links_formset.empty_form.label layout='inline' form_group_class="" %}
</div>
<div class="col-md-5">
{% bootstrap_field footer_links_formset.empty_form.url layout='inline' form_group_class="" %}
</div>
<div class="col-md-2 text-right flip">
<button type="button" class="btn btn-danger" data-formset-delete-button>
<i class="fa fa-trash"></i></button>
</div>
</div>
{% endescapescript %}
</script>
<p>
<button type="button" class="btn btn-default" data-formset-add>
<i class="fa fa-plus"></i> {% trans "Add link" %}</button>
</p>
</div>
</div>
</div>
{% if sform.frontpage_subevent_ordering %}
{% bootstrap_field sform.frontpage_subevent_ordering layout="control" %}
{% endif %}
@@ -245,6 +312,11 @@
{% if sform.event_list_available_only %}
{% bootstrap_field sform.event_list_available_only layout="control" %}
{% endif %}
{% url "control:organizer.edit" organizer=request.organizer.slug as org_url %}
{% propagated request.event org_url "meta_noindex" %}
{% bootstrap_field sform.meta_noindex layout="control" %}
{% endpropagated %}
</fieldset>
<fieldset>
<legend>{% trans "Cart" %}</legend>
@@ -262,13 +334,15 @@
</div>
<div class="alert alert-info">
{% blocktrans trimmed %}
The waiting list determines availability mainly based on quotas. If you use a seating plan and your
The waiting list determines availability mainly based on quotas. If you use a seating plan and
your
number of available seats is less than the available quota, you might run into situations where
people are sent an email from the waiting list but still are unable to book a seat.
{% endblocktrans %}
<strong>
{% blocktrans trimmed %}
Specifically, this means the waiting list is not safe to use together with the minimum distance
Specifically, this means the waiting list is not safe to use together with the minimum
distance
feature of our seating plan module.
{% endblocktrans %}
</strong>

View File

@@ -10,7 +10,7 @@
<p>{% blocktrans %}You cannot delete the discount <strong>{{ discount }}</strong> because it already has
been used as part of an order.{% endblocktrans %}</p>
<div class="form-group submit-group">
<a href="{% url "control:event.discounts" organizer=request.event.organizer.slug event=request.event.slug %}"
<a href="{% url "control:event.items.discounts" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default btn-cancel">
{% trans "Cancel" %}
</a>

View File

@@ -153,7 +153,7 @@
{% endif %}
</td>
<td>
<span class="fa fa-{{ o.sales_channel_obj.icon }} text-muted"
<span class="fa fa-fw fa-{{ o.sales_channel_obj.icon }} text-muted"
data-toggle="tooltip" title="{% trans o.sales_channel_obj.verbose_name %}"></span>
{{ o.datetime|date:"SHORT_DATETIME_FORMAT" }}
</td>

View File

@@ -50,6 +50,77 @@
{% bootstrap_field sform.event_list_availability layout="control" %}
{% bootstrap_field sform.organizer_link_back layout="control" %}
{% bootstrap_field sform.meta_noindex layout="control" %}
<div class="form-group">
<label class="col-md-3 control-label">
{% trans "Footer links" %}<br>
<span class="optional">{% trans "Optional" %}</span>
</label>
<div class="col-md-9">
<p class="help-block">
{% blocktrans trimmed %}
These links will be shown in the footer of your ticket shop. You could
for example link your terms of service here. Your contact address, imprint, and privacy
policy will be linked automatically (if you configured them), so you do not need to add
them here.
{% endblocktrans %}
</p>
<p class="help-block">
{% blocktrans trimmed %}
The links you configure here will also be shown on all of your events.
{% endblocktrans %}
</p>
<div class="formset" data-formset data-formset-prefix="{{ footer_links_formset.prefix }}">
{{ footer_links_formset.management_form }}
{% bootstrap_formset_errors footer_links_formset %}
<div data-formset-body>
{% for form in footer_links_formset %}
<div class="row formset-row" data-formset-form>
<div class="sr-only">
{{ form.id }}
{% bootstrap_field form.DELETE form_group_class="" layout="inline" %}
</div>
<div class="col-md-5">
{% bootstrap_form_errors form %}
{% bootstrap_field form.label layout='inline' form_group_class="" %}
</div>
<div class="col-md-5">
{% bootstrap_field form.url layout='inline' form_group_class="" %}
</div>
<div class="col-md-2 text-right flip">
<button type="button" class="btn btn-danger" data-formset-delete-button>
<i class="fa fa-trash"></i></button>
</div>
</div>
{% endfor %}
</div>
<script type="form-template" data-formset-empty-form>
{% escapescript %}
<div class="row formset-row" data-formset-form>
<div class="sr-only">
{{ footer_links_formset.empty_form.id }}
{% bootstrap_field footer_links_formset.empty_form.DELETE form_group_class="" layout="inline" %}
</div>
<div class="col-md-5">
{% bootstrap_field footer_links_formset.empty_form.label layout='inline' form_group_class="" %}
</div>
<div class="col-md-5">
{% bootstrap_field footer_links_formset.empty_form.url layout='inline' form_group_class="" %}
</div>
<div class="col-md-2 text-right flip">
<button type="button" class="btn btn-danger" data-formset-delete-button>
<i class="fa fa-trash"></i></button>
</div>
</div>
{% endescapescript %}
</script>
<p>
<button type="button" class="btn btn-default" data-formset-add>
<i class="fa fa-plus"></i> {% trans "Add link" %}</button>
</p>
</div>
</div>
</div>
</fieldset>
<fieldset>
<legend>{% trans "Localization" %}</legend>

View File

@@ -16,6 +16,12 @@
</li>
{% endfor %}
</ul>
<div class="alert-info alert">
{% blocktrans trimmed %}
It is possible that some of the above dates can't be deleted if a plugin has data attached to them.
In that case, they will be disabled instead.
{% endblocktrans %}
</div>
{% endif %}
{% if forbidden %}
<p>{% blocktrans trimmed %}The following dates can't be deleted as they already have orders, but
@@ -30,7 +36,8 @@
</ul>
{% endif %}
<div class="form-group submit-group">
<a href="{% url "control:event.subevents" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default btn-cancel">
<a href="{% url "control:event.subevents" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default btn-cancel">
{% trans "Cancel" %}
</a>
<button type="submit" class="btn btn-danger btn-save" value="delete_confirm" name="action">

View File

@@ -392,6 +392,7 @@ urlpatterns = [
re_path(r'^checkinlists/add$', checkin.CheckinListCreate.as_view(), name='event.orders.checkinlists.add'),
re_path(r'^checkinlists/select2$', typeahead.checkinlist_select2, name='event.orders.checkinlists.select2'),
re_path(r'^checkinlists/(?P<list>\d+)/$', checkin.CheckInListShow.as_view(), name='event.orders.checkinlists.show'),
re_path(r'^checkinlists/(?P<list>\d+)/bulk_action$', checkin.CheckInListBulkActionView.as_view(), name='event.orders.checkinlists.bulk_action'),
re_path(r'^checkinlists/(?P<list>\d+)/change$', checkin.CheckinListUpdate.as_view(),
name='event.orders.checkinlists.edit'),
re_path(r'^checkinlists/(?P<list>\d+)/delete$', checkin.CheckinListDelete.as_view(),

View File

@@ -37,7 +37,7 @@ from django.contrib import messages
from django.db import transaction
from django.db.models import Exists, Max, OuterRef, Prefetch, Subquery
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect
from django.shortcuts import get_object_or_404
from django.urls import reverse
from django.utils.functional import cached_property
from django.utils.timezone import is_aware, make_aware, now
@@ -49,6 +49,7 @@ from pretix.base.channels import get_all_sales_channels
from pretix.base.models import Checkin, Order, OrderPosition
from pretix.base.models.checkin import CheckinList
from pretix.base.signals import checkin_created
from pretix.base.views.tasks import AsyncPostView
from pretix.control.forms.checkin import CheckinListForm
from pretix.control.forms.filter import (
CheckinFilterForm, CheckinListAttendeeFilterForm,
@@ -58,11 +59,13 @@ from pretix.control.views import CreateView, PaginationMixin, UpdateView
from pretix.helpers.models import modelcopy
class CheckInListShow(EventPermissionRequiredMixin, PaginationMixin, ListView):
model = Checkin
context_object_name = 'entries'
template_name = 'pretixcontrol/checkin/index.html'
permission = 'can_view_orders'
class CheckInListQueryMixin:
@cached_property
def request_data(self):
if self.request.method == "POST":
return self.request.POST
return self.request.GET
def get_queryset(self, filter=True):
cqs = Checkin.objects.filter(
@@ -105,16 +108,28 @@ class CheckInListShow(EventPermissionRequiredMixin, PaginationMixin, ListView):
if filter and self.filter_form.is_valid():
qs = self.filter_form.filter_qs(qs)
if 'checkin' in self.request_data and '__ALL' not in self.request_data:
qs = qs.filter(
id__in=self.request_data.getlist('checkin')
)
return qs
@cached_property
def filter_form(self):
return CheckinListAttendeeFilterForm(
data=self.request.GET,
data=self.request_data,
event=self.request.event,
list=self.list
)
class CheckInListShow(EventPermissionRequiredMixin, PaginationMixin, CheckInListQueryMixin, ListView):
model = Checkin
context_object_name = 'entries'
template_name = 'pretixcontrol/checkin/index.html'
permission = 'can_view_orders'
def dispatch(self, request, *args, **kwargs):
self.list = get_object_or_404(self.request.event.checkin_lists.all(), pk=kwargs.get("list"))
return super().dispatch(request, *args, **kwargs)
@@ -153,18 +168,23 @@ class CheckInListShow(EventPermissionRequiredMixin, PaginationMixin, ListView):
e.last_exit_aware = e.last_exit
return ctx
def post(self, request, *args, **kwargs):
if "can_change_orders" not in request.eventpermset:
messages.error(request, _('You do not have permission to perform this action.'))
return redirect(reverse('control:event.orders.checkins', kwargs={
'event': self.request.event.slug,
'organizer': self.request.event.organizer.slug
}) + '?' + request.GET.urlencode())
positions = self.get_queryset(filter=False).filter(
pk__in=request.POST.getlist('checkin')
)
class CheckInListBulkActionView(CheckInListQueryMixin, EventPermissionRequiredMixin, AsyncPostView):
template_name = 'pretixcontrol/organizers/device_bulk_edit.html'
permission = 'can_change_orders'
context_object_name = 'device'
def dispatch(self, request, *args, **kwargs):
self.list = get_object_or_404(self.request.event.checkin_lists.all(), pk=kwargs.get("list"))
return super().dispatch(request, *args, **kwargs)
def get_queryset(self):
return super().get_queryset().prefetch_related(None).order_by()
@transaction.atomic()
def async_post(self, request, *args, **kwargs):
self.list = get_object_or_404(request.event.checkin_lists.all(), pk=kwargs.get("list"))
positions = self.get_queryset()
if request.POST.get('revert') == 'true':
for op in positions:
if op.order.status == Order.STATUS_PAID or (self.list.include_pending and op.order.status == Order.STATUS_PENDING):
@@ -177,12 +197,11 @@ class CheckInListShow(EventPermissionRequiredMixin, PaginationMixin, ListView):
}, user=request.user)
op.order.touch()
messages.success(request, _('The selected check-ins have been reverted.'))
return 'reverted', request.POST.get('returnquery')
else:
t = Checkin.TYPE_EXIT if request.POST.get('checkout') == 'true' else Checkin.TYPE_ENTRY
for op in positions:
if op.order.status == Order.STATUS_PAID or (self.list.include_pending and op.order.status == Order.STATUS_PENDING):
t = Checkin.TYPE_EXIT if request.POST.get('checkout') == 'true' else Checkin.TYPE_ENTRY
lci = op.checkins.filter(list=self.list).first()
if self.list.allow_multiple_entries or t != Checkin.TYPE_ENTRY or (lci and lci.type != Checkin.TYPE_ENTRY):
ci = Checkin.objects.create(position=op, list=self.list, datetime=now(), type=t)
@@ -206,14 +225,22 @@ class CheckInListShow(EventPermissionRequiredMixin, PaginationMixin, ListView):
'web': True
}, user=request.user)
checkin_created.send(op.order.event, checkin=ci)
return 'checked-out' if t == Checkin.TYPE_EXIT else 'checked-in', request.POST.get('returnquery')
messages.success(request, _('The selected tickets have been marked as checked in.'))
def get_success_message(self, value):
if value[0] == 'reverted':
return _('The selected check-ins have been reverted.')
elif value[0] == 'checked-out':
return _('The selected tickets have been marked as checked out.')
else:
return _('The selected tickets have been marked as checked in.')
return redirect(reverse('control:event.orders.checkinlists.show', kwargs={
def get_success_url(self, value):
return reverse('control:event.orders.checkinlists.show', kwargs={
'event': self.request.event.slug,
'organizer': self.request.event.organizer.slug,
'list': self.list.pk
}) + '?' + request.GET.urlencode())
}) + ('?' + value[1] if value[1] else '')
class CheckinListList(EventPermissionRequiredMixin, PaginationMixin, ListView):
@@ -402,9 +429,9 @@ class CheckinListView(EventPermissionRequiredMixin, PaginationMixin, ListView):
qs = Checkin.all.filter(
list__event=self.request.event,
).select_related(
'position', 'position', 'position__item', 'position__variation', 'position__subevent'
'position', 'position__order', 'position__item', 'position__variation', 'position__subevent'
).prefetch_related(
'list', 'gate'
'list', 'gate', 'device'
)
if self.filter_form.is_valid():
qs = self.filter_form.filter_qs(qs)

View File

@@ -74,9 +74,9 @@ from pretix.base.signals import register_ticket_outputs
from pretix.base.templatetags.rich_text import markdown_compile_email
from pretix.control.forms.event import (
CancelSettingsForm, CommentForm, ConfirmTextFormset, EventDeleteForm,
EventMetaValueForm, EventSettingsForm, EventUpdateForm,
InvoiceSettingsForm, ItemMetaPropertyForm, MailSettingsForm,
PaymentSettingsForm, ProviderForm, QuickSetupForm,
EventFooterLinkFormset, EventMetaValueForm, EventSettingsForm,
EventUpdateForm, InvoiceSettingsForm, ItemMetaPropertyForm,
MailSettingsForm, PaymentSettingsForm, ProviderForm, QuickSetupForm,
QuickSetupProductFormSet, TaxRuleForm, TaxRuleLineFormSet,
TicketSettingsForm, WidgetCodeForm,
)
@@ -186,6 +186,7 @@ class EventUpdate(DecoupleMixin, EventSettingsViewMixin, EventPermissionRequired
context['meta_forms'] = self.meta_forms
context['item_meta_property_formset'] = self.item_meta_property_formset
context['confirm_texts_formset'] = self.confirm_texts_formset
context['footer_links_formset'] = self.footer_links_formset
return context
@transaction.atomic
@@ -195,6 +196,7 @@ class EventUpdate(DecoupleMixin, EventSettingsViewMixin, EventPermissionRequired
self.save_meta()
self.save_item_meta_property_formset(self.object)
self.save_confirm_texts_formset(self.object)
self.save_footer_links_formset(self.object)
change_css = False
if self.sform.has_changed() or self.confirm_texts_formset.has_changed():
@@ -204,6 +206,10 @@ class EventUpdate(DecoupleMixin, EventSettingsViewMixin, EventPermissionRequired
self.request.event.log_action('pretix.event.settings', user=self.request.user, data=data)
if any(p in self.sform.changed_data for p in SETTINGS_AFFECTING_CSS):
change_css = True
if self.footer_links_formset.has_changed():
self.request.event.log_action('pretix.event.footerlinks.changed', user=self.request.user, data={
'data': self.footer_links_formset.cleaned_data
})
if form.has_changed():
self.request.event.log_action('pretix.event.changed', user=self.request.user, data={
k: (form.cleaned_data.get(k).name
@@ -238,7 +244,8 @@ class EventUpdate(DecoupleMixin, EventSettingsViewMixin, EventPermissionRequired
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid() and self.sform.is_valid() and all([f.is_valid() for f in self.meta_forms]) and \
self.item_meta_property_formset.is_valid() and self.confirm_texts_formset.is_valid():
self.item_meta_property_formset.is_valid() and self.confirm_texts_formset.is_valid() and \
self.footer_links_formset.is_valid():
# reset timezone
zone = timezone(self.sform.cleaned_data['timezone'])
event = form.instance
@@ -292,10 +299,18 @@ class EventUpdate(DecoupleMixin, EventSettingsViewMixin, EventPermissionRequired
def save_confirm_texts_formset(self, obj):
obj.settings.confirm_texts = LazyI18nStringList(
form_data['text'].data
for form_data in sorted(self.confirm_texts_formset.cleaned_data, key=operator.itemgetter("ORDER"))
if not form_data.get("DELETE", False)
for form_data in sorted((d for d in self.confirm_texts_formset.cleaned_data if d), key=operator.itemgetter("ORDER"))
if form_data and not form_data.get("DELETE", False)
)
@cached_property
def footer_links_formset(self):
return EventFooterLinkFormset(self.request.POST if self.request.method == "POST" else None, event=self.object,
prefix="footer-links", instance=self.object)
def save_footer_links_formset(self, obj):
self.footer_links_formset.save()
class EventPlugins(EventSettingsViewMixin, EventPermissionRequiredMixin, TemplateView, SingleObjectMixin):
model = Event

View File

@@ -92,8 +92,8 @@ from pretix.control.forms.organizer import (
CustomerCreateForm, CustomerUpdateForm, DeviceBulkEditForm, DeviceForm,
EventMetaPropertyForm, GateForm, GiftCardCreateForm, GiftCardUpdateForm,
MailSettingsForm, MembershipTypeForm, MembershipUpdateForm,
OrganizerDeleteForm, OrganizerForm, OrganizerSettingsForm,
OrganizerUpdateForm, TeamForm, WebHookForm,
OrganizerDeleteForm, OrganizerFooterLinkFormset, OrganizerForm,
OrganizerSettingsForm, OrganizerUpdateForm, TeamForm, WebHookForm,
)
from pretix.control.logdisplay import OVERVIEW_BANLIST
from pretix.control.permissions import (
@@ -416,11 +416,13 @@ class OrganizerUpdate(OrganizerPermissionRequiredMixin, UpdateView):
def get_context_data(self, *args, **kwargs) -> dict:
context = super().get_context_data(*args, **kwargs)
context['sform'] = self.sform
context['footer_links_formset'] = self.footer_links_formset
return context
@transaction.atomic
def form_valid(self, form):
self.sform.save()
self.save_footer_links_formset(self.object)
change_css = False
if self.sform.has_changed():
self.request.organizer.log_action(
@@ -435,6 +437,10 @@ class OrganizerUpdate(OrganizerPermissionRequiredMixin, UpdateView):
)
if any(p in self.sform.changed_data for p in SETTINGS_AFFECTING_CSS):
change_css = True
if self.footer_links_formset.has_changed():
self.request.organizer.log_action('pretix.organizer.footerlinks.changed', user=self.request.user, data={
'data': self.footer_links_formset.cleaned_data
})
if form.has_changed():
self.request.organizer.log_action(
'pretix.organizer.changed',
@@ -466,11 +472,19 @@ class OrganizerUpdate(OrganizerPermissionRequiredMixin, UpdateView):
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
if form.is_valid() and self.sform.is_valid():
if form.is_valid() and self.sform.is_valid() and self.footer_links_formset.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
@cached_property
def footer_links_formset(self):
return OrganizerFooterLinkFormset(self.request.POST if self.request.method == "POST" else None, organizer=self.object,
prefix="footer-links", instance=self.object)
def save_footer_links_formset(self, obj):
self.footer_links_formset.save()
class OrganizerCreate(CreateView):
model = Organizer
@@ -628,15 +642,26 @@ class TeamDeleteView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin,
def delete(self, request, *args, **kwargs):
success_url = self.get_success_url()
self.object = self.get_object()
if self.is_allowed():
self.object.log_action('pretix.team.deleted', user=self.request.user)
self.object.delete()
messages.success(request, _('The selected team has been deleted.'))
return redirect(success_url)
else:
if not self.is_allowed():
messages.error(request, _('The selected team cannot be deleted.'))
return redirect(success_url)
try:
self.object.log_action('pretix.team.deleted', user=self.request.user)
self.object.delete()
except ProtectedError:
messages.error(
self.request,
_(
'The team could not be deleted as some constraints (e.g. data created by '
'plug-ins) do not allow it.'
)
)
return redirect(success_url)
messages.success(request, _('The selected team has been deleted.'))
return redirect(success_url)
class TeamMemberView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, DetailView):
template_name = 'pretixcontrol/organizers/team_members.html'
@@ -830,7 +855,7 @@ class DeviceQueryMixin:
@cached_property
def filter_form(self):
return DeviceFilterForm(data=self.request.GET, request=self.request)
return DeviceFilterForm(data=self.request_data, request=self.request)
def get_queryset(self):
qs = self.request.organizer.devices.prefetch_related(

View File

@@ -41,7 +41,7 @@ from django.contrib import messages
from django.core.exceptions import ValidationError
from django.core.files import File
from django.db import connections, transaction
from django.db.models import Count, F, Prefetch
from django.db.models import Count, F, Prefetch, ProtectedError
from django.db.models.functions import Coalesce, TruncDate, TruncTime
from django.forms import inlineformset_factory
from django.http import Http404, HttpResponse, HttpResponseRedirect
@@ -639,12 +639,14 @@ class SubEventBulkAction(SubEventQueryMixin, EventPermissionRequiredMixin, View)
})
elif request.POST.get('action') == 'delete_confirm':
for obj in self.get_queryset():
if obj.allow_delete():
try:
if not obj.allow_delete():
raise ProtectedError('only deactivate', [obj])
CartPosition.objects.filter(addon_to__subevent=obj).delete()
obj.cartposition_set.all().delete()
obj.log_action('pretix.subevent.deleted', user=self.request.user)
obj.delete()
else:
except ProtectedError:
obj.log_action(
'pretix.subevent.changed', user=self.request.user, data={
'active': False

View File

@@ -0,0 +1,36 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from django.template.loaders.app_directories import Loader
from django.template.utils import get_app_template_dirs
class AppLoader(Loader):
def get_dirs(self):
ds = get_app_template_dirs('templates')
ignore_patterns = {
# Ignore templates of plugins we don't actually use as they cause trouble during
# static file compression
'/django_filters/',
'/django_otp/',
}
return [d for d in ds if not any(p in str(d) for p in ignore_patterns)]

View File

@@ -25,7 +25,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 import Image, ImageOps, ImageSequence
from PIL.Image import Resampling
from pretix.helpers.models import Thumbnail
@@ -171,12 +171,23 @@ def create_thumbnail(sourcename, size):
except:
raise ThumbnailError('Could not load image')
image = resize_image(image, size)
frames = [resize_image(frame, size) for frame in ImageSequence.Iterator(image)]
image_out = frames[0]
save_kwargs = {}
if source.name.lower().endswith('.jpg') or source.name.lower().endswith('.jpeg'):
# Yields better file sizes for photos
target_ext = 'jpeg'
quality = 95
elif source.name.lower().endswith('.gif') or source.name.lower().endswith('.png'):
target_ext = source.name.lower()[-3:]
quality = None
image_out.info = image.info
save_kwargs = {
'append_images': frames[1:],
'loop': image.info.get('loop', 0),
'save_all': True,
}
else:
target_ext = 'png'
quality = None
@@ -184,11 +195,11 @@ def create_thumbnail(sourcename, size):
checksum = hashlib.md5(image.tobytes()).hexdigest()
name = checksum + '.' + size.replace('^', 'c') + '.' + target_ext
buffer = BytesIO()
if image.mode == "P" and source.name.lower().endswith('.png'):
image = image.convert('RGBA')
if image.mode not in ("1", "L", "RGB", "RGBA"):
image = image.convert('RGB')
image.save(fp=buffer, format=target_ext.upper(), quality=quality)
if image_out.mode == "P" and source.name.lower().endswith('.png'):
image_out = image_out.convert('RGBA')
if image_out.mode not in ("1", "L", "RGB", "RGBA"):
image_out = image_out.convert('RGB')
image_out.save(fp=buffer, format=target_ext.upper(), quality=quality, **save_kwargs)
imgfile = ContentFile(buffer.getvalue())
t = Thumbnail.objects.create(source=sourcename, size=size)

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-28 16:44+0000\n"
"POT-Creation-Date: 2022-07-01 07:50+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/"
@@ -30,120 +30,120 @@ msgstr "طلبات مكتملة"
msgid "Comment:"
msgstr "تعليق:"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:34
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:35
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:36
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
msgid "Apple Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:37
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
msgid "Itaú"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:38
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
msgid "PayPal Credit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:39
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:40
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:41
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:42
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:43
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:44
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
msgid "giropay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:45
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:46
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
#, fuzzy
#| msgid "Yes"
msgid "eps"
msgstr "نعم"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:47
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:48
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:49
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:50
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:51
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:52
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:53
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:54
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:55
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:56
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:57
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:58
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:152
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:157
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Continue"
msgstr "المتابعة"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:205
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:215
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
msgid "Confirming your payment …"
msgstr "جاري تأكيد الدفع الخاص بك …"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:230
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:240
msgid "Payment method unavailable"
msgstr ""
@@ -315,7 +315,7 @@ msgid "close"
msgstr "إغلاق"
#: pretix/static/pretixbase/js/asynctask.js:43
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:120
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -324,12 +324,12 @@ msgstr ""
"اخترت."
#: pretix/static/pretixbase/js/asynctask.js:48
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixbase/js/asynctask.js:125
msgid "Your request has been queued on the server and will soon be processed."
msgstr "طلبك قيد الانتظار وستتم معالجته قريبا."
#: pretix/static/pretixbase/js/asynctask.js:54
#: pretix/static/pretixbase/js/asynctask.js:130
#: pretix/static/pretixbase/js/asynctask.js:131
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -338,36 +338,36 @@ msgstr ""
"وصل طلبك للخادم وننتظر تنفيذه. إذا استغرق الأمر أكثر من دقيقتين تواصل معنا "
"أو عاود المحاولة مجددا."
#: pretix/static/pretixbase/js/asynctask.js:89
#: pretix/static/pretixbase/js/asynctask.js:175
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixbase/js/asynctask.js:90
#: pretix/static/pretixbase/js/asynctask.js:178
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "حدث خطأ من نوع {code}."
#: pretix/static/pretixbase/js/asynctask.js:92
#: pretix/static/pretixbase/js/asynctask.js:93
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr "لم نتمكن من الاتصال بالخادم، لكن سنواصل المحاولة، رمز آخر خطأ: {code}"
#: pretix/static/pretixbase/js/asynctask.js:144
#: pretix/static/pretixbase/js/asynctask.js:145
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "استغرقت الطلب فترة طويلة، الرجاء المحاولة مرة أخرى."
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
"لا يمكننا الوصول إلى الخادم حاليا، حاول مرة أخرى من فضلك. رمز الخطأ : {code}"
#: pretix/static/pretixbase/js/asynctask.js:205
#: pretix/static/pretixbase/js/asynctask.js:208
msgid "We are processing your request …"
msgstr "جاري معالجة طلبك …"
#: pretix/static/pretixbase/js/asynctask.js:213
#: pretix/static/pretixbase/js/asynctask.js:216
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -376,7 +376,7 @@ msgstr ""
"نعمل الآن على ارسال طلبك إلى الخادم، إذا أستغرقت العملية أكثر من دقيقة، يرجى "
"التحقق من اتصالك بالإنترنت ثم أعد تحميل الصفحة مرة أخرى."
#: pretix/static/pretixbase/js/asynctask.js:270
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr "أغلق الرسالة"
@@ -482,48 +482,48 @@ msgstr "الدقائق"
msgid "Check-in QR"
msgstr "QR الدخول"
#: pretix/static/pretixcontrol/js/ui/editor.js:376
#: pretix/static/pretixcontrol/js/ui/editor.js:382
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "لا يمكن تحميل ملف PDF الخلفية للأسباب التالية:"
#: pretix/static/pretixcontrol/js/ui/editor.js:624
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Group of objects"
msgstr "مجموعة من العناصر"
#: pretix/static/pretixcontrol/js/ui/editor.js:630
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Text object"
msgstr "عنصر نص"
#: pretix/static/pretixcontrol/js/ui/editor.js:632
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Barcode area"
msgstr "منطقة باركود"
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#: pretix/static/pretixcontrol/js/ui/editor.js:640
msgid "Image area"
msgstr "منطقة صورة"
#: pretix/static/pretixcontrol/js/ui/editor.js:636
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Powered by pretix"
msgstr "مدعوم من pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:638
#: pretix/static/pretixcontrol/js/ui/editor.js:644
msgid "Object"
msgstr "عنصر"
#: pretix/static/pretixcontrol/js/ui/editor.js:642
#: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Ticket design"
msgstr "تصميم التذكرة"
#: pretix/static/pretixcontrol/js/ui/editor.js:932
#: pretix/static/pretixcontrol/js/ui/editor.js:938
msgid "Saving failed."
msgstr "فشلت عملية الحفظ."
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
#: pretix/static/pretixcontrol/js/ui/editor.js:988
#: pretix/static/pretixcontrol/js/ui/editor.js:1027
msgid "Error while uploading your PDF file, please try again."
msgstr "حصل خطأ أثناء رفع ملف PDF الخاص بك، يرجى المحاولة مرة أخرى."
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "هل تريد أن تغادر المحرر دون حفظ التعديلات؟"
@@ -651,20 +651,20 @@ msgstr "ستسترد %(currency)%(amount)"
msgid "Please enter the amount the organizer can keep."
msgstr "الرجاء إدخال المبلغ الذي يمكن للمنظم الاحتفاظ به."
#: pretix/static/pretixpresale/js/ui/main.js:364
#: pretix/static/pretixpresale/js/ui/main.js:377
msgid "Please enter a quantity for one of the ticket types."
msgstr "الرجاء إدخال عدد لأحد أنواع التذاكر."
#: pretix/static/pretixpresale/js/ui/main.js:400
#: pretix/static/pretixpresale/js/ui/main.js:413
msgid "required"
msgstr "مطلوب"
#: pretix/static/pretixpresale/js/ui/main.js:503
#: pretix/static/pretixpresale/js/ui/main.js:522
#: pretix/static/pretixpresale/js/ui/main.js:516
#: pretix/static/pretixpresale/js/ui/main.js:535
msgid "Time zone:"
msgstr "المنطقة الزمنية:"
#: pretix/static/pretixpresale/js/ui/main.js:513
#: pretix/static/pretixpresale/js/ui/main.js:526
msgid "Your local time:"
msgstr "التوقيت المحلي:"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-28 16:44+0000\n"
"POT-Creation-Date: 2022-07-01 07:50+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-"
@@ -29,118 +29,118 @@ msgstr ""
msgid "Comment:"
msgstr "Comentari:"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:34
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:35
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:36
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
msgid "Apple Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:37
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
msgid "Itaú"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:38
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
msgid "PayPal Credit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:39
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:40
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:41
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:42
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:43
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:44
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
msgid "giropay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:45
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:46
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
msgid "eps"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:47
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:48
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:49
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:50
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:51
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:52
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:53
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:54
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:55
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:56
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:57
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:58
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:152
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:157
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Continue"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:205
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:215
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
msgid "Confirming your payment …"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:230
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:240
msgid "Payment method unavailable"
msgstr ""
@@ -305,61 +305,61 @@ msgid "close"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:43
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:120
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:48
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixbase/js/asynctask.js:125
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:54
#: pretix/static/pretixbase/js/asynctask.js:130
#: pretix/static/pretixbase/js/asynctask.js:131
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:89
#: pretix/static/pretixbase/js/asynctask.js:175
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixbase/js/asynctask.js:90
#: pretix/static/pretixbase/js/asynctask.js:178
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:92
#: pretix/static/pretixbase/js/asynctask.js:93
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:144
#: pretix/static/pretixbase/js/asynctask.js:145
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:205
#: pretix/static/pretixbase/js/asynctask.js:208
msgid "We are processing your request …"
msgstr "Estem processant la vostra sol·licitud …"
#: pretix/static/pretixbase/js/asynctask.js:213
#: pretix/static/pretixbase/js/asynctask.js:216
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:270
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr ""
@@ -465,48 +465,48 @@ msgstr ""
msgid "Check-in QR"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:376
#: pretix/static/pretixcontrol/js/ui/editor.js:382
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:624
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:630
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:632
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#: pretix/static/pretixcontrol/js/ui/editor.js:640
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:636
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:638
#: pretix/static/pretixcontrol/js/ui/editor.js:644
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:642
#: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Ticket design"
msgstr "Disseny del tiquet"
#: pretix/static/pretixcontrol/js/ui/editor.js:932
#: pretix/static/pretixcontrol/js/ui/editor.js:938
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
#: pretix/static/pretixcontrol/js/ui/editor.js:988
#: pretix/static/pretixcontrol/js/ui/editor.js:1027
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
@@ -624,22 +624,22 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:364
#: pretix/static/pretixpresale/js/ui/main.js:377
msgid "Please enter a quantity for one of the ticket types."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:400
#: pretix/static/pretixpresale/js/ui/main.js:413
#, fuzzy
#| msgid "Cart expired"
msgid "required"
msgstr "Cistella expirada"
#: pretix/static/pretixpresale/js/ui/main.js:503
#: pretix/static/pretixpresale/js/ui/main.js:522
#: pretix/static/pretixpresale/js/ui/main.js:516
#: pretix/static/pretixpresale/js/ui/main.js:535
msgid "Time zone:"
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:513
#: pretix/static/pretixpresale/js/ui/main.js:526
msgid "Your local time:"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-28 16:44+0000\n"
"POT-Creation-Date: 2022-07-01 07:50+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/"
@@ -29,120 +29,120 @@ msgstr "Označeno jako zaplacené"
msgid "Comment:"
msgstr "Komentář:"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:34
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:35
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:36
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
msgid "Apple Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:37
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
msgid "Itaú"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:38
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
msgid "PayPal Credit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:39
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:40
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:41
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:42
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:43
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:44
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
msgid "giropay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:45
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:46
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
#, fuzzy
#| msgid "Yes"
msgid "eps"
msgstr "Ano"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:47
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:48
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:49
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:50
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:51
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:52
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:53
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:54
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:55
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:56
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:57
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:58
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:152
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:157
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Continue"
msgstr "Pokračovat"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:205
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:215
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
msgid "Confirming your payment …"
msgstr "Potvrzuji vaši platbu …"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:230
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:240
msgid "Payment method unavailable"
msgstr ""
@@ -307,7 +307,7 @@ msgid "close"
msgstr "zavřít"
#: pretix/static/pretixbase/js/asynctask.js:43
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:120
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -316,12 +316,12 @@ msgstr ""
"to může trvat několik minut."
#: pretix/static/pretixbase/js/asynctask.js:48
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixbase/js/asynctask.js:125
msgid "Your request has been queued on the server and will soon be processed."
msgstr "Váš požadavek byl vložem do fronty serveru a brzy bude zpracován."
#: pretix/static/pretixbase/js/asynctask.js:54
#: pretix/static/pretixbase/js/asynctask.js:130
#: pretix/static/pretixbase/js/asynctask.js:131
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -331,14 +331,14 @@ msgstr ""
"Pokud to trvá více jak dvě minuty, prosím kontaktuje nás nebo se vraťte do "
"vašeho prohlížeče a zkuste to znovu."
#: pretix/static/pretixbase/js/asynctask.js:89
#: pretix/static/pretixbase/js/asynctask.js:175
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixbase/js/asynctask.js:90
#: pretix/static/pretixbase/js/asynctask.js:178
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Vyskytla se chyba {code}."
#: pretix/static/pretixbase/js/asynctask.js:92
#: pretix/static/pretixbase/js/asynctask.js:93
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -346,12 +346,12 @@ msgstr ""
"Momentálně nemůžeme kontaktovat server, ale stále se o to pokoušíme. "
"Poslední chybový kód: {code}"
#: pretix/static/pretixbase/js/asynctask.js:144
#: pretix/static/pretixbase/js/asynctask.js:145
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Zpracování požadavku trvá příliš dlouho. Prosím zkuste to znovu."
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -359,11 +359,11 @@ msgstr ""
"Momentálně nemůžeme kontaktovat server. Prosím zkuste to znovu. Chybový kód: "
"{code}"
#: pretix/static/pretixbase/js/asynctask.js:205
#: pretix/static/pretixbase/js/asynctask.js:208
msgid "We are processing your request …"
msgstr "Zpracováváme váš požadavek …"
#: pretix/static/pretixbase/js/asynctask.js:213
#: pretix/static/pretixbase/js/asynctask.js:216
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -373,7 +373,7 @@ msgstr ""
"prosím zkontrolujte své internetové připojení a znovu načtěte stránku a "
"zkuste to znovu."
#: pretix/static/pretixbase/js/asynctask.js:270
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr "Zavřít zprávu"
@@ -479,48 +479,48 @@ msgstr "minuty"
msgid "Check-in QR"
msgstr "Check-in QR kód"
#: pretix/static/pretixcontrol/js/ui/editor.js:376
#: pretix/static/pretixcontrol/js/ui/editor.js:382
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:624
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Group of objects"
msgstr "Skupina objektů"
#: pretix/static/pretixcontrol/js/ui/editor.js:630
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Text object"
msgstr "Textový objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:632
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Barcode area"
msgstr "Oblast s QR kódem"
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#: pretix/static/pretixcontrol/js/ui/editor.js:640
msgid "Image area"
msgstr "Oblast obrazu"
#: pretix/static/pretixcontrol/js/ui/editor.js:636
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Powered by pretix"
msgstr "Poháněno společností pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:638
#: pretix/static/pretixcontrol/js/ui/editor.js:644
msgid "Object"
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:642
#: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Ticket design"
msgstr "Design vstupenky"
#: pretix/static/pretixcontrol/js/ui/editor.js:932
#: pretix/static/pretixcontrol/js/ui/editor.js:938
msgid "Saving failed."
msgstr "Uložení se nepodařilo."
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
#: pretix/static/pretixcontrol/js/ui/editor.js:988
#: pretix/static/pretixcontrol/js/ui/editor.js:1027
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:1006
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Opravdu chcete opustit editor bez uložení změn?"
@@ -644,20 +644,20 @@ msgstr "Dostanete %(currency)s %(amount)s zpět"
msgid "Please enter the amount the organizer can keep."
msgstr "Zadejte částku, kterou si organizátor může ponechat."
#: pretix/static/pretixpresale/js/ui/main.js:364
#: pretix/static/pretixpresale/js/ui/main.js:377
msgid "Please enter a quantity for one of the ticket types."
msgstr "Zadejte prosím množství pro jeden z typů vstupenek."
#: pretix/static/pretixpresale/js/ui/main.js:400
#: pretix/static/pretixpresale/js/ui/main.js:413
msgid "required"
msgstr "povinný"
#: pretix/static/pretixpresale/js/ui/main.js:503
#: pretix/static/pretixpresale/js/ui/main.js:522
#: pretix/static/pretixpresale/js/ui/main.js:516
#: pretix/static/pretixpresale/js/ui/main.js:535
msgid "Time zone:"
msgstr "Časové pásmo:"
#: pretix/static/pretixpresale/js/ui/main.js:513
#: pretix/static/pretixpresale/js/ui/main.js:526
msgid "Your local time:"
msgstr "Místní čas:"

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-28 16:44+0000\n"
"POT-Creation-Date: 2022-07-01 07:50+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/"
@@ -28,109 +28,109 @@ msgstr "Markeret som betalt"
msgid "Comment:"
msgstr "Kommentar:"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:34
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:35
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:36
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
msgid "Apple Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:37
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
msgid "Itaú"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:38
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
msgid "PayPal Credit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:39
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:40
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:41
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:42
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:43
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:44
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
msgid "giropay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:45
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:46
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
#, fuzzy
#| msgid "Yes"
msgid "eps"
msgstr "Ja"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:47
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:48
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:49
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:50
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:51
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:52
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:53
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:54
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:55
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:56
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:57
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:58
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:152
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:157
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
#, fuzzy
#| msgctxt "widget"
@@ -138,13 +138,13 @@ msgstr ""
msgid "Continue"
msgstr "Fortsæt"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:205
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:215
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
msgid "Confirming your payment …"
msgstr "Bekræfter din betaling …"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:230
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:240
msgid "Payment method unavailable"
msgstr ""
@@ -322,7 +322,7 @@ msgid "close"
msgstr "Luk"
#: pretix/static/pretixbase/js/asynctask.js:43
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:120
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
@@ -335,7 +335,7 @@ msgstr ""
"der gå op til et par minutter."
#: pretix/static/pretixbase/js/asynctask.js:48
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixbase/js/asynctask.js:125
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
@@ -346,7 +346,7 @@ msgstr ""
"der gå op til et par minutter."
#: pretix/static/pretixbase/js/asynctask.js:54
#: pretix/static/pretixbase/js/asynctask.js:130
#: pretix/static/pretixbase/js/asynctask.js:131
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -355,14 +355,14 @@ msgstr ""
"Din forespørgsel er under behandling. Hvis der går mere end to minutter, så "
"kontakt os eller gå tilbage og prøv igen."
#: pretix/static/pretixbase/js/asynctask.js:89
#: pretix/static/pretixbase/js/asynctask.js:175
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixbase/js/asynctask.js:90
#: pretix/static/pretixbase/js/asynctask.js:178
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Der er sket en fejl ({code})."
#: pretix/static/pretixbase/js/asynctask.js:92
#: pretix/static/pretixbase/js/asynctask.js:93
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -370,14 +370,14 @@ msgstr ""
"Vi kan ikke komme i kontakt med serveren, men prøver igen. Seneste fejlkode: "
"{code}"
#: pretix/static/pretixbase/js/asynctask.js:144
#: pretix/static/pretixbase/js/asynctask.js:145
#: pretix/static/pretixcontrol/js/ui/mail.js:21
#, fuzzy
#| msgid "The request took to long. Please try again."
msgid "The request took too long. Please try again."
msgstr "Forespørgselen tog for lang tid. Prøv venligst igen."
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -385,11 +385,11 @@ msgstr ""
"Vi kan ikke komme i kontakt med serveren. Prøv venligst igen. Fejlkode: "
"{code}"
#: pretix/static/pretixbase/js/asynctask.js:205
#: pretix/static/pretixbase/js/asynctask.js:208
msgid "We are processing your request …"
msgstr "Vi behandler din bestilling …"
#: pretix/static/pretixbase/js/asynctask.js:213
#: pretix/static/pretixbase/js/asynctask.js:216
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -398,7 +398,7 @@ msgstr ""
"Din forespørgsel bliver sendt til serveren. Hvis det tager mere end et "
"minut, så tjek din internetforbindelse, genindlæs siden og prøv igen."
#: pretix/static/pretixbase/js/asynctask.js:270
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr "Luk besked"
@@ -507,50 +507,50 @@ msgstr ""
msgid "Check-in QR"
msgstr "Check-in QR"
#: pretix/static/pretixcontrol/js/ui/editor.js:376
#: pretix/static/pretixcontrol/js/ui/editor.js:382
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:624
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Group of objects"
msgstr "Gruppe af objekter"
#: pretix/static/pretixcontrol/js/ui/editor.js:630
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Text object"
msgstr "Tekstobjekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:632
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Barcode area"
msgstr "QR-kode-område"
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#: pretix/static/pretixcontrol/js/ui/editor.js:640
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "QR-kode-område"
#: pretix/static/pretixcontrol/js/ui/editor.js:636
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Powered by pretix"
msgstr "Drevet af pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:638
#: pretix/static/pretixcontrol/js/ui/editor.js:644
msgid "Object"
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:642
#: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Ticket design"
msgstr "Billetdesign"
#: pretix/static/pretixcontrol/js/ui/editor.js:932
#: pretix/static/pretixcontrol/js/ui/editor.js:938
msgid "Saving failed."
msgstr "Gem fejlede."
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
#: pretix/static/pretixcontrol/js/ui/editor.js:988
#: pretix/static/pretixcontrol/js/ui/editor.js:1027
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:1006
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
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?"
@@ -679,22 +679,22 @@ msgstr "fra %(currency)s %(price)s"
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:364
#: pretix/static/pretixpresale/js/ui/main.js:377
msgid "Please enter a quantity for one of the ticket types."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:400
#: pretix/static/pretixpresale/js/ui/main.js:413
#, fuzzy
#| msgid "Cart expired"
msgid "required"
msgstr "Kurv udløbet"
#: pretix/static/pretixpresale/js/ui/main.js:503
#: pretix/static/pretixpresale/js/ui/main.js:522
#: pretix/static/pretixpresale/js/ui/main.js:516
#: pretix/static/pretixpresale/js/ui/main.js:535
msgid "Time zone:"
msgstr "Tidszone:"
#: pretix/static/pretixpresale/js/ui/main.js:513
#: pretix/static/pretixpresale/js/ui/main.js:526
msgid "Your local time:"
msgstr "Din lokaltid:"
@@ -1018,8 +1018,8 @@ msgstr "December"
#~ "<a href=\"https://pretix.eu\" target=\"_blank\" rel=\"noopener\">event "
#~ "ticketing powered by pretix</a>"
#~ msgstr ""
#~ "<a href=\"https://pretix.eu\" target=\"_blank\" rel=\"noopener"
#~ "\">billetsystem drevet af pretix</a>"
#~ "<a href=\"https://pretix.eu\" target=\"_blank\" "
#~ "rel=\"noopener\">billetsystem drevet af pretix</a>"
#~ msgid ""
#~ "Your request has been queued on the server and will now be processed. If "

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-28 16:44+0000\n"
"POT-Creation-Date: 2022-07-01 07:50+0000\n"
"PO-Revision-Date: 2022-04-28 18:04+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -29,118 +29,118 @@ msgstr "Als bezahlt markiert"
msgid "Comment:"
msgstr "Kommentar:"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:34
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal"
msgstr "PayPal"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:35
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo"
msgstr "Venmo"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:36
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
msgid "Apple Pay"
msgstr "Apple Pay"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:37
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
msgid "Itaú"
msgstr "Itaú"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:38
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
msgid "PayPal Credit"
msgstr "PayPal Kredit"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:39
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr "Kreditkarte"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:40
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr "PayPal Später Zahlen"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:41
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
msgstr "iDEAL"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:42
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr "SEPA-Lastschrift"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:43
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr "Bancontact"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:44
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
msgid "giropay"
msgstr "giropay"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:45
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
msgid "SOFORT"
msgstr "SOFORT"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:46
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
msgid "eps"
msgstr "eps"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:47
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr "MyBank"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:48
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
msgstr "Przelewy24"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:49
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr "Verkkopankki"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:50
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr "PayU"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:51
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr "BLIK"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:52
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr "Trustly"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:53
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr "Zimpler"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:54
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr "Maxima"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:55
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr "OXXO"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:56
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr "Boleto"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:57
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
msgstr "WeChat Pay"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:58
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr "Mercado Pago"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:152
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:157
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Continue"
msgstr "Fortfahren"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:205
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:215
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
msgid "Confirming your payment …"
msgstr "Zahlung wird bestätigt …"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:230
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:240
msgid "Payment method unavailable"
msgstr "Zahlungsmethode nicht verfügbar"
@@ -305,7 +305,7 @@ msgid "close"
msgstr "schließen"
#: pretix/static/pretixbase/js/asynctask.js:43
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:120
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -314,14 +314,14 @@ msgstr ""
"einige Minuten dauern."
#: pretix/static/pretixbase/js/asynctask.js:48
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixbase/js/asynctask.js:125
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
"Ihre Anfrage befindet sich beim Server in der Warteschlange und wird bald "
"verarbeitet."
#: pretix/static/pretixbase/js/asynctask.js:54
#: pretix/static/pretixbase/js/asynctask.js:130
#: pretix/static/pretixbase/js/asynctask.js:131
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -332,14 +332,14 @@ msgstr ""
"bitte oder gehen Sie in Ihrem Browser einen Schritt zurück und versuchen es "
"erneut."
#: pretix/static/pretixbase/js/asynctask.js:89
#: pretix/static/pretixbase/js/asynctask.js:175
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixbase/js/asynctask.js:90
#: pretix/static/pretixbase/js/asynctask.js:178
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Ein Fehler ist aufgetreten. Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:92
#: pretix/static/pretixbase/js/asynctask.js:93
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -347,12 +347,12 @@ msgstr ""
"Wir können den Server aktuell nicht erreichen, versuchen es aber weiter. "
"Letzter Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:144
#: pretix/static/pretixbase/js/asynctask.js:145
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Diese Anfrage hat zu lange gedauert. Bitte erneut versuchen."
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -360,11 +360,11 @@ msgstr ""
"Wir können den Server aktuell nicht erreichen. Bitte versuchen Sie es noch "
"einmal. Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:205
#: pretix/static/pretixbase/js/asynctask.js:208
msgid "We are processing your request …"
msgstr "Wir verarbeiten Ihre Anfrage …"
#: pretix/static/pretixbase/js/asynctask.js:213
#: pretix/static/pretixbase/js/asynctask.js:216
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -374,7 +374,7 @@ msgstr ""
"dauert, prüfen Sie bitte Ihre Internetverbindung. Danach können Sie diese "
"Seite neu laden und es erneut versuchen."
#: pretix/static/pretixbase/js/asynctask.js:270
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr "Schließen"
@@ -480,49 +480,49 @@ msgstr "Minuten"
msgid "Check-in QR"
msgstr "Check-in-QR-Code"
#: pretix/static/pretixcontrol/js/ui/editor.js:376
#: pretix/static/pretixcontrol/js/ui/editor.js:382
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:624
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Group of objects"
msgstr "Gruppe von Objekten"
#: pretix/static/pretixcontrol/js/ui/editor.js:630
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Text object"
msgstr "Text-Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:632
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Barcode area"
msgstr "QR-Code-Bereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#: pretix/static/pretixcontrol/js/ui/editor.js:640
msgid "Image area"
msgstr "Bildbereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:636
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Powered by pretix"
msgstr "Event-Ticketshop von pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:638
#: pretix/static/pretixcontrol/js/ui/editor.js:644
msgid "Object"
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:642
#: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Ticket design"
msgstr "Ticket-Design"
#: pretix/static/pretixcontrol/js/ui/editor.js:932
#: pretix/static/pretixcontrol/js/ui/editor.js:938
msgid "Saving failed."
msgstr "Speichern fehlgeschlagen."
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
#: pretix/static/pretixcontrol/js/ui/editor.js:988
#: pretix/static/pretixcontrol/js/ui/editor.js:1027
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:1006
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
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?"
@@ -646,20 +646,20 @@ msgstr "Sie erhalten %(currency)s %(amount)s zurück"
msgid "Please enter the amount the organizer can keep."
msgstr "Bitte geben Sie den Betrag ein, den der Veranstalter einbehalten darf."
#: pretix/static/pretixpresale/js/ui/main.js:364
#: pretix/static/pretixpresale/js/ui/main.js:377
msgid "Please enter a quantity for one of the ticket types."
msgstr "Bitte tragen Sie eine Menge für eines der Produkte ein."
#: pretix/static/pretixpresale/js/ui/main.js:400
#: pretix/static/pretixpresale/js/ui/main.js:413
msgid "required"
msgstr "verpflichtend"
#: pretix/static/pretixpresale/js/ui/main.js:503
#: pretix/static/pretixpresale/js/ui/main.js:522
#: pretix/static/pretixpresale/js/ui/main.js:516
#: pretix/static/pretixpresale/js/ui/main.js:535
msgid "Time zone:"
msgstr "Zeitzone:"
#: pretix/static/pretixpresale/js/ui/main.js:513
#: pretix/static/pretixpresale/js/ui/main.js:526
msgid "Your local time:"
msgstr "Deine lokale Zeit:"

View File

@@ -153,6 +153,7 @@ Kosovo
landesspezifische
Lead
Leaflet
Linktext
loszulegen
Ltd
max

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-28 16:44+0000\n"
"POT-Creation-Date: 2022-07-01 07:50+0000\n"
"PO-Revision-Date: 2022-04-28 18:04+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
@@ -29,118 +29,118 @@ msgstr "Als bezahlt markiert"
msgid "Comment:"
msgstr "Kommentar:"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:34
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal"
msgstr "PayPal"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:35
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo"
msgstr "Venmo"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:36
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
msgid "Apple Pay"
msgstr "Apple Pay"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:37
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
msgid "Itaú"
msgstr "Itaú"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:38
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
msgid "PayPal Credit"
msgstr "PayPal Kredit"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:39
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr "Kreditkarte"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:40
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr "PayPal Später Zahlen"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:41
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
msgstr "iDEAL"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:42
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr "SEPA-Lastschrift"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:43
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr "Bancontact"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:44
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
msgid "giropay"
msgstr "giropay"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:45
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
msgid "SOFORT"
msgstr "SOFORT"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:46
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
msgid "eps"
msgstr "eps"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:47
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr "MyBank"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:48
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
msgstr "Przelewy24"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:49
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr "Verkkopankki"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:50
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr "PayU"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:51
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr "BLIK"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:52
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr "Trustly"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:53
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr "Zimpler"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:54
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr "Maxima"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:55
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr "OXXO"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:56
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr "Boleto"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:57
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
msgstr "WeChat Pay"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:58
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr "Mercado Pago"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:152
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:157
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Continue"
msgstr "Fortfahren"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:205
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:215
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
msgid "Confirming your payment …"
msgstr "Zahlung wird bestätigt …"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:230
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:240
msgid "Payment method unavailable"
msgstr "Zahlungsmethode nicht verfügbar"
@@ -305,7 +305,7 @@ msgid "close"
msgstr "schließen"
#: pretix/static/pretixbase/js/asynctask.js:43
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:120
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -314,14 +314,14 @@ msgstr ""
"dies einige Minuten dauern."
#: pretix/static/pretixbase/js/asynctask.js:48
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixbase/js/asynctask.js:125
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
"Deine Anfrage befindet sich beim Server in der Warteschlange und wird bald "
"verarbeitet."
#: pretix/static/pretixbase/js/asynctask.js:54
#: pretix/static/pretixbase/js/asynctask.js:130
#: pretix/static/pretixbase/js/asynctask.js:131
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -331,14 +331,14 @@ msgstr ""
"verarbeitet. Wenn dies länger als zwei Minuten dauert, kontaktiere uns bitte "
"oder gehe in deinem Browser einen Schritt zurück und versuche es erneut."
#: pretix/static/pretixbase/js/asynctask.js:89
#: pretix/static/pretixbase/js/asynctask.js:175
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixbase/js/asynctask.js:90
#: pretix/static/pretixbase/js/asynctask.js:178
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Ein Fehler vom Typ {code} ist aufgetreten."
#: pretix/static/pretixbase/js/asynctask.js:92
#: pretix/static/pretixbase/js/asynctask.js:93
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -346,12 +346,12 @@ msgstr ""
"Wir können den Server aktuell nicht erreichen, versuchen es aber weiter. "
"Letzter Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:144
#: pretix/static/pretixbase/js/asynctask.js:145
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Diese Anfrage hat zu lange gedauert. Bitte erneut versuchen."
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -359,11 +359,11 @@ msgstr ""
"Wir können den Server aktuell nicht erreichen. Bitte versuche es noch "
"einmal. Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:205
#: pretix/static/pretixbase/js/asynctask.js:208
msgid "We are processing your request …"
msgstr "Wir verarbeiten deine Anfrage …"
#: pretix/static/pretixbase/js/asynctask.js:213
#: pretix/static/pretixbase/js/asynctask.js:216
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -373,7 +373,7 @@ msgstr ""
"dauert, prüfe bitte deine Internetverbindung. Danach kannst du diese Seite "
"neu laden und es erneut versuchen."
#: pretix/static/pretixbase/js/asynctask.js:270
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr "Schließen"
@@ -479,49 +479,49 @@ msgstr "Minuten"
msgid "Check-in QR"
msgstr "Check-in-QR-Code"
#: pretix/static/pretixcontrol/js/ui/editor.js:376
#: pretix/static/pretixcontrol/js/ui/editor.js:382
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:624
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Group of objects"
msgstr "Gruppe von Objekten"
#: pretix/static/pretixcontrol/js/ui/editor.js:630
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Text object"
msgstr "Text-Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:632
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Barcode area"
msgstr "QR-Code-Bereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#: pretix/static/pretixcontrol/js/ui/editor.js:640
msgid "Image area"
msgstr "Bildbereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:636
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Powered by pretix"
msgstr "Event-Ticketshop von pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:638
#: pretix/static/pretixcontrol/js/ui/editor.js:644
msgid "Object"
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:642
#: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Ticket design"
msgstr "Ticket-Design"
#: pretix/static/pretixcontrol/js/ui/editor.js:932
#: pretix/static/pretixcontrol/js/ui/editor.js:938
msgid "Saving failed."
msgstr "Speichern fehlgeschlagen."
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
#: pretix/static/pretixcontrol/js/ui/editor.js:988
#: pretix/static/pretixcontrol/js/ui/editor.js:1027
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:1006
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
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?"
@@ -645,20 +645,20 @@ msgstr "Du erhältst %(currency)s %(amount)s zurück"
msgid "Please enter the amount the organizer can keep."
msgstr "Bitte gib den Betrag ein, den der Veranstalter einbehalten darf."
#: pretix/static/pretixpresale/js/ui/main.js:364
#: pretix/static/pretixpresale/js/ui/main.js:377
msgid "Please enter a quantity for one of the ticket types."
msgstr "Bitte trage eine Menge für eines der Produkte ein."
#: pretix/static/pretixpresale/js/ui/main.js:400
#: pretix/static/pretixpresale/js/ui/main.js:413
msgid "required"
msgstr "verpflichtend"
#: pretix/static/pretixpresale/js/ui/main.js:503
#: pretix/static/pretixpresale/js/ui/main.js:522
#: pretix/static/pretixpresale/js/ui/main.js:516
#: pretix/static/pretixpresale/js/ui/main.js:535
msgid "Time zone:"
msgstr "Zeitzone:"
#: pretix/static/pretixpresale/js/ui/main.js:513
#: pretix/static/pretixpresale/js/ui/main.js:526
msgid "Your local time:"
msgstr "Deine lokale Zeit:"

View File

@@ -153,6 +153,7 @@ Kosovo
landesspezifische
Lead
Leaflet
Linktext
loszulegen
Ltd
max

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-28 16:44+0000\n"
"POT-Creation-Date: 2022-07-01 07:50+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"
@@ -28,118 +28,118 @@ msgstr ""
msgid "Comment:"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:34
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:35
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:36
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
msgid "Apple Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:37
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
msgid "Itaú"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:38
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
msgid "PayPal Credit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:39
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:40
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:41
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:42
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:43
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:44
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
msgid "giropay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:45
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:46
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
msgid "eps"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:47
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:48
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:49
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:50
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:51
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:52
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:53
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:54
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:55
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:56
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:57
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:58
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:152
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:157
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Continue"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:205
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:215
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
msgid "Confirming your payment …"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:230
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:240
msgid "Payment method unavailable"
msgstr ""
@@ -304,61 +304,61 @@ msgid "close"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:43
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:120
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:48
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixbase/js/asynctask.js:125
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:54
#: pretix/static/pretixbase/js/asynctask.js:130
#: pretix/static/pretixbase/js/asynctask.js:131
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:89
#: pretix/static/pretixbase/js/asynctask.js:175
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixbase/js/asynctask.js:90
#: pretix/static/pretixbase/js/asynctask.js:178
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:92
#: pretix/static/pretixbase/js/asynctask.js:93
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:144
#: pretix/static/pretixbase/js/asynctask.js:145
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:205
#: pretix/static/pretixbase/js/asynctask.js:208
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:213
#: pretix/static/pretixbase/js/asynctask.js:216
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:270
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr ""
@@ -464,48 +464,48 @@ msgstr ""
msgid "Check-in QR"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:376
#: pretix/static/pretixcontrol/js/ui/editor.js:382
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:624
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:630
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:632
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#: pretix/static/pretixcontrol/js/ui/editor.js:640
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:636
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:638
#: pretix/static/pretixcontrol/js/ui/editor.js:644
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:642
#: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:932
#: pretix/static/pretixcontrol/js/ui/editor.js:938
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
#: pretix/static/pretixcontrol/js/ui/editor.js:988
#: pretix/static/pretixcontrol/js/ui/editor.js:1027
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
@@ -619,20 +619,20 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:364
#: pretix/static/pretixpresale/js/ui/main.js:377
msgid "Please enter a quantity for one of the ticket types."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:400
#: pretix/static/pretixpresale/js/ui/main.js:413
msgid "required"
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:503
#: pretix/static/pretixpresale/js/ui/main.js:522
#: pretix/static/pretixpresale/js/ui/main.js:516
#: pretix/static/pretixpresale/js/ui/main.js:535
msgid "Time zone:"
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:513
#: pretix/static/pretixpresale/js/ui/main.js:526
msgid "Your local time:"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-28 16:44+0000\n"
"POT-Creation-Date: 2022-07-01 07:50+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/"
@@ -29,109 +29,109 @@ msgstr "Επισήμανση ως πληρωμένο"
msgid "Comment:"
msgstr "Σχόλιο:"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:34
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:35
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:36
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
msgid "Apple Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:37
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
msgid "Itaú"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:38
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
msgid "PayPal Credit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:39
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:40
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:41
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:42
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:43
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:44
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
msgid "giropay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:45
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:46
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
#, fuzzy
#| msgid "Yes"
msgid "eps"
msgstr "Ναι"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:47
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:48
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:49
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:50
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:51
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:52
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:53
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:54
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:55
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:56
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:57
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:58
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:152
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:157
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
#, fuzzy
#| msgctxt "widget"
@@ -139,13 +139,13 @@ msgstr ""
msgid "Continue"
msgstr "Συνέχεια"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:205
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:215
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
msgid "Confirming your payment …"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:230
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:240
msgid "Payment method unavailable"
msgstr ""
@@ -325,7 +325,7 @@ msgid "close"
msgstr "Κλείσιμο"
#: pretix/static/pretixbase/js/asynctask.js:43
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:120
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
@@ -339,7 +339,7 @@ msgstr ""
"διαρκέσει μερικά λεπτά."
#: pretix/static/pretixbase/js/asynctask.js:48
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixbase/js/asynctask.js:125
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
@@ -351,7 +351,7 @@ msgstr ""
"διαρκέσει μερικά λεπτά."
#: pretix/static/pretixbase/js/asynctask.js:54
#: pretix/static/pretixbase/js/asynctask.js:130
#: pretix/static/pretixbase/js/asynctask.js:131
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -361,14 +361,14 @@ msgstr ""
"του. Αν αυτό διαρκεί περισσότερο από δύο λεπτά, επικοινωνήστε μαζί μας ή "
"επιστρέψτε στο πρόγραμμα περιήγησής σας και δοκιμάστε ξανά."
#: pretix/static/pretixbase/js/asynctask.js:89
#: pretix/static/pretixbase/js/asynctask.js:175
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixbase/js/asynctask.js:90
#: pretix/static/pretixbase/js/asynctask.js:178
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Παρουσιάστηκε σφάλμα τύπου {code}."
#: pretix/static/pretixbase/js/asynctask.js:92
#: pretix/static/pretixbase/js/asynctask.js:93
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -376,14 +376,14 @@ msgstr ""
"Αυτήν τη στιγμή δεν μπορούμε να φτάσουμε στο διακομιστή, αλλά συνεχίζουμε να "
"προσπαθούμε. Τελευταίος κωδικός σφάλματος: {code}"
#: pretix/static/pretixbase/js/asynctask.js:144
#: pretix/static/pretixbase/js/asynctask.js:145
#: pretix/static/pretixcontrol/js/ui/mail.js:21
#, fuzzy
#| msgid "The request took to long. Please try again."
msgid "The request took too long. Please try again."
msgstr "Το αίτημα διήρκησε πολύ. Παρακαλώ προσπαθήστε ξανά."
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -391,11 +391,11 @@ msgstr ""
"Αυτήν τη στιγμή δεν μπορούμε να συνδεθούμε με το διακομιστή. Παρακαλώ "
"προσπαθήστε ξανά. Κωδικός σφάλματος: {code}"
#: pretix/static/pretixbase/js/asynctask.js:205
#: pretix/static/pretixbase/js/asynctask.js:208
msgid "We are processing your request …"
msgstr "Επεξεργαζόμαστε το αίτημά σας …"
#: pretix/static/pretixbase/js/asynctask.js:213
#: pretix/static/pretixbase/js/asynctask.js:216
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -405,7 +405,7 @@ msgstr ""
"περισσότερο από ένα λεπτό, ελέγξτε τη σύνδεσή σας στο διαδίκτυο και στη "
"συνέχεια επαναλάβετε τη φόρτωση αυτής της σελίδας και δοκιμάστε ξανά."
#: pretix/static/pretixbase/js/asynctask.js:270
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr "Κλείσιμο μηνύματος"
@@ -514,51 +514,51 @@ msgstr ""
msgid "Check-in QR"
msgstr "Έλεγχος QR"
#: pretix/static/pretixcontrol/js/ui/editor.js:376
#: pretix/static/pretixcontrol/js/ui/editor.js:382
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
"Το αρχείο φόντου PDF δεν ήταν δυνατό να φορτωθεί για τον ακόλουθο λόγο:"
#: pretix/static/pretixcontrol/js/ui/editor.js:624
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Group of objects"
msgstr "Ομάδα αντικειμένων"
#: pretix/static/pretixcontrol/js/ui/editor.js:630
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Text object"
msgstr "Αντικείμενο κειμένου"
#: pretix/static/pretixcontrol/js/ui/editor.js:632
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Barcode area"
msgstr "Περιοχή Barcode"
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#: pretix/static/pretixcontrol/js/ui/editor.js:640
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Περιοχή Barcode"
#: pretix/static/pretixcontrol/js/ui/editor.js:636
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Powered by pretix"
msgstr "Υποστηρίζεται από το Pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:638
#: pretix/static/pretixcontrol/js/ui/editor.js:644
msgid "Object"
msgstr "Αντικείμενο"
#: pretix/static/pretixcontrol/js/ui/editor.js:642
#: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Ticket design"
msgstr "Σχεδιασμός εισιτηρίων"
#: pretix/static/pretixcontrol/js/ui/editor.js:932
#: pretix/static/pretixcontrol/js/ui/editor.js:938
msgid "Saving failed."
msgstr "Η αποθήκευση απέτυχε."
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
#: pretix/static/pretixcontrol/js/ui/editor.js:988
#: pretix/static/pretixcontrol/js/ui/editor.js:1027
msgid "Error while uploading your PDF file, please try again."
msgstr "Σφάλμα κατά τη μεταφόρτωση του αρχείου PDF, δοκιμάστε ξανά."
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Θέλετε πραγματικά να αφήσετε τον επεξεργαστή χωρίς να αποθηκεύσετε τις "
@@ -691,22 +691,22 @@ msgstr "απο %(currency)s %(price)s"
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:364
#: pretix/static/pretixpresale/js/ui/main.js:377
msgid "Please enter a quantity for one of the ticket types."
msgstr "Εισαγάγετε μια ποσότητα για έναν από τους τύπους εισιτηρίων."
#: pretix/static/pretixpresale/js/ui/main.js:400
#: pretix/static/pretixpresale/js/ui/main.js:413
#, fuzzy
#| msgid "Cart expired"
msgid "required"
msgstr "Το καλάθι έληξε"
#: pretix/static/pretixpresale/js/ui/main.js:503
#: pretix/static/pretixpresale/js/ui/main.js:522
#: pretix/static/pretixpresale/js/ui/main.js:516
#: pretix/static/pretixpresale/js/ui/main.js:535
msgid "Time zone:"
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:513
#: pretix/static/pretixpresale/js/ui/main.js:526
msgid "Your local time:"
msgstr ""
@@ -1028,5 +1028,5 @@ msgstr "Δεκέμβριος"
#~ "<a href=\"https://pretix.eu\" target=\"_blank\" rel=\"noopener\">event "
#~ "ticketing powered by pretix</a>"
#~ msgstr ""
#~ "<a href=\"https://pretix.eu\" target=\"_blank\" rel=\"noopener"
#~ "\">εισιτήρια εκδηλώσεων powered by pretix</a>"
#~ "<a href=\"https://pretix.eu\" target=\"_blank\" "
#~ "rel=\"noopener\">εισιτήρια εκδηλώσεων powered by pretix</a>"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-28 16:44+0000\n"
"POT-Creation-Date: 2022-07-01 07:50+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-"
@@ -29,120 +29,120 @@ msgstr "Marcado como pagado"
msgid "Comment:"
msgstr "Comentario:"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:34
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:35
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:36
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
msgid "Apple Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:37
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
msgid "Itaú"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:38
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
msgid "PayPal Credit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:39
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:40
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:41
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:42
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:43
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:44
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
msgid "giropay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:45
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:46
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
#, fuzzy
#| msgid "Yes"
msgid "eps"
msgstr "Sí"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:47
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:48
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:49
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:50
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:51
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:52
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:53
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:54
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:55
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:56
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:57
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:58
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:152
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:157
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Continue"
msgstr "Continuar"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:205
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:215
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
msgid "Confirming your payment …"
msgstr "Confirmando el pago…"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:230
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:240
msgid "Payment method unavailable"
msgstr ""
@@ -307,7 +307,7 @@ msgid "close"
msgstr "Cerrar"
#: pretix/static/pretixbase/js/asynctask.js:43
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:120
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -316,12 +316,12 @@ msgstr ""
"dependiendo del tamaño de su evento."
#: pretix/static/pretixbase/js/asynctask.js:48
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixbase/js/asynctask.js:125
msgid "Your request has been queued on the server and will soon be processed."
msgstr "Su solicitud ha sido enviada al servidor y será procesada en breve."
#: pretix/static/pretixbase/js/asynctask.js:54
#: pretix/static/pretixbase/js/asynctask.js:130
#: pretix/static/pretixbase/js/asynctask.js:131
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -331,14 +331,14 @@ msgstr ""
"Si toma más de dos minutos, por favor contáctenos o regrese a la página "
"anterior en su navegador e intente de nuevo."
#: pretix/static/pretixbase/js/asynctask.js:89
#: pretix/static/pretixbase/js/asynctask.js:175
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixbase/js/asynctask.js:90
#: pretix/static/pretixbase/js/asynctask.js:178
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Ha ocurrido un error de tipo {code}."
#: pretix/static/pretixbase/js/asynctask.js:92
#: pretix/static/pretixbase/js/asynctask.js:93
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -346,12 +346,12 @@ msgstr ""
"Ahora mismo no podemos contactar con el servidor, pero lo seguimos "
"intentando. El último código de error fue: {code}"
#: pretix/static/pretixbase/js/asynctask.js:144
#: pretix/static/pretixbase/js/asynctask.js:145
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "La solicitud ha tomado demasiado tiempo. Por favor, intente de nuevo."
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -359,11 +359,11 @@ msgstr ""
"Ahora mismo no podemos contactar con el servidor. Por favor, intente de "
"nuevo. Código de error: {code}"
#: pretix/static/pretixbase/js/asynctask.js:205
#: pretix/static/pretixbase/js/asynctask.js:208
msgid "We are processing your request …"
msgstr "Estamos procesando su solicitud…"
#: pretix/static/pretixbase/js/asynctask.js:213
#: pretix/static/pretixbase/js/asynctask.js:216
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -373,7 +373,7 @@ msgstr ""
"minuto, por favor, revise su conexión a Internet, recargue la página e "
"intente nuevamente."
#: pretix/static/pretixbase/js/asynctask.js:270
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr "Cerrar mensaje"
@@ -479,51 +479,51 @@ msgstr "minutos"
msgid "Check-in QR"
msgstr "QR de Chequeo"
#: pretix/static/pretixcontrol/js/ui/editor.js:376
#: pretix/static/pretixcontrol/js/ui/editor.js:382
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:624
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Group of objects"
msgstr "Grupo de objetos"
#: pretix/static/pretixcontrol/js/ui/editor.js:630
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Text object"
msgstr "Objeto de texto"
#: pretix/static/pretixcontrol/js/ui/editor.js:632
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Barcode area"
msgstr "Área para código de barras"
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#: pretix/static/pretixcontrol/js/ui/editor.js:640
msgid "Image area"
msgstr "Área de imagen"
#: pretix/static/pretixcontrol/js/ui/editor.js:636
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Powered by pretix"
msgstr "Proveído por pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:638
#: pretix/static/pretixcontrol/js/ui/editor.js:644
msgid "Object"
msgstr "Objeto"
#: pretix/static/pretixcontrol/js/ui/editor.js:642
#: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Ticket design"
msgstr "Diseño del ticket"
#: pretix/static/pretixcontrol/js/ui/editor.js:932
#: pretix/static/pretixcontrol/js/ui/editor.js:938
msgid "Saving failed."
msgstr "El guardado falló."
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
#: pretix/static/pretixcontrol/js/ui/editor.js:988
#: pretix/static/pretixcontrol/js/ui/editor.js:1027
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:1006
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "¿Realmente desea salir del editor sin haber guardado sus cambios?"
@@ -645,20 +645,20 @@ msgstr "Obtienes %(currency)s %(price)s de vuelta"
msgid "Please enter the amount the organizer can keep."
msgstr "Por favor, ingrese el monto que el organizador puede quedarse."
#: pretix/static/pretixpresale/js/ui/main.js:364
#: pretix/static/pretixpresale/js/ui/main.js:377
msgid "Please enter a quantity for one of the ticket types."
msgstr "Por favor, introduzca un valor para cada tipo de entrada."
#: pretix/static/pretixpresale/js/ui/main.js:400
#: pretix/static/pretixpresale/js/ui/main.js:413
msgid "required"
msgstr "campo requerido"
#: pretix/static/pretixpresale/js/ui/main.js:503
#: pretix/static/pretixpresale/js/ui/main.js:522
#: pretix/static/pretixpresale/js/ui/main.js:516
#: pretix/static/pretixpresale/js/ui/main.js:535
msgid "Time zone:"
msgstr "Zona horaria:"
#: pretix/static/pretixpresale/js/ui/main.js:513
#: pretix/static/pretixpresale/js/ui/main.js:526
msgid "Your local time:"
msgstr "Su hora local:"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-28 16:44+0000\n"
"POT-Creation-Date: 2022-07-01 07:50+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-"
@@ -29,109 +29,109 @@ msgstr "Merkitty maksetuksi"
msgid "Comment:"
msgstr "Kommentti:"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:34
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:35
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:36
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
msgid "Apple Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:37
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
msgid "Itaú"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:38
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
msgid "PayPal Credit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:39
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:40
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:41
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:42
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:43
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:44
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
msgid "giropay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:45
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:46
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
#, fuzzy
#| msgid "Yes"
msgid "eps"
msgstr "Kyllä"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:47
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:48
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:49
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:50
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:51
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:52
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:53
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:54
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:55
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:56
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:57
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:58
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:152
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:157
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
#, fuzzy
#| msgctxt "widget"
@@ -139,13 +139,13 @@ msgstr ""
msgid "Continue"
msgstr "Jatka"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:205
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:215
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
msgid "Confirming your payment …"
msgstr "Maksuasi vahvistetaan …"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:230
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:240
msgid "Payment method unavailable"
msgstr ""
@@ -319,44 +319,44 @@ msgid "close"
msgstr "Sulje"
#: pretix/static/pretixbase/js/asynctask.js:43
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:120
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:48
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixbase/js/asynctask.js:125
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:54
#: pretix/static/pretixbase/js/asynctask.js:130
#: pretix/static/pretixbase/js/asynctask.js:131
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:89
#: pretix/static/pretixbase/js/asynctask.js:175
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixbase/js/asynctask.js:90
#: pretix/static/pretixbase/js/asynctask.js:178
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Tapahtui virhe. Virhekoodi: {code}."
#: pretix/static/pretixbase/js/asynctask.js:92
#: pretix/static/pretixbase/js/asynctask.js:93
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:144
#: pretix/static/pretixbase/js/asynctask.js:145
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Pyyntö aikakatkaistiin. Ole hyvä ja yritä uudelleen."
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -364,18 +364,18 @@ msgstr ""
"Palvelimeen ei juuri nyt saatu yhteyttä. Ole hyvä ja yritä uudelleen. "
"Virhekoodi: {code}"
#: pretix/static/pretixbase/js/asynctask.js:205
#: pretix/static/pretixbase/js/asynctask.js:208
msgid "We are processing your request …"
msgstr "Pyyntöäsi käsitellään …"
#: pretix/static/pretixbase/js/asynctask.js:213
#: pretix/static/pretixbase/js/asynctask.js:216
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:270
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr "Sulje viesti"
@@ -483,50 +483,50 @@ msgstr ""
msgid "Check-in QR"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:376
#: pretix/static/pretixcontrol/js/ui/editor.js:382
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:624
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:630
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Text object"
msgstr "Tekstiobjekti"
#: pretix/static/pretixcontrol/js/ui/editor.js:632
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Barcode area"
msgstr "Viivakoodialue"
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#: pretix/static/pretixcontrol/js/ui/editor.js:640
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Viivakoodialue"
#: pretix/static/pretixcontrol/js/ui/editor.js:636
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:638
#: pretix/static/pretixcontrol/js/ui/editor.js:644
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:642
#: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:932
#: pretix/static/pretixcontrol/js/ui/editor.js:938
msgid "Saving failed."
msgstr "Tallennus epäonnistui."
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
#: pretix/static/pretixcontrol/js/ui/editor.js:988
#: pretix/static/pretixcontrol/js/ui/editor.js:1027
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1006
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
@@ -644,22 +644,22 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:364
#: pretix/static/pretixpresale/js/ui/main.js:377
msgid "Please enter a quantity for one of the ticket types."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:400
#: pretix/static/pretixpresale/js/ui/main.js:413
#, fuzzy
#| msgid "Cart expired"
msgid "required"
msgstr "Ostoskori on vanhentunut"
#: pretix/static/pretixpresale/js/ui/main.js:503
#: pretix/static/pretixpresale/js/ui/main.js:522
#: pretix/static/pretixpresale/js/ui/main.js:516
#: pretix/static/pretixpresale/js/ui/main.js:535
msgid "Time zone:"
msgstr "Aikavyöhyke:"
#: pretix/static/pretixpresale/js/ui/main.js:513
#: pretix/static/pretixpresale/js/ui/main.js:526
msgid "Your local time:"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: French\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-28 16:44+0000\n"
"POT-Creation-Date: 2022-07-01 07:50+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/"
@@ -28,109 +28,109 @@ msgstr "Marqué comme payé"
msgid "Comment:"
msgstr "Commentaire :"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:34
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:35
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:36
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
msgid "Apple Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:37
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
msgid "Itaú"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:38
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
msgid "PayPal Credit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:39
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:40
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:41
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:42
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:43
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:44
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
msgid "giropay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:45
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:46
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
#, fuzzy
#| msgid "Yes"
msgid "eps"
msgstr "Oui"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:47
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:48
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:49
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:50
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:51
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:52
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:53
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:54
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:55
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:56
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:57
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:58
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:152
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:157
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
#, fuzzy
#| msgctxt "widget"
@@ -138,13 +138,13 @@ msgstr ""
msgid "Continue"
msgstr "Continuer"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:205
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:215
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
msgid "Confirming your payment …"
msgstr "Confirmation de votre paiment…"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:230
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:240
msgid "Payment method unavailable"
msgstr ""
@@ -322,7 +322,7 @@ msgid "close"
msgstr "Fermer"
#: pretix/static/pretixbase/js/asynctask.js:43
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:120
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
@@ -335,7 +335,7 @@ msgstr ""
"taille de votre événement, cela peut prendre jusqu' à quelques minutes."
#: pretix/static/pretixbase/js/asynctask.js:48
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixbase/js/asynctask.js:125
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
@@ -346,7 +346,7 @@ msgstr ""
"taille de votre événement, cela peut prendre jusqu' à quelques minutes."
#: pretix/static/pretixbase/js/asynctask.js:54
#: pretix/static/pretixbase/js/asynctask.js:130
#: pretix/static/pretixbase/js/asynctask.js:131
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -356,14 +356,14 @@ msgstr ""
"prend plus de deux minutes, veuillez nous contacter ou retourner dans votre "
"navigateur et réessayer."
#: pretix/static/pretixbase/js/asynctask.js:89
#: pretix/static/pretixbase/js/asynctask.js:175
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixbase/js/asynctask.js:90
#: pretix/static/pretixbase/js/asynctask.js:178
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Une erreur de type {code} s'est produite."
#: pretix/static/pretixbase/js/asynctask.js:92
#: pretix/static/pretixbase/js/asynctask.js:93
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -371,12 +371,12 @@ msgstr ""
"Nous ne pouvons actuellement pas atteindre le serveur, mais nous continuons "
"d'essayer. Dernier code d'erreur: {code}"
#: pretix/static/pretixbase/js/asynctask.js:144
#: pretix/static/pretixbase/js/asynctask.js:145
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "La requête a prit trop de temps. Veuillez réessayer."
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -384,11 +384,11 @@ msgstr ""
"Actuellement, nous ne pouvons pas atteindre le serveur. Veuillez réessayer. "
"Code d'erreur: {code}"
#: pretix/static/pretixbase/js/asynctask.js:205
#: pretix/static/pretixbase/js/asynctask.js:208
msgid "We are processing your request …"
msgstr "Nous traitons votre demande …"
#: pretix/static/pretixbase/js/asynctask.js:213
#: pretix/static/pretixbase/js/asynctask.js:216
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -398,7 +398,7 @@ msgstr ""
"d'une minute, veuillez vérifier votre connexion Internet, puis recharger "
"cette page et réessayer."
#: pretix/static/pretixbase/js/asynctask.js:270
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr "Fermer le message"
@@ -507,53 +507,53 @@ msgstr ""
msgid "Check-in QR"
msgstr "Enregistrement QR code"
#: pretix/static/pretixcontrol/js/ui/editor.js:376
#: pretix/static/pretixcontrol/js/ui/editor.js:382
msgid "The PDF background file could not be loaded for the following reason:"
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:624
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Group of objects"
msgstr "Groupe d'objets"
#: pretix/static/pretixcontrol/js/ui/editor.js:630
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Text object"
msgstr "Objet texte"
#: pretix/static/pretixcontrol/js/ui/editor.js:632
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Barcode area"
msgstr "Zone de code-barres"
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#: pretix/static/pretixcontrol/js/ui/editor.js:640
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Zone de code-barres"
#: pretix/static/pretixcontrol/js/ui/editor.js:636
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Powered by pretix"
msgstr "Propulsé par pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:638
#: pretix/static/pretixcontrol/js/ui/editor.js:644
msgid "Object"
msgstr "Objet"
#: pretix/static/pretixcontrol/js/ui/editor.js:642
#: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Ticket design"
msgstr "Conception des billets"
#: pretix/static/pretixcontrol/js/ui/editor.js:932
#: pretix/static/pretixcontrol/js/ui/editor.js:938
msgid "Saving failed."
msgstr "L'enregistrement a échoué."
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
#: pretix/static/pretixcontrol/js/ui/editor.js:988
#: pretix/static/pretixcontrol/js/ui/editor.js:1027
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:1006
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Voulez-vous vraiment quitter l'éditeur sans sauvegarder vos modifications ?"
@@ -679,22 +679,22 @@ msgstr "de %(currency)s %(price)s"
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:364
#: pretix/static/pretixpresale/js/ui/main.js:377
msgid "Please enter a quantity for one of the ticket types."
msgstr "SVP entrez une quantité pour un de vos types de billets."
#: pretix/static/pretixpresale/js/ui/main.js:400
#: pretix/static/pretixpresale/js/ui/main.js:413
#, fuzzy
#| msgid "Cart expired"
msgid "required"
msgstr "Panier expiré"
#: pretix/static/pretixpresale/js/ui/main.js:503
#: pretix/static/pretixpresale/js/ui/main.js:522
#: pretix/static/pretixpresale/js/ui/main.js:516
#: pretix/static/pretixpresale/js/ui/main.js:535
msgid "Time zone:"
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:513
#: pretix/static/pretixpresale/js/ui/main.js:526
msgid "Your local time:"
msgstr ""
@@ -1015,8 +1015,8 @@ msgstr "Décembre"
#~ "<a href=\"https://pretix.eu\" target=\"_blank\" rel=\"noopener\">event "
#~ "ticketing powered by pretix</a>"
#~ msgstr ""
#~ "<a href=\"https://pretix.eu\" target=\"_blank\" rel=\"noopener"
#~ "\">Billetterie en ligne propulsée par Pretix</a>"
#~ "<a href=\"https://pretix.eu\" target=\"_blank\" "
#~ "rel=\"noopener\">Billetterie en ligne propulsée par Pretix</a>"
#~ msgid ""
#~ "Your request has been queued on the server and will now be processed. If "

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-28 16:44+0000\n"
"POT-Creation-Date: 2022-07-01 07:50+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-"
@@ -29,120 +29,120 @@ msgstr "Marcado como pagado"
msgid "Comment:"
msgstr "Comentario:"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:34
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:35
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:36
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
msgid "Apple Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:37
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
msgid "Itaú"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:38
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
msgid "PayPal Credit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:39
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:40
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:41
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:42
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:43
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:44
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
msgid "giropay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:45
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:46
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
#, fuzzy
#| msgid "Yes"
msgid "eps"
msgstr "Si"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:47
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:48
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:49
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:50
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:51
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:52
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:53
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:54
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:55
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:56
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:57
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:58
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:152
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:157
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Continue"
msgstr "Continuar"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:205
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:215
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:152
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:183
msgid "Confirming your payment …"
msgstr "Confirmando o pagamento…"
#: pretix/plugins/paypal/static/pretixplugins/paypal/pretix-paypal.js:230
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:240
msgid "Payment method unavailable"
msgstr ""
@@ -307,7 +307,7 @@ msgid "close"
msgstr "cerrar"
#: pretix/static/pretixbase/js/asynctask.js:43
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:120
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -316,12 +316,12 @@ msgstr ""
"dependendo do tamaño do seu evento."
#: pretix/static/pretixbase/js/asynctask.js:48
#: pretix/static/pretixbase/js/asynctask.js:124
#: pretix/static/pretixbase/js/asynctask.js:125
msgid "Your request has been queued on the server and will soon be processed."
msgstr "A súa solicitude foi enviada ao servidor e será procesada en breve."
#: pretix/static/pretixbase/js/asynctask.js:54
#: pretix/static/pretixbase/js/asynctask.js:130
#: pretix/static/pretixbase/js/asynctask.js:131
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -331,14 +331,14 @@ msgstr ""
"procesada. Se tarda máis de dous minutos, por favor, contacte con nós ou "
"volva á páxina anterior no seu navegador e inténteo de novo."
#: pretix/static/pretixbase/js/asynctask.js:89
#: pretix/static/pretixbase/js/asynctask.js:175
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixbase/js/asynctask.js:90
#: pretix/static/pretixbase/js/asynctask.js:178
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Ocurreu un error de tipo {code}."
#: pretix/static/pretixbase/js/asynctask.js:92
#: pretix/static/pretixbase/js/asynctask.js:93
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -346,12 +346,12 @@ msgstr ""
"Agora mesmo non podemos contactar co servidor, pero seguímolo intentando. O "
"último código de erro foi: {code}"
#: pretix/static/pretixbase/js/asynctask.js:144
#: pretix/static/pretixbase/js/asynctask.js:145
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "A petición levou demasiado tempo. Inténteo de novo."
#: pretix/static/pretixbase/js/asynctask.js:183
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -359,11 +359,11 @@ msgstr ""
"Agora mesmo non podemos contactar co servidor. Por favor, inténteo de novo. "
"Código de erro: {code}"
#: pretix/static/pretixbase/js/asynctask.js:205
#: pretix/static/pretixbase/js/asynctask.js:208
msgid "We are processing your request …"
msgstr "Estamos procesando a súa solicitude…"
#: pretix/static/pretixbase/js/asynctask.js:213
#: pretix/static/pretixbase/js/asynctask.js:216
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -373,7 +373,7 @@ msgstr ""
"dun minuto, por favor, revise a súa conexión a Internet, recargue a páxina e "
"inténteo de novo."
#: pretix/static/pretixbase/js/asynctask.js:270
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr "Cerrar mensaxe"
@@ -479,49 +479,49 @@ msgstr "minutos"
msgid "Check-in QR"
msgstr "QR de validación"
#: pretix/static/pretixcontrol/js/ui/editor.js:376
#: pretix/static/pretixcontrol/js/ui/editor.js:382
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:624
#: pretix/static/pretixcontrol/js/ui/editor.js:630
msgid "Group of objects"
msgstr "Grupo de obxectos"
#: pretix/static/pretixcontrol/js/ui/editor.js:630
#: pretix/static/pretixcontrol/js/ui/editor.js:636
msgid "Text object"
msgstr "Obxecto de texto"
#: pretix/static/pretixcontrol/js/ui/editor.js:632
#: pretix/static/pretixcontrol/js/ui/editor.js:638
msgid "Barcode area"
msgstr "Área para código de barras"
#: pretix/static/pretixcontrol/js/ui/editor.js:634
#: pretix/static/pretixcontrol/js/ui/editor.js:640
msgid "Image area"
msgstr "Área de imaxe"
#: pretix/static/pretixcontrol/js/ui/editor.js:636
#: pretix/static/pretixcontrol/js/ui/editor.js:642
msgid "Powered by pretix"
msgstr "Desenvolto por Pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:638
#: pretix/static/pretixcontrol/js/ui/editor.js:644
msgid "Object"
msgstr "Obxecto"
#: pretix/static/pretixcontrol/js/ui/editor.js:642
#: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Ticket design"
msgstr "Deseño do tícket"
#: pretix/static/pretixcontrol/js/ui/editor.js:932
#: pretix/static/pretixcontrol/js/ui/editor.js:938
msgid "Saving failed."
msgstr "O gardado fallou."
#: pretix/static/pretixcontrol/js/ui/editor.js:982
#: pretix/static/pretixcontrol/js/ui/editor.js:1021
#: pretix/static/pretixcontrol/js/ui/editor.js:988
#: pretix/static/pretixcontrol/js/ui/editor.js:1027
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:1006
#: pretix/static/pretixcontrol/js/ui/editor.js:1012
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Realmente desexa saír do editor sen gardar os cambios?"
@@ -642,20 +642,20 @@ msgstr "Obtés %(currency)s %(price)s de volta"
msgid "Please enter the amount the organizer can keep."
msgstr "Por favor, ingrese a cantidade que pode conservar o organizador."
#: pretix/static/pretixpresale/js/ui/main.js:364
#: pretix/static/pretixpresale/js/ui/main.js:377
msgid "Please enter a quantity for one of the ticket types."
msgstr "Por favor, introduza un valor para cada tipo de entrada."
#: pretix/static/pretixpresale/js/ui/main.js:400
#: pretix/static/pretixpresale/js/ui/main.js:413
msgid "required"
msgstr "campo requirido"
#: pretix/static/pretixpresale/js/ui/main.js:503
#: pretix/static/pretixpresale/js/ui/main.js:522
#: pretix/static/pretixpresale/js/ui/main.js:516
#: pretix/static/pretixpresale/js/ui/main.js:535
msgid "Time zone:"
msgstr "Zona horaria:"
#: pretix/static/pretixpresale/js/ui/main.js:513
#: pretix/static/pretixpresale/js/ui/main.js:526
msgid "Your local time:"
msgstr "A súa hora local:"

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