Compare commits

...

965 Commits

Author SHA1 Message Date
Raphael Michel
6f965edc22 Bump to 3.12.1 2020-12-22 11:36:30 +01:00
Raphael Michel
508538aa76 Correct backporting of migrations 2020-12-22 11:29:34 +01:00
Raphael Michel
4511963aca Reduce lifetime of export files 2020-12-22 11:16:42 +01:00
Raphael Michel
2c9277d11b [SECURITY] Rate limiting for login 2020-12-22 11:16:32 +01:00
Raphael Michel
93ee5450ec [SECURITY] Rate limiting for password change form 2020-12-22 11:16:32 +01:00
Raphael Michel
e1b3e20148 [SECURITY] Bind relevant cached file downloads to the current session 2020-12-22 11:16:30 +01:00
Raphael Michel
880e3fd93e [SECURITY] Fix unvalidated redirect 2020-12-22 11:14:51 +01:00
Raphael Michel
cea201af16 [SECURITY] Prevent phishing through misleading link titles 2020-12-22 11:14:50 +01:00
Raphael Michel
93252e1645 Clarify MANIFEST.in 2020-10-26 10:46:00 +01:00
Raphael Michel
65f8b68634 Fix packaging bugs 2020-10-26 10:35:33 +01:00
Raphael Michel
db0aaf58b7 Bump to 3.12.0 2020-10-26 10:25:28 +01:00
Raphael Michel
ae07e433d4 Merge pull request #1831 from pretix-translations/weblate-pretix-pretix 2020-10-26 09:30:24 +01:00
Martin Gross
4fed690209 Allow plugins to disable and pre-fill questions and contact form fields (#1824)
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
2020-10-26 09:30:16 +01:00
David Vaz
6ca6f7f3ef Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 68.7% (2607 of 3797 strings)

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

powered by weblate
2020-10-26 09:10:59 +01:00
Miguel Magalhães
2cceb4f056 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 69.5% (89 of 128 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/pt_PT/

powered by weblate
2020-10-26 09:10:59 +01:00
David Vaz
bfa9b380bb Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 65.2% (2474 of 3797 strings)

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

powered by weblate
2020-10-26 09:10:59 +01:00
Miguel Magalhães
65d9640dbc Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 65.2% (2474 of 3797 strings)

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

powered by weblate
2020-10-26 09:10:59 +01:00
Maarten van den Berg
b0221b0e92 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3797 of 3797 strings)

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

powered by weblate
2020-10-26 09:10:59 +01:00
Miguel Magalhães
1233dd64a8 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 56.9% (2162 of 3797 strings)

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

powered by weblate
2020-10-26 09:10:59 +01:00
David Vaz
9a5d17f14a Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 56.9% (2162 of 3797 strings)

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

powered by weblate
2020-10-26 09:10:59 +01:00
David Vaz
65b0df056f Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 50.7% (1924 of 3797 strings)

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

powered by weblate
2020-10-26 09:10:59 +01:00
David Vaz
997f56f758 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 48.2% (1830 of 3797 strings)

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

powered by weblate
2020-10-26 09:10:59 +01:00
David Vaz
f30541e465 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 11.7% (15 of 128 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/pt_PT/

powered by weblate
2020-10-26 09:10:59 +01:00
David Vaz
efb6a25387 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 47.9% (1818 of 3797 strings)

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

powered by weblate
2020-10-26 09:10:59 +01:00
David Vaz
4a65828275 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 45.5% (1728 of 3797 strings)

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

powered by weblate
2020-10-26 09:10:59 +01:00
Miguel Magalhães
9627d77a9d Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 45.5% (1728 of 3797 strings)

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

powered by weblate
2020-10-26 09:10:59 +01:00
Raphael Michel
c2069663f3 Add IBAN/BIC to doc spelling list 2020-10-26 09:10:42 +01:00
Raphael Michel
5ca1366fad Fix broken redirect after editing gates 2020-10-25 12:01:31 +01:00
Raphael Michel
b0bdae33c1 Add IBAN/BIC fields to bank transfer import API 2020-10-24 23:31:38 +02:00
Raphael Michel
3ced206d04 Show identifier in list of questions 2020-10-24 22:42:27 +02:00
Raphael Michel
539ee2d9db Merge pull request #1830 from pretix-translations/weblate-pretix-pretix 2020-10-24 22:08:15 +02:00
Miguel Magalhães
8ed9684b5d Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 38.8% (1475 of 3797 strings)

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

powered by weblate
2020-10-24 22:05:29 +02:00
Raphael Michel
882b1b6a80 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3797 of 3797 strings)

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

powered by weblate
2020-10-24 22:05:29 +02:00
Raphael Michel
48b6c90a17 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3797 of 3797 strings)

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

powered by weblate
2020-10-24 22:05:28 +02:00
David Vaz
c4f6468579 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 38.7% (1471 of 3797 strings)

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

powered by weblate
2020-10-24 22:02:59 +02:00
Miguel Magalhães
b7cbe6054b Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 38.7% (1471 of 3797 strings)

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

powered by weblate
2020-10-24 22:02:59 +02:00
Raphael Michel
b38af13032 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-10-24 22:02:45 +02:00
Raphael Michel
142386cb9e Fix typos and whitespace 2020-10-24 22:02:11 +02:00
Raphael Michel
d932aecc22 Merge pull request #1829 from pretix-translations/weblate-pretix-pretix 2020-10-24 22:02:07 +02:00
Miguel Magalhães
7fe68140fd Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 38.5% (1461 of 3797 strings)

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

powered by weblate
2020-10-24 21:58:13 +02:00
David Vaz
fdf69c4695 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 38.5% (1461 of 3797 strings)

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

powered by weblate
2020-10-24 21:58:13 +02:00
Raphael Michel
d57ac92676 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3797 of 3797 strings)

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

powered by weblate
2020-10-24 21:58:12 +02:00
Raphael Michel
9578fa73ef Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3797 of 3797 strings)

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

powered by weblate
2020-10-24 21:58:10 +02:00
Miguel Magalhães
fcb68cb551 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 38.5% (1460 of 3797 strings)

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

powered by weblate
2020-10-24 21:56:15 +02:00
Raphael Michel
8b84aad39e Don't user |pluralize 2020-10-24 21:48:45 +02:00
Raphael Michel
b698c8380c Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-10-24 19:39:32 +02:00
Raphael Michel
f7b5f4744b Remove pt locale, we have pt_PT and pt_BR 2020-10-24 19:38:57 +02:00
Raphael Michel
a999dd01d1 Merge pull request #1828 from pretix-translations/weblate-pretix-pretix 2020-10-24 19:38:26 +02:00
Raphael Michel
a77a9d6891 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 38.4% (1436 of 3739 strings)

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

powered by weblate
2020-10-24 19:36:25 +02:00
Raphael Michel
b3bb3cb9a0 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 38.4% (1436 of 3739 strings)

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

powered by weblate
2020-10-24 19:34:16 +02:00
David Vaz
1009ce52b2 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 37.7% (1410 of 3739 strings)

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

powered by weblate
2020-10-24 19:21:15 +02:00
Jaakko Rinta-Filppula
db420a56e1 Translated on translate.pretix.eu (Finnish)
Currently translated at 11.3% (424 of 3749 strings)

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

powered by weblate
2020-10-24 19:21:15 +02:00
David Vaz
cefdb9f65c Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 36.1% (1350 of 3739 strings)

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

powered by weblate
2020-10-24 19:21:15 +02:00
David Vaz
b7037b9432 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 36.1% (1350 of 3739 strings)

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

