Compare commits

...

699 Commits

Author SHA1 Message Date
Raphael Michel
8ba76ec542 Bump to 3.18.0 2021-04-30 11:43:59 +02:00
Raphael Michel
a9ec581421 Update locale files [skip ci] 2021-04-30 11:42:18 +02:00
Raphael Michel
da762a3fa9 Fix typo 2021-04-30 11:38:47 +02:00
Mohamed Tawfiq
5a02f110a4 Translated on translate.pretix.eu (Arabic)
Currently translated at 100.0% (163 of 163 strings)

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

powered by weblate
2021-04-30 11:38:37 +02:00
Mohamed Tawfiq
84a07ec998 Translated on translate.pretix.eu (Arabic)
Currently translated at 77.3% (3176 of 4106 strings)

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

powered by weblate
2021-04-30 11:38:37 +02:00
lapor-kris
e526847704 Translated on translate.pretix.eu (Slovenian)
Currently translated at 27.9% (1149 of 4106 strings)

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

powered by weblate
2021-04-30 11:38:37 +02:00
Mohamed Tawfiq
527fa58ee4 Translated on translate.pretix.eu (Arabic)
Currently translated at 99.3% (162 of 163 strings)

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

powered by weblate
2021-04-30 11:38:37 +02:00
Mohamed Tawfiq
735bc74146 Translated on translate.pretix.eu (Arabic)
Currently translated at 77.3% (3176 of 4106 strings)

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

powered by weblate
2021-04-30 11:38:37 +02:00
Raphael Michel
55c1edaa03 Web checkin: More correct headline naming 2021-04-29 17:41:44 +02:00
Raphael Michel
552d13ef6c Fix handling of auto-checkout around DST switch 2021-04-29 17:39:23 +02:00
Raphael Michel
a45f4cce4f Fix incorrect timezone in check-in list export 2021-04-29 17:14:18 +02:00
Raphael Michel
4acf660906 Fix #1567 -- Per-subevent availability of items (#2040) 2021-04-29 15:34:58 +02:00
Felix Rindt
6447201f9f fix type error in license check 2021-04-27 17:43:59 +02:00
Mohamed Tawfiq
c9e7dfe953 Translated on translate.pretix.eu (Arabic)
Currently translated at 77.3% (3174 of 4106 strings)

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