powered by weblate
2020-10-24 19:21:15 +02:00
Raphael Michel
4f8de4e1fc Merge branch 'glossary' into master 2020-10-24 19:20:26 +02:00
Raphael Michel
987597b298 Add event selection endpoint (#1827)
* Add event selection endpoint

* Minor fixes

* Add filter by gate
2020-10-24 19:20:07 +02:00
Raphael Michel
bb38e2216b Add a glossary to the documentation 2020-10-24 19:19:59 +02:00
Chessmaster
3865063b12 Added missing "und" in lang file (#1826) 2020-10-24 18:26:56 +02:00
Richard Schreiber
8037a8ce7f Update pytest version and related packages (#1820)
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
2020-10-24 12:39:55 +02:00
Raphael Michel
a0dd8f74e4 Add gates (groups of check-in devices) (#1825) 2020-10-24 12:22:02 +02:00
Raphael Michel
38e067da9c Add fi and pt-pt as incubating languages 2020-10-24 12:19:09 +02:00
Raphael Michel
3b6ce19959 Merge pull request #1823 from pretix-translations/weblate-pretix-pretix 2020-10-24 12:18:00 +02:00
Raphael Michel
2b8e6aab39 Add a glossary 2020-10-24 12:16:28 +02:00
Miguel Magalhães
bc7444d7d9 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 22.3% (834 of 3739 strings)

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

powered by weblate
2020-10-24 07:00:13 +02:00
Jaakko Rinta-Filppula
0436064d31 Translated on translate.pretix.eu (Finnish)
Currently translated at 11.2% (421 of 3749 strings)

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

powered by weblate
2020-10-24 07:00:11 +02:00
Miguel Magalhães
1c6984fc2d Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 19.9% (745 of 3739 strings)

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

powered by weblate
2020-10-23 21:44:46 +02:00
David Vaz
050b0888fb Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 19.9% (745 of 3739 strings)

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

powered by weblate
2020-10-23 21:44:46 +02:00
Raphael Michel
1c1bca2dd3 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 10.9% (408 of 3739 strings)

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

powered by weblate
2020-10-23 18:57:59 +02:00
David Vaz
e499780414 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 10.9% (408 of 3739 strings)

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

powered by weblate
2020-10-23 18:57:59 +02:00
Jaakko Rinta-Filppula
74b11305e9 Translated on translate.pretix.eu (Finnish)
Currently translated at 9.4% (351 of 3749 strings)

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

powered by weblate
2020-10-23 18:53:11 +02:00
tlm06
4f0562e845 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 10.2% (381 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:11 +02:00
David Vaz
22c0209bed Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 10.2% (381 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:11 +02:00
Miguel Magalhães
d4c26d00be Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 10.2% (381 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:11 +02:00
tlm06
ab40b3b06b Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 4.8% (180 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:11 +02:00
JPolonia
dac0252326 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 4.8% (180 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:11 +02:00
Miguel Magalhães
9453f07059 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 4.8% (180 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:11 +02:00
David Vaz
74cac2a914 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 4.8% (180 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:11 +02:00
David Vaz
563886b901 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 1.2% (43 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:11 +02:00
Miguel Magalhães
7ef319fb35 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 1.2% (43 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:11 +02:00
David Vaz
bc11e85e42 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 0.5% (20 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:11 +02:00
Miguel Magalhães
5d9cb2dc0d Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 0.5% (20 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:10 +02:00
David Vaz
9ad00b7ce6 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 0.3% (10 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:10 +02:00
Miguel Magalhães
02460fc648 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 0.7% (28 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:10 +02:00
David Vaz
70a2ebe830 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 0.7% (28 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:10 +02:00
David Vaz
522dbfe1c5 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 0.7% (28 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:10 +02:00
David Vaz
4e202f523d Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 0.4% (15 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:10 +02:00
Miguel Magalhães
0bad8d70c8 Translated on translate.pretix.eu (Portuguese (Portugal))
Currently translated at 0.4% (15 of 3739 strings)

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

powered by weblate
2020-10-23 18:53:10 +02:00
Raphael Michel
1cf0fc9f96 Add health_check_interval to RedisClient 2020-10-23 18:52:50 +02:00
Raphael Michel
7b46292da3 Fix incorrect device security profiles 2020-10-23 18:52:39 +02:00
Raphael Michel
0482920a01 Clarify "full" security profile 2020-10-23 11:24:18 +02:00
Raphael Michel
07bd47d934 Docker: Allow to run custom exec commands 2020-10-23 11:21:37 +02:00
Raphael Michel
8241ddf5be runperiodic: Allow to execute specific tasks only 2020-10-22 21:05:10 +02:00
Felix Rindt
a62c7939ae Improvements for bank transfer importing (#1762)
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
2020-10-22 11:00:36 +02:00
Sohalt
9e4dc344a4 Sendmail plugin: Allow to attach a file to emails (#1814)
* sendmail: allow to attach files to emails

* Fix mixup of model objects and model IDs

* Attach to order-level emails, not only position-level emails

* Give attachments a proper file type

* Add a warning note about higher spam chances

Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
2020-10-22 09:53:19 +02:00
Richard Schreiber
d673a43130 Bump libsass-version to 0.20.* (#1821)
libsass 0.19.2 fails to install under latest OS X Catalina. As https://github.com/sass/libsass/issues/3053 seems to be fixed, bump to current version 0.20.*
2020-10-22 09:18:42 +02:00
Raphael Michel
92d7268945 Fix duplicate string 2020-10-21 19:04:39 +02:00
Raphael Michel
8e318dd95d Update locales 2020-10-21 19:02:58 +02:00
Raphael Michel
50a8063fd3 Merge pull request #1813 from pretix-translations/weblate-pretix-pretix 2020-10-21 18:27:16 +02:00
Jaakko Rinta-Filppula
6f41b039b4 Translated on translate.pretix.eu (Finnish)
Currently translated at 9.1% (340 of 3739 strings)

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

powered by weblate
2020-10-21 18:27:03 +02:00
Raphael Michel
12ca4552dd Added translation on translate.pretix.eu (Portuguese) 2020-10-21 18:27:03 +02:00
Raphael Michel
4f780031f7 Added translation on translate.pretix.eu (Portuguese) 2020-10-21 18:27:03 +02:00
Raphael Michel
9fe2b31620 Added translation on translate.pretix.eu (Portuguese (Portugal)) 2020-10-21 18:27:03 +02:00
Raphael Michel
93db33515f Added translation on translate.pretix.eu (Portuguese (Portugal)) 2020-10-21 18:27:03 +02:00
Jaakko Rinta-Filppula
b06e849363 Translated on translate.pretix.eu (Finnish)
Currently translated at 9.1% (339 of 3739 strings)

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

powered by weblate
2020-10-21 18:27:03 +02:00
Jaakko Rinta-Filppula
95b001e109 Translated on translate.pretix.eu (Finnish)
Currently translated at 7.4% (275 of 3739 strings)

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

powered by weblate
2020-10-21 18:27:03 +02:00
Maarten van den Berg
52b940b0bf Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3739 of 3739 strings)

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

powered by weblate
2020-10-21 18:27:03 +02:00
Maarten van den Berg
d28fec544a Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3739 of 3739 strings)

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

powered by weblate
2020-10-21 18:27:03 +02:00
Raphael Michel
7ca09cc73b Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3739 of 3739 strings)

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

powered by weblate
2020-10-21 18:27:03 +02:00
Jaakko Rinta-Filppula
1f151c4a84 Translated on translate.pretix.eu (Finnish)
Currently translated at 6.8% (256 of 3739 strings)

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

powered by weblate
2020-10-21 18:27:03 +02:00
Jaakko Rinta-Filppula
1473845f33 Translated on translate.pretix.eu (Finnish)
Currently translated at 62.5% (80 of 128 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/fi/

powered by weblate
2020-10-21 18:27:03 +02:00
Jaakko Rinta-Filppula
659d166c02 Translated on translate.pretix.eu (Finnish)
Currently translated at 4.3% (159 of 3739 strings)

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

powered by weblate
2020-10-21 18:27:03 +02:00
Raphael Michel
e3d9b3546d Add option to automatically check out all attendees at night (#1819) 2020-10-21 18:26:57 +02:00
Raphael Michel
ffde521fcb Add order comment to positions sheet in order data export 2020-10-21 18:25:57 +02:00
Jonathan Berger
ed0e28eee5 Fix DELETE endpoint for Events resource in doc (#1816) 2020-10-20 17:24:34 +02:00
Raphael Michel
22bba28bea Add pluggable ticket secret generators (#1809) 2020-10-19 15:00:55 +02:00
Raphael Michel
6e20f33ef5 Add logdisplay 2020-10-19 14:50:40 +02:00
Raphael Michel
4ef95346a7 API: Use algorithm to count number of checked in orders consistently with backend 2020-10-19 12:58:13 +02:00
Raphael Michel
fcd0c65567 API: Add "currently inside" to checkin statistics 2020-10-19 12:43:16 +02:00
Raphael Michel
7c212ba79d Allow redeem by secret with special chars 2020-10-18 16:04:42 +02:00
Raphael Michel
0a1a9fcf88 Fix duplicate string 2020-10-16 22:57:13 +02:00
Raphael Michel
bfabed5b44 Remove incorrect column in CSV header
Thanks to an anonymous @felixrindt
2020-10-16 22:53:33 +02:00
Raphael Michel
8883e2642a Fix typo (again) 2020-10-16 22:50:22 +02:00
Raphael Michel
460b5ee588 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-10-16 22:45:33 +02:00
Raphael Michel
c74d8bb126 Add trace and turnover to wordlist 2020-10-16 22:44:51 +02:00
Raphael Michel
07c62f4362 Merge pull request #1810 from pretix-translations/weblate-pretix-pretix
Co-authored-by: Raphael Michel <michel@rami.io>
2020-10-16 22:43:35 +02:00
Raphael Michel
bb59cbca75 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3739 of 3739 strings)

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

powered by weblate
2020-10-16 22:40:48 +02:00
Raphael Michel
fef3ebcb91 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3739 of 3739 strings)

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

powered by weblate
2020-10-16 22:40:47 +02:00
Raphael Michel
dfc7483b5d Translated on translate.pretix.eu (German (informal))
Currently translated at 99.6% (3724 of 3739 strings)

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

powered by weblate
2020-10-16 22:34:57 +02:00
Raphael Michel
b80ed9079b Added translation on translate.pretix.eu (Finnish) 2020-10-16 22:34:57 +02:00
Raphael Michel
6801b027cd Added translation on translate.pretix.eu (Finnish) 2020-10-16 22:34:57 +02:00
Raphael Michel
f7e0c76f0f Fix typo 2020-10-16 22:34:44 +02:00
Raphael Michel
02c59f85d9 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-10-16 22:26:19 +02:00
Raphael Michel
6257b8cb54 Fix incorrect link on position page 2020-10-16 22:25:22 +02:00
Raphael Michel
fec682dddb Allow to require a verified email to download tickets 2020-10-16 22:10:37 +02:00
Raphael Michel
ff74f13fce Add ZVT to word list 2020-10-16 21:39:08 +02:00
Raphael Michel
d0d84f2a13 Fix test case 2020-10-16 10:35:01 +02:00
Raphael Michel
bf59ce2661 Add SubEvent.last_modified 2020-10-15 18:32:10 +02:00
Raphael Michel
b4a7729cb5 Fix duplicate invoice cancellation when changing free order to paid 2020-10-14 18:08:12 +02:00
Raphael Michel
f2e5e89970 Order import: Allow to reference question options by value 2020-10-14 16:29:32 +02:00
Raphael Michel
4fd773caf6 Change calendar restriction from "100 events" to "50 future events" 2020-10-14 11:39:40 +02:00
Raphael Michel
6402f0d86e Add addresses to check-in lists 2020-10-14 11:34:41 +02:00
Raphael Michel
f5d93eaffa s/WhiteList/AllowList/g 2020-10-14 11:23:47 +02:00
Raphael Michel
3f40a8e6fa Fix import of attendee addresses 2020-10-14 11:09:41 +02:00
Raphael Michel
b947467589 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-10-13 18:13:07 +02:00
Raphael Michel
810f3d7d31 Minor improvements to security profiles 2020-10-13 18:02:56 +02:00
Raphael Michel
e8f3ad633a Add device security profiles (#1806) 2020-10-13 17:40:25 +02:00
Raphael Michel
301849f771 Merge pull request #1800 from pretix-translations/weblate-pretix-pretix 2020-10-13 16:30:40 +02:00
Tobias Sundgren
ee6a595e26 Translated on translate.pretix.eu (Swedish)
Currently translated at 11.0% (414 of 3762 strings)

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

powered by weblate
2020-10-12 12:22:17 +02:00
Tobias Sundgren
980296e38a Translated on translate.pretix.eu (Swedish)
Currently translated at 10.8% (405 of 3762 strings)

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

powered by weblate
2020-10-12 12:22:17 +02:00
Tobias Sundgren
0a62ee0e33 Translated on translate.pretix.eu (Swedish)
Currently translated at 10.6% (400 of 3762 strings)

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

powered by weblate
2020-10-12 12:22:17 +02:00
Raphael Michel
afc1013d69 Fix infinite price adjustment loop when combining free prices, country-dependent tax rates, and vouchers 2020-10-12 12:15:58 +02:00
Raphael Michel
16cf3cec76 Add tests for device API 2020-10-12 12:15:58 +02:00
Raphael Michel
0105b9642d Add compat function for date.fromisocalendar for Python 3.6-3.7 2020-10-12 12:15:58 +02:00
Raphael Michel
3ec15fa529 Fix widget test cases 2020-10-11 20:42:35 +02:00
Raphael Michel
703eebab47 Remove tests for deleted pretixdroid code 2020-10-11 20:32:25 +02:00
Raphael Michel
3aec3a52fc Merge pull request #1805 from Chessmasterrr/patch-1
Update plugin-development documentation
2020-10-11 14:48:11 +02:00
Chessmaster
fd93cac8cf Update plugins.rst
Fixed small typo and update references
2020-10-11 13:58:01 +02:00
Raphael Michel
e139924696 Add reason based classes to events in widget 2020-10-09 16:12:05 +02:00
Raphael Michel
da725c0bff Backend forms: Do not allow to click empty labels 2020-10-09 12:19:44 +02:00
Raphael Michel
dca61447cf Fix widget bug with large number of variations 2020-10-08 16:19:48 +02:00
Raphael Michel
f54bf3f1ea Specific error message for payment_ended 2020-10-08 09:28:53 +02:00
Raphael Michel
3cef9bac26 Restrict collapsed days to large numbers 2020-10-07 15:02:12 +02:00
Raphael Michel
4f20849e4b Rewrite subquery in gift card list 2020-10-07 10:53:59 +02:00
Raphael Michel
758981fc1b Use internal name of product in OrderFilterForm 2020-10-07 10:49:20 +02:00
Raphael Michel
9b671d6370 Week calendar: Collapse days on mobile (except the current day) 2020-10-07 10:41:30 +02:00
Raphael Michel
3bfaf55094 Check-in list API: Show items in event default language 2020-10-07 10:04:26 +02:00
Raphael Michel
3708dab656 Add allow_entry_after_exit field to subevent editing 2020-10-07 09:25:53 +02:00
Raphael Michel
14ad7716bd Fix missing copy button for add-ons if only system fields match 2020-10-06 18:45:53 +02:00
Raphael Michel
985d3c3993 Add date column to web-based check-in list 2020-10-06 18:45:53 +02:00
Raphael Michel
fa2222e629 Remove pretixdroid code 2020-10-06 18:45:53 +02:00
Raphael Michel
13eabdd7f4 Fix missing date column in list of refunds 2020-10-06 18:45:53 +02:00
Raphael Michel
4fd748e6d9 Merge pull request #1796 from pretix-translations/weblate-pretix-pretix 2020-10-06 16:00:19 +02:00
Tobias Sundgren
f48ded0165 Translated on translate.pretix.eu (Swedish)
Currently translated at 8.1% (305 of 3762 strings)

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

powered by weblate
2020-10-06 15:02:14 +02:00
Tobias Sundgren
903ea09140 Translated on translate.pretix.eu (Swedish)
Currently translated at 8.1% (304 of 3762 strings)

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

powered by weblate
2020-10-06 15:02:14 +02:00
Maarten van den Berg
fadc610b8e Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3762 of 3762 strings)

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

powered by weblate
2020-10-06 15:02:14 +02:00
Maarten van den Berg
ac4b8a392b Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3762 of 3762 strings)

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

powered by weblate
2020-10-06 15:02:14 +02:00
ethan.wang
22d986a709 Translated on translate.pretix.eu (Chinese (Simplified))
Currently translated at 82.4% (3100 of 3762 strings)

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

powered by weblate
2020-10-06 15:02:14 +02:00
Martin Gross
bca34145f1 Translated on translate.pretix.eu (Danish)
Currently translated at 42.6% (1603 of 3762 strings)

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

powered by weblate
2020-10-06 15:02:14 +02:00
Mie Frydensbjerg
97af6f7311 Translated on translate.pretix.eu (Danish)
Currently translated at 42.6% (1603 of 3762 strings)

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

powered by weblate
2020-10-06 15:02:14 +02:00
Martin Gross
67156a67aa Translated on translate.pretix.eu (Danish)
Currently translated at 42.6% (1602 of 3762 strings)

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

powered by weblate
2020-10-06 15:02:14 +02:00
Raphael Michel
4ed872d4ef Calendar stuff is hard 2020-10-06 15:02:05 +02:00
Martin Gross
5cd6cba0a2 Fix accidential removal of gitcard-filter 2020-10-06 14:46:53 +02:00
Martin Gross
72bb5bd177 Only include Confirmed and Refunded Payments/completed Refunds in Giftcard-report 2020-10-06 14:30:39 +02:00
Raphael Michel
d392e14a96 Fix date() usage 2020-10-06 12:50:37 +02:00
Raphael Michel
d7459b3b83 Fix years with 52 weeks 2020-10-06 12:49:02 +02:00
Martin Gross
b4778b5845 Allow to unselect product or quota from voucher (#1799) 2020-10-06 09:08:15 +02:00
Raphael Michel
5a09759cb9 Fix *yet* another time range issue 2020-10-05 17:39:41 +02:00
Raphael Michel
2fbaa90d76 Clarify docstring 2020-10-05 17:33:19 +02:00
Raphael Michel
93f10d33a9 Fix breakpoints of calendar week selection 2020-10-05 17:32:12 +02:00
Raphael Michel
e9a972ad60 Show dates in calendar week selection 2020-10-05 17:29:19 +02:00
Raphael Michel
a31f0c1bc8 Fix one more bug in calendar view 2020-10-05 17:29:11 +02:00
Raphael Michel
1b0c2f3bb7 Fix bug in previous commit 2020-10-05 17:17:28 +02:00
Raphael Michel
766428c469 Improve support for cross-midnight time slots 2020-10-05 17:14:49 +02:00
Raphael Michel
d85583f70a Fix missing field description 2020-10-05 17:13:39 +02:00
Raphael Michel
ee801bd717 Safety guard against unpaid giftcards 2020-10-05 16:09:24 +02:00
Martin Gross
af0e8ec992 Fix test, Ref: 3cbcf663e5 2020-10-05 13:45:53 +02:00
Raphael Michel
bc3325c1cb Order overview PDF: Print net and gross 2020-10-02 16:45:47 +02:00
Martin Gross
753c331887 Shutting up isort 2020-10-02 14:04:22 +02:00
Martin Gross
cfc9055ec1 Fix giftcard API doc 2020-10-02 13:58:19 +02:00
Raphael Michel
c131a2ac3a Import: Do not allow duplicate secrets even across events 2020-10-02 10:29:27 +02:00
Raphael Michel
17fe3355d1 pretixPOS: ZVT support 2020-09-29 19:10:48 +02:00
Martin Gross
0381d42d41 Fix flag for Swedish language (fixes #1795) 2020-09-29 11:11:25 +02:00
Raphael Michel
b73db911e9 Add profile OAuth scope 2020-09-28 16:11:43 +02:00
Raphael Michel
1f3d4a2810 Fix name finding in placeholders 2020-09-28 16:11:30 +02:00
Raphael Michel
3cbcf663e5 OAuth: Add profile-only access 2020-09-28 16:01:59 +02:00
Raphael Michel
ae0637a3d6 Merge pull request #1789 from pretix-translations/weblate-pretix-pretix 2020-09-28 12:15:22 +02:00
Raphael Michel
a6a9c08a0a Translated on translate.pretix.eu (German)
Currently translated at 99.9% (3761 of 3762 strings)

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

powered by weblate
2020-09-28 12:15:08 +02:00
Raphael Michel
f3b3d0b8f7 Translated on translate.pretix.eu (German (informal))
Currently translated at 99.9% (3761 of 3762 strings)

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

powered by weblate
2020-09-28 12:14:57 +02:00
Raphael Michel
9490f20a6c Revert "Do not allow to cancel gift card positions"
This reverts commit 951e99d0da.
2020-09-28 12:13:04 +02:00
Raphael Michel
4555a917b2 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-09-28 12:10:15 +02:00
Raphael Michel
951e99d0da Do not allow to cancel gift card positions 2020-09-28 11:51:06 +02:00
Raphael Michel
d0b002cf0c Issue gift cards after order change 2020-09-28 11:48:55 +02:00
Felix Rindt
4fb0b948ec Add name scheme with salutation (#1779) 2020-09-28 11:41:59 +02:00
Felix Rindt
2384478b45 Support required-if and display-dependency for more elements (#1788) 2020-09-28 10:42:03 +02:00
Raphael Michel
f3a2d0cb03 Merge pull request #1787 from pretix-translations/weblate-pretix-pretix 2020-09-28 09:24:07 +02:00
Maarten van den Berg
1b11d88442 Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3757 of 3757 strings)

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

powered by weblate
2020-09-28 07:00:13 +02:00
Maarten van den Berg
954951ddfa Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3757 of 3757 strings)

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

powered by weblate
2020-09-28 07:00:12 +02:00
Raphael Michel
c01b96bdfc Allow to sort list of quotas 2020-09-25 19:08:42 +02:00
Raphael Michel
c78e88a1ba Allow to create devices through the API (#1785) 2020-09-25 18:16:18 +02:00
Raphael Michel
4cb18218b2 Do not show event time on invoice 2020-09-25 18:01:50 +02:00
Raphael Michel
450d017c32 Order API: Add `send_email` parameter to mark_paid and
payments/confirm
2020-09-25 15:12:06 +02:00
Raphael Michel
655977e33d Fix typo 2020-09-24 12:55:51 +02:00
Raphael Michel
0cb0620df0 Fix crash from previous deployment 2020-09-24 12:36:00 +02:00
Raphael Michel
c8bf069650 Merge pull request #1784 from pretix-translations/weblate-pretix-pretix 2020-09-24 12:16:28 +02:00
Raphael Michel
e65087fd68 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3757 of 3757 strings)

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

powered by weblate
2020-09-24 12:16:16 +02:00
Raphael Michel
d67d389b9d Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3757 of 3757 strings)

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

powered by weblate
2020-09-24 12:16:16 +02:00
Raphael Michel
0e805e50f9 Widget: consistent rendering of date ranges 2020-09-24 12:15:54 +02:00
Raphael Michel
a4d133731e Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-09-24 10:59:11 +02:00
Raphael Michel
c74e7fd4fb Show time slot end time in calendars 2020-09-24 10:58:48 +02:00
Raphael Michel
0e405d2327 Widget: Align wording with standalone calendar 2020-09-24 10:58:48 +02:00
Raphael Michel
035c707427 Calendar: Show fully booked instead of sold out for free events 2020-09-24 10:58:48 +02:00
Raphael Michel
787e7ec993 Merge pull request #1783 from pretix-translations/weblate-pretix-pretix 2020-09-24 10:58:38 +02:00
Svyatoslav
09a9b4a456 Translated on translate.pretix.eu (Russian)
Currently translated at 78.1% (100 of 128 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/ru/

powered by weblate
2020-09-23 19:00:12 +02:00
Svyatoslav
e2547c2761 Translated on translate.pretix.eu (Russian)
Currently translated at 29.7% (1116 of 3756 strings)

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

powered by weblate
2020-09-23 19:00:12 +02:00
Martin Gross
c7b2baf40f Correct file type for shredder export zip (Fixes #1781, Z#153584) 2020-09-23 13:41:47 +02:00
Felix Rindt
59595c9db8 Add setting to disable copy-answers-button (#1778) 2020-09-22 18:09:44 +02:00
Nils Schneider
2f8baecd68 Fix #1127 -- Set loglevel from configfile (#1777) 2020-09-22 17:40:56 +02:00
Raphael Michel
a76f74b161 Download reminders: Fix incomplete only() call 2020-09-21 18:26:38 +02:00
Raphael Michel
f2518101ef Fix broken test after deprecation of pretixdroid 2020-09-21 18:23:25 +02:00
Raphael Michel
ec667545e8 Fix crash/bug in order data export 2020-09-21 18:23:25 +02:00
Raphael Michel
afb789226c Webhooks: Fix crash if object was deleted in meantime 2020-09-21 18:23:25 +02:00
Felix Rindt
bca7a6db93 Mail service: Allow to attach arbitrary cached files (#1774) 2020-09-21 17:45:29 +02:00
Felix Rindt
429ad4da37 Refactor primary color to settings variable (#1775) 2020-09-21 17:44:43 +02:00
Raphael Michel
cd6e6004af Merge pull request #1773 from pretix-translations/weblate-pretix-pretix 2020-09-21 17:43:59 +02:00
Tobias Sundgren
e9d5665a3d Translated on translate.pretix.eu (Swedish)
Currently translated at 7.0% (262 of 3756 strings)

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

powered by weblate
2020-09-19 20:00:13 +02:00
Tobias Sundgren
4cbc30a7ea Translated on translate.pretix.eu (Swedish)
Currently translated at 6.9% (261 of 3756 strings)

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

powered by weblate
2020-09-18 18:20:26 +02:00
Tobias Sundgren
2b0388c2ee Translated on translate.pretix.eu (Swedish)
Currently translated at 5.8% (218 of 3756 strings)

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

powered by weblate
2020-09-18 18:20:26 +02:00
Tobias Sundgren
06b8826e57 Translated on translate.pretix.eu (Swedish)
Currently translated at 100.0% (128 of 128 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/sv/

powered by weblate
2020-09-18 18:20:26 +02:00
Tobias Sundgren
7c6f0f45a3 Translated on translate.pretix.eu (Swedish)
Currently translated at 5.7% (213 of 3756 strings)

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

powered by weblate
2020-09-18 18:20:26 +02:00
Tobias Sundgren
93399f51b3 Translated on translate.pretix.eu (Swedish)
Currently translated at 100.0% (128 of 128 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/sv/

powered by weblate
2020-09-18 18:20:26 +02:00
Pernilla Näsfors Östmar
87bd54b233 Translated on translate.pretix.eu (Swedish)
Currently translated at 100.0% (128 of 128 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/sv/

powered by weblate
2020-09-18 18:20:26 +02:00
Tobias Sundgren
3fb237f434 Translated on translate.pretix.eu (Swedish)
Currently translated at 5.6% (212 of 3756 strings)

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

powered by weblate
2020-09-18 18:20:26 +02:00
Maarten van den Berg
d7640d25f5 Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3756 of 3756 strings)

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

powered by weblate
2020-09-18 18:20:26 +02:00
Maarten van den Berg
1669d3f5c7 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3756 of 3756 strings)

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

powered by weblate
2020-09-18 18:20:26 +02:00
Maarten van den Berg
5aa3f3e772 Translated on translate.pretix.eu (Dutch)
Currently translated at 99.6% (3741 of 3756 strings)

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

powered by weblate
2020-09-18 18:20:26 +02:00
Martin Gross
b7a2f0257f Translated on translate.pretix.eu (French)
Currently translated at 80.5% (103 of 128 strings)

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

powered by weblate
2020-09-18 18:20:26 +02:00
Martin Gross
5c0f29f959 Translated on translate.pretix.eu (French)
Currently translated at 61.2% (2297 of 3756 strings)

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

powered by weblate
2020-09-18 18:20:26 +02:00
Raphael Michel
59655dca82 Fix redemption of multiple gift cards 2020-09-18 18:20:08 +02:00
Raphael Michel
af2b4ebb4b Properly deprecate pretixdroid 2020-09-18 16:28:19 +02:00
Martin Gross
d5b3528f92 Localize Stripe Elements to Order Page Language 2020-09-18 16:26:10 +02:00
Martin Gross
0a1b41235b Add Seat to Order Data Export - but better 2020-09-18 16:25:49 +02:00
Felix Rindt
8ca544064b Fix #1759: order import increasing positionids (#1776) 2020-09-18 16:16:33 +02:00
Raphael Michel
1e2b305376 Quota and check-in list list: Include time of subevent 2020-09-18 13:12:04 +02:00
Raphael Michel
bfa20e995a Order API: Include ID of check-in 2020-09-18 13:12:04 +02:00
Martin Gross
e7fd0f116b Add Seat to Order Data Export 2020-09-17 09:53:26 +02:00
Raphael Michel
e836da09cd Fix bug in a combination of timeouts and custom auth backends 2020-09-16 18:09:53 +02:00
Raphael Michel
22c6553a48 Fix API for organizers and events with a . in their slug 2020-09-16 16:37:55 +02:00
pretix translation bot
ea5fc3df40 Translations update from Weblate (#1772)
Co-authored-by: Martin Gross <martin@pc-coholic.de>
2020-09-15 10:38:28 +02:00
pretix translation bot
7977b6dc15 Translations update from Weblate (#1771)
Co-authored-by: Mie Frydensbjerg <mif@aarhus.dk>
Co-authored-by: Maarten van den Berg <maartenberg1@gmail.com>
2020-09-15 09:55:20 +02:00
Raphael Michel
59df5fe052 Fix manifest config 2020-09-14 19:00:29 +02:00
Raphael Michel
c4e00e7601 Bump to 3.12.0.dev0 2020-09-14 18:23:42 +02:00
Raphael Michel
b3fd515652 Bump to 3.11.0 2020-09-14 18:22:03 +02:00
Raphael Michel
6ee54f6cc1 Add sentence to structure guide 2020-09-14 18:21:09 +02:00
Raphael Michel
403dc9cf98 Sort exported check-ins 2020-09-14 16:28:56 +02:00
Raphael Michel
eb462b1950 Fix default item 2020-09-14 16:13:13 +02:00
Raphael Michel
cb6d50e570 Merge pull request #1770 from pretix-translations/weblate-pretix-pretix 2020-09-14 14:04:01 +02:00
Raphael Michel
32a2a99b7b Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3756 of 3756 strings)

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

powered by weblate
2020-09-14 14:00:24 +02:00
Raphael Michel
7859985ff0 Translated on translate.pretix.eu (German)
Currently translated at 99.9% (3755 of 3756 strings)

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

powered by weblate
2020-09-14 14:00:23 +02:00
Raphael Michel
7b7cf76028 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-09-14 14:00:14 +02:00
Raphael Michel
4fda9b2205 Fix typo 2020-09-14 13:59:36 +02:00
Raphael Michel
ede93f1669 Extend word list 2020-09-14 13:47:39 +02:00
Raphael Michel
4af4dbd9cf Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-09-14 13:46:26 +02:00
Raphael Michel
820f6d52a5 Fix incorrect help text 2020-09-14 13:45:58 +02:00
Raphael Michel
8d04974caa Merge pull request #1769 from pretix-translations/weblate-pretix-pretix 2020-09-14 13:44:58 +02:00
Raphael Michel
8021c9e865 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3750 of 3750 strings)

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

powered by weblate
2020-09-14 13:44:33 +02:00
Raphael Michel
874ea6750b Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3750 of 3750 strings)

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

powered by weblate
2020-09-14 13:44:33 +02:00
Felix Rindt
8f2c125435 Payment term in minutes (#1760)
Co-authored-by: Raphael Michel <michel@rami.io>
2020-09-14 13:44:28 +02:00
Raphael Michel
2f21dc8c3c Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-09-14 13:22:10 +02:00
Raphael Michel
05135c779c Add export of all check-in scans 2020-09-14 13:21:24 +02:00
Raphael Michel
f08f06ddff Fix infinite recursion 2020-09-11 18:30:35 +02:00
Raphael Michel
9c28537d1c CSV exports: Fix running when file is opened in binary mode 2020-09-11 09:17:11 +02:00
Raphael Michel
95b1a4a434 Fix German language error 2020-09-10 20:23:14 +02:00
Raphael Michel
019801e9dc Cronjob: Fix issue in waiting list handling 2020-09-09 22:15:41 +02:00
Martin Gross
3e97fd87d1 Fix typo in process_waitinglist 2020-09-09 22:10:17 +02:00
Raphael Michel
8bcc0e4641 Cronjob: Try sync execute for quotas 2020-09-09 21:53:52 +02:00
Raphael Michel
878becfee9 Cronjob: Allow keyboard interrupt 2020-09-09 21:52:03 +02:00
Raphael Michel
273c34999c Cronjob: Ignore old events for waiting list 2020-09-09 21:50:55 +02:00
Raphael Michel
3f4f9d98de Increase length of multiple-choice country fields 2020-09-09 20:46:42 +02:00
Raphael Michel
d703eeb770 Show device serial in backend 2020-09-09 16:30:14 +02:00
Felix Rindt
b7754d8737 Command line exporter: support multiple and all events (#1766) 2020-09-09 16:19:12 +02:00
Raphael Michel
ed62ecaccb Adjust "mobile" size of widget 2020-09-09 09:22:06 +02:00
Raphael Michel
5c3ef3f2b9 Widget: Fix CSS issue during load 2020-09-08 18:46:47 +02:00
Raphael Michel
f3282807e2 Add documentation for check-in type 2020-09-08 18:26:50 +02:00
Raphael Michel
52944ff3a3 Fix obscure crash in log entry view 2020-09-07 11:27:23 +02:00
Raphael Michel
23a9018988 Remove break-all from email CSS 2020-09-07 11:10:11 +02:00
Raphael Michel
936c771d5e Fix FF Android detection 2020-09-07 10:31:23 +02:00
Raphael Michel
d064a7affa Add verbose output to runperiodic management command 2020-09-06 22:34:40 +02:00
Raphael Michel
4b894eb433 Merge pull request #1764 from pretix/seat-orgchoice
Support seat choice by organizer
2020-09-06 19:06:33 +02:00
Raphael Michel
6c7ef89779 Add docs for pretix Webinar API 2020-09-06 17:26:20 +02:00
Raphael Michel
e8f3a66a8e Add signal pretix.control.signals.event_dashboard_top 2020-09-06 17:25:47 +02:00
Raphael Michel
d999971249 Allow to disable self-choice seating 2020-09-06 17:25:47 +02:00
Raphael Michel
fb701f25f4 Merge pull request #1761 from pretix-translations/weblate-pretix-pretix 2020-09-04 15:40:20 +02:00
Svyatoslav
913596459a Translated on translate.pretix.eu (Russian)
Currently translated at 29.8% (1114 of 3733 strings)

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

powered by weblate
2020-09-04 05:01:43 +02:00
Svyatoslav
04e9ea1ae7 Translated on translate.pretix.eu (Latvian)
Currently translated at 29.5% (1100 of 3733 strings)

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

powered by weblate
2020-09-04 05:01:43 +02:00
Maarten van den Berg
5dc09019ff Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3733 of 3733 strings)

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

powered by weblate
2020-09-04 05:01:43 +02:00
Maarten van den Berg
7c3671b383 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3733 of 3733 strings)

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

powered by weblate
2020-09-04 05:01:43 +02:00
Raphael Michel
b91c16538e Improve mobile shopping cart experience 2020-09-04 05:01:22 +02:00
Raphael Michel
9ba517109d Allow to inspect logs by device 2020-09-03 14:40:19 +02:00
Raphael Michel
5f86fbc21d Allow to filter event log by device 2020-09-03 14:30:21 +02:00
Raphael Michel
fae35cc56f Improve error handling of check-in scans 2020-09-03 14:30:18 +02:00
Raphael Michel
78c5eb4516 Merge branch 'master' of github.com:pretix/pretix 2020-09-02 18:58:22 +02:00
Raphael Michel
860f4c36a4 Name length validation 2020-09-02 18:13:42 +02:00
Martin Gross
311dcfaab0 Add notice that list-view is not available for eventseries with more than 100 dates. 2020-09-02 15:13:59 +02:00
Martin Gross
83a6041a32 Expose Order Time in OrderData-Export 2020-09-02 11:07:50 +02:00
Raphael Michel
a2f9bb73ad Fix failing tests 2020-09-01 22:13:19 +02:00
Raphael Michel
fb92c9dd64 Remove obsolete restriction from documentation 2020-09-01 21:52:03 +02:00
Raphael Michel
aa1910fd70 Add pseudonymization ID to search fields 2020-09-01 16:51:07 +02:00
Raphael Michel
f66c266ff7 Fix debugging code 2020-09-01 15:53:56 +02:00
Raphael Michel
7cc5179e85 Fix #1040 -- Work around firefox bug in widget 2020-09-01 15:46:31 +02:00
Raphael Michel
f633cc3103 Fix errors around subevent editing 2020-09-01 15:06:03 +02:00
Raphael Michel
5e212c83e4 Add Kosovo to country list 2020-08-31 13:23:13 +02:00
Raphael Michel
2d5768aa20 Fix missing fields in CheckinListOrderPositionSerializer 2020-08-29 12:38:23 +02:00
Martin Gross
8ea66bc05b First try at working around Stripe's iDEAL idempotency issues 2020-08-28 23:21:35 +02:00
Raphael Michel
eba17e22fb Show beneficiary on order confirmation page 2020-08-27 14:13:31 +02:00
Raphael Michel
620c956ef8 Delete vouchers when deleting events 2020-08-27 12:41:12 +02:00
Raphael Michel
35debba865 Further attempt at more efificent query 2020-08-26 16:42:34 +02:00
Raphael Michel
a635ea527e Fix failing tests 2020-08-26 16:33:31 +02:00
Raphael Michel
6e76db40ed Order API: More efficient query for ?subevent_after_qs= 2020-08-26 15:43:22 +02:00
Raphael Michel
7956074d8b API: Add exclude parameter to check-in lists 2020-08-26 15:20:44 +02:00
Raphael Michel
7a3418e32f SubEvent: Automatically bump all orders when date is changed 2020-08-26 11:00:43 +02:00
Raphael Michel
0bfc436970 Check-in list: Redirect back toe diting after save 2020-08-25 16:19:11 +02:00
Raphael Michel
b6fc02255d Allow to clone check-in lists 2020-08-25 15:52:46 +02:00
Raphael Michel
a06f94fde1 Clarify "disabled" checkbox 2020-08-25 14:08:27 +02:00
Raphael Michel
d5073f416c Merge pull request #1757 from pretix-translations/weblate-pretix-pretix 2020-08-25 12:20:32 +02:00
Dennis Lichtenthäler
b32ea0dec4 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3733 of 3733 strings)

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

powered by weblate
2020-08-25 12:15:52 +02:00
Dennis Lichtenthäler
932851cf96 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3733 of 3733 strings)

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

powered by weblate
2020-08-25 12:15:51 +02:00
Dennis Lichtenthäler
4513cd7ec3 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (128 of 128 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/de_Informal/

powered by weblate
2020-08-25 11:54:59 +02:00
Dennis Lichtenthäler
261878b3fe Translated on translate.pretix.eu (German)
Currently translated at 100.0% (128 of 128 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/de/

powered by weblate
2020-08-25 11:54:59 +02:00
Dennis Lichtenthäler
31590f7e6c Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3733 of 3733 strings)

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

powered by weblate
2020-08-25 11:54:59 +02:00
Dennis Lichtenthäler
ebe7560f14 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3733 of 3733 strings)

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

powered by weblate
2020-08-25 11:54:58 +02:00
Raphael Michel
c5b722ebc1 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-08-25 11:54:50 +02:00
Raphael Michel
5ea961819d Remove field Seat.name 2020-08-25 11:54:19 +02:00
Martin Gross
983d734c6a Add .swi to allowed MT940 file extensions 2020-08-25 11:30:51 +02:00
Raphael Michel
c1bca2f207 isort fix 2020-08-24 17:37:38 +02:00
Raphael Michel
118f0f55e9 Widget: Do not disable products with require_voucher if a voucher is
given
2020-08-24 17:31:57 +02:00
Raphael Michel
d1146add38 Allow to re-check-in someone through the backend 2020-08-24 17:27:06 +02:00
Raphael Michel
fc18788cb8 Order API: Add `subevent_after` query filter 2020-08-21 19:06:05 +02:00
Raphael Michel
a2eb4444b4 Order API: Add `exclude` query parameter 2020-08-21 18:38:24 +02:00
Raphael Michel
606d13e303 Check-in list API: Add `subevent_match` filter 2020-08-21 17:20:37 +02:00
Raphael Michel
d90fcee5e1 Fix crash related to vouchers and seats
PRETIXEU-2PY
2020-08-21 16:12:04 +02:00
Raphael Michel
e9a4c3845a Fix crash when processing refund for empty order 2020-08-21 16:07:52 +02:00
Raphael Michel
018fac2361 Merge pull request #1756 from pretix/felix-patch 2020-08-21 15:19:45 +02:00
Raphael Michel
41dd71879e Allow to filter items with query parameters on event page 2020-08-21 15:18:37 +02:00
Felix Rindt
738e5d07aa reorder signal docs 2020-08-20 20:42:31 +02:00
Felix Rindt
a22451140b fix typo 2020-08-20 20:42:23 +02:00
Raphael Michel
6759506838 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-08-20 13:52:24 +02:00
Raphael Michel
82bb3f3b6e RelativeDate: Allow to specify "minutes before x" 2020-08-20 13:51:55 +02:00
Raphael Michel
cdb8a92a47 Merge pull request #1754 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-08-20 13:49:28 +02:00
Svyatoslav
7597344897 Translated on translate.pretix.eu (Russian)
Currently translated at 29.8% (1110 of 3731 strings)

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

powered by weblate
2020-08-19 11:30:39 +02:00
Raphael Michel
c94d384e86 Improve algorithm for {name} placeholder (#1745)
Co-authored-by: Felix Rindt <felix@rindt.me>
2020-08-19 11:30:34 +02:00
Raphael Michel
b2357b7e29 Merge pull request #1751 from pretix-translations/weblate-pretix-pretix 2020-08-19 11:30:02 +02:00
Raphael Michel
c7d1e5d069 Allow to reduce the interval of some cronjobs (#1753) 2020-08-19 11:29:53 +02:00
Svyatoslav
754d498938 Translated on translate.pretix.eu (Russian)
Currently translated at 29.5% (1102 of 3731 strings)

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

powered by weblate
2020-08-18 18:21:44 +02:00
Maarten van den Berg
ec7fc05108 Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3731 of 3731 strings)

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

powered by weblate
2020-08-18 17:34:51 +02:00
Maarten van den Berg
bbba0df6c4 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3731 of 3731 strings)

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

powered by weblate
2020-08-18 17:34:51 +02:00
Maarten van den Berg
65e87455ec Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 98.5% (3674 of 3731 strings)

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

powered by weblate
2020-08-18 17:34:51 +02:00
Maarten van den Berg
e6d09baacc Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3731 of 3731 strings)

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

powered by weblate
2020-08-18 17:34:51 +02:00
Raphael Michel
fbd38fef58 Fix issue in previous commit 2020-08-18 17:34:39 +02:00
Raphael Michel
253f944951 Quota cache refresh: work in chunks 2020-08-18 16:46:37 +02:00
Raphael Michel
7f30f753d7 Actually do not show date on invoices if not shown on frontpage 2020-08-18 13:57:35 +02:00
Raphael Michel
8789a42dc1 Fix tax calculation for negative fees 2020-08-17 15:56:03 +02:00
Raphael Michel
e7740b1735 Fix crash on addons without tax rule
PRETIXEU-2MZ
2020-08-17 09:39:59 +02:00
Raphael Michel
586da71a64 Remove Raphael's personal mail address from the README 2020-08-16 19:21:24 +02:00
Martin Gross
68697f0c6a Update po files
[CI skip]

Signed-off-by: Martin Gross <gross@rami.io>
2020-08-13 14:29:53 +02:00
pretix translation bot
a2e1bc9c20 Translations update from Weblate (#1744)
Co-authored-by: Maarten van den Berg <maartenberg1@gmail.com>
Co-authored-by: Martin Gross <martin@pc-coholic.de>
2020-08-13 14:26:14 +02:00
Martin Gross
89a82d75a9 Add eMail-Template for free approval orders (#1750)
Co-authored-by: Felix Rindt <felix@rindt.me>
2020-08-13 14:24:39 +02:00
Martin Gross
a2414081af Widget: Do not preset item quantity to 1 if there is only one item but an active seating plan 2020-08-13 11:21:24 +02:00
Martin Gross
c812d39b39 Filter BankImportJobs explicitly by organizer 2020-08-13 11:10:27 +02:00
Martin Gross
c6f3fdd8e4 Move reserved explanation out of tooltip 2020-08-12 16:37:59 +02:00
Martin Gross
30e0f5ebc7 Show seat in checkout_question-fragment when adequate 2020-08-11 17:54:52 +02:00
Martin Gross
f767f2f644 Fix encoding of Umlauts in widget (and hopefully don't break it...) 2020-08-10 17:23:05 +02:00
Martin Gross
750c3c5201 Allow for gt and gte selection of change_allow_user_price (#1746) 2020-08-07 11:54:27 +02:00
Raphael Michel
7d9220ae3e Fix issue in 69879bdae 2020-08-06 10:21:57 +02:00
Raphael Michel
69879bdae0 Fix API bug: Do not delete SubEventItems on PATCH request 2020-08-06 09:28:35 +02:00
Raphael Michel
0e245b41ee Fix duplicate call of form_success 2020-08-05 15:18:40 +02:00
Raphael Michel
2839ee1ffd Fix error in b6f47f6f4 2020-08-05 14:41:12 +02:00
Raphael Michel
d72a03c434 Allow to adjust ticket cache duration 2020-08-05 13:23:20 +02:00
Raphael Michel
b6f47f6f4a API: More validation in custom fields on event serializers 2020-08-05 11:26:11 +02:00
Raphael Michel
ca2dd0d6b6 Limit maximum length of event names in email senders 2020-08-05 11:23:27 +02:00
Raphael Michel
c4415beb8c Force Django version to be at least 3.0.9 2020-08-05 11:22:35 +02:00
Raphael Michel
35c8684cd4 Prevent issues with order fees and TaxRule.zero() 2020-08-04 14:07:26 +02:00
Raphael Michel
9bb5c57792 Fix possible crash in migration 2020-08-04 11:47:55 +02:00
Felix Rindt
1c8699662d Allow to create invoices before bank transfer runs (#1734)
Co-authored-by: Raphael Michel <michel@rami.io>
2020-08-04 10:53:59 +02:00
Felix Rindt
9b367cb28b Allow to set multiple confirm texts (#1735) 2020-08-04 10:20:55 +02:00
Felix Rindt
896ba5b06b Fix #1740 - Do not group gift card positions (#1743)
Co-authored-by: Raphael Michel <michel@rami.io>
2020-08-04 10:18:04 +02:00
Raphael Michel
8f3dbba859 PDF renderer: Fail silently if bidirectional string handling failes 2020-08-03 18:20:03 +02:00
Felix Rindt
bf5b92c465 Copy answers button for addon products (#1733) 2020-08-03 18:15:23 +02:00
Raphael Michel
aef09003d9 Make global_html_* signals actually global 2020-08-03 12:32:29 +02:00
Raphael Michel
9d22e833a6 Merge pull request #1737 from pretix-translations/weblate-pretix-pretix 2020-07-31 09:25:00 +02:00
Abdullah
1e121c0f75 Translated on translate.pretix.eu (Arabic)
Currently translated at 78.1% (100 of 128 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/ar/

powered by weblate
2020-07-31 09:24:49 +02:00
Abdullah
373755a502 Translated on translate.pretix.eu (Arabic)
Currently translated at 87.6% (3260 of 3720 strings)

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

powered by weblate
2020-07-31 09:24:49 +02:00
pajowu
6f694b60ca Add minimum postgres version to docs (#1738) 2020-07-31 09:24:43 +02:00
Felix Rindt
77f76195c8 isort 5.0 config/docs (#1736) 2020-07-30 17:57:26 +02:00
Raphael Michel
355dd4463b Fix typo in docs 2020-07-30 17:57:10 +02:00
Raphael Michel
c0c39223aa Addendum to c15344ced 2020-07-30 17:47:05 +02:00
Raphael Michel
db7f8d9658 Try to run apt-get update before installations 2020-07-30 16:33:14 +02:00
Raphael Michel
c15344ced2 Docker: Pass environment variables when calling supervisord 2020-07-30 16:22:37 +02:00
Raphael Michel
0f3f15a736 Upgrade requests version 2020-07-29 18:30:25 +02:00
Raphael Michel
478f6e3029 Add a !default command to our _variables.scss 2020-07-29 18:30:25 +02:00
Raphael Michel
4c77e2f16e Add signals global_html_head, global_html_page_header, and global_html_footer 2020-07-29 18:30:25 +02:00
Felix Rindt
80b6a3d27d Fix #1675 -- Allow '0' as answer to number questions (#1732)
Co-authored-by: Raphael Michel <michel@rami.io>
2020-07-28 16:32:06 +02:00
Raphael Michel
89e8d3d12f Allow to disable some e-mails depending on sales channel (#1726)
Co-authored-by: Raphael Michel <michel@rami.io>
2020-07-28 09:26:18 +02:00
Raphael Michel
baf8a4ae18 Update src/pretix/control/forms/event.py 2020-07-28 09:25:10 +02:00
Raphael Michel
2cdaf07c46 Update src/pretix/control/forms/event.py 2020-07-28 09:24:53 +02:00
Raphael Michel
cf76a2e24d Fix typo in docs 2020-07-28 09:23:44 +02:00
Raphael Michel
559b4a8e66 Merge pull request #1730 from pretix-translations/weblate-pretix-pretix 2020-07-27 18:04:19 +02:00
Abdullah
59bf11b98d Translated on translate.pretix.eu (Arabic)
Currently translated at 87.6% (3257 of 3720 strings)

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

powered by weblate
2020-07-27 18:03:45 +02:00
Yaling
5b3551fb60 Translated on translate.pretix.eu (Chinese (Simplified))
Currently translated at 82.8% (3081 of 3720 strings)

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

powered by weblate
2020-07-27 18:03:45 +02:00
Raphael Michel
72a5008513 Allow to remove a product from all sales channels 2020-07-27 18:03:26 +02:00
Raphael Michel
c5ace8447d Fix country fields always being required 2020-07-27 18:03:10 +02:00
Raphael Michel
28b82841c2 Use edgecase words correctly 2020-07-27 17:55:19 +02:00
Raphael Michel
fbe10a981b Add INV to edgecase words 2020-07-27 17:47:31 +02:00
Raphael Michel
21c22aa63a Revert "Next attempt to fix spellcheck"
This reverts commit fb4116012f.
2020-07-27 17:47:15 +02:00
Raphael Michel
fb4116012f Next attempt to fix spellcheck 2020-07-27 16:28:51 +02:00
Raphael Michel
53fe4a32cd PyPI CI: Add check-manifest and twine check 2020-07-27 16:25:23 +02:00
Raphael Michel
ff066898d4 Fix RTL issue 2020-07-27 16:25:23 +02:00
Felix Rindt
cbb848b3fa style 2020-07-24 18:47:59 +02:00
Felix Rindt
98dfdd8b01 no ugettext 2020-07-24 18:44:35 +02:00
Felix Rindt
0e95a7863f tests for placed and paid mails 2020-07-24 18:44:24 +02:00
Raphael Michel
0913f5bc18 Merge pull request #1729 from pretix/project-setup-things 2020-07-24 18:12:34 +02:00
Raphael Michel
d1eb4c4cce Add documentation on additional indices 2020-07-24 18:10:25 +02:00
Felix Rindt
4a0a3aff59 rename to download_reminder 2020-07-24 17:57:25 +02:00
Raphael Michel
83908fde45 [experimental] restructure order search query for different performance characteristics 2020-07-24 17:48:50 +02:00
Felix Rindt
143ac10991 rebase migration 2020-07-24 16:59:24 +02:00
Felix Rindt
413cbec4b9 code format 2020-07-24 16:58:05 +02:00
Felix Rindt
b168516d78 user guide 2020-07-24 16:58:05 +02:00
Felix Rindt
d0ccc42aff add test for ticket reminder (oops) 2020-07-24 16:58:05 +02:00
Felix Rindt
7aa793f4f7 fix name 2020-07-24 16:58:05 +02:00
Felix Rindt
1b48b519e3 add migration 2020-07-24 16:58:05 +02:00
Felix Rindt
5f502776b1 send canonical mails depending on sales channel 2020-07-24 16:58:05 +02:00
Felix Rindt
985e1ac9bf Fix TypeError: Unknown option(s) for shell command: skip_checks. 2020-07-24 16:53:51 +02:00
Felix Rindt
df1014d62f modernize isort config for v5.0 2020-07-24 15:55:24 +02:00
Felix Rindt
062afc42d3 change _decimal to decimal 2020-07-24 15:55:05 +02:00
Raphael Michel
1fb861a117 New attempt at improving CheckinList.checkin_count 2020-07-24 15:41:41 +02:00
Raphael Michel
0a2346778d Revert "Refactor query for check-in count"
This reverts commit 60eee25cd1.
2020-07-24 15:37:45 +02:00
Raphael Michel
605a21a0cf Typeahead: Remove ordering of orders to improve query performance 2020-07-24 15:29:26 +02:00
Raphael Michel
1cfec9cc99 Revert "Typeahead: No substring match in admin sessions"
This reverts commit 2626259492.
2020-07-24 15:28:14 +02:00
Raphael Michel
0a97b0ce67 Add progress bar for checkin list export 2020-07-24 13:54:38 +02:00
Raphael Michel
60eee25cd1 Refactor query for check-in count 2020-07-24 13:54:30 +02:00
Raphael Michel
779ec6c3f6 Metrics: Return accurate counts for less interesting models 2020-07-24 13:53:59 +02:00
Raphael Michel
988eb85c05 Fix exporter issue 2020-07-24 11:40:45 +02:00
Raphael Michel
556cb7c46d Add INV to wordlist 2020-07-24 11:01:29 +02:00
Raphael Michel
86e3c30633 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-07-24 10:44:45 +02:00
Raphael Michel
6276f213b9 Increae field size for CachedFile.file 2020-07-24 10:44:08 +02:00
Raphael Michel
524f6c9975 Merge pull request #1727 from pretix-translations/weblate-pretix-pretix 2020-07-24 10:43:45 +02:00
Andreas Teuber
125a14c8e9 Translated on translate.pretix.eu (Chinese (Simplified))
Currently translated at 82.9% (3080 of 3714 strings)

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

powered by weblate
2020-07-24 09:35:20 +02:00
Yaling
c7f0e6f652 Translated on translate.pretix.eu (Chinese (Simplified))
Currently translated at 82.9% (3080 of 3714 strings)

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

powered by weblate
2020-07-24 09:35:20 +02:00
Andreas Teuber
1e58ef6f9e Translated on translate.pretix.eu (Chinese (Simplified))
Currently translated at 82.2% (3052 of 3714 strings)

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

powered by weblate
2020-07-24 09:35:20 +02:00
Raphael Michel
41127ce978 Fix issue in OrderListExporter when mixing subevents with non-subevents 2020-07-24 09:35:11 +02:00
Raphael Michel
99b42d201e Add missing tqdm binary 2020-07-24 09:08:22 +02:00
Raphael Michel
265da6c746 Progress bar instead of acks_late for event cancellation 2020-07-23 21:54:03 +02:00
Raphael Michel
d58c8559fc Long-running async tasks: Expose running state 2020-07-23 21:39:13 +02:00
Raphael Michel
b5dca762f0 Cancelling events: Fix send_waitinglist flag 2020-07-23 21:38:58 +02:00
Raphael Michel
a310c33497 Add progress bar to some large exports 2020-07-23 21:35:58 +02:00
Raphael Michel
fc5c3caf66 Fix memory usage in exporters by using chunked iterators 2020-07-23 20:39:49 +02:00
Raphael Michel
bff1041878 Excel export: Use openpyxl's constant memory implementation 2020-07-23 20:37:15 +02:00
Raphael Michel
2626259492 Typeahead: No substring match in admin sessions 2020-07-23 18:20:41 +02:00
Martin Gross
18415c62bb Cancellations now use up to date invoice issuer information and do not copy the information over from the original invoice. 2020-07-23 18:02:18 +02:00
Raphael Michel
85f546a3a6 Ignore deadlock when writing quota caches 2020-07-23 17:48:56 +02:00
Raphael Michel
829b0041fc Use database replica for check-in count for statistical purposes 2020-07-23 17:48:31 +02:00
Raphael Michel
4968a6d995 Do not count exists for checkin count 2020-07-23 17:48:18 +02:00
Raphael Michel
033deb7cf2 Add seat information to check-in list export 2020-07-23 12:26:54 +02:00
Felix Rindt
e23e88f5c3 Create invoice exporter mixin (#1725)
* Create invoice exporter mixin

* code style
2020-07-22 17:22:56 +02:00
Raphael Michel
c3745e792b Fix PaymentProviderForm issue 2020-07-22 16:09:57 +02:00
Raphael Michel
735d4564f8 Allow to change length of invoice numbers 2020-07-21 18:11:39 +02:00
Raphael Michel
b305ac012c Fix price field when increasing number of bundles in cart 2020-07-21 17:23:30 +02:00
Raphael Michel
7bd9a01f5e Fix error in price calculation in connection with free prices and bundles 2020-07-21 17:23:08 +02:00
Raphael Michel
8bebea61f1 Improve performance of quota cache task 2020-07-21 16:58:18 +02:00
Raphael Michel
6714ab24ee Force-upgrade hierarkey 2020-07-21 16:58:12 +02:00
Raphael Michel
a54dbc0110 Allow file upload in payment provider settings 2020-07-21 11:52:46 +02:00
Raphael Michel
19fa2fb016 CSP: Remove child-src, as it is redundant with frame-src and will get deprecated again 2020-07-21 10:59:13 +02:00
Raphael Michel
12b5d6663e Adjust widget tests 2020-07-21 10:09:51 +02:00
Raphael Michel
ca4db5f628 Widget: respect item.allow_waitinglist 2020-07-21 09:46:30 +02:00
Raphael Michel
b6a343a623 Add umzubuchen to German spelling list 2020-07-20 17:28:19 +02:00
Raphael Michel
dc451cdeea Merge pull request #1722 from pretix-translations/weblate-pretix-pretix 2020-07-20 17:24:51 +02:00
Raphael Michel
6732d13439 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3714 of 3714 strings)

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

powered by weblate
2020-07-20 17:24:32 +02:00
Raphael Michel
5bf67ba613 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3714 of 3714 strings)

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

powered by weblate
2020-07-20 17:24:31 +02:00
TimPrd
8885b50972 Translated on translate.pretix.eu (French)
Currently translated at 62.3% (2306 of 3699 strings)

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

powered by weblate
2020-07-20 16:43:06 +02:00
Raphael Michel
940566ab93 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-07-20 16:42:55 +02:00
Raphael Michel
e7b9c49620 Allow customers to change to a different product variation (#1719) 2020-07-20 16:36:24 +02:00
Raphael Michel
c8ef825de5 Try again to fix export tests 2020-07-20 14:56:03 +02:00
Raphael Michel
5b25a68599 Fix tests broken in 684212780 2020-07-20 14:27:37 +02:00
Raphael Michel
e26a07d44d Add documentation on URL interpolation in digital content module 2020-07-20 11:43:05 +02:00
Martin Gross
6842127802 Absent/Checked Out persons in Checkin lists (#1721) 2020-07-20 10:41:39 +02:00
Raphael Michel
3c5948d2e0 Allow selecting the same add-on multiple times (#1717) 2020-07-20 10:21:12 +02:00
Raphael Michel
ed3542e219 Fix error in quota statistics 2020-07-20 10:10:36 +02:00
Raphael Michel
e439b20618 Fix crash if gift card does not exist 2020-07-17 17:44:01 +02:00
Raphael Michel
5c1fe6f68c Bump to 3.11.0.dev0 2020-07-17 12:56:57 +02:00
Raphael Michel
e4e91523a0 Bump to 3.10.0 2020-07-17 12:56:11 +02:00
Raphael Michel
00827700de Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-07-17 09:50:28 +02:00
Raphael Michel
0a87225a9a Add missing fields to API 2020-07-17 09:31:25 +02:00
Raphael Michel
9371d221bf Merge pull request #1720 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-07-17 08:56:50 +02:00
Dennis Lichtenthäler
08a3c846b6 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3700 of 3700 strings)

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

powered by weblate
2020-07-17 00:00:15 +02:00
Raphael Michel
1c84de9ab2 E-Mail: Do not use .prettify(), it does not preserve the original whitespsace 2020-07-16 17:45:17 +02:00
Raphael Michel
980f4012bc Make sure correct language is active when generating email attachments 2020-07-16 12:14:43 +02:00
Raphael Michel
591d70eabe Merge pull request #1718 from pretix-translations/weblate-pretix-pretix
Co-authored-by: Raphael Michel <michel@rami.io>
2020-07-16 09:03:15 +02:00
Raphael Michel
2c4609604d Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3700 of 3700 strings)

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

powered by weblate
2020-07-16 09:00:34 +02:00
Raphael Michel
30c2b8b03f Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3700 of 3700 strings)

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

powered by weblate
2020-07-16 09:00:33 +02:00
Raphael Michel
a685af6433 Clone button for products 2020-07-16 08:53:18 +02:00
Raphael Michel
f179a220bc Widget: Properly escape voucher codes 2020-07-16 08:42:40 +02:00
Raphael Michel
b61893e3b1 Do not even import excluded plugins 2020-07-16 08:42:29 +02:00
Raphael Michel
d3282a1acb Fix OrderChangeManager.change_price() for items without tax rule 2020-07-15 09:14:58 +02:00
Raphael Michel
c585946e72 Drop "Presale ::" from event page title 2020-07-14 16:53:26 +02:00
Raphael Michel
b6245b97ca Validate max length of attendee address 2020-07-14 16:26:46 +02:00
Raphael Michel
51720c3afe Fix irregular behaviour on second use of widget 2020-07-14 09:15:07 +02:00
Andreas Teuber
4746b8e456 Ask only for VAT ID if company is inside EU (#1709)
Co-authored-by: Andreas Teuber <andreas.teuber@passiv.de>
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
2020-07-13 18:04:09 +02:00
Raphael Michel
b2401f7641 Fix grammar error in German translation 2020-07-13 15:57:33 +02:00
Raphael Michel
b4cd11ef94 Fix creation of tax rules with custom rules 2020-07-13 15:57:33 +02:00
Raphael Michel
33682e1b38 Fix incorrect preview/history of subject rendering 2020-07-13 15:57:33 +02:00
Raphael Michel
e10e3300ba Fix ineffective translation of string 2020-07-12 11:01:15 +02:00
Raphael Michel
4f0eadfd6e Fix language file 2020-07-09 15:18:16 +02:00
Raphael Michel
0f9ec2ce7d Fix ZeroDivisionError in question statistics 2020-07-09 14:56:46 +02:00
Raphael Michel
93e3cf1d99 Update locales 2020-07-09 14:53:16 +02:00
Raphael Michel
3affaa8c85 Show local time if browser timezone is different 2020-07-09 14:51:16 +02:00
Raphael Michel
fddf134755 Update spelling wordlist 2020-07-09 10:55:34 +02:00
Raphael Michel
568398e4e7 Merge pull request #1715 from pretix-translations/weblate-pretix-pretix 2020-07-09 10:51:46 +02:00
Raphael Michel
fc08531639 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3700 of 3700 strings)

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

powered by weblate
2020-07-09 10:51:25 +02:00
Raphael Michel
bd25ce238d Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3700 of 3700 strings)

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

powered by weblate
2020-07-09 10:51:24 +02:00
Raphael Michel
c88ce8a9a8 Translated on translate.pretix.eu (German)
Currently translated at 99.4% (3673 of 3696 strings)

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

powered by weblate
2020-07-09 10:32:34 +02:00
Raphael Michel
004403e2c8 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-07-09 10:32:20 +02:00
Raphael Michel
0cde5288ac Fix trailing whitespace 2020-07-09 10:31:46 +02:00
Raphael Michel
e585da2901 Merge pull request #1704 from pretix-translations/weblate-pretix-pretix
Co-authored-by: Frank <webappconcept@gmail.com>
Co-authored-by: Dennis Lichtenthäler <lichtenthaeler@rami.io>
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: oocf <oswaldocerna@gmail.com>
Co-authored-by: Maarten van den Berg <maartenberg1@gmail.com>
2020-07-09 10:31:23 +02:00
Raphael Michel
f369fca091 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3684 of 3684 strings)

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

powered by weblate
2020-07-09 10:20:39 +02:00
Raphael Michel
e0e638ac8c Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3684 of 3684 strings)

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

powered by weblate
2020-07-09 10:20:39 +02:00
Dennis Lichtenthäler
4abe906511 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3684 of 3684 strings)

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

powered by weblate
2020-07-09 10:20:38 +02:00
Maarten van den Berg
855a47776f Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3684 of 3684 strings)

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

powered by weblate
2020-07-09 10:20:24 +02:00
Maarten van den Berg
c63c499a95 Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 99.8% (3676 of 3684 strings)

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

powered by weblate
2020-07-09 10:20:23 +02:00
Maarten van den Berg
f06a23ae95 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3684 of 3684 strings)

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

powered by weblate
2020-07-09 10:20:09 +02:00
oocf
2b68a22aad Translated on translate.pretix.eu (Spanish)
Currently translated at 83.0% (3058 of 3684 strings)

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

powered by weblate
2020-07-09 10:19:56 +02:00
Raphael Michel
86d42cc524 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3684 of 3684 strings)

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

powered by weblate
2020-07-09 10:19:36 +02:00
Dennis Lichtenthäler
6e8040ac9d Translated on translate.pretix.eu (German)
Currently translated at 100.0% (125 of 125 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/de/

powered by weblate
2020-07-09 10:19:35 +02:00
Dennis Lichtenthäler
c742c9979b Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3684 of 3684 strings)

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

powered by weblate
2020-07-09 10:19:19 +02:00
Frank
15f3880fcd Translated on translate.pretix.eu (Italian)
Currently translated at 17.2% (633 of 3684 strings)

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

powered by weblate
2020-07-09 10:18:50 +02:00
Raphael Michel
6bf5d8cb5e Revert "Update po files"
This reverts commit 27d772f52f.
2020-07-09 10:07:18 +02:00
Raphael Michel
27d772f52f Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-07-09 09:58:56 +02:00
Raphael Michel
6e9d921af6 Allow country specific tax rules (#1714) 2020-07-08 15:00:13 +02:00
Martin Gross
1c9a1b5e02 Mark invoice as dirty when changing subevent through OCM. 2020-07-07 16:03:55 +02:00
Raphael Michel
640c05729b Backend: Improve asynctask status feedback 2020-07-07 10:42:06 +02:00
Raphael Michel
fc9e5166da Order data and invoice data export: Add payment types 2020-07-07 09:14:06 +02:00
Raphael Michel
b1eb5bb3df Fix incorrect link 2020-07-06 15:37:16 +02:00
Raphael Michel
f690d74be7 Event list: Respect event date in "running" filter 2020-07-03 17:46:41 +02:00
Raphael Michel
c52fdc95a7 Allow to disable display of foreign currencies on invoices 2020-07-03 16:44:26 +02:00
Raphael Michel
039ca36233 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-07-03 14:58:08 +02:00
Raphael Michel
9920a47580 Multi export: Allow restriction to organizer 2020-07-03 11:56:36 +02:00
Raphael Michel
74acfbe2fd Fix issue with new pycountry version 2020-07-02 20:11:39 +02:00
Raphael Michel
b0b8f32cb9 Always show net total in backend 2020-07-02 19:32:11 +02:00
Raphael Michel
066cf510e3 Add tax total to cart view even if not showing net prices 2020-07-02 19:31:43 +02:00
Raphael Michel
aca963d960 Fix tax rate changes if there hasn't been a tax rate before 2020-07-02 19:24:18 +02:00
Raphael Michel
582c7b50f7 Do not parse list in rich_text_snippet 2020-07-02 12:00:18 +02:00
Martin Gross
d6b185193e Fix Timezone in Checkinlist 2020-07-01 12:24:04 +02:00
Raphael Michel
fb92d500be Fix accidentally commited settings changes 2020-07-01 10:43:37 +02:00
Raphael Michel
27ed9ae4fd Adjust colors in question statistics 2020-06-30 23:57:47 +02:00
Raphael Michel
06fbf56c04 Question stats: Show percentage 2020-06-30 23:18:12 +02:00
Raphael Michel
d843fc1545 Fix colors in graph of boolean questions 2020-06-30 23:04:17 +02:00
Raphael Michel
cf2af3c94d Import/startup performance improvements 2020-06-30 11:36:30 +02:00
Martin Gross
5f50aa95eb Add TaxRule selection in OrderPositionChange (#1700)
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
2020-06-30 11:13:33 +02:00
Raphael Michel
626e332886 Fix issue displaying unlimited quota 2020-06-30 10:04:45 +02:00
Gamy
507e1a5b83 Added various missing punctuation marks, changed "following" to "selected" to match the display. 2020-06-30 09:20:11 +02:00
MrGamy
0d1aa2f96e Localization string unification changes
unifying the text bit 'Go to shop' to display 'shop' with a lowercase s in base.html
2020-06-29 18:02:13 +02:00
Raphael Michel
df6038e39b Merge pull request #1703 from pretix/quota_release_after_exit
Allow to release quota after exit scans
2020-06-29 14:35:39 +02:00
Raphael Michel
922f12f55e Allow to release quota after exit scans 2020-06-26 16:49:19 +02:00
Raphael Michel
fdea190d72 Merge pull request #1702 from pretix-translations/weblate-pretix-pretix
Co-authored-by: Frank <webappconcept@gmail.com>
Co-authored-by: Maarten van den Berg <maartenberg1@gmail.com>
2020-06-25 12:46:43 +02:00
Maarten van den Berg
34fe34d50a Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3684 of 3684 strings)

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

powered by weblate
2020-06-24 19:40:23 +02:00
Frank
3412c1d2a9 Translated on translate.pretix.eu (Italian)
Currently translated at 16.9% (623 of 3684 strings)

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

powered by weblate
2020-06-24 19:40:23 +02:00
Maarten van den Berg
6f58f30d92 Translated on translate.pretix.eu (Dutch)
Currently translated at 99.8% (3676 of 3684 strings)

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

powered by weblate
2020-06-24 19:40:23 +02:00
Frank
19b5610503 Translated on translate.pretix.eu (Italian)
Currently translated at 15.4% (569 of 3684 strings)

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

powered by weblate
2020-06-24 19:40:23 +02:00
Raphael Michel
55670b92a8 Merge branch 'master' of github.com:pretix/pretix 2020-06-24 19:40:12 +02:00
Raphael Michel
e5cc15ffac Improve responsiveness of organizer page 2020-06-24 19:39:57 +02:00
Martin Gross
249e6978ea Display subevent time for each item in addon and question step 2020-06-24 17:06:25 +02:00
Martin Gross
a223d57124 Reduce minimal waitinglist voucher validity to 1 hour 2020-06-24 13:26:38 +02:00
Raphael Michel
2a5c24482e Question list: Drop pagination, allow to mix ordering with system fields 2020-06-23 13:05:54 +02:00
Martin Gross
868292f9b3 Fix All Invoice-export (missing file extension; missing "all payment providers") 2020-06-23 10:58:39 +02:00
Raphael Michel
5c24fd966a Fix locale error 2020-06-22 16:09:55 +02:00
Raphael Michel
61490a9ee8 Merge pull request #1701 from pretix-translations/weblate-pretix-pretix 2020-06-22 09:42:55 +02:00
Frank
3c3333c485 Translated on translate.pretix.eu (Italian)
Currently translated at 15.3% (565 of 3684 strings)

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

powered by weblate
2020-06-22 09:42:19 +02:00
Frank
4c19002be6 Translated on translate.pretix.eu (Italian)
Currently translated at 14.7% (541 of 3684 strings)

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

powered by weblate
2020-06-20 19:11:38 +02:00
Frank
2c49eaeef8 Translated on translate.pretix.eu (Italian)
Currently translated at 14.7% (540 of 3684 strings)

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

powered by weblate
2020-06-20 19:11:38 +02:00
Raphael Michel
481e29c3b2 Allow to explicitly disable products for certain subevents 2020-06-20 19:10:44 +02:00
Raphael Michel
0aebde62eb Fix missing variation attributes when copying items 2020-06-20 18:21:12 +02:00
Raphael Michel
49e44f68ba Merge pull request #1699 from pretix-translations/weblate-pretix-pretix 2020-06-19 13:10:52 +02:00
Frank
84dc9f241d Translated on translate.pretix.eu (Italian)
Currently translated at 14.6% (538 of 3684 strings)

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

powered by weblate
2020-06-19 13:07:28 +02:00
Frank
07b05f4a44 Translated on translate.pretix.eu (Italian)
Currently translated at 13.6% (500 of 3684 strings)

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

powered by weblate
2020-06-19 01:00:12 +02:00
Raphael Michel
d1c1aed1f2 Widget: Improve support for week calendars 2020-06-18 17:43:22 +02:00
Raphael Michel
de9f7248cc Widget: Fix issue navigating back to month calendar 2020-06-18 16:38:58 +02:00
Raphael Michel
0d45706608 Try to fix widget bug in IE introduced in ebb1cc1be 2020-06-18 12:33:26 +02:00
Raphael Michel
016dd88e8b Remove Italian from incubating languages 2020-06-18 12:13:28 +02:00
Raphael Michel
6362c27cba Merge pull request #1697 from pretix-translations/weblate-pretix-pretix 2020-06-18 12:12:57 +02:00
Frank
7396f29b82 Translated on translate.pretix.eu (Italian)
Currently translated at 11.6% (427 of 3684 strings)

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

powered by weblate
2020-06-18 12:00:52 +02:00
Frank
ff9f6b6a36 Translated on translate.pretix.eu (Italian)
Currently translated at 10.3% (378 of 3684 strings)

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

powered by weblate
2020-06-17 18:08:14 +02:00
Raphael Michel
7359b5543d Set calendar as default for event series 2020-06-17 18:07:54 +02:00
Raphael Michel
74a0cafa0f Revert "Switch to calendar at 25 subevents already"
This reverts commit 8001063347.
2020-06-17 18:07:07 +02:00
Raphael Michel
16472e915d PDF: Show event time on default layout 2020-06-17 12:27:38 +02:00
Martin Gross
ec6844f900 Display Boxoffice iZettle payment details 2020-06-16 22:11:54 +02:00
Raphael Michel
e6455f8204 Organizer-level export: Fix incorrect event queryset 2020-06-16 12:03:59 +02:00
Raphael Michel
4c48fcd861 Move export down in organizer navigation 2020-06-16 11:39:44 +02:00
Raphael Michel
adfd7834fb Add subevent date to ticket filename 2020-06-16 11:37:47 +02:00
Raphael Michel
a4b8315487 Merge pull request #1695 from pretix-translations/weblate-pretix-pretix 2020-06-16 11:07:08 +02:00
Frank
8594fecad4 Translated on translate.pretix.eu (Italian)
Currently translated at 9.0% (331 of 3684 strings)

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

powered by weblate
2020-06-16 11:06:46 +02:00
Frank
61979f0c40 Translated on translate.pretix.eu (Italian)
Currently translated at 8.4% (311 of 3684 strings)

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

powered by weblate
2020-06-16 11:06:46 +02:00
Frank
df5f8a340b Translated on translate.pretix.eu (Italian)
Currently translated at 8.4% (310 of 3684 strings)

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

powered by weblate
2020-06-16 11:06:46 +02:00
Frank
651e797264 Translated on translate.pretix.eu (Italian)
Currently translated at 7.9% (290 of 3684 strings)

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

powered by weblate
2020-06-16 11:06:46 +02:00
Frank
d40010fab6 Translated on translate.pretix.eu (Italian)
Currently translated at 7.4% (271 of 3684 strings)

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

powered by weblate
2020-06-16 11:06:45 +02:00
Frank
89c3d59e6d Translated on translate.pretix.eu (Italian)
Currently translated at 7.0% (257 of 3684 strings)

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

powered by weblate
2020-06-16 11:06:45 +02:00
Frank
b30569a941 Translated on translate.pretix.eu (Italian)
Currently translated at 100.0% (125 of 125 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/it/

powered by weblate
2020-06-16 11:06:45 +02:00
Frank
fe230fe56d Translated on translate.pretix.eu (Italian)
Currently translated at 6.4% (236 of 3684 strings)

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

powered by weblate
2020-06-16 11:06:45 +02:00
Martin Gross
0b20d3f6f8 Organizer/MultiEvent-Exports (#1684)
Co-authored-by: Raphael Michel <michel@rami.io>
2020-06-16 11:06:40 +02:00
Raphael Michel
e895c13b28 Re-label "Buy tickets" button 2020-06-16 10:35:07 +02:00
Martin Gross
5cc0bd5d36 Optional PayPal Reference Prefix (Z#2359330) (#1696)
* Optional PayPal Reference Prefix (Z#2359330)

* Move prefix to end
2020-06-15 18:23:01 +02:00
Raphael Michel
569379e508 Order API: Add search 2020-06-15 15:12:09 +02:00
Raphael Michel
d975a68641 Allow to turn off CSP reporting 2020-06-15 15:12:09 +02:00
Raphael Michel
c992de341f Revert "PayPal: Add additional protection against invalid sessions"
This reverts commit 99e02bde36.
2020-06-14 12:29:20 +02:00
Raphael Michel
11cc27dbd6 Fix crash when trying to refund an order with a disabled payment mehtod 2020-06-12 14:01:15 +02:00
Raphael Michel
90e70eae25 Fix test (see 45f120b0c) 2020-06-12 13:58:49 +02:00
Raphael Michel
9eacd38ec7 PayPal: Improve handling of exceptions form paypalrestsdk 2020-06-12 13:21:44 +02:00
Raphael Michel
d1c96aa77c PayPal: Remove unused session key 2020-06-12 13:21:44 +02:00
Raphael Michel
99e02bde36 PayPal: Add additional protection against invalid sessions 2020-06-12 13:21:44 +02:00
Raphael Michel
e7da2aec53 PayPal: Fix critical bug leading to wrong order being paid in a rare session constellation 2020-06-12 13:21:44 +02:00
Raphael Michel
d0c6f0f0e9 Allow to shred data 30 days after event (instead of 60) 2020-06-11 10:44:27 +02:00
Raphael Michel
3ae148956f Add spellcheck lists 2020-06-10 18:24:00 +02:00
Raphael Michel
e0436039d2 Merge pull request #1694 from pretix-translations/weblate-pretix-pretix 2020-06-10 18:15:40 +02:00
Raphael Michel
29510b8617 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3684 of 3684 strings)

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

powered by weblate
2020-06-10 18:13:54 +02:00
Raphael Michel
2d88da3a67 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3684 of 3684 strings)

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

powered by weblate
2020-06-10 18:13:53 +02:00
Raphael Michel
fbb88602d4 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-06-10 18:02:48 +02:00
Raphael Michel
7d7820a4ee Merge pull request #1693 from pretix/series-creation 2020-06-10 18:02:16 +02:00
Raphael Michel
8001063347 Switch to calendar at 25 subevents already 2020-06-10 18:01:52 +02:00
Raphael Michel
0c3a200355 Do not auto-create a first subevent 2020-06-10 17:59:59 +02:00
Maico Timmerman
ebb1cc1be7 Fix #1689 -- Widget: disable buy button without selected products (#1692) 2020-06-10 17:58:10 +02:00
Raphael Michel
45f120b0c3 API: Modified settings endpoint for devices 2020-06-10 17:45:31 +02:00
Martin Gross
bae0e45d00 Add W-indicator to Week-Calendar Dropdown 2020-06-10 12:59:21 +02:00
Martin Gross
057fd95706 Fix op.address_format() when no zip code is provided 2020-06-10 11:01:08 +02:00
Martin Gross
597d4aa206 Fix attendee_address 2020-06-10 10:32:20 +02:00
Raphael Michel
7f9b245eb5 Fix Preview button for ticket formats 2020-06-09 09:54:28 +02:00
Raphael Michel
42490c6dec New event series selection field 2020-06-08 16:20:50 +02:00
Raphael Michel
60c0b7da12 If date isn't shown on front page, don't show it on invoices 2020-06-08 14:49:06 +02:00
Raphael Michel
7d41922274 Minor improvemnet to widget views 2020-06-07 12:07:03 +02:00
Raphael Michel
fc7fbf31c5 Keep cached tickets around for a shorter interval 2020-06-05 12:10:10 +02:00
Raphael Michel
da5433325c Fix hardcoded ID in test 2020-06-05 10:03:16 +02:00
Raphael Michel
939a38d53b Fix subsequent issue on event level domains 2020-06-04 20:32:21 +02:00
Raphael Michel
a57280004e Fix another multidomain issue 2020-06-04 20:15:26 +02:00
Raphael Michel
ce896cec8f Fix bug in previosu commit 2020-06-04 19:05:07 +02:00
Raphael Michel
effc9723f1 Add event meta data fields to order search form 2020-06-04 18:39:30 +02:00
Raphael Michel
cd5f6b66a1 Do not cache event/organizer instance in multi domain middleware (might be harmful) 2020-06-04 18:33:15 +02:00
Raphael Michel
0d35064d21 Order create API: Fix addon_to in simulated mode
PRETIXEU-275
2020-06-02 16:48:52 +02:00
Raphael Michel
314ce5467f Disable autocomplete for all date/time picker fields 2020-06-02 12:42:12 +02:00
Raphael Michel
d97ef380a4 Bump to 3.10.0.dev0 2020-06-02 12:33:17 +02:00
Raphael Michel
d3498c419d Bump to 3.9.0 2020-06-02 12:32:09 +02:00
Raphael Michel
0d90ae9d53 SizedField: Do not crash without max_size 2020-06-02 12:31:52 +02:00
Raphael Michel
796d6f92ef Merge pull request #1690 from pretix-translations/weblate-pretix-pretix 2020-06-02 12:31:35 +02:00
Maarten van den Berg
73faecaa39 Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3673 of 3673 strings)

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

powered by weblate
2020-06-02 06:00:10 +02:00
Maarten van den Berg
e04e8e8ca6 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3673 of 3673 strings)

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

powered by weblate
2020-06-01 04:00:15 +02:00
Mikkel Ricky
89a9148073 Translated on translate.pretix.eu (Danish)
Currently translated at 43.6% (1602 of 3673 strings)

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

powered by weblate
2020-05-31 12:35:03 +02:00
Maarten van den Berg
205faafc57 Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (125 of 125 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/nl_Informal/

powered by weblate
2020-05-31 12:35:03 +02:00
Maarten van den Berg
db8ed065df Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3673 of 3673 strings)

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

powered by weblate
2020-05-31 12:35:03 +02:00
Maarten van den Berg
c84ae364ba Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3673 of 3673 strings)

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

powered by weblate
2020-05-31 12:35:03 +02:00
Raphael Michel
55a57dced2 Update seating-plan.schema.json 2020-05-31 12:34:46 +02:00
Raphael Michel
62db01e353 Check-in list export: Allow to filter by subevent date 2020-05-29 19:06:14 +02:00
Raphael Michel
e435e7140c Check-in list PDF exporter: Cross-subevent improvements 2020-05-29 18:59:02 +02:00
Raphael Michel
f4d38965cc Allow to limit distance metric to rows 2020-05-29 17:48:20 +02:00
Martin Gross
5d080a4ab2 Merge pull request #1688 from pretix/paypal_userinfo
Do not hard fail on Unauthorized PayPal Userinfo-calls
2020-05-29 14:30:05 +02:00
Martin Gross
7895729c38 Do not hard fail on Unauthorized PayPal Userinfo-calls (Fixes PRETIXEU-XQ) 2020-05-29 13:48:37 +02:00
Raphael Michel
3b003d0baa Merge pull request #1686 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-05-29 11:44:53 +02:00
Raphael Michel
69a4a16793 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3673 of 3673 strings)

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

powered by weblate
2020-05-29 11:43:59 +02:00
Raphael Michel
cf3412d54d Implement corona-safe seating (#1685) 2020-05-29 11:39:47 +02:00
Raphael Michel
03bcfc7c5a Fix issues from 1c8468c21 2020-05-29 09:20:18 +02:00
Raphael Michel
a6c1c85591 Fix broken tests 2020-05-28 22:47:32 +02:00
Raphael Michel
1c8468c21b Cancellation/refund: prefer placeholder over value 2020-05-28 18:55:37 +02:00
Raphael Michel
dcc54a0204 SizeFileField: Fix error message format 2020-05-27 14:38:14 +02:00
Raphael Michel
435b32a6b8 Add full attendee address as PDF variable 2020-05-27 12:36:43 +02:00
Raphael Michel
9e93560f7c Add spacing around banners 2020-05-26 16:03:58 +02:00
pajowu
e12e7a5dd3 Support HERMA Namensetiketten 50x80mm (4412) (#1681) 2020-05-26 13:50:44 +02:00
Raphael Michel
e822ba5430 Only validate size on uploaded files 2020-05-25 16:06:06 +02:00
Raphael Michel
b1ee355663 Fix Checkin.MultipleObjectsReturned in backend checkin 2020-05-25 15:46:31 +02:00
Raphael Michel
ca40ddc39b Fix AttributeError in SizeFileField 2020-05-25 15:44:46 +02:00
Raphael Michel
1b85911a76 Fix locale to country guessing 2020-05-22 18:20:00 +02:00
Raphael Michel
27b56b5aea Limit extensions and sizes of further file uploads 2020-05-22 15:01:18 +02:00
Raphael Michel
5147508ef9 Fix TypeError 2020-05-22 12:31:07 +02:00
Raphael Michel
39ae22b8b2 Calendar view: Consistent sorting of events at the same time 2020-05-22 11:54:37 +02:00
Raphael Michel
65b612eabd Fix possible ZeroDivisionError in quota calculation 2020-05-19 17:22:52 +02:00
Raphael Michel
48d2f98815 Add acks_late for sendmail task 2020-05-19 16:39:25 +02:00
Raphael Michel
5dd5ff8a7c Set acks_late=True on celery tasks where we would prefer double execution over failure 2020-05-19 16:33:16 +02:00
Martin Gross
059bdc629e Merge pull request #1678 from pretix-translations/weblate-pretix-pretix 2020-05-19 11:20:16 +02:00
Mie Frydensbjerg
36532e5bbb Translated on translate.pretix.eu (Danish)
Currently translated at 43.3% (1591 of 3673 strings)

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

powered by weblate
2020-05-19 11:19:44 +02:00
Mie Frydensbjerg
ed318791fb Translated on translate.pretix.eu (Danish)
Currently translated at 75.2% (94 of 125 strings)

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

powered by weblate
2020-05-19 11:19:09 +02:00
Maarten van den Berg
4d61ec4d86 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (125 of 125 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/nl/

powered by weblate
2020-05-19 09:35:27 +02:00
Maarten van den Berg
cc2f8ac3da Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3673 of 3673 strings)

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

powered by weblate
2020-05-19 09:35:27 +02:00
Raphael Michel
770293e8ec Fix docs typo 2020-05-19 09:35:18 +02:00
Raphael Michel
0ab11a8134 Timeslot guide: Product creation 2020-05-16 11:52:35 +02:00
Raphael Michel
7e56100c21 Rebuild docs if code changes 2020-05-15 18:21:58 +02:00
Raphael Michel
6fecb42e26 Merge pull request #1677 from pretix/timeslot-docs 2020-05-14 15:29:53 +02:00
Raphael Michel
4c063272d4 Update timeslots.rst 2020-05-14 14:52:41 +02:00
Raphael Michel
029f113b06 Add docs on timeslots 2020-05-14 13:25:07 +02:00
Raphael Michel
7827b026fd Update screenshots in documentation 2020-05-14 13:16:00 +02:00
Raphael Michel
bd4ccf4507 Merge pull request #1669 from pretix-translations/weblate-pretix-pretix 2020-05-14 09:42:44 +02:00
Raphael Michel
f95d2972d3 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (125 of 125 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/de/

powered by weblate
2020-05-14 09:40:32 +02:00
Raphael Michel
e642098a5f Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3673 of 3673 strings)

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

powered by weblate
2020-05-14 09:40:32 +02:00
Raphael Michel
bf11dea798 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3673 of 3673 strings)

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

powered by weblate
2020-05-14 09:40:32 +02:00
Raphael Michel
9e47f37097 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (125 of 125 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/de_Informal/

powered by weblate
2020-05-14 09:40:32 +02:00
Martin Gross
149c25e609 Translated on translate.pretix.eu (Latvian)
Currently translated at 30.5% (1112 of 3647 strings)

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

powered by weblate
2020-05-14 09:40:32 +02:00
Raphael Michel
fccd7a5499 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3647 of 3647 strings)

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

powered by weblate
2020-05-14 09:40:32 +02:00
Raphael Michel
d16acf0bfd Add words to spelling wordlist 2020-05-14 09:40:19 +02:00
Raphael Michel
71c915f5f7 Fix incorrect foreign currency total on invoices 2020-05-14 09:22:52 +02:00
Raphael Michel
f1c29daa42 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-05-13 18:45:12 +02:00
Raphael Michel
fec31823ee Do not show "None" string to user 2020-05-13 18:41:45 +02:00
Raphael Michel
c056db46b6 Overhaul of our check-in features (#1647) 2020-05-13 18:01:49 +02:00
Raphael Michel
640b9c876d Stripe: Lock payment object while processing refund 2020-05-13 16:43:46 +02:00
Martin Gross
25ad2ea475 Fix display of quota items. 2020-05-13 13:56:36 +02:00
Martin Gross
d2dfbca913 Fix missing translation tag on order cancellation page 2020-05-13 09:50:19 +02:00
Raphael Michel
7287a16711 Add attendee country as a PDF variable 2020-05-11 10:32:04 +02:00
Raphael Michel
c6e969b7fe Do not require rewriting of organizer and event tables because of a django-level field type change 2020-05-10 12:51:19 +02:00
Raphael Michel
c03c278ecd Stop using Django's SlugField to avoid conflicting validation 2020-05-10 12:42:37 +02:00
Raphael Michel
140f041cc1 Gift card refund: Use order language 2020-05-07 16:53:16 +02:00
Raphael Michel
de9c450648 Week calendar and more improvements to subevent calendars (#1672) 2020-05-07 15:48:47 +02:00
Raphael Michel
6a4c81ff3c Fix two bugs introduced in e117545b3 2020-05-07 14:48:14 +02:00
Raphael Michel
e117545b3f Refactor quota calculation (#1668) 2020-05-07 09:34:27 +02:00
Raphael Michel
feb7f419d3 Minor performance improvements for generating many subevents 2020-05-06 16:19:46 +02:00
Raphael Michel
ea04c85486 Various improvements to the subevent creation form (#1670) 2020-05-06 15:50:43 +02:00
Raphael Michel
094450564a Merge pull request #1671 from pretix/gobal_order_filters_improvements 2020-05-06 14:12:54 +02:00
Martin Gross
66d3c4516f Move stuff to OrderFilterForm 2020-05-06 13:48:45 +02:00
Martin Gross
4b01c42f31 Improve global order filters 2020-05-06 13:12:17 +02:00
Raphael Michel
c0972ef39d Re-run form handlers when validation of an async form fails 2020-05-06 09:51:45 +02:00
Raphael Michel
4d1cbd8248 Merge pull request #1667 from pretix-translations/weblate-pretix-pretix 2020-05-05 16:46:31 +02:00
Raphael Michel
07eb71400a Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3647 of 3647 strings)

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

powered by weblate
2020-05-05 16:43:54 +02:00
Raphael Michel
f6f72d4b7f Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3647 of 3647 strings)

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

powered by weblate
2020-05-05 13:15:15 +02:00
Raphael Michel
08d89acffd Translated on translate.pretix.eu (German)
Currently translated at 99.9% (3646 of 3647 strings)

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

powered by weblate
2020-05-05 13:15:04 +02:00
Raphael Michel
28831d674f Fix typo in language files 2020-05-05 13:01:58 +02:00
Raphael Michel
65f1c20af0 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-05-05 12:42:49 +02:00
Raphael Michel
5b2b3d71ec Change "Paid" to "confirmed" for free orders 2020-05-05 12:41:58 +02:00
Raphael Michel
15bdcb9973 Change "SOLD OUT" to "FULLY BOOKED" for free tickets 2020-05-05 12:17:31 +02:00
Raphael Michel
1a1afcddc6 Self-service canellations with custom fee: More tolerant decimal parsing 2020-05-04 17:29:29 +02:00
Raphael Michel
219c82b028 Always allow to shred empty event series
PRETIXEU-24B
2020-05-04 17:24:49 +02:00
Raphael Michel
19e2158f19 Payment list export: Allow to filter by payment/refund state 2020-05-04 17:09:12 +02:00
Raphael Michel
23055cfe09 Merge pull request #1665 from pretix-translations/weblate-pretix-pretix 2020-05-04 13:22:25 +02:00
Raphael Michel
790f248388 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3642 of 3642 strings)

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

powered by weblate
2020-05-04 13:16:23 +02:00
Raphael Michel
ef8d9bdb93 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3642 of 3642 strings)

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

powered by weblate
2020-05-04 13:16:23 +02:00
Maarten van den Berg
0d9b534cee Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3642 of 3642 strings)

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

powered by weblate
2020-05-04 13:16:23 +02:00
Gonzalo Gabriel Perez
b1b303e598 Translated on translate.pretix.eu (Spanish)
Currently translated at 96.2% (102 of 106 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/es/

powered by weblate
2020-05-04 13:16:23 +02:00
Maarten van den Berg
b4f3a665af Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3642 of 3642 strings)

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

powered by weblate
2020-05-04 13:16:23 +02:00
Raphael Michel
f71153db4a De-emphasize resend links button 2020-05-04 13:16:10 +02:00
Raphael Michel
1643005a4b simple_logo email renderer: Add top margin to logo 2020-05-04 12:58:22 +02:00
Raphael Michel
0ee2f674bc Stop asking for provinces in china (causes problems for users
apparently)
2020-05-04 11:57:20 +02:00
Martin Gross
d142a09ad3 Order Data Export: Add locale to position-sheet 2020-05-04 10:59:30 +02:00
Martin Gross
68c13aaa3c Reverse-sort TLDs for markdown, so longer TLDs match first (.com before .co) 2020-05-04 10:49:43 +02:00
Martin Gross
556c77a54b Correctly process missing, redacted data (Fix PRETIXEU-23M) 2020-04-30 11:56:09 +02:00
Martin Gross
5b689e5fd2 Correctly process missing, redacted data (Fix PRETIXEU-23M) 2020-04-30 11:48:36 +02:00
Raphael Michel
57f5fbc131 Fix race condition when loading styles within the widget 2020-04-29 11:40:25 +02:00
Raphael Michel
7e80ec93d5 Hide PayPal secret key in global settings 2020-04-29 11:27:38 +02:00
Raphael Michel
ee1928aeed Do not expose secret keys in global settings 2020-04-29 11:25:22 +02:00
Raphael Michel
5c62f2b852 Fix documentation copy-and-paste error (danke @luto) 2020-04-29 10:52:13 +02:00
Martin Gross
ad8be705fd Update bleach to 3.1.4 2020-04-28 15:07:35 +02:00
Raphael Michel
4635d9b5f7 Ensure order gets canceled when locked 2020-04-28 12:32:07 +02:00
Raphael Michel
ace32f3fc4 Remove one more usage of non-cached Countries() 2020-04-27 18:06:48 +02:00
Raphael Michel
88a235da30 Allow to set event_list_type on event level 2020-04-27 18:06:37 +02:00
Raphael Michel
4ec24fc884 PayPal: Show sale ID in backend 2020-04-27 11:39:57 +02:00
Raphael Michel
e2b9fe8e71 Fix crash in self-service cancellation
PRETIXEU-23B
2020-04-24 16:52:11 +02:00
Raphael Michel
6f1c29581d Merge pull request #1662 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-04-24 09:59:07 +02:00
Raphael Michel
9bf0a6dfcd Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3642 of 3642 strings)

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

powered by weblate
2020-04-24 09:43:28 +02:00
Raphael Michel
3e6e324027 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3642 of 3642 strings)

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

powered by weblate
2020-04-24 09:43:27 +02:00
Raphael Michel
912e6816df Translated on translate.pretix.eu (German (informal))
Currently translated at 99.9% (3638 of 3642 strings)

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

powered by weblate
2020-04-24 09:41:46 +02:00
Raphael Michel
d00aa2f3ad Translated on translate.pretix.eu (German)
Currently translated at 99.9% (3638 of 3642 strings)

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

powered by weblate
2020-04-24 09:41:46 +02:00
Raphael Michel
41fecf366c Fix translation typos again 2020-04-24 09:41:29 +02:00
Raphael Michel
f7f751bda7 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-04-24 09:37:15 +02:00
Raphael Michel
7b68614de3 Merge pull request #1660 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-04-24 09:36:37 +02:00
Maarten van den Berg
c0fc259d17 Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3639 of 3639 strings)

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

powered by weblate
2020-04-24 09:36:21 +02:00
Maarten van den Berg
d6cad265fc Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3639 of 3639 strings)

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

powered by weblate
2020-04-24 09:36:21 +02:00
Raphael Michel
bb1882aca5 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3639 of 3639 strings)

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

powered by weblate
2020-04-24 09:36:21 +02:00
Raphael Michel
b887c2c43d More precise texts in the download fragment 2020-04-24 09:36:01 +02:00
Raphael Michel
c05bf779bd Remove icon again 2020-04-24 09:35:55 +02:00
Raphael Michel
68ff001bb6 Do not run tests on translation-only PRs 2020-04-24 09:15:49 +02:00
Martin Gross
3c6fdd15af Expose apple-developer-merchantid-domain-association on event_p… (#1661) 2020-04-24 09:14:39 +02:00
Raphael Michel
16957eec33 Initialize bulk create form with weekly instead of yearly events 2020-04-22 16:57:28 +02:00
Raphael Michel
1bcf1ec26a Actually run isort instead of flake8 2020-04-22 12:16:29 +02:00
Raphael Michel
d224b5387d Replace Travis with GitHub actions and fix many typos (#1657)
* Create django.yml

* Fix working directory

* ..

* .

* ..

* a.

* ..

* .

* Fix typo

* Install hunspell

* maxfail

* Fix install

* .

* Reduce number of typos

* Even less typos

* Postgres debug

* Spelling fixes, yet again

* Postgres with PW

* Fix failing test

* New workflows

* Fix syntax error

* Install gettext

* Test aginst python 3.6 as well

* Clean up strategies

* Add badge, do not ignore migrations

* Use pip cache
2020-04-22 12:07:58 +02:00
Raphael Michel
27d6e49c4a GiftcarD Only allow reversal for refunds 2020-04-22 09:34:15 +02:00
Raphael Michel
50bb66a32b Merge pull request #1658 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-04-21 18:45:16 +02:00
Raphael Michel
207149f681 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3639 of 3639 strings)

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

powered by weblate
2020-04-21 18:44:51 +02:00
Raphael Michel
e0ed25a1d3 Translated on translate.pretix.eu (German)
Currently translated at 99.9% (3638 of 3639 strings)

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

powered by weblate
2020-04-21 18:44:49 +02:00
Raphael Michel
c0c177d755 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-04-21 15:57:55 +02:00
Raphael Michel
f2844ac686 Add expiry dates and individual conditions to gift cards (#1656)
* Add expiry dates and individual conditions to gift cards

* Display refund gift cards with more details and prettier interface

* Allow to set gift card expiry and conditions when cancelling event

* Extend gift card search

* Fix #1565 -- Some gift card filters

* Improve list of gift cards

* Allow to edit gift cards

* Note on validity
2020-04-21 15:57:02 +02:00
Raphael Michel
d9fd4b33a0 Enforce language in timeline test 2020-04-21 11:14:29 +02:00
Raphael Michel
d2415f46df Hide some header elements when printing 2020-04-21 11:14:09 +02:00
Raphael Michel
ad7c745465 Fix bug introduced in last commit 2020-04-21 10:44:40 +02:00
Raphael Michel
b260cca412 Event setup: Do not create additional teams for staff 2020-04-21 09:33:50 +02:00
Raphael Michel
82c84a0fdc Merge pull request #1655 from pretix-translations/weblate-pretix-pretix 2020-04-20 19:18:03 +02:00
Raphael Michel
d703c4de7a Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3622 of 3622 strings)

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

powered by weblate
2020-04-20 19:17:24 +02:00
Raphael Michel
ff5fbf1c15 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3622 of 3622 strings)

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

powered by weblate
2020-04-20 19:17:23 +02:00
Raphael Michel
41ff4bca7f Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-04-20 19:14:38 +02:00
Raphael Michel
37f45de8a5 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3621 of 3621 strings)

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

powered by weblate
2020-04-20 19:14:30 +02:00
Raphael Michel
71f01c17bd Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3621 of 3621 strings)

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

powered by weblate
2020-04-20 19:14:29 +02:00
Raphael Michel
43b1df572f Add translation context 2020-04-20 19:14:02 +02:00
Raphael Michel
ecda905ceb Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-04-20 19:06:28 +02:00
Raphael Michel
4e59b02bb1 Re-label cart button if cart is not visible or all products are free 2020-04-20 19:05:21 +02:00
Raphael Michel
234bf093ff Fix isort issues 2020-04-20 17:46:27 +02:00
Raphael Michel
ae9bd1b6ba Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-04-20 17:46:02 +02:00
Raphael Michel
b84b51250f More visible download buttons for single tickets 2020-04-20 17:45:20 +02:00
Raphael Michel
d0dd2116ca Enlarge download button for multi downloads 2020-04-20 17:45:19 +02:00
Raphael Michel
945218035e Re-design number of products in cart overview 2020-04-20 17:45:19 +02:00
Raphael Michel
89f8436e9a Merge pull request #1649 from pretix-translations/weblate-pretix-pretix 2020-04-20 17:44:52 +02:00
Raphael Michel
4992b17966 Squash some migrations 2020-04-20 17:16:02 +02:00
Raphael Michel
f7d057f9fa Translated on translate.pretix.eu (French)
Currently translated at 64.1% (2315 of 3609 strings)

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

powered by weblate
2020-04-20 17:15:54 +02:00
Maarten van den Berg
96ba32b1bb Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3609 of 3609 strings)

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

powered by weblate
2020-04-20 17:15:54 +02:00
Maarten van den Berg
02792e3ae8 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3609 of 3609 strings)

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

powered by weblate
2020-04-20 17:15:54 +02:00
Raphael Michel
a87fe3ef41 Allow to revert a gift card refund 2020-04-20 13:19:32 +02:00
Raphael Michel
bb673e0cc9 Fix localized decimal validation when creating manual gift card transactions 2020-04-20 12:57:03 +02:00
Raphael Michel
0b02bcea8b Prevent cancelling all subevents by accident 2020-04-19 14:17:41 +02:00
Martin Gross
1d8668aaf1 Exclude all kinds of Umlauts from GiroCodes (Fix: #1314) 2020-04-17 19:14:54 +02:00
Martin Gross
0783add3b9 Restrict PayPal plugin to supported PayPal currencies (Fix: #1160) 2020-04-17 18:56:00 +02:00
Martin Gross
2030aaf12e Fix #1488 some more: compile the regex' less often for better performance 2020-04-17 17:53:57 +02:00
Martin Gross
7ce4c30922 Parse more nTLDs and gTLDs (Fix #1488) 2020-04-17 17:44:08 +02:00
Raphael Michel
f1e772c829 Bump to 3.9.0.dev0 2020-04-17 17:19:40 +02:00
Raphael Michel
31d1fc31cd Bump version to 3.8.0 2020-04-17 17:19:02 +02:00
Raphael Michel
597211d83a Merge pull request #1646 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-04-17 17:11:24 +02:00
Raphael Michel
17679d4304 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3609 of 3609 strings)

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

powered by weblate
2020-04-17 17:11:08 +02:00
Raphael Michel
0fb70c78a9 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3609 of 3609 strings)

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

powered by weblate
2020-04-17 17:11:07 +02:00
Raphael Michel
e254e90e49 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-04-17 16:26:52 +02:00
Raphael Michel
9c6e5f025d Merge pull request #1642 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-04-17 16:26:21 +02:00
Raphael Michel
3c86532218 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3601 of 3601 strings)

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

powered by weblate
2020-04-17 16:25:29 +02:00
Raphael Michel
3834ae566f Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3601 of 3601 strings)

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

powered by weblate
2020-04-17 16:25:29 +02:00
Raphael Michel
6766b2b19e Fix #1645 -- Allow one-letter event slugs 2020-04-17 16:25:04 +02:00
Raphael Michel
b6d2f67c7c Cache sorting of countries 2020-04-17 13:21:13 +02:00
Raphael Michel
e70f593a94 Minor SQL performance improvements 2020-04-17 12:14:37 +02:00
Raphael Michel
ed5726fc0c Merge branch 'master' of github.com:pretix/pretix 2020-04-17 12:04:41 +02:00
Martin Gross
5400d26c60 Log the reason for failed PayPal refunds 2020-04-17 12:02:43 +02:00
Raphael Michel
0bb6104532 Flip order of invoices and tickets in email attachments 2020-04-16 13:14:06 +02:00
Raphael Michel
16aa403735 Fix incorrect checkin list tests 2020-04-15 13:06:24 +02:00
Martin Gross
1c279a92a7 Merge pull request #1643 from pretix/event_cancellation_giftcard_refund
Allow to issue gift card refunds when cancelling whole events
2020-04-15 13:00:41 +02:00
Martin Gross
35985dcb11 Remove legal warning, make refund_as_giftcard-option clearer. 2020-04-15 12:58:43 +02:00
Raphael Michel
b0dcbe31fa Fix incorrect quota error when changing subevent and item of a position 2020-04-15 12:54:57 +02:00
Martin Gross
b3c3ee3b22 Allow to issue gift card refunds when cancelling whole events 2020-04-15 10:08:12 +02:00
Raphael Michel
aab340fd87 Fix missing translation context 2020-04-15 09:43:58 +02:00
Raphael Michel
1871324ef4 Restrict length of item name in quick setup
PRETIXEU-21V
2020-04-15 09:20:55 +02:00
Raphael Michel
d799d560b7 Fix typo in settings definition 2020-04-14 09:47:47 +02:00
Raphael Michel
01e2851a76 Invoice model: Do not crash on invalid states 2020-04-14 09:47:34 +02:00
Raphael Michel
ef2a4244ed Merge branch 'master' of github.com:pretix/pretix 2020-04-09 09:29:58 +02:00
Raphael Michel
55539dc8e5 Fix confusing background color in subevents 2020-04-09 09:29:40 +02:00
Martin Gross
ef303bfcc4 Add cancel_allow_user_paid_adjust_fees_explanation (#1639)
* Add cancel_allow_user_paid_adjust_fees_explanation

* Cleanup
2020-04-08 17:49:36 +02:00
Martin Gross
fff9ac04a9 Fix test (Caused by 31fdf8721b) 2020-04-08 17:49:16 +02:00
Martin Gross
76d27fbfaa Cleanup 2020-04-08 17:08:58 +02:00
Martin Gross
2b1123b487 Add cancel_allow_user_paid_adjust_fees_explanation 2020-04-08 16:43:29 +02:00
pretix translation bot
3607d8706d Translations update from Weblate (#1638)
* Translated on translate.pretix.eu (German)

Currently translated at 100.0% (106 of 106 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/de/

powered by weblate

* Translated on translate.pretix.eu (German (informal))

Currently translated at 100.0% (106 of 106 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/de_Informal/

powered by weblate

* Translated on translate.pretix.eu (Dutch)

Currently translated at 100.0% (3601 of 3601 strings)

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

powered by weblate

* Translated on translate.pretix.eu (Dutch (informal))

Currently translated at 100.0% (106 of 106 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/nl_Informal/

powered by weblate

* Translated on translate.pretix.eu (Dutch (informal))

Currently translated at 100.0% (3601 of 3601 strings)

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

powered by weblate

Co-authored-by: Martin Gross <martin@pc-coholic.de>
Co-authored-by: Maarten van den Berg <maartenberg1@gmail.com>
2020-04-08 15:48:55 +02:00
Raphael Michel
31fdf8721b API: Fix selecting checkin question answers by option identifier 2020-04-07 15:16:58 +02:00
Raphael Michel
128a1f349a Revert accidentally commited change 2020-04-03 14:47:44 +02:00
Raphael Michel
7d432f0639 Improve display of attendee addresses 2020-04-03 14:35:38 +02:00
Raphael Michel
1ffc799c4d Split banner text into top and bottom 2020-04-03 13:02:23 +02:00
Raphael Michel
25dd8f2e2f Introduce banner text 2020-04-02 18:35:28 +02:00
Raphael Michel
b121596e4b Merge pull request #1635 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-04-02 18:28:50 +02:00
Raphael Michel
cf835df62e Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3601 of 3601 strings)

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

powered by weblate
2020-04-02 18:28:27 +02:00
Raphael Michel
7a3b7d4f02 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3601 of 3601 strings)

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

powered by weblate
2020-04-02 18:28:26 +02:00
Maarten van den Berg
b151d8f455 Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3590 of 3590 strings)

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

powered by weblate
2020-04-02 18:17:28 +02:00
Raphael Michel
06de74d877 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-04-02 18:17:18 +02:00
Raphael Michel
2ae9e3e0d9 Directly load editor on supported browsers 2020-04-02 18:16:33 +02:00
Raphael Michel
0c0fe58bbf Improve UX of ticket download settings 2020-04-02 18:16:22 +02:00
Raphael Michel
7b1e1a48ef Enable PDF and passbook outputs for new events by default 2020-04-02 18:03:26 +02:00
Raphael Michel
c7dd50de0d CartMixin: Prevent None values in sorting function 2020-04-02 16:53:17 +02:00
Raphael Michel
a1caa65776 Revert "Upgrade jQuery version (but keep old one around for now for plugins)"
We've got to many instances of this around:
https://stackoverflow.com/questions/38871753/uncaught-typeerror-a-indexof-is-not-a-function-error-when-opening-new-foundat

This reverts commit cc46d55f5e.
2020-04-02 16:42:54 +02:00
Raphael Michel
260973345d Merge pull request #1634 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-04-02 14:41:19 +02:00
Raphael Michel
2c9b2620ea Add company and address fields to attendees (#1633)
* Add company and address fields to attendees

* Update src/pretix/control/templates/pretixcontrol/event/settings.html

Co-Authored-By: Martin Gross <gross@rami.io>

Co-authored-by: Martin Gross <gross@rami.io>
2020-04-02 14:41:09 +02:00
Maarten van den Berg
909c80e710 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (106 of 106 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/nl/

powered by weblate
2020-04-02 09:51:33 +02:00
Maarten van den Berg
5a218ae6a9 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3590 of 3590 strings)

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

powered by weblate
2020-04-02 09:51:33 +02:00
Raphael Michel
b498d45621 Pass gift_cards to order_fee_calculation 2020-04-02 09:50:44 +02:00
Raphael Michel
b02196434b Re-compute fees after applying a giftcard 2020-04-01 17:09:58 +02:00
Raphael Michel
c0edce7760 AJAX: Do not throw error on "abort" in Safari 2020-04-01 16:06:46 +02:00
Raphael Michel
cc46d55f5e Upgrade jQuery version (but keep old one around for now for plugins) 2020-04-01 16:06:46 +02:00
Martin Gross
ea8abb8dab Add Giftcard Redemption Export 2020-04-01 15:46:40 +02:00
Raphael Michel
f765d094b4 Fix crash in UCBrowser (PRETIXEU-20M) 2020-04-01 11:14:30 +02:00
Raphael Michel
86f222870d Cancelling orders: Do not send email to organizer if the refund is in transit 2020-03-31 17:56:51 +02:00
Martin Gross
19b5270d76 Fix tests (Caused by 61a1368ed2) 2020-03-31 14:34:10 +02:00
Martin Gross
db76b9b0ef Tiny fix to make Edge happy and display cancellation-slider 2020-03-31 14:04:57 +02:00
pretix translation bot
d23e53873f Translations update from Weblate (#1632)
* Translated on translate.pretix.eu (German)

Currently translated at 100.0% (106 of 106 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/de/

powered by weblate

* Translated on translate.pretix.eu (German (informal))

Currently translated at 100.0% (106 of 106 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/de_Informal/

powered by weblate

Co-authored-by: Martin Gross <martin@pc-coholic.de>
2020-03-31 13:35:14 +02:00
pretix translation bot
c116a4b998 Translations update from Weblate (#1631)
* Translated on translate.pretix.eu (German)

Currently translated at 100.0% (106 of 106 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/de/

powered by weblate

* Translated on translate.pretix.eu (German (informal))

Currently translated at 100.0% (106 of 106 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/de_Informal/

powered by weblate

* Translated on translate.pretix.eu (Dutch)

Currently translated at 100.0% (106 of 106 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/nl/

powered by weblate

* Translated on translate.pretix.eu (Dutch (informal))

Currently translated at 100.0% (106 of 106 strings)

Translation: pretix/pretix (frontend)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/nl_Informal/

powered by weblate

* Translated on translate.pretix.eu (Dutch)

Currently translated at 99.4% (3569 of 3589 strings)

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

powered by weblate

* Translated on translate.pretix.eu (Dutch)

Currently translated at 100.0% (3589 of 3589 strings)

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

powered by weblate

* Translated on translate.pretix.eu (Dutch (informal))

Currently translated at 100.0% (3589 of 3589 strings)

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

powered by weblate

Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Maarten van den Berg <maartenberg1@gmail.com>
2020-03-31 13:28:34 +02:00
Martin Gross
2471d4bca5 Update po files
[CI skip]

Signed-off-by: Martin Gross <gross@rami.io>
2020-03-31 12:47:09 +02:00
Martin Gross
8e04dbdcca Change "we keep" to "The organizer keeps" to avoid confusion 2020-03-31 12:45:32 +02:00
Raphael Michel
0928358396 Fix > vs >= in gift card message 2020-03-29 13:53:58 +02:00
Raphael Michel
23f783c15c Force django-libsass version to be upgraded 2020-03-26 20:51:54 +01:00
Raphael Michel
edae96c84f Fix TypeError during cancellation 2020-03-26 20:49:53 +01:00
Martin Gross
242ebdfae9 Show Subevent start time in select2-pickers (#1630)
* Add Subevent time to __str__

* Show subevent-dates in select2 picker

* Show event-dateblock (if enabled) on Widget Voucher redemption page

* Update src/pretix/base/models/event.py

Co-Authored-By: Raphael Michel <michel@rami.io>

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

Co-Authored-By: Raphael Michel <michel@rami.io>

* Update src/pretix/control/views/typeahead.py

Co-Authored-By: Raphael Michel <michel@rami.io>

* Remove date-block on non-subevent voucher redemption pages

Co-authored-by: Raphael Michel <michel@rami.io>
2020-03-26 13:10:45 +01:00
Raphael Michel
0ee502abec Improve performance by not re-evaluating main context processors on
every template rendering in a signal receiver
2020-03-26 09:50:58 +01:00
Raphael Michel
29cb1e93d8 Reduce number of queries on the order change form 2020-03-26 09:50:14 +01:00
Raphael Michel
c89242855c Reduce number of SQL queries on order detail page 2020-03-26 09:38:56 +01:00
Raphael Michel
61a1368ed2 Widget: Show date and time of subevent after calendar selection 2020-03-25 17:48:24 +01:00
Raphael Michel
ac3e00fa03 Color buttons green if they otherwise look like a headline 2020-03-25 17:48:09 +01:00
Raphael Michel
d9d0f7b6f3 Add Order.cancellation_date (#1629)
* Add Order.cancellation_date

* Add tests
2020-03-25 16:37:34 +01:00
Raphael Michel
ad5e2df3be Merge pull request #1628 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-03-25 14:59:07 +01:00
Raphael Michel
ec34561815 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3589 of 3589 strings)

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

powered by weblate
2020-03-25 14:58:32 +01:00
Raphael Michel
e1540b1648 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3589 of 3589 strings)

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

powered by weblate
2020-03-25 14:58:31 +01:00
Raphael Michel
a6b265455d Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-03-25 14:14:28 +01:00
Raphael Michel
8a6334bd86 Introduce cancellation requests (#1627)
* Allow to adjust the cancellation fee without JS

* Introduce cancellation requests

* ignore→delete

* Change a few things after Martin's review

* Add a few tests
2020-03-25 14:13:55 +01:00
Raphael Michel
173a23722a Merge pull request #1625 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-03-25 14:12:26 +01:00
Raphael Michel
ab8eb2a34d Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3546 of 3546 strings)

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

powered by weblate
2020-03-25 13:03:51 +01:00
pajowu
30dcda616b Send checkin list mapping in event_copy_data signal (#1624)
* Send checkin list map in event_copy_data signal

* Add checkin_list_map to documentation and definition of event_copy_data
2020-03-25 13:03:45 +01:00
Raphael Michel
3eafec9d6e Allow customers to choose to receive their refund as a gift card (#1626)
* Minor text adjustments

* Allow users to receive their cancellation as a gift card
2020-03-25 11:41:40 +01:00
Raphael Michel
a5910016fd Allow users to increase cancellation fees (#1622)
* Allow users to increase cancellation fees

* Fix typo
2020-03-25 10:11:29 +01:00
pajowu
0a49b93b26 Render remaining badges onto new page even if it doesn't fill t… (#1621) 2020-03-24 17:43:58 +01:00
Raphael Michel
7449bea836 Add request argument to order_info/position_info signals 2020-03-24 15:57:00 +01:00
Raphael Michel
0fc4478332 Add docs on pretix-digital 2020-03-24 15:56:51 +01:00
Raphael Michel
0df4a6e7ed Add signals order_info_top and position_info_top 2020-03-24 14:22:02 +01:00
Benjamin Hättasch
a37cd380c8 Fix sample service config (#1620) 2020-03-24 09:10:56 +01:00
Raphael Michel
11b2bd8887 Allow markdown in multiple-choice question options 2020-03-23 17:55:52 +01:00
Raphael Michel
8986db0975 Merge pull request #1619 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-03-23 17:55:50 +01:00
Raphael Michel
2921611cb1 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3546 of 3546 strings)

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

powered by weblate
2020-03-23 17:55:20 +01:00
Raphael Michel
785fb29513 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3546 of 3546 strings)

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

powered by weblate
2020-03-23 17:55:19 +01:00
Raphael Michel
81c3d7fa17 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-03-23 17:02:11 +01:00
Raphael Michel
8ff963698d Text change "Modify" → "Add or remove tickets" on review order page 2020-03-23 16:47:25 +01:00
Raphael Michel
6da63e0169 Question form: Guess default country 2020-03-23 16:44:37 +01:00
Raphael Michel
f84903ae27 Drop removed context attribute from from_db_value 2020-03-23 16:44:37 +01:00
Raphael Michel
a0a7859b33 Update redis 2020-03-23 16:03:19 +01:00
Raphael Michel
af23d6e4bf Upgrade to Django 3.0 and other dependencies (#1568)
* Upgrade Django to 3.0 and other dependencies to recent versions

* Fix otp version contsraint

* Remove six dependency

* Resolve some warnings

* Fix failing tests

* Update django-countries

* Resolve all RemovedInDjango31Warnings in test suite

* Run isort

* Fix import

* Update PostgreSQL version on travis
2020-03-23 15:02:20 +01:00
Raphael Michel
7e9c9beace Allow to use a custom domain per event (#1617)
* Drop support for maindomain_urls/subdomain_urls in plugins

* Allow to use a custom domain per event

* Fix bug when manually saving domains

* Fix custom domains in debugging

* Fix middleware

* Fix middleware again, update docs
2020-03-23 13:03:14 +01:00
Raphael Michel
ac2fc2de5c Cancelling events: Allow to cancel all dates in a series 2020-03-23 10:37:10 +01:00
Raphael Michel
45e548873e Do not crash event page on social image generation 2020-03-22 11:04:51 +01:00
Raphael Michel
f484eb65df PayPal: Do not crash on failed refund 2020-03-22 11:04:51 +01:00
Raphael Michel
027a785ab5 Log out other sessions after email or 2FA changes 2020-03-22 11:04:51 +01:00
Raphael Michel
25b80cbb57 Fix invalid requirement spec 2020-03-20 12:46:15 +01:00
Raphael Michel
589fa0f9de Cancelling events: Send email even if refund failed 2020-03-20 12:38:57 +01:00
Raphael Michel
6d2989d15a Run a forked version of vat_moss 2020-03-20 11:06:19 +01:00
Raphael Michel
5bb27b29ae Seat statistics: Only use active variations 2020-03-16 16:32:34 +01:00
Raphael Michel
d17f8a71e6 Fix crashes in new statistical feature 2020-03-16 16:12:48 +01:00
Raphael Michel
b664cc712a Cancelling events: Allow to create manual and partial refunds 2020-03-16 16:00:44 +01:00
Raphael Michel
d61e8a9204 Cancelling events: Allow to select fee types to keep 2020-03-16 15:44:37 +01:00
Martin Gross
f00012a63e Statistics on sold and unsold seats, as well as potential profi… (#1613)
* Statistics on sold and unsold seats, as well as potential profits

* Rework of seats-stats

* Fix crash when all seats are assigned

* Update src/pretix/plugins/statistics/views.py

Co-Authored-By: Raphael Michel <michel@rami.io>

* Update src/pretix/plugins/statistics/views.py

Co-Authored-By: Raphael Michel <michel@rami.io>

* Update src/pretix/plugins/statistics/views.py

Co-Authored-By: Raphael Michel <michel@rami.io>

* Fix count of sold seats

Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
Co-authored-by: Raphael Michel <michel@rami.io>
2020-03-16 15:20:30 +01:00
Raphael Michel
bd238f76ce Fix broken test 2020-03-16 13:29:12 +01:00
Raphael Michel
703ae97820 Fix typo in German translation 2020-03-16 13:27:33 +01:00
Raphael Michel
1a60c5ea64 Fix missing bleach call in invoice renderer 2020-03-16 11:44:31 +01:00
Raphael Michel
1d3ac5f02f Fix StaticDevice.MultipleObjectsReturned
PRETIXEU-1YX
2020-03-16 11:41:33 +01:00
Raphael Michel
8d23d75dfd Only send download reminders if there's actually a download 2020-03-16 09:26:11 +01:00
Maico Timmerman
9a32668ee1 Make next url authentication backend dependent (#1609)
* Make next url authentication backend dependent

* Rename authentication next_url to get_next_url.

* Add test for custom authentication backend get_next_url.

* Fix typo in docstring of authentication backend get_next_url.
2020-03-15 11:05:57 +01:00
pajowu
ca0407a133 Subclass MultipleChoiceField to serialize to list (#1605)
* Subclass MultipleChoiceField to serialize to list

* Rename pretix.api.serializers.MultipleChoiceField to ListMultipleChoiceField

* Keep order in ListMultipleChoiceField
2020-03-14 22:04:12 +01:00
Raphael Michel
1de77b0784 Translations update from Weblate (#1612)
Translations update from Weblate
2020-03-14 22:02:09 +01:00
Maarten van den Berg
d0907d3dcf Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3516 of 3516 strings)

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

powered by weblate
2020-03-13 08:00:11 +01:00
pajowu
81cc4bd768 Do not validate event creation form on back button (#1611) 2020-03-12 19:17:49 +01:00
pajowu
262639e063 Show checkbox if items per order limit is 1 (#1610) 2020-03-12 18:47:14 +01:00
Martin Gross
dedd93fb89 Add Support for Square POS payment_data 2020-03-12 14:33:37 +01:00
Raphael Michel
45f94aee03 Merge pull request #1602 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-03-12 13:31:40 +01:00
Maarten van den Berg
d36e7d033f Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3516 of 3516 strings)

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

powered by weblate
2020-03-12 13:31:17 +01:00
Maarten van den Berg
b94bd277bf Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3516 of 3516 strings)

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

powered by weblate
2020-03-12 13:31:16 +01:00
Maico Timmerman
e5095185d9 Send widget_data in voucher redeem request. (#1606) 2020-03-12 13:31:12 +01:00
pajowu
d76ce47597 Allow creating question with dependency_question=None (#1607) 2020-03-12 13:30:18 +01:00
Martin Gross
58717850c2 Add date-on-frontpage check to secondary template 2020-03-12 12:06:26 +01:00
Martin Gross
29d52d4fe5 Second attempt at hiding date on frontpage in title 2020-03-12 12:00:18 +01:00
Martin Gross
34c9c40ddc Option to hide date-block on frontpage (#1603)
* Option to hide date-block on frontpage

* Also hide date in headline
2020-03-12 10:28:47 +01:00
Martin Gross
39d05a6c40 Duplicate generate_ticket for items on duplication 2020-03-11 18:44:29 +01:00
Martin Gross
b664222c62 Calculation fix for unlimited Quota w/ Waitinglist 2020-03-11 16:48:57 +01:00
Raphael Michel
1ee48a10b5 Allow to reactivate canceled orders (#1601) 2020-03-11 11:40:56 +01:00
Raphael Michel
2431a8b767 Fix typo 2020-03-09 17:37:13 +01:00
Raphael Michel
af84354e51 Resolve some warnings in the test suite 2020-03-09 14:57:19 +01:00
Raphael Michel
b04de880fc Bump to 3.8.0.dev0 2020-03-09 14:34:00 +01:00
639 changed files with 228148 additions and 107264 deletions

42
.github/workflows/docs.yml vendored Normal file
View File

@@ -0,0 +1,42 @@
name: Documentation
on:
push:
branches: [ master ]
paths-ignore:
- 'src/pretix/locale/**'
- 'src/pretix/static/**'
- 'src/tests/**'
pull_request:
branches: [ master ]
paths-ignore:
- 'src/pretix/locale/**'
- 'src/pretix/static/**'
- 'src/tests/**'
jobs:
spelling:
name: Spellcheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v1
with:
python-version: 3.8
- uses: actions/cache@v1
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install system packages
run: sudo apt update && sudo apt install enchant hunspell aspell-en
- name: Install Dependencies
run: pip3 install --no-use-pep517 -Ur doc/requirements.txt
- name: Spellcheck docs
run: make spelling
working-directory: ./doc
- name:
run: '[ ! -s _build/spelling/output.txt ]'
working-directory: ./doc

62
.github/workflows/strings.yml vendored Normal file
View File

@@ -0,0 +1,62 @@
name: Strings
on:
push:
branches: [ master ]
paths:
- 'doc/**'
- 'src/pretix/locale/**'
pull_request:
branches: [ master ]
paths:
- 'doc/**'
- 'src/pretix/locale/**'
jobs:
compile:
runs-on: ubuntu-latest
name: Check gettext syntax
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v1
with:
python-version: 3.8
- uses: actions/cache@v1
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install system packages
run: sudo apt update && sudo apt install gettext
- name: Install Dependencies
run: pip3 install --no-use-pep517 -Ur src/requirements.txt
- name: Compile messages
run: python manage.py compilemessages
working-directory: ./src
- name: Compile jsi18n
run: python manage.py compilejsi18n
working-directory: ./src
spelling:
runs-on: ubuntu-latest
name: Spellcheck
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v1
with:
python-version: 3.8
- uses: actions/cache@v1
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install system packages
run: sudo apt update && sudo apt install enchant hunspell hunspell-de-de aspell-en aspell-de
- name: Install Dependencies
run: pip3 install --no-use-pep517 -Ur src/requirements/dev.txt
- name: Spellcheck translations
run: potypo
working-directory: ./src

55
.github/workflows/style.yml vendored Normal file
View File

@@ -0,0 +1,55 @@
name: Code Style
on:
push:
branches: [ master ]
paths-ignore:
- 'src/pretix/locale/**'
- 'src/pretix/static/**'
pull_request:
branches: [ master ]
paths-ignore:
- 'src/pretix/locale/**'
- 'src/pretix/static/**'
jobs:
isort:
name: isort
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v1
with:
python-version: 3.8
- uses: actions/cache@v1
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install Dependencies
run: pip3 install --no-use-pep517 -Ur src/requirements/dev.txt
- name: Run isort
run: isort -c .
working-directory: ./src
flake:
name: flake8
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v1
with:
python-version: 3.8
- uses: actions/cache@v1
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install Dependencies
run: pip3 install -r src/requirements.txt --no-use-pep517 -Ur src/requirements/dev.txt
- name: Run flake8
run: flake8 .
working-directory: ./src

75
.github/workflows/tests.yml vendored Normal file
View File

@@ -0,0 +1,75 @@
name: Tests
on:
push:
branches: [ master ]
paths-ignore:
- 'doc/**'
- 'src/pretix/locale/**'
pull_request:
branches: [ master ]
paths-ignore:
- 'doc/**'
- 'src/pretix/locale/**'
jobs:
test:
runs-on: ubuntu-latest
name: Tests
strategy:
matrix:
python-version: [3.6, 3.7, 3.8]
database: [sqlite, postgres, mysql]
exclude:
- database: mysql
python-version: 3.7
- database: sqlite
python-version: 3.7
- database: mysql
python-version: 3.6
- database: sqlite
python-version: 3.6
steps:
- uses: actions/checkout@v2
- uses: getong/mariadb-action@v1.1
with:
mariadb version: '10.4'
mysql database: 'pretix'
mysql root password: ''
if: matrix.database == 'mysql'
- uses: harmon758/postgresql-action@v1
with:
postgresql version: '11'
postgresql db: 'pretix'
postgresql user: 'postgres'
postgresql password: 'postgres'
if: matrix.database == 'postgres'
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}
- uses: actions/cache@v1
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install system dependencies
run: sudo apt update && sudo apt install gettext mysql-client
- name: Install Python dependencies
run: pip3 install -r src/requirements.txt --no-use-pep517 -Ur src/requirements/dev.txt mysqlclient psycopg2-binary
- name: Run checks
run: python manage.py check
working-directory: ./src
- name: Compile
working-directory: ./src
run: make all compress
- name: Run tests
working-directory: ./src
run: PRETIX_CONFIG_FILE=tests/travis_${{ matrix.database }}.cfg py.test -n 3 -p no:sugar --cov=./ --cov-report=xml --reruns 3 tests --maxfail=100
- name: Upload coverage
uses: codecov/codecov-action@v1
with:
file: src/coverage.xml
fail_ci_if_error: true
if: matrix.database == 'postgres' && matrix.python-version == '3.8'

View File

@@ -5,7 +5,11 @@ tests:
- virtualenv env
- source env/bin/activate
- pip install -U pip wheel setuptools
- XDG_CACHE_HOME=/cache bash .travis.sh tests
- XDG_CACHE_HOME=/cache pip3 install -r src/requirements.txt --no-use-pep517 -Ur src/requirements/dev.txt
- cd src
- python manage.py check
- make all compress
- py.test --reruns 3 -n 3 tests
tags:
- python3
except:
@@ -16,15 +20,17 @@ pypi:
- cp /keys/.pypirc ~/.pypirc
- virtualenv env
- source env/bin/activate
- pip install -U pip wheel setuptools
- pip install -U pip wheel setuptools check-manifest twine
- XDG_CACHE_HOME=/cache pip3 install -Ur src/requirements.txt -r src/requirements/dev.txt
- cd src
- python setup.py sdist
- pip install dist/pretix-*.tar.gz
- python -m pretix migrate
- python -m pretix check
- python setup.py sdist upload
- python setup.py bdist_wheel upload
- check-manifest
- python setup.py sdist bdist_wheel
- twine check dist/*
- twine upload dist/*
tags:
- python3
only:

View File

@@ -1,68 +0,0 @@
#!/bin/bash
set -e
set -x
echo "Executing job $1"
if [ "$PRETIX_CONFIG_FILE" == "tests/travis_mysql.cfg" ]; then
mysql -u root -e 'CREATE DATABASE pretix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;'
pip3 install -Ur src/requirements/mysql.txt
fi
if [ "$PRETIX_CONFIG_FILE" == "tests/travis_postgres.cfg" ]; then
psql -c 'create database travis_ci_test;' -U postgres
fi
if [ "$1" == "style" ]; then
XDG_CACHE_HOME=/cache pip3 install --no-use-pep517 -Ur src/requirements.txt -r src/requirements/dev.txt
cd src
flake8 .
isort -c -rc -df .
fi
if [ "$1" == "doctests" ]; then
XDG_CACHE_HOME=/cache pip3 install --no-use-pep517 -Ur doc/requirements.txt
cd doc
make doctest
fi
if [ "$1" == "doc-spelling" ]; then
XDG_CACHE_HOME=/cache pip3 install --no-use-pep517 -Ur doc/requirements.txt
cd doc
make spelling
if [ -s _build/spelling/output.txt ]; then
exit 1
fi
fi
if [ "$1" == "translation-spelling" ]; then
XDG_CACHE_HOME=/cache pip3 install --no-use-pep517 -Ur src/requirements/dev.txt
cd src
potypo
fi
if [ "$1" == "tests" ]; then
pip3 install -r src/requirements.txt --no-use-pep517 -Ur src/requirements/dev.txt
cd src
python manage.py check
make all compress
py.test --reruns 5 -n 3 tests
fi
if [ "$1" == "tests-cov" ]; then
pip3 install -r src/requirements.txt --no-use-pep517 -Ur src/requirements/dev.txt
cd src
python manage.py check
make all compress
coverage run -m py.test --reruns 5 tests && codecov
fi
if [ "$1" == "plugins" ]; then
pip3 install -r src/requirements.txt --no-use-pep517 -Ur src/requirements/dev.txt
cd src
python setup.py develop
make all compress
pushd ~
git clone --depth 1 https://github.com/pretix/pretix-cartshare.git
cd pretix-cartshare
python setup.py develop
make
py.test --reruns 5 tests
popd
fi

View File

@@ -1,45 +0,0 @@
language: python
dist: xenial
sudo: false
install:
- pip install -U pip wheel setuptools
script:
- bash .travis.sh $JOB
cache:
directories:
- $HOME/.cache/pip
services:
- mysql
- postgresql
matrix:
include:
- python: 3.7
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_sqlite.cfg
- python: 3.7
env: JOB=tests-cov PRETIX_CONFIG_FILE=tests/travis_postgres.cfg
- python: 3.7
env: JOB=style
- python: 3.7
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_mysql.cfg
- python: 3.7
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_postgres.cfg
- python: 3.5
env: JOB=tests PRETIX_CONFIG_FILE=tests/travis_postgres.cfg
- python: 3.7
env: JOB=doc-spelling
- python: 3.7
env: JOB=translation-spelling
addons:
postgresql: "9.4"
mariadb: '10.3'
apt:
packages:
- enchant
- myspell-de-de
- aspell-en
- sqlite3
sources:
- travis-ci/sqlite3
branches:
except:
- /^weblate-.*/

View File

@@ -29,7 +29,7 @@ RUN apt-get update && \
mkdir /etc/pretix && \
mkdir /data && \
useradd -ms /bin/bash -d /pretix -u 15371 pretixuser && \
echo 'pretixuser ALL=(ALL) NOPASSWD: /usr/bin/supervisord' >> /etc/sudoers && \
echo 'pretixuser ALL=(ALL) NOPASSWD:SETENV: /usr/bin/supervisord' >> /etc/sudoers && \
mkdir /static
ENV LC_ALL=C.UTF-8 \

View File

@@ -4,11 +4,10 @@ pretix
.. image:: https://img.shields.io/pypi/v/pretix.svg
:target: https://pypi.python.org/pypi/pretix
.. image:: https://readthedocs.org/projects/pretix/badge/?version=latest
.. image:: https://github.com/pretix/pretix/workflows/Documentation/badge.svg
:target: https://docs.pretix.eu/en/latest/
.. image:: https://travis-ci.org/pretix/pretix.svg?branch=master
:target: https://travis-ci.org/pretix/pretix
.. image:: https://github.com/pretix/pretix/workflows/Tests/badge.svg
.. image:: https://codecov.io/gh/pretix/pretix/branch/master/graph/badge.svg
:target: https://codecov.io/gh/pretix/pretix
@@ -20,9 +19,8 @@ Reinventing ticket presales, one ticket at a time.
Project status & release cycle
------------------------------
While there is always a lot to do and improve on, pretix by now has been in use for more than a dozen
conferences that sold over ten thousand tickets combined without major problems. We therefore think of
pretix as being stable and ready to use.
While there is always a lot to do and improve on, pretix by now has been in use for thousands of events
conferences that sold millions of tickets combined. We therefore think of pretix as being stable and ready to use.
If you want to use or extend pretix, we strongly recommend to follow our `blog`_. We will announce all
releases there. You can always find the latest stable version on PyPI or in the ``release/X.Y`` branch of
@@ -31,9 +29,13 @@ the sense that it does not break your data, but its APIs might change without p
To get started using pretix on your own server, look at the `installation guide`_ in our documentation.
This project is 100 percent free and open source software. If you are interested in commercial support,
hosting services or supporting this project financially, please go to `pretix.eu`_ or contact us at
support@pretix.eu.
Support
-------
This project is 100 percent free and open source software. You are welcome to ask questions in the GitHub
repository. Private support via email or phone is only offered to customers of our pretix Hosted or pretix
Enterprise offerings. If you are interested in commercial support, hosting services or supporting this project
financially, please go to `pretix.eu`_ or contact us at support@pretix.eu.
Contributing
------------
@@ -53,8 +55,8 @@ License
The code in this repository is published under the terms of the Apache License.
See the LICENSE file for the complete license text.
This project is maintained by Raphael Michel <mail@raphaelmichel.de>. See the
AUTHORS file for a list of all the awesome folks who contributed to this project.
This project is maintained by Raphael Michel. See the AUTHORS file for a list of all
the awesome folks who contributed to this project.
.. _installation guide: https://docs.pretix.eu/en/latest/admin/installation/index.html
.. _developer documentation: https://docs.pretix.eu/en/latest/development/index.html

View File

@@ -19,7 +19,7 @@ fi
python3 -m pretix migrate --noinput
if [ "$1" == "all" ]; then
exec sudo /usr/bin/supervisord -n -c /etc/supervisord.conf
exec sudo -E /usr/bin/supervisord -n -c /etc/supervisord.conf
fi
if [ "$1" == "webworker" ]; then
@@ -33,8 +33,8 @@ if [ "$1" == "webworker" ]; then
fi
if [ "$1" == "taskworker" ]; then
export C_FORCE_ROOT=True
exec celery -A pretix.celery_app worker -l info
shift
exec celery -A pretix.celery_app worker -l info "$@"
fi
if [ "$1" == "shell" ]; then
@@ -45,5 +45,4 @@ if [ "$1" == "upgrade" ]; then
exec python3 -m pretix updatestyles
fi
echo "Specify argument: all|cron|webworker|taskworker|shell|upgrade"
exit 1
exec python3 -m pretix "$@"

View File

@@ -6099,3 +6099,6 @@ img.screenshot, a.screenshot img {
.versionchanged p:last-child {
margin-bottom: 0;
}
.rst-content td > .line-block {
margin-left: 0 !important;
}

View File

@@ -92,9 +92,14 @@ Example::
``trust_x_forwarded_proto``
Specifies whether the ``X-Forwarded-Proto`` header can be trusted. Only set to ``on`` if you have a reverse
proxy that actively removes and re-adds the header to make sure the correct client IP is the first value.
proxy that actively removes and re-adds the header to make sure the correct value is set.
Defaults to ``off``.
``csp_log``
Log violations of the Content Security Policy (CSP). Defaults to ``on``.
``loglevel``
Set console and file log level (``DEBUG``, ``INFO``, ``WARNING``, ``ERROR`` or ``CRITICAL``). Defaults to ``INFO``.
Locale settings
---------------
@@ -337,6 +342,15 @@ application. If you want to use sentry, you need to set a DSN in the configurati
You will be given this value by your sentry installation.
Caching
-------
You can adjust some caching settings to control how much storage pretix uses::
[cache]
tickets=48 ; Number of hours tickets (PDF, passbook, …) are cached
Secret length
-------------

View File

@@ -12,3 +12,4 @@ This documentation is for everyone who wants to install pretix on a server.
config
maintainance
scaling
indexes

73
doc/admin/indexes.rst Normal file
View File

@@ -0,0 +1,73 @@
Additional database indices
===========================
If you have a large pretix database, some features such as search for orders or events might turn pretty slow.
For PostgreSQL, we have compiled a list of additional database indexes that you can add to speed things up.
Just like any index, they in turn make write operations insignificantly slower and cause the database to use
more disk space.
The indexes aren't automatically created by pretix since Django does not allow us to do so only on PostgreSQL
(and they won't work on other databases). Also, they're really not necessary if you're not having tens of
thousands of records in your database.
However, this also means they won't automatically adapt if some of the referred fields change in future updates of pretix
and you might need to re-check this page and change them manually.
Here is the currently recommended set of commands::
CREATE EXTENSION pg_trgm;
CREATE INDEX CONCURRENTLY pretix_addidx_event_slug
ON pretixbase_event
USING gin (upper("slug") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_event_name
ON pretixbase_event
USING gin (upper("name") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_order_code
ON pretixbase_order
USING gin (upper("code") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_voucher_code
ON pretixbase_voucher
USING gin (upper("code") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_invoice_nu1
ON "pretixbase_invoice" (UPPER("invoice_no"));
CREATE INDEX CONCURRENTLY pretix_addidx_invoice_nu2
ON "pretixbase_invoice" (UPPER("full_invoice_no"));
CREATE INDEX CONCURRENTLY pretix_addidx_organizer_name
ON pretixbase_organizer
USING gin (upper("name") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_organizer_slug
ON pretixbase_organizer
USING gin (upper("slug") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_order_email
ON pretixbase_order
USING gin (upper("email") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_order_comment
ON pretixbase_order
USING gin (upper("comment") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_orderpos_name
ON pretixbase_orderposition
USING gin (upper("attendee_name_cached") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_orderpos_scret
ON pretixbase_orderposition
USING gin (upper("secret") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_orderpos_email
ON pretixbase_orderposition
USING gin (upper("attendee_email") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_ia_name
ON pretixbase_invoiceaddress
USING gin (upper("name_cached") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_ia_company
ON pretixbase_invoiceaddress
USING gin (upper("company") gin_trgm_ops);
Also, if you use our ``pretix-shipping`` plugin::
CREATE INDEX CONCURRENTLY pretix_addidx_sa_name
ON pretix_shipping_shippingaddress
USING gin (upper("name") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_sa_company
ON pretix_shipping_shippingaddress
USING gin (upper("company") gin_trgm_ops);

View File

@@ -26,7 +26,7 @@ installation guides):
* `Docker`_
* A SMTP server to send out mails, e.g. `Postfix`_ on your machine or some third-party server you have credentials for
* A HTTP reverse proxy, e.g. `nginx`_ or Apache to allow HTTPS connections
* A `PostgreSQL`_, `MySQL`_ 5.7+, or MariaDB 10.2.7+ database server
* A `PostgreSQL`_ 9.5+, `MySQL`_ 5.7+, or MariaDB 10.2.7+ database server
* A `redis`_ server
We also recommend that you use a firewall, although this is not a pretix-specific recommendation. If you're new to
@@ -182,7 +182,7 @@ named ``/etc/systemd/system/pretix.service`` with the following content::
-v /var/pretix-data:/data \
-v /etc/pretix:/etc/pretix \
-v /var/run/redis:/var/run/redis \
--sysctl net.core.somaxconn=4096
--sysctl net.core.somaxconn=4096 \
pretix/standalone:stable all
ExecStop=/usr/bin/docker stop %n
@@ -290,7 +290,7 @@ to re-build your custom image after you pulled ``pretix/standalone`` if you want
.. _Let's Encrypt: https://letsencrypt.org/
.. _pretix.eu: https://pretix.eu/
.. _MySQL: https://dev.mysql.com/doc/refman/5.7/en/linux-installation-apt-repo.html
.. _PostgreSQL: https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-9-4-on-debian-8
.. _PostgreSQL: https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-20-04
.. _redis: https://blog.programster.org/debian-8-install-redis-server/
.. _ufw: https://en.wikipedia.org/wiki/Uncomplicated_Firewall
.. _redis website: https://redis.io/topics/security

View File

@@ -12,7 +12,7 @@ solution with many things readily set-up, look at :ref:`dockersmallscale`.
get it right. If you're not feeling comfortable managing a Linux server, check out our hosting and service
offers at `pretix.eu`_.
We tested this guide on the Linux distribution **Debian 8.0** but it should work very similar on other
We tested this guide on the Linux distribution **Debian 10.0** but it should work very similar on other
modern distributions, especially on all systemd-based ones.
Requirements
@@ -23,7 +23,7 @@ installation guides):
* A SMTP server to send out mails, e.g. `Postfix`_ on your machine or some third-party server you have credentials for
* A HTTP reverse proxy, e.g. `nginx`_ or Apache to allow HTTPS connections
* A `PostgreSQL`_, `MySQL`_ 5.7+, or MariaDB 10.2.7+ database server
* A `PostgreSQL`_ 9.5+, `MySQL`_ 5.7+, or MariaDB 10.2.7+ database server
* A `redis`_ server
We also recommend that you use a firewall, although this is not a pretix-specific recommendation. If you're new to
@@ -133,7 +133,7 @@ command if you're running MySQL::
(venv)$ pip3 install "pretix[postgres]" gunicorn
Note that you need Python 3.5 or newer. You can find out your Python version using ``python -V``.
Note that you need Python 3.6 or newer. You can find out your Python version using ``python -V``.
We also need to create a data directory::
@@ -308,7 +308,7 @@ example::
.. _Let's Encrypt: https://letsencrypt.org/
.. _pretix.eu: https://pretix.eu/
.. _MySQL: https://dev.mysql.com/doc/refman/5.7/en/linux-installation-apt-repo.html
.. _PostgreSQL: https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-9-4-on-debian-8
.. _PostgreSQL: https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-20-04
.. _redis: https://blog.programster.org/debian-8-install-redis-server/
.. _ufw: https://en.wikipedia.org/wiki/Uncomplicated_Firewall
.. _strong encryption settings: https://mozilla.github.io/server-side-tls/ssl-config-generator/

View File

@@ -92,7 +92,8 @@ pretix_task_duration_seconds
pretix_model_instances
Gauge. Measures number of instances of a certain model within the database, labeled with
the ``model`` name.
the ``model`` name. Starting with pretix 3.11, these numbers might only be approximate for
most tables when running on PostgreSQL to mitigate performance impact.
.. _metric types: https://prometheus.io/docs/concepts/metric_types/
.. _Prometheus: https://prometheus.io/

View File

@@ -49,11 +49,15 @@ information on your device as well as your API token:
"device_id": 5,
"unique_serial": "HHZ9LW9JWP390VFZ",
"api_token": "1kcsh572fonm3hawalrncam4l1gktr2rzx25a22l8g9hx108o9oi0rztpcvwnfnd",
"name": "Bar"
"name": "Bar",
"gate": {
"id": 3,
"name": "South entrance"
}
}
Please make sure that you store this ``api_token`` value. We also recommend storing your device ID, your assigned
``unique_serial``, and the ``organizer`` you have access to, but that's up to you.
``unique_serial``, and the ``organizer`` you have access to, but that's up to you. ``gate`` might be ``null``.
In case of an error, the response will look like this:
@@ -98,6 +102,8 @@ following endpoint:
"software_version": "4.1.0"
}
You will receive a response equivalent to the response of your initialization request.
Creating a new API key
----------------------
@@ -126,12 +132,65 @@ invalidate your API key. There is no way to reverse this operation.
This can also be done by the user through the web interface.
Permissions
-----------
Permissions & security profiles
-------------------------------
Device authentication is currently hardcoded to grant the following permissions:
* View event meta data and products etc.
* View and change orders
* View orders
* Change orders
* Manage gift cards
Devices cannot change events or products and cannot access vouchers.
Additionally, when creating a device through the user interface or API, a user can specify a "security profile" for
the device. These include an allow list of specific API calls that may be made by the device. pretix ships with security
policies for official pretix apps like pretixSCAN and pretixPOS.
Removing a device
-----------------
If you want implement a way to to deprovision a device in your software, you can call the ``revoke`` endpoint to
invalidate your API key. There is no way to reverse this operation.
.. sourcecode:: http
POST /api/v1/device/revoke HTTP/1.1
Host: pretix.eu
Authorization: Device 1kcsh572fonm3hawalrncam4l1gktr2rzx25a22l8g9hx108o9oi0rztpcvwnfnd
This can also be done by the user through the web interface.
Event selection
---------------
In most cases, your application should allow the user to select the event and check-in list they work with manually
from a list. However, in some cases it is required to automatically configure the device for the correct event, for
example in a kiosk-like situation where nobody is operating the device. In this case, the app can query the server
for a suggestion which event should be used. You can also submit the configuration that is currently in use via
query parameters:
.. sourcecode:: http
GET /api/v1/device/eventselection?current_event=democon&current_subevent=42&current_checkinlist=542 HTTP/1.1
Host: pretix.eu
Authorization: Device 1kcsh572fonm3hawalrncam4l1gktr2rzx25a22l8g9hx108o9oi0rztpcvwnfnd
You can get three response codes:
* ``304`` The server things you already selected a good event
* ``404`` The server has not found a suggestion for you
* ``200`` The server suggests a new event (body see below)
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: application/json
{
"event": "democon",
"subevent": 23,
"checkinlist": 5
}

View File

@@ -7,9 +7,6 @@ This part of the documentation contains information about the REST-style API
exposed by pretix since version 1.5 that can be used by third-party programs
to interact with pretix and its data structures.
Currently, the API provides mostly read-only capabilities, but it will be extended
in functionality over time.
.. toctree::
:maxdepth: 2

View File

@@ -25,7 +25,7 @@ Obtaining an authorization grant
--------------------------------
To authorize a new user, link or redirect them to the ``authorize`` endpoint, passing your client ID as a query
parameter. Additionally, you can pass a scope (currently either ``read``, ``write``, or ``read write``)
parameter. Additionally, you can pass a scope (currently either ``read``, ``write``, ``read write`` or ``profile``)
and an URL the user should be redirected to after successful or failed authorization. You also need to pass the
``response_type`` parameter with a value of ``code``. Example::
@@ -47,11 +47,9 @@ You will need this ``code`` parameter to perform the next step.
On a failed registration, a query string like ``?error=access_denied`` will be appended to the redirection URL.
.. note:: In this step, the user is allowed to restrict your access to certain organizer accounts. If you try to
re-authenticate the user later, the user might be instantly redirected back to you if authorization is already
given and would therefore be unable to review their organizer restriction settings. You can append the
``approval_prompt=force`` query parameter if you want to make sure the user actively needs to confirm the
authorization.
.. note:: By default, the user is asked to give permission on every call to this URL. If you **only** request the
``profile`` scope, i.e. no access to organizer data, you can pass the ``approval_prompt=auto`` parameter
to skip user interaction on subsequent calls.
Getting an access token
-----------------------
@@ -193,10 +191,11 @@ If you need the user's meta data, you can fetch it here:
Content-Type: application/json
{
email: "admin@localhost",
fullname: "John Doe",
locale: "de",
timezone: "Europe/Berlin"
"email": "admin@localhost",
"fullname": "John Doe",
"locale": "de",
"is_staff": false,
"timezone": "Europe/Berlin"
}
:statuscode 200: no error

View File

@@ -30,6 +30,10 @@ position_count integer Number of ticke
checkin_count integer Number of check-ins performed on this list (read-only).
include_pending boolean If ``true``, the check-in list also contains tickets from orders in pending state.
auto_checkin_sales_channels list of strings All items on the check-in list will be automatically marked as checked-in when purchased through any of the listed sales channels.
allow_multiple_entries boolean If ``true``, subsequent scans of a ticket on this list should not show a warning but instead be stored as an additional check-in.
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.
===================================== ========================== =======================================================
.. versionchanged:: 1.10
@@ -48,6 +52,19 @@ auto_checkin_sales_channels list of strings All items on th
The ``auto_checkin_sales_channels`` field has been added.
.. versionchanged:: 3.9
The ``subevent`` attribute may now be ``null`` inside event series. The ``allow_multiple_entries``,
``allow_entry_after_exit``, and ``rules`` attributes have been added.
.. versionchanged:: 3.11
The ``subevent_match`` and ``exclude`` query parameters have been added.
.. versionchanged:: 3.12
The ``exit_all_at`` attribute has been added.
Endpoints
---------
@@ -89,6 +106,10 @@ Endpoints
"limit_products": [],
"include_pending": false,
"subevent": null,
"allow_multiple_entries": false,
"allow_entry_after_exit": true,
"exit_all_at": null,
"rules": {},
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -98,6 +119,8 @@ Endpoints
:query integer page: The page number in case of a multi-page result set, default is 1
:query integer subevent: Only return check-in lists of the sub-event with the given ID
:query integer subevent_match: Only return check-in lists that are valid for the sub-event with the given ID (i.e. also lists valid for all subevents)
:query string exclude: Exclude a field from the output, e.g. ``checkin_count``. Can be used as a performance optimization. Can be passed multiple times.
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
:statuscode 200: no error
@@ -133,6 +156,10 @@ Endpoints
"limit_products": [],
"include_pending": false,
"subevent": null,
"allow_multiple_entries": false,
"allow_entry_after_exit": true,
"exit_all_at": null,
"rules": {},
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -168,6 +195,7 @@ Endpoints
{
"checkin_count": 17,
"position_count": 42,
"inside_count": 12,
"event": {
"name": "Demo Conference"
},
@@ -229,6 +257,8 @@ Endpoints
"all_products": false,
"limit_products": [1, 2],
"subevent": null,
"allow_multiple_entries": false,
"allow_entry_after_exit": true,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -251,6 +281,8 @@ Endpoints
"limit_products": [1, 2],
"include_pending": false,
"subevent": null,
"allow_multiple_entries": false,
"allow_entry_after_exit": true,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -303,6 +335,8 @@ Endpoints
"limit_products": [1, 2],
"include_pending": false,
"subevent": null,
"allow_multiple_entries": false,
"allow_entry_after_exit": true,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -582,6 +616,7 @@ Order position endpoints
:<json datetime datetime: Specifies the datetime of the check-in. If not supplied, the current time will be used.
:<json boolean force: Specifies that the check-in should succeed regardless of previous check-ins or required
questions that have not been filled. Defaults to ``false``.
:<json string type: Send ``"exit"`` for an exit and ``"entry"`` (default) for an entry.
:<json boolean ignore_unpaid: Specifies that the check-in should succeed even if the order is in pending state.
Defaults to ``false`` and only works when ``include_pending`` is set on the check-in
list.
@@ -696,6 +731,7 @@ Order position endpoints
``canceled_supported`` to ``true``, otherwise these orders return ``unpaid``.
* ``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
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch

View File

@@ -0,0 +1,224 @@
.. spelling:: fullname
.. _`rest-devices`:
Devices
=======
See also :ref:`rest-deviceauth`.
Device resource
----------------
The device resource contains the following public fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
device_id integer Internal ID of the device within this organizer
unique_serial string Unique identifier of this device
name string Device name
all_events boolean Whether this device has access to all events
limit_events list List of event slugs this device has access to
hardware_brand string Device hardware manufacturer (read-only)
hardware_model string Device hardware model (read-only)
software_brand string Device software product (read-only)
software_version string Device software version (read-only)
created datetime Creation time
initialized datetime Time of initialization (or ``null``)
initialization_token string Token for initialization
revoked boolean Whether this device no longer has access
security_profile string The name of a supported security profile restricting API access
===================================== ========================== =======================================================
Device endpoints
----------------
.. http:get:: /api/v1/organizers/(organizer)/devices/
Returns a list of all devices within a given organizer.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/devices/ 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": [
{
"device_id": 1,
"unique_serial": "UOS3GNZ27O39V3QS",
"initialization_token": "frkso3m2w58zuw70",
"all_events": false,
"limit_events": [
"museum"
],
"revoked": false,
"name": "Scanner",
"created": "2020-09-18T14:17:40.971519Z",
"initialized": "2020-09-18T14:17:44.190021Z",
"security_profile": "full",
"hardware_brand": "Zebra",
"hardware_model": "TC25",
"software_brand": "pretixSCAN",
"software_version": "1.5.1"
}
]
}
:query integer page: The page number in case of a multi-page result set, default is 1
:param organizer: The ``slug`` field of the organizer to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view this resource.
.. http:get:: /api/v1/organizers/(organizer)/devices/(device_id)/
Returns information on one device, identified by its ID.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/devices/1/ 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
{
"device_id": 1,
"unique_serial": "UOS3GNZ27O39V3QS",
"initialization_token": "frkso3m2w58zuw70",
"all_events": false,
"limit_events": [
"museum"
],
"revoked": false,
"name": "Scanner",
"created": "2020-09-18T14:17:40.971519Z",
"initialized": "2020-09-18T14:17:44.190021Z",
"security_profile": "full",
"hardware_brand": "Zebra",
"hardware_model": "TC25",
"software_brand": "pretixSCAN",
"software_version": "1.5.1"
}
:param organizer: The ``slug`` field of the organizer to fetch
:param device_id: The ``device_id`` field of the device to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view this resource.
.. http:post:: /api/v1/organizers/(organizer)/devices/
Creates a new device
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/devices/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"name": "Scanner",
"all_events": true,
"limit_events": [],
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
{
"device_id": 1,
"unique_serial": "UOS3GNZ27O39V3QS",
"initialization_token": "frkso3m2w58zuw70",
"all_events": true,
"limit_events": [],
"revoked": false,
"name": "Scanner",
"created": "2020-09-18T14:17:40.971519Z",
"security_profile": "full",
"initialized": null
"hardware_brand": null,
"hardware_model": null,
"software_brand": null,
"software_version": null
}
:param organizer: The ``slug`` field of the organizer to create a device for
:statuscode 201: no error
:statuscode 400: The device could not be created due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to create this resource.
.. http:patch:: /api/v1/organizers/(organizer)/devices/(device_id)/
Update a device.
**Example request**:
.. sourcecode:: http
PATCH /api/v1/organizers/bigevents/devices/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 94
{
"name": "Foo"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"id": 1,
"name": "Foo",
...
}
:param organizer: The ``slug`` field of the organizer to modify
:param device_id: The ``device_id`` field of the device to modify
:statuscode 200: no error
:statuscode 400: The device could not be modified due to invalid submitted data
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to change this resource.

View File

@@ -44,6 +44,9 @@ seat_category_mapping object An object mappi
(strings) to items in the event (integers or ``null``).
timezone string Event timezone name
item_meta_properties object Item-specific meta data parameters and default values.
valid_keys object Cryptographic keys for non-default signature schemes.
For performance reason, value is omitted in lists and
only contained in detail views. Value can be cached.
===================================== ========================== =======================================================
@@ -84,6 +87,10 @@ item_meta_properties object Item-specific m
The attribute ``item_meta_properties`` has been added.
.. versionchanged:: 3.12
The attribute ``valid_keys`` has been added.
Endpoints
---------
@@ -144,7 +151,7 @@ Endpoints
"pretix.plugins.stripe"
"pretix.plugins.paypal"
"pretix.plugins.ticketoutputpdf"
]
],
}
]
}
@@ -216,7 +223,12 @@ Endpoints
"pretix.plugins.stripe"
"pretix.plugins.paypal"
"pretix.plugins.ticketoutputpdf"
]
],
"valid_keys": {
"pretix_sig1": [
"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUNvd0JRWURLMlZ3QXlFQTdBRDcvdkZBMzNFc1k0ejJQSHI3aVpQc1o4bjVkaDBhalA4Z3l6Tm1tSXM9Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo="
]
}
}
:param organizer: The ``slug`` field of the organizer to fetch
@@ -472,7 +484,7 @@ Endpoints
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to create this resource.
.. http:delete:: /api/v1/organizers/(organizer)/events/(event)/items/(id)/
.. http:delete:: /api/v1/organizers/(organizer)/events/(event)/
Delete an event. Note that events with orders cannot be deleted to ensure data integrity.
@@ -526,7 +538,7 @@ information about the properties.
Get current values of event settings.
Permission required: "Can change event settings"
Permission required: "Can change event settings" (Exception: with device auth, *some* settings can always be *read*.)
**Example request**:

View File

@@ -18,6 +18,8 @@ secret string Gift card code
value money (string) Current gift card value
currency string Currency of the value (can not be modified later)
testmode boolean Whether this is a test gift card
expires datetime Expiry date (or ``null``)
conditions string Special terms and conditions for this card (or ``null``)
===================================== ========================== =======================================================
Endpoints
@@ -53,6 +55,8 @@ Endpoints
"secret": "HLBYVELFRC77NCQY",
"currency": "EUR",
"testmode": false,
"expires": null,
"conditions": null,
"value": "13.37"
}
]
@@ -92,6 +96,8 @@ Endpoints
"secret": "HLBYVELFRC77NCQY",
"currency": "EUR",
"testmode": false,
"expires": null,
"conditions": null,
"value": "13.37"
}
@@ -134,6 +140,8 @@ Endpoints
"secret": "HLBYVELFRC77NCQY",
"testmode": false,
"currency": "EUR",
"expires": null,
"conditions": null,
"value": "13.37"
}
@@ -180,6 +188,8 @@ Endpoints
"secret": "HLBYVELFRC77NCQY",
"testmode": false,
"currency": "EUR",
"expires": null,
"conditions": null,
"value": "14.00"
}
@@ -199,14 +209,15 @@ Endpoints
.. sourcecode:: http
PATCH /api/v1/organizers/bigevents/giftcards/1/transact/ HTTP/1.1
POST /api/v1/organizers/bigevents/giftcards/1/transact/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 94
Content-Length: 79
{
"value": "2.00"
"value": "2.00",
"text": "Optional value explaining the transaction"
}
**Example response**:
@@ -222,6 +233,8 @@ Endpoints
"secret": "HLBYVELFRC77NCQY",
"currency": "EUR",
"testmode": false,
"expires": null,
"conditions": null,
"value": "15.37"
}

View File

@@ -24,6 +24,7 @@ Resources and endpoints
giftcards
carts
teams
devices
webhooks
seatingplans
billing_invoices

View File

@@ -24,6 +24,7 @@ addon_category integer Internal ID of
min_count integer The minimal number of add-ons that need to be chosen.
max_count integer The maximal number of add-ons that can be chosen.
position integer An integer, used for sorting
multi_allowed boolean Adding the same item multiple times is allowed
price_included boolean Adding this add-on to the item is free
===================================== ========================== =======================================================
@@ -65,6 +66,7 @@ Endpoints
"min_count": 0,
"max_count": 10,
"position": 0,
"multi_allowed": false,
"price_included": true
},
{
@@ -73,6 +75,7 @@ Endpoints
"min_count": 0,
"max_count": 10,
"position": 1,
"multi_allowed": false,
"price_included": true
}
]
@@ -112,6 +115,7 @@ Endpoints
"min_count": 0,
"max_count": 10,
"position": 1,
"multi_allowed": false,
"price_included": true
}
@@ -141,6 +145,7 @@ Endpoints
"min_count": 0,
"max_count": 10,
"position": 1,
"multi_allowed": false,
"price_included": true
}
@@ -158,6 +163,7 @@ Endpoints
"min_count": 0,
"max_count": 10,
"position": 1,
"multi_allowed": false,
"price_included": true
}
@@ -206,6 +212,7 @@ Endpoints
"min_count": 0,
"max_count": 10,
"position": 1,
"multi_allowed": false,
"price_included": true
}

View File

@@ -104,6 +104,7 @@ addons list of objects Definition of a
├ min_count integer The minimal number of add-ons that need to be chosen.
├ max_count integer The maximal number of add-ons that can be chosen.
├ position integer An integer, used for sorting
├ multi_allowed boolean Adding the same item multiple times is allowed
└ price_included boolean Adding this add-on to the item is free
bundles list of objects Definition of bundles that are included in this item.
Only writable during creation,
@@ -159,6 +160,10 @@ meta_data object Values set for
The attribute ``meta_data`` has been added.
.. versionchanged:: 3.10
The attribute ``multi_allowed`` has been added to ``addons``.
Notes
-----

View File

@@ -151,6 +151,18 @@ last_modified datetime Last modificati
The ``order.fees.canceled`` attribute has been added.
.. versionchanged:: 3.8
The ``reactivate`` operation has been added.
.. versionchanged:: 3.10
The ``search`` query parameter has been added.
.. versionchanged:: 3.11
The ``exclude`` and ``subevent_after`` query parameter has been added.
.. _order-position-resource:
@@ -173,6 +185,13 @@ price money (string) Price of this p
attendee_name string Specified attendee name for this position (or ``null``)
attendee_name_parts object of strings Decomposition of attendee name (i.e. given name, family name)
attendee_email string Specified attendee email address for this position (or ``null``)
company string Attendee company name (or ``null``)
street string Attendee street (or ``null``)
zipcode string Attendee ZIP code (or ``null``)
city string Attendee city (or ``null``)
country string Attendee country code (or ``null``)
state string Attendee state (ISO 3166-2 code). Only supported in
AU, BR, CA, CN, MY, MX, and US, otherwise ``null``.
voucher integer Internal ID of the voucher used for this position (or ``null``)
tax_rate decimal (string) VAT rate applied for this position
tax_value money (string) VAT included in this position
@@ -182,8 +201,10 @@ addon_to integer Internal ID of
subevent integer ID of the date inside an event series this position belongs to (or ``null``).
pseudonymization_id string A random ID, e.g. for use in lead scanning apps
checkins list of objects List of check-ins with this ticket
├ id integer Internal ID of the check-in event
├ list integer Internal ID of the check-in list
├ datetime datetime Time of check-in
├ type string Type of scan (defaults to ``entry``)
└ auto_checked_in boolean Indicates if this check-in been performed automatically by the system
downloads list of objects List of ticket download options
├ output string Ticket output provider (e.g. ``pdf``, ``passbook``)
@@ -236,6 +257,14 @@ pdf_data object Data object req
The attribute ``canceled`` has been added.
.. versionchanged:: 3.8
The attributes ``company``, ``street``, ``zipcode``, ``city``, ``country``, and ``state`` have been added.
.. versionchanged:: 3.9
The ``checkin.type`` attribute has been added.
.. _order-payment-resource:
Order payment resource
@@ -380,6 +409,12 @@ List of all orders
"full_name": "Peter",
},
"attendee_email": null,
"company": "Sample company",
"street": "Test street 12",
"zipcode": "12345",
"city": "Testington",
"country": "DE",
"state": null,
"voucher": null,
"tax_rate": "0.00",
"tax_value": "0.00",
@@ -392,6 +427,7 @@ List of all orders
"checkins": [
{
"list": 44,
"type": "entry",
"datetime": "2017-12-25T12:45:23Z",
"auto_checked_in": false
}
@@ -441,6 +477,7 @@ List of all orders
``last_modified``, and ``status``. Default: ``datetime``
:query string code: Only return orders that match the given order code
:query string status: Only return orders in the given order status (see above)
:query string search: Only return orders matching a given search query
:query boolean testmode: Only return orders with ``testmode`` set to ``true`` or ``false``
:query boolean require_approval: If set to ``true`` or ``false``, only categories with this value for the field
``require_approval`` will be returned.
@@ -453,6 +490,8 @@ List of all orders
recommend using this in combination with ``testmode=false``, since test mode orders can vanish at any time and
you will not notice it using this method.
:query datetime created_since: Only return orders that have been created since the given date.
:query datetime subevent_after: Only return orders that contain a ticket for a subevent taking place after the given date.
:query string exclude: Exclude a field from the output, e.g. ``fees`` or ``positions.downloads``. Can be used as a performance optimization. Can be passed multiple times.
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
:resheader X-Page-Generated: The server time at the beginning of the operation. If you're using this API to fetch
@@ -536,6 +575,12 @@ Fetching individual orders
"full_name": "Peter",
},
"attendee_email": null,
"company": "Sample company",
"street": "Test street 12",
"zipcode": "12345",
"city": "Testington",
"country": "DE",
"state": null,
"voucher": null,
"tax_rate": "0.00",
"tax_rule": null,
@@ -548,6 +593,7 @@ Fetching individual orders
"checkins": [
{
"list": 44,
"type": "entry",
"datetime": "2017-12-25T12:45:23Z",
"auto_checked_in": false
}
@@ -816,9 +862,9 @@ Creating orders
* ``consume_carts`` (optional) A list of cart IDs. All cart positions with these IDs will be deleted if the
order creation is successful. Any quotas or seats that become free by this operation will be credited to your order
creation.
* ``email``
* ``email`` (optional)
* ``locale``
* ``sales_channel``
* ``sales_channel`` (optional)
* ``payment_provider`` (optional) The identifier of the payment provider set for this order. This needs to be an
existing payment provider. You should use ``"free"`` for free orders, and we strongly advise to use ``"manual"``
for all orders you create as paid. This field is optional when the order status is ``"n"`` or the order total is
@@ -851,15 +897,21 @@ Creating orders
* ``positionid`` (optional, see below)
* ``item``
* ``variation``
* ``variation`` (optional)
* ``price`` (optional, if set to ``null`` or missing the price will be computed from the given product)
* ``seat`` (The ``seat_guid`` attribute of a seat. Required when the specified ``item`` requires a seat, otherwise must be ``null``.)
* ``attendee_name`` **or** ``attendee_name_parts``
* ``attendee_name`` **or** ``attendee_name_parts`` (optional)
* ``voucher`` (optional, the ``code`` attribute of a valid voucher)
* ``attendee_email``
* ``attendee_email`` (optional)
* ``company`` (optional)
* ``street`` (optional)
* ``zipcode`` (optional)
* ``city`` (optional)
* ``country`` (optional)
* ``state`` (optional)
* ``secret`` (optional)
* ``addon_to`` (optional, see below)
* ``subevent``
* ``subevent`` (optional)
* ``answers``
* ``question``
@@ -883,7 +935,8 @@ Creating orders
during order generation and is not respected automatically when the order changes later.)
* ``force`` (optional). If set to ``true``, quotas will be ignored.
* ``send_mail`` (optional). If set to ``true``, the same emails will be sent as for a regular order. Defaults to
* ``send_mail`` (optional). If set to ``true``, the same emails will be sent as for a regular order, regardless of
whether these emails are enabled for certain sales channels. Defaults to
``false``.
If you want to use add-on products, you need to set the ``positionid`` fields of all positions manually
@@ -977,6 +1030,10 @@ Creating orders
Order state operations
----------------------
.. versionchanged:: 3.12
The ``mark_paid`` operation now takes a ``send_email`` parameter.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/mark_paid/
Marks a pending or expired order as successfully paid.
@@ -988,6 +1045,11 @@ Order state operations
POST /api/v1/organizers/bigevents/events/sampleconf/orders/ABC12/mark_paid/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"send_email": true
}
**Example response**:
@@ -1057,6 +1119,42 @@ Order state operations
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
:statuscode 404: The requested order does not exist.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/reactivate/
Reactivates a canceled order. This will set the order to pending or paid state. Only possible if all products are
still available.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/orders/ABC12/reactivate/ 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
{
"code": "ABC12",
"status": "n",
...
}
:param organizer: The ``slug`` field of the organizer to modify
:param event: The ``slug`` field of the event to modify
:param code: The ``code`` field of the order to modify
:statuscode 200: no error
:statuscode 400: The order cannot be reactivated
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
:statuscode 404: The requested order does not exist.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/mark_pending/
Marks a paid order as unpaid.
@@ -1402,6 +1500,7 @@ List of all order positions
"checkins": [
{
"list": 44,
"type": "entry",
"datetime": "2017-12-25T12:45:23Z",
"auto_checked_in": false
}
@@ -1507,6 +1606,7 @@ Fetching individual positions
"checkins": [
{
"list": 44,
"type": "entry",
"datetime": "2017-12-25T12:45:23Z",
"auto_checked_in": false
}
@@ -1632,6 +1732,10 @@ Order payment endpoints
Payments can now be created through the API.
.. versionchanged:: 3.12
The ``confirm`` operation now takes a ``send_email`` parameter.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/payments/
Returns a list of all payments for an order.
@@ -1732,7 +1836,10 @@ Order payment endpoints
Accept: application/json, text/javascript
Content-Type: application/json
{"force": false}
{
"send_email": true,
"force": false
}
**Example response**:
@@ -2156,3 +2263,57 @@ Order refund endpoints
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
:statuscode 404: The requested order or refund does not exist.
Revoked ticket secrets
----------------------
With some non-default ticket secret generation methods, a list of revoked ticket secrets is required for proper validation.
.. versionchanged:: 3.12
Added revocation lists.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/revokedsecrets/
Returns a list of all revoked secrets within a given event.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/revokedsecrets/ 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
X-Page-Generated: 2017-12-01T10:00:00Z
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 1234,
"secret": "k24fiuwvu8kxz3y1",
"created": "2017-12-01T10:00:00Z",
}
]
}
:query integer page: The page number in case of a multi-page result set, default is 1
:query string ordering: Manually set the ordering of results. Valid fields to be used are ``secret`` and ``created``. Default: ``-created``
:query datetime created_since: Only return revocations that have been created since the given date.
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
:resheader X-Page-Generated: The server time at the beginning of the operation. If you're using this API to fetch
differences, this is the value you want to use as ``created_since`` in your next call.
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.

View File

@@ -26,6 +26,8 @@ close_when_sold_out boolean If ``true``, th
again.
closed boolean Whether the quota is currently closed (see above
field).
release_after_exit boolean Whether the quota regains capacity as soon as some tickets
have been scanned at an exit.
===================================== ========================== =======================================================
.. versionchanged:: 1.10
@@ -36,6 +38,10 @@ closed boolean Whether the quo
The attributes ``close_when_sold_out`` and ``closed`` have been added.
.. versionchanged:: 3.10
The attribute ``release_after_exit`` has been added.
Endpoints
---------
@@ -283,6 +289,7 @@ Endpoints
"total_size": 1000,
"pending_orders": 25,
"paid_orders": 423,
"exited_orders": 0,
"cart_positions": 7,
"blocking_vouchers": 126,
"waiting_list": 0

View File

@@ -39,16 +39,19 @@ geo_lon float Longitude of th
item_price_overrides list of objects List of items for which this sub-event overrides the
default price
├ item integer The internal item ID
├ disabled boolean If ``true``, item should not be available for this sub-event
└ price money (string) The price or ``null`` for the default price
variation_price_overrides list of objects List of variations for which this sub-event overrides
the default price
├ variation integer The internal variation ID
├ disabled boolean If ``true``, variation should not be available for this sub-event
└ price money (string) The price or ``null`` for the default price
meta_data object Values set for organizer-specific meta data parameters.
seating_plan integer If reserved seating is in use, the ID of a seating
plan. Otherwise ``null``.
seat_category_mapping object An object mapping categories of the seating plan
(strings) to items in the event (integers or ``null``).
last_modified datetime Last modification of this object
===================================== ========================== =======================================================
.. versionchanged:: 1.7
@@ -74,6 +77,14 @@ seat_category_mapping object An object mappi
The attributes ``geo_lat`` and ``geo_lon`` have been added.
.. versionchanged:: 3.10
The ``disabled`` attribute has been added to ``item_price_overrides`` and ``variation_price_overrides``.
.. versionchanged:: 3.12
The ``last_modified`` attribute has been added.
Endpoints
---------
@@ -125,6 +136,7 @@ Endpoints
"item_price_overrides": [
{
"item": 2,
"disabled": false,
"price": "12.00"
}
],
@@ -141,6 +153,8 @@ Endpoints
:query ends_after: If set to a date and time, only events that happen during of after the given time are returned.
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the main event
:query datetime modified_since: Only return objects that have changed since the given date. Be careful: This does not
allow you to know if a subevent was deleted.
:query array attr[meta_data_key]: By providing the key and value of a meta data attribute, the list of sub-events
will only contain the sub-events matching the set criteria. Providing ``?attr[Format]=Seminar`` would return
only those sub-events having set their ``Format`` meta data to ``Seminar``, ``?attr[Format]=`` only those, that
@@ -182,6 +196,7 @@ Endpoints
"item_price_overrides": [
{
"item": 2,
"disabled": false,
"price": "12.00"
}
],
@@ -216,6 +231,7 @@ Endpoints
"item_price_overrides": [
{
"item": 2,
"disabled": false,
"price": "12.00"
}
],
@@ -271,6 +287,7 @@ Endpoints
"item_price_overrides": [
{
"item": 2,
"disabled": false,
"price": "12.00"
}
],
@@ -307,6 +324,7 @@ Endpoints
"item_price_overrides": [
{
"item": 2,
"disabled": false,
"price": "23.42"
}
],
@@ -339,6 +357,7 @@ Endpoints
"item_price_overrides": [
{
"item": 2,
"disabled": false,
"price": "23.42"
}
],
@@ -427,6 +446,7 @@ Endpoints
"item_price_overrides": [
{
"item": 2,
"disabled": false,
"price": "12.00"
}
],

View File

@@ -70,6 +70,9 @@ and ``checkin_list``.
only include the minimum amount of data necessary for you to fetch the changed objects from our
:ref:`rest-api` in an authenticated way.
.. warning:: In very rare cases, you could receive the same webhook notification twice. We try to avoid it, but we
prefer it over missing a notification.
If you want to further prevent others from accessing your webhook URL, you can also use `Basic authentication`_ and
supply the URL to us in the format of ``https://username:password@domain.com/path/``.
We recommend that you use HTTPS for your webhook URL and might require it in the future. If HTTPS is used, we require

View File

@@ -52,6 +52,7 @@ extensions = [
'sphinx.ext.coverage',
'sphinxcontrib.httpdomain',
'sphinxcontrib.images',
'sphinxemoji.sphinxemoji',
]
if HAS_PYENCHANT:
extensions.append('sphinxcontrib.spelling')

View File

@@ -66,7 +66,7 @@ event-related views, there is also a signal that allows you to add the view to t
from django.urls import resolve, reverse
from django.dispatch import receiver
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from pretix.control.signals import nav_event

View File

@@ -29,6 +29,22 @@ that we'll provide in this plugin::
from .exporter import MyExporter
return MyExporter
Some exporters might also prove to be useful, when provided on an organizer-level. In order to declare your
exporter as capable of providing exports spanning multiple events, your plugin should listen for this signal
and return the subclass of ``pretix.base.exporter.BaseExporter`` that we'll provide in this plugin::
from django.dispatch import receiver
from pretix.base.signals import register_multievent_data_exporters
@receiver(register_multievent_data_exporters, dispatch_uid="multieventexporter_myexporter")
def register_multievent_data_exporter(sender, **kwargs):
from .exporter import MyExporter
return MyExporter
If your exporter supports both event-level and multi-event level exports, you will need to listen for both
signals.
The exporter class
------------------

View File

@@ -12,7 +12,8 @@ Core
.. automodule:: pretix.base.signals
:members: periodic_task, event_live_issues, event_copy_data, email_filter, register_notification_types,
item_copy_data, register_sales_channels, register_global_settings, quota_availability, global_email_filter
item_copy_data, register_sales_channels, register_global_settings, quota_availability, global_email_filter,
register_ticket_secret_generators
Order events
""""""""""""
@@ -20,7 +21,7 @@ Order events
There are multiple signals that will be sent out in the ordering cycle:
.. automodule:: pretix.base.signals
:members: validate_cart, validate_cart_addons, validate_order, order_fee_calculation, order_paid, order_placed, order_canceled, order_expired, order_modified, order_changed, order_approved, order_denied, order_fee_type_name, allow_ticket_download, order_split, order_gracefully_delete, invoice_line_text
:members: validate_cart, validate_cart_addons, validate_order, order_fee_calculation, order_paid, order_placed, order_canceled, order_reactivated, order_expired, order_modified, order_changed, order_approved, order_denied, order_fee_type_name, allow_ticket_download, order_split, order_gracefully_delete, invoice_line_text
Check-ins
"""""""""
@@ -33,11 +34,11 @@ Frontend
--------
.. automodule:: pretix.presale.signals
:members: html_head, html_footer, footer_link, front_page_top, front_page_bottom, front_page_bottom_widget, fee_calculation_for_cart, contact_form_fields, question_form_fields, checkout_confirm_messages, checkout_confirm_page_content, checkout_all_optional, html_page_header, sass_preamble, sass_postamble, render_seating_plan, checkout_flow_steps, position_info, item_description
:members: html_head, html_footer, footer_link, front_page_top, front_page_bottom, front_page_bottom_widget, fee_calculation_for_cart, contact_form_fields, question_form_fields, contact_form_fields_overrides, question_form_fields_overrides, checkout_confirm_messages, checkout_confirm_page_content, checkout_all_optional, html_page_header, sass_preamble, sass_postamble, render_seating_plan, checkout_flow_steps, position_info, position_info_top, item_description, global_html_head, global_html_footer, global_html_page_header
.. automodule:: pretix.presale.signals
:members: order_info, order_meta_from_request
:members: order_info, order_info_top, order_meta_from_request
Request flow
""""""""""""
@@ -66,19 +67,13 @@ Vouchers
""""""""
.. automodule:: pretix.control.signals
:members: item_forms
Vouchers
""""""""
.. automodule:: pretix.control.signals
:members: voucher_form_class, voucher_form_html, voucher_form_validation
:members: item_forms, voucher_form_class, voucher_form_html, voucher_form_validation
Dashboards
""""""""""
.. automodule:: pretix.control.signals
:members: event_dashboard_widgets, user_dashboard_widgets
:members: event_dashboard_widgets, user_dashboard_widgets, event_dashboard_top
Ticket designs
""""""""""""""

View File

@@ -126,6 +126,8 @@ The provider class
.. autoattribute:: test_mode_message
.. autoattribute:: requires_invoice_immediately
Additional views
----------------

View File

@@ -61,7 +61,7 @@ A working example would be::
from pretix.base.plugins import PluginConfig
except ImportError:
raise RuntimeError("Please use pretix 2.7 or above to run this plugin!")
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
class PaypalApp(PluginConfig):
@@ -136,7 +136,7 @@ in the ``installed`` method::
pass # Your code here
Note that ``installed`` will *not* be called if the plugin in indirectly activated for an event
Note that ``installed`` will *not* be called if the plugin is indirectly activated for an event
because the event is created with settings copied from another event.
Views
@@ -151,8 +151,8 @@ your Django app label.
with checking that the calling user is logged in, has appropriate permissions,
etc. We plan on providing native support for this in a later version.
.. _Django app: https://docs.djangoproject.com/en/1.7/ref/applications/
.. _signal dispatcher: https://docs.djangoproject.com/en/1.7/topics/signals/
.. _namespace packages: http://legacy.python.org/dev/peps/pep-0420/
.. _Django app: https://docs.djangoproject.com/en/3.0/ref/applications/
.. _signal dispatcher: https://docs.djangoproject.com/en/3.0/topics/signals/
.. _namespace packages: https://legacy.python.org/dev/peps/pep-0420/
.. _entry point: https://setuptools.readthedocs.io/en/latest/pkg_resources.html#locating-plugins
.. _cookiecutter: https://cookiecutter.readthedocs.io/en/latest/

View File

@@ -72,6 +72,10 @@ The output class
.. autoattribute:: download_button_icon
.. autoattribute:: multi_download_button_text
.. autoattribute:: long_download_button_text
.. autoattribute:: preview_allowed
.. autoattribute:: javascript_required

View File

@@ -7,7 +7,7 @@ Coding style and quality
for more information. Use four spaces for indentation.
* We sort our imports by a certain schema, but you don't have to do this by hand. Again, ``setup.cfg`` contains
some definitions that allow the command ``isort -rc <directory>`` to automatically sort the imports in your source
some definitions that allow the command ``isort <directory>`` to automatically sort the imports in your source
files.
* For templates and models, please take a look at the `Django Coding Style`_. We like Django's `class-based views`_ and
@@ -18,7 +18,7 @@ Coding style and quality
* We expect all new code to come with proper tests. When writing new tests, please write them using `pytest-style`_
test functions and raw ``assert`` statements. Use `fixtures`_ to prevent repetitive code. Some old parts of pretix'
test suite are in the style of Python's unit test module. If you extend those files, you might continue in this style,
but please use pytest style for any new test files.
but please use ``pytest`` style for any new test files.
* Please keep the first line of your commit messages short. When referencing an issue, please phrase it like
``Fix #123 -- Problems with order creation`` or ``Refs #123 -- Fix this part of that bug``.

View File

@@ -69,7 +69,7 @@ We now need a way to translate the action codes like ``pretix.event.changed`` in
strings. The :py:attr:`pretix.base.signals.logentry_display` signals allows you to do so. A simple
implementation could look like::
from django.utils.translation import ugettext as _
from django.utils.translation import gettext as _
from pretix.base.signals import logentry_display
@receiver(signal=logentry_display)

View File

@@ -98,7 +98,7 @@ pull request nevertheless and ask us for help, we are happy to assist you.
Execute the following commands to check for code style errors::
flake8 .
isort -c -rc .
isort -c .
python manage.py check
Execute the following command to run pretix' test suite (might take a couple of minutes)::
@@ -117,11 +117,11 @@ for example, to check for any errors in any staged files when committing::
export GIT_WORK_TREE=../
export GIT_DIR=../.git
source ../env/bin/activate # Adjust to however you activate your virtual environment
for file in $(git diff --cached --name-only | grep -E '\.py$' | grep -Ev "migrations|mt940\.py|pretix/settings\.py|make_testdata\.py|testutils/settings\.py|tests/settings\.py|pretix/base/models/__init__\.py")
for file in $(git diff --cached --name-only | grep -E '\.py$' | grep -Ev "migrations|mt940\.py|pretix/settings\.py|make_testdata\.py|testutils/settings\.py|tests/settings\.py|pretix/base/models/__init__\.py|.*_pb2\.py")
do
echo $file
git show ":$file" | flake8 - --stdin-display-name="$file" || exit 1 # we only want to lint the staged changes, not any un-staged changes
git show ":$file" | isort -df --check-only - | grep ERROR && exit 1 || true
git show ":$file" | isort -c - | grep ERROR && exit 1 || true
done

View File

@@ -34,6 +34,8 @@ transactions list of objects Transactions in
├ payer string Payment source
├ reference string Payment reference
├ amount string Payment amount
├ iban string Payment IBAN
├ bic string Payment BIC
├ date string Payment date (in **user-inputted** format)
├ order string Associated order code (or ``null``)
└ comment string Internal comment
@@ -83,6 +85,8 @@ Endpoints
"date": "26.06.2017",
"payer": "John Doe",
"order": null,
"iban": "",
"bic": "",
"checksum": "5de03a601644dfa63420dacfd285565f8375a8f2",
"reference": "GUTSCHRIFT\r\nSAMPLECONF-NAB12 EREF: SAMPLECONF-NAB12\r\nIBAN: DE1234556…",
"state": "nomatch",
@@ -132,6 +136,8 @@ Endpoints
"comment": "",
"date": "26.06.2017",
"payer": "John Doe",
"iban": "",
"bic": "",
"order": null,
"checksum": "5de03a601644dfa63420dacfd285565f8375a8f2",
"reference": "GUTSCHRIFT\r\nSAMPLECONF-NAB12 EREF: SAMPLECONF-NAB12\r\nIBAN: DE1234556…",

356
doc/plugins/digital.rst Normal file
View File

@@ -0,0 +1,356 @@
Digital content
===============
URL interpolation and JWT authentication
----------------------------------------
In the simplest case, you can use the digital content module to point users to a specific piece of content on some
platform after their ticket purchase, or show them an embedded video or live stream. However, the full power of the
module can be utilized by passing additional information to the target system to automatically authenticate the user
or pre-fill some fields with their data. For example, you could use an URL like this::
https://webinars.example.com/join?as={attendee_name}&userid={order_code}-{positionid}
While this is already useful, it does not provide much security anyone could guess a valid combination for that URL.
Therefore, the module allows you to pass information as a `JSON Web Token`_, which isn't encrypted, but signed with a
shared secret such that nobody can create their own tokens or modify the contents. To use a token, set up a URL like this::
https://webinars.example.com/join?with_token={token}
Additionally, you will need to set a JWT secret and a token template, either through the pretix interface or through the
API (see below). pretix currently only supports tokens signed with ``HMAC-SHA256`` (``HS256``). Your token template can contain
whatever JSON you'd like to pass on based on the same variables, for example::
{
"iss": "pretix.eu",
"aud": "webinars.example.com",
"user": {
"id": "{order_code}-{positionid}",
"product": "{product_id}",
"variation": "{variation_id}",
"name": "{attendee_name}"
}
}
Variables can only be used in strings inside the JSON structure.
pretix will automatically add an ``iat`` claim with the current timestamp and an ``exp`` claim with an expiration timestamp
based on your configuration.
List of variables
"""""""""""""""""
The following variables are currently supported:
.. rst-class:: rest-resource-table
=================================== ====================================================================
Variable Description
=================================== ====================================================================
``order_code`` Order code (alphanumerical, unique per order, not per ticket)
``positionid`` ID of the ticket within the order (integer, starting at 1)
``order_email`` E-mail address of the ticket purchaser
``product_id`` Internal ID of the purchased product
``product_variation`` Internal ID of the purchased product variation (or empty)
``attendee_name`` Full name of the ticket holder (or empty)
``attendee_name_*`` Name parts of the ticket holder, depending on configuration, e.g. ``attendee_name_given_name`` or ``attendee_name_family_name``
``attendee_email`` E-mail address of the ticket holder (or empty)
``attendee_company`` Company of the ticket holder (or empty)
``attendee_street`` Street of the ticket holder's address (or empty)
``attendee_zipcode`` ZIP code of the ticket holder's address (or empty)
``attendee_city`` City of the ticket holder's address (or empty)
``attendee_country`` Country code of the ticket holder's address (or empty)
``attendee_state`` State of the ticket holder's address (or empty)
``answer[XYZ]`` Answer to the custom question with identifier ``XYZ``
``invoice_name`` Full name of the invoice address (or empty)
``invoice_name_*`` Name parts of the invoice address, depending on configuration, e.g. ``invoice_name_given_name`` or ``invoice_name_family_name``
``invoice_company`` Company of the invoice address (or empty)
``invoice_street`` Street of the invoice address (or empty)
``invoice_zipcode`` ZIP code of the invoice address (or empty)
``invoice_city`` City of the invoice address (or empty)
``invoice_country`` Country code of the invoice address (or empty)
``invoice_state`` State of the invoice address (or empty)
``meta_XYZ`` Value of the event's ``XYZ`` meta property
``token`` Signed JWT (only to be used in URLs, not in tokens)
=================================== ====================================================================
API Resource description
-------------------------
The digital content plugin provides a HTTP API that allows you to create new digital content for your ticket holders,
such as live streams, videos, or material downloads.
The digital content resource contains the following public fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
id integer Internal content ID
title multi-lingual string The content title (required)
content_type string The type of content, valid values are ``webinar``, ``video``, ``livestream``, ``link``, ``file``
url string The location of the digital content
description multi-lingual string A public description of the item. May contain Markdown
syntax and is not required.
available_from datetime The first date time at which this content will be shown
(or ``null``).
available_until datetime The last date time at which this content will b e shown
(or ``null``).
all_products boolean If ``true``, the content is available to all buyers of tickets for this event. The ``limit_products`` field is ignored in this case.
limit_products list of integers List of product/item IDs. This content is only shown to buyers of these ticket types.
position integer An integer, used for sorting
subevent integer Date in an event series this content should be shown for. Should be ``null`` if this is not an event series or if this should be shown to all customers.
jwt_template string Template for JWT token generation
jwt_secret string Secret for JWT token generation
jwt_validity integer JWT validity in days
===================================== ========================== =======================================================
API Endpoints
-------------
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/digitalcontents/
Returns a list of all digital content configured for an event.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/digitalcontents/ 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,
"subevent": null,
"title": {
"en": "Concert livestream"
},
"content_type": "link",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"description": {
"en": "Watch our event live here on YouTube!"
},
"all_products": true,
"limit_products": [],
"available_from": "2020-03-22T23:00:00Z",
"available_until": null,
"position": 1
}
]
}
: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
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer or event does not exist **or** you have no permission to view it.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/digitalcontents/(id)/
Returns information on one content item, identified by its ID.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/digitalcontents/1/ 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
{
"id": 1,
"subevent": null,
"title": {
"en": "Concert livestream"
},
"content_type": "link",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"description": {
"en": "Watch our event live here on YouTube!"
},
"all_products": true,
"limit_products": [],
"available_from": "2020-03-22T23:00:00Z",
"available_until": null,
"position": 1
}
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
:param id: The ``id`` field of the content to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event/content does not exist **or** you have no permission to view it.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/digitalcontents/
Create a new digital content.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/digitalcontents/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 166
{
"subevent": null,
"title": {
"en": "Concert livestream"
},
"content_type": "link",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"description": {
"en": "Watch our event live here on YouTube!"
},
"all_products": true,
"limit_products": [],
"available_from": "2020-03-22T23:00:00Z",
"available_until": null,
"position": 1
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
{
"id": 2,
"subevent": null,
"title": {
"en": "Concert livestream"
},
"content_type": "link",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"description": {
"en": "Watch our event live here on YouTube!"
},
"all_products": true,
"limit_products": [],
"available_from": "2020-03-22T23:00:00Z",
"available_until": null,
"position": 1
}
:param organizer: The ``slug`` field of the organizer to create new content for
:param event: The ``slug`` field of the event to create new content for
:statuscode 201: no error
:statuscode 400: The content could not be created due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to create digital contents.
.. http:patch:: /api/v1/organizers/(organizer)/events/(event)/digitalcontents/(id)/
Update a content. You can also use ``PUT`` instead of ``PATCH``. With ``PUT``, you have to provide all fields of
the resource, other fields will be reset to default. With ``PATCH``, you only need to provide the fields that you
want to change.
**Example request**:
.. sourcecode:: http
PATCH /api/v1/organizers/bigevents/events/sampleconf/digitalcontents/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 34
{
"url": "https://mywebsite.com"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: text/javascript
{
"id": 2,
"subevent": null,
"title": {
"en": "Concert livestream"
},
"content_type": "link",
"url": "https://mywebsite.com",
"description": {
"en": "Watch our event live here on YouTube!"
},
"all_products": true,
"limit_products": [],
"available_from": "2020-03-22T23:00:00Z",
"available_until": null,
"position": 1
}
:param organizer: The ``slug`` field of the organizer to modify
:param event: The ``slug`` field of the event to modify
:param id: The ``id`` field of the content to modify
:statuscode 200: no error
:statuscode 400: The content could not be modified due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event/content does not exist **or** you have no permission to change it.
.. http:delete:: /api/v1/organizers/(organizer)/events/(event)/digitalcontents/(id)/
Delete a digital content.
**Example request**:
.. sourcecode:: http
DELETE /api/v1/organizers/bigevents/events/sampleconf/digitalcontents/1/ 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 the organizer to modify
:param event: The ``slug`` field of the event to modify
:param id: The ``id`` field of the content to delete
:statuscode 204: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event/content does not exist **or** you have no permission to change it
.. _JSON Web Token: https://en.wikipedia.org/wiki/JSON_Web_Token

View File

@@ -15,3 +15,5 @@ If you want to **create** a plugin, please go to the
ticketoutputpdf
badges
campaigns
digital
webinar

43
doc/plugins/webinar.rst Normal file
View File

@@ -0,0 +1,43 @@
pretix Webinar
==============
Fetch host URLs
---------------
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/webinars/
Returns a list of all currently available webinar calls configured for an event.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/webinars/ 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
[
{
"name": "Webinar B Sept. 8th, 2020",
"hosturl": "http://pretix.eu/demo/museum/webinar/host/a9aded3d7bd4df60/30611a34f9fee5d3/"
},
{
"name": "Webinar A Sept. 8, 2020",
"hosturl": "http://pretix.eu/demo/museum/webinar/host/e714x7d4a4a36a04/b9cc444665xxx757/"
}
]
:query subevent: Limit the result to the webinar(s) for a specific subevent.
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the event to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer or event does not exist **or** you have no permission to view it.

View File

@@ -3,7 +3,8 @@ sphinx==2.3.*
sphinx-rtd-theme
sphinxcontrib-httpdomain
sphinxcontrib-images
sphinxcontrib-spelling
sphinxcontrib-spelling==4.*
sphinxemoji
pygments-markdown-lexer
# See https://github.com/rfk/pyenchant/pull/130
git+https://github.com/raphaelm/pyenchant.git@patch-1#egg=pyenchant

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 55 KiB

View File

@@ -10,7 +10,11 @@ availabilities
backend
backends
banktransfer
barcode
barcodes
Bcc
bic
BIC
boolean
booleans
cancelled
@@ -47,13 +51,19 @@ gunicorn
guid
hardcoded
hostname
iban
IBAN
ics
idempotency
iframe
incrementing
inofficial
invalidations
iOS
iterable
Jimdo
jwt
JWT
libpretixprint
libsass
linters
@@ -88,7 +98,9 @@ prepending
preprocessor
presale
pretix
pretixSCAN
pretixdroid
pretixPOS
pretixpresale
prometheus
proxied

View File

@@ -26,6 +26,9 @@ Sender address
we strongly recommend to use the SMTP settings below as well, otherwise your e-mails might be detected as spam
due to the `Sender Policy Framework`_ and similar mechanisms.
Sender name
This is the name associated with the sender address. By default, this is your event name.
Signature
This text will be appended to all e-mails in form of a signature. This might be useful e.g. to add your contact
details or any legal information that needs to be included with the e-mails.
@@ -33,6 +36,15 @@ Signature
Bcc address
This email address will receive a copy of every event-related email.
Attach calendar files
With this option, every order confirmation mail will include an ics file with name, date and location of
your event. It can be imported into many digital calendars.
Sales Channels for Checkout Emails
When you are using multiple sales channel, you may want to decide that mails for order and payment confirmation
are only to be sent for some sales channels. For orders created through the default online shop, these emails
must always be send. A similar option is available for ticket download reminders.
E-mail design
-------------

View File

@@ -3,6 +3,8 @@
Warengutschein
Wertgutschein
.. _giftcards:
Gift cards
==========

View File

@@ -0,0 +1,94 @@
.. _timeslots:
Use case: Time slots
====================
A more advanced use case of pretix is using pretix for time-slot-based access to an area with a limited visitor
capacity, such as a museum or other attraction. This guide will show you the quickest way to set up such an event
with pretix.
First of all, when creating your event, you need to select that your event represents an "event series":
.. thumbnail:: ../../../screens/event/create_step1.png
:align: center
:class: screenshot
You can click :ref:`here <subevents>` for a more general description of event series with pretix, but everything you
need to know is in this chapter as well.
General event setup
-------------------
Before you go further, set up your products that you want to sell for each time slot, such as different types of entry.
Creating slots
--------------
To create the time slots, you need to create a number of "dates" in the event series. Select "Dates" in the navigation
menu on the left side and click "Create many new dates". Then, first enter the pattern of your opening days. In the
example, the museum is open week Tuesday to Sunday. We recommend to create the slots for a few weeks at a time, but not
e.g. for a full year, since it will be more complicated to change things later.
.. thumbnail:: ../../../screens/event/timeslots_create.png
:align: center
:class: screenshot
Then, scroll to the times section and create your time slots. You can do any interval you like. If you have different
opening times on different week days, you will need to go through the creation process multiple times.
.. thumbnail:: ../../../screens/event/timeslots_create_2.png
:align: center
:class: screenshot
Scroll further down and create one or multiple quotas that define how many people can book a ticket for that time slot.
In this example, 50 people in total are allowed to enter within every slot:
.. thumbnail:: ../../../screens/event/timeslots_create_3.png
:align: center
:class: screenshot
Do **not** create a check-in list at this point. We will deal with this further below in the guide.
Now, press "Save" to create your slots.
.. warning:: If you create a lot of time slots at once, the server might need a few minutes to create them all in our
system. If you receive an error page because it took too long, please do not try again immediately but wait
for a few minutes. Most likely, the slots will be created successfully even though you saw an error.
Event settings
--------------
We recommend that you navigate to "Settings" > "General" > "Display" and set the settings "Default overview style"
to "Week calendar":
.. thumbnail:: ../../../screens/event/timeslots_settings_1.png
:align: center
:class: screenshot
Now, your ticket shop should give users a nice weekly overview over all time slots and their availability:
.. thumbnail:: ../../../screens/event/timeslots_presale.png
:align: center
:class: screenshot
Check-in
--------
If you want to scan people at the entrance of your event and only admit them at their designated time, we recommend
the following setup: Go to "Check-in" in the main navigation on the left and create a new check-in list. Give it a name
and do *not* choose a specific data. We will use one check-in list for all dates. Then, go to the "Advanced" tab at
the top and set up two restrictions to make sure people can only get in during the time slot they registered for.
You can create the rules exactly like shown in the following screenshot:
.. thumbnail:: ../../../screens/event/timeslots_checkinlists.png
:align: center
:class: screenshot
If you want, you can enter a tolerance of e.g. "10" if you want to be a little bit more relaxed and admit people up to
10 minutes before or after their time slot.
Now, download our `Android or Desktop app`_ and register it to your account. The app will ask you to select one the
time slots, but it does not matter, you can select any one of them and then select your newly created check-in list.
That's it, you're good to go!
.. _Android or Desktop app: https://pretix.eu/about/en/scan

View File

@@ -292,6 +292,8 @@ Flexible group sizes
If you want to give out discounted tickets to groups starting at a given size, but still billed per person, you can do so by creating a special **Group ticket** at the per-person price and set the **Minimum amount per order** option of the ticket to the minimal group size.
For more complex use cases, you can also use add-on products that can be chosen multiple times.
This way, your ticket can be bought an arbitrary number of times but no less than the given minimal amount per order.
Fixed group sizes
@@ -344,3 +346,13 @@ In addition to your normal conference quota, you need to create an unlimited quo
Then, head to the **Bundled products** tab of the "conference ticket" and add the "conference food" as a bundled product with a **designated price** of € 150.
Once a customer tries to buy the € 450 conference ticket, a sub-product will be added and the price will automatically be split into the two components, leading to a correct computation of taxes.
You can find more use cases in these specialized guides:
More use cases
--------------
.. toctree::
:maxdepth: 1
guides/timeslots

View File

@@ -0,0 +1,93 @@
Ticket secret generators
========================
pretix allows you to change the way in which ticket secrets (also known as "ticket codes", "barcodes", …)
are generated. This affects the value of the QR code in any tickets issued by pretix, regardless of ticket
format.
.. note:: This is intended for highly advanced use cases, usually when huge numbers of tickets (> 25k per event)
are involved. **If you don't know whether you need this, you probably don't.**
Default: Random secrets
-----------------------
By default, pretix generates a random code for every ticket, consisting of 32 lower case characters and
numbers. The characters ``oO1il`` are avoided to reduce confusion when ticket codes are printed and need to
be typed in manually.
Choosing random codes has a number of advantages:
* Ticket codes are short, which makes QR codes easier to scan. At the same time, it is absolutely impossible to
guess or forge a valid ticket code.
* The code does not need to change if the ticket changes. For example, if an attendee is re-booked to a
different product or date, they can keep their ticket and it is just mapped to the new product in the
database.
This approach works really well for 99 % or events running with pretix.
The big caveat is that the scanner needs to access a database of all ticket codes in order to know whether a ticket
code is valid and what kind of ticket it represents.
When scanning online this is no problem at all, since the pretix server always has such a database. In case your local
internet connection is interrupted or the pretix server goes down, though, there needs to be a database locally on the
scanner.
Therefore, our pretixSCAN apps by default download the database of all valid tickets onto the device itself. This makes
it possible to seamlessly switch into offline mode when the connection is lost and continue scanning with the maximum
possible feature set.
There are a few situations in which this approach is not ideal:
* When running a single event with 25k or more valid tickets, downloading all ticket data onto the scanner may just
take too much time and resources.
* When the risk of losing sensible data by losing one of the scanner devices is not acceptable.
* When offline mode needs to be used regularly and newly-purchased tickets need to be valid immediately after purchase,
without being able to tolerate a few minutes of delay.
Signature schemes
-----------------
The alternative approach that is included with pretix is to choose a signature-based ticket code generation scheme.
These secrets include the most important information that is required for verifying their validity and use modern
cryptography to make sure they cannot be forged.
Currently, pretix ships with one such scheme ("pretix signature scheme 1") which encodes the product, the product
variation, and the date (if inside an event series) into the ticket code and signs the code with a `EdDSA`_ signature.
This allows to verify whether a ticket is allowed to enter without any database or connection to the server, but has
a few important drawbacks:
* Whenever the product, variation or date of a ticket changes or the ticket is canceled, the ticket code needs to be
changed and the old code needs to be put on a revocation list. This revocation list again needs to be downloaded by
all scanning devices (but is usually much smaller than the ticket database). The main downside is that the attendee
needs to download their new ticket and can no longer use the old one.
* Scanning in offline mode is much more limited, since the scanner has no information about previous usages of the
ticket, attendee names, seating information, etc.
Comparison of scanning behavior
-------------------------------
=============================================== =================================== =================================== =================================== ================================= =====================================
Scan mode Online Offline
----------------------------------------------- ----------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------
Synchronization setting any Synchronize orders Don't synchronize orders
----------------------------------------------- ----------------------------------- ----------------------------------------------------------------------- -----------------------------------------------------------------------
Ticket secrets any Random Signed Random Signed
=============================================== =================================== =================================== =================================== ================================= =====================================
Scenario supported on platforms Android, Desktop, iOS Android, Desktop, iOS Android, Desktop Android, Desktop Android, Desktop
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
Same ticket can be scanned multiple times no yes, before data is synced yes, before data is synced n/a yes, always
Custom check-in rules yes yes yes (limited directly after sale) n/a yes, but only based on product,
variation and date, not on previous
scans
Name and seat visible on scanner yes yes yes (except directly after sale) n/a no
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
=============================================== =================================== =================================== =================================== ================================= =====================================
.. _EdDSA: https://en.wikipedia.org/wiki/EdDSA#Ed25519

View File

@@ -9,26 +9,33 @@ At "Settings" → "Tickets", you can configure the ticket download options that
The top of this page shows a short list of options relevant for all download formats:
Use feature
Allow users to download tickets
This can be used to completely enable or disable ticket downloads all over your ticket shop.
Generate tickets for add-on products
By default, tickets can not be downloaded for order positions which are only an add-on to other order positions. If
you enable this, this behavior will be changed and add-on products will get their own tickets as well. If disabled,
you can still print a list of chosen add-ons e.g. on the PDF tickets.
Generate tickets for all products
By default, tickets will only be generated for products that are marked as admission products. Enable this option to
generate tickets for all products instead.
Generate tickets for pending orders
By default, ticket download is only possible for paid orders. If you run an event where people usually pay only after
the event, you can check this box to enable ticket download even before.
Download date
If you set a date here, no ticket download will be offered before this date. If no date is set, tickets can be
downloaded immediately after the payment for an order has been received.
Offer to download tickets separately for add-on products
By default, tickets can not be downloaded for order positions which are only an add-on to other order positions. If
you enable this, this behavior will be changed and add-on products will get their own tickets as well. If disabled,
you can still print a list of chosen add-ons e.g. on the PDF tickets.
Generate tickets for non-admission products
By default, tickets will only be generated for products that are marked as admission products. Enable this option to
generate tickets for all products instead.
Offer to download tickets even before an order is paid
By default, ticket download is only possible for paid orders. If you run an event where people usually pay only after
the event, you can check this box to enable ticket download even before.
Below these settings, the detail settings for the various ticket file formats are offered. They differ from format to
format and only share the common "Enable" setting that can be used to turn them on. By default, pretix ships with
a PDF output plugin that you can configure through a visual design editor.
a PDF output plugin that you can configure through a visual design editor.
**Advanced topics:**
.. toctree::
:maxdepth: 1
ticket_secrets

View File

@@ -1,3 +1,5 @@
.. _widget:
Embeddable Widget
=================
@@ -136,10 +138,15 @@ If you want to include all your public events, you can just reference your organ
<pretix-widget event="https://pretix.eu/demo/"></pretix-widget>
There is an optional ``style`` parameter that let's you choose between a calendar view and a list view. If you do not set it, the choice will be taken from your organizer settings::
There is an optional ``style`` parameter that let's you choose between a monthly calendar view, a week view and a list
view. If you do not set it, the choice will be taken from your organizer settings::
<pretix-widget event="https://pretix.eu/demo/series/" style="list"></pretix-widget>
<pretix-widget event="https://pretix.eu/demo/series/" style="calendar"></pretix-widget>
<pretix-widget event="https://pretix.eu/demo/series/" style="week"></pretix-widget>
If you have more than 100 events, the system might refuse to show a list view and always show a calendar for performance
reasons instead.
You can see an example here:

View File

@@ -58,28 +58,6 @@ method without creating a new order. If payment deadlines were dependent on the
forth could either allow someone to extend their deadline forever, or render someones order invalid by moving the date
back in the past.
How can I revert a check-in?
----------------------------
Neither our apps nor our web interface can currently undo the check-in of a tickets. We know that this is
inconvenient for some of you, but we have a good reason for it:
Our Desktop and Android apps both support an asynchronous mode in which they can scan tickets while staying
independent of their internet connection. When scanning with multiple devices, it can of course happen that two
devices scan the same ticket without knowing of the other scan. As soon as one of the devices regains connectivity, it
will upload its activity and the server marks the ticket as checked in -- regardless of the order in which the two
scans were made and uploaded (which could be two different orders).
If we'd provide a "check out" feature, it would not only be used to fix an accidental scan, but scan at entry and
exit to count the current number of people inside etc. In this case, the order of operations matters very much for them
to make sense and provide useful results. This makes implementing an asynchronous mode much more complicated.
In this trade off, we chose offline-capabilities over the check out feature. We plan on solving this problem in the
future, but we're not there yet.
If you're just *testing* the check-in capabilities and want to clean out everything for the real process, you can just
delete and re-create the check-in list.
Why does pretix not support any 1D (linear) bar codes?
------------------------------------------------------

181
doc/user/glossary.rst Normal file
View File

@@ -0,0 +1,181 @@
Glossary
========
This page gives definitions of domain-specific terms that we use a lot inside pretix and that might be used slightly
differently elsewhere, as well as their official translations to other languages. In some cases, things have a different
name internally, which is noted with a |:wrench:| symbol. If you only use pretix, you'll never see these, but if you're
going to develop around pretix, for example connect to pretix through our API, you need to know these as well.
.. rst-class:: rest-resource-table
.. list-table:: Glossary
:widths: 15 30
:header-rows: 1
* - Term
- Definition
* - | |:gb:| **Organizer**
| |:de:| Veranstalter
- An organizer represents the entity using pretix, usually the company or institution running one or multiple events.
In terms of navigation in the system, organizers are the "middle layer" between the system itself and the specific
events.
Multiple organizers on the same pretix system are fully separated from each other with very few exceptions.
* - | |:gb:| **Event**
| |:de:| Veranstaltung
- An event is the central entity in pretix that you and your customers interact with all the time. An event
represents one **shop** in which things like tickets can be bought. Since the introduction of event series (see
below), this might include multiple events in the real world.
Every purchase needs to be connected to an event, and most things are completely separate between different
events, i.e. most actions and configurations in pretix are done per-event.
* - | |:gb:| **Event series**
| |:de:| Veranstaltungsreihe
- An event series is one of two types of events. Unlike a non-series event, an event series groups together
multiple real-world events into one pretix shop. Examples are time-slot-based booking for a museum, a band on
tour, a theater group playing the same play multiple times, etc.
* - | |:gb:| **Date**
| |:de:| Termin
| |:wrench:| Subevent
- A date represents a single real-world event inside an event series. Dates can differ from each other in name,
date, time, location, pricing, capacity, and seating plans, but otherwise share the same configuration.
* - | |:gb:| **Product**
| |:de:| Produkt
| |:wrench:| Item
- A product is anything that can be sold, such as a specific type of ticket or merchandise.
* - | |:gb:| **Admission product**
| |:de:| Zutrittsprodukt
- A product is considered an **admission product** if its purchase represents a person being granted access to your
event. This applies to most ticketing products, but not e.g. to merchandise.
* - | |:gb:| **Variation**
| |:de:| Variante
| |:wrench:| Item variation
- Some products come in multiple variations that can differ in description, price and capacity. Examples would
include "Adult" and "Child" in case of a concert ticket, or "S", "M", "L", … in case of a t-shirt product.
* - | |:gb:| **Category**
| |:de:| Kategorie
- Products can be grouped together in categories. This is mostly to organize them cleanly in the frontend if you
have lots of them.
* - | |:gb:| **Quota**
| |:de:| Kontingent
- A quota is a capacity pool that defines how many times a product can be sold. A quota can be connected to multiple
products, in which case all of them are counted together. This is useful e.g. if you have full-price and reduced
tickets and only want to sell a certain number of tickets in total. The same way, multiple quotas can be connected
to the same product, in which case the ticket will be available as long as all of them have capacity left.
* - | |:gb:| **Add-on product**
| |:de:| Zusatzprodukt
- An add-on product is a product that is purchased as an upgrade or optional addition to a different product.
Examples would be include a conference ticket that optionally allows to buy a public transport ticket for the
same day, or a family ticket for 4 persons that allows you to add additional persons at a small cost, or a
"two workshops" package that allows you to select two of a larger number of workshops at a discounted price.
In all cases, there is a "main product" (the conference ticket, the family ticket) and a number of "add-on products"
that can be chosen from.
* - | |:gb:| **Bundled product**
| |:de:| Enthaltenes Produkt
- A bundled product is a product that is automatically put into the cart when another product is purchased. It's
similar to an add-on product, except that the customer has no choice between whether it is added or which of a
set of product is added.
* - | |:gb:| **Question**
| |:de:| Frage
- A question is a custom field that customers need to fill in when purchasing a specific product.
* - | |:gb:| **Voucher**
| |:de:| Gutschein
- A voucher is a code that can be used for multiple purposes: To grant a discount to specific customers, to only
show certain products to certain customers, or to keep a seat open for someone specific even though you are
sold out. If a voucher is used to apply a discount, the price of the purchased product is reduced by the
discounted amount. Vouchers are connected to a specific event.
* - | |:gb:| **Gift card**
| |:de:| Geschenkgutschein
- A :ref:`gift card <giftcards>` is a coupon representing an exact amount of money that can be used for purchases
of any kind. Gift cards can be sold, created manually, or used as a method to refund your customer without paying
them back directly.
Unlike a voucher, it does not reduce the price of the purchased products when redeemed, but instead works as a
payment method to lower the amount that needs to be paid through other methods. Gift cards are specific to an
organizer by default but can even by shared between organizers.
* - | |:gb:| **Cart**
| |:de:| Warenkorb
- A cart is a collection of products that are reserved by a customer who is currently completing the checkout
process, but has not yet finished it.
* - | |:gb:| **Order**
| |:de:| Bestellung
- An order is a purchase by a client, containing multiple different products. An order goes through various
states and can change during its lifetime.
* - | |:gb:| **Order code**
| |:de:| Bestellnummer
- An order code is the unique identifier of an order, usually consisting of 5 numbers and letters.
* - | |:gb:| **Order position**
| |:de:| Bestellposition
- An order position is a single line inside an order, representing the purchase of one specific product. If the
product is an admission product, this represents an attendee.
* - | |:gb:| **Attendees**
| |:de:| Teilnehmende
- An attendee is the person designated to use a specific order position to access the event.
* - | |:gb:| **Fee**
| |:de:| Gebühr
- A fee is an additional type of line inside an order that represents a cost that needs to be paid by the customer,
but is not related to a specific product. A typical example is a shipping fee.
* - | |:gb:| **Invoice** and **Cancellation**
| |:de:| Rechnung und Rechnungskorrektur
- An invoice refers to a legal document created to document a purchase for tax purposes. Invoices have individual
numbers and no longer change after they have been issued. Every invoice is connected to an order, but an order
can have multiple invoices: If an order changes, a cancellation document is created for the old invoice and a
new invoice is created.
* - | |:gb:| **Check-in**
| |:de:| Check-in
- A check-in is the event of someone being successfully scanned at an entry or exit of the event.
* - | |:gb:| **Check-in list**
| |:de:| Check-in-Liste
- A check-in list is used to configure who can be scanned at a specific entry or exit of the event. Check-in lists
are isolated from each other, so by default each ticket is valid once on every check-in list individually. They
are therefore often used to represent *parts* of an event, either time-wise (e.g. conference days) or space-wise
(e.g. rooms).
* - | |:gb:| **Plugin**
| |:de:| Erweiterung
- A plugin is an optional software module that contains additional functionality and can be turned on and off per
event. If you host pretix on your own server, most plugins need to be installed separately.
* - | |:gb:| **Tax rule**
| |:de:| Steuer-Regel
- A tax rule defines how sales taxes are calculated for a product, possibly depending on type and country of the
customer.
* - | |:gb:| **Ticket**
| |:de:| Ticket
- A ticket usually refers to the actual file presented to the customer to be used at check-in, i.e. the PDF or
Passbook file carrying the QR code. In some cases, "ticket" may also be used to refer to an order position,
especially in case of admission products.
* - | |:gb:| **Ticket secret**
| |:de:| Ticket-Code
- The ticket secret (sometimes "ticket code") is what's contained in the QR code on the ticket.
* - | |:gb:| **Badge**
| |:de:| Badge
- A badge refers to the file used as a name tag for an attendee of your event.
* - | |:gb:| **User**
| |:de:| Benutzer
- A user is anyone who can sign into the backend interface of pretix.
* - | |:gb:| **Team**
| |:de:| Team
- A :ref:`team <user-teams>` is a collection of users who are granted some level of access to a set of events.
* - | |:gb:| **Device**
| |:de:| Gerät
- A device is something that talks to pretix but does not run on a server. Usually a device refers to an
installation of pretixSCAN, pretixPOS or some compatible third-party app on one of your computing devices.
* - | |:gb:| **Gate**
| |:de:| Station
- A gate is a location at your event where people are being scanned, e.g. an entry or exit door. You can configure
gates in pretix to group multiple devices together that are used in the same location, mostly for statistical
purposes.
* - | |:gb:| **Widget**
| |:de:| Widget
- The :ref:`widget` is a JavaScript component that can be used to embed the shop of an event or a list of events
into a third-party web page.
* - | |:gb:| **Sales channel**
| |:de:| Verkaufskanal
- A sales channel refers to the type in which a purchase arrived in the system, e.g. through pretix' web shop itself,
or through other channels like box office or reseller sales.
* - | |:gb:| **Box office**
| |:de:| Abendkasse
- Box office purchases refer to all purchases made in-person from the organizer directly, through a point of sale
system like pretixPOS.
* - | |:gb:| **Reseller**
| |:de:| Vorverkaufsstelle
- Resellers are third-party entities offering in-person sales of events to customers.

View File

@@ -15,3 +15,4 @@ wanting to use pretix to sell tickets.
events/giftcards
faq
markdown
glossary

View File

@@ -14,30 +14,23 @@ and with pretix, you can do this. On this page, you find out the necessary steps
With the pretix.eu hosted service
---------------------------------
Step 1: DNS Configuration
#########################
Go to "Organizers" in the backend and select your organizer account. Then, go to "Settings" and "Custom Domain".
This page will show you instructions on how to set up your own domain. Basically, it works like this:
Go to the website of the provider you registered your domain name with. Look for the "DNS" settings page in their
interface. Unfortunately, we can't tell you exactly how that is named and how it looks, since it is different for every
domain provider.
Use this interface to add a new subdomain record, e.g. ``tickets`` of the type ``CNAME`` (might also be called "alias").
The value of the record should be ``www.pretix.eu``.
Step 2: Wait for the DNS entry to propagate
###########################################
The value of the record should be the one shown on the "Custom Domain" page in pretix' backend.
Submit your changes and wait a bit, it can regularly take up to three hours for DNS changes to propagate to the caches
of all DNS servers. You can try checking by accessing your new subdomain, ``http://tickets.awesomepartycorp.com``.
If DNS was changed successfully, you should see a SSL certificate error. If you ignore the error and access the page
anyways, you should get a pretix-themed error page with the headline "Unknown domain".
Step 3: Tell us
###############
Write an email to support@pretix.eu, naming your new domain and your organizer account. We will then generate a SSL
certificate for you (for free!) and configure the domain.
Now, tell us about your domain on the "Custom Domain" page to get started.
With a custom pretix installation
---------------------------------

View File

@@ -1,8 +1,8 @@
General settings
================
At "Settings" → "Payment", you can configure every aspect related to the payments you want to accept. The upper part
of the page shows a number of general settings that affect all payment methods:
At "Settings" → "Payment", you can configure every aspect related to the payments you want to accept. The "Deadline"
and "Advanced" tabs of the page show a number of general settings that affect all payment methods:
.. thumbnail:: ../../screens/event/settings_payment.png
:align: center

View File

@@ -1,8 +1,10 @@
include LICENSE
include README.rst
global-include *.proto
recursive-include pretix/static *
recursive-include pretix/static.dist *
recursive-include pretix/locale *
recursive-include pretix/helpers/locale *
recursive-include pretix/base/templates *
recursive-include pretix/control/templates *
recursive-include pretix/presale/templates *

View File

@@ -1 +1 @@
__version__ = "3.7.0"
__version__ = "3.12.1"

View File

@@ -3,6 +3,9 @@ from django_scopes import scopes_disabled
from rest_framework import exceptions
from rest_framework.authentication import TokenAuthentication
from pretix.api.auth.devicesecurity import (
DEVICE_SECURITY_PROFILES, FullAccessSecurityProfile,
)
from pretix.base.models import Device
@@ -25,3 +28,11 @@ class DeviceTokenAuthentication(TokenAuthentication):
raise exceptions.AuthenticationFailed('Device access has been revoked.')
return AnonymousUser(), device
def authenticate(self, request):
r = super().authenticate(request)
if r and isinstance(r[1], Device):
profile = DEVICE_SECURITY_PROFILES.get(r[1].security_profile, FullAccessSecurityProfile)
if not profile.is_allowed(request):
raise exceptions.PermissionDenied('Request denied by device security profile.')
return r

View File

@@ -0,0 +1,121 @@
from django.utils.translation import ugettext_lazy as _
class FullAccessSecurityProfile:
identifier = 'full'
verbose_name = _('Full device access (reading and changing orders and gift cards, reading of products and settings)')
def is_allowed(self, request):
return True
class AllowListSecurityProfile:
allowlist = tuple()
def is_allowed(self, request):
key = (request.method, f"{request.resolver_match.namespace}:{request.resolver_match.url_name}")
return key in self.allowlist
class PretixScanSecurityProfile(AllowListSecurityProfile):
identifier = 'pretixscan'
verbose_name = _('pretixSCAN')
allowlist = (
('GET', 'api-v1:version'),
('GET', 'api-v1:device.eventselection'),
('POST', 'api-v1:device.update'),
('POST', 'api-v1:device.revoke'),
('POST', 'api-v1:device.roll'),
('GET', 'api-v1:event-list'),
('GET', 'api-v1:event-detail'),
('GET', 'api-v1:subevent-list'),
('GET', 'api-v1:subevent-detail'),
('GET', 'api-v1:itemcategory-list'),
('GET', 'api-v1:item-list'),
('GET', 'api-v1:question-list'),
('GET', 'api-v1:badgelayout-list'),
('GET', 'api-v1:badgeitem-list'),
('GET', 'api-v1:checkinlist-list'),
('GET', 'api-v1:checkinlist-status'),
('GET', 'api-v1:checkinlistpos-list'),
('POST', 'api-v1:checkinlistpos-redeem'),
('GET', 'api-v1:revokedsecrets-list'),
('GET', 'api-v1:order-list'),
('GET', 'api-v1:event.settings'),
)
class PretixScanNoSyncSecurityProfile(AllowListSecurityProfile):
identifier = 'pretixscan_online_kiosk'
verbose_name = _('pretixSCAN (kiosk mode, online only)')
allowlist = (
('GET', 'api-v1:version'),
('GET', 'api-v1:device.eventselection'),
('POST', 'api-v1:device.update'),
('POST', 'api-v1:device.revoke'),
('POST', 'api-v1:device.roll'),
('GET', 'api-v1:event-list'),
('GET', 'api-v1:event-detail'),
('GET', 'api-v1:subevent-list'),
('GET', 'api-v1:subevent-detail'),
('GET', 'api-v1:itemcategory-list'),
('GET', 'api-v1:item-list'),
('GET', 'api-v1:question-list'),
('GET', 'api-v1:badgelayout-list'),
('GET', 'api-v1:badgeitem-list'),
('GET', 'api-v1:checkinlist-list'),
('GET', 'api-v1:checkinlist-status'),
('POST', 'api-v1:checkinlistpos-redeem'),
('GET', 'api-v1:revokedsecrets-list'),
('GET', 'api-v1:event.settings'),
)
class PretixPosSecurityProfile(AllowListSecurityProfile):
identifier = 'pretixpos'
verbose_name = _('pretixPOS')
allowlist = (
('GET', 'api-v1:version'),
('GET', 'api-v1:device.eventselection'),
('POST', 'api-v1:device.update'),
('POST', 'api-v1:device.revoke'),
('POST', 'api-v1:device.roll'),
('GET', 'api-v1:event-list'),
('GET', 'api-v1:event-detail'),
('GET', 'api-v1:subevent-list'),
('GET', 'api-v1:subevent-detail'),
('GET', 'api-v1:itemcategory-list'),
('GET', 'api-v1:item-list'),
('GET', 'api-v1:question-list'),
('GET', 'api-v1:quota-list'),
('GET', 'api-v1:taxrule-list'),
('GET', 'api-v1:ticketlayout-list'),
('GET', 'api-v1:ticketlayoutitem-list'),
('GET', 'api-v1:order-list'),
('POST', 'api-v1:order-list'),
('GET', 'api-v1:order-detail'),
('DELETE', 'api-v1:orderposition-detail'),
('POST', 'api-v1:order-mark_canceled'),
('POST', 'api-v1:orderrefund-list'),
('POST', 'api-v1:orderrefund-done'),
('POST', 'api-v1:cartposition-list'),
('DELETE', 'api-v1:cartposition-detail'),
('GET', 'api-v1:giftcard-list'),
('POST', 'api-v1:giftcard-transact'),
('POST', 'plugins:pretix_posbackend:posreceipt-list'),
('POST', 'plugins:pretix_posbackend:posclosing-list'),
('POST', 'plugins:pretix_posbackend:posdebugdump-list'),
('POST', 'plugins:pretix_posbackend:stripeterminal.token'),
('GET', 'api-v1:revokedsecrets-list'),
('GET', 'api-v1:event.settings'),
)
DEVICE_SECURITY_PROFILES = {
k.identifier: k() for k in (
FullAccessSecurityProfile,
PretixScanSecurityProfile,
PretixScanNoSyncSecurityProfile,
PretixPosSecurityProfile,
)
}

View File

@@ -84,3 +84,15 @@ class EventCRUDPermission(EventPermission):
return False
return True
class ProfilePermission(BasePermission):
def has_permission(self, request, view):
if not request.user.is_authenticated:
return False
if isinstance(request.auth, OAuthAccessToken):
if not (request.auth.allow_scopes(['read']) or request.auth.allow_scopes(['profile'])) and request.method in SAFE_METHODS:
return False
return True

View File

@@ -3,7 +3,7 @@ from datetime import timedelta
from django.db import models
from django.urls import reverse
from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _
from oauth2_provider.generators import (
generate_client_id, generate_client_secret,
)

View File

@@ -9,7 +9,7 @@ from oauth2_provider.settings import oauth2_settings
class Validator(OAuth2Validator):
def save_authorization_code(self, client_id, code, request, *args, **kwargs):
if not getattr(request, 'organizers', None):
if not getattr(request, 'organizers', None) and request.scopes != ['profile']:
raise FatalClientError('No organizers selected.')
expires = timezone.now() + timedelta(
@@ -18,7 +18,8 @@ class Validator(OAuth2Validator):
expires=expires, redirect_uri=request.redirect_uri,
scope=" ".join(request.scopes))
g.save()
g.organizers.add(*request.organizers.all())
if request.scopes != ['profile']:
g.organizers.add(*request.organizers.all())
def validate_code(self, client_id, code, client, request, *args, **kwargs):
try:
@@ -34,12 +35,14 @@ class Validator(OAuth2Validator):
return False
def _create_access_token(self, expires, request, token, source_refresh_token=None):
if not getattr(request, 'organizers', None) and not getattr(source_refresh_token, 'access_token'):
if not getattr(request, 'organizers', None) and not getattr(source_refresh_token, 'access_token', None) and token["scope"] != 'profile':
raise FatalClientError('No organizers selected.')
if hasattr(request, 'organizers'):
orgs = list(request.organizers.all())
else:
orgs = list(source_refresh_token.access_token.organizers.all())
if token['scope'] != 'profile':
if hasattr(request, 'organizers'):
orgs = list(request.organizers.all())
else:
orgs = list(source_refresh_token.access_token.organizers.all())
access_token = super()._create_access_token(expires, request, token, source_refresh_token=None)
access_token.organizers.add(*orgs)
if token['scope'] != 'profile':
access_token.organizers.add(*orgs)
return access_token

View File

@@ -2,7 +2,7 @@ from datetime import timedelta
from django.utils.crypto import get_random_string
from django.utils.timezone import now
from django.utils.translation import ugettext_lazy
from django.utils.translation import gettext_lazy
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
@@ -56,7 +56,7 @@ class CartPositionCreateSerializer(I18nAwareModelSerializer):
else validated_data.get('item').quotas.filter(subevent=validated_data.get('subevent')))
if len(new_quotas) == 0:
raise ValidationError(
ugettext_lazy('The product "{}" is not assigned to a quota.').format(
gettext_lazy('The product "{}" is not assigned to a quota.').format(
str(validated_data.get('item'))
)
)
@@ -64,8 +64,8 @@ class CartPositionCreateSerializer(I18nAwareModelSerializer):
avail = quota.availability()
if avail[0] != Quota.AVAILABILITY_OK or (avail[1] is not None and avail[1] < 1):
raise ValidationError(
ugettext_lazy('There is not enough quota available on quota "{}" to perform '
'the operation.').format(
gettext_lazy('There is not enough quota available on quota "{}" to perform '
'the operation.').format(
quota.name
)
)
@@ -88,7 +88,7 @@ class CartPositionCreateSerializer(I18nAwareModelSerializer):
else:
validated_data['seat'] = seat
if not seat.is_available(sales_channel=validated_data.get('sales_channel', 'web')):
raise ValidationError(ugettext_lazy('The selected seat "{seat}" is not available.').format(seat=seat.name))
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.')

View File

@@ -1,4 +1,4 @@
from django.utils.translation import ugettext as _
from django.utils.translation import gettext as _
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
@@ -14,7 +14,19 @@ class CheckinListSerializer(I18nAwareModelSerializer):
class Meta:
model = CheckinList
fields = ('id', 'name', 'all_products', 'limit_products', 'subevent', 'checkin_count', 'position_count',
'include_pending', 'auto_checkin_sales_channels')
'include_pending', 'auto_checkin_sales_channels', 'allow_multiple_entries', 'allow_entry_after_exit',
'rules', 'exit_all_at')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for exclude_field in self.context['request'].query_params.getlist('exclude'):
p = exclude_field.split('.')
if p[0] in self.fields:
if len(p) == 1:
del self.fields[p[0]]
elif len(p) == 2:
self.fields[p[0]].child.fields.pop(p[1])
def validate(self, data):
data = super().validate(data)
@@ -28,9 +40,7 @@ class CheckinListSerializer(I18nAwareModelSerializer):
raise ValidationError(_('One or more items do not belong to this event.'))
if event.has_subevents:
if not full_data.get('subevent'):
raise ValidationError(_('Subevent cannot be null for event series.'))
if event != full_data.get('subevent').event:
if full_data.get('subevent') and event != full_data.get('subevent').event:
raise ValidationError(_('The subevent does not belong to this event.'))
else:
if full_data.get('subevent'):

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