powered by weblate
2021-04-27 11:48:09 +02:00
Irmantas Marozas
aae3faed44 Remove redundant mime-type from nginx config 2021-04-26 14:25:31 +02:00
Richard Schreiber
a0b3c70e2a add support for check-in into overlapping events (#2039)
When events overlap, check-in only worked for the currently running event. If events run back-to-back, it can happen, that admission should start earlier and overlaps the currently running event. This checks if an overlapping event has started even if the current event is still running.
2021-04-26 13:13:21 +02:00
Raphael Michel
8921ccb8c1 Fix another FileNotFoundError in license check 2021-04-26 13:07:09 +02:00
Raphael Michel
2cd67d6036 Fix errors in license compliance dialog 2021-04-26 12:23:41 +02:00
Raphael Michel
9f9d18b17f Update protobuf package 2021-04-26 11:50:18 +02:00
Raphael Michel
a0a3967ceb Allow search and filtering in long multiple choice boxes 2021-04-26 11:15:09 +02:00
Raphael Michel
762fbe0cf6 Allow to search for team (members) 2021-04-26 10:38:09 +02:00
Raphael Michel
dafee9ad72 Plugin API: Allow to add validators to checkout form fields 2021-04-26 10:17:17 +02:00
Raphael Michel
967c641e14 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (4106 of 4106 strings)

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

powered by weblate
2021-04-25 17:54:39 +02:00
Raphael Michel
2c033e67a9 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 100.0% (4106 of 4106 strings)

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

powered by weblate
2021-04-25 17:54:39 +02:00
Raphael Michel
a230df33f6 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 100.0% (163 of 163 strings)

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

powered by weblate
2021-04-25 17:54:39 +02:00
Raphael Michel
07a3623c13 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (163 of 163 strings)

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

powered by weblate
2021-04-25 17:54:39 +02:00
Raphael Michel
8c7774e5e3 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 100.0% (4106 of 4106 strings)

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

powered by weblate
2021-04-25 17:54:39 +02:00
Raphael Michel
16538972a3 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (4106 of 4106 strings)

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

powered by weblate
2021-04-25 17:54:39 +02:00
Alexander Dalen
9ae23217f2 Translated on translate.pretix.eu (Norwegian Bokmål)
Currently translated at 2.5% (103 of 4106 strings)

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

powered by weblate
2021-04-25 17:54:39 +02:00
Alexander Dalen
2b18063f9f Translated on translate.pretix.eu (Norwegian Bokmål)
Currently translated at 1.8% (75 of 4106 strings)

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

powered by weblate
2021-04-25 17:54:39 +02:00
Maarten van den Berg
24d29febc4 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (4106 of 4106 strings)

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

powered by weblate
2021-04-25 17:54:39 +02:00
Raphael Michel
18fdaa0647 Adjust German wordlist 2021-04-25 17:48:28 +02:00
Raphael Michel
8e05d52f42 Fix failing tests 2021-04-23 15:30:21 +02:00
Raphael Michel
96e31c15e6 Update CONTRIBUTING.md 2021-04-23 13:09:09 +02:00
Raphael Michel
70fbc48295 Order list exporter: Add column for email address verified 2021-04-22 22:12:43 +02:00
Raphael Michel
b6e9e64ff9 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 98.8% (4060 of 4106 strings)

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

powered by weblate
2021-04-21 17:44:46 +02:00
Raphael Michel
b148253997 Translated on translate.pretix.eu (German)
Currently translated at 98.6% (4050 of 4106 strings)

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

powered by weblate
2021-04-21 17:44:46 +02:00
Raphael Michel
7585f8b7d2 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 98.8% (4060 of 4106 strings)

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

powered by weblate
2021-04-21 17:44:46 +02:00
Raphael Michel
d635610546 Translated on translate.pretix.eu (German)
Currently translated at 98.6% (4050 of 4106 strings)

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

powered by weblate
2021-04-21 17:44:46 +02:00
Raphael Michel
f4b7d02361 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 98.8% (4060 of 4106 strings)

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

powered by weblate
2021-04-21 17:44:46 +02:00
Raphael Michel
7dfd6480bd Translated on translate.pretix.eu (German)
Currently translated at 98.6% (4050 of 4106 strings)

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

powered by weblate
2021-04-21 17:44:46 +02:00
Raphael Michel
dd99095bef Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 98.8% (4060 of 4106 strings)

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

powered by weblate
2021-04-21 17:44:46 +02:00
Raphael Michel
65ce678a20 Translated on translate.pretix.eu (German)
Currently translated at 98.6% (4050 of 4106 strings)

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

powered by weblate
2021-04-21 17:44:46 +02:00
Raphael Michel
3a7bde4980 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 98.8% (4060 of 4106 strings)

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

powered by weblate
2021-04-21 17:44:46 +02:00
Raphael Michel
0488336b1f Refund process: Allow to specify manual expiry for gift card 2021-04-21 17:29:23 +02:00
Raphael Michel
10d41cd6ee Web check-in: Better message for exit 2021-04-21 13:02:31 +02:00
Raphael Michel
99bc133540 Check-in list editor: Allow to delete last rule 2021-04-21 12:56:28 +02:00
Raphael Michel
caa61a463e Mail: Retry if pulling attachments failed 2021-04-21 11:36:30 +02:00
pretix translation bot
1314cdc7b7 Translations update from Weblate (#2034)
Co-authored-by: Raphael Michel <michel@rami.io>
2021-04-21 10:14:26 +02:00
Raphael Michel
7942c4112f AsyncFormView: Pass locale and timezone to task 2021-04-20 19:04:29 +02:00
Raphael Michel
b482d84c3c Ticket PDF exporter: Fix call to None.timezone 2021-04-20 18:31:59 +02:00
pretix translation bot
97dbef9778 Translations update from Weblate (#2033)
Co-authored-by: Raphael Michel <michel@rami.io>
2021-04-20 09:55:29 +02:00
Raphael Michel
0576cb013c Fix typo in .po source string 2021-04-20 09:50:23 +02:00
Raphael Michel
6064b14563 Spellcheck and typo fixes 2021-04-20 09:48:50 +02:00
Raphael Michel
c2de0ca9b0 List of check-in lists: Use internal product names 2021-04-20 09:37:47 +02:00
Raphael Michel
5faf2019e8 Metrics: Fail silently if estimated count returns no result 2021-04-19 23:28:58 +02:00
Raphael Michel
9f9d047293 Correctly set region on organizer profile page 2021-04-19 17:49:53 +02:00
Raphael Michel
35fbefe2bd Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2021-04-19 16:58:45 +02:00
Tim Neumann
bd34dd44a0 Fix #2029 -- Drop queue metrics on non-redis brokers (#2030)
The current implementation only works if redis is used as broker.
Otherwise it would throw an Exception, which causes a 500 to be returend.
Now we just don't have celery metrics in those cases.

Fixes #2029
2021-04-19 16:34:01 +02:00
Raphael Michel
7d1aeeb6dd Check-in rules SQL: Deal with empty boolean operations 2021-04-19 16:27:41 +02:00
Raphael Michel
24bccf8b9c Add Question.valid_file_portrait as well as crop editor for images 2021-04-19 15:40:16 +02:00
Martin Gross
638b856f42 Fix word mixup 2021-04-19 10:52:45 +02:00
pretix translation bot
5fa3a3bf85 Translations update from Weblate (#2018)
Co-authored-by: lapor-kris <kristijan.tkalec@posteo.si>
2021-04-19 09:23:09 +02:00
astrocbxy
6309582593 Fix #2031 -- Typo in ItemCreateForm (#2032) 2021-04-19 09:21:15 +02:00
Raphael Michel
1844a1fe6d Fix isort issue 2021-04-18 15:08:12 +02:00
Raphael Michel
bc1641a97e Item editor: Show internal name in headline 2021-04-17 15:43:46 +02:00
Raphael Michel
3831ddec93 ItemCreateForm: Copy ItemAddOn.multiple_allowed 2021-04-17 15:43:33 +02:00
Raphael Michel
f2a6f751ac Order import: Auto-trim values 2021-04-17 15:43:24 +02:00
Raphael Michel
95d19dc656 Show collapsed cart on voucher redemption page 2021-04-17 13:46:45 +02:00
Raphael Michel
3ea1a92716 PDF: Remove whitespace from qr-codes (backwards-compatible) 2021-04-16 18:02:56 +02:00
Raphael Michel
7c07a6581e PDF: Show Preview in browser viewer for easier debugging 2021-04-16 17:43:57 +02:00
Raphael Michel
fa48e55f0f Allow pretixPOS to access more API endpoints 2021-04-16 17:07:59 +02:00
Raphael Michel
294cb65388 Order API: Add magic value to keep current file 2021-04-16 15:26:49 +02:00
Raphael Michel
16cd6598b3 Checkout confirm step: Highlight links to terms 2021-04-16 10:35:29 +02:00
Raphael Michel
1b41fa1f3b Device security policy: Fix wrong url name 2021-04-16 10:35:21 +02:00
Raphael Michel
0719213155 Clean up alignment on shop page (#2025) 2021-04-15 22:09:04 +02:00
Richard Schreiber
7555bf422d renamed doc/LICENSE to doc/LICENSE.txt to support case-insensitive file-systems 2021-04-15 21:50:06 +02:00
Raphael Michel
08d68a764b Email layout with logo: Allow large logos 2021-04-15 14:45:15 +02:00
Raphael Michel
90056c5dca Email details body: Replace "Organizer" with "Contact"
"Organizer" isn't always accurrate if the organizer isn't actually
organizing the event but maybe only selling the tickets
2021-04-13 15:59:02 +02:00
Raphael Michel
92bf93ca0a Fix bug in bulk-event editor 2021-04-13 14:15:24 +02:00
Raphael Michel
d48e2bc084 API: Fix missing pdf_data 2021-04-12 17:29:33 +02:00
Raphael Michel
2a9d133922 Fix typo 2021-04-12 17:23:10 +02:00
Raphael Michel
a96023af01 API: Allow retry with same idempotency token after error 500 2021-04-12 16:30:16 +02:00
Raphael Michel
a93287207b pretix Community Edition moves to AGPLv3-based license (#2023) 2021-04-12 10:33:47 +02:00
Felix Rindt
ce834d7028 Fix checkin-list pdf export subevent time formatting (#2022) 2021-04-11 20:10:33 +02:00
Raphael Michel
0a6b53b63b OAuth authorize dialog: Show which user you are logged in as 2021-04-11 15:10:10 +02:00
Raphael Michel
3044b9346a Fix unclear label 2021-04-08 22:05:40 +02:00
Raphael Michel
aaafbea77a Bump django-i18nfield 2021-04-08 21:48:26 +02:00
Raphael Michel
b2e28dcd1c Reorder organizer navigation a little 2021-04-08 11:28:53 +02:00
Martin Gross
d635448db4 Bump Django to 3.0.14 2021-04-06 10:16:05 +02:00
Raphael Michel
69e8613896 Fix #2016 -- Correct shredding of question answers with file attachments 2021-04-05 17:24:38 +02:00
Raphael Michel
1275995575 Fix #2017 -- Add nodejs to install guide 2021-04-05 17:08:52 +02:00
Raphael Michel
9d7d59f030 Fix #2015 -- Shift operation into a later migration 2021-04-01 11:02:10 +02:00
Raphael Michel
847190e0fe GitLab: Move npm install command 2021-03-31 14:45:38 +02:00
Raphael Michel
1a9769ea8c Fix missing manifest rules 2021-03-31 13:20:11 +02:00
Raphael Michel
59299fdecb Bump to 3.18.0.dev0 2021-03-31 13:11:22 +02:00
Raphael Michel
f1f09d5c34 Hotfix: Avoid infinite loop in migration at all cost 2021-03-31 13:11:22 +02:00
Martin Gross
94d6ac855a Add itemvar_description, attendee_email and email to PDFvars 2021-03-31 12:33:13 +02:00
Raphael Michel
a911a2076d Bump to 3.17.0 2021-03-31 11:48:30 +02:00
Raphael Michel
da8470682e Add comments to explain magic numbers 2021-03-31 11:38:14 +02:00
Raphael Michel
ab61a9b190 Guard against integrity errors when saving questions 2021-03-31 11:32:54 +02:00
Raphael Michel
e668fbf3ba Fix Keyerror when updating event comment 2021-03-31 11:00:14 +02:00
Raphael Michel
8e76642372 Update Pillow dependency 2021-03-31 10:42:07 +02:00
Raphael Michel
24e785089a Run isort on setup.py 2021-03-31 10:40:18 +02:00
Raphael Michel
a6d4e26a3b Fix import order 2021-03-31 10:38:39 +02:00
Raphael Michel
bbcb41da2b Cart action views: Improve input validation 2021-03-31 10:38:10 +02:00
Raphael Michel
8101a9d8ae CartManager: Fix a cache handling bug 2021-03-31 10:37:49 +02:00
Raphael Michel
0945e96a4e Fix settings import 2021-03-31 10:33:31 +02:00
Raphael Michel
a08272571b Fix gaps in our email error handling 2021-03-31 10:05:15 +02:00
Raphael Michel
8131ecf378 Tax rule creation: Fix crash on invalid form submission 2021-03-31 09:48:42 +02:00
Raphael Michel
0155669379 Widget: Gracefully fail if custom CSS file is not found 2021-03-31 09:48:42 +02:00
Raphael Michel
1d6ed60f37 Auto-retry failed notifications 2021-03-31 09:48:42 +02:00
pretix translation bot
6fae931e6a Translations update from Weblate (#2014)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
Co-authored-by: Raphael Michel <michel@rami.io>
2021-03-30 21:47:37 +02:00
dependabot[bot]
9a797036b3 Bump pug-code-gen from 2.0.2 to 2.0.3 in /src/pretix/static/npm_dir (#2012)
Bumps [pug-code-gen](https://github.com/pugjs/pug) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/pugjs/pug/releases)
- [Commits](https://github.com/pugjs/pug/compare/pug-code-gen@2.0.2...pug@2.0.3)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-03-30 21:45:15 +02:00
Raphael Michel
33ff7c39aa Fix PRETIXEU-3V3 2021-03-30 21:24:53 +02:00
Raphael Michel
0efd4fedd5 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2021-03-30 18:15:59 +02:00
Raphael Michel
267e66bf83 Install npm as part of setup.py develop 2021-03-30 18:06:14 +02:00
Raphael Michel
a6c39b144c Revert to python 3.8 on docker for now 2021-03-30 14:59:26 +02:00
Raphael Michel
e7db4e7c42 Add npminstall to pip and docker build processes 2021-03-30 14:29:18 +02:00
Richard Schreiber
ba0849ea8d Add phone number to checkin-list export (#2013)
* add phone number to check-in export and tests
2021-03-30 12:51:07 +02:00
Raphael Michel
184a45b773 Update migration for MySQL compliance 2021-03-30 10:04:09 +02:00
Raphael Michel
2d4249ab31 Device security profiles: Allow POS access to cashier list 2021-03-30 09:34:52 +02:00
Raphael Michel
92a50cb2d1 Web-based check-in interface (#1985) 2021-03-30 09:34:11 +02:00
Raphael Michel
b06cded172 Organizer update form: Do not prefill with event-level domains 2021-03-29 14:23:48 +02:00
Raphael Michel
9686fd6a83 Fix a bug displaying quota in (sub)event list 2021-03-29 14:22:17 +02:00
Raphael Michel
b5b3d3a90b Fix PRETIXEU-3TX 2021-03-29 13:10:32 +02:00
Raphael Michel
9d0e6c0056 Fix failing tests 2021-03-29 12:49:59 +02:00
Raphael Michel
701d019a85 Fix bugs in previous commits 2021-03-29 12:26:06 +02:00
Raphael Michel
7d5170155a Add filter for date for multiple exporters 2021-03-29 12:05:56 +02:00
Raphael Michel
2b660ccbf7 Allow to enter a voucher before choosing a subevent 2021-03-29 11:04:57 +02:00
Raphael Michel
127c44d699 Do not count bundled products when computing event availability 2021-03-29 10:18:40 +02:00
Raphael Michel
d43e85da6d Add setting to hide sold-out timeslots 2021-03-29 10:18:25 +02:00
Raphael Michel
d3748a6194 Move quota cache from database to redis (#2010) 2021-03-29 09:42:27 +02:00
Raphael Michel
a927b47b8b Appease isort 2021-03-26 16:58:41 +01:00
Raphael Michel
5be09accf7 Set correct timezone when rendering emails 2021-03-26 12:47:36 +01:00
Raphael Michel
2c2a7e07f0 Fix bug caused by autocompletion 2021-03-26 09:57:37 +01:00
Raphael Michel
1e193ca58e Fix another notification bug 2021-03-25 14:05:57 +01:00
Raphael Michel
2dfed06dd0 Fix TypeError in a previous commit 2021-03-25 13:14:43 +01:00
Raphael Michel
2e0ddb630b Allow to export a list of gift cards 2021-03-24 18:38:15 +01:00
Raphael Michel
a6bd00a26a Order notifications: Include net sum and subevents 2021-03-24 16:33:33 +01:00
Richard Schreiber
53070f5d4b Cart: fix call to del if attribute is unknown when rendering a form label 2021-03-22 17:48:29 +01:00
Richard Schreiber
5685a349ea fix code style issues - missing whitespace around = operator 2021-03-22 17:05:13 +01:00
Richard Schreiber
1af69d5c76 Cart: Hide attendee information if not provided 2021-03-22 16:38:10 +01:00
Richard Schreiber
adddc7a71e A11y: add role=group and labels to multi-widgets (#2006)
* add role=group aria-labelledby to multiwidgets

* remove for-attribute from parent-label for grouped inputs

* add aria-labels to PhoneNumber-fields

* add aria-label to name multi-inputs
2021-03-22 15:19:29 +01:00
Richard Schreiber
11f23c3fd2 [a11y] Improved form error messages, descriptive labels, focusable toggle-link (#2002) 2021-03-19 16:13:25 +01:00
Raphael Michel
954fece6cf Log view: Page size selector 2021-03-19 10:49:03 +01:00
Richard Schreiber
8ef6adc3d5 A11y: make toggle-link for "view other date" focusable 2021-03-19 08:00:41 +01:00
Aksh Gupta
88ba7ab53a Refactor code quality issues (#2001) 2021-03-16 19:13:02 +01:00
Raphael Michel
eae55e4b5a Widget: Support button with subevent but without items 2021-03-16 19:01:43 +01:00
Raphael Michel
5ae839f62e Security Profile: Allow badge layouts for POS 2021-03-16 19:01:43 +01:00
Raphael Michel
7314d32422 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (4019 of 4019 strings)

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

powered by weblate
2021-03-16 17:30:23 +01:00
Maarten van den Berg
97d6ae8e55 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (4019 of 4019 strings)

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

powered by weblate
2021-03-16 17:30:23 +01:00
Maarten van den Berg
13063cb9d2 Translated on translate.pretix.eu (Dutch)
Currently translated at 99.3% (3993 of 4019 strings)

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

powered by weblate
2021-03-16 17:30:23 +01:00
Raphael Michel
2792813d95 Widget: Fix possible redirect loop 2021-03-16 17:26:20 +01:00
Martin Gross
d6aeefdf09 Add force-reactivate checkbox to order (#1997) 2021-03-16 16:49:37 +01:00
Raphael Michel
13056ef477 Widget: Do not prefill field with 0 2021-03-16 16:46:39 +01:00
Raphael Michel
6e2b5eae9a Widget: Open iframe even on mobile (to prevent breakage in WkWebView) 2021-03-16 16:16:59 +01:00
Raphael Michel
4cfb10b254 Widget: Make close icon independent of system font 2021-03-16 12:50:19 +01:00
Raphael Michel
ebd336e8cb Use new red color everywhere 2021-03-16 12:17:54 +01:00
Richard Schreiber
1357b010de [a11y] add missing labels on voucher-input and fix input.focus when revealing voucher-input via JS (#1998) 2021-03-16 12:17:47 +01:00
Richard Schreiber
09b2e69178 [a11y] Increase contrast on some colors for WCAG conformance (#1996)
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
2021-03-16 12:10:37 +01:00
Raphael Michel
5e34032821 Fix #256 -- Allow exact filtering of voucher tags 2021-03-15 16:16:49 +01:00
Richard Schreiber
46cee890f0 QuestionAnswer: Add UNIQUE keys on (orderposition, question) and (cartposition, question) (#1994) 2021-03-15 15:34:33 +01:00
Raphael Michel
4a2ac110b3 Voucher bulk creation: More efficient implementation and async task 2021-03-14 18:19:49 +01:00
Raphael Michel
7eefd3dc59 Recommend upper-case index on pretixbase_voucher.code 2021-03-14 18:04:19 +01:00
Raphael Michel
fdca62685c Revert "Update Django to 3.1 as well as other dependencies"
This reverts commit b3c9dca024.
2021-03-12 10:52:02 +01:00
Raphael Michel
7ae38b5e97 Fix TypeError during invoice creation 2021-03-12 10:51:50 +01:00
Raphael Michel
76e9093fea Fix email sending during tests 2021-03-11 22:46:07 +01:00
Raphael Michel
b3c9dca024 Update Django to 3.1 as well as other dependencies 2021-03-11 21:59:04 +01:00
Raphael Michel
f4710cf019 Add index to documentation 2021-03-11 21:43:27 +01:00
Raphael Michel
5f192fd0ce Remove order status from emails 2021-03-11 17:56:28 +01:00
Raphael Michel
a897f60fc5 Fix crash during copying of check-in rules 2021-03-11 12:43:33 +01:00
Raphael Michel
74107781ce Email context: Auto-set position_or_address if position is set 2021-03-10 16:18:46 +01:00
Raphael Michel
ad219df7cf Fix incorrect attribute parameter in thumbnailed_file_input 2021-03-10 16:14:06 +01:00
Raphael Michel
002ab4aa06 runperiodic: --exclude 2021-03-09 11:50:19 +01:00
Raphael Michel
a84a726185 Try to avoid race condition when sending emails 2021-03-09 09:06:14 +01:00
Raphael Michel
5f58b93c71 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 100.0% (4019 of 4019 strings)

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

powered by weblate
2021-03-08 18:09:09 +01:00
Raphael Michel
3eaaf80c0a Translated on translate.pretix.eu (German)
Currently translated at 100.0% (4019 of 4019 strings)

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

powered by weblate
2021-03-08 18:09:09 +01:00
Raphael Michel
3b5d811b27 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2021-03-08 17:40:02 +01:00
Raphael Michel
f0da2b7233 E-mails: add additional information on order positions 2021-03-08 16:50:38 +01:00
lapor-kris
d8d7440b52 Translated on translate.pretix.eu (Slovenian)
Currently translated at 27.1% (1085 of 4002 strings)

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

powered by weblate
2021-03-08 16:50:33 +01:00
Raphael Michel
a1ec9fceb0 Quota list exporter: Add subevent information 2021-03-08 14:47:41 +01:00
Raphael Michel
27ff73255b Add new fields to invoice model and API 2021-03-08 14:28:04 +01:00
Raphael Michel
bba103156c Allow to cancel an order without creating a cancellation invoice 2021-03-08 11:26:52 +01:00
Raphael Michel
f1a98b5c30 Add event_info_text parameters 2021-03-05 17:56:29 +01:00
Raphael Michel
405b3a22e1 Fix bug when changing quotas in subevent bulk editor 2021-03-05 13:05:04 +01:00
Raphael Michel
a51c2a36a6 SubEvent search: Fix inconsistent ordering 2021-03-05 11:57:24 +01:00
Richard Schreiber
8e00970f04 Waiting list: Add name and phone number (#1987)
* add name and phone to waitinglist

* add options whether to ask for name/phone in waitinglist

* changed rendermode to checkout and added required-css-class

* changed default to original behaviour to not ask name or phone at all

* add name and phone to list-view and export

* add name and phone to Meta-class so they automagically get saved

* update shredder

* fixed isort

* Translated on translate.pretix.eu (Slovenian)

Currently translated at 19.9% (799 of 3996 strings)

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

powered by weblate

* Translated on translate.pretix.eu (Slovenian)

Currently translated at 21.6% (865 of 3996 strings)

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

powered by weblate

* Translated on translate.pretix.eu (Slovenian)

Currently translated at 23.8% (955 of 3996 strings)

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

powered by weblate

* Translated on translate.pretix.eu (Slovenian)

Currently translated at 26.3% (1051 of 3996 strings)

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

powered by weblate

* add validation to WaitingListSerializer

* update API-description

* fixed test_waitinglist.py

* Revert more of de597ba86

* Paginate list of gift cards

* Change texts on order confirmation page if no attachments are sent

* Update locales

* Added translation on translate.pretix.eu (Sinhala)

* Added translation on translate.pretix.eu (Sinhala)

* Translated on translate.pretix.eu (Sinhala)

Currently translated at 0.4% (18 of 4002 strings)

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

powered by weblate

* Fix initial value of phone number

* add colon to enumeration in description

Co-authored-by: Raphael Michel <michel@rami.io>

* update API-description with null-fields

* add name and phone to waitinglist

* add options whether to ask for name/phone in waitinglist

* changed rendermode to checkout and added required-css-class

* changed default to original behaviour to not ask name or phone at all

* add name and phone to list-view and export

* add name and phone to Meta-class so they automagically get saved

* update shredder

* fixed isort

* add validation to WaitingListSerializer

* update API-description

* fixed test_waitinglist.py

* Fix initial value of phone number

* update API-description with null-fields

* add colon to enumeration in description

Co-authored-by: Raphael Michel <michel@rami.io>

* fixed isort on migration

Co-authored-by: lapor-kris <kristijan.tkalec@posteo.si>
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
Co-authored-by: helabasa <R45XvezA@pm.me>
Co-authored-by: Raphael Michel <michel@rami.io>
2021-03-05 10:02:37 +01:00
Raphael Michel
8ca2fe7707 Stripe: Deal with conflicting settings 2021-03-04 20:13:10 +01:00
Raphael Michel
b93e2307d0 CachedFileField: Prevent double upload leading to empty file 2021-03-04 18:11:11 +01:00
Raphael Michel
97f3b72254 CachedFileInput: Fix links to download file 2021-03-04 14:54:11 +01:00
Panawat Wong-kleaw
00a77d3de9 Manual payment: Add amount placeholder (#1990) 2021-03-03 15:04:44 +01:00
helabasa
35d9a0dacf Translated on translate.pretix.eu (Sinhala)
Currently translated at 0.4% (18 of 4002 strings)

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

powered by weblate
2021-03-03 12:53:23 +01:00
helabasa
d2e6320e1e Added translation on translate.pretix.eu (Sinhala) 2021-03-03 12:53:23 +01:00
helabasa
671eb902a8 Added translation on translate.pretix.eu (Sinhala) 2021-03-03 12:53:23 +01:00
Raphael Michel
be67059099 Update locales 2021-03-02 18:42:39 +01:00
Raphael Michel
6e3791a49e Change texts on order confirmation page if no attachments are sent 2021-03-02 18:36:00 +01:00
Raphael Michel
e3bd665093 Paginate list of gift cards 2021-03-02 18:31:05 +01:00
Raphael Michel
748e2bb2fa Revert more of de597ba86 2021-03-02 18:26:01 +01:00
lapor-kris
b13b34f00d Translated on translate.pretix.eu (Slovenian)
Currently translated at 26.3% (1051 of 3996 strings)

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

powered by weblate
2021-03-02 11:23:51 +01:00
lapor-kris
641e3216d9 Translated on translate.pretix.eu (Slovenian)
Currently translated at 23.8% (955 of 3996 strings)

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

powered by weblate
2021-03-02 11:23:51 +01:00
lapor-kris
c70901c129 Translated on translate.pretix.eu (Slovenian)
Currently translated at 21.6% (865 of 3996 strings)

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

powered by weblate
2021-03-02 11:23:51 +01:00
lapor-kris
460d39b8c2 Translated on translate.pretix.eu (Slovenian)
Currently translated at 19.9% (799 of 3996 strings)

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

powered by weblate
2021-03-02 11:23:51 +01:00
Raphael Michel
a9963aead1 Fix import order 2021-03-02 10:54:11 +01:00
Raphael Michel
a09dac89c4 Partially revert de597ba86 2021-03-02 09:30:27 +01:00
Raphael Michel
8af91b691d Allow configurable addition to the order confirmation message 2021-03-01 18:28:08 +01:00
Raphael Michel
2221b57dc9 Allow to disable ticket attachments to emails 2021-03-01 18:21:12 +01:00
Raphael Michel
8d99388c08 InvoiceExporter: Useful error message if PDF generation fails 2021-03-01 10:35:53 +01:00
Raphael Michel
de597ba864 Fix #1982 -- Stricter cleaning of dynamic values in invoices 2021-03-01 10:35:02 +01:00
Raphael Michel
2d9a16e94d Bump to 3.17.0.dev0 2021-02-26 17:48:59 +01:00
Raphael Michel
a0026d8a0c Bump to 3.16.0 2021-02-26 17:48:02 +01:00
Raphael Michel
1cee082821 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 100.0% (3996 of 3996 strings)

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

powered by weblate
2021-02-26 17:47:56 +01:00
Raphael Michel
6c1a3a4c68 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3996 of 3996 strings)

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

powered by weblate
2021-02-26 17:47:56 +01:00
Raphael Michel
156e8413f8 Add geo to wordlist.txt 2021-02-26 17:43:00 +01:00
Raphael Michel
46ccce439a PDF: Add placeholder for the event name even in series 2021-02-26 17:39:18 +01:00
Richard Schreiber
675de12a5d Geo fields: only confirm/overwrite if new lat/lon differ from existing coordinates 2021-02-26 15:20:14 +01:00
Raphael Michel
5992892035 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2021-02-26 10:06:30 +01:00
Richard Schreiber
1c81792cd7 Geo fields: Allow overriding existing values (#1978) 2021-02-26 09:55:23 +01:00
Raphael Michel
73e7d407cd Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 100.0% (3992 of 3992 strings)

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

powered by weblate
2021-02-26 09:48:15 +01:00
Raphael Michel
fa78583cd3 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3992 of 3992 strings)

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

powered by weblate
2021-02-26 09:48:15 +01:00
Raphael Michel
bcba7b70ca Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 100.0% (3992 of 3992 strings)

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

powered by weblate
2021-02-26 09:48:15 +01:00
Raphael Michel
141c6d04b2 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3992 of 3992 strings)

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

powered by weblate
2021-02-26 09:48:15 +01:00
Raphael Michel
9c0da900a2 Update issue templates 2021-02-25 20:55:12 +01:00
Raphael Michel
580479b266 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2021-02-25 20:14:50 +01:00
Raphael Michel
4adaa2059d Clarify language 2021-02-25 17:23:00 +01:00
Raphael Michel
a900f39121 Check-in list update view: Fix incorrect timezone handling in exit_at_all 2021-02-25 12:32:55 +01:00
Richard Schreiber
b625d987a9 fix encoding issue in geocode-API call 2021-02-24 17:52:55 +01:00
Richard Schreiber
71e7d527d1 Merge pull request #1933 from pretix/a11y-add-landmarks
a11y: add landmarks, add missing labels, aria-hide icons, add checkout notifications to page title
2021-02-24 16:51:09 +01:00
Richard Schreiber
6fd0880e79 Change test, so at least body-element is available and ticket not in there 2021-02-24 16:09:30 +01:00
Richard Schreiber
8ca253c860 Fixed selectors in tests 2021-02-24 15:02:39 +01:00
Richard Schreiber
63c2852668 Merge branch 'master' into a11y-add-landmarks 2021-02-24 13:17:24 +01:00
Richard Schreiber
5b36fa198d Bulk action improvements: buttons (wording, color, icons, disabled-state), hide select-on-all-pages if only one results-page (#1973) 2021-02-24 09:59:07 +01:00
Irmantas
ef8b6f60b8 Adjust runperiodic logging (#1974)
Co-authored-by: Irmantas Marozas <irmantas.marozas@juvare.com>
2021-02-23 15:47:13 +01:00
Richard Schreiber
6ca07662b6 Merge branch 'master' into a11y-add-landmarks 2021-02-23 11:58:18 +01:00
Richard Schreiber
45a499ebba Merge pull request #1931 from pretix/bulk-select-with-drag-over
add bulk selection by click and drag over table rows
2021-02-22 22:00:40 +01:00
Richard Schreiber
1bfa4c6fda update toggle-state after release/pointerup instead of during updateSelection 2021-02-22 18:16:46 +01:00
Richard Schreiber
8a169d0496 fix bug when releasing outside of table 2021-02-22 18:13:18 +01:00
Richard Schreiber
40dbae76ca remove call to console.log 2021-02-22 17:47:03 +01:00
Richard Schreiber
4203087eff removed .warning from selected $rows as it interferes with .table-select-all 2021-02-22 17:46:04 +01:00
Richard Schreiber
88bf31bd7a Merge branch 'master' into bulk-select-with-drag-over 2021-02-22 16:37:39 +01:00
Richard Schreiber
3423923d84 Reduced "tickets and/or products" to "products" 2021-02-22 16:02:45 +01:00
Raphael Michel
beb33e21ee Merge pull request #1927 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2021-02-22 15:24:59 +01:00
Ondřej Sokol
461ab8ba0a Translated on translate.pretix.eu (Czech)
Currently translated at 4.1% (162 of 3940 strings)

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

powered by weblate
2021-02-22 15:22:44 +01:00
Raphael Michel
7562f333cf Subevents: Bulk editor (#1918)
Co-authored-by: Richard Schreiber <wiffbi@gmail.com>
2021-02-22 15:22:40 +01:00
Richard Schreiber
32f1c32936 reverted source order for lang-nav, kept as nav-element 2021-02-22 14:59:24 +01:00
Raphael Michel
eb0123e350 Allow to inspect organizer-level logs 2021-02-22 10:15:59 +01:00
Raphael Michel
37ba885c55 Check-in rule editor: Set tolerance to 0 when using custom time 2021-02-19 18:12:30 +01:00
Raphael Michel
8330448a94 Fix import order 2021-02-19 16:13:32 +01:00
Raphael Michel
8582bf8158 Use footernav block on organizer page 2021-02-19 16:00:12 +01:00
Richard Schreiber
e872180ed1 add order confirmation to <title> 2021-02-19 12:00:03 +01:00
Richard Schreiber
cc88e70db6 hide reservation timer from screen readers 2021-02-19 11:59:47 +01:00
Richard Schreiber
c335dd35b3 moved notice-bottom in footer, added footernav 2021-02-19 11:58:56 +01:00
Richard Schreiber
cea8efc4a3 added <main> and <aside> to checkout pages 2021-02-19 11:57:45 +01:00
Richard Schreiber
c6c0f92891 moved update()-event to checkboxes’ change-event, added row-highlight if selected 2021-02-19 11:03:47 +01:00
Richard Schreiber
d5950821e2 optimized update() to only check the least number of checkboxes 2021-02-19 11:02:42 +01:00
Richard Schreiber
78f2581bb8 added labels to batch-select checkboxes 2021-02-19 11:00:38 +01:00
Richard Schreiber
c9f89dc920 simplified selection algorithm 2021-02-19 07:33:01 +01:00
Richard Schreiber
fb7d38ede0 add bulk selection by click and drag over table rows 2021-02-18 21:05:30 +01:00
Raphael Michel
8be2f9ad6b XLSX exports: Strip all illegal characters 2021-02-17 17:34:08 +01:00
Richard Schreiber
c033efbfa2 Merge pull request #1929 from pretix/fix-add-line-breaks-to-voucher-list
Voucher creation: Add linebreaks to {voucher_list} in emails
2021-02-17 15:35:26 +01:00
Richard Schreiber
d990f0e927 fix markdown-linebreaks for voucher_list 2021-02-17 15:23:16 +01:00
Richard Schreiber
e011b7810d Merge pull request #1928 from pretix/mark-as-paid-add-notify-checkbox
Add checkbox to disable email sending when marking an order as paid
2021-02-17 14:58:35 +01:00
Richard Schreiber
0d0bbe1ce5 add send_email field to mark-paid 2021-02-17 12:37:26 +01:00
Raphael Michel
488273d5f2 Fix #1912 -- Auto-open all <details> with an error inside 2021-02-15 18:30:37 +01:00
Raphael Michel
9fdaf040dc Asynctask JS: On errors, only replace inner part of page 2021-02-15 18:30:37 +01:00
Raphael Michel
d109dde1e1 Fix form validation of exporters (again) 2021-02-15 18:30:37 +01:00
Raphael Michel
d713398e88 Merge pull request #1925 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2021-02-15 18:02:34 +01:00
Jaakko Rinta-Filppula
0898d13e4c Translated on translate.pretix.eu (Finnish)
Currently translated at 18.5% (731 of 3940 strings)

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

powered by weblate
2021-02-15 17:48:50 +01:00
Raphael Michel
04098ce002 API: Add docs on order lifecycle 2021-02-15 17:48:43 +01:00
Richard Schreiber
f2a18325b6 Add a voucher’s comment to voucher.csv download (#1926) 2021-02-15 13:41:44 +01:00
Raphael Michel
4db0530c09 REST API docs: Remove "versionchanged" notes older than ~1 year (version 3.2 and below) 2021-02-15 09:43:58 +01:00
Raphael Michel
938d84b251 Update order state chart 2021-02-15 09:38:13 +01:00
Raphael Michel
c65b2aa4f8 API: Add missing field SubEvent.frontpage_text 2021-02-15 09:16:40 +01:00
Richard Schreiber
2583e6166a Merge branch 'master' into a11y-add-landmarks 2021-02-12 20:40:24 +01:00
Richard Schreiber
825fd1820b [a11y] Add text "required" to label of required inputs (#1923) 2021-02-12 14:05:30 +01:00
Raphael Michel
c8d039b196 Sendmail: Allow to filter by order date 2021-02-12 12:41:45 +01:00
Raphael Michel
72b6ff0389 Sendmail form: Fix validation problems 2021-02-12 12:34:04 +01:00
Richard Schreiber
ef4db07e8b omit ? in lang-nav redirect when not needed 2021-02-11 17:27:05 +01:00
Richard Schreiber
ef1e5759eb marked checkout-steps as completed/current
See https://www.w3.org/WAI/tutorials/forms/multi-page/
2021-02-11 17:26:14 +01:00
Richard Schreiber
9f1079dcc4 checkout-flow steps to page-title 2021-02-11 17:25:31 +01:00
Richard Schreiber
518c1fbbf2 Added notifications/messages to page-title 2021-02-11 17:24:05 +01:00
Richard Schreiber
b9c9a03cdd Fixed item.name for price input 2021-02-11 16:16:17 +01:00
Richard Schreiber
5060bac7e0 update aria-label on <main> 2021-02-11 16:04:07 +01:00
Richard Schreiber
c4be508e26 added anchor link to voucher-input 2021-02-11 16:03:47 +01:00
Richard Schreiber
c75f741d4f removed variations-toggle hreef-attribute to enable non-JS dialog-open behaviour 2021-02-11 16:03:13 +01:00
Richard Schreiber
d6ef563f83 added labels (price input, image-lightbox link) 2021-02-11 16:02:18 +01:00
Richard Schreiber
3f75a935a3 changed products to <article> 2021-02-10 18:03:30 +01:00
Richard Schreiber
246e7c9443 added aria-labels to category-sections 2021-02-10 18:03:09 +01:00
Richard Schreiber
3dd685bf7a Updated main aria-label 2021-02-10 17:55:30 +01:00
Richard Schreiber
1480bd0690 added aria-hidden to fontawesome and some aria-label if needed 2021-02-10 17:27:49 +01:00
Richard Schreiber
01af8568ca converted second lang-nav to <nav> and changed source order 2021-02-10 16:41:59 +01:00
Richard Schreiber
74461dde50 added landmarks to startpage 2021-02-10 16:36:31 +01:00
Raphael Michel
f0fd4272dc Add more features to custom meta properties (#1922) 2021-02-10 11:01:25 +01:00
Raphael Michel
a0f60c71b9 Add order time to check-in list CSV export 2021-02-10 09:11:16 +01:00
Raphael Michel
6b2ab44b26 Fix undefined variable 2021-02-09 19:00:20 +01:00
Raphael Michel
9472d81e55 Invalidate ticket cache after a change in events or subevents 2021-02-09 18:33:04 +01:00
Raphael Michel
b630174f72 Fix bug when modifying an order with an address in a country with a state 2021-02-09 18:23:24 +01:00
Raphael Michel
25c35b0f73 Docker: Log more things to stdout 2021-02-09 18:16:35 +01:00
Raphael Michel
c0792f4171 Fallback to random ticket secret generator if invalid one is selected 2021-02-09 16:01:33 +01:00
Raphael Michel
5d490728df Check-in: Do not respond with outdated question answers in pdf_data 2021-02-09 12:55:27 +01:00
Raphael Michel
21fbf095cf Fix compatibility with cryptography 3.4.x 2021-02-08 18:01:05 +01:00
Raphael Michel
7b8ad1ebbe Remove --no-use-pep517 2021-02-08 17:56:05 +01:00
Raphael Michel
81f37d9ce5 PDF layout: Allow to show photos from questions (#1919) 2021-02-08 17:48:06 +01:00
Raphael Michel
40c4872459 Check-in: Save answers independent of result 2021-02-08 17:01:55 +01:00
Martin Gross
f0574755a2 Add salutation_given_family to PERSON_NAME_SCHEMES. (#1921) 2021-02-05 13:31:57 +01:00
Raphael Michel
4cfedebf3b Fix scoping issue in tests 2021-02-05 12:53:55 +01:00
Raphael Michel
45376dd757 Fix linter issue 2021-02-04 21:43:04 +01:00
Raphael Michel
0999f41b0c Do not allow modifications after checkin 2021-02-04 21:43:04 +01:00
Raphael Michel
565f77d13b Add imprint and contact mail on organizer level 2021-02-04 17:36:29 +01:00
Raphael Michel
5ae7a350b0 Add signal global_footer_link 2021-02-04 17:32:10 +01:00
Raphael Michel
af7d9942f6 Sort payment providers by public name 2021-02-04 17:21:47 +01:00
Raphael Michel
36efb25b98 Invoice address: Always validate that VAT ID is for correct country 2021-02-04 17:21:24 +01:00
Raphael Michel
7a496da945 Widget: Introduce disable-iframe parameter 2021-02-04 10:58:15 +01:00
Raphael Michel
03f1016cc7 Fix syntax error in setup.py 2021-02-04 10:42:41 +01:00
Raphael Michel
4d4d2d5fe7 Fix ill-formed requirement 2021-02-04 10:24:04 +01:00
Raphael Michel
98f48e78a8 Update bleach to 3.3.0 2021-02-04 10:23:18 +01:00
Raphael Michel
512c9f5301 Upgrade bootstrap JS to 3.4.1 2021-02-04 10:20:49 +01:00
Raphael Michel
d16c59e86c Update Vue.js from 2.4.0 to 2.6.12 2021-02-04 10:06:51 +01:00
Raphael Michel
177b0505fd Update moment.js from 2.14 to 2.29 2021-02-04 10:06:38 +01:00
Raphael Michel
01f7a70347 ADd some extensibility features to MultiSheetListExporter 2021-02-03 17:29:15 +01:00
Raphael Michel
3b4c99d450 Rich text: Fix issue with <a> without href="" 2021-02-02 15:58:43 +01:00
Raphael Michel
3bb23bb77e Invoice exporter: Add order ID to filename 2021-02-02 15:54:05 +01:00
Raphael Michel
89da0847ca Device security policy: Allow order payments for POS 2021-02-02 15:54:05 +01:00
Martin Gross
07bed72b5e Add information on `subevent`-parameter for pretix-Button 2021-02-01 16:08:16 +01:00
Raphael Michel
c103288eec 2021 attempt at disabling autocomplete in date fields
Apparently, we so far disabled "autofill" but not "autocomplete". For
date fields, autocomplete is more relevant. Explanation
https://stackoverflow.com/a/57810447/336784
2021-02-01 10:07:57 +01:00
Raphael Michel
03648b77b1 List of teams: Order alphabetically 2021-02-01 10:07:57 +01:00
Raphael Michel
818d75ddd7 Merge pull request #1917 from pretix-translations/weblate-pretix-pretix 2021-01-30 21:02:25 +01:00
Raphael Michel
20f608caae Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3940 of 3940 strings)

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

powered by weblate
2021-01-30 20:49:41 +01:00
Raphael Michel
7b3a6d47fc Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 100.0% (3940 of 3940 strings)

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

powered by weblate
2021-01-30 20:49:26 +01:00
Maarten van den Berg
d586406c79 Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3940 of 3940 strings)

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

powered by weblate
2021-01-29 12:23:33 +01:00
Maarten van den Berg
e214c8cb95 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3940 of 3940 strings)

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

powered by weblate
2021-01-29 12:23:31 +01:00
Raphael Michel
81f2b9db30 Fix typo in docstring 2021-01-29 10:32:35 +01:00
Raphael Michel
04a6ed20b9 Bump to 3.16.0.dev0 2021-01-29 10:14:45 +01:00
Raphael Michel
d745bcf2c4 Bump to 3.15.0 2021-01-29 10:14:45 +01:00
Raphael Michel
a1bfe05879 Correctly pass query string when redirecting to sudo page 2021-01-28 22:22:26 +01:00
Raphael Michel
f156299cb3 Merge pull request #1915 from pretix-translations/weblate-pretix-pretix 2021-01-28 12:58:25 +01:00
pretix Translation Platform
023b1535d4 Fix corrupt file 2021-01-28 12:53:18 +01:00
Raphael Michel
ec97dae695 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3934 of 3934 strings)

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

powered by weblate
2021-01-28 12:49:48 +01:00
Raphael Michel
f184ca1918 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3934 of 3934 strings)

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

powered by weblate
2021-01-28 12:49:48 +01:00
Jaakko Rinta-Filppula
7f71ae6e4b Translated on translate.pretix.eu (Finnish)
Currently translated at 18.3% (721 of 3934 strings)

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

powered by weblate
2021-01-28 12:49:47 +01:00
Jaakko Rinta-Filppula
84bafd94d5 Translated on translate.pretix.eu (Finnish)
Currently translated at 18.2% (713 of 3909 strings)

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

powered by weblate
2021-01-28 12:49:46 +01:00
Raphael Michel
ac7502b0a2 Limit batch size in bulk voucher creation (avoid problems with MySQL's max_packet_size) 2021-01-28 12:43:26 +01:00
Raphael Michel
3c85591568 Fix typos 2021-01-28 10:41:40 +01:00
Raphael Michel
2787935fc6 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2021-01-27 18:45:35 +01:00
Raphael Michel
6d432cf824 Bank transfer: Allow to add IBAN blocklist for refunds 2021-01-27 18:44:20 +01:00
Raphael Michel
e09853c6c6 SubEvent editing: Pass copy_from to plugins 2021-01-27 18:22:36 +01:00
Raphael Michel
418c9196ba Order list: Sort by cancellation request time if filtered for requested cancellations 2021-01-27 12:37:54 +01:00
Raphael Michel
a949fd7fdc Bank transfer: Change order of variables in export 2021-01-27 11:09:07 +01:00
Raphael Michel
f9b834b798 Bank transfer: Duplicate payments are allowed if part of the same import 2021-01-27 10:52:20 +01:00
Raphael Michel
0747f5b8b8 Freshen up layout of refund choice page 2021-01-27 10:48:40 +01:00
Raphael Michel
33b34f31d1 Add BasePaymentProvider.payment_control_render_short and use it on refund page 2021-01-27 10:34:59 +01:00
Raphael Michel
f93c780e6a Add context to "to" translation 2021-01-27 10:05:31 +01:00
Raphael Michel
9722e76e5f Bank transfer refund: Allow to enter BIC 2021-01-27 10:04:31 +01:00
Raphael Michel
e33d15429e ResendLinkView: Change text and logic of rate limiting 2021-01-26 16:52:08 +01:00
Raphael Michel
41c69aaa2a Allow to create refunds without a payment (#1914)
Co-authored-by: Martin Gross <gross@rami.io>
2021-01-26 10:53:59 +01:00
pretix translation bot
07ed7526c0 Translations update from Weblate (#1913)
Co-authored-by: Jaakko Rinta-Filppula <jaakko@r-f.fi>
2021-01-26 10:53:45 +01:00
Raphael Michel
1043824853 Add context to ambigous string 2021-01-25 12:40:10 +01:00
Martin Gross
a99a254f5c Add missing logentry-message for denied password reset 2021-01-25 11:48:09 +01:00
Raphael Michel
0429a0f811 Hide DEBUG log from asyncio 2021-01-25 10:40:20 +01:00
Raphael Michel
c2ba312bad Show local time zone of visitor in more places 2021-01-24 22:43:01 +01:00
Raphael Michel
a3ff3cda12 Bank transfer: Freshen up export templates a little 2021-01-24 22:05:18 +01:00
Raphael Michel
aeba2a1e26 Add metrics on celery queue length 2021-01-23 23:49:58 +01:00
Raphael Michel
e57291914c Item list: Add more icons 2021-01-22 15:35:26 +01:00
Raphael Michel
7165cc4c3b Show ID of items and variations in backend 2021-01-22 14:48:32 +01:00
Raphael Michel
fa5f33d3c6 Revert accidental change 2021-01-22 14:44:38 +01:00
Richard Schreiber
c8df9c187e Updated docs on how to setup Google Analytics (Universal or GA4) for cross-domain tracking when using pretix-widget (#1910) 2021-01-20 18:14:45 +01:00
Raphael Michel
35270e7032 Allow to change order of refund list 2021-01-20 18:10:40 +01:00
Raphael Michel
898ae3e2bc Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2021-01-20 17:42:16 +01:00
Raphael Michel
76d0c7be3a Fix a typo 2021-01-20 17:41:43 +01:00
Raphael Michel
793832402c Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2021-01-20 17:33:17 +01:00
Raphael Michel
f6a500cd75 Fix isort issue 2021-01-20 17:27:38 +01:00
Raphael Michel
7a8f90478a CartAdd with subevents: Useful redirect in error case 2021-01-20 17:26:47 +01:00
Raphael Michel
6ea4315beb Subevent bulk creation: Allow to auto-generate time slots 2021-01-20 17:19:01 +01:00
Raphael Michel
f3de5d5c96 Lazy-format placeholders in DateField and TimeField 2021-01-20 17:19:00 +01:00
Raphael Michel
fdc555f74f Merge pull request #1911 from pretix-translations/weblate-pretix-pretix 2021-01-20 17:12:16 +01:00
Jaakko Rinta-Filppula
2505389e61 Translated on translate.pretix.eu (Finnish)
Currently translated at 63.3% (81 of 128 strings)

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

powered by weblate
2021-01-20 17:10:46 +01:00
Jaakko Rinta-Filppula
da38396191 Translated on translate.pretix.eu (Finnish)
Currently translated at 17.8% (695 of 3909 strings)

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

powered by weblate
2021-01-20 17:10:46 +01:00
Jaakko Rinta-Filppula
2abe744bdd Translated on translate.pretix.eu (Finnish)
Currently translated at 17.4% (682 of 3909 strings)

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

powered by weblate
2021-01-20 17:10:46 +01:00
Jaakko Rinta-Filppula
ce79bfb242 Translated on translate.pretix.eu (Finnish)
Currently translated at 17.1% (670 of 3909 strings)

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

powered by weblate
2021-01-20 17:10:46 +01:00
Ayan Ginet
748cfa3487 Documentation typo fix (#1908) 2021-01-20 17:10:40 +01:00
Raphael Michel
eb80cf248e Fix widget tests 2021-01-20 13:16:38 +01:00
Raphael Michel
65e3efa5a3 API: Clarify session validity codepaths 2021-01-20 12:37:34 +01:00
Raphael Michel
3388c3ab09 Add file upload to security profiles 2021-01-20 12:37:29 +01:00
Raphael Michel
65ff065f02 Widget: Show event name and description on level 2 in org > event > date navigation 2021-01-19 16:41:18 +01:00
Raphael Michel
0f30958937 Fix copy-paste error 2021-01-18 15:02:30 +01:00
Raphael Michel
5cef80d58c Subevent creation: Pre-fill name and location from event 2021-01-18 13:07:07 +01:00
Raphael Michel
19c328b6e7 Revert usage of NumberField for geo_lat/geo_lon, causes trouble with German locale 2021-01-18 12:47:40 +01:00
Raphael Michel
fc6b644587 End infinite link tree on organizer calendar pages 2021-01-18 11:13:27 +01:00
Raphael Michel
190ffe8d24 Bank transfer: Move discard button to other end 2021-01-15 12:25:27 +01:00
Raphael Michel
18eedd8a5f Order cancellation: Allow to set step size for fee amount 2021-01-15 12:18:51 +01:00
Raphael Michel
00667aff11 Advanced order search: Allow to search by paid amount 2021-01-15 11:39:28 +01:00
Raphael Michel
f1cd46f6dc Add new field OrderRefund.comment 2021-01-15 11:25:09 +01:00
Raphael Michel
674d7673ce OrderTaxListReport: Fix date handling error 2021-01-15 10:16:01 +01:00
Raphael Michel
71800074ca Bump sepaxml version 2021-01-15 09:40:09 +01:00
Raphael Michel
a7b331a9b0 Bank transfer: Fix mismatch if the reference contains the code twice 2021-01-14 17:49:31 +01:00
Raphael Michel
1d541df381 Bank transfer: Find order codes even if there's a suffix behind them 2021-01-14 16:19:01 +01:00
Raphael Michel
32d32d68d9 Bank transfer: Fix possible importer issue with special regex characters in event slug 2021-01-14 16:13:43 +01:00
Raphael Michel
5375f6aec1 rich text truelinks: Excape - in regex correctly 2021-01-14 13:22:40 +01:00
alice
99f3360c44 typo in banktransfer import filter 2021-01-13 18:15:41 +01:00
Raphael Michel
d391312aab API: Allow to modify order position information (#1904) 2021-01-13 14:18:58 +01:00
Raphael Michel
70bf422537 Do not allow slugs to end with a dot 2021-01-13 11:55:24 +01:00
Raphael Michel
86932e8a19 Merge pull request #1896 from pretix-translations/weblate-pretix-pretix 2021-01-13 10:41:36 +01:00
Maarten van den Berg
2d9bf5ecb9 Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3909 of 3909 strings)

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

powered by weblate
2021-01-13 06:00:11 +01:00
Maarten van den Berg
c4e8da8ea4 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3909 of 3909 strings)

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

powered by weblate
2021-01-13 06:00:10 +01:00
Li Thomas
715fdadf95 Translated on translate.pretix.eu (Chinese (Simplified))
Currently translated at 78.6% (3074 of 3909 strings)

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

powered by weblate
2021-01-12 17:32:19 +01:00
Jaakko Rinta-Filppula
1b53d74aa9 Translated on translate.pretix.eu (Finnish)
Currently translated at 17.1% (669 of 3909 strings)

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

powered by weblate
2021-01-12 17:32:19 +01:00
Jaakko Rinta-Filppula
66621aee6e Translated on translate.pretix.eu (Finnish)
Currently translated at 63.3% (81 of 128 strings)

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

powered by weblate
2021-01-12 17:32:19 +01:00
Jaakko Rinta-Filppula
18333041bb Translated on translate.pretix.eu (Finnish)
Currently translated at 16.9% (662 of 3909 strings)

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

powered by weblate
2021-01-12 17:32:19 +01:00
Jaakko Rinta-Filppula
b4badaa472 Translated on translate.pretix.eu (Finnish)
Currently translated at 16.8% (655 of 3909 strings)

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

powered by weblate
2021-01-12 17:32:19 +01:00
Raphael Michel
a856f29426 Rich text: Do not call link text heuristic for mailto: 2021-01-12 17:31:58 +01:00
Raphael Michel
1dab5149d4 Add frontpage_text to widget tests 2021-01-12 13:00:14 +01:00
Raphael Michel
4e870b7366 Question form: Do not show "This field is required" twice 2021-01-12 12:57:00 +01:00
Martin Gross
a8cbb06bb0 Fixing all-time favorite pretix/prefix typo 2021-01-12 12:44:51 +01:00
Raphael Michel
0be2043ded Redirect to single-exporter page after exporter failure 2021-01-12 12:42:37 +01:00
Raphael Michel
2554c7f5fc Fix error 405 in export form validation 2021-01-12 12:38:36 +01:00
Raphael Michel
3912ceb79d Fix widget error 2021-01-12 12:31:32 +01:00
Raphael Michel
593fc69d0c Widget: Include frontpage_text, but only after navigation 2021-01-12 11:57:54 +01:00
Raphael Michel
cf3c4d26cb Bank transfer: Allow to refund payments without BIC 2021-01-08 23:21:49 +01:00
Raphael Michel
bc8358cd97 Bank transfer: Recognize BICs in MT940 2021-01-08 23:21:49 +01:00
Benjamin Hättasch
e2461ab475 Add option to export multiple choice answers in orderlists grouped (#1898) 2021-01-08 21:36:49 +01:00
Raphael Michel
f97c97e661 Fix UX quirk in phone number field triggered by American numbers 2021-01-08 15:18:56 +01:00
Raphael Michel
1325cf1e7c Fix typo 2021-01-07 19:00:54 +01:00
Raphael Michel
ba8ea0e4d4 Resend links: use order.open URL 2021-01-07 18:10:41 +01:00
Raphael Michel
1c769f2876 Order cancel: Show refund methods 2021-01-07 17:55:30 +01:00
Raphael Michel
2dee222482 Payment plugin API: Add payment_presale_render 2021-01-07 17:55:27 +01:00
Raphael Michel
d132cd27f3 PayPal: Do not allow refund if payment is older than 180 days 2021-01-07 17:11:03 +01:00
Raphael Michel
9a2a4bedeb Docs: Add missing placeholders 2021-01-07 15:43:34 +01:00
Raphael Michel
779cefeaad Order codes: Remove character '8' from charset 2021-01-07 15:36:05 +01:00
Raphael Michel
b36feb229f Merge pull request #1901 from pretix/api-upload 2021-01-07 13:00:57 +01:00
Raphael Michel
2e5861958d API: Fix CSS generation after change in event settings 2021-01-07 12:41:41 +01:00
Raphael Michel
01c3b08583 API: Allow to answer file upload questions during ticket redemption 2021-01-07 11:18:23 +01:00
Raphael Michel
5b81507600 API: Allow to use uploaded files in settings fields 2021-01-07 11:18:23 +01:00
Raphael Michel
75e100f108 API: Allow to set product pictures 2021-01-07 11:18:23 +01:00
Raphael Michel
8b08b43e77 API: File upload infrastructure 2021-01-07 11:18:23 +01:00
Raphael Michel
9d70fd675c Badges: Use meaningful filename for downloaded files 2021-01-07 10:35:02 +01:00
Raphael Michel
72504cd53a Context processor: Fix crash if plugin returns none 2021-01-07 10:29:29 +01:00
Raphael Michel
9056826b68 Waiting list: Correct status in backend 2021-01-07 10:29:22 +01:00
Raphael Michel
ecf05b2392 Waiting list: Show warning if event is not live 2021-01-07 10:25:00 +01:00
Raphael Michel
4aa9f073b3 Waiting list: Do not send vouchers for unavailable items 2021-01-07 10:17:45 +01:00
Raphael Michel
19c2b8d89d Check-in rules: Fall back to date_from if date_to is unset 2021-01-07 10:17:29 +01:00
Raphael Michel
5e355b4005 Fix duplicate listing of fonts in event settings 2021-01-05 09:23:00 +01:00
Raphael Michel
746c140cdb Fix crash on failed geocoding 2021-01-04 16:48:32 +01:00
Raphael Michel
be413693ce Validate range of geo_lat/geo_lon values 2021-01-04 10:35:42 +01:00
Raphael Michel
6cf1074b8d Fix geocoding with opencage 2021-01-04 10:35:41 +01:00
Raphael Michel
504067f325 Fix tests failing in 2021 2021-01-01 21:29:51 +01:00
Maico Timmerman
b1cffe9f72 Shredder: Only force download for tax-relevant data (#1801) 2021-01-01 20:20:42 +01:00
Maico Timmerman
c0dd631774 Show "live issues" when event is already live (#1889) 2021-01-01 20:14:04 +01:00
Raphael Michel
66cd63036c Merge pull request #1894 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2021-01-01 20:03:57 +01:00
albert
29a45d3ee4 Translated on translate.pretix.eu (Catalan)
Currently translated at 51.0% (1995 of 3909 strings)

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

powered by weblate
2020-12-30 13:11:22 +01:00
Martin Gross
23aba9b5ef Move Mapquest-Geocoding to HTTPS 2020-12-30 13:11:10 +01:00
Raphael Michel
454f0f6fc8 Create log entry upon order email confirmation 2020-12-23 17:52:20 +01:00
Raphael Michel
002ff38fba Fix crash in add-on form (PRETIXEU-3GV) 2020-12-23 17:46:52 +01:00
luto
dc8bd59715 Add convenience redirect …/event/(org)/ => …/organizer/(org)/ (#1893) 2020-12-23 16:50:41 +01:00
Raphael Michel
56a2da08df Merge pull request #1891 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-12-23 16:31:41 +01:00
Maarten van den Berg
4762d6818f Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3909 of 3909 strings)

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

powered by weblate
2020-12-23 16:31:29 +01:00
Richard Schreiber
e99e91d20f Show event’s date and location in widget if event is subevent (#1892) 2020-12-23 16:31:24 +01:00
0xflotus
9fee2d0fbc Docs: Enabling Syntax Highlighting (#1890) 2020-12-23 10:24:39 +01:00
Raphael Michel
3f30ddc9ab Fix #1888 -- UnknownLocaleError if locale is set 2020-12-22 13:14:56 +01:00
Raphael Michel
641a848f30 Bump to 3.15.0.dev0 2020-12-22 12:40:04 +01:00
Raphael Michel
a582322847 Bump to 3.14.0 2020-12-22 12:39:31 +01:00
Raphael Michel
a7ec7491ec Merge pull request #1887 from pretix-translations/weblate-pretix-pretix 2020-12-22 12:38:16 +01:00
Raphael Michel
90ae8860dd Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3909 of 3909 strings)

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

powered by weblate
2020-12-22 12:38:06 +01:00
Raphael Michel
00ca75e119 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3909 of 3909 strings)

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

powered by weblate
2020-12-22 12:38:06 +01:00
Raphael Michel
455fb2e560 Make fake e-mail field look more consistent 2020-12-22 12:37:49 +01:00
Raphael Michel
1ec4c524f8 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-12-22 12:06:11 +01:00
Raphael Michel
75b9b04c65 Merge pull request #1885 from pretix-translations/weblate-pretix-pretix 2020-12-22 12:05:34 +01:00
albert
bf0a9675f4 Translated on translate.pretix.eu (Catalan)
Currently translated at 49.3% (1923 of 3900 strings)

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

powered by weblate
2020-12-22 11:46:56 +01:00
Maarten van den Berg
853877f2da Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3900 of 3900 strings)

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

powered by weblate
2020-12-22 11:46:55 +01:00
Maarten van den Berg
2e44900c43 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3900 of 3900 strings)

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

powered by weblate
2020-12-22 11:46:55 +01:00
albert
c5085bb46e Translated on translate.pretix.eu (Catalan)
Currently translated at 49.0% (1911 of 3900 strings)

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

powered by weblate
2020-12-22 11:46:55 +01:00
albert
da859b9980 Translated on translate.pretix.eu (Catalan)
Currently translated at 47.4% (1849 of 3900 strings)

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

powered by weblate
2020-12-22 11:46:55 +01:00
albert
b6f30f6996 Translated on translate.pretix.eu (Catalan)
Currently translated at 4.7% (6 of 128 strings)

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

powered by weblate
2020-12-22 11:46:55 +01:00
albert
9fde378eac Translated on translate.pretix.eu (Catalan)
Currently translated at 46.3% (1807 of 3900 strings)

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

powered by weblate
2020-12-22 11:46:55 +01:00
Raphael Michel
52e9525f64 Fix isort of test 2020-12-22 11:46:45 +01:00
Raphael Michel
80aeeed855 Fix bug in 8ed41a127 2020-12-22 11:33:37 +01:00
Raphael Michel
d207514c9a Change migration graph to be compatible with backports 2020-12-22 11:33:37 +01:00
Raphael Michel
1286e53b85 Reduce lifetime of export files 2020-12-22 10:48:06 +01:00
Raphael Michel
7c0df5b755 [SECURITY] Rate limiting for login 2020-12-22 10:47:47 +01:00
Raphael Michel
8889d8441e [SECURITY] Rate limiting for password change form 2020-12-22 10:47:47 +01:00
Raphael Michel
c60a25f2bc [SECURITY] Bind relevant cached file downloads to the current session 2020-12-22 10:47:47 +01:00
Raphael Michel
a3dd015c23 [SECURITY] Fix unvalidated redirect 2020-12-22 10:47:47 +01:00
Raphael Michel
736ecbd7b6 [SECURITY] Prevent phishing through misleading link titles 2020-12-22 10:47:47 +01:00
Raphael Michel
8ed41a1276 Add csp_additional_header config option 2020-12-21 19:16:09 +01:00
Raphael Michel
06643232cf Fix #1420 -- Hide "shop not available" from log files 2020-12-19 20:04:48 +01:00
Raphael Michel
90399d2567 Remove subevent=None from suggested voucher URLs 2020-12-19 19:55:28 +01:00
Raphael Michel
609203196b SMTP settings: Timeout during testing 2020-12-19 19:46:23 +01:00
Raphael Michel
070b871254 Bank transfer import: Auto-detect valid split payments 2020-12-19 16:55:06 +01:00
Raphael Michel
cbadb2c395 Bank transfer API: Block concurrent jobs 2020-12-19 16:27:43 +01:00
Raphael Michel
0e9951f964 Backend order detail page: Show pending sum 2020-12-19 16:25:32 +01:00
Richard Schreiber
6afb954b93 Fix #1879 -- Do not add a tab’s hash/id to location.hash if it is inside a .panel (#1881)
Co-authored-by: Raphael Michel <michel@rami.io>
2020-12-18 09:33:27 +01:00
Richard Schreiber
bdf1fc2c23 Added combined radiob uttons for <name>_asked and <name>_required fields (#1880) 2020-12-18 09:33:07 +01:00
Raphael Michel
9c0c8a95fa Merge pull request #1883 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-12-18 09:32:50 +01:00
albert
356a2dc9c5 Translated on translate.pretix.eu (Catalan)
Currently translated at 43.0% (1678 of 3900 strings)

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

powered by weblate
2020-12-18 08:00:11 +01:00
Raphael Michel
4f5a9284ca Merge pull request #1878 from pretix-translations/weblate-pretix-pretix 2020-12-17 16:07:18 +01:00
albert
130b06d26b Translated on translate.pretix.eu (Catalan)
Currently translated at 41.8% (1629 of 3900 strings)

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

powered by weblate
2020-12-16 12:49:37 +01:00
albert
ab4dd9b8de Translated on translate.pretix.eu (Catalan)
Currently translated at 40.9% (1596 of 3900 strings)

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

powered by weblate
2020-12-16 12:49:37 +01:00
albert
bb6b8bd8bb Translated on translate.pretix.eu (Catalan)
Currently translated at 3.9% (5 of 128 strings)

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

powered by weblate
2020-12-16 12:49:37 +01:00
albert
2aeceeed08 Translated on translate.pretix.eu (Catalan)
Currently translated at 40.9% (1595 of 3900 strings)

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

powered by weblate
2020-12-16 12:49:37 +01:00
Raphael Michel
39223f0f65 Docker setup: Allow to configure number of worker processes 2020-12-16 12:49:13 +01:00
Raphael Michel
33ba4daadb Docker setup: Tune some nginx parameters 2020-12-16 12:42:49 +01:00
Raphael Michel
1f9adcce6e Always use "cleaned" LANGUAGE_CODE in templates 2020-12-16 10:46:47 +01:00
Raphael Michel
4d36676cf8 Allow to filter for partially paid orders 2020-12-15 16:06:59 +01:00
Raphael Michel
821cb54ad0 Backend order list: Show sales channel 2020-12-15 15:53:21 +01:00
Raphael Michel
a40951060f Backend order list: Show payment amount 2020-12-15 15:44:38 +01:00
Raphael Michel
c6a98fad5a Fix involunatery CSS change 2020-12-15 14:52:50 +01:00
Raphael Michel
d3a0405faa Fix another bug in phone_format template tag 2020-12-15 09:56:18 +01:00
Raphael Michel
664bb9a65b Frontend order details: Do not show empty "name" line 2020-12-15 09:56:18 +01:00
Raphael Michel
06d8464998 Merge pull request #1877 from pretix-translations/weblate-pretix-pretix 2020-12-15 09:53:41 +01:00
Raphael Michel
c9b20d2cf5 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3900 of 3900 strings)

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

powered by weblate
2020-12-15 09:51:37 +01:00
Raphael Michel
a198635865 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3900 of 3900 strings)

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

powered by weblate
2020-12-15 09:51:35 +01:00
Raphael Michel
4e26df5752 Fix phone number display issue 2020-12-15 09:38:26 +01:00
Raphael Michel
5caa874263 Merge pull request #1876 from pretix-translations/weblate-pretix-pretix
Co-authored-by: albert <albert.serra.monner@gmail.com>
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
2020-12-15 09:30:30 +01:00
Raphael Michel
05939537dd Update django.po 2020-12-15 09:28:23 +01:00
Raphael Michel
0d29f8624f Merge branch 'master' into weblate-pretix-pretix 2020-12-15 09:24:47 +01:00
Raphael Michel
0d8db8266d Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-12-15 09:22:57 +01:00
albert
09be2c1199 Translated on translate.pretix.eu (Catalan)
Currently translated at 3.1% (4 of 128 strings)

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

powered by weblate
2020-12-15 09:20:50 +01:00
albert
da8ecb6e6e Translated on translate.pretix.eu (Catalan)
Currently translated at 36.2% (1397 of 3859 strings)

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

powered by weblate
2020-12-15 09:20:50 +01:00
Raphael Michel
4240ad43d0 Add order-level telephone field to core (#1872)
Co-authored-by: Martin Gross <gross@rami.io>
2020-12-15 09:20:44 +01:00
Raphael Michel
c47e41ac8a Merge pull request #1874 from pretix/perf2020 2020-12-14 17:02:01 +01:00
Raphael Michel
04bfa63a5e Add region setting to supplement localization (#1875) 2020-12-14 13:15:38 +01:00
Raphael Michel
e311341d01 Extend .dockerignore 2020-12-14 13:11:19 +01:00
Raphael Michel
1f21d1420c Fix import order 2020-12-14 11:45:23 +01:00
Raphael Michel
5c1d637637 Merge pull request #1873 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-12-14 11:36:50 +01:00
Ondřej Sokol
ecc72d54ad Translated on translate.pretix.eu (Czech)
Currently translated at 28.9% (37 of 128 strings)

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

powered by weblate
2020-12-14 11:00:17 +01:00
Ondřej Sokol
ff8a3ea1c3 Translated on translate.pretix.eu (Czech)
Currently translated at 3.5% (134 of 3859 strings)

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

powered by weblate
2020-12-14 11:00:16 +01:00
albert
924bad3484 Translated on translate.pretix.eu (Catalan)
Currently translated at 32.2% (1241 of 3859 strings)

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

powered by weblate
2020-12-13 19:16:55 +01:00
albert
808df7a982 Translated on translate.pretix.eu (Catalan)
Currently translated at 2.3% (3 of 128 strings)

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

powered by weblate
2020-12-13 19:16:55 +01:00
albert
7f196ef6fe Translated on translate.pretix.eu (Catalan)
Currently translated at 30.3% (1171 of 3859 strings)

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

powered by weblate
2020-12-13 19:16:55 +01:00
albert
44ef9b608a Translated on translate.pretix.eu (Catalan)
Currently translated at 27.5% (1062 of 3859 strings)

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

powered by weblate
2020-12-13 19:16:55 +01:00
Raphael Michel
62b1aec3b0 Save a pointless query on non-series events 2020-12-13 16:31:17 +01:00
Raphael Michel
571fef4ed8 Re-structure some querying on cart and order pages to reduce load 2020-12-13 16:31:17 +01:00
Raphael Michel
5308099d84 Fix 5-second quota caching 2020-12-13 15:50:02 +01:00
Raphael Michel
a5e41aae50 Add MapQuest as additional geocoding provider 2020-12-12 15:13:56 +01:00
Raphael Michel
54e4ad1a1c Merge pull request #1871 from pretix-translations/weblate-pretix-pretix 2020-12-11 18:47:15 +01:00
Maarten van den Berg
b6e4163c2b Translated on translate.pretix.eu (Dutch)
Currently translated at 99.2% (3830 of 3859 strings)

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

powered by weblate
2020-12-11 17:50:38 +01:00
Maarten van den Berg
1aa1583eae Translated on translate.pretix.eu (Dutch)
Currently translated at 98.9% (3817 of 3859 strings)

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

powered by weblate
2020-12-11 17:50:38 +01:00
Raphael Michel
fc210cf06d Add sanity check to tax calculation 2020-12-11 17:46:42 +01:00
Raphael Michel
3459f3e4c4 Tax rules: Allow per-country text on invoices 2020-12-11 17:45:36 +01:00
Raphael Michel
903a7f122d Tax rule editor: Allow to reorder lines 2020-12-11 16:24:05 +01:00
Raphael Michel
246d150511 Tax rule editor: Show edit history 2020-12-11 15:38:05 +01:00
Raphael Michel
2cd5094393 Tax rule editor: Use cacehd countries 2020-12-11 15:19:34 +01:00
Raphael Michel
a665836a60 Add a custom text field for every attendee in the question step 2020-12-10 18:19:51 +01:00
Raphael Michel
e7d2d0ddab Adjust tests broken by 0a55fdbc4 2020-12-10 18:10:45 +01:00
Raphael Michel
1d722da5af Fix tax calculation issue 2020-12-10 18:04:56 +01:00
Raphael Michel
90475e4159 Fix another bug introduced in last commit 2020-12-10 17:38:43 +01:00
Raphael Michel
3690dba73b Fix bug in widget introduced by last commit 2020-12-10 17:38:11 +01:00
Raphael Michel
0a55fdbc49 Widget: Do not show "buy now" if no availability state is known 2020-12-10 17:07:24 +01:00
Martin Gross
eac32c25ba Fix advanced order search for "order placed before" 2020-12-10 16:46:43 +01:00
Raphael Michel
c2345d200a Add option to hide "payment pending" bubble on ticket pages 2020-12-09 17:05:04 +01:00
Raphael Michel
663fd8a57a Move settings field for invoice address cancellation to correct tab 2020-12-09 16:53:00 +01:00
Raphael Michel
a204302910 Disable all debug toolbar panels by default (cuts down 80% of request time locally) 2020-12-09 16:04:45 +01:00
Raphael Michel
13e464bcf1 Fix another export issue 2020-12-08 22:16:31 +01:00
Raphael Michel
8b2b98c128 Fix handling of empty values in new exporter 2020-12-08 22:09:29 +01:00
Raphael Michel
a5f806d975 Tax list exporter: Add sheets with reports by country and company 2020-12-08 22:01:52 +01:00
Raphael Michel
b51bd2118e Do not create session cookie on first page view 2020-12-07 22:29:05 +01:00
Martin Gross
089938c3ee Do not pass organizer settings API calls through the event's validate_settings() 2020-12-07 16:46:19 +01:00
Raphael Michel
574fe9094c API: Fix missing context 2020-12-04 17:51:28 +01:00
Raphael Michel
6fdd32de6a Check-in list: Fix secondary sorting by date 2020-12-04 13:03:38 +01:00
Martin Gross
b3e95f54dd Add option to limit events to specific sales channels (#1867) 2020-12-03 17:10:54 +01:00
Raphael Michel
55d8639ecc REST API: Add organizer-level settings (#1866)
Co-authored-by: Martin Gross <gross@rami.io>
2020-12-03 15:19:11 +01:00
Richard Schreiber
978130551a Apply EXIF-orientation data from source image to thumbnail with PIL.ImageOps.exif_transpose (#1869) 2020-12-03 10:55:18 +01:00
Raphael Michel
a452bf816c Show emails to order positions in email history 2020-12-02 16:14:46 +01:00
Raphael Michel
99c3981e2d Gift card API: Allow to inspect transactions (#1868) 2020-12-02 16:10:05 +01:00
Raphael Michel
87a514ca8b PDFs: Fix country name evaluation 2020-12-02 14:26:50 +01:00
Richard Schreiber
937b967259 Added export of WaitingList for single and mutliple events with filter for voucher-status (#1864)
* added export of WaitingList for single and mutliple events

* removed unnecessary empty line

Co-authored-by: Raphael Michel <michel@rami.io>

* used better conversion from list of tuples to dict

Co-authored-by: Raphael Michel <michel@rami.io>

* added missing 'subevent' in select_related

Co-authored-by: Raphael Michel <michel@rami.io>

* removed prefetch_related from queryset as it is not needed

* use name for subevent, added 2 cols for start and end date

Co-authored-by: Raphael Michel <michel@rami.io>
2020-12-01 17:49:54 +01:00
Raphael Michel
242bfc0023 CartPosition API: Fix setting a custom cart ID 2020-12-01 17:13:09 +01:00
Raphael Michel
eed309636f CartPosition API: Allow to buy multiple seats despite distance settings 2020-12-01 17:13:09 +01:00
Martin Gross
0944929818 Add custom invoice address field to Orderdata Export 2020-12-01 14:11:53 +01:00
Martin Gross
2592b8b221 Add Invoice and Attendee address mergefields for all address segments (#1865) 2020-12-01 13:17:00 +01:00
pajowu
fcdd852860 Remove last usage of blacklist in comment (#1863) 2020-11-30 22:43:36 +01:00
Felix Rindt
f43585bf36 Payment term on weekdays should not be required (#1862) 2020-11-30 11:52:21 +01:00
Raphael Michel
5a034f1339 Exclude rrule from locale files 2020-11-27 18:34:08 +01:00
Raphael Michel
0eb5b73502 Fix typo 2020-11-27 18:25:36 +01:00
Raphael Michel
41e878fabb Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-11-27 16:24:17 +01:00
Raphael Michel
93a7c5df09 Allow plugins to use django.contrib.postgres 2020-11-27 16:23:39 +01:00
Richard Schreiber
c71c78cf69 Added Person-Name-Scheme for showing/entering academic degree after the name (e.g. <Name>, MA) (#1861) 2020-11-27 16:08:34 +01:00
Raphael Michel
66af5973ec Add min/max validation for date, datetime, and number questions (#1858) 2020-11-27 11:02:07 +01:00
Raphael Michel
921b28f8d4 Move front page text above date selection (#1859)
Co-authored-by: Martin Gross <gross@rami.io>
2020-11-27 10:38:54 +01:00
Raphael Michel
0aa5df8a17 Merge pull request #1860 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-11-27 10:38:44 +01:00
Svyatoslav
65f6da8d9e Translated on translate.pretix.eu (Latvian)
Currently translated at 28.5% (1097 of 3850 strings)

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

powered by weblate
2020-11-27 05:00:13 +01:00
Richard Schreiber
827afd6d39 Fix preview of subevent repetition rule with UNTIL (#1857) 2020-11-26 17:01:29 +01:00
Raphael Michel
97561819e2 Merge pull request #1856 from pretix-translations/weblate-pretix-pretix 2020-11-26 17:00:57 +01:00
Raphael Michel
d02e8b1dcf Orders API: Consistently use "send_email" instead of "send_mail" 2020-11-26 16:59:57 +01:00
Raphael Michel
7ad46addee Order API: Add send_email parameter to creating payments 2020-11-26 16:57:52 +01:00
Raphael Michel
956b6f43e4 Fix typo 2020-11-25 18:03:21 +01:00
Raphael Michel
cc493968a1 Do not call banner "banner", ad-blocks interfere… 2020-11-25 18:02:58 +01:00
Raphael Michel
fd6fb52a11 Widget: Do not deny access to CSS of disabled shop 2020-11-25 12:39:14 +01:00
Raphael Michel
ef11084613 Auto event selection: Do not suggest events without permission 2020-11-25 11:39:14 +01:00
Raphael Michel
2a85f327fd Fix wrong default value during event creation 2020-11-25 09:08:48 +01:00
Raphael Michel
bd9d8ce0ad Device profiles: Fix missing listed URL for pretixPOS 2020-11-24 16:47:55 +01:00
Martin Gross
d71db5a8ad Fix self-service refund with 0 cancellation fee 2020-11-24 16:10:40 +01:00
Raphael Michel
755d1b5692 Bump to 3.14.0.dev0 2020-11-24 11:59:39 +01:00
Raphael Michel
19e5843d99 Bump to 3.13.0 2020-11-24 11:53:08 +01:00
Raphael Michel
4ede99c04b Merge pull request #1855 from pretix-translations/weblate-pretix-pretix 2020-11-24 11:52:33 +01:00
Raphael Michel
0fad2ab728 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3850 of 3850 strings)

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

powered by weblate
2020-11-24 11:52:31 +01:00
Raphael Michel
2b9461e847 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3850 of 3850 strings)

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

powered by weblate
2020-11-24 11:52:31 +01:00
Raphael Michel
987802335b Add Merchandise to German word list 2020-11-24 11:52:18 +01:00
Raphael Michel
eb7e272273 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3850 of 3850 strings)

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

powered by weblate
2020-11-24 11:49:39 +01:00
Raphael Michel
2761419952 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3850 of 3850 strings)

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

powered by weblate
2020-11-24 11:49:38 +01:00
Raphael Michel
4b422571ad Cloning events: Copy *relative* admission time 2020-11-24 10:55:55 +01:00
Richard Schreiber
c340fd9d97 Fix iCal export for full-day events (DTEND is non-inclusive) (#1854) 2020-11-24 10:52:58 +01:00
Raphael Michel
e5d554a7b3 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-11-24 10:10:36 +01:00
Martin Gross
076aa097f6 Fix #1793 -- Remove hidden URLs from EventSettingsStore and avoid saving them (#1853) 2020-11-23 17:15:22 +01:00
Raphael Michel
97b9c1029a Avoid the word "simple" 2020-11-23 16:37:26 +01:00
Raphael Michel
2ebd040a7c Item form: Fancy radio buttons for has_Variations and admission 2020-11-23 15:25:48 +01:00
Raphael Michel
14a66ff80c Fix #1356 -- Allow to override config file settings with env vars 2020-11-23 12:24:08 +01:00
Raphael Michel
76c6bbc321 Merge pull request #1852 from pretix-translations/weblate-pretix-pretix
Co-authored-by: Jaakko Rinta-Filppula <jaakko@r-f.fi>
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Mie Frydensbjerg <mif@aarhus.dk>
Co-authored-by: Maarten van den Berg <maartenberg1@gmail.com>
2020-11-22 14:12:57 +01:00
Raphael Michel
0272e44edd Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3838 of 3838 strings)

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

powered by weblate
2020-11-22 14:11:17 +01:00
Raphael Michel
99d2c40935 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3838 of 3838 strings)

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

powered by weblate
2020-11-22 14:11:17 +01:00
Maarten van den Berg
2720cf5ae1 Translated on translate.pretix.eu (Dutch (informal))
Currently translated at 100.0% (3807 of 3807 strings)

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

powered by weblate
2020-11-22 14:11:17 +01:00
Maarten van den Berg
3e415c2654 Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (3807 of 3807 strings)

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

powered by weblate
2020-11-22 14:11:16 +01:00
Mie Frydensbjerg
6d1ad45908 Translated on translate.pretix.eu (Danish)
Currently translated at 41.8% (1593 of 3807 strings)

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

powered by weblate
2020-11-22 14:11:16 +01:00
Jaakko Rinta-Filppula
5514279868 Translated on translate.pretix.eu (Finnish)
Currently translated at 15.7% (599 of 3807 strings)

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

powered by weblate
2020-11-22 14:11:16 +01:00
Mie Frydensbjerg
868aae0054 Translated on translate.pretix.eu (Danish)
Currently translated at 41.7% (1586 of 3807 strings)

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

powered by weblate
2020-11-22 14:11:16 +01:00
Raphael Michel
55f89b2125 Translated on translate.pretix.eu (German (informal))
Currently translated at 99.9% (3806 of 3807 strings)

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

powered by weblate
2020-11-22 14:11:16 +01:00
Raphael Michel
10e0e9e618 Translated on translate.pretix.eu (German)
Currently translated at 99.9% (3806 of 3807 strings)

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

powered by weblate
2020-11-22 14:11:16 +01:00
Jaakko Rinta-Filppula
1119f90c02 Translated on translate.pretix.eu (Finnish)
Currently translated at 14.7% (560 of 3807 strings)

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

powered by weblate
2020-11-22 14:11:16 +01:00
Jaakko Rinta-Filppula
35108c0e47 Translated on translate.pretix.eu (Finnish)
Currently translated at 13.5% (513 of 3807 strings)

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

powered by weblate
2020-11-22 14:11:16 +01:00
Jaakko Rinta-Filppula
86b722015f Translated on translate.pretix.eu (Finnish)
Currently translated at 13.4% (509 of 3807 strings)

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

powered by weblate
2020-11-22 14:11:16 +01:00
Raphael Michel
54e9a03b9a Fix typo 2020-11-22 14:00:09 +01:00
Raphael Michel
c90365e908 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-11-22 13:49:52 +01:00
Raphael Michel
5c85c69b3d Brexit 2020-11-22 13:46:15 +01:00
Raphael Michel
6d9e1be844 Tax rules: Allow to block countries from making a purchase 2020-11-22 13:46:15 +01:00
Raphael Michel
168a6bae98 Bank transfer: Add optional text to pending payments 2020-11-20 14:10:20 +01:00
Raphael Michel
6c1fa8cf2d Bump version of markdown dependency 2020-11-19 17:17:39 +01:00
Raphael Michel
88be280445 Orders API: Add subevent_before parameter 2020-11-19 17:17:39 +01:00
Martin Gross
6aa3532ee6 Add effective presale_start and presale_end properties (#1851) 2020-11-19 15:04:19 +01:00
Raphael Michel
b8db58b978 Exporter API: Fix "This QueryDict instance is immutable" 2020-11-19 12:30:31 +01:00
Raphael Michel
5a95550075 Exporter API: Fix primary key fields 2020-11-19 11:28:21 +01:00
Raphael Michel
627f601bdb Widget: Fix waiting list for subevents 2020-11-19 11:10:24 +01:00
Raphael Michel
6c03e49090 Check-in list exporter: Fix bug if sorting is not set 2020-11-19 11:10:11 +01:00
Raphael Michel
0d0294a292 Fix test cases 2020-11-18 18:06:11 +01:00
Raphael Michel
d389a2aaa1 Make attendee_name accessible to secret generators 2020-11-18 18:05:57 +01:00
Raphael Michel
f51ec04e05 Pass request when manually editing gift cards 2020-11-18 17:22:24 +01:00
Raphael Michel
023f9eb6e7 Order list export: Optional columns for payment amounts 2020-11-17 22:11:22 +01:00
Raphael Michel
0bd1c3f3af Fix failing tests 2020-11-17 14:23:55 +01:00
Raphael Michel
821599dc1a Add advanced search to order list 2020-11-17 13:24:22 +01:00
Nics
9a65ad0abe Small typo in help text (#1850)
Fix a small typo in the help text of `allow_waitinglist`
2020-11-17 09:42:20 +01:00
Raphael Michel
12cb555917 Fix #1804 -- Admission time not lconed on event copy 2020-11-16 18:16:43 +01:00
Raphael Michel
87656cef4c Fix EventMixin.blocked_seats if no distance is set 2020-11-16 17:30:30 +01:00
Martin Gross
3a67203a0d Force a OCM seat-change if the subevent has changed 2020-11-16 15:00:18 +01:00
Raphael Michel
695a800811 Add seating views to POS device profile 2020-11-13 17:00:34 +01:00
pretix translation bot
e3c820b760 Translations update from Weblate (#1846)
Co-authored-by: Jaakko Rinta-Filppula <jaakko@r-f.fi>
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Mie Frydensbjerg <mif@aarhus.dk>
2020-11-12 09:43:26 +01:00
Raphael Michel
c52bf0be8c Update seating plan schema to support float-sized areas 2020-11-12 09:26:25 +01:00
Raphael Michel
b287f870b1 Add new fields to seating plan schema 2020-11-12 09:02:51 +01:00
Raphael Michel
48f3a157bc Fix seating plan embedded in test suite 2020-11-11 14:40:36 +01:00
julia-luna
62a0dd2541 Add option to include prefix and invoice number in payment reference (#1848) 2020-11-11 14:27:43 +01:00
Raphael Michel
8c63f2159c Update to seating plan schema 2020-11-10 19:38:02 +01:00
Raphael Michel
e5a77dc482 Banktransfer: Show reference when switching payment method to bank transfer 2020-11-10 15:36:56 +01:00
Raphael Michel
bd81d7dced Fix inconsistent German translation 2020-11-10 15:29:19 +01:00
Raphael Michel
23c38a3742 Fix late-night bug in UserNotificationsDisableView 2020-11-10 15:09:09 +01:00
Raphael Michel
6c29fc0117 Remove a last mention of blacklist
Danke luto.
2020-11-10 13:14:49 +01:00
Raphael Michel
eae1fc9a81 Sendmail: Allow to send only to (un)approved 2020-11-10 11:37:38 +01:00
Raphael Michel
2c1195eaa1 Order list: Allow to filter for approved 2020-11-10 11:07:10 +01:00
Raphael Michel
f94e8e5bdc Fix checkboxes for variations with max_order=1 2020-11-10 10:04:15 +01:00
Raphael Michel
20ec388b03 Fix disabling notifications when logged in 2020-11-09 20:05:14 +01:00
Raphael Michel
02278660bc Fix issue in pdf report exporter 2020-11-06 17:38:48 +01:00
Raphael Michel
01b90ded36 Fix TypeError in cancellation self service 2020-11-06 16:33:19 +01:00
Raphael Michel
10b592a1c4 Document new webhooks 2020-11-06 11:50:53 +01:00
Raphael Michel
cfffcf2d1a Fix isort style issue 2020-11-06 11:50:01 +01:00
Raphael Michel
df83682d55 Add webhooks for changes to events and subevents 2020-11-06 11:46:54 +01:00
Raphael Michel
eeb3c1a960 Add support for bulk-webhooks 2020-11-06 11:46:06 +01:00
Raphael Michel
a7565342c0 Add test for appending slashes to URLs in the right situations 2020-11-06 10:49:24 +01:00
Raphael Michel
d03c5ce30c Fix multi-event export in backend 2020-11-06 10:49:11 +01:00
julia-luna
b51108ab22 Confirm disabling all notifications (#1845) 2020-11-05 18:40:53 +01:00
Raphael Michel
d08c811f3a Fix #1780 -- Trigger exports through API (#1839) 2020-11-05 18:30:12 +01:00
Raphael Michel
c757f3e4c7 Do not delete seats when deleting products 2020-11-05 16:37:44 +01:00
julia-luna
5962e4d4ab Add seating statistics in shared reports (#1844) 2020-11-05 12:20:25 +01:00
Raphael Michel
6fd2662956 Allow to change questions in canceled orders in backend 2020-11-05 09:29:05 +01:00
Raphael Michel
259d2cdb27 Fix isort issue 2020-11-04 17:42:56 +01:00
Raphael Michel
04e9c8a226 Copy ItemBundle when cloning events 2020-11-04 12:30:38 +01:00
Raphael Michel
78798ff382 Merge pull request #1843 from pretix/docker-components 2020-11-04 10:23:17 +01:00
Raphael Michel
be1926ff21 Add documentation on new docker features 2020-11-04 09:52:13 +01:00
Raphael Michel
6af5b3fd5e Add option to skip auto migration 2020-11-04 09:48:14 +01:00
Raphael Michel
8989723145 Install django-extensions and ipython to make docker container easier to debug 2020-11-04 09:48:00 +01:00
Raphael Michel
e980b2c255 Allow to run nginx+gunicorn in Docker container 2020-11-04 09:47:48 +01:00
Raphael Michel
cb0023dc3c Update docker container to Python 3.8 2020-11-04 09:46:08 +01:00
Raphael Michel
b4c18c6ea6 Fix inverted logic 2020-11-02 17:58:44 +01:00
Raphael Michel
e07cca9148 External refunds: Processing should not affect order's state if order is canceled 2020-11-02 17:08:53 +01:00
Raphael Michel
031ee647ab External refunds: automatically mark as done if they exactly fix an overpaid order 2020-11-02 17:06:47 +01:00
Raphael Michel
6ca6f9437f Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-11-02 17:00:13 +01:00
Raphael Michel
07ff523ea3 Don't mention subevents in user-facing strings 2020-11-02 16:59:33 +01:00
Raphael Michel
92df47d0c7 Merge pull request #1840 from pretix-translations/weblate-pretix-pretix 2020-11-02 14:28:49 +01:00
Raphael Michel
717c905d16 Translated on translate.pretix.eu (German (informal))
Currently translated at 100.0% (3807 of 3807 strings)

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

powered by weblate
2020-11-02 14:27:03 +01:00
Raphael Michel
e922bd7376 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (3807 of 3807 strings)

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

powered by weblate
2020-11-02 14:27:02 +01:00
Raphael Michel
a48d844456 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2020-11-02 13:46:32 +01:00
Raphael Michel
48119038b4 Merge pull request #1836 from pretix-translations/weblate-pretix-pretix
Translations update from Weblate
2020-11-02 13:45:57 +01:00
Raphael Michel
598f0b316e 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-11-02 13:45:45 +01:00
Raphael Michel
7df503fb4f 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-11-02 13:45:44 +01:00
Jaakko Rinta-Filppula
4c84cf7b37 Translated on translate.pretix.eu (Finnish)
Currently translated at 11.7% (443 of 3797 strings)

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

powered by weblate
2020-11-02 12:47:38 +01:00
Martin Gross
f969db69cb Allow Refunds for SEPA Debit (#1838) 2020-11-02 12:47:33 +01:00
Raphael Michel
fb92676aee Fix test suite failures 2020-11-01 15:43:57 +01:00
Raphael Michel
6052895ada Declare pretix.plugins.reports a core module 2020-11-01 15:01:24 +01:00
Raphael Michel
7a98f3fa89 Own column for unapproved orders in order overview 2020-11-01 15:00:54 +01:00
Raphael Michel
da149682aa Improve load behavior of ajaxpending.js 2020-10-31 16:33:45 +01:00
Raphael Michel
ba4eff5545 Fix cart ID handling issue in widget if cart/add takes longer than one request 2020-10-31 16:22:38 +01:00
Raphael Michel
32c08d431f Improve responsive design on "small" breakpoint 2020-10-31 16:22:26 +01:00
Raphael Michel
ecd914f44d Fix typo 2020-10-30 22:39:12 +01:00
Raphael Michel
f6dc90fb28 Show message and cart after tax rate has changed 2020-10-30 22:33:44 +01:00
860 changed files with 300408 additions and 151221 deletions

5
.clabot Normal file
View File

@@ -0,0 +1,5 @@
{
"contributors": "https://crm.rami.io/cla/check/?project=pretix&checkContributor=",
"message": "Hey there! :) Thank you very much for offering a contribution to pretix! For legal reasons, we need you to sign a Contributor License Agreement in order to be able to merge the code. Sorry for the hassle :( Please download the agreement from https://pretix.eu/about/en/cla and send a signed copy to support@pretix.eu. Feel free to also contact us there or via comments here if you have any questions!",
"label": "cla-signed"
}

View File

@@ -1,3 +1,10 @@
doc/
env/
res/
local/
.git/
pretixeu/
src/data/
src/pretix/static.dist/
src/dist/

23
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,23 @@
---
name: Bug report
about: Please only create issues for bug reports. Feature requests or general questions
should start as a "Discussion" on GitHub.
title: ''
labels: ''
assignees: ''
---
<!-- Please only create issues for bug reports. Feature requests or general questions should start as a "Discussion" on GitHub. -->
**Describe the bug**
A clear and concise description of what the bug is.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.

View File

@@ -33,7 +33,7 @@ jobs:
- 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
run: pip3 install -Ur doc/requirements.txt
- name: Spellcheck docs
run: make spelling
working-directory: ./doc

View File

@@ -31,7 +31,7 @@ jobs:
- 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
run: pip3 install -Ur src/requirements.txt
- name: Compile messages
run: python manage.py compilemessages
working-directory: ./src
@@ -56,7 +56,7 @@ jobs:
- 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
run: pip3 install -Ur src/requirements/dev.txt
- name: Spellcheck translations
run: potypo
working-directory: ./src

View File

@@ -29,7 +29,7 @@ jobs:
restore-keys: |
${{ runner.os }}-pip-
- name: Install Dependencies
run: pip3 install --no-use-pep517 -Ur src/requirements/dev.txt
run: pip3 install -Ur src/requirements/dev.txt
- name: Run isort
run: isort -c .
working-directory: ./src
@@ -49,7 +49,24 @@ jobs:
restore-keys: |
${{ runner.os }}-pip-
- name: Install Dependencies
run: pip3 install -r src/requirements.txt --no-use-pep517 -Ur src/requirements/dev.txt
run: pip3 install -r src/requirements.txt -Ur src/requirements/dev.txt
- name: Run flake8
run: flake8 .
working-directory: ./src
licenseheader:
name: licenseheaders
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
- name: Install Dependencies
run: pip3 install licenseheaders
- name: Run licenseheaders
run: licenseheaders -t ../.licenseheader -E .py -x "*/migrations/*.py"
working-directory: ./src
- name: Check for changes
run: git diff --exit-code
working-directory: ./src

View File

@@ -57,10 +57,13 @@ jobs:
- 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
run: pip3 install -r src/requirements.txt -Ur src/requirements/dev.txt mysqlclient psycopg2-binary
- name: Run checks
run: python manage.py check
working-directory: ./src
- name: Install JS dependencies
working-directory: ./src
run: make npminstall
- name: Compile
working-directory: ./src
run: make all compress

View File

@@ -28,6 +28,7 @@ pypi:
- python -m pretix migrate
- python -m pretix check
- check-manifest
- make npminstall
- python setup.py sdist bdist_wheel
- twine check dist/*
- twine upload dist/*

19
.licenseheader Normal file
View File

@@ -0,0 +1,19 @@
This file is part of pretix (Community Edition).
Copyright (C) 2014-2020 Raphael Michel and contributors
Copyright (C) 2020-2021 rami.io GmbH and contributors
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
Public License as published by the Free Software Foundation in version 3 of the License.
ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
applicable granting you additional permissions and placing additional restrictions on your usage of this software.
Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
this file, see <https://pretix.eu/about/en/license>.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see
<https://www.gnu.org/licenses/>.

37
AUTHORS
View File

@@ -1,37 +0,0 @@
Here is an inevitably incomplete list of much-appreciated contributors --
people who have submitted patches, reported bugs, added translations, helped
answer newbie questions, improved the documentation, and generally made pretix
an awesome project. Thank you all!
Adam K. Sumner <asumner101@gmail.com>
Ahrdie <robert.deppe@me.com>
Alexander Brock <Brock.Alexander@web.de>
Brandon Pineda
Bolutife Lawrence
Christian Franke <nobody@nowhere.ws>
Christopher Dambamuromo <me@chridam.com>
chotee <chotee@openended.eu>
Cpt. Foo
Daniel Rosenblüh
Enrique Saez
Flavia Bastos
informancer <informancer@web.de>
Jakob Schnell <github@ezelo.de>
Jan Felix Wiebe <git@jfwie.be>
Jan Weiß
Jason Estibeiro <jasonestibeiro@live.com>
jlwt90
Jonas Große Sundrup <cherti@letopolis.de>
Kevin Nelson
Leah Oswald
Lukas Martini
Nathan Mattes
Nicole Klünder
Marc-Pascal Clement
Martin Gross <martin@pc-coholic.de>
Raphael Michel <mail@raphaelmichel.de>
Team MRMCD
Tobias Kunze <rixx@cutebit.de>
Oliver Knapp <github@oliverknapp.de>
Vishal Sodani <vishalsodani@rediffmail.com>
Jan Felix Wiebe <git@jfwie.be>

View File

@@ -3,9 +3,9 @@ Contributing to pretix
Hey there and welcome to pretix!
We've got a contributors guide in [our documentation](https://docs.pretix.eu/en/latest/development/contribution/)
together with notes on the [development setup](https://docs.pretix.eu/en/latest/development/setup.html).
* We've got a contributors guide in [our documentation](https://docs.pretix.eu/en/latest/development/contribution/) together with notes on the [development setup](https://docs.pretix.eu/en/latest/development/setup.html).
Please note that we have a [Code of Conduct](https://docs.pretix.eu/en/latest/development/contribution/codeofconduct.html)
in place that applies to all project contributions, including issues, pull requests, etc.
* Please note that we have a [Code of Conduct](https://docs.pretix.eu/en/latest/development/contribution/codeofconduct.html) in place that applies to all project contributions, including issues, pull requests, etc.
* Before we can accept a PR from you we'll need you to sign [our CLA](https://pretix.eu/about/en/cla). You can find more information about the how and why in our [License FAQ](https://docs.pretix.eu/en/latest/license/faq.html#) and in our [license change blog post](https://pretix.eu/about/en/blog/20210412-license/).

View File

@@ -1,32 +0,0 @@
Copyright 2014-2016 Raphael Michel
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
This project includes the work of others, namely:
* Django, (c) Django Software Foundation and contributors, BSD License
* Font Awesome, (c) Dave Gandy, SIL Open Font License and MIT License
* Bootstrap, (c) Twitter, Inc., MIT License
* jQuery, (c) jQuery Foundation and contributors, MIT License
* django-formset-js, (c) Ionata Web Solutions, BSD License
* CleanerVersion, (c) Jean-Christophe Zulian, Brian King, Andrea Marcacci, Manuel Jeckelmann, Apache License
* django-bootstrap3, (c) Dylan Verheul, Apache License
* pytz, (c) Stuart Bishop, MIT License
* python-dateutil, (c) Yaron de Leeuw, BSD License
* startbootstrap-sb-admin-2, (c) Iron Summit Media Strategies, LLC, Apache License
* metismenu, (c) Osman Nuri Okumus, MIT License
* easy-thumbnails, (c) Chris Beaven and contributors
* reportlab, (c) ReportLab Europe Ltd, BSD License
* django-compressor, (c) Jannis Leidel and contributors, MIT License
* static3, (c) Roman Mohr and contributors, LGPL License
* Lightbox, (c) Lokesh Dhakar, MIT License

View File

@@ -1,4 +1,4 @@
FROM python:3.6
FROM python:3.8
RUN apt-get update && \
apt-get install -y --no-install-recommends \
@@ -30,7 +30,12 @@ RUN apt-get update && \
mkdir /data && \
useradd -ms /bin/bash -d /pretix -u 15371 pretixuser && \
echo 'pretixuser ALL=(ALL) NOPASSWD:SETENV: /usr/bin/supervisord' >> /etc/sudoers && \
mkdir /static
mkdir /static && \
mkdir /etc/supervisord && \
curl -fsSL https://deb.nodesource.com/setup_15.x | sudo -E bash - && \
apt-get install -y nodejs && \
curl -qL https://www.npmjs.com/install.sh | sh
ENV LC_ALL=C.UTF-8 \
DJANGO_SETTINGS_MODULE=production_settings
@@ -47,12 +52,13 @@ RUN pip3 install -U \
-r requirements.txt \
-r requirements/memcached.txt \
-r requirements/mysql.txt \
-r requirements/redis.txt \
gunicorn && \
gunicorn django-extensions ipython && \
rm -rf ~/.cache/pip
COPY deployment/docker/pretix.bash /usr/local/bin/pretix
COPY deployment/docker/supervisord.conf /etc/supervisord.conf
COPY deployment/docker/supervisord /etc/supervisord
COPY deployment/docker/supervisord.all.conf /etc/supervisord.all.conf
COPY deployment/docker/supervisord.web.conf /etc/supervisord.web.conf
COPY deployment/docker/nginx.conf /etc/nginx/nginx.conf
COPY deployment/docker/production_settings.py /pretix/src/production_settings.py
COPY src /pretix/src

1054
LICENSE

File diff suppressed because it is too large Load Diff

View File

@@ -52,11 +52,9 @@ including issues, pull requests, etc.
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. See the AUTHORS file for a list of all
the awesome folks who contributed to this project.
The code in this repository is covered by different licenses. Most of it is available to everyone under the terms of
the GNU AGPL license v3 with additional terms. See the LICENSE file for the complete license details.
.. _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

@@ -1,10 +1,13 @@
user www-data www-data;
worker_processes 1;
worker_processes auto;
pid /var/run/nginx.pid;
daemon off;
worker_rlimit_nofile 262144;
events {
worker_connections 4096;
worker_connections 16384;
multi_accept on;
use epoll;
}
http {
@@ -30,7 +33,7 @@ http {
gzip on;
gzip_disable "msie6";
gzip_types text/plain text/html text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml image/svg+xml;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml image/svg+xml;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;

View File

@@ -3,7 +3,10 @@ cd /pretix/src
export DJANGO_SETTINGS_MODULE=production_settings
export DATA_DIR=/data/
export HOME=/pretix
export NUM_WORKERS=$((2 * $(nproc --all)))
AUTOMIGRATE=${AUTOMIGRATE:-yes}
NUM_WORKERS_DEFAULT=$((2 * $(nproc --all)))
export NUM_WORKERS=${NUM_WORKERS:-$NUM_WORKERS_DEFAULT}
if [ ! -d /data/logs ]; then
mkdir /data/logs;
@@ -16,10 +19,16 @@ if [ "$1" == "cron" ]; then
exec python3 -m pretix runperiodic
fi
python3 -m pretix migrate --noinput
if [ "$AUTOMIGRATE" != "skip" ]; then
python3 -m pretix migrate --noinput
fi
if [ "$1" == "all" ]; then
exec sudo -E /usr/bin/supervisord -n -c /etc/supervisord.conf
exec sudo -E /usr/bin/supervisord -n -c /etc/supervisord.all.conf
fi
if [ "$1" == "web" ]; then
exec sudo -E /usr/bin/supervisord -n -c /etc/supervisord.web.conf
fi
if [ "$1" == "webworker" ]; then
@@ -37,10 +46,6 @@ if [ "$1" == "taskworker" ]; then
exec celery -A pretix.celery_app worker -l info "$@"
fi
if [ "$1" == "shell" ]; then
exec python3 -m pretix shell
fi
if [ "$1" == "upgrade" ]; then
exec python3 -m pretix updatestyles
fi

View File

@@ -0,0 +1,2 @@
[include]
files = /etc/supervisord/*.conf

View File

@@ -1,44 +0,0 @@
[unix_http_server]
file=/tmp/supervisor.sock
[supervisord]
logfile=/tmp/supervisord.log
logfile_maxbytes=50MB
logfile_backups=10
loglevel=info
pidfile=/tmp/supervisord.pid
nodaemon=false
minfds=1024
minprocs=200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock
[program:pretixweb]
command=/usr/local/bin/pretix webworker
autostart=true
autorestart=true
priority=5
user=pretixuser
environment=HOME=/pretix
[program:pretixtask]
command=/usr/local/bin/pretix taskworker
autostart=true
autorestart=true
priority=5
user=pretixuser
[program:nginx]
command=/usr/sbin/nginx
autostart=true
autorestart=true
priority=10
stdout_events_enabled=true
stderr_events_enabled=true
[include]
files = /etc/supervisord-*.conf

View File

@@ -0,0 +1,2 @@
[include]
files = /etc/supervisord/base.conf /etc/supervisord/nginx.conf /etc/supervisord/pretixweb.conf

View File

@@ -0,0 +1,17 @@
[unix_http_server]
file=/tmp/supervisor.sock
[supervisord]
logfile=/dev/stdout
logfile_maxbytes=0
loglevel=info
pidfile=/tmp/supervisord.pid
nodaemon=false
minfds=1024
minprocs=200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock

View File

@@ -0,0 +1,9 @@
[program:nginx]
command=/usr/sbin/nginx
autostart=true
autorestart=true
priority=10
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
stderr_logfile=/dev/fd/2
stderr_logfile_maxbytes=0

View File

@@ -0,0 +1,10 @@
[program:pretixtask]
command=/usr/local/bin/pretix taskworker
autostart=true
autorestart=true
priority=5
user=pretixuser
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
stderr_logfile=/dev/fd/2
stderr_logfile_maxbytes=0

View File

@@ -0,0 +1,11 @@
[program:pretixweb]
command=/usr/local/bin/pretix webworker
autostart=true
autorestart=true
priority=5
user=pretixuser
environment=HOME=/pretix
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
stderr_logfile=/dev/fd/2
stderr_logfile_maxbytes=0

202
doc/LICENSE.txt Normal file
View File

@@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -23,6 +23,14 @@ The config file may contain the following sections (all settings are optional an
default values). We suggest that you start from the examples given in one of the
installation tutorials.
.. note::
The configuration file is the recommended way to configure pretix. However, you can
also set them through environment variables. In this case, the syntax is
``PRETIX_SECTION_CONFIG``. For example, to configure the setting ``password_reset``
from the ``[pretix]`` section, set ``PRETIX_PRETIX_PASSWORD_RESET=off`` in your
environment.
pretix settings
---------------
@@ -97,7 +105,12 @@ Example::
``csp_log``
Log violations of the Content Security Policy (CSP). Defaults to ``on``.
``csp_additional_header``
Specifies a CSP header that will be **merged** with pretix's default header. For example, if you set this
to ``script-src https://mycdn.com``, pretix will add ``https://mycdn.com`` as an **additional** allowed source
to all CSP headers. Empty by default.
``loglevel``
Set console and file log level (``DEBUG``, ``INFO``, ``WARNING``, ``ERROR`` or ``CRITICAL``). Defaults to ``INFO``.

View File

@@ -60,6 +60,10 @@ Here is the currently recommended set of commands::
CREATE INDEX CONCURRENTLY pretix_addidx_ia_company
ON pretixbase_invoiceaddress
USING gin (upper("company") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_orderpos_email_upper
ON public.pretixbase_orderposition (upper((attendee_email)::text));
CREATE INDEX CONCURRENTLY pretix_addidx_voucher_code_upper
ON public.pretixbase_voucher (upper((code)::text));
Also, if you use our ``pretix-shipping`` plugin::

View File

@@ -135,7 +135,7 @@ Fill the configuration file ``/etc/pretix/pretix.cfg`` with the following conten
user=pretix
; Replace with the password you chose above
password=*********
; In most docker setups, 172.17.0.1 is the address of the docker host. Adjuts
; In most docker setups, 172.17.0.1 is the address of the docker host. Adjust
; this to wherever your database is running, e.g. the name of a linked container
; or of a mounted MySQL socket.
host=172.17.0.1
@@ -284,6 +284,26 @@ Then, go to that directory and build the image::
You can now use that image ``mypretix`` instead of ``pretix/standalone`` in your service file (see above). Be sure
to re-build your custom image after you pulled ``pretix/standalone`` if you want to perform an update.
Scaling up
----------
If you need to scale to multiple machines, please first read our :ref:`scaling guide <scaling>`.
If you run the official docker container on multiple machines, it is recommended to set the environment
variable ``AUTOMIGRATE=skip`` on all containers and run ``docker exec -it pretix.service pretix migrate``
on one machine after each upgrade manually, otherwise multiple containers might try to upgrade the
database schema at the same time.
To run only the ``pretix-web`` component of pretix as well as a nginx server serving static files, you
can invoke the container with ``docker run … pretix/standalone:stable web`` (instead of ``all``). You
can adjust the number of ``gunicorn`` processes with the ``NUM_WORKERS`` environment variable (defaults to
two times the number of CPUs detected).
To run only ``pretix-worker``, you can run ``docker run … pretix/standalone:stable taskworker``. You can
also pass arguments to limit the worker to specific queues or to change the number of concurrent task
workers, e.g. ``docker run … taskworker -Q notifications --concurrency 32``.
.. _Docker: https://docs.docker.com/engine/installation/linux/debian/
.. _Postfix: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-as-a-send-only-smtp-server-on-ubuntu-16-04
.. _nginx: https://botleg.com/stories/https-with-lets-encrypt-and-nginx/

View File

@@ -25,6 +25,7 @@ installation guides):
* A HTTP reverse proxy, e.g. `nginx`_ or Apache to allow HTTPS connections
* A `PostgreSQL`_ 9.5+, `MySQL`_ 5.7+, or MariaDB 10.2.7+ database server
* A `redis`_ server
* A `nodejs_` installation
We also recommend that you use a firewall, although this is not a pretix-specific recommendation. If you're new to
Linux and firewalls, we recommend that you start with `ufw`_.
@@ -312,3 +313,4 @@ example::
.. _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/
.. _nodejs: https://github.com/nodesource/distributions/blob/master/README.md#deb

View File

@@ -95,6 +95,12 @@ pretix_model_instances
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.
pretix_celery_tasks_queued_count
The number of background tasks in the worker queue, labeled with ``queue``.
pretix_celery_tasks_queued_age_seconds
The age of the longest-waiting in the worker queue in seconds, labeled with ``queue``.
.. _metric types: https://prometheus.io/docs/concepts/metric_types/
.. _Prometheus: https://prometheus.io/
.. _cProfile: https://docs.python.org/3/library/profile.html

View File

@@ -183,6 +183,9 @@ Relative date *either* String in ISO 8601 ``"2017-12-27"``,
constructed from a number of
days before the base point
and the base point.
File URL in responses, ``file:`` ``"https://…"``, ``"file:…"``
specifiers in requests
(see below).
===================== ============================ ===================================
Query parameters
@@ -210,13 +213,16 @@ Please note that this also goes for most error responses. For example, if we ret
error and you retry with the same ``X-Idempotency-Key``, you will get the same error again, even if you were granted
permission in the meantime! This includes internal server errors on our side that might have been fixed in the meantime.
There are only three exceptions to the rule:
There are only the following exceptions to the rule:
* Responses with status code ``409 Conflict`` are not cached. If you send the request again, it will be executed as a
new request, since these responses are intended to be retried.
* Rate-limited responses with status code ``429 Too Many Requests`` are not cached and you can safely retry them.
* Responses with status code ``500 Internal Server Error`` are not cached and you can retry them. This is not guaranteed
to be safe in all theoretical cases, but 500 by definition is an unforeseen situation and we need to have some way out.
* Responses with status code ``503 Service Unavailable`` are not cached and you can safely retry them.
If you send a request with an ``X-Idempotency-Key`` header that we have seen before but that has not yet received a
@@ -227,4 +233,48 @@ We store idempotency keys for 24 hours, so you should never retry a request afte
All ``POST``, ``PUT``, ``PATCH``, or ``DELETE`` api calls support idempotency keys. Adding an idempotency key to a
``GET``, ``HEAD``, or ``OPTIONS`` request has no effect.
File upload
-----------
In some places, the API supports working with files, for example when setting the picture of a product. In this case,
you will first need to make a separate request to our file upload endpoint:
.. sourcecode:: http
POST /api/v1/upload HTTP/1.1
Host: pretix.eu
Authorization: Token e1l6gq2ye72thbwkacj7jbri7a7tvxe614ojv8ybureain92ocub46t5gab5966k
Content-Type: image/png
Content-Disposition: attachment; filename="logo.png"
Content-Length: 1234
<raw file content>
Note that the ``Content-Type`` and ``Content-Disposition`` headers are required. If the upload was successful, you will
receive a JSON response with the ID of the file:
.. sourcecode:: http
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": "file:1cd99455-1ebd-4cda-b1a2-7a7d2a969ad1"
}
You can then use this file ID in the request you want to use it in. File IDs are currently valid for 24 hours and can only
be used using the same authorization method and user that was used to upload them.
.. sourcecode:: http
PATCH /api/v1/organizers/test/events/test/items/3/ HTTP/1.1
Host: pretix.eu
Content-Type: application/json
{
"picture": "file:1cd99455-1ebd-4cda-b1a2-7a7d2a969ad1"
}
.. _CSRF policies: https://docs.djangoproject.com/en/1.11/ref/csrf/#ajax

View File

@@ -8,4 +8,5 @@ This part of the documentation contains how-to guides on some special use cases
.. toctree::
:maxdepth: 2
order_lifecycle
custom_checkout

View File

@@ -0,0 +1,56 @@
Understanding the life cycle of orders
======================================
When integrating pretix with other systems, it is important that you understand how orders and related objects
such as order positions, fees, payments, refunds, and invoices work together, in order to react to their changes
properly and map them to processes in your system.
Order states
------------
Generally, an order can be in six states. For compatibility reasons, the ``status`` field only allows four values
and the two remaining states are modeled through the ``require_approval`` field and the number of positions within
an order. The states and their allowed changes are shown in the following graph:
.. image:: /images/order_states.png
Object types
------------
Order
One order represents one purchase. It's the main object you interact with and bundles all the other objects
together. Orders can change in many ways during their lifetime, but will never be deleted (unless ``testmode``
is set to ``true``).
Order position
An order position represents one product contained in the order. Orders can usually have multiple positions.
There might be a parent-child relation between order positions if one position is an add-on to another position.
Order positions can change in many ways during their lifetime, and can also be removed or added to an order.
Order fees
A fee represents a charge that is not related to a product. Examples include shipping fees, service fees, and
cancellation fees.
Order fees can change in many ways during their lifetime, and can also be removed or added to an order.
Order payment
An order payment represents one payment attempt with a specific payment method and amount. An order can have
multiple payments attached.
Order payments have their own state diagram. Apart from their state and their meta information (e.g. used
credit card, …) they usually don't change. They may be added at any time, but will never be deleted.
Order refund
An order payment represents one refund attempt with a specific payment method and amount. An order can have
multiple refunds attached.
Order refunds have their own state diagram. Apart from their state and their meta information (e.g. used
credit card, …) they usually don't change. They may be added at any time, but will never be deleted.
Invoice
An invoice represents a legal document stating the contents of an order. While the backend technically allows
to update an invoice in some situations, invoices are generally considered immutable. Once they are issued,
they no longer change. If the order changes substantially (e.g. prices change), an invoice is canceled through
creation of a new invoice with the opposite amount, plus the issuance of a new invoice.
Here's an example of how they all play together:
.. image:: /images/order_objects.png

View File

@@ -42,10 +42,6 @@ seat objects The assigned se
└ seat_guid string Identifier of the seat within the seating plan
===================================== ========================== =======================================================
.. versionchanged:: 1.17
This resource has been added.
.. versionchanged:: 3.0
This ``seat`` attribute has been added.

View File

@@ -25,14 +25,6 @@ is_addon boolean If ``true``, it
defining add-ons for other products.
===================================== ========================== =======================================================
.. versionchanged:: 1.14
The operations POST, PATCH, PUT and DELETE have been added.
.. versionchanged:: 1.16
The field ``internal_name`` has been added.
Endpoints
---------

View File

@@ -36,22 +36,6 @@ rules object Custom check-in
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
This resource has been added.
.. versionchanged:: 1.11
The ``positions`` endpoints have been added.
.. versionchanged:: 1.13
The ``include_pending`` field has been added.
.. versionchanged:: 3.2
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``,
@@ -65,13 +49,13 @@ exit_all_at datetime Automatically c
The ``exit_all_at`` attribute has been added.
.. versionchanged:: 3.17
The ``ends_after`` and ``expand`` query parameters have been added.
Endpoints
---------
.. versionchanged:: 1.15
The ``../status/`` detail endpoint has been added.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/checkinlists/
Returns a list of all check-in lists within a given event.
@@ -120,6 +104,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 ends_after: Exclude all check-in lists attached to a sub-event that is already in the past at the given time.
:query string expand: Expand a field into a full object. Currently only ``subevent`` is supported. Can be passed multiple times.
: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
@@ -380,29 +366,6 @@ Endpoints
Order position endpoints
------------------------
.. versionchanged:: 1.15
The order positions endpoint has been extended by the filter queries ``item__in``, ``variation__in``,
``order__status__in``, ``subevent__in``, ``addon_to__in``, and ``search``. The search for attendee names and order
codes is now case-insensitive.
The ``.../redeem/`` endpoint has been added.
.. versionchanged:: 2.0
The order positions endpoint has been extended by the filter queries ``voucher`` and ``voucher__code``.
.. versionchanged:: 2.7
The resource now contains the new attributes ``require_attention`` and ``order__status`` and accepts the new
``ignore_status`` filter. The ``attendee_name`` field is now "smart" (see below) and the redemption endpoint
returns ``400`` instead of ``404`` on tickets which are known but not paid.
.. versionchanged:: 3.2
The ``checkins`` dict now also contains a ``auto_checked_in`` value to indicate if the check-in has been performed
automatically by the system.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/checkinlists/(list)/positions/
Returns a list of all order positions within a given event. The result is the same as
@@ -490,6 +453,7 @@ Order position endpoints
``attendee_name,positionid``
:query string order: Only return positions of the order with the given order code
:query string search: Fuzzy search matching the attendee name, order code, invoice address name as well as to the beginning of the secret.
:query string expand: Expand a field into a full object. Currently only ``subevent``, ``item``, and ``variation`` are supported. Can be passed multiple times.
:query integer item: Only return positions with the purchased item matching the given ID.
:query integer item__in: Only return positions with the purchased item matching one of the given comma-separated IDs.
:query integer variation: Only return positions with the purchased item variation matching the given ID.

View File

@@ -47,34 +47,11 @@ item_meta_properties object Item-specific m
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.
sales_channels list A list of sales channels this event is available for
sale on.
===================================== ========================== =======================================================
.. versionchanged:: 1.7
The ``meta_data`` field has been added.
.. versionchanged:: 1.15
The ``plugins`` field has been added.
The operations POST, PATCH, PUT and DELETE have been added.
.. versionchanged:: 2.1
Filters have been added to the list of events.
.. versionchanged:: 2.5
The ``testmode`` attribute has been added.
.. versionchanged:: 2.8
When cloning events, the ``testmode`` attribute will now be cloned, too.
.. versionchanged:: 3.0
The attributes ``seating_plan`` and ``seat_category_mapping`` have been added.
.. versionchanged:: 3.3
The attributes ``geo_lat`` and ``geo_lon`` have been added.
@@ -91,6 +68,11 @@ valid_keys object Cryptographic k
The attribute ``valid_keys`` has been added.
.. versionchanged:: 3.14
The attribute ``sales_channels`` has been added.
Endpoints
---------
@@ -147,11 +129,16 @@ Endpoints
"timezone": "Europe/Berlin",
"item_meta_properties": {},
"plugins": [
"pretix.plugins.banktransfer"
"pretix.plugins.stripe"
"pretix.plugins.paypal"
"pretix.plugins.banktransfer",
"pretix.plugins.stripe",
"pretix.plugins.paypal",
"pretix.plugins.ticketoutputpdf"
],
"sales_channels": [
"web",
"pretixpos",
"resellers"
]
}
]
}
@@ -170,6 +157,7 @@ Endpoints
only contain the events matching the set criteria. Providing ``?attr[Format]=Seminar`` would return only those
events having set their ``Format`` meta data to ``Seminar``, ``?attr[Format]=`` only those, that have no value
set. Please note that this filter will respect default values set on organizer level.
:query sales_channel: If set to a sales channel identifier, only events allowed to be sold on the specified sales channel are returned.
:param organizer: The ``slug`` field of a valid organizer
:statuscode 200: no error
:statuscode 401: Authentication failure
@@ -219,16 +207,21 @@ Endpoints
"timezone": "Europe/Berlin",
"item_meta_properties": {},
"plugins": [
"pretix.plugins.banktransfer"
"pretix.plugins.stripe"
"pretix.plugins.paypal"
"pretix.plugins.banktransfer",
"pretix.plugins.stripe",
"pretix.plugins.paypal",
"pretix.plugins.ticketoutputpdf"
],
"valid_keys": {
"pretix_sig1": [
"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUNvd0JRWURLMlZ3QXlFQTdBRDcvdkZBMzNFc1k0ejJQSHI3aVpQc1o4bjVkaDBhalA4Z3l6Tm1tSXM9Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo="
]
}
},
"sales_channels": [
"web",
"pretixpos",
"resellers"
]
}
:param organizer: The ``slug`` field of the organizer to fetch
@@ -279,6 +272,11 @@ Endpoints
"plugins": [
"pretix.plugins.stripe",
"pretix.plugins.paypal"
],
"sales_channels": [
"web",
"pretixpos",
"resellers"
]
}
@@ -314,6 +312,11 @@ Endpoints
"plugins": [
"pretix.plugins.stripe",
"pretix.plugins.paypal"
],
"sales_channels": [
"web",
"pretixpos",
"resellers"
]
}
@@ -369,6 +372,11 @@ Endpoints
"plugins": [
"pretix.plugins.stripe",
"pretix.plugins.paypal"
],
"sales_channels": [
"web",
"pretixpos",
"resellers"
]
}
@@ -404,6 +412,11 @@ Endpoints
"plugins": [
"pretix.plugins.stripe",
"pretix.plugins.paypal"
],
"sales_channels": [
"web",
"pretixpos",
"resellers"
]
}
@@ -473,6 +486,11 @@ Endpoints
"pretix.plugins.stripe",
"pretix.plugins.paypal",
"pretix.plugins.pretixdroid"
],
"sales_channels": [
"web",
"pretixpos",
"resellers"
]
}

View File

@@ -0,0 +1,215 @@
.. spelling:: checkin
Data exporters
==============
pretix and it's plugins include a number of data exporters that allow you to bulk download various data from pretix in
different formats. This page shows you how to use these exporters through the API.
.. versionchanged:: 3.13
This feature has been added to the API.
.. warning::
While we consider the methods listed on this page to be a stable API, the availability and specific input field
requirements of individual exporters is **not considered a stable API**. Specific exporters and their input parameters
may change at any time without warning.
Listing available exporters
---------------------------
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/exporters/
Returns a list of all exporters available for a given event. You will receive a list of export methods as well as their
supported input fields. Note that the exact type and validation requirements of the input fields are not given in the
response, and you might need to look into the pretix web interface to figure out the exact input required.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/exporters/ 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": [
{
"identifier": "orderlist",
"verbose_name": "Order data",
"input_parameters": [
{
"name": "_format",
"required": true,
"choices": [
"xlsx",
"orders:default",
"orders:excel",
"orders:semicolon",
"positions:default",
"positions:excel",
"positions:semicolon",
"fees:default",
"fees:excel",
"fees:semicolon"
]
},
{
"name": "paid_only",
"required": false
}
]
}
]
}
: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
:param event: The ``slug`` field of the event to fetch
: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.
.. http:get:: /api/v1/organizers/(organizer)/exporters/
Returns a list of all cross-event exporters available for a given organizer. You will receive a list of export methods as well as their
supported input fields. Note that the exact type and validation requirements of the input fields are not given in the
response, and you might need to look into the pretix web interface to figure out the exact input required.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/exporters/ 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": [
{
"identifier": "orderlist",
"verbose_name": "Order data",
"input_parameters": [
{
"name": "events",
"required": true
},
{
"name": "_format",
"required": true,
"choices": [
"xlsx",
"orders:default",
"orders:excel",
"orders:semicolon",
"positions:default",
"positions:excel",
"positions:semicolon",
"fees:default",
"fees:excel",
"fees:semicolon"
]
},
{
"name": "paid_only",
"required": false
}
]
}
]
}
: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/event does not exist **or** you have no permission to view this resource.
Running an export
-----------------
Since exports often include large data sets, they might take longer than the duration of an HTTP request. Therefore,
creating an export is a two-step process. First you need to start an export task with one of the following to API
endpoints:
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/exporters/(identifier)/run/
Starts an export task. If your input parameters validate correctly, a ``202 Accepted`` status code is returned.
The body points you to the download URL of the result.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/exporters/orderlist/run/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"_format": "xlsx"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"download": "https://pretix.eu/api/v1/organizers/bigevents/events/sampleconf/orderlist/download/29891ede-196f-4942-9e26-d055a36e98b8/3f279f13-c198-4137-b49b-9b360ce9fcce/"
}
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
:param identifier: The ``identifier`` field of the exporter to run
:statuscode 202: no error
:statuscode 400: Invalid input options
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
.. http:post:: /api/v1/organizers/(organizer)/exporters/(identifier)/run/
The endpoint for organizer-level exports works just like event-level exports (see above).
Downloading the result
----------------------
When starting an export, you receive a ``url`` for downloading the result. Running a ``GET`` request on that result will
yield one of the following status codes:
* ``200 OK`` The export succeeded. The body will be your resulting file. Might be large!
* ``409 Conflict`` Your export is still running. The body will be JSON with the structure ``{"status": "running", "percentage": 40}``. ``percentage`` can be ``null`` if it is not known and ``status`` can be ``waiting`` before the task is actually being processed. Please retry, but wait at least one second before you do.
* ``410 Gone`` Running the export has failed permanently. The body will be JSON with the structure ``{"status": "failed", "message": "Error message"}``
* ``404 Not Found`` The export does not exist / is expired.
.. warning::
Running exports puts a lot of stress on the system, we kindly ask you not to run more than two exports at the same time.

View File

@@ -22,9 +22,28 @@ expires datetime Expiry date (or
conditions string Special terms and conditions for this card (or ``null``)
===================================== ========================== =======================================================
The gift card transaction resource contains the following public fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
id integer Internal ID of the gift card transaction
datetime datetime Creation date of the transaction
value money (string) Transaction amount
event string Event slug, if the gift card was used in the web shop (or ``null``)
order string Order code, if the gift card was used in the web shop (or ``null``)
text string Custom text of the transaction (or ``null``)
===================================== ========================== =======================================================
Endpoints
---------
.. versionadded:: 3.14
The transaction list endpoint was added.
.. http:get:: /api/v1/organizers/(organizer)/giftcards/
Returns a list of all gift cards issued by a given organizer.
@@ -250,3 +269,45 @@ Endpoints
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to change this resource.
:statuscode 409: There is not sufficient credit on the gift card.
.. http:get:: /api/v1/organizers/(organizer)/giftcards/(id)/transactions/
List all transactions of a gift card.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/giftcards/1/transactions/ 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": 82,
"datetime": "2020-06-22T15:41:42.800534Z",
"value": "50.00",
"event": "democon",
"order": "FXQYW",
"text": null
}
]
}
:param organizer: The ``slug`` field of the organizer to view
:param id: The ``id`` field of the gift card to view
: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.

View File

@@ -27,5 +27,6 @@ Resources and endpoints
devices
webhooks
seatingplans
exporters
billing_invoices
billing_var

View File

@@ -15,8 +15,24 @@ number string Invoice number
order string Order code of the order this invoice belongs to
is_cancellation boolean ``true``, if this invoice is the cancellation of a
different invoice.
invoice_from string Sender address
invoice_to string Receiver address
invoice_from_name string Sender address: Name
invoice_from string Sender address: Address lines
invoice_from_zipcode string Sender address: ZIP code
invoice_from_city string Sender address: City
invoice_from_country string Sender address: Country code
invoice_from_tax_id string Sender address: Local Tax ID
invoice_from_vat_id string Sender address: EU VAT ID
invoice_to string Full recipient address
invoice_to_company string Recipient address: Company name
invoice_to_name string Recipient address: Person name
invoice_to_street string Recipient address: Address lines
invoice_to_zipcode string Recipient address: ZIP code
invoice_to_city string Recipient address: City
invoice_to_state string Recipient address: State (only used in some countries)
invoice_to_country string Recipient address: Country code
invoice_to_vat_id string Recipient address: EU VAT ID
invoice_to_beneficiary string Invoice beneficiary
custom_field string Custom invoice address field
date date Invoice date
refers string Invoice number of an invoice this invoice refers to
(for example a cancellation refers to the invoice it
@@ -30,6 +46,31 @@ footer_text string Text to be prin
lines list of objects The actual invoice contents
├ position integer Number of the line within an invoice.
├ description string Text representing the invoice line (e.g. product name)
├ item integer Product used to create this line. Note that everything
about the product might have changed since the creation
of the invoice. Can be ``null`` for all invoice lines
created before this field was introduced as well as for
all lines not created by a product (e.g. a shipping or
cancellation fee).
├ variation integer Product variation used to create this line. Note that everything
about the product might have changed since the creation
of the invoice. Can be ``null`` for all invoice lines
created before this field was introduced as well as for
all lines not created by a product (e.g. a shipping or
cancellation fee).
├ event_date_from datetime Start date of the (sub)event this line was created for as it
was set during invoice creation. Can be ``null`` for all invoice
lines created before this was introduced as well as for lines in
an event series not created by a product (e.g. shipping or
cancellation fees).
├ event_date_to datetime End date of the (sub)event this line was created for as it
was set during invoice creation. Can be ``null`` for all invoice
lines created before this was introduced as well as for lines in
an event series not created by a product (e.g. shipping or
cancellation fees) as well as whenever the respective (sub)event
has no end date set.
├ attendee_name string Attendee name at time of invoice creation. Can be ``null`` if no
name was set or if names are configured to not be added to invoices.
├ gross_value money (string) Price including taxes
├ tax_value money (string) Tax amount included
├ tax_name string Name of used tax rate (e.g. "VAT")
@@ -46,28 +87,16 @@ internal_reference string Customer's refe
===================================== ========================== =======================================================
.. versionchanged:: 1.6
The attribute ``invoice_no`` has been dropped in favor of ``number`` which includes the number including the prefix,
since the prefix can now vary. Also, invoices now need to be identified by their ``number`` instead of the raw
number.
.. versionchanged:: 1.7
The attributes ``lines.tax_name``, ``foreign_currency_display``, ``foreign_currency_rate``, and
``foreign_currency_rate_date`` have been added.
.. versionchanged:: 1.9
The attribute ``internal_reference`` has been added.
.. versionchanged:: 3.4
The attribute ``lines.number`` has been added.
.. versionchanged:: 3.17
The attribute ``invoice_to_*``, ``invoice_from_*``, ``custom_field``, ``lines.item``, ``lines.variation``, ``lines.event_date_from``,
``lines.event_date_to``, and ``lines.attendee_name`` have been added.
``refers`` now returns an invoice number including the prefix.
Endpoints
---------
@@ -101,8 +130,24 @@ Endpoints
"number": "SAMPLECONF-00001",
"order": "ABC12",
"is_cancellation": false,
"invoice_from": "Big Events LLC\nDemo street 12\nDemo town",
"invoice_to": "Sample company\nJohn Doe\nTest street 12\n12345 Testington\nTestikistan\nVAT ID: EU123456789",
"invoice_from_name": "Big Events LLC",
"invoice_from": "Demo street 12",
"invoice_from_zipcode":"",
"invoice_from_city":"Demo town",
"invoice_from_country":"US",
"invoice_from_tax_id":"",
"invoice_from_vat_id":"",
"invoice_to": "Sample company\nJohn Doe\nTest street 12\n12345 Testington\nTestikistan\nVAT-ID: EU123456789",
"invoice_to_company": "Sample company",
"invoice_to_name": "John Doe",
"invoice_to_street": "Test street 12",
"invoice_to_zipcode": "12345",
"invoice_to_city": "Testington",
"invoice_to_state": null,
"invoice_to_country": "TE",
"invoice_to_vat_id": "EU123456789",
"invoice_to_beneficiary": "",
"custom_field": null,
"date": "2017-12-01",
"refers": null,
"locale": "en",
@@ -115,6 +160,11 @@ Endpoints
{
"position": 1,
"description": "Budget Ticket",
"item": 1234,
"variation": 245,
"event_date_from": "2017-12-27T10:00:00Z",
"event_date_to": null,
"attendee_name": null,
"gross_value": "23.00",
"tax_value": "0.00",
"tax_name": "VAT",
@@ -166,8 +216,24 @@ Endpoints
"number": "SAMPLECONF-00001",
"order": "ABC12",
"is_cancellation": false,
"invoice_from": "Big Events LLC\nDemo street 12\nDemo town",
"invoice_to": "Sample company\nJohn Doe\nTest street 12\n12345 Testington\nTestikistan\nVAT ID: EU123456789",
"invoice_from_name": "Big Events LLC",
"invoice_from": "Demo street 12",
"invoice_from_zipcode":"",
"invoice_from_city":"Demo town",
"invoice_from_country":"US",
"invoice_from_tax_id":"",
"invoice_from_vat_id":"",
"invoice_to": "Sample company\nJohn Doe\nTest street 12\n12345 Testington\nTestikistan\nVAT-ID: EU123456789",
"invoice_to_company": "Sample company",
"invoice_to_name": "John Doe",
"invoice_to_street": "Test street 12",
"invoice_to_zipcode": "12345",
"invoice_to_city": "Testington",
"invoice_to_state": null,
"invoice_to_country": "TE",
"invoice_to_vat_id": "EU123456789",
"invoice_to_beneficiary": "",
"custom_field": null,
"date": "2017-12-01",
"refers": null,
"locale": "en",
@@ -180,6 +246,11 @@ Endpoints
{
"position": 1,
"description": "Budget Ticket",
"item": 1234,
"variation": 245,
"event_date_from": "2017-12-27T10:00:00Z",
"event_date_to": null,
"attendee_name": null,
"gross_value": "23.00",
"tax_value": "0.00",
"tax_name": "VAT",

View File

@@ -28,10 +28,6 @@ multi_allowed boolean Adding the same
price_included boolean Adding this add-on to the item is free
===================================== ========================== =======================================================
.. versionchanged:: 1.12
This resource has been added.
Endpoints
---------

View File

@@ -30,10 +30,6 @@ designated_price money (string) Designated pric
taxation. This is not added to the price.
===================================== ========================== =======================================================
.. versionchanged:: 2.6
This resource has been added.
Endpoints
---------

View File

@@ -26,14 +26,6 @@ description multi-lingual string A public descri
position integer An integer, used for sorting
===================================== ========================== =======================================================
.. versionchanged:: 2.7
The attribute ``original_price`` has been added.
.. versionchanged:: 1.12
This resource has been added.
Endpoints
---------

View File

@@ -36,8 +36,8 @@ admission boolean ``true`` for it
(such as primary tickets) and ``false`` for others
(such as add-ons or merchandise).
position integer An integer, used for sorting
picture string A product picture to be displayed in the shop
(read-only, can be ``null``).
picture file A product picture to be displayed in the shop
(can be ``null``).
sales_channels list of strings Sales channels this product is available on, such as
``"web"`` or ``"resellers"``. Defaults to ``["web"]``.
available_from datetime The first date time at which this item can be bought
@@ -118,44 +118,6 @@ bundles list of objects Definition of b
meta_data object Values set for event-specific meta data parameters.
===================================== ========================== =======================================================
.. versionchanged:: 2.7
The attribute ``original_price`` has been added for ``variations``.
.. versionchanged:: 1.7
The attribute ``tax_rule`` has been added. ``tax_rate`` is kept for compatibility. The attribute
``checkin_attention`` has been added.
.. versionchanged:: 1.12
The write operations ``POST``, ``PATCH``, ``PUT``, and ``DELETE`` have been added.
The attribute ``price_included`` has been added to ``addons``.
.. versionchanged:: 1.16
The ``internal_name`` and ``original_price`` fields have been added.
.. versionchanged:: 2.0
The field ``require_approval`` has been added.
.. versionchanged:: 2.3
The ``sales_channels`` attribute has been added.
.. versionchanged:: 2.4
The ``generate_tickets`` attribute has been added.
.. versionchanged:: 2.6
The ``bundles`` and ``require_bundling`` attributes have been added.
.. versionchanged:: 3.0
The ``show_quota_left``, ``allow_waitinglist``, and ``hidden_if_available`` attributes have been added.
.. versionchanged:: 3.7
The attribute ``meta_data`` has been added.

View File

@@ -30,6 +30,7 @@ testmode boolean If ``true``, th
test mode. Only orders in test mode can be deleted.
secret string The secret contained in the link sent to the customer
email string The customer email address
phone string The customer phone number
locale string The locale used for communication with this customer
sales_channel string Channel this sale was created through, such as
``"web"``.
@@ -93,60 +94,6 @@ last_modified datetime Last modificati
===================================== ========================== =======================================================
.. versionchanged:: 1.6
The ``invoice_address.country`` attribute contains a two-letter country code for all new orders. For old orders,
a custom text might still be returned.
.. versionchanged:: 1.7
The attributes ``invoice_address.vat_id_validated`` and ``invoice_address.is_business`` have been added.
The attributes ``order.payment_fee``, ``order.payment_fee_tax_rate`` and ``order.payment_fee_tax_value`` have been
deprecated in favor of the new ``fees`` attribute but will still be served and removed in 1.9.
.. versionchanged:: 1.9
First write operations (``…/mark_paid/``, ``…/mark_pending/``, ``…/mark_canceled/``, ``…/mark_expired/``) have been added.
The attribute ``invoice_address.internal_reference`` has been added.
.. versionchanged:: 1.13
The field ``checkin_attention`` has been added.
.. versionchanged:: 1.15
The attributes ``order.payment_fee``, ``order.payment_fee_tax_rate``, ``order.payment_fee_tax_value`` and
``order.payment_fee_tax_rule`` have finally been removed.
.. versionchanged:: 1.16
The attributes ``order.last_modified`` as well as the corresponding filters to the resource have been added.
An endpoint for order creation as well as ``…/mark_refunded/`` has been added.
.. versionchanged:: 2.0
The ``order.payment_date`` and ``order.payment_provider`` attributes have been deprecated in favor of the new
nested ``payments`` and ``refunds`` resources, but will still be served and removed in 2.2. The ``require_approval``
attribute has been added, as have been the ``…/approve/`` and ``…/deny/`` endpoints.
.. versionchanged:: 2.3
The ``sales_channel`` attribute has been added.
.. versionchanged:: 2.4
``order.status`` can no longer be ``r``, ``…/mark_canceled/`` now accepts a ``cancellation_fee`` parameter and
``…/mark_refunded/`` has been deprecated.
.. versionchanged:: 2.5
The ``testmode`` attribute has been added and ``DELETE`` has been implemented for orders.
.. versionchanged:: 3.1
The ``invoice_address.state`` and ``url`` attributes have been added. When creating orders through the API,
vouchers are now supported and many fields are now optional.
.. versionchanged:: 3.5
The ``order.fees.canceled`` attribute has been added.
@@ -163,6 +110,14 @@ last_modified datetime Last modificati
The ``exclude`` and ``subevent_after`` query parameter has been added.
.. versionchanged:: 3.13
The ``subevent_before`` query parameter has been added.
.. versionchanged:: 3.14
The ``phone`` attribute has been added.
.. _order-position-resource:
@@ -211,7 +166,7 @@ downloads list of objects List of ticket
└ url string Download URL
answers list of objects Answers to user-defined questions
├ question integer Internal ID of the answered question
├ answer string Text representation of the answer
├ answer string Text representation of the answer (URL if answer is a file)
├ question_identifier string The question's ``identifier`` field
├ options list of integers Internal IDs of selected option(s)s (only for choice types)
└ option_identifiers list of strings The ``identifier`` fields of the selected option(s)s
@@ -224,30 +179,6 @@ pdf_data object Data object req
``pdf_data=true`` query parameter to your request.
===================================== ========================== =======================================================
.. versionchanged:: 1.7
The attribute ``tax_rule`` has been added.
.. versionchanged:: 1.11
The attribute ``checkins.list`` has been added.
.. versionchanged:: 1.14
The attributes ``answers.question_identifier`` and ``answers.option_identifiers`` have been added.
.. versionchanged:: 1.16
The attributes ``pseudonymization_id`` and ``pdf_data`` have been added.
.. versionchanged:: 3.0
The attribute ``seat`` has been added.
.. versionchanged:: 3.2
The value ``auto_checked_in`` has been added to the ``checkins``-attribute.
.. versionchanged:: 3.3
The ``url`` of a ticket ``download`` can now also return a ``text/uri-list`` instead of a file. See
@@ -265,6 +196,10 @@ pdf_data object Data object req
The ``checkin.type`` attribute has been added.
.. versionchanged:: 3.16
Answers to file questions are now returned as an URL.
.. _order-payment-resource:
Order payment resource
@@ -293,14 +228,6 @@ details object Payment-specifi
the object is empty.
===================================== ========================== =======================================================
.. versionchanged:: 2.0
This resource has been added.
.. versionchanged:: 3.1
The attributes ``payment_url`` and ``details`` have been added.
.. _order-refund-resource:
Order refund resource
@@ -316,21 +243,14 @@ state string Payment state,
source string How this refund has been created, one of ``buyer``, ``admin``, or ``external``
amount money (string) Payment amount
created datetime Date and time of creation of this payment
payment_date datetime Date and time of completion of this payment (or ``null``)
comment string Reason for refund (shown to the customer in some cases, can be ``null``).
execution_date datetime Date and time of completion of this refund (or ``null``)
provider string Identification string of the payment provider
===================================== ========================== =======================================================
.. versionchanged:: 2.0
This resource has been added.
List of all orders
------------------
.. versionchanged:: 1.15
Filtering for emails or order codes is now case-insensitive.
.. versionchanged:: 3.5
The ``include_canceled_positions`` and ``include_canceled_fees`` query parameters have been added.
@@ -368,6 +288,7 @@ List of all orders
"secret": "k24fiuwvu8kxz3y1",
"url": "https://test.pretix.eu/dummy/dummy/order/ABC12/k24fiuwvu8kxz3y1/",
"email": "tester@example.org",
"phone": "+491234567",
"locale": "en",
"sales_channel": "web",
"datetime": "2017-12-01T10:00:00Z",
@@ -490,7 +411,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 datetime subevent_after: Only return orders that contain a ticket for a subevent taking place after the given date. This is an exclusive after, and it considers the **end** of the subevent (or its start, if the end is not set).
:query datetime subevent_before: Only return orders that contain a ticket for a subevent taking place after the given date. This is an exclusive before, and it considers the **start** of the subevent.
:query 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
@@ -534,6 +456,7 @@ Fetching individual orders
"secret": "k24fiuwvu8kxz3y1",
"url": "https://test.pretix.eu/dummy/dummy/order/ABC12/k24fiuwvu8kxz3y1/",
"email": "tester@example.org",
"phone": "+491234567",
"locale": "en",
"sales_channel": "web",
"datetime": "2017-12-01T10:00:00Z",
@@ -700,6 +623,8 @@ Updating order fields
* ``email``
* ``phone``
* ``checkin_attention``
* ``locale``
@@ -935,9 +860,9 @@ 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, regardless of
* ``send_email`` (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``.
``false``. Used to be ``send_mail`` before pretix 3.14.
If you want to use add-on products, you need to set the ``positionid`` fields of all positions manually
to incrementing integers starting with ``1``. Then, you can reference one of these
@@ -1431,21 +1356,6 @@ Sending e-mails
List of all order positions
---------------------------
.. versionchanged:: 1.15
The order positions endpoint has been extended by the filter queries ``item__in``, ``variation__in``,
``order__status__in``, ``subevent__in``, ``addon_to__in`` and ``search``. The search for attendee names and order
codes is now case-insensitive.
.. versionchanged:: 2.0
The order positions endpoint has been extended by the filter queries ``voucher``, ``voucher__code`` and
``pseudonymization_id``.
.. versionchanged:: 3.2
The value ``auto_checked_in`` has been added to the ``checkins``-attribute.
.. versionchanged:: 3.5
The ``include_canceled_positions`` and ``include_canceled_fees`` query parameters have been added.
@@ -1692,6 +1602,68 @@ Order position ticket download
Manipulating individual positions
---------------------------------
.. versionchanged:: 3.15
The ``PATCH`` method has been added for individual positions.
.. http:patch:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/(id)/
Updates specific fields on an order position. Currently, only the following fields are supported:
* ``attendee_email``
* ``attendee_name_parts`` or ``attendee_name``
* ``company``
* ``street``
* ``zipcode``
* ``city``
* ``country``
* ``state``
* ``answers``: If specified, you will need to provide **all** answers for this order position.
Validation is handled the same way as when creating orders through the API. You are therefore
expected to provide ``question``, ``answer``, and possibly ``options``. ``question_identifier``
and ``option_identifiers`` will be ignored. As a special case, you can submit the magic value
``"file:keep"`` as the answer to a file question to keep the current value without re-uploading it.
**Example request**:
.. sourcecode:: http
PATCH /api/v1/organizers/bigevents/events/sampleconf/orderpositions/23442/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"attendee_email": "other@example.org"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
(Full order resource, see above.)
:param organizer: The ``slug`` field of the organizer of the event
:param event: The ``slug`` field of the event
:param id: The ``id`` field of the order position to update
:statuscode 200: no error
:statuscode 400: The order could not be updated due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to update this order.
.. http:delete:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/(id)/
Deletes an order position, identified by its internal ID.
@@ -1724,10 +1696,6 @@ Manipulating individual positions
Order payment endpoints
-----------------------
.. versionchanged:: 2.0
These endpoints have been added.
.. versionchanged:: 3.6
Payments can now be created through the API.
@@ -1971,6 +1939,7 @@ Order payment endpoints
"amount": "23.00",
"payment_date": "2017-12-04T12:13:12Z",
"info": {},
"send_email": false,
"provider": "banktransfer"
}
@@ -2006,10 +1975,6 @@ Order payment endpoints
Order refund endpoints
----------------------
.. versionchanged:: 2.0
These endpoints have been added.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/refunds/
Returns a list of all refunds for an order.
@@ -2043,6 +2008,7 @@ Order refund endpoints
"payment": 1,
"created": "2017-12-01T10:00:00Z",
"execution_date": "2017-12-04T12:13:12Z",
"comment": "Cancellation",
"provider": "banktransfer"
}
]
@@ -2085,6 +2051,7 @@ Order refund endpoints
"payment": 1,
"created": "2017-12-01T10:00:00Z",
"execution_date": "2017-12-04T12:13:12Z",
"comment": "Cancellation",
"provider": "banktransfer"
}
@@ -2119,6 +2086,7 @@ Order refund endpoints
"amount": "23.00",
"payment": 1,
"execution_date": null,
"comment": "Cancellation",
"provider": "manual",
"mark_canceled": false,
"mark_pending": true
@@ -2140,6 +2108,7 @@ Order refund endpoints
"payment": 1,
"created": "2017-12-01T10:00:00Z",
"execution_date": null,
"comment": "Cancellation",
"provider": "manual"
}

View File

@@ -90,3 +90,120 @@ Endpoints
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view it.
Organizer settings
------------------
pretix organizers and events have lots and lots of parameters of different types that are stored in a key-value store on our system.
Since many of these settings depend on each other in complex ways, we can not give direct access to all of these
settings through the API. However, we do expose many of the simple and useful flags through the API.
Please note that the available settings flags change between pretix versions, and we do not give a guarantee on backwards-compatibility like with other parts of the API.
Therefore, we're also not including a list of the options here, but instead recommend to look at the endpoint output
to see available options. The ``explain=true`` flag enables a verbose mode that provides you with human-readable
information about the properties.
.. note:: Please note that this is not a complete representation of all organizer settings. You will find more settings
in the web interface.
.. warning:: This API is intended for advanced users. Even though we take care to validate your input, you will be
able to break your shops using this API by creating situations of conflicting settings. Please take care.
.. versionchanged:: 3.14
Initial support for settings has been added to the API.
.. http:get:: /api/v1/organizers/(organizer)/settings/
Get current values of organizer settings.
Permission required: "Can change organizer settings"
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/settings/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example standard response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"event_list_type": "calendar",
}
**Example verbose response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"event_list_type":
{
"value": "calendar",
"label": "Default overview style",
"help_text": "If your event series has more than 50 dates in the future, only the month or week calendar can be used."
}
},
}
:param organizer: The ``slug`` field of the organizer to access
:query explain: Set to ``true`` to enable verbose response mode
: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:patch:: /api/v1/organizers/(organizer)/settings/
Updates organizer settings. Note that ``PUT`` is not allowed here, only ``PATCH``.
.. warning::
Settings can be stored at different levels in pretix. If a value is not set on organizer level, a default setting
from a higher level (global) will be returned. If you explicitly set a setting on organizer level, it
will no longer be inherited from the higher levels. Therefore, we recommend you to send only settings that you
explicitly want to set on organizer level. To unset a settings, pass ``null``.
**Example request**:
.. sourcecode:: http
PATCH /api/v1/organizers/bigevents/settings/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"event_list_type": "calendar"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"event_list_type": "calendar",
}
:param organizer: The ``slug`` field of the organizer to update
:statuscode 200: no error
:statuscode 400: The organizer could not be updated 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.

View File

@@ -19,10 +19,6 @@ identifier string An arbitrary st
answer multi-lingual string The displayed value of this option
===================================== ========================== =======================================================
.. versionchanged:: 1.12
This resource has been added.
Endpoints
---------

View File

@@ -1,4 +1,7 @@
.. spelling:: checkin
.. spelling::
checkin
datetime
.. _rest-questions:
@@ -53,6 +56,13 @@ options list of objects In case of ques
├ identifier string An arbitrary string that can be used for matching with
other sources.
└ answer multi-lingual string The displayed value of this option
valid_number_min string Minimum value for number questions (optional)
valid_number_max string Maximum value for number questions (optional)
valid_date_min date Minimum value for date questions (optional)
valid_date_max date Maximum value for date questions (optional)
valid_datetime_min datetime Minimum value for date and time questions (optional)
valid_datetime_max datetime Maximum value for date and time questions (optional)
valid_file_portrait boolean Turn on file validation for portrait photos
dependency_question integer Internal ID of a different question. The current
question will only be shown if the question given in
this attribute is set to the value given in
@@ -66,32 +76,18 @@ dependency_value string An old version
for one value. **Deprecated.**
===================================== ========================== =======================================================
.. versionchanged:: 1.12
The values ``D``, ``H``, and ``W`` for the field ``type`` are now allowed and the ``ask_during_checkin`` field has
been added.
.. versionchanged:: 1.14
Write methods have been added. The attribute ``identifier`` has been added to both the resource itself and the
options resource. The ``position`` attribute has been added to the options resource.
.. versionchanged:: 2.7
The attribute ``hidden`` and the question type ``CC`` have been added.
.. versionchanged:: 3.0
The attribute ``dependency_values`` has been added.
.. versionchanged:: 3.1
The attribute ``print_on_invoice`` has been added.
.. versionchanged:: 3.5
The attribute ``help_text`` has been added.
.. versionchanged:: 3.14
The attributes ``valid_*`` have been added.
.. versionchanged:: 3.18
The attribute ``valid_file_portrait`` have been added.
Endpoints
---------
@@ -137,6 +133,13 @@ Endpoints
"ask_during_checkin": false,
"hidden": false,
"print_on_invoice": false,
"valid_number_min": null,
"valid_number_max": null,
"valid_date_min": null,
"valid_date_max": null,
"valid_datetime_min": null,
"valid_datetime_max": null,
"valid_file_portrait": false,
"dependency_question": null,
"dependency_value": null,
"dependency_values": [],
@@ -208,6 +211,13 @@ Endpoints
"ask_during_checkin": false,
"hidden": false,
"print_on_invoice": false,
"valid_number_min": null,
"valid_number_max": null,
"valid_date_min": null,
"valid_date_max": null,
"valid_datetime_min": null,
"valid_datetime_max": null,
"valid_file_portrait": false,
"dependency_question": null,
"dependency_value": null,
"dependency_values": [],
@@ -302,6 +312,13 @@ Endpoints
"dependency_question": null,
"dependency_value": null,
"dependency_values": [],
"valid_number_min": null,
"valid_number_max": null,
"valid_date_min": null,
"valid_date_max": null,
"valid_datetime_min": null,
"valid_datetime_max": null,
"valid_file_portrait": false,
"options": [
{
"id": 1,
@@ -377,6 +394,13 @@ Endpoints
"dependency_question": null,
"dependency_value": null,
"dependency_values": [],
"valid_number_min": null,
"valid_number_max": null,
"valid_date_min": null,
"valid_date_max": null,
"valid_datetime_min": null,
"valid_datetime_max": null,
"valid_file_portrait": false,
"options": [
{
"id": 1,

View File

@@ -30,14 +30,6 @@ release_after_exit boolean Whether the quo
have been scanned at an exit.
===================================== ========================== =======================================================
.. versionchanged:: 1.10
The write operations ``POST``, ``PATCH``, ``PUT``, and ``DELETE`` have been added.
.. versionchanged:: 3.0
The attributes ``close_when_sold_out`` and ``closed`` have been added.
.. versionchanged:: 3.10
The attribute ``release_after_exit`` has been added.

View File

@@ -20,10 +20,6 @@ layout object JSON representa
still evolves. The version in use can be found `here`_.
===================================== ========================== =======================================================
.. versionchanged:: 3.0
This endpoint has been added.
Endpoints
---------

View File

@@ -33,18 +33,23 @@ date_to datetime The sub-event's
date_admission datetime The sub-event's admission date (or ``null``)
presale_start datetime The sub-date at which the ticket shop opens (or ``null``)
presale_end datetime The sub-date at which the ticket shop closes (or ``null``)
frontpage_text multi-lingual string The description of the event (or ``null``)
location multi-lingual string The sub-event location (or ``null``)
geo_lat float Latitude of the location (or ``null``)
geo_lon float Longitude of the location (or ``null``)
item_price_overrides list of objects List of items for which this sub-event overrides the
default price
default price or settings
├ item integer The internal item ID
├ disabled boolean If ``true``, item should not be available for this sub-event
├ available_from datetime Start of availability (or ``null``)
├ available_until datetime End of availability (or ``null``)
└ 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
the default price or settings
├ variation integer The internal variation ID
├ disabled boolean If ``true``, variation should not be available for this sub-event
├ available_from datetime Start of availability (or ``null``)
├ available_until datetime End of availability (or ``null``)
└ 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
@@ -54,25 +59,6 @@ seat_category_mapping object An object mappi
last_modified datetime Last modification of this object
===================================== ========================== =======================================================
.. versionchanged:: 1.7
The ``meta_data`` field has been added.
.. versionchanged:: 2.1
The ``event`` field has been added, together with filters on the list of dates and an organizer-level list.
.. versionchanged:: 2.6
The write operations ``POST``, ``PATCH``, ``PUT``, and ``DELETE`` have been added.
.. versionchanged:: 2.7
The attribute ``is_public`` has been added.
.. versionchanged:: 3.0
The attributes ``seating_plan`` and ``seat_category_mapping`` have been added.
.. versionchanged:: 3.3
The attributes ``geo_lat`` and ``geo_lon`` have been added.
@@ -85,6 +71,10 @@ last_modified datetime Last modificati
The ``last_modified`` attribute has been added.
.. versionchanged:: 3.18
The ``available_from``/``available_until`` attributes have been added to ``item_price_overrides`` and ``variation_price_overrides``.
Endpoints
---------
@@ -137,6 +127,8 @@ Endpoints
{
"item": 2,
"disabled": false,
"available_from": null,
"available_until": null,
"price": "12.00"
}
],
@@ -197,6 +189,8 @@ Endpoints
{
"item": 2,
"disabled": false,
"available_from": null,
"available_until": null,
"price": "12.00"
}
],
@@ -232,6 +226,8 @@ Endpoints
{
"item": 2,
"disabled": false,
"available_from": null,
"available_until": null,
"price": "12.00"
}
],
@@ -288,6 +284,8 @@ Endpoints
{
"item": 2,
"disabled": false,
"available_from": null,
"available_until": null,
"price": "12.00"
}
],
@@ -325,6 +323,8 @@ Endpoints
{
"item": 2,
"disabled": false,
"available_from": null,
"available_until": null,
"price": "23.42"
}
],
@@ -358,6 +358,8 @@ Endpoints
{
"item": 2,
"disabled": false,
"available_from": null,
"available_until": null,
"price": "23.42"
}
],
@@ -447,6 +449,8 @@ Endpoints
{
"item": 2,
"disabled": false,
"available_from": null,
"available_until": null,
"price": "12.00"
}
],

View File

@@ -24,14 +24,6 @@ home_country string Merchant countr
``null`` or empty string
===================================== ========================== =======================================================
.. versionchanged:: 1.7
This resource has been added.
.. versionchanged:: 1.9
The write operations ``POST``, ``PATCH``, ``PUT``, and ``DELETE`` have been added.
Endpoints
---------

View File

@@ -1,4 +1,4 @@
.. spelling:: fullname
.. spelling:: fullname checkin
.. _`rest-teams`:
@@ -32,6 +32,7 @@ can_view_orders boolean
can_change_orders boolean
can_view_vouchers boolean
can_change_vouchers boolean
can_checkin_orders boolean
===================================== ========================== =======================================================
Team member resource

View File

@@ -46,14 +46,6 @@ show_hidden_items boolean Only if set to
===================================== ========================== =======================================================
.. versionchanged:: 1.9
The write operations ``POST``, ``PATCH``, ``PUT``, and ``DELETE`` have been added.
.. versionchanged:: 3.0
The attribute ``show_hidden_items`` has been added.
.. versionchanged:: 3.4
The attribute ``seat`` has been added.

View File

@@ -13,7 +13,10 @@ Field Type Description
===================================== ========================== =======================================================
id integer Internal ID of the waiting list entry
created datetime Creation date of the waiting list entry
name string Name of the user on the waiting list (or ``null``)
name_parts object of strings Decomposition of name of the user (or ``null``)
email string Email address of the user on the waiting list
phone string Phone number of the user on the waiting list (or ``null``)
voucher integer Internal ID of the voucher sent to this user. If
this field is set, the user has been sent a voucher
and is no longer waiting. If it is ``null``, the

View File

@@ -31,8 +31,10 @@ action_types list of strings A list of actio
The following values for ``action_types`` are valid with pretix core:
* ``pretix.event.order.placed``
* ``pretix.event.order.placed.require_approval``
* ``pretix.event.order.paid``
* ``pretix.event.order.canceled``
* ``pretix.event.order.reactivated``
* ``pretix.event.order.expired``
* ``pretix.event.order.modified``
* ``pretix.event.order.contact.changed``
@@ -42,6 +44,12 @@ The following values for ``action_types`` are valid with pretix core:
* ``pretix.event.order.denied``
* ``pretix.event.checkin``
* ``pretix.event.checkin.reverted``
* ``pretix.event.added``
* ``pretix.event.changed``
* ``pretix.event.deleted``
* ``pretix.subevent.added``
* ``pretix.subevent.changed``
* ``pretix.subevent.deleted``
Installed plugins might register more valid values.

View File

@@ -9,4 +9,5 @@ Table of contents
api/index
development/index
plugins/index
license/faq

View File

@@ -14,7 +14,9 @@ Control panel views
-------------------
If you want to add a custom view to the control area of an event, just register an URL in your
``urls.py`` that lives in the ``/control/`` subpath::
``urls.py`` that lives in the ``/control/`` subpath:
.. code-block:: python
from django.conf.urls import url
@@ -44,7 +46,9 @@ If only the ``organizer`` parameter is present, it will be ensured that:
* The user has permission to access view the current organizer
If you want to require specific permission types, we provide you with a decorator or a mixin for
your views::
your views:
.. code-block:: python
from pretix.control.permissions import (
event_permission_required, EventPermissionRequiredMixin
@@ -61,8 +65,9 @@ your views::
...
Similarly, there is ``organizer_permission_required`` and ``OrganizerPermissionRequiredMixin``. In case of
event-related views, there is also a signal that allows you to add the view to the event navigation like this::
event-related views, there is also a signal that allows you to add the view to the event navigation like this:
.. code-block:: python
from django.urls import resolve, reverse
from django.dispatch import receiver
@@ -90,7 +95,9 @@ Event settings view
-------------------
A special case of a control panel view is a view hooked into the event settings page. For this case, there is a
special navigation signal::
special navigation signal:
.. code-block:: python
@receiver(nav_event_settings, dispatch_uid='friends_tickets_nav_settings')
def navbar_settings(sender, request, **kwargs):
@@ -105,7 +112,9 @@ special navigation signal::
}]
Also, your view should inherit from ``EventSettingsViewMixin`` and your template from ``pretixcontrol/event/settings_base.html``
for good integration. If you just want to display a form, you could do it like the following::
for good integration. If you just want to display a form, you could do it like the following:
.. code-block:: python
class MySettingsView(EventSettingsViewMixin, EventSettingsFormView):
model = Event
@@ -147,7 +156,9 @@ Including a custom view into the participant-facing frontend is a little bit dif
no path prefix like ``control/``.
First, define your URL in your ``urls.py``, but this time in the ``event_patterns`` section and wrapped by
``event_url``::
``event_url``:
.. code-block:: python
from pretix.multidomain import event_url
@@ -182,8 +193,9 @@ standard Django request handling: There are `ViewSets`_ to group related views i
automatically build URL configurations from them.
To integrate a custom viewset with pretix' REST API, you can just register with one of our routers within the
``urls.py`` module of your plugin::
``urls.py`` module of your plugin:
.. code-block:: python
from pretix.api.urls import event_router, router, orga_router
@@ -200,7 +212,9 @@ in the control panel. However, you need to make sure on your own only to return
.event`` and ``request.organizer`` are available as usual.
To require a special permission like ``can_view_orders``, you do not need to inherit from a special ViewSet base
class, you can just set the ``permission`` attribute on your viewset::
class, you can just set the ``permission`` attribute on your viewset:
.. code-block:: python
class MyViewSet(ModelViewSet):
permission = 'can_view_orders'
@@ -208,8 +222,9 @@ class, you can just set the ``permission`` attribute on your viewset::
If you want to check the permission only for some methods of your viewset, you have to do it yourself. Note here that
API authentications can be done via user sessions or API tokens and you should therefore check something like the
following::
following:
.. code-block:: python
perm_holder = (request.auth if isinstance(request.auth, TeamAPIToken) else request.user)
if perm_holder.has_event_permission(request.event.organizer, request.event, 'can_view_orders'):

View File

@@ -15,7 +15,9 @@ Output registration
The email HTML renderer API does not make a lot of usage from signals, however, it
does use a signal to get a list of all available email renderers. Your plugin
should listen for this signal and return the subclass of ``pretix.base.email.BaseHTMLMailRenderer``
that we'll provide in this plugin::
that we'll provide in this plugin:
.. code-block:: python
from django.dispatch import receiver
@@ -72,7 +74,9 @@ class ``TemplateBasedMailRenderer`` that you can re-use to perform the following
* Call `inlinestyler`_ to convert all ``<style>`` style sheets to inline ``style=""``
attributes for better compatibility
To use it, you just need to implement some variables::
To use it, you just need to implement some variables:
.. code-block:: python
class ClassicMailRenderer(TemplateBasedMailRenderer):
verbose_name = _('pretix default')

View File

@@ -17,7 +17,9 @@ Exporter registration
The exporter API does not make a lot of usage from signals, however, it does use a signal to get a list of
all available exporters. Your plugin should listen for this signal and return the subclass of
``pretix.base.exporter.BaseExporter``
that we'll provide in this plugin::
that we'll provide in this plugin:
.. code-block:: python
from django.dispatch import receiver
@@ -31,7 +33,9 @@ that we'll provide in this plugin::
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::
and return the subclass of ``pretix.base.exporter.BaseExporter`` that we'll provide in this plugin:
.. code-block:: python
from django.dispatch import receiver

View File

@@ -34,7 +34,7 @@ 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, 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
:members: html_head, html_footer, footer_link, global_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
@@ -58,7 +58,7 @@ Backend
.. automodule:: pretix.control.signals
:members: nav_event, html_head, html_page_start, quota_detail_html, nav_topbar, nav_global, nav_organizer, nav_event_settings,
order_info, event_settings_widget, oauth_application_registered, order_position_buttons, subevent_forms,
item_formsets, order_search_filter_q
item_formsets, order_search_filter_q, order_search_forms
.. automodule:: pretix.base.signals
:members: logentry_display, logentry_object_link, requiredaction_display, timeline_events
@@ -79,7 +79,7 @@ Ticket designs
""""""""""""""
.. automodule:: pretix.base.signals
:members: layout_text_variables
:members: layout_text_variables, layout_image_variables
.. automodule:: pretix.plugins.ticketoutputpdf.signals
:members: override_layout

View File

@@ -15,7 +15,9 @@ Output registration
The invoice renderer API does not make a lot of usage from signals, however, it
does use a signal to get a list of all available invoice renderers. Your plugin
should listen for this signal and return the subclass of ``pretix.base.invoice.BaseInvoiceRenderer``
that we'll provide in this plugin::
that we'll provide in this plugin:
.. code-block:: python
from django.dispatch import receiver

View File

@@ -19,7 +19,9 @@ Provider registration
The payment provider API does not make a lot of usage from signals, however, it
does use a signal to get a list of all available payment providers. Your plugin
should listen for this signal and return the subclass of ``pretix.base.payment.BasePaymentProvider``
that the plugin will provide::
that the plugin will provide:
.. code-block:: python
from django.dispatch import receiver
@@ -104,14 +106,22 @@ The provider class
.. automethod:: payment_control_render
.. automethod:: payment_control_render_short
.. automethod:: payment_refund_supported
.. automethod:: payment_partial_refund_supported
.. automethod:: payment_presale_render
.. automethod:: execute_refund
.. automethod:: refund_control_render
.. automethod:: new_refund_control_form_render
.. automethod:: new_refund_control_form_process
.. automethod:: api_payment_details
.. automethod:: matching_id
@@ -140,7 +150,9 @@ it is necessary to introduce additional views. One example is the PayPal
provider. It redirects the user to a PayPal website in the
:py:meth:`BasePaymentProvider.checkout_prepare` step of the checkout process
and provides PayPal with a URL to redirect back to. This URL points to a
view which looks roughly like this::
view which looks roughly like this:
.. code-block:: python
@login_required
def success(request):

View File

@@ -13,7 +13,9 @@ Placeholder registration
The placeholder API does not make a lot of usage from signals, however, it
does use a signal to get a list of all available email placeholders. Your plugin
should listen for this signal and return an instance of a subclass of ``pretix.base.email.BaseMailTextPlaceholder``::
should listen for this signal and return an instance of a subclass of ``pretix.base.email.BaseMailTextPlaceholder``:
.. code-block:: python
from django.dispatch import receiver
@@ -71,7 +73,9 @@ Helper class for simple placeholders
------------------------------------
pretix ships with a helper class that makes it easy to provide placeholders based on simple
functions::
functions:
.. code-block:: python
placeholder = SimpleFunctionalMailTextPlaceholder(
'code', ['order'], lambda order: order.code, sample='F8VVL'

View File

@@ -55,7 +55,9 @@ restricted boolean (optional) ``False`` by default, restricts a plugin
compatibility string Specifier for compatible pretix versions.
================== ==================== ===========================================================
A working example would be::
A working example would be:
.. code-block:: python
try:
from pretix.base.plugins import PluginConfig
@@ -81,7 +83,7 @@ A working example would be::
default_app_config = 'pretix_paypal.PaypalApp'
The ``AppConfig`` class may implement a property ``compatiblity_errors``, that checks
The ``AppConfig`` class may implement a property ``compatibility_errors``, that checks
whether the pretix installation meets all requirements of the plugin. If so,
it should contain ``None`` or an empty list, otherwise a list of strings containing
human-readable error messages. We recommend using the ``django.utils.functional.cached_property``
@@ -96,7 +98,9 @@ Plugin registration
Somehow, pretix needs to know that your plugin exists at all. For this purpose, we
make use of the `entry point`_ feature of setuptools. To register a plugin that lives
in a separate python package, your ``setup.py`` should contain something like this::
in a separate python package, your ``setup.py`` should contain something like this:
.. code-block:: python
setup(
args...,
@@ -118,7 +122,9 @@ The various components of pretix define a number of signals which your plugin ca
listen for. We will go into the details of the different signals in the following
pages. We suggest that you put your signal receivers into a ``signals`` submodule
of your plugin. You should extend your ``AppConfig`` (see above) by the following
method to make your receivers available::
method to make your receivers available:
.. code-block:: python
class PaypalApp(AppConfig):
@@ -127,7 +133,9 @@ method to make your receivers available::
from . import signals # NOQA
You can optionally specify code that is executed when your plugin is activated for an event
in the ``installed`` method::
in the ``installed`` method:
.. code-block:: python
class PaypalApp(AppConfig):

View File

@@ -74,7 +74,7 @@ looks like this:
def generate_files(self) -> List[Tuple[str, str, str]]:
yield 'invoice-addresses.json', 'application/json', json.dumps({
ia.order.code: InvoiceAdddressSerializer(ia).data
ia.order.code: InvoiceAddressSerializer(ia).data
for ia in InvoiceAddress.objects.filter(order__event=self.event)
}, indent=4)

View File

@@ -17,7 +17,9 @@ Output registration
The ticket output API does not make a lot of usage from signals, however, it
does use a signal to get a list of all available ticket outputs. Your plugin
should listen for this signal and return the subclass of ``pretix.base.ticketoutput.BaseTicketOutput``
that we'll provide in this plugin::
that we'll provide in this plugin:
.. code-block:: python
from django.dispatch import receiver

View File

@@ -82,11 +82,15 @@ Orders
^^^^^^
If a customer completes the checkout process, an **Order** will be created containing all the entered information.
An order can be in one of currently four states that are listed in the diagram below:
An order can be in one of currently six states that are listed in the diagram below:
.. image:: /images/order_states.png
There are additional "fake" states that are displayed like states but not represented as states in the system:
The dotted lines represent status changes that usually do not happen as part of the regular process, but can be
performed manually in the admin backend.
For historical reasons, there are only four valid values of the ``status`` field, and the two additional states are
represented differently:
* An order is considered **canceled (with paid fee)** if it is in **paid** status but does not include any non-cancelled positions.

View File

@@ -12,7 +12,9 @@ Implementing a task
-------------------
A common pattern for implementing asynchronous tasks can be seen a lot in ``pretix.base.services``
and looks like this::
and looks like this:
.. code-block:: python
from pretix.celery_app import app
@@ -34,13 +36,15 @@ If your user needs to wait for the response of the asynchronous task, there are
that will probably move to ``pretix.base`` at some point. They consist of the view mixin ``AsyncAction`` that allows
you to easily write a view that kicks off and waits for an asynchronous task. ``AsyncAction`` will determine whether
to run the task asynchronously or not and will do some magic to look nice for users with and without JavaScript support.
A usage example taken directly from the code is::
A usage example taken directly from the code is:
.. code-block:: python
class OrderCancelDo(EventViewMixin, OrderDetailMixin, AsyncAction, View):
"""
A view that executes a task asynchronously. A POST request will kick off the
task into the background or run it in the foreground if celery is not installed.
In the former case, subsequent GET calls can be used to determinine the current
In the former case, subsequent GET calls can be used to determine the current
status of the task.
"""
@@ -79,7 +83,9 @@ A usage example taken directly from the code is::
return super().get_error_message(exception)
On the client side, this can be used by simply adding a ``data-asynctask`` attribute to an HTML form. This will enable
AJAX sending of the form and display a loading indicator::
AJAX sending of the form and display a loading indicator:
.. code-block:: html
<form method="post" data-asynctask
action="{% eventurl request.event "presale:event.order.cancel.do" %}">

View File

@@ -27,7 +27,9 @@ numbers and dates, ``LazyDate`` and ``LazyNumber``. There also is a ``LazyLocale
exceptions with gettext-localized exception messages.
Last, but definitely not least, we have the ``language`` context manager (``pretix.base.i18n.language``) that allows
you to execute a piece of code with a different locale::
you to execute a piece of code with a different locale:
.. code-block:: python
with language('de'):
render_mail_template()

View File

@@ -16,7 +16,9 @@ We recommend all relevant models to inherit from ``LoggedModel`` as it simplifie
.. autoclass:: pretix.base.models.LoggedModel
:members: log_action, all_logentries
To actually log an action, you can just call the ``log_action`` method on your object::
To actually log an action, you can just call the ``log_action`` method on your object:
.. code-block:: python
order.log_action('pretix.event.order.canceled', user=user, data={})
@@ -29,7 +31,9 @@ Logging form actions
""""""""""""""""""""
A very common use case is to log the changes to a model that have been done in a ``ModelForm``. In this case,
we generally use a custom ``form_valid`` method on our ``FormView`` that looks like this::
we generally use a custom ``form_valid`` method on our ``FormView`` that looks like this:
.. code-block:: python
@transaction.atomic
def form_valid(self, form):
@@ -40,7 +44,9 @@ we generally use a custom ``form_valid`` method on our ``FormView`` that looks l
messages.success(self.request, _('Your changes have been saved.'))
return super().form_valid(form)
It gets a little bit more complicated if your form allows file uploads::
It gets a little bit more complicated if your form allows file uploads:
.. code-block:: python
@transaction.atomic
def form_valid(self, form):
@@ -67,7 +73,9 @@ following ready-to-include template::
We now need a way to translate the action codes like ``pretix.event.changed`` into human-readable
strings. The :py:attr:`pretix.base.signals.logentry_display` signals allows you to do so. A simple
implementation could look like::
implementation could look like:
.. code-block:: python
from django.utils.translation import gettext as _
from pretix.base.signals import logentry_display
@@ -88,7 +96,9 @@ Sending notifications
If you think that the logged information might be important or urgent enough to send out a notification to interested
organizers. In this case, you should listen for the :py:attr:`pretix.base.signals.register_notification_types` signal
to register a notification type::
to register a notification type:
.. code-block:: python
@receiver(register_notification_types)
def register_my_notification_types(sender, **kwargs):
@@ -103,7 +113,9 @@ You should subclass the base ``NotificationType`` class and implement all its me
.. autoclass:: pretix.base.notifications.NotificationType
:members: action_type, verbose_name, required_permission, build_notification
A simple implementation could look like this::
A simple implementation could look like this:
.. code-block:: python
class MyNotificationType(NotificationType):
required_permission = "can_view_orders"
@@ -143,7 +155,9 @@ Logging technical information
-----------------------------
If you just want to log technical information to a log file on disk that does not need to be parsed
and displayed later, you can just use Python's ``logging`` module::
and displayed later, you can just use Python's ``logging`` module:
.. code-block:: python
import logging
@@ -151,7 +165,9 @@ and displayed later, you can just use Python's ``logging`` module::
logger.info('Startup complete.')
This is also very useful to provide debugging information when an exception occurs::
This is also very useful to provide debugging information when an exception occurs:
.. code-block:: python
try:
foo()

View File

@@ -15,7 +15,9 @@ Requiring permissions for a view
--------------------------------
pretix provides a number of useful mixins and decorators that allow you to specify that a user needs a certain
permission level to access a view::
permission level to access a view:
.. code-block:: python
from pretix.control.permissions import (
OrganizerPermissionRequiredMixin, organizer_permission_required
@@ -44,7 +46,9 @@ permission level to access a view::
# Only users with *any* permission on this organizer can access this
Of course, the same is available on event level::
Of course, the same is available on event level:
.. code-block:: python
from pretix.control.permissions import (
EventPermissionRequiredMixin, event_permission_required
@@ -73,7 +77,9 @@ Of course, the same is available on event level::
# Only users with *any* permission on this event can access this
You can also require that this view is only accessible by system administrators with an active "admin session"
(see below for what this means)::
(see below for what this means):
.. code-block:: python
from pretix.control.permissions import (
AdministratorPermissionRequiredMixin, administrator_permission_required
@@ -89,7 +95,9 @@ You can also require that this view is only accessible by system administrators
# ...
In rare cases it might also be useful to expose a feature only to people who have a staff account but do not
necessarily have an active admin session::
necessarily have an active admin session:
.. code-block:: python
from pretix.control.permissions import (
StaffMemberRequiredMixin, staff_member_required

View File

@@ -39,7 +39,9 @@ subclass that also adds support for internationalized fields:
.. autoclass:: pretix.base.forms.SettingsForm
You can simply use it like this::
You can simply use it like this:
.. code-block:: python
class EventSettingsForm(SettingsForm):
show_date_to = forms.BooleanField(
@@ -56,7 +58,9 @@ You can simply use it like this::
Defaults in plugins
-------------------
Plugins can add custom hardcoded defaults in the following way::
Plugins can add custom hardcoded defaults in the following way:
.. code-block:: python
from pretix.base.settings import settings_hierarkey

View File

@@ -67,6 +67,10 @@ Then, create the local database::
A first user with username ``admin@localhost`` and password ``admin`` will be automatically
created.
You will also need to install a few JavaScript dependencies::
make npminstall
If you want to see pretix in a different language than English, you have to compile our language
files::

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View File

@@ -0,0 +1,34 @@
@startuml
participant User
collections "OrderPayment\nOrderRefund" as P
collections "Order\nOrderPosition" as O
collections "Invoice\nInvoiceLine" as I
User -> O: Order placed (€100)
rnote over O #6DD96D: Order A1B2C\nstatus = **n**\ntotal = €100
O -> P: Payment created
O -> I: Invoice created\n(can also happen later)
rnote over I #6DD96D: Invoice 00001\n€100
rnote over P #6DD96D: OrderPayment A1B2C-P-1\nstate = **created**
P -> User: Payment details (web, email)
User -> P: Payment performed
rnote over P #EFF46B: OrderPayment A1B2C-P-1\nstate = **confirmed**
P -> O: Order marked as paid
rnote over O #EFF46B: Order A1B2C\nstatus = **p**\ntotal = €100
User -> O: Data change (e.g. invoice address)
O -> I: Invoice reissued
rnote over I #6DD96D: Invoice 00002\n€-100
rnote over I #6DD96D: Invoice 00003\n€100
rnote over O #EFF46B: Order A1B2C\nstatus = **p**\ntotal = €100
User -> O: Order canceled
rnote over O #EFF46B: Order A1B2C\nstatus = **c**
O -> I: Invoice canceled
rnote over I #6DD96D: Invoice 00004\n€-100
O -> P: Refund started
rnote over P #6DD96D: OrderRefund\nA1B2C-R-1\nstate = **created**
P -> User: Money sent
rnote over P #EFF46B: OrderRefund\nA1B2C-R-1\nstate = **done**
@enduml

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 93 KiB

View File

@@ -1,19 +1,39 @@
@startuml
Pending: Order is expecting payment\nOrder reduces quotas
Expired: Payment period is over\nOrder does not affect quotas
Paid: Order was successful\nOrder reduces quotas
Canceled: Order has been canceled\nOrder does not affect quotas
state "Approval Pending" as AP
state "Canceled (with paid fee)" as CP
AP: status = "n"
AP: require_approval = true
Pending: status = "n"
Pending: require_approval = false
Pending: Tickets reserved: yes
Expired: status = "e"
Expired: Tickets reserved: no
Paid: status = "p"
Paid: count(positions | !canceled) > 0
Paid: Tickets reserved: yes
CP: status = "p"
CP: count(positions | !canceled) = 0
Canceled: status = "c"
Canceled: Tickets reserved: no
[*] --> Pending: customer\nplaces order
Pending --> Paid: successful payment
Pending --> Expired: automatically\nor manually\non admin action
Expired --> Paid: if payment is received\nonly if quota left
Expired --> Canceled
Expired --> Pending: manually\non admin action
Paid --> Canceled: manually on\nadmin action\nor if an external\npayment provider\nnotifies about a\npayment refund
Pending --> Canceled: on admin or\ncustomer action
Paid -> Pending: manually on admin action
[*] --> Paid: customer\nplaces free order
[*] -> Pending: order placed\ntotal > 0
[*] -> Paid: order placed\ntotal = 0
[*] -> AP: order placed\napproval required
Pending --> Paid: order paid
Pending --> Expired: after payment\ndeadline
Expired --> Paid: order paid\n(only if quota left)
Expired -[dashed]-> Canceled
Expired -[dashed]-> Pending: order extended
Paid --> Canceled: order canceled
Pending --> Canceled: order canceled
Paid -[dashed]-> Pending: refund
AP --> Pending: order approved
AP --> Canceled: order denied
Paid --> CP: order canceled\n(with cancellation fee)
Canceled -[dashed]-> Pending: order reactivated
Canceled -[dashed]-> Paid: order reactivated
CP -[dashed]-> Canceled: fee canceled
@enduml

177
doc/license/faq.rst Normal file
View File

@@ -0,0 +1,177 @@
.. spelling::
AGPL
AGPLv3
GPL
LGPL
Apache
BSD
MIT
CLA
django
i18nfields
hierarkey
rami.io
rami
io
GmbH
License FAQ
===========
.. warning::
This FAQ tries to explain in simpler terms what the license of the pretix open source project does and does not
allow. It is based on our interpretation of the license and is not legal advice. The contents of this page are not
legally binding, only the original text of the license in the `license file`_ is legally binding.
How is pretix licensed?
-----------------------
pretix follows the popular dual licensing model. It is available under the `GNU Affero General Public License 3`_ (AGPL)
plus some additional terms, as well as under a proprietary license ("pretix Enterprise license") on request.
How can it be AGPL if there are additional terms?
-------------------------------------------------
Even though it is fairly unknown, the AGPL's section 7 is titled "Additional Terms" and outlines specific conditions
under which additional terms can be imposed on an AGPL-licensed work. In our case, we add three additional terms.
The first additional term for pretix is an additional **permission**. It allows you to do something that the AGPL would
generally not allow. As it doesn't restrict your freedoms granted by AGPL, if you don't like it, you can ignore it, and
if you distribute pretix further, you can remove it.
The second and third additional term for pretix are additional terms that restrict or specify other provisions of the
license. AGPL specifically requires that these terms can only restrict or specify very specific things and we believe
our additional terms are in compliance with that and are thus valid and may not be removed.
Why did you choose this license model?
--------------------------------------
pretix was born in the open source community and we're deeply committed to building the best open source ticketing
solution in the world. It is important to us that pretix is available with a comprehensive feature set under term that
are compatible with the `Open Source Definition`_. This enables event organizers from all industries and regions
to have access to a self-hosted, privacy-friendly and secure option to host their events.
However, developing and maintaining pretix is a lot of work. Between 2014 and 2021, we've received external
contributions from more than 150 individuals. Not counting translations over 90 % of the development was
done by staff engineers of rami.io GmbH, the company that started pretix. While we're very happy to receive many more
contributions in the future, we also want to ensure that we continue to be able to pay people working on pretix
full-time.
We believe our model creates a good balance between ensuring pretix is available freely as well as protecting our
business interests. Unlike licenses chosen by other projects recently, such as the Server-Side Public License, our
choice does not restrict using pretix for any possible use case, it just sets a few rules that you have to play by
if you do.
What do I need to do if I use pretix unmodified?
------------------------------------------------
If you use pretix without any modifications or plugins, you can use it for whatever you want, as long as you keep
all copyright notices (including the link to pretix at the bottom of the site) intact.
You are also allowed to make copies of the unmodified source code and distribute them to others as long as you keep
all copyright and license information intact.
If you install **plugins**, you must follow the same terms as when using a **modified** version (see below).
What do I need to do if I modify pretix?
----------------------------------------
If you want to modify pretix, you have the right to do so. However, you need to follow the following rules:
* If you **run it for your own events** (events run by you or your company as well as companies from the same
corporate groups) our additional permission allows you to do so **without needing to share your source code
modifications** as long as you keep the link to pretix at the bottom of the site intact.
* If you **run it for others**, for example as part of a Software-as-a-Service offering or a managed hosting service
you **must** make the source code **including all your modifications and all installed plugins** available under the
same license as pretix to every visitor of your site. You need to do so in a prominent place such as a link at the bottom of the
site. You also **must** keep the existing link intact.
You **may not** add additional restrictions on the result as a whole. You **may** add additional permissions, but
only on the parts you added. You **must** make clear which changes you made and you must not give the impression that
your modified version is an official version of pretix.
* If you **distribute** the modified version, for example as a source code or software package, you **must** license it
under the AGPL license with the same additional terms. You **may not** add additional restrictions on the result as a
whole. You **may** add additional permissions, but only on the parts you added. You **must** make clear which changes
you made and you must not give the impression that your modified version is an official version of pretix.
Does the AGPL copyleft mechanism extend to plugins?
---------------------------------------------------
Yes. pretix plugins are tightly integrated with pretix, so when running pretix together with a plugin in the same
environment they form a `combined work`_ and the copyleft mechanism of AGPL applies.
Can I create proprietary or secret plugins?
-------------------------------------------
Yes, you can create a proprietary or secret plugin, but it may only ever be **used** in an environment that is covered
by the additional permission from our license. As soon as the plugin is installed in an installation that is not covered
by our additional permission (e.g. when it is used in a SaaS environment) or covered by an active pretix Enterprise
license it **must** be released to the visitors of the site under the same license as pretix (like a modified version
of pretix).
What licenses can plugins use?
------------------------------
Technically, you can distribute a plugin under any free or proprietary license as long as it is distributed separately.
However, once it is either **distributed together with pretix or used in an environment not covered by our
additional permission** or an active pretix Enterprise license, you **must** release it to all recipients of the
distribution or all visitors of your site under the same license as pretix (like a modified version of pretix).
If you release a plugin publicly, it is therefore most practical to use a license that is `compatible to AGPL`_.
This includes most open source licenses such as AGPL, GPL, Apache, 3-clause BSD or MIT.
Note however that when you license a plugin with pure AGPL, it will be incompatible with our additional permission.
Therefore, if you want to use an AGPL-licensed plugin, you'll need to publish the source code of **all** your plugins
under AGPL terms **even if you only use it for your own events**. A plugin would add its `own additional permission`_
to its license to allow combining it with pretix for this use case.
To make things less complicated, if you want to distribute a plugin freely, we therefore recommend distributing the
plugin under **Apache License 2.0**, like we do for most plugins we distribute as open source.
What do I need to do if I want to contribute my changes back?
-------------------------------------------------------------
In order to retain the possibility for us to offer pretix in a dual licensing model, we unfortunately need you to sign
a Contributor License Agreement (CLA) that gives us permission to use your contribution in all present and future
distributions of pretix. We know the bureaucracy sucks. Sorry.
What if I want to re-use a minor part of pretix in my project?
--------------------------------------------------------------
This is the main part we dislike about AGPL: If you see a specific thing in pretix that you'd like to use in another
project, you'll need to distribute your other project under AGPL terms as well which is often not practical.
In this case, feel free to get in touch with us! We're happy to grant you special permission or pull the component
out into a separately, permissively licensed repository. We already did that with `django-hierarkey`_ and
`django-i18nfield`_ which have previously been parts of pretix.
What can I use the name "pretix" for?
-------------------------------------
The name pretix is a registered trademark by rami.io GmbH.
* You **may** use it to **indicate copyright**, such as in the "powered by pretix" or "based on pretix" line, or when
indicating that a distribution is based on pretix.
* You **may** use it to **indicate compatibility**, for example you are allowed to name your plugin "<name> for pretix"
or you may state that an external service is compatible with pretix.
* You **may not** give the impression that your modified version, plugin or compatible service is official or authorized
by rami.io GmbH or pretix unless we specifically allowed you to do so.
* You **may not** use it to name your modified version of pretix. End-users must be able to easily identify whether
a version of pretix is distributed by us.
* You **may not** use any variations of the name, such as "MyPretix".
.. _license file: https://github.com/pretix/pretix/blob/master/LICENSE
.. _GNU Affero General Public License 3: https://www.gnu.org/licenses/agpl-3.0.en.html
.. _compatible to AGPL: https://www.gnu.org/licenses/license-list.en.html#GPLCompatibleLicenses
.. _Open Source Definition: https://opensource.org/osd
.. _combined work: https://www.gnu.org/licenses/gpl-faq.html#GPLPlugins
.. _own additional permission: https://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs
.. _django-hierarkey: https://github.com/raphaelm/django-hierarkey
.. _django-i18nfield: https://github.com/raphaelm/django-i18nfield

View File

@@ -22,10 +22,6 @@ item_assignments list of objects Products this l
└ item integer Item ID
===================================== ========================== =======================================================
.. versionchanged:: 1.16
This resource has been added.
Endpoints
---------

View File

@@ -24,14 +24,6 @@ item_assignments list of objects Products this l
└ item integer Item ID
===================================== ========================== =======================================================
.. versionchanged:: 1.16
This resource has been added.
.. versionchanged:: 2.3
The ``item_assignments.sales_channel`` field has been added.
Endpoints
---------

View File

@@ -82,7 +82,9 @@ namespaces
namespacing
natively
nginx
nodejs
NotificationType
npm
ons
optimizations
overpayment

View File

@@ -64,20 +64,35 @@ is valid in every text):
Placeholder Description
============================== ===============================================================================
event The event name
event_slug The event's short form
code In case of the waiting list, the voucher code to redeem
currency The currency used for the event (three-letter code)
total The order's total value
total_with_currency The order's total value with a localized currency sign
currency The currency used for the event (three-letter code)
refund_amount (For cancellation emails) The amount of money that will be refunded, including
the currency
payment_info Information text specific to the payment method (e.g. banking details)
url An URL pointing to the download/status page of the order
invoice_name The name field of the invoice address
url_info_change An URL pointing to the page of the order that can be used to change ticket
information
url_products_change An URL pointing to the page of the order that can be used to change the products
in the order
url_cancel An URL pointing to the page of the order that can be used to cancel the order
name, name_* Any name that can be used to address the recipient (e.g. name from invoice address,
name from first ticket, …)
invoice_name, invoice_name_* The name field of the invoice address
invoice_company The company field of the invoice address
attendee_name, attendee_name_* The name of the attendee represented by the ticket
expire_date The order's expiration date
comment When rejecting an order, this will contain the reason for the rejection
date The same as ``expire_date``, but in a different e-mail (for backwards
compatibility)
orders A list of orders including links to their status pages, specific to the "resend
link (requested by user)" e-mail
code In case of the waiting list, the voucher code to redeem
hours In case of the waiting list, the number of hours the voucher code is valid
product In case of the waiting list, the product that has become available
voucher_list When sending out vouchers in bulk, this will be replaced with the list of
vouchers
============================== ===============================================================================
The different e-mails are explained in the following:

View File

@@ -88,6 +88,15 @@ website. If you confident to have a good reason for not using SSL, you can overr
<pretix-widget event="https://pretix.eu/demo/democon/" skip-ssl-check></pretix-widget>
Always open a new tab
---------------------
If you want the checkout process to always open a new tab regardless of screen size, you can pass the ``disable-iframe``
attribute::
<pretix-widget event="https://pretix.eu/demo/democon/" disable-iframe></pretix-widget>
Pre-selecting a voucher
-----------------------
@@ -197,7 +206,10 @@ should be added to the cart. The syntax of this attribute is ``item_ITEMID=1,ite
where ``ITEMID`` are the internal IDs of items to be added and ``VARID`` are the internal IDs of variations of those
items, if the items have variations. If you omit the ``items`` attribute, the general start page will be presented.
Just as the widget, the button supports the optional attributes ``voucher`` and ``skip-ssl-check``.
In case you are using an event-series, you will need to specify the subevent for which the item(s) should be put in the
cart. This can be done by specifying the ``subevent``-attribute.
Just as the widget, the button supports the optional attributes ``voucher``, ``disable-iframe``, and ``skip-ssl-check``.
You can style the button using the ``pretix-button`` CSS class.
@@ -304,8 +316,92 @@ Hosted or pretix Enterprise are active, you can pass the following fields:
* If you use the campaigns plugin, you can pass a campaign ID as a value to ``data-campaign``. This way, all orders
made through this widget will be counted towards this campaign.
* If you use the tracking plugin, you can pass a Google Analytics User ID to enable cross-domain tracking. This will
require you to dynamically load the widget, like this::
* If you use the tracking plugin, you can enable cross-domain tracking. To do so, you need to initialize the
pretix-widget manually. Use the html code to embed the widget and add one the following code snippets. Make sure to
replace all occurrences of <MEASUREMENT_ID> with your Google Analytics MEASUREMENT_ID (UA-XXXXXXX-X or G-XXXXXXXX)
Please also make sure to add the embedding website to your `Referral exclusions
<https://support.google.com/analytics/answer/2795830>`_ in your Google Analytics settings.
If you use Google Analytics 4 (GA4 G-XXXXXXXX)::
<script async src="https://www.googletagmanager.com/gtag/js?id=<MEASUREMENT_ID>"></script>
<script type="text/javascript">
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '<MEASUREMENT_ID>');
window.pretixWidgetCallback = function () {
window.PretixWidget.build_widgets = false;
window.addEventListener('load', function() { // Wait for GA to be loaded
if (!window['google_tag_manager']) {
window.PretixWidget.buildWidgets();
return;
}
var clientId;
var sessionId;
var loadingTimeout;
function build() {
// use loadingTimeout to make sure build() is only called once
if (!loadingTimeout) return;
window.clearTimeout(loadingTimeout);
loadingTimeout = null;
if (clientId) window.PretixWidget.widget_data["tracking-ga-id"] = clientId;
if (sessionId) window.PretixWidget.widget_data["tracking-ga-sessid"] = sessionId;
window.PretixWidget.buildWidgets();
};
// make sure to build pretix-widgets if gtag fails to load either client_id or session_id
loadingTimeout = window.setTimeout(build, 2000);
gtag('get', '<MEASUREMENT_ID>', 'client_id', function(id) {
clientId = id;
if (sessionId !== undefined) build();
});
gtag('get', '<MEASUREMENT_ID>', 'session_id', function(id) {
sessionId = id;
if (clientId !== undefined) build();
});
});
};
</script>
If you use Universal Analytics with ``gtag.js`` (UA-XXXXXXX-X)::
<script async src="https://www.googletagmanager.com/gtag/js?id=<MEASUREMENT_ID>"></script>
<script type="text/javascript">
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '<MEASUREMENT_ID>');
window.pretixWidgetCallback = function () {
window.PretixWidget.build_widgets = false;
window.addEventListener('load', function() { // Wait for GA to be loaded
if (!window['google_tag_manager']) {
window.PretixWidget.buildWidgets();
return;
}
// make sure to build pretix-widgets if gtag fails to load client_id
var loadingTimeout = window.setTimeout(function() {
loadingTimeout = null;
window.PretixWidget.buildWidgets();
}, 1000);
gtag('get', '<MEASUREMENT_ID>', 'client_id', function(id) {
if (loadingTimeout) {
window.clearTimeout(loadingTimeout);
window.PretixWidget.widget_data["tracking-ga-id"] = id;
window.PretixWidget.buildWidgets();
}
});
});
};
</script>
If you use ```analytics.js` (Universal Analytics)::
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
@@ -313,32 +409,33 @@ Hosted or pretix Enterprise are active, you can pass the following fields:
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXXX-1', 'auto');
ga('create', '<MEASUREMENT_ID>', 'auto');
ga('send', 'pageview');
window.pretixWidgetCallback = function () {
window.PretixWidget.build_widgets = false;
window.addEventListener('load', function() { // Wait for GA to be loaded
if(window.ga && ga.create) {
ga(function(tracker) {
window.PretixWidget.widget_data["tracking-ga-id"] = tracker.get('clientId');
window.PretixWidget.buildWidgets()
});
} else { // Tracking is probably blocked
window.PretixWidget.buildWidgets()
if (!window['ga'] || !ga.create) {
// Tracking is probably blocked
window.PretixWidget.buildWidgets()
return;
}
var loadingTimeout = window.setTimeout(function() {
loadingTimeout = null;
window.PretixWidget.buildWidgets();
}, 1000);
ga(function(tracker) {
if (loadingTimeout) {
window.clearTimeout(loadingTimeout);
window.PretixWidget.widget_data["tracking-ga-id"] = tracker.get('clientId');
window.PretixWidget.buildWidgets();
}
});
});
};
</script>
In some combinations with Google Tag Manager, the widget does not load this way. In this case, try replacing
``tracker.get('clientId')`` with ``ga.getAll()[0].get('clientId')``.
.. versionchanged:: 2.3
Data passing options have been added in pretix 2.3. If you use a self-hosted version of pretix, they only work
fully if you configured a redis server.
.. versionchanged:: 3.6

View File

@@ -59,6 +59,8 @@ Permissions separate into two areas:
* Can view vouchers This permission allows viewing the list of vouchers including the voucher codes themselves and
their redemption status.
* Can perform check-ins This permission allows using web-based features to perform ticket search and check-in.
* Can change vouchers This permission allows to create and modify vouchers in all their details. It only works
properly if the same users also have the "Can view vouchers" permission.

2
src/.gitignore vendored
View File

@@ -8,3 +8,5 @@ dist/
*.egg-info/
*.bak
pretix/static/jsi18n/
node_modules/

View File

@@ -26,3 +26,5 @@ recursive-include pretix/plugins/badges/templates *
recursive-include pretix/plugins/badges/static *
recursive-include pretix/plugins/returnurl/templates *
recursive-include pretix/plugins/returnurl/static *
recursive-include pretix/plugins/webcheckin/templates *
recursive-include pretix/plugins/webcheckin/static *

View File

@@ -6,13 +6,13 @@ localecompile:
./manage.py compilemessages
localegen:
./manage.py makemessages --keep-pot --ignore "pretix/helpers/*" $(LNGS)
./manage.py makemessages --keep-pot -d djangojs --ignore "pretix/helpers/*" --ignore "pretix/static/jsi18n/*" --ignore "pretix/static/jsi18n/*" --ignore "pretix/static.dist/*" --ignore "data/*" --ignore "build/*" $(LNGS)
./manage.py makemessages --keep-pot --ignore "pretix/helpers/*" --ignore "pretix/static/npm_dir/*" $(LNGS)
./manage.py makemessages --keep-pot -d djangojs --ignore "pretix/static/npm_dir/*" --ignore "pretix/helpers/*" --ignore "pretix/static/jsi18n/*" --ignore "pretix/static/jsi18n/*" --ignore "pretix/static.dist/*" --ignore "data/*" --ignore "pretix/static/rrule/*" --ignore "build/*" $(LNGS)
staticfiles: jsi18n
./manage.py collectstatic --noinput
compress:
compress: npminstall
./manage.py compress
jsi18n: localecompile
@@ -23,3 +23,10 @@ test:
coverage:
coverage run -m py.test
npminstall:
# keep this in sync with setup.py!
mkdir -p pretix/static.dist/node_prefix/
cp -r pretix/static/npm_dir/* pretix/static.dist/node_prefix/
npm install --prefix=pretix/static.dist/node_prefix

View File

@@ -1,4 +1,25 @@
#!/usr/bin/env python3
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
import os
import sys

View File

@@ -1 +1,22 @@
__version__ = "3.13.0.dev0"
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
__version__ = "3.18.0"

View File

@@ -1,3 +1,24 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
import os
import sys

View File

@@ -1,3 +1,24 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from django.apps import AppConfig

View File

@@ -0,0 +1,21 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#

View File

@@ -1,3 +1,24 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from django.contrib.auth.models import AnonymousUser
from django_scopes import scopes_disabled
from rest_framework import exceptions

View File

@@ -1,3 +1,24 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from django.utils.translation import ugettext_lazy as _
@@ -10,7 +31,7 @@ class FullAccessSecurityProfile:
class AllowListSecurityProfile:
allowlist = tuple()
allowlist = ()
def is_allowed(self, request):
key = (request.method, f"{request.resolver_match.namespace}:{request.resolver_match.url_name}")
@@ -41,7 +62,9 @@ class PretixScanSecurityProfile(AllowListSecurityProfile):
('POST', 'api-v1:checkinlistpos-redeem'),
('GET', 'api-v1:revokedsecrets-list'),
('GET', 'api-v1:order-list'),
('GET', 'api-v1:orderposition-pdf_image'),
('GET', 'api-v1:event.settings'),
('POST', 'api-v1:upload'),
)
@@ -67,7 +90,9 @@ class PretixScanNoSyncSecurityProfile(AllowListSecurityProfile):
('GET', 'api-v1:checkinlist-status'),
('POST', 'api-v1:checkinlistpos-redeem'),
('GET', 'api-v1:revokedsecrets-list'),
('GET', 'api-v1:orderposition-pdf_image'),
('GET', 'api-v1:event.settings'),
('POST', 'api-v1:upload'),
)
@@ -91,23 +116,39 @@ class PretixPosSecurityProfile(AllowListSecurityProfile):
('GET', 'api-v1:taxrule-list'),
('GET', 'api-v1:ticketlayout-list'),
('GET', 'api-v1:ticketlayoutitem-list'),
('GET', 'api-v1:badgelayout-list'),
('GET', 'api-v1:badgeitem-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'),
('PATCH', 'api-v1:orderposition-detail'),
('GET', 'api-v1:orderposition-answer'),
('GET', 'api-v1:orderposition-pdf_image'),
('POST', 'api-v1:order-mark-canceled'),
('POST', 'api-v1:orderpayment-list'),
('POST', 'api-v1:orderrefund-list'),
('POST', 'api-v1:orderrefund-done'),
('POST', 'api-v1:cartposition-list'),
('GET', 'api-v1:checkinlist-list'),
('POST', 'api-v1:checkinlistpos-redeem'),
('POST', 'plugins:pretix_posbackend:order.posprintlog'),
('DELETE', 'api-v1:cartposition-detail'),
('GET', 'api-v1:giftcard-list'),
('POST', 'api-v1:giftcard-transact'),
('GET', 'plugins:pretix_posbackend:posclosing-list'),
('POST', 'plugins:pretix_posbackend:posreceipt-list'),
('POST', 'plugins:pretix_posbackend:posclosing-list'),
('POST', 'plugins:pretix_posbackend:posdebugdump-list'),
('GET', 'plugins:pretix_posbackend:poscashier-list'),
('POST', 'plugins:pretix_posbackend:stripeterminal.token'),
('GET', 'api-v1:revokedsecrets-list'),
('GET', 'api-v1:event.settings'),
('GET', 'plugins:pretix_seating:event.event'),
('GET', 'plugins:pretix_seating:event.event.subevent'),
('GET', 'plugins:pretix_seating:event.plan'),
('GET', 'plugins:pretix_seating:selection.simple'),
('POST', 'api-v1:upload'),
)

View File

@@ -1,3 +1,37 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
# This file is based on an earlier version of pretix which was released under the Apache License 2.0. The full text of
# the Apache License 2.0 can be obtained at <http://www.apache.org/licenses/LICENSE-2.0>.
#
# This file may have since been changed and any changes are released under the terms of AGPLv3 as described above. A
# full history of changes and contributors is available at <https://github.com/pretix/pretix>.
#
# This file contains Apache-licensed contributions copyrighted by: Ture Gjørup
#
# Unless required by applicable law or agreed to in writing, software distributed under the Apache License 2.0 is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under the License.
from rest_framework.permissions import SAFE_METHODS, BasePermission
from pretix.api.models import OAuthAccessToken
@@ -46,8 +80,12 @@ class EventPermission(BasePermission):
else:
request.eventpermset = perm_holder.get_event_permission_set(request.organizer, request.event)
if required_permission and required_permission not in request.eventpermset:
return False
if isinstance(required_permission, (list, tuple)):
if not any(p in request.eventpermset for p in required_permission):
return False
else:
if required_permission and required_permission not in request.eventpermset:
return False
elif 'organizer' in request.resolver_match.kwargs:
if not request.organizer or not perm_holder.has_organizer_permission(request.organizer, request=request):
@@ -57,8 +95,12 @@ class EventPermission(BasePermission):
else:
request.orgapermset = perm_holder.get_organizer_permission_set(request.organizer)
if required_permission and required_permission not in request.orgapermset:
return False
if isinstance(required_permission, (list, tuple)):
if not any(p in request.eventpermset for p in required_permission):
return False
else:
if required_permission and required_permission not in request.orgapermset:
return False
if isinstance(request.auth, OAuthAccessToken):
if not request.auth.allow_scopes(['write']) and request.method not in SAFE_METHODS:
@@ -89,10 +131,38 @@ class EventCRUDPermission(EventPermission):
class ProfilePermission(BasePermission):
def has_permission(self, request, view):
if not request.user.is_authenticated:
if not request.user.is_authenticated and not isinstance(request.auth, (Device, TeamAPIToken)):
return False
if request.user.is_authenticated:
try:
# If this logic is updated, make sure to also update the logic in pretix/control/middleware.py
assert_session_valid(request)
except SessionInvalid:
return False
except SessionReauthRequired:
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
class AnyAuthenticatedClientPermission(BasePermission):
def has_permission(self, request, view):
if not request.user.is_authenticated and not isinstance(request.auth, (Device, TeamAPIToken)):
return False
if request.user.is_authenticated:
try:
# If this logic is updated, make sure to also update the logic in pretix/control/middleware.py
assert_session_valid(request)
except SessionInvalid:
return False
except SessionReauthRequired:
return False
return True

View File

@@ -1,3 +1,24 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from django.contrib.auth.models import AnonymousUser
from rest_framework import exceptions
from rest_framework.authentication import TokenAuthentication

View File

@@ -1,3 +1,24 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from rest_framework.response import Response
from rest_framework.views import exception_handler, status

View File

@@ -1,3 +1,24 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
import json
from hashlib import sha1
@@ -51,7 +72,7 @@ class IdempotencyMiddleware:
if created:
resp = self.get_response(request)
with transaction.atomic():
if resp.status_code in (409, 429, 503):
if resp.status_code in (409, 429, 500, 503):
# This is the exception: These calls are *meant* to be retried!
call.delete()
else:

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