Compare commits

...

1529 Commits

Author SHA1 Message Date
Raphael Michel
3cdb992134 Bump dnspython to 2.2.* 2022-12-20 11:55:52 +01:00
Raphael Michel
9b0b8e2061 GitHub Actions: Set FORCE_COLOR = 1 2022-12-19 15:31:08 +01:00
Raphael Michel
b6e65e7356 PPv2: Fix CSP issue in 3D secure verification 2022-12-19 14:53:46 +01:00
Raphael Michel
5d82305e18 CSP: Deduplicate identical values 2022-12-19 14:53:32 +01:00
Raphael Michel
c8983ca863 CSP: Do not set nonce if unsafe-inline is set 2022-12-19 14:52:58 +01:00
Raphael Michel
52f6b7c971 GitHub: Try to use a better dependabot strategy 2022-12-19 14:03:48 +01:00
Raphael Michel
809177397a Update celery to 5.2 (#2983) 2022-12-19 13:56:16 +01:00
Raphael Michel
b83cb7d8c4 Bump PyPDF2 to 2.12.* 2022-12-19 13:55:20 +01:00
Raphael Michel
bfd980fc30 Bump isort to 5.11.* 2022-12-19 13:54:18 +01:00
Raphael Michel
5bc3503d04 Bump django-debug-toolbar to 3.8.* 2022-12-19 13:53:54 +01:00
Raphael Michel
a582db3280 Set stacklevel=2 on DeprecationWarning 2022-12-19 13:53:44 +01:00
Raphael Michel
bd4ea5d8f8 Reduce number of rows in invoice preview 2022-12-19 13:00:53 +01:00
Raphael Michel
5dec94606b Do not require new plugins to sett default=True on their AppConfig 2022-12-19 12:34:49 +01:00
Raphael Michel
ab97082c85 Remove all RemovedInDjango40Warning exceptions 2022-12-19 12:30:48 +01:00
Raphael Michel
0723ff92ee Stricter deprecation warnings 2022-12-19 12:30:24 +01:00
Raphael Michel
15272cc3e6 Bump django-oauth-toolkit to 2.2.* (#2985) 2022-12-19 12:26:45 +01:00
Raphael Michel
60554dad9a Remove usage of deprecated Django APIs 2022-12-17 16:26:24 +01:00
Raphael Michel
b288ea1e96 Docs: Add procedure after debian updates (#2984) 2022-12-16 19:28:24 +01:00
Raphael Michel
6a4b792501 API: Fix using invoice address attributes in "include" 2022-12-16 15:23:35 +01:00
ser8phin
8dd83e5a35 Add lifetime spending to customer details (#2934)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2022-12-16 15:20:22 +01:00
Raphael Michel
bd5c9a4cb5 Order search: Further query-specific fine tuning 2022-12-15 16:27:42 +01:00
Raphael Michel
0cd8bbf9a9 Order search: Fix missing field in only() call 2022-12-15 16:27:42 +01:00
Raphael Michel
d46989473b Customer accounts: Show event date in order list 2022-12-15 16:27:42 +01:00
Richard Schreiber
b31b2d34c0 Editor: fix sample text when key missing (#2980) 2022-12-15 16:20:11 +01:00
Richard Schreiber
5e963d87d9 Presale: Improve visibiltity of edit links on order confirm/details page (Z#23108817) 2022-12-15 11:22:28 +01:00
Raphael Michel
a8e0eea69a Docs: Fix very old API compatibility statement 2022-12-15 10:35:23 +01:00
Raphael Michel
efa9f6dfe5 Order search: Fix missing field in only() call 2022-12-14 18:19:44 +01:00
Raphael Michel
857377d16c Work around performance issue in get_all_payment_providers 2022-12-14 18:14:01 +01:00
Raphael Michel
229b6fed4a Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4934 of 4934 strings)

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

powered by weblate
2022-12-14 16:44:53 +01:00
Raphael Michel
b2e4fb6db3 Translations: Update German
Currently translated at 100.0% (4934 of 4934 strings)

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

powered by weblate
2022-12-14 16:44:53 +01:00
Raphael Michel
16b15057fd Translations: Add XXX, XXXX, XXXXX to wordlist 2022-12-14 16:33:36 +01:00
Raphael Michel
e4168ff06a Translations: Add XXX, XXXX, XXXXX to wordlist 2022-12-14 16:29:48 +01:00
Raphael Michel
b208db32c7 Fix wrong version number 2022-12-14 14:13:40 +01:00
Raphael Michel
ce177227c7 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-12-14 14:09:36 +01:00
Raphael Michel
2cd70ef434 Bump redis to 4.4.* 2022-12-14 14:08:52 +01:00
Raphael Michel
633755ab13 Bump django-countries to 7.5.* 2022-12-14 14:08:52 +01:00
Raphael Michel
6ade32d7cb Bump pycryptodome to 3.16.* 2022-12-14 14:08:52 +01:00
Raphael Michel
cea6c340be Bank transfer: Allow to send the invoice direclty to the accounting department (#2975) 2022-12-14 14:08:50 +01:00
Raphael Michel
ad1dab3b7f Bank transfer: Fix refund export when plugin is disabled 2022-12-13 18:40:26 +01:00
Raphael Michel
930abe0cc5 Fix crash in gift card view (PRETIXEU-493) 2022-12-13 18:32:22 +01:00
Raphael Michel
ba2cc56c82 Radio collapse elements: Deal with Firefox keeping form state on reload 2022-12-13 10:54:18 +01:00
Raphael Michel
cb1f63bf80 Fix regression in address validation for resellers 2022-12-12 17:21:55 +01:00
Martin Gross
aab7042cda PPv2: Simulate cart_payments in XHR-calls; only look at multi_use-payments for remaining value calculation (#2970)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-12-12 15:35:16 +01:00
Raphael Michel
495a21c683 GitHub actions: Ignore flake8 no longer supporting Python 3.7 (#2971) 2022-12-12 15:29:47 +01:00
Martin Gross
86b5ba6937 PPv2: Actually log dict-representation on value mismatch 2022-12-12 12:44:07 +01:00
Raphael Michel
3d9679a144 Allow variations to override item meta data (#2965) 2022-12-12 12:06:09 +01:00
Raphael Michel
5f899ed5c5 Bump chardet to 5.1.* 2022-12-12 12:03:27 +01:00
Raphael Michel
47dabc1fe7 Bump pytest-xdist to 3.1.* 2022-12-12 10:53:32 +01:00
Raphael Michel
2d7c4a3d42 Translations: Add Croatian 2022-12-12 10:53:09 +01:00
Raphael Michel
51ef98f736 Translations: Add Croatian 2022-12-12 10:53:09 +01:00
Mie Frydensbjerg
2d7d2b1a90 Translations: Update Danish
Currently translated at 71.1% (143 of 201 strings)

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

powered by weblate
2022-12-12 10:53:09 +01:00
Mie Frydensbjerg
cede7ba3aa Translations: Update Danish
Currently translated at 35.6% (1755 of 4919 strings)

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

powered by weblate
2022-12-12 10:53:09 +01:00
Raphael Michel
4fd8726b05 Bump flake8 to 6.0.*, pycodestyle to 2.10.* and pyflakes to 3.0.* 2022-12-12 10:53:01 +01:00
dependabot[bot]
b344ce90ba Bump vue and vue-template-compiler in /src/pretix/static/npm_dir (#2940)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-12 09:25:36 +01:00
dependabot[bot]
69dc7f56e5 Bump @babel/core from 7.19.6 to 7.20.5 in /src/pretix/static/npm_dir (#2941)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-12 09:25:23 +01:00
Raphael Michel
247a61489f XLSX generation: Remove invalid unicode characters 2022-12-09 17:41:33 +01:00
Raphael Michel
979d23e997 Invoice renderer: Unify HTML cleaning and clean intro and additional
text
2022-12-09 17:30:26 +01:00
Raphael Michel
28e529995d Add missing license headers 2022-12-09 13:24:17 +01:00
Raphael Michel
a982cbf6b6 Name field: Improve compatibility with old formats 2022-12-09 10:42:26 +01:00
Raphael Michel
f1c2ae5b6b Revert "Bump pycodestyle to 2.10.*"
This reverts commit dfe3454915.
2022-12-08 14:17:22 +01:00
dependabot[bot]
5b27ac66f9 Bump decode-uri-component from 0.2.0 to 0.2.2 in /src/pretix/static/npm_dir (#2952)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-08 13:50:47 +01:00
Raphael Michel
c71ac2141f Bump drf_ujson2 to 1.7.* 2022-12-08 13:50:20 +01:00
Raphael Michel
e59498d65d Bump pytest-rerunfailures to 10.* 2022-12-08 13:50:20 +01:00
Raphael Michel
dfe3454915 Bump pycodestyle to 2.10.* 2022-12-08 13:50:20 +01:00
Raphael Michel
b64c5735a8 Make str.format_map with untrusted input safer (#2931) 2022-12-08 13:49:07 +01:00
dependabot[bot]
11eecd739d Bump @rollup/plugin-babel from 6.0.2 to 6.0.3 in /src/pretix/static/npm_dir (#2942)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-08 13:47:34 +01:00
Raphael Michel
07a6d4898a Fix missing Discount.is_available_by_time method 2022-12-08 10:53:00 +01:00
Raphael Michel
a759e23504 Docs: Add internal_name to digital content api 2022-12-08 10:48:13 +01:00
Richard Schreiber
3eaf05502a Checkout: copy answers from previous item instead of first (#Z23112272) 2022-12-07 09:24:24 +01:00
Raphael Michel
04df1c2032 Introduce country-specific address validation (#2945)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2022-12-05 12:42:46 +01:00
Raphael Michel
6a8df75a9f Fix regression in handling gift card payments (#2936) 2022-12-05 11:32:27 +01:00
Richard Schreiber
547cfdffd6 PDF editor: Reduce precision size of empty page (Z#23112472) (#2935) 2022-12-01 13:19:21 +01:00
Raphael Michel
f72a0b4c09 Bump version to 4.16.0.dev0 2022-11-30 09:53:57 +01:00
Raphael Michel
3077292d15 Bump version to 4.15.0 2022-11-30 09:53:00 +01:00
Raphael Michel
2c831d5d6e Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4919 of 4919 strings)

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

powered by weblate
2022-11-30 09:43:08 +01:00
Raphael Michel
be8d84be13 Translations: Update German
Currently translated at 100.0% (4919 of 4919 strings)

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

powered by weblate
2022-11-30 09:43:08 +01:00
Raphael Michel
23c497e438 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2022-11-29 21:31:30 +01:00
Vasco Baleia
09643e47b9 Translations: Update Portuguese (Portugal)
Currently translated at 85.9% (4228 of 4917 strings)

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

powered by weblate
2022-11-29 21:29:10 +01:00
tlm06
1ef922cf56 Translations: Update Portuguese (Portugal)
Currently translated at 84.3% (4149 of 4917 strings)

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

powered by weblate
2022-11-29 21:29:10 +01:00
Martin Gross
b12ab02e89 BasePP: Do not render "None" if no messages are available for {payment_info} 2022-11-29 16:11:14 +01:00
Raphael Michel
cce98e0418 Docs: Remove long-obsolete change notes 2022-11-29 14:29:42 +01:00
Raphael Michel
b8dd30b6dd Don't show "no products" if voucher allows seating plan 2022-11-29 10:44:03 +01:00
ser8phin
ea9a96e124 PDF editor: Fix scaling with browser zoom (Z#23112370) (#2929) 2022-11-28 13:54:55 +01:00
Raphael Michel
b72dc0ce8e API: Allow to whiteliste fields for the orders resource 2022-11-28 10:57:12 +01:00
Raphael Michel
0a30fa70da Fix bug in 8f94d1447 2022-11-28 10:21:41 +01:00
Raphael Michel
add240a7b9 Fix linking of orders to customers if email is null 2022-11-28 10:00:33 +01:00
Raphael Michel
0b97198cff Fix crash in question answer validation 2022-11-25 13:11:29 +01:00
Raphael Michel
8f94d14479 API: Fix validation of country field inputs 2022-11-25 13:11:17 +01:00
Raphael Michel
0919d5dbca Fix regression in PayPal payments 2022-11-25 11:29:19 +01:00
Raphael Michel
ff153164f8 API: Add search parameter for subevents 2022-11-24 17:58:18 +01:00
Raphael Michel
b8e3d6c71d Fix line breaks in german translation 2022-11-24 17:42:54 +01:00
Raphael Michel
f782324d5f Allow to adjust name and description of gift card payments 2022-11-24 16:36:24 +01:00
Raphael Michel
5259c8f33e Fix URL conflict 2022-11-24 14:55:17 +01:00
Raphael Michel
079b72391c Commit missing files 2022-11-24 13:56:54 +01:00
Raphael Michel
e9ba9a25df Allow to download tickets with alternative layouts in backend 2022-11-24 13:44:46 +01:00
Raphael Michel
5858ed8d5c Fix use of shadowed variable name 2022-11-23 21:43:05 +01:00
dependabot[bot]
0b0ecf22bf Bump django-formtools from 2.3 to 2.4 in /src (#2839)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Raphael Michel <michel@rami.io>
2022-11-23 16:11:35 +01:00
Bentrex95
3b1cd8e659 Waiting list: Allow transfer to other subevent (#2811)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
Co-authored-by: Raphael Michel <michel@rami.io>
2022-11-23 16:11:23 +01:00
Raphael Michel
5e66809c7b Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4909 of 4909 strings)

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

powered by weblate
2022-11-23 15:51:38 +01:00
Raphael Michel
c39328dd2a Translations: Update German
Currently translated at 100.0% (4909 of 4909 strings)

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

powered by weblate
2022-11-23 15:51:38 +01:00
Raphael Michel
70ccd2fbe4 Bump django-bootstrap3 to 22.2.* 2022-11-23 15:45:56 +01:00
Raphael Michel
8c8e8031fc Bump stripe to 5.0.* 2022-11-23 15:45:56 +01:00
Richard Schreiber
355b16e8e5 Order list export: Add event meta data (Z#2397902) (#2906) 2022-11-23 15:34:28 +01:00
Raphael Michel
09c316ccba Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-11-23 14:56:36 +01:00
Raphael Michel
a1075840c6 Thumbnails: Store creation date (#2920) 2022-11-23 14:56:05 +01:00
tlm06
b1a3ececad Translations: Update Portuguese (Portugal)
Currently translated at 84.7% (4155 of 4905 strings)

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

powered by weblate
2022-11-23 14:55:45 +01:00
Raphael Michel
9624b1c505 Support for external gift cards (#2912) 2022-11-23 14:52:56 +01:00
Raphael Michel
d3589696d7 Sendmail: Allow scheduled mails to recover from "missed" 2022-11-22 12:29:01 +01:00
0xflotus
9523291651 chore: fix small typo error (#2921) 2022-11-22 08:14:12 +01:00
Raphael Michel
b539f5e2f2 Fix image size validation in product form 2022-11-21 18:17:38 +01:00
Martin Gross
a18eb3be70 Plugins: Fix check if a restricted plugin is really restricted 2022-11-21 16:25:34 +01:00
Raphael Michel
ac59bbff5d Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4902 of 4902 strings)

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

powered by weblate
2022-11-21 16:17:07 +01:00
Raphael Michel
69f3e938f2 Translations: Update German
Currently translated at 100.0% (4902 of 4902 strings)

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

powered by weblate
2022-11-21 16:17:07 +01:00
Raphael Michel
a0c1903ce5 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4902 of 4902 strings)

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

powered by weblate
2022-11-21 16:17:07 +01:00
Raphael Michel
3c8b188352 Translations: Update German
Currently translated at 100.0% (4902 of 4902 strings)

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

powered by weblate
2022-11-21 16:17:07 +01:00
tlm06
76e3b39f8f Translations: Update Portuguese (Portugal)
Currently translated at 84.9% (4151 of 4888 strings)

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

powered by weblate
2022-11-21 16:17:07 +01:00
Raphael Michel
662e2cd116 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-11-21 15:52:18 +01:00
tlm06
eeaa3bc2a9 Translations: Update Portuguese (Portugal)
Currently translated at 84.9% (4150 of 4888 strings)

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

powered by weblate
2022-11-21 15:48:18 +01:00
David Vaz
bbe8247606 Translations: Update Portuguese (Portugal)
Currently translated at 84.9% (4150 of 4888 strings)

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

powered by weblate
2022-11-21 15:48:18 +01:00
tlm06
5c46c1d14f Translations: Update Portuguese (Portugal)
Currently translated at 84.2% (4119 of 4888 strings)

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

powered by weblate
2022-11-21 15:48:18 +01:00
David Vaz
651b676cfc Translations: Update Portuguese (Portugal)
Currently translated at 84.2% (4119 of 4888 strings)

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

powered by weblate
2022-11-21 15:48:18 +01:00
Raphael Michel
5ee62c551e Group identical lines on invoice PDF (#2918) 2022-11-21 15:47:57 +01:00
Raphael Michel
50e79b51de Customer login: Don't chain next= calls to login page 2022-11-20 14:46:32 +01:00
Raphael Michel
6e24c20a7a Fix edge case in bundle price configuration 2022-11-20 14:20:40 +01:00
Raphael Michel
481a242054 GitHub actions: Fix missed package upgrade 2022-11-20 13:05:55 +01:00
Raphael Michel
f923c2fed0 Fix price calculation of included add-ons in expired carts 2022-11-18 17:24:02 +01:00
Raphael Michel
228448b00f Bump libsass to 0.22 2022-11-18 16:45:29 +01:00
Raphael Michel
603345762a Bump sepaxml to 2.6.* 2022-11-18 16:45:29 +01:00
tlm06
1812a23860 Translations: Update Portuguese (Portugal)
Currently translated at 83.3% (4076 of 4888 strings)

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

powered by weblate
2022-11-18 16:44:07 +01:00
David Vaz
45374d0c94 Translations: Update Portuguese (Portugal)
Currently translated at 83.0% (4061 of 4888 strings)

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

powered by weblate
2022-11-18 16:44:07 +01:00
tlm06
c5f823596e Translations: Update Portuguese (Portugal)
Currently translated at 83.0% (4061 of 4888 strings)

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

powered by weblate
2022-11-18 16:44:07 +01:00
David Vaz
eebb0a3527 Translations: Update Portuguese (Portugal)
Currently translated at 83.0% (4061 of 4888 strings)

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

powered by weblate
2022-11-18 16:44:07 +01:00
tlm06
bac1e8faf6 Translations: Update Portuguese (Portugal)
Currently translated at 82.7% (4046 of 4888 strings)

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

powered by weblate
2022-11-18 16:44:07 +01:00
tlm06
5cf7654099 Translations: Update Portuguese (Portugal)
Currently translated at 81.5% (3987 of 4888 strings)

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

powered by weblate
2022-11-18 16:44:07 +01:00
Alex
988ef53972 GitHub Actions: Security hardening (#2882) 2022-11-18 16:32:05 +01:00
Raphael Michel
36d20a45dd Sendmail: Fix inconsistent handling of addons and checkins (#2914) 2022-11-18 14:20:43 +01:00
Raphael Michel
0691af7aa4 GitHub Actions: Pin ubuntu version and fix package versions (#2915) 2022-11-18 13:32:35 +01:00
Raphael Michel
6b5436b71a GitHub Actions: Don't rely on specific MariaDB client version 2022-11-18 13:08:38 +01:00
Raphael Michel
a06a693c5c Widget: Fix markup for voucher explanation text 2022-11-17 18:29:15 +01:00
Raphael Michel
7b58ddbfde Don't use Django's redirect() for user-supplied paths 2022-11-17 11:46:03 +01:00
Raphael Michel
f18fb02d0b Fix tests and docs for 62a6a1183 2022-11-16 17:18:54 +01:00
Raphael Michel
3a185b1cbc Bump django-formset-js-improved to 0.5.0.3 2022-11-16 17:17:09 +01:00
Raphael Michel
ba2a9fbd93 Bump arabic-reshaper to 2.1.4 2022-11-16 17:17:09 +01:00
Raphael Michel
a337cf8efa Fix rare crash in MembershipStep 2022-11-16 17:17:09 +01:00
David Vaz
616cc42b9c Translations: Update Portuguese (Portugal)
Currently translated at 64.1% (129 of 201 strings)

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

powered by weblate
2022-11-16 17:17:03 +01:00
David Vaz
08012c42f2 Translations: Update Portuguese (Portugal)
Currently translated at 80.8% (3954 of 4888 strings)

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

powered by weblate
2022-11-16 17:17:03 +01:00
David Vaz
08368684b0 Translations: Update Portuguese (Portugal)
Currently translated at 63.6% (128 of 201 strings)

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

powered by weblate
2022-11-16 17:17:03 +01:00
David Vaz
17200df0cd Translations: Update Portuguese (Portugal)
Currently translated at 80.4% (3933 of 4888 strings)

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

powered by weblate
2022-11-16 17:17:03 +01:00
tlm06
28d1bedfc4 Translations: Update Portuguese (Portugal)
Currently translated at 80.4% (3933 of 4888 strings)

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

powered by weblate
2022-11-16 17:17:03 +01:00
tlm06
af90db9d1e Translations: Update Portuguese (Portugal)
Currently translated at 79.1% (3867 of 4888 strings)

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

powered by weblate
2022-11-16 17:17:03 +01:00
David Vaz
19c4089da9 Translations: Update Portuguese (Portugal)
Currently translated at 78.9% (3859 of 4888 strings)

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

powered by weblate
2022-11-16 17:17:03 +01:00
Alexander Mohan Morzeria-Davis
71723935e1 Translations: Update French
Currently translated at 47.0% (2300 of 4888 strings)

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

powered by weblate
2022-11-16 17:17:03 +01:00
David Vaz
e2ad8f2f74 Translations: Update Portuguese (Portugal)
Currently translated at 63.6% (128 of 201 strings)

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

powered by weblate
2022-11-16 17:17:03 +01:00
David Vaz
f8580a2789 Translations: Update Portuguese (Portugal)
Currently translated at 78.5% (3840 of 4888 strings)

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

powered by weblate
2022-11-16 17:17:03 +01:00
Raphael Michel
cfeaa502a3 Translations: Update German (informal) (de_Informal)
Currently translated at 99.6% (4873 of 4888 strings)

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

powered by weblate
2022-11-16 17:17:03 +01:00
Raphael Michel
0ee8d6e9c3 Translations: Update German
Currently translated at 99.6% (4889 of 4904 strings)

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

powered by weblate
2022-11-16 17:17:03 +01:00
Raphael Michel
a0e5717f7d Allow to disable filter support for meta properties (#2901) 2022-11-16 17:12:37 +01:00
Raphael Michel
49097037da PPv2: Improve displaying errors 2022-11-16 11:50:29 +01:00
Raphael Michel
62a6a11836 Add refund details to API 2022-11-15 18:10:19 +01:00
Raphael Michel
3d82058269 Do not show internal name in cart tooltips 2022-11-15 09:55:53 +01:00
Richard Schreiber
4f21bf8001 Calendar: add label „continued“ to event’s title 2022-11-15 08:19:41 +01:00
Raphael Michel
e32e7e2a50 Add clever handling of plus button in cart with voucher (#2893) 2022-11-14 16:55:39 +01:00
Raphael Michel
5b8228bea0 PPv2: Improve error handling (#2899) 2022-11-14 16:55:30 +01:00
Raphael Michel
a628f605a6 Send refund webhooks correctly when refunds are created via API 2022-11-14 12:23:49 +01:00
Martin Gross
e658744f67 PPv2: Do not PATCH custom_id and description for APMs (#2898) 2022-11-14 11:46:35 +01:00
Raphael Michel
776c5e9fa2 Set autocomplete="one-time-code" on TOTP field 2022-11-14 10:37:00 +01:00
Raphael Michel
46b5055aec Bump zeep to 4.2.* 2022-11-11 17:01:35 +01:00
Raphael Michel
ef227deb2e Bump phonenumberslite to 8.13.* 2022-11-11 17:00:32 +01:00
Raphael Michel
30cfe1ef3c Bump pytest-xdist to 3.0.* 2022-11-11 16:59:46 +01:00
Raphael Michel
4d5c828e2a PDF editor: Update pdfjs from 1.7 to 3.0.279 2022-11-11 16:58:58 +01:00
Raphael Michel
f509306b35 PDF editor: Fix browser detection 2022-11-11 16:58:58 +01:00
Richard Schreiber
706e479cff Update vue to 2.7.14 (#2897) 2022-11-11 14:26:16 +01:00
Martin Gross
a5be7dcff5 PayPal2: Allow all https-pages to be framed, addressing CSP+popover issues (Z#23111577) 2022-11-10 19:10:03 +01:00
Raphael Michel
845b3a866b Fix switching from SMTP to custom email 2022-11-10 17:38:05 +01:00
Raphael Michel
91e1e079e1 Allow private SMTP servers by default in debug version 2022-11-10 17:38:03 +01:00
Raphael Michel
9075c75a93 Fix test for exception type 2022-11-10 14:59:22 +01:00
Raphael Michel
7b97204f2f Port b9feceba (Do not show a price if there are mandatory non-free addons) to voucher redemption 2022-11-10 14:48:55 +01:00
Raphael Michel
dfedf09656 PDF renderer: Normalize unicode before printing text 2022-11-10 13:53:15 +01:00
Raphael Michel
655cfe0afd Bump django-redis to 5.2.* 2022-11-10 09:17:26 +01:00
Raphael Michel
faf17f824e Bump django-hijack to 3.2.* 2022-11-10 09:17:26 +01:00
Raphael Michel
fbf52a5219 Bump Pillow to 9.3.* 2022-11-10 09:17:26 +01:00
Richard Schreiber
9466c57c35 Translations: Update Greek
Currently translated at 58.2% (2847 of 4888 strings)

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

powered by weblate
2022-11-10 09:17:11 +01:00
exbu
806ef8477b Translations: Update Dutch (informal) (nl_Informal)
Currently translated at 82.6% (4040 of 4888 strings)

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

powered by weblate
2022-11-10 09:17:11 +01:00
Raphael Michel
7cb654706a Translations: Update German (informal) (de_Informal)
Currently translated at 99.6% (4873 of 4888 strings)

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

powered by weblate
2022-11-10 09:17:11 +01:00
Raphael Michel
dea448e0f8 Translations: Update German
Currently translated at 99.6% (4889 of 4904 strings)

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

powered by weblate
2022-11-10 09:17:11 +01:00
Dennis Lichtenthäler
98b413249a Translations: Update German
Currently translated at 100.0% (4889 of 4889 strings)

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

powered by weblate
2022-11-10 09:17:11 +01:00
Raphael Michel
4630c1fe8b Allow to charge a cancellation fee on unpaid orders (#2845) 2022-11-10 09:11:43 +01:00
Raphael Michel
bb718375e9 Stripe: Allow to set a custom statement descriptor suffix (#2883) 2022-11-10 09:11:35 +01:00
Martin Gross
7d2dd722bd PayPal: Fix loading of Smart Payment Buttons on APM payment page (regression introduced in #2875) 2022-11-09 15:04:35 +01:00
Raphael Michel
2adbd3cd4a Fix isort complain 2022-11-08 18:24:33 +01:00
Raphael Michel
fb483ad00e Add comment to test 2022-11-08 18:07:50 +01:00
Raphael Michel
9cef65f359 API: Fix carts with addons/bundles not being created correctly 2022-11-08 18:03:16 +01:00
Raphael Michel
ceeb69856b API: Support is_bundled during order creation 2022-11-08 16:55:35 +01:00
Raphael Michel
c184187e59 Improve error handling for CSV parsing in voucher bulk creation 2022-11-08 10:27:31 +01:00
Raphael Michel
8ca38bdbaf Badges: Use ExportError instead of OrderError 2022-11-08 10:24:56 +01:00
Raphael Michel
3ae42b0c57 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-11-07 16:22:46 +01:00
Raphael Michel
6368954ecb Translations: Update Ukrainian
Currently translated at 74.1% (3615 of 4878 strings)

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

powered by weblate
2022-11-07 16:22:13 +01:00
Fazenda Dengo
26ebdb7113 Translations: Update Portuguese
Currently translated at 3.8% (187 of 4878 strings)

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

powered by weblate
2022-11-07 16:22:13 +01:00
Fazenda Dengo
a1cb0b386b Translations: Update Portuguese (Portugal)
Currently translated at 63.1% (127 of 201 strings)

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

powered by weblate
2022-11-07 16:22:13 +01:00
Fazenda Dengo
d46e1aba52 Translations: Update Portuguese (Portugal)
Currently translated at 76.6% (3737 of 4878 strings)

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

powered by weblate
2022-11-07 16:22:13 +01:00
Dennis Lichtenthäler
1f41184f9e Translations: Update German
Currently translated at 100.0% (4878 of 4878 strings)

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

powered by weblate
2022-11-07 16:22:13 +01:00
dependabot[bot]
2c746dffb2 Bump @babel/preset-env from 7.19.3 to 7.20.2 in /src/pretix/static/npm_dir (#2886)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-07 16:06:25 +01:00
dependabot[bot]
84bd4e0e94 Bump @rollup/plugin-node-resolve from 14.1.0 to 15.0.1 in /src/pretix/static/npm_dir (#2877)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-07 16:06:12 +01:00
Raphael Michel
93f8b38745 SMTP settings: Don't replace password with ***** 2022-11-07 16:05:33 +01:00
Raphael Michel
4110d6ec15 Do some basic cleaning on dynamic subjects 2022-11-07 15:58:18 +01:00
Raphael Michel
9bea383ff0 Make all email subjects configurable (#2884)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2022-11-07 15:50:09 +01:00
Raphael Michel
2287c8b34c Bump django-filter to 22.1 2022-11-07 15:35:31 +01:00
Raphael Michel
f7a129854e Bump pytest-mock to 3.10 2022-11-07 15:35:31 +01:00
Raphael Michel
a96fccef63 Bump pyjwt to 2.6.* 2022-11-07 15:35:31 +01:00
Raphael Michel
dc5a85b39e PDF: Fix another crash if unknown font is used
see also PRETIXEU-7K4
2022-11-07 15:35:31 +01:00
dependabot[bot]
23f9fb4a9a Bump @rollup/plugin-babel in /src/pretix/static/npm_dir
Bumps [@rollup/plugin-babel](https://github.com/rollup/plugins/tree/HEAD/packages/babel) from 5.3.1 to 6.0.2.
- [Release notes](https://github.com/rollup/plugins/releases)
- [Changelog](https://github.com/rollup/plugins/blob/master/packages/babel/CHANGELOG.md)
- [Commits](https://github.com/rollup/plugins/commits/babel-v6.0.2/packages/babel)

---
updated-dependencies:
- dependency-name: "@rollup/plugin-babel"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-07 15:33:54 +01:00
dependabot[bot]
6130c45b3e Bump vue and vue-template-compiler in /src/pretix/static/npm_dir
Bumps [vue](https://github.com/vuejs/core) and [vue-template-compiler](https://github.com/vuejs/vue). These dependencies needed to be updated together.

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

Updates `vue-template-compiler` from 2.7.10 to 2.7.13
- [Release notes](https://github.com/vuejs/vue/releases)
- [Changelog](https://github.com/vuejs/vue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue/compare/v2.7.10...v2.7.13)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-07 15:33:44 +01:00
dependabot[bot]
83840c4024 Bump @babel/core from 7.19.3 to 7.19.6 in /src/pretix/static/npm_dir (#2880)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-07 15:33:33 +01:00
Maciej Szymczak
02d1d1e0c3 Translations: Update Polish
Currently translated at 14.1% (688 of 4878 strings)

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

powered by weblate
2022-11-07 09:08:18 +01:00
Maciej Szymczak
f641f0fdd1 Translations: Update Polish
Currently translated at 13.8% (677 of 4878 strings)

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

powered by weblate
2022-11-07 09:08:18 +01:00
Raphael Michel
0c827c94a8 Fix mail text preview for languages down below in the list 2022-11-04 13:18:07 +01:00
Raphael Michel
4fb76f1b55 API: Fix overriding date_admission during event clone 2022-11-04 10:39:21 +01:00
Raphael Michel
cb3b1f3ac5 API: Add discount to order position serializer 2022-11-03 15:29:20 +01:00
Richard Schreiber
0b95f89882 Fix paypal disabling continue button (Z#23110784) (#2875) 2022-11-03 13:27:30 +01:00
Raphael Michel
bccd7cd1a4 API: Fix setting plugins during event creation 2022-11-01 18:39:01 +01:00
Richard Schreiber
9c33078a40 Fix isort error 2022-11-01 17:15:27 +01:00
Raphael Michel
6403e5370a Don't crash if a exporter signal returns None 2022-11-01 13:40:22 +01:00
Raphael Michel
3fe2a0455f Fix crash in CartManager 2022-11-01 12:14:30 +01:00
pretix translation bot
6956b198ae Update translations (#2874)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-11-01 11:27:26 +01:00
Raphael Michel
36f7a3d3a3 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-10-31 16:56:46 +01:00
Fazenda Dengo
587e1a1c96 Translations: Update Portuguese (Portugal)
Currently translated at 76.6% (3737 of 4877 strings)

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

powered by weblate
2022-10-31 16:56:14 +01:00
Raphael Michel
8707ab5277 Use a more human-friendly file name for calendar attachments 2022-10-31 16:55:49 +01:00
Raphael Michel
4f6fa84fa7 Fix locking timeout no longer working after redis version change 2022-10-31 16:02:42 +01:00
Raphael Michel
e76d13bf8e Improve logging of periodic command errors 2022-10-31 15:23:32 +01:00
Raphael Michel
39449ecbbe Sentry: Set propagate_traces=False 2022-10-31 14:13:59 +01:00
Raphael Michel
0204b42587 Revert "Attempt downgrade to sentry-sdk 1.8.*"
This reverts commit c1d1e437cc.
2022-10-31 14:10:11 +01:00
Raphael Michel
c1d1e437cc Attempt downgrade to sentry-sdk 1.8.* 2022-10-31 12:30:03 +01:00
Raphael Michel
2fe0ceb4c7 PDF: Fail gracefully on unknown font 2022-10-31 09:53:06 +01:00
Raphael Michel
4cba292b57 Bump to 4.15.0.dev0 2022-10-28 13:34:05 +02:00
Raphael Michel
9e91197c5d Bump to 4.14.0 2022-10-28 13:32:30 +02:00
Raphael Michel
10a8cf3758 Split OverviewReport into modular functions 2022-10-27 22:41:05 +02:00
Raphael Michel
d1deb35711 Add support for base_qs parameter in order_overview function 2022-10-27 22:41:05 +02:00
Raphael Michel
c4d2b0bff7 Fix handling of default ticket layouts during event cloning 2022-10-27 21:55:08 +02:00
Raphael Michel
2d8ceb3255 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4877 of 4877 strings)

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

powered by weblate
2022-10-26 21:13:19 +02:00
Raphael Michel
176e5f115b Translations: Update German
Currently translated at 100.0% (4877 of 4877 strings)

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

powered by weblate
2022-10-26 21:13:19 +02:00
Raphael Michel
9939793e91 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2022-10-26 20:57:05 +02:00
Raphael Michel
7d3cd16785 Add workaround for https://github.com/getsentry/sentry-python/issues/1700 2022-10-26 11:58:44 +02:00
Raphael Michel
7c5fac306a Bank transfer: Match orders based on invoice number (#2867) 2022-10-26 11:06:45 +02:00
Raphael Michel
37683781d0 Fix incorrect variable use in test 2022-10-26 10:49:48 +02:00
Raphael Michel
89dda69205 Allow to sort export of all tickets or badges by question answer (#2865) 2022-10-26 10:43:13 +02:00
Raphael Michel
f2c72e5ff8 Bump pytest to 7.2.* 2022-10-26 09:39:40 +02:00
Raphael Michel
780ebfe120 Bump sentry-sdk to 1.10.* 2022-10-26 09:39:40 +02:00
Raphael Michel
c7d5b687f3 Bump django-countries to 7.4.* 2022-10-26 09:39:40 +02:00
Raphael Michel
5fcb51f372 Bump sepaxml to 2.5.* 2022-10-26 09:39:40 +02:00
FlorianKohlerb88f86e20d524626
9b08f1b286 Translations: Update French
Currently translated at 47.0% (2291 of 4870 strings)

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

powered by weblate
2022-10-26 09:21:54 +02:00
Raphael Michel
4f35be7a25 Fix isort issue 2022-10-25 22:35:16 +02:00
Raphael Michel
884dbff4b8 Log details of API exceptions 2022-10-25 17:57:25 +02:00
Raphael Michel
51768eaef9 Add support for request ID headers 2022-10-25 17:17:59 +02:00
Raphael Michel
45f579caf2 Vouchers: Fix label on redemption page 2022-10-25 15:00:00 +02:00
fyksen
a29dbd88ac Translations: Update Norwegian Bokmål
Currently translated at 7.0% (344 of 4870 strings)

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

powered by weblate
2022-10-25 14:55:12 +02:00
fyksen
957337b091 Translations: Update Norwegian Bokmål
Currently translated at 7.0% (343 of 4870 strings)

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

powered by weblate
2022-10-25 14:55:12 +02:00
Raphael Michel
4983073172 API: Fix crash with deletion of cart positions with add-ons 2022-10-25 12:08:58 +02:00
Raphael Michel
b99d21df69 Fix crash in event creation with very long event names 2022-10-25 12:04:52 +02:00
Raphael Michel
2cfffe6526 Fix edge case in item add-on formset validation 2022-10-25 11:55:21 +02:00
Raphael Michel
87a413ea42 API: Enforce that Item.default_price can't be null 2022-10-25 11:39:48 +02:00
Raphael Michel
4146437380 Do not ask people to enter an address if they can't 2022-10-25 09:27:02 +02:00
Richard Schreiber
b4a7369642 Fix: make hidden form inputs visible, if invalid (Z#23110236) 2022-10-21 11:11:45 +02:00
Raphael Michel
f9b51a8abb Fix incorrect handling of native customer logins 2022-10-20 18:07:46 +02:00
Raphael Michel
d69d70cfb1 Voucher: Add min_usages parameter (#2853) 2022-10-20 18:07:24 +02:00
Martin Gross
ba2d908a89 Security Profiles: Add stripeterminal.paymentintent to POS (#2850) 2022-10-19 17:57:44 +02:00
Raphael Michel
c05abcbccd Bump stripe to 4.2.* and raise Stripe API version 2022-10-19 17:55:55 +02:00
Martin Gross
e16fd61bec Stripe Connect: Fix account name retrieval (#2857) 2022-10-19 17:55:34 +02:00
Raphael Michel
a29d69d8f7 Fix subevent calender closed after month switch 2022-10-19 17:35:40 +02:00
Raphael Michel
e063ad7dda Set payment_banktransfer_invoice_immediately by default 2022-10-19 17:28:22 +02:00
Raphael Michel
7c2bacf3b5 Fix crash on rendering error 404 page 2022-10-19 16:52:35 +02:00
Raphael Michel
c921ca4e65 API: Fix crash when sorting orderpositions by attendee name 2022-10-19 15:32:29 +02:00
Raphael Michel
29a36057ed Fix border of navbar (that appeared out of nowhere?) 2022-10-19 10:52:47 +02:00
robbi5
5eeecf9214 Set default ticket layout QR code content explicitly to secret (#2858) 2022-10-18 17:24:28 +02:00
Raphael Michel
5992abcb7d Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4870 of 4870 strings)

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

powered by weblate
2022-10-12 10:30:54 +02:00
Fazenda Dengo
0db7ec3169 Translations: Update Portuguese (Portugal)
Currently translated at 76.7% (3737 of 4870 strings)

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

powered by weblate
2022-10-12 09:06:41 +02:00
Raphael Michel
8046bf98b7 Make link more visible on redirect.html page 2022-10-11 18:04:38 +02:00
Raphael Michel
9ed39ab0fa Stripe: Prevent lost session with firefox tracking protection 2022-10-11 18:04:30 +02:00
Raphael Michel
7e79fc8b5e Add title scheme "dr_prof_he" for person names 2022-10-11 14:57:19 +02:00
Raphael Michel
9da68645da Replace phrase "presale period" with "booking period" 2022-10-11 11:34:23 +02:00
Fazenda Dengo
f7a4b66da1 Translations: Update Portuguese (Portugal)
Currently translated at 75.9% (3697 of 4869 strings)

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

powered by weblate
2022-10-10 16:20:22 +02:00
Fazenda Dengo
c9212a483b Translations: Update Portuguese (Portugal)
Currently translated at 75.4% (3675 of 4869 strings)

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

powered by weblate
2022-10-10 16:20:22 +02:00
Raphael Michel
cc4e946d95 API: Fix order creation with nested cart positions 2022-10-10 13:45:11 +02:00
Raphael Michel
9d1cfd1eb6 Clarify cart order (#2844) 2022-10-10 12:59:49 +02:00
Raphael Michel
38969747f4 API: New implementation for cart creation (#2833) 2022-10-10 12:59:38 +02:00
Raphael Michel
6e7af4c64b API: Add device info to all security profiles 2022-10-10 12:36:27 +02:00
Raphael Michel
fb45f9f08c Fix readthedocs build 2022-10-10 11:47:00 +02:00
Raphael Michel
6848ce24eb Attempt to fix readthedocs build config 2022-10-10 09:53:36 +02:00
Raphael Michel
dac4fd8d3c Attempt to fix readthedocs build config 2022-10-10 09:49:49 +02:00
Raphael Michel
6905d3e801 Attempt to fix readthedocs build config 2022-10-10 09:41:29 +02:00
Raphael Michel
909b16be64 Attempt to fix readthedocs build config 2022-10-10 09:33:42 +02:00
Raphael Michel
a18162cc47 Attempt to fix readthedocs build config 2022-10-10 09:21:43 +02:00
Raphael Michel
6f0fc9ed49 Fix form validation of cancellation form 2022-10-07 12:39:39 +02:00
Raphael Michel
2409c513d6 Remove useless margins at the end of panel boxes 2022-10-07 10:17:29 +02:00
Raphael Michel
0a95f90012 OIDC RP: Use a separator value in state that is less likely to get lost in transit 2022-10-07 09:42:50 +02:00
Julian Rother
edbd24e942 Checkout: do not show bundled products as "Selected add-ons" in questions step (#2820) 2022-10-07 09:12:13 +02:00
Martin Gross
3940af868b Mail: Fix retry on non-permanent failures (PRETIXEU-7E3) 2022-10-06 18:17:12 +02:00
Raphael Michel
8b4197d868 Bump djangorestframework to 3.14.* 2022-10-06 16:05:35 +02:00
Raphael Michel
632e441c24 Bump django-statici18n to 2.3.* 2022-10-06 14:31:04 +02:00
Andreas Grillenberger
c73ede81ae Docs: Fix incorrect endpoint URL (#2829) 2022-10-06 14:25:08 +02:00
Raphael Michel
c4b7aeaaa2 Consistently set default background PDFs on server, not client (#2840)
Co-authored-by: Martin Gross <gross@rami.io>
2022-10-06 14:14:56 +02:00
Raphael Michel
b5bd98336a Docs: Update API docs for digital content plugin 2022-10-06 10:57:00 +02:00
Raphael Michel
5af52f6087 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4869 of 4869 strings)

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

powered by weblate
2022-10-06 10:51:04 +02:00
Raphael Michel
c5e4d06921 Translations: Update German
Currently translated at 100.0% (4869 of 4869 strings)

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

powered by weblate
2022-10-06 10:51:04 +02:00
Raphael Michel
917cc00091 Translations: Update German
Currently translated at 100.0% (4869 of 4869 strings)

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

powered by weblate
2022-10-06 10:51:04 +02:00
Raphael Michel
63cb88bfb8 Fix crash in OrderChangeManager log entry generation 2022-10-06 09:41:38 +02:00
Raphael Michel
ac1fe15b6c Fix order-level exports through the API 2022-10-05 17:38:28 +02:00
Raphael Michel
ddaa0570bc Revert "Use a temporary file for exports for more stable writing" 2022-10-05 13:39:20 +02:00
Raphael Michel
07352743f2 Fix missing seek call in export task 2022-10-05 13:31:53 +02:00
Raphael Michel
f99ef5fff2 Fix regression when exporting empty data 2022-10-05 13:22:46 +02:00
Raphael Michel
9d686072e2 Fix regression in export task 2022-10-05 12:56:28 +02:00
Raphael Michel
4e44a2809b Fix safe_openpyxl implementation to not leak memory in WriteOnlyWorksheet 2022-10-05 12:27:29 +02:00
Raphael Michel
370e4eafc2 Use a temporary file for exports for more stable writing 2022-10-05 12:26:36 +02:00
Raphael Michel
b7ec372ebc Add exporter for list of customers 2022-10-05 10:36:57 +02:00
Raphael Michel
60cdfe4029 Allow organizer-level exports with separate permission and no event selection 2022-10-05 10:36:57 +02:00
Raphael Michel
74e14285ee Remove hack for gift card exporters, it's not required 2022-10-05 10:36:57 +02:00
Richard Schreiber
8f56ab54a4 PDF/Badges: Improve performance/reduce filesize when creating multiple badges (#2824)
* improve bg performance by using pdftk

* fix handling of rotated background-PDFs
2022-10-05 06:12:23 +02:00
Raphael Michel
4ac58654a0 Run isort on generated protobuf code 2022-10-04 18:03:49 +02:00
Raphael Michel
167eb06aeb Bump django-debug-toolbar to 3.7 2022-10-04 18:03:49 +02:00
Raphael Michel
9a0cc7e8c1 Bump pytest-mock to 3.9 2022-10-04 18:03:49 +02:00
dependabot[bot]
d4ff1808d5 Bump @babel/preset-env in /src/pretix/static/npm_dir
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.19.1 to 7.19.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.19.3/packages/babel-preset-env)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 18:02:05 +02:00
Raphael Michel
0ff22786cb Fix typeahead for item meta values with limited access 2022-10-04 16:58:11 +02:00
yvovandoorn
abfb53872c bump css-inline from 0.7.x to 0.8.x to allow for successful arm64 installs 2022-10-04 16:58:09 +02:00
dependabot[bot]
67f60a9e09 Bump rollup from 2.79.0 to 2.79.1 in /src/pretix/static/npm_dir
Bumps [rollup](https://github.com/rollup/rollup) from 2.79.0 to 2.79.1.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.79.0...v2.79.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 16:45:12 +02:00
Raphael Michel
1d04d40507 Bump protobuf to 4.21.*, regenerate protobuf file 2022-10-04 16:43:34 +02:00
Raphael Michel
14fdd7cfca Bump django-compressor to 4.1.* 2022-10-04 16:43:34 +02:00
Raphael Michel
402ed61756 Bump PyPDF2 to 2.11.* 2022-10-04 16:43:34 +02:00
dependabot[bot]
66c75cbb1b Bump @babel/core from 7.19.1 to 7.19.3 in /src/pretix/static/npm_dir
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.19.1 to 7.19.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.19.3/packages/babel-core)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 16:28:39 +02:00
dependabot[bot]
c32791c7dd Bump @rollup/plugin-node-resolve in /src/pretix/static/npm_dir
Bumps [@rollup/plugin-node-resolve](https://github.com/rollup/plugins/tree/HEAD/packages/node-resolve) from 13.3.0 to 14.1.0.
- [Release notes](https://github.com/rollup/plugins/releases)
- [Changelog](https://github.com/rollup/plugins/blob/master/packages/node-resolve/CHANGELOG.md)
- [Commits](https://github.com/rollup/plugins/commits/node-resolve-v14.1.0/packages/node-resolve)

---
updated-dependencies:
- dependency-name: "@rollup/plugin-node-resolve"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 16:28:32 +02:00
Richard Schreiber
d6846d8415 Cart: change icon from checkbox to arrow-right for voucher submit (#2832) 2022-10-04 11:06:39 +02:00
Raphael Michel
b1c8efa33f AsyncFormView/AsyncPostView: Allow to report status back 2022-09-30 13:58:07 +02:00
Raphael Michel
f14d031de4 Fix semantics of LockTimeoutException and LockReleaseException 2022-09-30 13:41:51 +02:00
Raphael Michel
25c86db6f5 Do not try to unserialize empty string as phone number 2022-09-30 13:28:02 +02:00
Richard Schreiber
7205d0689e Badges: fix pagesizes for 8 A7 on A4-page 2022-09-30 09:18:54 +02:00
Raphael Michel
cde46012cb Add .badge-variant styles 2022-09-29 18:05:21 +02:00
Richard Schreiber
e4a0122938 fix pagesizes and offsets 2022-09-29 17:30:38 +02:00
Raphael Michel
77c08cb710 Fix whitespace issue in EPC QR generation 2022-09-29 13:55:50 +02:00
Raphael Michel
af49a02047 Bump version to 4.14.0.dev0a 2022-09-29 13:37:55 +02:00
Raphael Michel
11495c80e3 Bump version to 4.13.0 2022-09-29 13:37:13 +02:00
Raphael Michel
00ab996640 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4869 of 4869 strings)

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

powered by weblate
2022-09-29 12:24:42 +02:00
Raphael Michel
a4f77b3e4a Translations: Update German
Currently translated at 100.0% (4869 of 4869 strings)

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

powered by weblate
2022-09-29 12:24:42 +02:00
Raphael Michel
1839dcdb74 Fix off-by-one error in retry intervals 2022-09-29 11:39:24 +02:00
Raphael Michel
6bba37288e Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-09-29 11:24:28 +02:00
Mauro Amico
0c3a12b4d3 Translations: Update Italian
Currently translated at 19.0% (927 of 4867 strings)

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

powered by weblate
2022-09-29 11:23:59 +02:00
Anna-itk
7e0b590e10 Translations: Update Danish
Currently translated at 35.4% (1723 of 4867 strings)

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

powered by weblate
2022-09-29 11:23:59 +02:00
Raphael Michel
009f100375 Cart: Display included taxes in total sum from the start 2022-09-29 10:25:10 +02:00
Raphael Michel
4fdbe3912a Workaround for translation of some country names
Workaround for https://github.com/SmileyChris/django-countries/issues/364
2022-09-29 10:25:10 +02:00
Raphael Michel
d4af9130e0 Fix styling of headlines in alert boxes 2022-09-28 23:03:55 +02:00
Raphael Michel
d56e2de409 Bank transfer: Do not show EPC-QR and GiroCode for non-EUR payments 2022-09-28 13:38:18 +02:00
Martin Gross
6a22cb3021 PayPal2: Refuse ISU-connection with unconfirmed email address 2022-09-28 13:20:20 +02:00
Richard Schreiber
814e8fc73b Fix hidden bulk-action filter-form (Z#23108559) (#2817) 2022-09-27 10:25:37 +02:00
Bernd Mohring
6aedfbd42e Docs: Correct Parameter Name/Description for mail() (#2814) 2022-09-22 21:56:19 +02:00
Richard Schreiber
4207b2c0fb Improve voucher redeem if no products are available (#2813) 2022-09-22 21:55:24 +02:00
Richard Schreiber
f35eb2a2f4 Fix ticket download-date hint when plugins disallow download (#2812) 2022-09-22 13:46:35 +02:00
Martin Gross
4b49782fac Invoices: Explicitly set regular_font for main invoice table 2022-09-22 10:42:10 +02:00
Raphael Michel
8fb38d8838 API: Add new /device/info endpoint 2022-09-21 10:22:41 +02:00
Raphael Michel
925077e30f Fix crash on password change page when not logged in 2022-09-21 10:05:01 +02:00
Richard Schreiber
9e07a40ae9 PDF editor: Fix empty preview tab in Chrome (#2806) 2022-09-20 11:14:28 +02:00
Raphael Michel
c7c3aa2c95 Bump django-bootstrap3 to 22.1.* 2022-09-20 11:00:27 +02:00
Raphael Michel
b55c70817a Bump Pillow to 9.2.* 2022-09-20 10:58:57 +02:00
Raphael Michel
18934810f1 Bump BeautifulSoup4 to 4.11 2022-09-20 10:58:54 +02:00
Raphael Michel
865e4c14a2 Bump requests to 2.28.* 2022-09-20 10:55:36 +02:00
Raphael Michel
8cb9f2d742 Bump django-phonenumber-field to 7.0.* 2022-09-20 10:48:15 +02:00
Raphael Michel
d0d3e5ffe4 Bump chardet to 5.0.* 2022-09-20 10:48:10 +02:00
Raphael Michel
857f56c286 Bump flake8 to 5.0 2022-09-20 10:37:57 +02:00
Raphael Michel
167eb85aa3 Bump redis-py to 4.3.* 2022-09-20 10:33:57 +02:00
Raphael Michel
e2f983542e Bump django-countries to 7.3 2022-09-20 10:25:36 +02:00
Raphael Michel
cf622392c0 Ensure uniqueness of question identifiers (#2358) 2022-09-20 10:20:56 +02:00
Raphael Michel
913a83b43d Fix customer being created with name "None" via SSO 2022-09-19 22:04:55 +02:00
Raphael Michel
b79a3a9c2f Fix domain update in organizer 2022-09-19 22:00:53 +02:00
Raphael Michel
b3a1ee3127 Translations: Update German
Currently translated at 100.0% (4867 of 4867 strings)

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

powered by weblate
2022-09-19 21:34:49 +02:00
Raphael Michel
18db00f310 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4867 of 4867 strings)

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

powered by weblate
2022-09-19 21:34:49 +02:00
Raphael Michel
9e4d6a9e97 Add new words to spellcheck wordlist 2022-09-19 21:32:24 +02:00
Raphael Michel
21148c6772 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-09-19 18:32:10 +02:00
Mauro Amico
70a3defc2c Translations: Update Italian
Currently translated at 19.2% (923 of 4791 strings)

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

powered by weblate
2022-09-19 18:31:38 +02:00
Michele Pagnozzi
535399b2e1 Translations: Update Italian
Currently translated at 19.2% (923 of 4791 strings)

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

powered by weblate
2022-09-19 18:31:38 +02:00
Raphael Michel
278111b15b Add documentation on customer accounts and SSO 2022-09-19 18:31:07 +02:00
Raphael Michel
a4171ef819 OpenID Connect OP support for customer accounts 2022-09-19 18:31:07 +02:00
Raphael Michel
7f5518dbf6 OpenID Connect RP support for customer accounts 2022-09-19 18:31:07 +02:00
Mauro Amico
e102a590ab Translations: Update Italian
Currently translated at 18.0% (865 of 4791 strings)

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

powered by weblate
2022-09-19 15:56:40 +02:00
Svyatoslav
383dc5ab9a Translations: Update Latvian
Currently translated at 44.8% (2148 of 4791 strings)

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

powered by weblate
2022-09-19 15:56:40 +02:00
Svyatoslav
4dc65f3858 Translations: Update Russian
Currently translated at 23.7% (1139 of 4791 strings)

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

powered by weblate
2022-09-19 15:56:40 +02:00
Ismael Menéndez Fernández
e4dccf87d4 Translations: Update Galician
Currently translated at 12.2% (587 of 4791 strings)

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

powered by weblate
2022-09-19 15:56:40 +02:00
Raphael Michel
7dece3732c Fix transaction warning in import with auto-checkin 2022-09-19 09:46:26 +02:00
Raphael Michel
015c22662f Fix incorrect syntax of issue template 2022-09-16 13:45:43 +02:00
Raphael Michel
36b3968667 Add SECURITY.md and new issue templates 2022-09-16 13:43:51 +02:00
Richard Schreiber
4b9932420b PDF: Fix missing backgrounds when outputting multiple tickets/badges per page (Z#23107984) 2022-09-16 11:06:24 +02:00
Raphael Michel
87cfd8f538 Fix name placeholder not being used correctly in scheduled emails (#2794) 2022-09-15 13:35:35 +02:00
Raphael Michel
0fc7d78281 Mail sending: Prevent retry intervals higher than visibility_timeout (1h) 2022-09-15 11:26:25 +02:00
Raphael Michel
39086e81ac Fix missing countdown in new webhook retry logic 2022-09-15 11:23:10 +02:00
Raphael Michel
c1233ed692 New retry logic for webhooks (#2790)
Co-authored-by: Richard Schreiber <wiffbi@gmail.com>
2022-09-15 09:41:39 +02:00
Richard Schreiber
1a401ec1e9 Fix: display cleaned filename in upload forms (#2788) 2022-09-15 09:41:32 +02:00
Mauro Amico
79beeebfa6 Upgrade package-lock to v2 (#2769)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-09-15 09:40:44 +02:00
Raphael Michel
ccf5bea367 Revert "Bump pep8-naming and pycodestyle"
This reverts commit c77790821d.
2022-09-14 19:10:30 +02:00
Raphael Michel
c77790821d Bump pep8-naming and pycodestyle 2022-09-14 18:53:43 +02:00
Christopher Banck
95ea2849c2 PDF: Add event weekday variable (#2789) 2022-09-14 18:51:37 +02:00
Raphael Michel
e45c162b3d Bank transfer: Minimal implementation of Swiss QR-bill (#2767)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2022-09-14 17:53:23 +02:00
Raphael Michel
9cdb1a9258 Fix documentation spellcheck issue 2022-09-14 12:42:19 +02:00
Martin Gross
241169873b Stripe: Automatically fail payments if the payment_intent has failed. 2022-09-14 10:07:34 +02:00
Andreas Schlapbach
690edf1c68 Correct backticks for analytics.js (#2791) 2022-09-13 21:39:22 +02:00
Christopher Banck
f606747dc9 Retain filenames when cloning an event 2022-09-13 10:46:08 +02:00
Raphael Michel
f2593d9b4b Fix crash if product with bundles has no tax rule 2022-09-12 21:20:22 +02:00
dependabot[bot]
cddd720a15 Bump rollup from 2.77.2 to 2.79.0 in /src/pretix/static/npm_dir (#2774)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-12 16:36:10 +02:00
dependabot[bot]
3c25dfe861 Bump @babel/preset-env from 7.18.9 to 7.19.0 in /src/pretix/static/npm_dir (#2787)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-12 16:36:00 +02:00
dependabot[bot]
97a7fc89e0 Bump vue and vue-template-compiler in /src/pretix/static/npm_dir (#2777)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-12 13:30:36 +02:00
dependabot[bot]
1742bb440c Bump @babel/core from 7.18.10 to 7.18.13 in /src/pretix/static/npm_dir (#2775)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-12 13:30:29 +02:00
Thomas Vranken
73717eaacf Translations: Update Dutch
Currently translated at 92.9% (4455 of 4791 strings)

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

powered by weblate
2022-09-12 13:29:47 +02:00
Ismael Menéndez Fernández
b84aa7f42e Translations: Update Galician
Currently translated at 11.7% (564 of 4791 strings)

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

powered by weblate
2022-09-12 13:29:47 +02:00
Mika Lammi
ef0f2dae77 Translations: Update Finnish
Currently translated at 18.2% (876 of 4791 strings)

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

powered by weblate
2022-09-12 13:29:47 +02:00
Raphael Michel
dcec0b03d4 Fix handling of contradictory input in image upload (PRETIXEU-78F) 2022-09-12 13:18:02 +02:00
Raphael Michel
db93981bac Don't try to cancel payment if provider plugin is disabled (PRETIXEU-754) 2022-09-12 13:06:03 +02:00
Raphael Michel
865bd126f3 Fix partial PATCH for gift cards (PRETIXEU-75P) 2022-09-12 12:59:39 +02:00
Raphael Michel
948952875c PayPal: Add additional error handling for old SDK (PRETIXEU-77B) 2022-09-12 12:57:58 +02:00
Raphael Michel
489ad87ad6 Fix rare crash in cart ID creation (PRETIXEU-78E) 2022-09-12 12:57:58 +02:00
Raphael Michel
62f7bd4fa5 Iterate cdb564970 to a fix that actually tackles the root cause 2022-09-12 12:57:58 +02:00
Martin Gross
353c9b4147 VAT: Transmit the country code of the normalized VAT-ID instead of the user provided one 2022-09-12 12:48:58 +02:00
Richard Schreiber
50a557b247 Widget: prevent clicks to bubble up outside the widget 2022-09-09 09:40:13 +02:00
Richard Schreiber
1dd3ed6057 Fix discount for distinct dates when only certain products are allowed (Z#23107419) (#2783) 2022-09-08 12:24:18 +02:00
Martin Gross
b1c6508a5c Update po files
[CI skip]

Signed-off-by: Martin Gross <gross@rami.io>
2022-09-08 12:09:42 +02:00
Martin Gross
7bc2e3ebb4 Webhooks: Spellcheck 2022-09-08 12:07:55 +02:00
Martin Gross
cd6b21120c Control/Order Details: Open invoices/cancellations PDFs in new tab 2022-09-08 12:04:22 +02:00
pretix translation bot
51d37f7474 Update translations (#2781)
Co-authored-by: Mika Lammi <mika.lammi@gmail.com>
Co-authored-by: Ismael Menéndez Fernández <ismael.menendez@balidea.com>
Co-authored-by: Martin Gross <gross@rami.io>
2022-09-08 12:02:19 +02:00
Richard Schreiber
61d5e66ad4 Fix JS-error on custom select2 focus handler 2022-09-08 10:20:13 +02:00
Martin Gross
603547f783 Update .po-files 2022-09-07 12:40:38 +02:00
Weblate
bf43be9312 Merge remote-tracking branch 'refs/remotes/origin/master' 2022-09-06 14:14:03 +02:00
Martin Gross
06a2dbd281 Update po files
[CI skip]

Signed-off-by: Martin Gross <gross@rami.io>
2022-09-06 14:12:02 +02:00
pretix translation bot
0cedb8d4db Update translations (#2780)
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Weblate <noreply@weblate.org>
2022-09-06 14:10:31 +02:00
Weblate
faa6c97536 Merge branch 'master' of https://github.com/pretix/pretix 2022-09-06 14:08:23 +02:00
Martin Gross
b65424ee3d Webhooks: Add Shop live/offline and Testmode on/off 2022-09-02 19:13:06 +02:00
Martin Gross
cf060f353d VAT Check: Surface validation errors during normalization 2022-08-29 13:14:33 +02:00
Martin Gross
cdb5649709 API: Explicitly call order.create_transactions() on Order Position PATCH/updates (PRETIXEU-766) 2022-08-26 17:06:08 +02:00
Martin Gross
8226e6c6d5 Webhooks: Add order.expirychanged and all order.refund.* Events 2022-08-25 10:25:01 +02:00
Martin Gross
0d453f3454 EU VAT Check: Query VAT RegEx list based on sanatized vat_prefix (GR vs. EL) PRETIXEU-75A 2022-08-23 11:43:39 +02:00
Martin Gross
80e0978054 PPv2: Check for OID and not PAYID in degraded failback-mode 2022-08-19 15:13:58 +02:00
Michael Stapelberg
5a8c567d02 API: allow setting password when creating customer (#2758)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-08-16 14:40:24 +02:00
Raphael Michel
9199d24df2 Add missing license header 2022-08-16 14:05:39 +02:00
Raphael Michel
41a05adb44 Update pytest requirement to 7.*, pytest-mock to 3.8, pytest-rerunfailures to 10.2, pytest-xdist to 2.5 2022-08-16 14:03:34 +02:00
Raphael Michel
95baca6920 Update oauthlib requirement from ==3.1.* to ==3.2.* 2022-08-16 14:00:51 +02:00
Raphael Michel
cff882edc0 aFix isort issues 2022-08-16 13:58:42 +02:00
Raphael Michel
b9feceba49 Do not show a price if there are mandatory non-free addons 2022-08-15 14:54:51 +02:00
Raphael Michel
2d584d115d Reorganize main.js in control module 2022-08-15 14:19:02 +02:00
Raphael Michel
b02fb7ffa8 FIx a few inconsistencies in AsyncFormView 2022-08-15 14:18:52 +02:00
Raphael Michel
e66506fa5b Order import: Do not lock if not necessary 2022-08-15 14:18:29 +02:00
Raphael Michel
65b4741e27 Fix crash on VAT IDs with missing country prefix 2022-08-14 21:44:50 +02:00
Raphael Michel
b5e5796549 Move VAT ID validation logic from vat_moss to core, support Norway 2022-08-14 13:50:18 +02:00
Raphael Michel
b6945687a6 Add last order modification time as an email placeholder (#2761)
* Add last order modification time as an email placeholder

* Update src/pretix/base/email.py

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

Co-authored-by: Richard Schreiber <wiffbi@gmail.com>
2022-08-11 21:41:13 +02:00
Raphael Michel
b586a52813 Improve settings link for propagated settings 2022-08-11 16:14:37 +02:00
Raphael Michel
000407bcaf PPv2: Fix payment button on late payment page 2022-08-10 14:30:24 +02:00
Richard Schreiber
47989fd139 Fix: add alt attribute to default html email images 2022-08-10 09:16:41 +02:00
Raphael Michel
4ce51b81ed Limit length of invoice number counter 2022-08-09 16:01:20 +02:00
Raphael Michel
f63fbaca4d Do not run control context processor for error pages 2022-08-09 09:53:43 +02:00
Raphael Michel
7bab5b16a2 Badges: Add paper size HERMA 40x40 2022-08-08 13:18:30 +02:00
Raphael Michel
bdb0a176da Bring back status code 400 for unknown domains 2022-08-08 10:20:32 +02:00
Raphael Michel
345a05e4ae Improve error message on mismatching host header on new installations 2022-08-08 10:19:32 +02:00
Raphael Michel
3bb590c1ae Ensure /favicon.ico does not raise Resolver404 on custom domains 2022-08-08 10:01:50 +02:00
Richard Schreiber
9a5e07e078 PDF-Editor: fix other/other-i18n input prefill bug (Z#23104692) (#2756) 2022-08-05 15:44:08 +02:00
dependabot[bot]
a563881659 Bump @babel/core from 7.18.6 to 7.18.10 in /src/pretix/static/npm_dir (#2759)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-05 10:00:05 +02:00
Raphael Michel
50ebda332a Bump PyPDF to version 2 (#2755) 2022-08-05 09:53:32 +02:00
dependabot[bot]
9ae25caf5c Bump vue and vue-template-compiler in /src/pretix/static/npm_dir (#2749)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-05 09:35:37 +02:00
Michael Stapelberg
a27a5c65aa Docker: Set AUTOMIGRATE=skip for subprocesses (#2742) 2022-08-05 09:34:52 +02:00
dependabot[bot]
395dbedbed Bump rollup from 2.75.7 to 2.77.2 in /src/pretix/static/npm_dir (#2751)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-05 09:34:21 +02:00
dependabot[bot]
441f32349f Bump @babel/preset-env from 7.18.6 to 7.18.9 in /src/pretix/static/npm_dir (#2750)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-05 09:31:30 +02:00
Michael Stapelberg
fd3311ed60 Set default for SITE_URL to localhost:8000 (#2757) 2022-08-05 09:31:22 +02:00
Raphael Michel
6cd8fb5b58 Order import: Add test for country code XK 2022-08-05 09:30:10 +02:00
Raphael Michel
62f1e8d64b Order import: Allow custom country codes (like XK) 2022-08-05 09:29:31 +02:00
Raphael Michel
4eca90e287 Order data exporter: Do not use same colum name twice on same sheet 2022-08-05 09:27:05 +02:00
Raphael Michel
e6c45e40a9 Add a delay to the navigation typeahead to prevent many lookups 2022-08-04 17:59:19 +02:00
Raphael Michel
0bb41cc44e Navigation typeahead: only match order numbers and vouchers at the beginning and only >3 characters 2022-08-04 17:55:25 +02:00
Raphael Michel
6c7f5f4888 Fix performance issue in sendmail_run_rules cronjob 2022-08-04 17:01:04 +02:00
Raphael Michel
c13d873f1f Invalidate tickets when item meta data is changed 2022-08-04 15:41:45 +02:00
Raphael Michel
bddeb35520 Don't crash if an order can't be paid manually
Fixes PRETIXEU-5Q6
2022-08-01 19:12:56 +02:00
Raphael Michel
9ce519bb0b Docs: Fix missing redirect from http to https 2022-08-01 13:07:06 +02:00
Raphael Michel
1f9b0b842f Docs: Clarify information on search= parameter for orders 2022-08-01 13:06:01 +02:00
Raphael Michel
69b482849a Bump to 4.13.0.dev0 2022-07-29 16:10:21 +02:00
Raphael Michel
e57fa635ed Bump version to 4.12.0 2022-07-29 16:09:31 +02:00
Raphael Michel
40574a00f7 Stripe: Show connected account ID 2022-07-29 09:48:56 +02:00
Richard Schreiber
c65bb13ba4 Presale: fix doubled error messages (Z#23104019) (#2739) 2022-07-29 09:48:34 +02:00
Michael Stapelberg
713b13b027 Checkout: fix membership being selected when only one is available 2022-07-28 11:27:51 +02:00
Raphael Michel
8cf539a573 Fix og:description field for event series 2022-07-27 15:10:07 +02:00
Raphael Michel
8a8171bd24 Expose name scheme over the settings API, including details for device clients 2022-07-27 11:12:58 +02:00
Raphael Michel
d7922571e7 Docs: Add missing constraints on order codes 2022-07-26 11:23:57 +02:00
pretix translation bot
f244c11f5e Update translations (#2737)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-07-26 11:23:52 +02:00
Raphael Michel
436ed26185 Translations: Update German
Currently translated at 100.0% (4772 of 4772 strings)

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

powered by weblate
2022-07-26 11:01:04 +02:00
Raphael Michel
696daae641 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (201 of 201 strings)

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

powered by weblate
2022-07-26 10:58:23 +02:00
Raphael Michel
5e860c30f3 Translations: Update German
Currently translated at 100.0% (201 of 201 strings)

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

powered by weblate
2022-07-26 10:58:22 +02:00
Raphael Michel
e5b7afe85a Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4772 of 4772 strings)

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

powered by weblate
2022-07-26 10:58:22 +02:00
Raphael Michel
53a0d63dce Translations: Update German
Currently translated at 100.0% (4772 of 4772 strings)

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

powered by weblate
2022-07-26 10:58:22 +02:00
Raphael Michel
93a202e8c8 Update bleach to 5.0.* 2022-07-25 19:00:43 +02:00
Raphael Michel
66a60f402e Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-07-25 18:59:56 +02:00
Raphael Michel
94900cd386 Allow to hide cancellation fee from end-user in approval flow (#2735)
Co-authored-by: Richard Schreiber <wiffbi@gmail.com>
2022-07-25 18:58:25 +02:00
Raphael Michel
c90cb1f19c Change sort order in cart to keep subevents together (#2730)
Co-authored-by: Richard Schreiber <wiffbi@gmail.com>
2022-07-25 18:35:10 +02:00
Raphael Michel
b06e98ace4 API: Add endpoints to trigger data shredders (#2731) 2022-07-25 18:34:40 +02:00
Raphael Michel
59edb355f8 Invoice renderer: Print gift card amount even on paid orders if partial payments should be printed (#2734) 2022-07-25 18:24:00 +02:00
Mauro Amico
a3bff0a697 Add custom_field in orders API (#2715) 2022-07-25 15:37:27 +02:00
Raphael Michel
adfe2764e3 Docs: Add Exhibitor API config property terms_url 2022-07-25 12:20:15 +02:00
Michael Stapelberg
0d407ce36f API: Allow to send activation email when creating customers (#2729)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-07-25 12:16:48 +02:00
Hana Happl
f3a77d8154 Translations: Update Czech
Currently translated at 26.3% (1256 of 4760 strings)

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

powered by weblate
2022-07-25 12:09:31 +02:00
Raphael Michel
932a2b16ac Update sentry-sdk to 1.8.* 2022-07-25 12:09:14 +02:00
Michael Stapelberg
8502387af8 Docs: Clarify customer name field editing (#2728) 2022-07-25 11:56:15 +02:00
Raphael Michel
157484b42a Revert accidental commit "Make new functionality optional"
This reverts commit af7d32462873fbbfc3a44a06424bd3c941c3b5f2.
2022-07-25 11:53:23 +02:00
Raphael Michel
839585a3a9 Make new functionality optional 2022-07-25 11:52:32 +02:00
Raphael Michel
9101b5b69d API: Fix high load in pdf_data endpoints if addons are in use 2022-07-22 17:43:03 +02:00
Raphael Michel
f6fa9b4b16 Fix high query load in pdf_data endpoints 2022-07-22 17:12:07 +02:00
Hana Happl
826f1fcfa8 Translations: Update Czech
Currently translated at 26.1% (1245 of 4760 strings)

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

powered by weblate
2022-07-22 16:47:39 +02:00
Raphael Michel
ede8d5bc60 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4760 of 4760 strings)

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

powered by weblate
2022-07-22 16:47:39 +02:00
Raphael Michel
ffde690d9e Translations: Update German
Currently translated at 100.0% (4760 of 4760 strings)

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

powered by weblate
2022-07-22 16:47:39 +02:00
Hana Happl
319b95c3fb Translations: Update Czech
Currently translated at 25.2% (1204 of 4760 strings)

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

powered by weblate
2022-07-22 16:47:39 +02:00
Julius Rickert
76cf9c4c54 Translations: Update French
Currently translated at 47.6% (2267 of 4760 strings)

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

powered by weblate
2022-07-22 16:47:39 +02:00
Julius Rickert
c40e5cca80 Translations: Update German
Currently translated at 100.0% (4760 of 4760 strings)

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

powered by weblate
2022-07-22 16:47:39 +02:00
Raphael Michel
4f7c7800b0 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4760 of 4760 strings)

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

powered by weblate
2022-07-22 16:47:39 +02:00
Raphael Michel
f0922c42d1 Translations: Update German
Currently translated at 100.0% (4760 of 4760 strings)

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

powered by weblate
2022-07-22 16:47:39 +02:00
Hana Happl
aa56675594 Translations: Update Czech
Currently translated at 23.5% (1123 of 4760 strings)

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

powered by weblate
2022-07-22 16:47:39 +02:00
Tony Pavlik
19045a86b4 Translations: Update Czech
Currently translated at 23.2% (1108 of 4760 strings)

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

powered by weblate
2022-07-22 16:47:39 +02:00
Hana Happl
15d8613a0e Translations: Update Czech
Currently translated at 23.2% (1108 of 4760 strings)

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

powered by weblate
2022-07-22 16:47:39 +02:00
Michael
19de9bf22f Translations: Update Czech
Currently translated at 23.2% (1108 of 4760 strings)

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

powered by weblate
2022-07-22 16:47:39 +02:00
Raphael Michel
84ae93be26 Translation word list extension 2022-07-22 13:11:42 +02:00
Raphael Michel
d628acc62a Remove left-over debug statements 2022-07-21 09:14:38 +02:00
Raphael Michel
4cc249e20e Fix pdf_data selection 2022-07-21 09:11:33 +02:00
Raphael Michel
0d1ebf4e58 API: Add RPC-style check-in endpoints to support multi-event scan (#2719) 2022-07-19 16:43:03 +02:00
Raphael Michel
748ea38e15 Merge pull request #2714 from pretix-translations/weblate-pretix-pretix 2022-07-17 18:45:05 +02:00
Michael
50ab762905 Translations: Update Czech
Currently translated at 12.1% (578 of 4760 strings)

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

powered by weblate
2022-07-14 10:12:22 +02:00
Hans Fraiponts
b72d6478d2 Translations: Update Dutch
Currently translated at 93.4% (4446 of 4760 strings)

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

powered by weblate
2022-07-14 10:12:22 +02:00
Richard Schreiber
87cea200a9 Checkout: label add-ons as free if price is 0 and add-ons are not included in the main product 2022-07-14 10:12:17 +02:00
Raphael Michel
32ab7c3d4f API: Consistency with other subevent filters 2022-07-14 09:21:56 +02:00
Raphael Michel
8c63659050 API: Allow to filter quota list for multiple subevents 2022-07-13 16:29:30 +02:00
Raphael Michel
23e5af13ad Fix untranslated error message 2022-07-12 15:07:34 +02:00
Raphael Michel
09eb14fe37 Fix JavaScript issue on "invalid voucher" message 2022-07-11 18:08:37 +02:00
Raphael Michel
129e831e06 Add option to scan add-on based on its parent position's secret (#2705) 2022-07-06 10:32:05 +02:00
Raphael Michel
1ffe87ee18 Widget: Expose variations filter in JavaScript 2022-07-06 10:21:30 +02:00
Raphael Michel
b1b4177947 Bump django-debug-toolbar to 3.5 2022-07-06 10:15:04 +02:00
Raphael Michel
fe28a8f539 Fix isort issues 2022-07-06 09:16:10 +02:00
Raphael Michel
86be7b7934 HTML Filter: Allow <ol start="2"> attribute to prevent "wrong" markdown results 2022-07-06 09:06:03 +02:00
Raphael Michel
5ded99c74a ItemDataExporter: Fix generate_tickets null value 2022-07-06 08:54:59 +02:00
Raphael Michel
a52cee2c45 PPv2: Prevent payments to ISU platform account 2022-07-05 21:05:22 +02:00
Raphael Michel
c2cb968b82 Fix variations in ItemDataExporter 2022-07-05 18:55:57 +02:00
Raphael Michel
52fafa115c Widget: Allow to filter by variation 2022-07-05 16:04:26 +02:00
Raphael Michel
39f7bfe16f [SECURITY] Add untrusted_input flag to ticket redemption API 2022-07-05 14:42:58 +02:00
Raphael Michel
3c0ba3c8e8 More accurate phrasing of "attachments skipped" message 2022-07-05 12:29:20 +02:00
Raphael Michel
db1c480905 Add exporter for list of products 2022-07-05 12:29:20 +02:00
Martin Gross
96b57f9a50 PPv2/ISU: Set cache token forever/non-expiring 2022-07-04 17:03:10 +02:00
Martin Gross
0faf245290 PPv2: Default pretix_paypal_token_hash_cycle to 1 and not 0 2022-07-04 16:52:51 +02:00
Martin Gross
cee72b5a6d PPv2: Fix CHECKOUT.ORDER.APPROVED Webhook for skeleton payments (PRETIXEU-6TN) 2022-07-04 11:15:01 +02:00
Raphael Michel
76e8cc42c2 Update pyjwt requirement from ==2.0.* to ==2.4.* 2022-07-04 11:04:01 +02:00
dependabot[bot]
d22feada57 Bump @babel/core from 7.18.2 to 7.18.6 in /src/pretix/static/npm_dir
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.2 to 7.18.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.18.6/packages/babel-core)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* Update tests

* Add permission test

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

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

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

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

* Remove console.warn

* Simplify stuff

* minor refactor

* fix missing checked-out success message

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* improve order of fields

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

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

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

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

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

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

powered by weblate
2022-05-10 11:33:55 +02:00
Raphael Michel
64ac69a81a Seating frame view: Allow to pass a voucher from query parameter 2022-05-10 11:31:27 +02:00
Richard Schreiber
40297b3d3f Localize salutation of invoice address in editor/PDFs 2022-05-10 11:22:54 +02:00
Raphael Michel
ead70686b4 Fix some language<>flag associations 2022-05-09 23:23:22 +02:00
Raphael Michel
d0051fbd43 Fix incorrect language code for Ukrainian 2022-05-09 19:05:10 +02:00
Raphael Michel
0672a32052 Add Ukrainian language 2022-05-09 17:52:19 +02:00
Raphael Michel
2371373415 Allow voucher access for pretixPOS 2022-05-09 17:52:19 +02:00
dependabot[bot]
0d9101e592 Bump @babel/core from 7.17.8 to 7.17.10 in /src/pretix/static/npm_dir (#2620)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-09 17:51:48 +02:00
dependabot[bot]
0d76b3ac8d Bump @babel/preset-env from 7.16.11 to 7.17.10 in /src/pretix/static/npm_dir (#2619)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-09 17:50:48 +02:00
dependabot[bot]
f9899b36db Bump @rollup/plugin-node-resolve from 13.1.3 to 13.2.1 in /src/pretix/static/npm_dir (#2618)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-09 17:50:39 +02:00
dependabot[bot]
69a9cf9c4a Bump rollup from 2.70.1 to 2.71.1 in /src/pretix/static/npm_dir (#2621)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-09 17:50:31 +02:00
Raphael Michel
60bf7571f3 Translations: Update Ukrainian
Currently translated at 60.1% (2846 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Олександра Сергіївна Миргородська
b682816447 Translations: Update Ukrainian
Currently translated at 60.1% (2846 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna N
b2e0ca554f Translations: Update Ukrainian
Currently translated at 60.1% (2846 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
97a9ed61a9 Translations: Update Ukrainian
Currently translated at 60.1% (2846 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Richard Schreiber
97fe10b399 Translations: Update Ukrainian
Currently translated at 60.1% (2846 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
hmontheline
3c37d6373b Translations: Update French
Currently translated at 47.4% (2243 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
d4124e95d2 Translations: Update Ukrainian
Currently translated at 56.5% (2678 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Ola Ola
e34da34872 Translations: Update Ukrainian
Currently translated at 56.5% (2677 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna N
6686df36a3 Translations: Update Ukrainian
Currently translated at 56.5% (2677 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Emanuele Signoretta
8ccca887db Translated on translate.pretix.eu (Italian)
Currently translated at 87.0% (174 of 200 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Emanuele Signoretta
94d5db767b Translations: Update Italian
Currently translated at 17.1% (812 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna N
8b9e88aa93 Translations: Update Ukrainian
Currently translated at 54.6% (2584 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
5afac69500 Translations: Update Ukrainian
Currently translated at 38.9% (1843 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
6acce86f73 Translations: Update Ukrainian
Currently translated at 38.9% (1843 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna N
4776921092 Translations: Update Ukrainian
Currently translated at 38.9% (1843 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
80f7d12800 Translations: Update Ukrainian
Currently translated at 32.7% (1552 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
404e537ae6 Translations: Update Ukrainian
Currently translated at 32.7% (1552 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
25d5634a58 Translations: Update Ukrainian
Currently translated at 32.5% (1539 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
79b88bbaed Translations: Update Ukrainian
Currently translated at 32.5% (1539 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
89695122bb Translations: Update Ukrainian
Currently translated at 32.4% (1535 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
58461cc510 Translations: Update Ukrainian
Currently translated at 32.4% (1535 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
7f8ec0814e Translations: Update Ukrainian
Currently translated at 32.3% (1532 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
47daedec00 Translations: Update Ukrainian
Currently translated at 32.3% (1530 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
0ea1a830ac Translations: Update Ukrainian
Currently translated at 32.3% (1530 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
b52eef3972 Translations: Update Ukrainian
Currently translated at 32.2% (1528 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
323954a293 Translations: Update Ukrainian
Currently translated at 32.2% (1528 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
e591e3cb3d Translations: Update Ukrainian
Currently translated at 32.2% (1526 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
8abeba8dd1 Translations: Update Ukrainian
Currently translated at 32.2% (1526 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
3e2bb6dbe4 Translations: Update Ukrainian
Currently translated at 32.1% (1521 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
ce21b4f969 Translations: Update Ukrainian
Currently translated at 32.1% (1521 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
fdf6c2c0d9 Translations: Update Ukrainian
Currently translated at 32.0% (1518 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
4b68ee5627 Translations: Update Ukrainian
Currently translated at 32.0% (1518 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
b899975e36 Translations: Update Ukrainian
Currently translated at 31.9% (1511 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
42b747166e Translations: Update Ukrainian
Currently translated at 31.9% (1511 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
440c23c4ab Translations: Update Ukrainian
Currently translated at 31.7% (1504 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
b399d0ab51 Translations: Update Ukrainian
Currently translated at 31.7% (1502 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
59e78cabbf Translations: Update Ukrainian
Currently translated at 31.7% (1502 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
25d752aa7f Translations: Update Ukrainian
Currently translated at 31.6% (1499 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
dd18fa9e8e Translations: Update Ukrainian
Currently translated at 31.6% (1499 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
a9581562cc Translations: Update Ukrainian
Currently translated at 31.6% (1497 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
2f48721a7b Translations: Update Ukrainian
Currently translated at 31.6% (1496 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
84c54d54f2 Translations: Update Ukrainian
Currently translated at 31.6% (1496 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
bf83bd58dc Translations: Update Ukrainian
Currently translated at 31.5% (1494 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
aa17fa230f Translations: Update Ukrainian
Currently translated at 31.5% (1493 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
f3ecfc32db Translations: Update Ukrainian
Currently translated at 31.5% (1492 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
b9aae4b851 Translations: Update Ukrainian
Currently translated at 31.5% (1492 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
57a19280dd Translations: Update Ukrainian
Currently translated at 31.4% (1487 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
2fa64c6fd4 Translations: Update Ukrainian
Currently translated at 31.4% (1487 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
4b70cf67b1 Translations: Update Ukrainian
Currently translated at 31.2% (1477 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
e0fee19456 Translations: Update Ukrainian
Currently translated at 31.2% (1477 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
abccf1e317 Translations: Update Ukrainian
Currently translated at 31.1% (1472 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
587f24738d Translations: Update Ukrainian
Currently translated at 31.1% (1472 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
51bcfca3f3 Translations: Update Ukrainian
Currently translated at 30.9% (1466 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
7e701c2459 Translations: Update Ukrainian
Currently translated at 30.9% (1466 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Olha Dolinska
89a6792999 Translations: Update Ukrainian
Currently translated at 30.9% (1465 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Олександра Сергіївна Миргородська
2cf4bcf71c Translations: Update Ukrainian
Currently translated at 30.9% (1465 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
0a31761d74 Translations: Update Ukrainian
Currently translated at 30.9% (1465 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
f96b7a5202 Translations: Update Ukrainian
Currently translated at 29.1% (1379 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
e381021bdd Translations: Update Ukrainian
Currently translated at 28.8% (1365 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Richard Schreiber
0c1555c76e Translations: Update Ukrainian
Currently translated at 28.8% (1365 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
661a03942c Translations: Update Ukrainian
Currently translated at 28.7% (1360 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Yuliya Palmova
eb1bd89b19 Translations: Update Ukrainian
Currently translated at 28.4% (1346 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
ab788e5792 Translations: Update Ukrainian
Currently translated at 28.4% (1346 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Yuliya Palmova
c9f04f8366 Translations: Update Ukrainian
Currently translated at 27.0% (1278 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
b50b21db08 Translations: Update Ukrainian
Currently translated at 27.0% (1278 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
702d85cde9 Translations: Update Ukrainian
Currently translated at 26.9% (1275 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Yuliya Palmova
dd6ed1d623 Translations: Update Ukrainian
Currently translated at 26.8% (1271 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
440fd49f65 Translations: Update Ukrainian
Currently translated at 26.8% (1271 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna N
f448a67705 Translations: Update Ukrainian
Currently translated at 26.5% (1255 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
7278bd755b Translations: Update Ukrainian
Currently translated at 26.5% (1255 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Viktoriia
e69ed2d0ae Translations: Update Ukrainian
Currently translated at 26.5% (1255 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
d8175ab867 Translations: Update Ukrainian
Currently translated at 25.5% (1208 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
hmontheline
fa08ed0292 Translations: Update Spanish
Currently translated at 62.9% (2980 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
hmontheline
a8221092e1 Translations: Update French
Currently translated at 47.3% (2242 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna Loik
8d449941d9 Translations: Update Ukrainian
Currently translated at 23.9% (1134 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna N
1f9159d81b Translations: Update Ukrainian
Currently translated at 23.9% (1134 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna N
aba8a5b813 Translated on translate.pretix.eu (Ukrainian)
Currently translated at 84.0% (168 of 200 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna N
a12214ae3a Translations: Update Ukrainian
Currently translated at 18.0% (853 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Viktoriia
e2279e1c79 Translations: Update Ukrainian
Currently translated at 9.6% (457 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna N
16d17fe78b Translations: Update Ukrainian
Currently translated at 9.6% (457 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna N
81af4bf1a5 Translations: Update Ukrainian
Currently translated at 8.8% (420 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
hmontheline
66efc5cce8 Translations: Update French
Currently translated at 47.3% (2240 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna N
bc9e4c91dd Translations: Update Ukrainian
Currently translated at 8.8% (419 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
hmontheline
898aeed8f4 Translations: Update French
Currently translated at 47.3% (2241 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Iryna N
0412f4465c Translations: Update Ukrainian
Currently translated at 6.0% (285 of 4732 strings)

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

powered by weblate
2022-05-09 17:50:05 +02:00
Richard Schreiber
2124161744 Localize salutation when creating PDFs (#2631) 2022-05-09 17:44:01 +02:00
Maico Timmerman
37230dd657 Widget: Fix trigger_close_callback() (#2626) 2022-05-09 17:43:50 +02:00
Richard Schreiber
9f515a4b4e Fix: converting old to new question placeholders in ticketlayouts 2022-05-06 12:23:29 +02:00
Richard Schreiber
ff5c649cfc Fix: Ignore string identifiers when converting old to new question placeholders 2022-05-05 17:40:17 +02:00
Richard Schreiber
dc0caed540 Badges: Ignore trimBox when using background PDF (Z#2398854) 2022-05-04 10:15:14 +02:00
Richard Schreiber
b33ac1910e Fix: match content to placeholder for textfield in editor (ticket, badge) 2022-05-04 09:06:39 +02:00
Raphael Michel
1aadfe3535 Fix AttributeError when clearing a cropped picture field 2022-05-03 16:26:57 +02:00
Raphael Michel
ed0ae0140a Show tax column in invoices if reverse charge is active 2022-05-03 15:13:57 +02:00
Raphael Michel
de6ca763a1 Fix issue in event cloning 2022-04-29 18:10:04 +02:00
Raphael Michel
6c06d72bf1 Fix all offline scans being marked as forced 2022-04-29 15:55:55 +02:00
Raphael Michel
a2413db65d Small tweaks to new customer fields 2022-04-29 14:47:42 +02:00
Raphael Michel
2a8faf1d12 Force organizer page to allowed languages 2022-04-29 14:43:38 +02:00
Richard Schreiber
edff7b8717 Add note field and external identifier to customers (#2605) 2022-04-29 14:43:08 +02:00
Raphael Michel
657cdd07ab Order list export: Include canceled positions (#2612)
* Order list exporter: Include canceled positions

* Review fix
2022-04-29 12:10:41 +02:00
Raphael Michel
e1db207487 Add test coverage and small improvements to event cloning logic (#2611) 2022-04-29 12:09:59 +02:00
Henryk Plötz
86d47fcdd1 Change npm install call in setup.py (#2610) 2022-04-29 12:00:23 +02:00
Edd28
e7a71a1cfd Translated on translate.pretix.eu (Romanian)
Currently translated at 100.0% (200 of 200 strings)

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

powered by weblate
2022-04-29 11:58:53 +02:00
Raphael Michel
ce8c50de53 Extend wordlist for spellcheck 2022-04-29 11:55:11 +02:00
Richard Schreiber
3cc0955523 Fix isort issue 2022-04-29 11:32:23 +02:00
Raphael Michel
3fc8e12d9a Revert "PayPal: Migrate to Order v2 API and ISU authentication (#2493)"
This reverts commit 9af1565db1.
2022-04-28 20:58:39 +02:00
Raphael Michel
6671d01c19 Fix typo in source string 2022-04-28 20:33:20 +02:00
Raphael Michel
31cbcc2528 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 100.0% (200 of 200 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Raphael Michel
00000e14e0 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (200 of 200 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Raphael Michel
f97012b412 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4732 of 4732 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Raphael Michel
5fba84ebf5 Translations: Update German
Currently translated at 100.0% (4732 of 4732 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Martin Gross
dedc029c91 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (200 of 200 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Martin Gross
a47271d257 Translations: Update German
Currently translated at 100.0% (4732 of 4732 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Raphael Michel
5d217dc384 Translations: Update German
Currently translated at 100.0% (4732 of 4732 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Martin Gross
0144842be9 Translations: Update German
Currently translated at 99.9% (4729 of 4732 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Raphael Michel
c0c59ddfbf Translations: Update German (informal) (de_Informal)
Currently translated at 99.6% (4716 of 4732 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Raphael Michel
4fb83b7129 Translations: Update German
Currently translated at 99.8% (4727 of 4732 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Martin Gross
6512dd6d40 Translations: Update German
Currently translated at 99.8% (4727 of 4732 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Martin Gross
f3dd6f9949 Translations: Update German
Currently translated at 99.6% (4716 of 4732 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Edd28
f992299129 Translations: Update Romanian
Currently translated at 98.8% (4663 of 4717 strings)

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

powered by weblate
2022-04-28 20:07:25 +02:00
Raphael Michel
b5a8d7e863 Extend wordlist for spellcheck 2022-04-28 20:04:20 +02:00
Raphael Michel
0d785616dd Extend wordlist for spellcheck 2022-04-28 19:51:52 +02:00
Raphael Michel
241eb00113 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-04-28 18:44:46 +02:00
Martin Gross
9af1565db1 PayPal: Migrate to Order v2 API and ISU authentication (#2493)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-04-28 18:42:19 +02:00
Raphael Michel
129d206946 Docs: Add secret placeholder to digital content documentation 2022-04-28 14:08:45 +02:00
Raphael Michel
4b14595531 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4709 of 4709 strings)

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

powered by weblate
2022-04-28 13:18:49 +02:00
Raphael Michel
b3fa551163 Translations: Update German
Currently translated at 100.0% (4709 of 4709 strings)

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

powered by weblate
2022-04-28 13:18:49 +02:00
Edd28
5baa2e2902 Translations: Update Romanian
Currently translated at 98.8% (4663 of 4717 strings)

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

powered by weblate
2022-04-28 13:18:49 +02:00
Edd28
1a916dfba2 Translated on translate.pretix.eu (Romanian)
Currently translated at 100.0% (174 of 174 strings)

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

powered by weblate
2022-04-28 13:18:49 +02:00
Edd28
1eedfd1615 Translations: Update Romanian
Currently translated at 98.8% (4663 of 4716 strings)

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

powered by weblate
2022-04-28 13:18:49 +02:00
Raphael Michel
ed6fbf67f7 Clone discounts when cloning events 2022-04-28 12:52:34 +02:00
Raphael Michel
704988449f Fix crash in API bulk cart creation 2022-04-28 09:06:40 +02:00
Raphael Michel
a6e52dffe7 Fix subtraction in migration 2022-04-27 17:01:42 +02:00
Raphael Michel
c39ce8b610 Fix another typo 2022-04-27 16:22:32 +02:00
Raphael Michel
3f1521a3c5 Fix typos 2022-04-27 16:03:19 +02:00
Raphael Michel
14f8ed8843 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4709 of 4709 strings)

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

powered by weblate
2022-04-27 16:00:18 +02:00
Raphael Michel
e29e967f01 Translations: Update German
Currently translated at 100.0% (4709 of 4709 strings)

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

powered by weblate
2022-04-27 16:00:18 +02:00
Iryna N
ed4c870d0a Translations: Update Ukrainian
Currently translated at 4.9% (229 of 4662 strings)

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

powered by weblate
2022-04-27 16:00:18 +02:00
Edd28
66a684d847 Translations: Update Romanian
Currently translated at 100.0% (4662 of 4662 strings)

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

powered by weblate
2022-04-27 16:00:18 +02:00
Raphael Michel
c72852832b Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-04-27 14:44:56 +02:00
Raphael Michel
6fee0ac0a9 Discounts (#2510) 2022-04-27 14:43:16 +02:00
Raphael Michel
7730cc6170 Translations: Update Dutch (informal) (nl_Informal)
Currently translated at 86.4% (4032 of 4662 strings)

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

powered by weblate
2022-04-27 11:16:05 +02:00
Raphael Michel
b88aff0a22 Bump to 4.10.0.dev0 2022-04-27 10:56:19 +02:00
Raphael Michel
5add5656fe Bump version to 4.9.0 2022-04-27 10:55:27 +02:00
Iryna N
621c7e1682 Translated on translate.pretix.eu (Ukrainian)
Currently translated at 89.6% (156 of 174 strings)

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

powered by weblate
2022-04-27 10:23:25 +02:00
Iryna N
beddab5d03 Translations: Update Ukrainian
Currently translated at 4.6% (215 of 4662 strings)

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

powered by weblate
2022-04-27 10:23:25 +02:00
Edd28
52308cb793 Translations: Update Romanian
Currently translated at 100.0% (4662 of 4662 strings)

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

powered by weblate
2022-04-27 10:23:25 +02:00
Edd28
4a45f4f877 Translated on translate.pretix.eu (Romanian)
Currently translated at 100.0% (174 of 174 strings)

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

powered by weblate
2022-04-27 10:23:25 +02:00
Iryna N
a0e8d50356 Translated on translate.pretix.eu (Ukrainian)
Currently translated at 41.9% (73 of 174 strings)

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

powered by weblate
2022-04-27 10:23:25 +02:00
Raphael Michel
8d8c6bcee5 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4662 of 4662 strings)

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

powered by weblate
2022-04-27 10:23:25 +02:00
Raphael Michel
04521287eb Translations: Update German
Currently translated at 100.0% (4662 of 4662 strings)

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

powered by weblate
2022-04-27 10:23:25 +02:00
Iryna N
8963166bcf Translated on translate.pretix.eu (Ukrainian)
Currently translated at 27.5% (48 of 174 strings)

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

powered by weblate
2022-04-27 10:23:25 +02:00
Iryna N
9f71056b56 Translations: Update Ukrainian
Currently translated at 0.1% (2 of 4661 strings)

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

powered by weblate
2022-04-27 10:23:25 +02:00
Raphael Michel
24acc7e159 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-04-26 18:23:13 +02:00
Edd28
3825c384bf Translations: Update Romanian
Currently translated at 66.8% (3117 of 4662 strings)

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

powered by weblate
2022-04-26 18:22:43 +02:00
Raphael Michel
3626d8c642 Bump PyPDF2 version 2022-04-26 15:00:57 +02:00
Raphael Michel
7a5d5d08c0 Allow MultiStringFields to be nullable 2022-04-26 14:39:23 +02:00
fsnaix
276bb12edb Translations: Update Vietnamese
Currently translated at 0.3% (15 of 4660 strings)

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

powered by weblate
2022-04-25 18:22:43 +02:00
Edd28
28411feff6 Translations: Update Romanian
Currently translated at 66.8% (3116 of 4662 strings)

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

powered by weblate
2022-04-25 18:22:43 +02:00
Edd28
1118b01dbd Translated on translate.pretix.eu (Romanian)
Currently translated at 100.0% (174 of 174 strings)

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

powered by weblate
2022-04-25 18:22:43 +02:00
fsnaix
22221fc413 Translations: Update Vietnamese
Currently translated at 0.2% (12 of 4661 strings)

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

powered by weblate
2022-04-25 18:22:43 +02:00
fsnaix
50ece6c1fc Translations: Add Vietnamese 2022-04-25 18:22:43 +02:00
Edd28
5de2d60ff8 Translations: Update Romanian
Currently translated at 52.4% (2446 of 4661 strings)

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

powered by weblate
2022-04-25 18:22:43 +02:00
Edd28
4eed155acb Translated on translate.pretix.eu (Romanian)
Currently translated at 98.2% (171 of 174 strings)

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

powered by weblate
2022-04-25 18:22:43 +02:00
Aya Yabuki
5915abd7cb Translations: Update Japanese
Currently translated at 3.5% (165 of 4661 strings)

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

powered by weblate
2022-04-25 18:22:43 +02:00
Edd28
52d926d698 Translations: Update Romanian
Currently translated at 5.4% (256 of 4661 strings)

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

powered by weblate
2022-04-25 18:22:43 +02:00
Raphael Michel
2b81e983d4 Add Romanian language, reorder languages 2022-04-25 18:10:35 +02:00
Raphael Michel
55dc7fd988 Fix typo 2022-04-25 12:42:39 +02:00
Richard Schreiber
01bcf114b2 Calendar view: do not strike-through labels of non-bookable events (#2602) 2022-04-25 12:37:01 +02:00
Raphael Michel
adbf76a09f Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-04-21 17:18:34 +02:00
Raphael Michel
316081658a Check-in rules: Add now_isoweekday and minutes_since_last_entry (#2577) 2022-04-21 17:17:59 +02:00
hmontheline
0aff74afc6 Translations: Update French
Currently translated at 48.1% (2240 of 4656 strings)

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

powered by weblate
2022-04-21 17:17:47 +02:00
Edd28
f13daafa39 Translations: Update Romanian
Currently translated at 4.1% (193 of 4656 strings)

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

powered by weblate
2022-04-21 17:17:47 +02:00
Edd28
ff449b801f Translations: Update Romanian
Currently translated at 3.9% (185 of 4656 strings)

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

powered by weblate
2022-04-21 17:17:47 +02:00
Basarabeanu Bogdan-Robert
9bdb72aa06 Translations: Update Romanian
Currently translated at 3.9% (184 of 4656 strings)

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

powered by weblate
2022-04-21 17:17:47 +02:00
Edd28
148727917b Translations: Update Romanian
Currently translated at 3.9% (184 of 4656 strings)

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

powered by weblate
2022-04-21 17:17:47 +02:00
Edd28
33b25aa981 Translated on translate.pretix.eu (Romanian)
Currently translated at 100.0% (171 of 171 strings)

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

powered by weblate
2022-04-21 17:17:47 +02:00
Raphael Michel
e01c417c1e Clarify difference between order_modified and order_changed 2022-04-21 17:17:24 +02:00
Raphael Michel
6d050b4d2b Set a maximum value for reservation_time to prevent OverflowError 2022-04-21 14:10:23 +02:00
Raphael Michel
e9c440ceed POS: Allow clients to fetch payment details 2022-04-15 14:09:51 +02:00
Raphael Michel
5cd79ee2b0 Adjust German translation of "Box office" 2022-04-15 13:35:08 +02:00
Raphael Michel
15c6e22414 POS: Show reference for Zettle payments 2022-04-15 13:13:57 +02:00
Raphael Michel
8d04a0183a Docs: Updates to exhibitor API 2022-04-14 15:53:35 +02:00
Richard Schreiber
2f6881934e Calendar view: improve differentiation between events’ states (Z#173939) (#2595) 2022-04-14 15:51:46 +02:00
Richard Schreiber
8f7bc59214 Calendar view: make focus-outline visible (#2594) 2022-04-14 15:51:20 +02:00
Raphael Michel
9bf3b54a83 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4658 of 4658 strings)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

For more info on why we do not use attestation, see https://fidoalliance.org/fido-technotes-the-truth-about-attestation/
2022-03-25 12:25:15 +01:00
Raphael Michel
645a7489df Add missing log display message for waiting list removal 2022-03-24 21:51:29 +01:00
Raphael Michel
dff4bf2841 Docs: Pin jinja version 2022-03-24 17:40:42 +01:00
Raphael Michel
fc1e2ca3b0 Order search: Fix duplicate query part 2022-03-24 17:22:32 +01:00
Raphael Michel
2a0748a008 Questions step: Only prefill customer name for first ticket (#2555) 2022-03-24 17:04:23 +01:00
Raphael Michel
41d3f39fc7 Add pretixPOS endpoint to device security profile 2022-03-24 11:56:59 +01:00
Michał Rokita
8e481905e2 Translations: Update Polish
Currently translated at 12.1% (563 of 4636 strings)

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

powered by weblate
2022-03-24 11:55:53 +01:00
Michał Rokita
552e130fed Translations: Update Polish
Currently translated at 11.9% (556 of 4636 strings)

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

powered by weblate
2022-03-24 11:55:53 +01:00
Ismael Menéndez Fernández
f8b879c2e6 Translations: Update Galician
Currently translated at 11.3% (529 of 4648 strings)

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

powered by weblate
2022-03-24 11:55:53 +01:00
Raphael Michel
9e5403333c Add JSONField for device metadata (#2550) 2022-03-24 11:55:44 +01:00
Raphael Michel
2486c3d205 Show refund amount in refund choice screen 2022-03-23 09:15:10 +01:00
Raphael Michel
ee9bf25ae1 Bank transfer: Format IBAN in email 2022-03-23 09:08:10 +01:00
Martin Gross
c4d3c48837 Fix voucher redemption page markup #2 (Amend to d97b7b4fb6) 2022-03-22 14:17:27 +01:00
Raphael Michel
d97b7b4fb6 Fix voucher redemption page markup (#2548) 2022-03-22 10:41:36 +01:00
Raphael Michel
fd83e91174 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4636 of 4636 strings)

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

powered by weblate
2022-03-21 18:19:46 +01:00
Raphael Michel
6e3b62696e Translations: Update German
Currently translated at 100.0% (4636 of 4636 strings)

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

powered by weblate
2022-03-21 18:19:46 +01:00
Raphael Michel
a0b8fedaa7 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4636 of 4636 strings)

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

powered by weblate
2022-03-21 18:19:46 +01:00
Raphael Michel
a4961d9dfb Translations: Update German
Currently translated at 100.0% (4636 of 4636 strings)

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

powered by weblate
2022-03-21 18:19:46 +01:00
Raphael Michel
889f972768 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4636 of 4636 strings)

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

powered by weblate
2022-03-21 18:19:46 +01:00
Raphael Michel
478ab633e0 Translations: Update German
Currently translated at 100.0% (4636 of 4636 strings)

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

powered by weblate
2022-03-21 18:19:46 +01:00
Ismael Menéndez Fernández
0e4047018e Translations: Update Galician
Currently translated at 11.3% (528 of 4633 strings)

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

powered by weblate
2022-03-21 18:19:46 +01:00
Anna-itk
cbeaffa415 Translations: Update Danish
Currently translated at 35.6% (1653 of 4633 strings)

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

powered by weblate
2022-03-21 18:19:46 +01:00
Raphael Michel
09972b62c9 Add more words to spell-check list 2022-03-21 18:14:47 +01:00
Raphael Michel
3b2eec659d Update potypo config 2022-03-21 18:09:28 +01:00
Raphael Michel
4e6c61316c Update German spellcheck word list 2022-03-21 18:00:19 +01:00
Raphael Michel
c308939f3c Add customizations to word list 2022-03-21 17:12:58 +01:00
Raphael Michel
41604ebdd9 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-03-21 16:59:35 +01:00
Raphael Michel
e2adf1fdb3 Layout refresh for plugin settings page (#2490)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2022-03-21 16:42:03 +01:00
Richard Schreiber
90d9ddebb5 Fix #2542 -- Validation of exporter forms (#2544) 2022-03-21 12:37:24 +01:00
Raphael Michel
684b8e4102 Accept arabic numbers from date picker (#2547) 2022-03-21 12:36:40 +01:00
Raphael Michel
a83e963ea5 Variation editor: Call form_handlers() when adding new form 2022-03-21 11:47:47 +01:00
Raphael Michel
c9392236f5 Datetime picker: Fix left/right arrows for rtl languages 2022-03-21 10:01:04 +01:00
Raphael Michel
57d68eaddb Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-03-18 14:33:02 +01:00
Raphael Michel
ab1e063a93 Fix plural in button label (Z#2396370) 2022-03-18 14:32:20 +01:00
Ismael Menéndez Fernández
4b76dcedc4 Translations: Update Galician
Currently translated at 11.3% (523 of 4624 strings)

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

powered by weblate
2022-03-18 14:31:48 +01:00
Maico Timmerman
55752a4319 Event cancellation: Allow allow creating manual refunds for all orders (#2526) 2022-03-18 14:05:32 +01:00
Augustin Cavalier
5bde98e349 PayPal: Fail early on invalid webhook payload (#2528)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-03-17 16:50:58 +01:00
Raphael Michel
1b2ca87f2d PDF editor: Check PDF file for readability on upload 2022-03-17 16:43:30 +01:00
Raphael Michel
8562c2f103 PDF editor: Limit file upload selector to PDF files 2022-03-17 16:43:30 +01:00
Raphael Michel
ea0283266f PDF editor: Fix invalid data type breaking preview 2022-03-17 16:43:30 +01:00
Raphael Michel
cc912b9ea7 PDF editor: Support for Ctrl+A 2022-03-17 16:43:30 +01:00
Raphael Michel
ebae275a2d PDF editor: Allow multi-lingual text 2022-03-17 16:43:30 +01:00
Raphael Michel
02f8bcbe23 PDF editor: Allow combinations of placeholders 2022-03-17 16:43:30 +01:00
Raphael Michel
4ae7cc9f50 PDF editor: Allow arbitrary fields in QR codes 2022-03-17 16:43:30 +01:00
Raphael Michel
c2f2e157d7 PDF editor: Add explanatory tooltip for dynamic image 2022-03-17 16:43:30 +01:00
Raphael Michel
ebf0320c2c PDF editor: Add multi-page support 2022-03-17 16:43:30 +01:00
Raphael Michel
b05fa89010 PDF editor: Allow button to download current background 2022-03-17 16:43:30 +01:00
Raphael Michel
ab0f76c7bb Revert "PDF editor improvements (#2529)"
This reverts commit e4c1f30b9d.
2022-03-17 16:43:18 +01:00
Raphael Michel
e4c1f30b9d PDF editor improvements (#2529) 2022-03-17 16:42:48 +01:00
Raphael Michel
9ffeafa6a5 Do not crash email layout preview with unknown placeholders 2022-03-17 09:41:15 +01:00
Richard Schreiber
cb7e014966 Fix #2438 - Parse dates in format YYYY-MM with isoparse (#2537)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-03-16 14:15:56 +01:00
Yuriko Matsunami
7b7a8e655e Translated on translate.pretix.eu (Japanese)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2022-03-16 13:52:42 +01:00
Yuriko Matsunami
ac46172f6b Translations: Update Japanese
Currently translated at 3.1% (147 of 4624 strings)

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

powered by weblate
2022-03-16 13:52:42 +01:00
Raphael Michel
31eda01464 Fix error in SMTP settings when not changing password 2022-03-15 16:06:11 +01:00
Raphael Michel
0adddb3084 Widget: Set allow and referrerpolicy on iframe 2022-03-15 12:26:41 +01:00
Raphael Michel
0b91f9da31 Docs: Update example in lead scanning API 2022-03-15 11:02:37 +01:00
Raphael Michel
0a7ba606c6 Add docs on lead scanning API (#2533) 2022-03-15 10:55:52 +01:00
Raphael Michel
959b076b52 Unicode-aware sorting of phone prefixes (#2523) 2022-03-14 15:24:59 +01:00
Ismael Menéndez Fernández
06b0ef906a Translations: Update Galician
Currently translated at 11.2% (522 of 4624 strings)

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

powered by weblate
2022-03-14 15:07:10 +01:00
Emanuele Signoretta
4f1607040e Translations: Update Italian
Currently translated at 17.5% (812 of 4624 strings)

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

powered by weblate
2022-03-14 15:07:10 +01:00
Ismael Menéndez Fernández
38a3fa23ed Translations: Update Galician
Currently translated at 11.2% (520 of 4624 strings)

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

powered by weblate
2022-03-14 15:07:10 +01:00
Yuriko Matsunami
baae16d9e7 Translated on translate.pretix.eu (Japanese)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2022-03-14 15:07:10 +01:00
Yuriko Matsunami
e2d9cc10e8 Translations: Update Japanese
Currently translated at 1.0% (49 of 4624 strings)

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

powered by weblate
2022-03-14 15:07:10 +01:00
DJG Bayern
f0f8bbb2b0 Translations: Update Japanese
Currently translated at 1.0% (49 of 4624 strings)

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

powered by weblate
2022-03-14 15:07:10 +01:00
DJG Bayern
8d57544ba3 Translations: Update Japanese
Currently translated at 0.7% (36 of 4624 strings)

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

powered by weblate
2022-03-14 15:07:10 +01:00
Yuriko Matsunami
065533ee4d Translations: Update Japanese
Currently translated at 0.7% (36 of 4624 strings)

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

powered by weblate
2022-03-14 15:07:10 +01:00
Raphael Michel
fb2ad2711f Translations: Add Ukrainian 2022-03-14 15:07:10 +01:00
Anna-itk
52004e5c46 Translations: Update Danish
Currently translated at 34.8% (1610 of 4624 strings)

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

powered by weblate
2022-03-14 15:07:10 +01:00
Raphael Michel
9fcd099531 Fix phone number parsing of initial values 2022-03-14 10:30:03 +01:00
Raphael Michel
d8cf3552ba Do not allow self-service cancel of pending orders if they have any payments 2022-03-10 17:02:11 +01:00
Raphael Michel
cc04f66a48 Prevent broken email placeholders from stopping emails (#2525) 2022-03-10 14:06:57 +01:00
Martin Gross
86d28b3f21 Control Dashboard: Fix filter link to past events 2022-03-09 10:11:47 +01:00
Raphael Michel
07b401b7af Add docs on API of exhibitor plugin, remove deprecated docs (#2520) 2022-03-08 16:04:18 +01:00
Raphael Michel
8ff4f778bf Bump django-hierarkey to 1.1.* 2022-03-07 10:27:06 +01:00
Raphael Michel
5174d38017 Do not delete TicketLayout backgrounds long as they're referenced somewhere 2022-03-07 09:45:50 +01:00
Raphael Michel
5681ea121d API: Fix organizer exports with OAuth tokens (PRETIXEU-663) 2022-03-04 10:32:17 +01:00
Raphael Michel
4e2a3b45da Fix order split with add-ons involved (#2513) 2022-03-03 16:54:20 +01:00
Ismael Menéndez Fernández
d796c399a6 Translations: Update Galician
Currently translated at 11.0% (510 of 4624 strings)

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

powered by weblate
2022-03-03 16:43:45 +01:00
MaLund13
bee5b5f1af Translated on translate.pretix.eu (Swedish)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2022-03-03 16:43:45 +01:00
MaLund13
028be3a5c3 Translations: Update Swedish
Currently translated at 21.8% (1012 of 4624 strings)

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

powered by weblate
2022-03-03 16:43:45 +01:00
Ismael Menéndez Fernández
990fd9a40c Translations: Update Galician
Currently translated at 10.7% (498 of 4624 strings)

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

powered by weblate
2022-03-03 16:43:45 +01:00
dependabot[bot]
746c9af531 Bump @rollup/plugin-babel from 5.3.0 to 5.3.1 in /src/pretix/static/npm_dir (#2506)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-03 15:44:35 +01:00
dependabot[bot]
47208afcec Bump @babel/core from 7.17.2 to 7.17.5 in /src/pretix/static/npm_dir (#2505)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-03 15:44:30 +01:00
Henry Brink
b215a0bd04 Add the .mta file extension for Volksbank's MT940 (#2512)
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
2022-03-03 15:44:23 +01:00
dependabot[bot]
6c94b62bb1 Bump rollup from 2.66.1 to 2.68.0 in /src/pretix/static/npm_dir (#2504)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-03 15:44:13 +01:00
Richard Schreiber
d7a32d985b Fix -- Custom favicon not showing correctly in Safari (#Z181607) (#2511)
* remove mask-icon as it basically unused nowadays

* remove 194x194-size

favicon in 194x194 is a hack for firefox only useful when chrome-android-icon in 192x192 is specifically created for android with a drop-shadow. This is not the case with pretix-logo or even custom logos. So we can safely drop the 194x194 size.

Co-authored-by: Raphael Michel <michel@rami.io>
2022-03-03 15:36:09 +01:00
Raphael Michel
fac3e7f7bd Show comment on denied order in visible log 2022-03-03 14:44:59 +01:00
Raphael Michel
8e8dce7ccf Silence another deprecation warning 2022-03-03 12:53:47 +01:00
Raphael Michel
465e11c765 Silence some deprecation warnings in dependencies on Python 3.10 2022-03-03 12:50:12 +01:00
Raphael Michel
7e6c512a76 Fix isort issue 2022-03-03 11:05:51 +01:00
Martin Gross
5d0b8c5084 Restricted Plugins: Do not require a restricted plugin to be visible. 2022-03-01 17:27:53 +01:00
Raphael Michel
6008e3d11c API: Fix organizer-level export with OAuth token (Z#2395272) 2022-03-01 16:53:48 +01:00
Raphael Michel
aeeebc0b4b Add event list exporter 2022-03-01 16:11:00 +01:00
Raphael Michel
a568a37f4c Fix #2496 -- Do not call installed() when cloning events (#2497) 2022-03-01 15:49:26 +01:00
Raphael Michel
b74f5508b7 Group identical add-ons in cart (#2500)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2022-03-01 15:49:16 +01:00
Raphael Michel
a9b0651345 Add convenience redirect from /control/events/-/-/feature to real event (#2501) 2022-03-01 15:48:25 +01:00
Emanuele Signoretta
c126445fe0 Translated on translate.pretix.eu (Italian)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2022-03-01 15:47:52 +01:00
Raphael Michel
f8b8d92f2c Add missing license header 2022-02-28 16:15:53 +01:00
Raphael Michel
a66fdc5084 [SECURITY] Fix stored XSS in help texts 2022-02-28 16:06:47 +01:00
Raphael Michel
6d6883b343 [SECURITY] Fix stored XSS in question errors 2022-02-28 16:06:47 +01:00
Raphael Michel
482968175b [SECURITY] Prevent untrusted values from creating Excel formulas 2022-02-28 16:06:47 +01:00
Raphael Michel
5d6302d5fd Pin django-countries to 7.2 2022-02-28 13:06:22 +01:00
Raphael Michel
92fbe76327 Fix anonymizing users by setting their auth_backend 2022-02-28 12:07:24 +01:00
Raphael Michel
2fd2462ef1 Voucher bulk creation: Fix validation for duplicate in input 2022-02-25 18:12:28 +01:00
Raphael Michel
19881dff44 Bump to 4.8.0.dev0 2022-02-25 12:32:00 +01:00
Raphael Michel
798fdbf25b Bump to 4.7.0 2022-02-25 12:31:44 +01:00
Raphael Michel
1718a537e6 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4624 of 4624 strings)

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

powered by weblate
2022-02-25 12:30:40 +01:00
Raphael Michel
b4d8936b78 Translations: Update German
Currently translated at 100.0% (4624 of 4624 strings)

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

powered by weblate
2022-02-25 12:30:40 +01:00
Raphael Michel
683bc3f6dc Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4624 of 4624 strings)

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

powered by weblate
2022-02-25 12:30:40 +01:00
Raphael Michel
b79c95f334 Translations: Update German
Currently translated at 100.0% (4624 of 4624 strings)

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

powered by weblate
2022-02-25 12:30:40 +01:00
Raphael Michel
7821ba09ec Fix #2476 -- Document resilient setup with docker and redis 2022-02-25 11:54:57 +01:00
Raphael Michel
af2600fd52 Docs: Fix reference to UserManager 2022-02-25 11:53:05 +01:00
Raphael Michel
058282a583 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-02-25 11:05:55 +01:00
Raphael Michel
16fa01ac60 Translations: Update Spanish
Currently translated at 64.6% (2990 of 4622 strings)

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

powered by weblate
2022-02-24 20:31:15 +01:00
Raphael Michel
2b5ce5364b Translations: Update Galician
Currently translated at 10.7% (495 of 4622 strings)

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

powered by weblate
2022-02-24 20:31:15 +01:00
Raphael Michel
4a93866cc3 Translations: Update Spanish
Currently translated at 64.7% (2991 of 4622 strings)

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

powered by weblate
2022-02-24 20:31:15 +01:00
Ismael Menéndez Fernández
fbc1d862a1 Translations: Update Galician
Currently translated at 10.7% (496 of 4622 strings)

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

powered by weblate
2022-02-24 20:31:15 +01:00
Tonda Pavlík
638daa2c19 Translations: Update Czech
Currently translated at 11.0% (509 of 4622 strings)

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

powered by weblate
2022-02-24 20:31:15 +01:00
Ismael Menéndez Fernández
d400a3c7d3 Translations: Update Spanish
Currently translated at 64.6% (2988 of 4622 strings)

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

powered by weblate
2022-02-24 20:31:15 +01:00
Raphael Michel
76f6947529 Voucher list: Filter case-sensitive for exact tag match 2022-02-24 18:56:45 +01:00
Raphael Michel
db7e299af1 Show voucher link even without subevent specified 2022-02-24 14:59:27 +01:00
Raphael Michel
7ed204ffc0 Workaround for PostgreSQL floating point quirk 2022-02-24 13:47:08 +01:00
Raphael Michel
14e0d9cbf4 Change restricted plugins from event-level action to org-level whitelist (#2489) 2022-02-23 15:04:16 +01:00
Raphael Michel
65fb492728 Fix crash in exporter API (PRETIXEU-650) 2022-02-23 15:03:49 +01:00
Raphael Michel
a4f64e94cc Settings form: Fix explicit unlocking, fix HTML button type 2022-02-23 13:24:47 +01:00
Raphael Michel
67ba1f81e4 OrderGo: Fix crash if invoice number matches different prefixes (PRETIXEU-64T) 2022-02-23 13:08:03 +01:00
Maico Timmerman
cc8282bef1 vouchers: allow deleting vouchers that are used on addon cartpositions (#2478) 2022-02-23 13:00:18 +01:00
Martin Gross
c7fc52cabe Doc: Improve SAML RegEx example to not match on partials. 2022-02-23 11:02:44 +01:00
Raphael Michel
4bc04de325 Update django-statici18n requirement from ==2.1.* to ==2.2.* 2022-02-23 10:35:54 +01:00
Martin Gross
9a2ecae021 Add pretix-presale-saml docs (#2468) 2022-02-23 10:32:16 +01:00
Ismael Menéndez Fernández
e55fb303c0 Translations: Update Galician
Currently translated at 9.9% (460 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Ismael Menéndez Fernández
185761e9e6 Translations: Update Galician
Currently translated at 9.6% (448 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Raphael Michel
a78cb039da Translations: Update Galician
Currently translated at 9.5% (441 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Ismael Menéndez Fernández
5f07f0e80b Translations: Update Galician
Currently translated at 9.5% (442 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Ismael Menéndez Fernández
4021b28d5f Translated on translate.pretix.eu (Galician)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Ismael Menéndez Fernández
8717b1f8db Translations: Update Galician
Currently translated at 8.7% (403 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Ismael Menéndez Fernández
b789e64830 Translations: Update Galician
Currently translated at 8.0% (373 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Raphael Michel
4d595e3fd4 Translations: Update Galician
Currently translated at 6.7% (310 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Ismael Menéndez Fernández
482a9c6af7 Translations: Update Galician
Currently translated at 6.7% (310 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
MaLund13
99faa8b300 Translated on translate.pretix.eu (Swedish)
Currently translated at 83.1% (143 of 172 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
MaLund13
f0be03f93a Translations: Update Swedish
Currently translated at 21.2% (984 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Emanuele Signoretta
5f12fca88a Translations: Update Italian
Currently translated at 17.2% (795 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Emanuele Signoretta
fa88686856 Translated on translate.pretix.eu (Italian)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Marco Giacopuzzi
59a6e4130e Translations: Update Italian
Currently translated at 17.1% (792 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Emanuele Signoretta
35ccc3a9af Translations: Update Italian
Currently translated at 17.1% (792 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
MaLund13
ef9e7fd92a Translations: Update Swedish
Currently translated at 21.2% (982 of 4622 strings)

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

powered by weblate
2022-02-23 10:29:35 +01:00
Raphael Michel
d7acd2b6bf Refs #2465 -- Introduce unique identifiers for authentication backends (#2466) 2022-02-23 10:16:35 +01:00
Raphael Michel
2bf5a0ce8a Update beautifulsoup4 requirement from ==4.8.* to ==4.10.* 2022-02-23 10:13:36 +01:00
Raphael Michel
7310fb3c6e Update requests requirement from ==2.26.* to ==2.27.* 2022-02-23 09:57:37 +01:00
Raphael Michel
069dd02ebc Update stripe requirement from ==2.42.* to ==2.66.* 2022-02-23 09:53:16 +01:00
Richard Schreiber
70e4b02370 Fix #2452 -- Disallow invalid values in min_per_order/max_per_order (#2453) 2022-02-23 09:48:45 +01:00
Richard Schreiber
b20797fe4b Fix details/summary marker on privacy-modal being shown twice (#2482) 2022-02-23 09:46:33 +01:00
Richard Schreiber
aee8de54ed Fix #2480 - move datetime-menu in front of map controls (#2481) 2022-02-22 13:58:54 +01:00
Raphael Michel
6d7e16c147 Fix single-event export if an exporter returns none 2022-02-21 21:07:00 +01:00
Raphael Michel
f511f5a646 Fix bug in error handling 2022-02-21 18:10:05 +01:00
Raphael Michel
6ba690932f Allow event-level exporters to return none 2022-02-21 17:58:33 +01:00
Raphael Michel
46b3e3c739 AsyncFormView: Allow to declare celery exception classes 2022-02-21 16:59:51 +01:00
Raphael Michel
3550197fc4 Fix bug in previous commit 2022-02-18 16:19:51 +01:00
Raphael Michel
db96211c7a Seating: Fix query in validate_plan_change 2022-02-18 15:21:20 +01:00
Richard Schreiber
758179f12f Add name_for_salutation to customer email placeholders (#2474) 2022-02-18 08:02:51 +01:00
Raphael Michel
98409b0a22 API: Minor robustness improvements in quota and checkinlist serializers 2022-02-17 17:37:24 +01:00
Raphael Michel
06ffa0bcd5 API: Fix creation of items with required membership types 2022-02-17 17:37:24 +01:00
Ismael Menéndez Fernández
18917769ef Translations: Update Galician
Currently translated at 4.7% (221 of 4622 strings)

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

powered by weblate
2022-02-17 14:50:47 +01:00
Miguel Magalhães
34e95bc7d2 Translations: Update Portuguese (Portugal)
Currently translated at 80.1% (3704 of 4622 strings)

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

powered by weblate
2022-02-17 14:50:47 +01:00
Matthias Brück
5ba7ee3516 Translations: Update German
Currently translated at 99.9% (4618 of 4622 strings)

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

powered by weblate
2022-02-17 14:50:47 +01:00
cpoisnel
3706eff795 Fix subevent not shown correctly in order change view (#2473) 2022-02-17 13:59:01 +01:00
Raphael Michel
28331e7538 Fix docs typo 2022-02-16 17:33:48 +01:00
Raphael Michel
62218ca0c6 Fix attendee mails not being sent if no order address set 2022-02-16 17:19:03 +01:00
Raphael Michel
14e2834a72 API: Allow send_email=none during order creation 2022-02-16 17:19:03 +01:00
Richard Schreiber
032653cec4 Localize customer name_parts in email-context (Z#179923) (#2470) 2022-02-16 13:27:54 +01:00
Raphael Michel
f3b355e9f3 Sendmail: Allow to attach tickets to emails 2022-02-16 10:42:48 +01:00
Raphael Michel
f7d2645e76 Fix isort issue 2022-02-14 17:33:20 +01:00
Raphael Michel
fb89e31c1c Bump djangorestframework to 3.13.* 2022-02-14 16:03:34 +01:00
Jonathan Weth
5e1cff53b4 Fix #2456 -- Allow shredding instantly after event end (#2462) 2022-02-14 15:57:38 +01:00
Raphael Michel
61cef87c9d Update .po files 2022-02-14 15:41:29 +01:00
Raphael Michel
2fcab70e3b Add very simple CAPTCHA to standalone customer registration form 2022-02-14 15:37:35 +01:00
Raphael Michel
1414db35b7 Perform some very basic validation on names 2022-02-14 14:56:31 +01:00
Raphael Michel
1d32d7a2d2 Fix copy-paste error in setup.py 2022-02-14 10:04:46 +01:00
Raphael Michel
9966912799 Fix test failing after last commit 2022-02-13 20:44:18 +01:00
Raphael Michel
a37ed6f001 Bump versions of pycodestyle and pep8-naming 2022-02-13 20:39:31 +01:00
dependabot[bot]
a307cf8934 Bump @babel/core from 7.16.7 to 7.17.2 in /src/pretix/static/npm_dir (#2458)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-13 20:25:25 +01:00
Richard Schreiber
0e900b74d7 Fix #2434 -- Disallow manually setting SecretKeySettingsField to ***** (#2436) 2022-02-13 20:24:53 +01:00
dependabot[bot]
7193da42c2 Bump @rollup/plugin-node-resolve from 13.1.2 to 13.1.3 in /src/pretix/static/npm_dir (#2444)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-13 20:23:20 +01:00
dependabot[bot]
48eb580ee8 Bump @babel/preset-env from 7.16.7 to 7.16.11 in /src/pretix/static/npm_dir (#2442)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-13 20:23:14 +01:00
dependabot[bot]
50a5622178 Bump rollup from 2.62.0 to 2.66.1 in /src/pretix/static/npm_dir (#2443)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-13 20:23:07 +01:00
kackey621
66027aed59 Translations: Update Japanese
Currently translated at 0.3% (18 of 4613 strings)

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

powered by weblate
2022-02-13 20:22:51 +01:00
Mauro Amico
8d62e3e2af Translations: Update Italian
Currently translated at 16.7% (774 of 4613 strings)

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

powered by weblate
2022-02-13 20:22:51 +01:00
Ismael Menéndez Fernández
a8ce4845e2 Translations: Update Galician
Currently translated at 4.2% (197 of 4613 strings)

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

powered by weblate
2022-02-13 20:22:51 +01:00
Ismael Menéndez Fernández
efdb834a73 Translations: Update Galician
Currently translated at 1.7% (81 of 4613 strings)

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

powered by weblate
2022-02-13 20:22:51 +01:00
Ismael Menéndez Fernández
fd060b792c Translations: Update Spanish
Currently translated at 64.7% (2987 of 4613 strings)

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

powered by weblate
2022-02-13 20:22:51 +01:00
Jozsef Ebenspanger
31df3e2129 Translations: Update Hungarian
Currently translated at 2.0% (93 of 4613 strings)

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

powered by weblate
2022-02-13 20:22:51 +01:00
Richard Schreiber
c71ba79e55 Fix #2449 -- Format variation-price with Intl.NumberFormat (#2451) 2022-02-13 20:15:51 +01:00
Maico Timmerman
6304b34600 Fix default reply-to header in emails (#2457) 2022-02-13 15:09:22 +01:00
Raphael Michel
81cc7540ec Add ticket secret to order list export 2022-02-11 14:39:00 +01:00
Raphael Michel
adced71706 Fix bugs from af3006a5b 2022-02-08 17:53:26 +01:00
Raphael Michel
8c7ed38441 Orders API: Support require_approval on order creation 2022-02-08 17:34:20 +01:00
Raphael Michel
b4d7d9bf76 Docs: Fix typo in digital content parameter table 2022-02-08 11:57:25 +01:00
Raphael Michel
af3006a5bd Fix mass-creation of vouchers on MySQL 2022-02-07 15:31:09 +01:00
Raphael Michel
d313e076a2 Widget: Fix another IE support bug introduced in Django 3.2 2022-02-07 13:13:04 +01:00
Raphael Michel
216bac2807 Fix getitem usage for non-dictionaries 2022-02-04 17:41:05 +01:00
Raphael Michel
8351e51cfe ORderChangeManager.set_addons: Fix check performed on parent item instead of actual item 2022-02-04 17:08:03 +01:00
Raphael Michel
b2d74dc652 Allow to use AsyncFormView outside of events 2022-02-04 17:08:03 +01:00
Raphael Michel
ea1322165b Add fallback value for getitem template filter 2022-02-04 17:08:03 +01:00
Martin Gross
c65883b328 Presale Order Change: Display public name of item instead of internal 2022-02-04 16:41:04 +01:00
Felix Schäfer
dfd37cc5e3 Fix guard in mail service (#2448) 2022-02-04 15:30:44 +01:00
Raphael Michel
4c71995560 Support for file upload in asynctask.js 2022-02-03 11:21:49 +01:00
Raphael Michel
02034cacbf Fix changing orders when only variants can be changed and no addons 2022-02-02 16:59:00 +01:00
Raphael Michel
d098cda8a8 Add new endpoints to pretixPOS device security profile 2022-02-01 18:10:11 +01:00
Raphael Michel
0b8432b2c5 Docs: Add node on MySQL's SQL mode 2022-01-31 15:44:26 +01:00
Raphael Michel
9be6ad4124 Add documentation on secrets import plugin 2022-01-31 10:20:23 +01:00
Raphael Michel
fdc77f6bd8 Quota deletion: Show internal names of products 2022-01-31 09:56:55 +01:00
Raphael Michel
e3d0a18bee Show internal category names in product list 2022-01-31 09:34:13 +01:00
Raphael Michel
81c271ee2a Fix ordering of add-on products in email info block 2022-01-28 17:05:46 +01:00
Raphael Michel
e981f00dc7 Fix typo 2022-01-27 17:52:37 +01:00
Raphael Michel
2daf35c39e Allow to customize description of calendar files (#2415)
Co-authored-by: Martin Gross <gross@rami.io>
2022-01-27 14:58:16 +01:00
Raphael Michel
c9530c56af Fix isort issue 2022-01-27 14:42:19 +01:00
Raphael Michel
f3e31287f4 Bump to 4.7.0.dev0 2022-01-27 13:44:53 +01:00
Raphael Michel
c9aaa343e6 Bump to 4.6.0 2022-01-27 13:44:39 +01:00
Raphael Michel
87a196c4df Translations: Update German
Currently translated at 100.0% (4613 of 4613 strings)

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

powered by weblate
2022-01-27 12:27:58 +01:00
Raphael Michel
a220f1678b Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4613 of 4613 strings)

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

powered by weblate
2022-01-27 12:27:58 +01:00
Raphael Michel
c8fa0852b2 Add DNS to English word list 2022-01-27 12:15:31 +01:00
Raphael Michel
fe3433106c Extend spelling wordlists 2022-01-27 12:11:34 +01:00
Raphael Michel
f8086daf34 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-01-27 11:02:14 +01:00
Raphael Michel
66f75a5614 Revert dnspython to 1.x 2022-01-26 16:15:12 +01:00
Raphael Michel
6f30c347c0 [SECURITY] Make redirect view dependent on referer 2022-01-26 13:41:02 +01:00
Raphael Michel
3596fa9c5a [SECURITY] Fix (non-exploitable) XSS issue 2022-01-26 13:41:02 +01:00
Raphael Michel
e3c7cd7c6d Redesign of email settings (#2426)
Co-authored-by: Felix Rindt <felix@rindt.me>
2022-01-26 12:47:58 +01:00
Raphael Michel
194042dca5 Add-on selection: Fix incorrect pre-selection across multiple base positions 2022-01-26 09:45:44 +01:00
Raphael Michel
3be6e83f33 Add missing license header 2022-01-25 21:08:28 +01:00
Raphael Michel
4262bce2b5 Limit maximum length of passwords to 4096 characters 2022-01-25 17:24:48 +01:00
Raphael Michel
73ab962e16 Respect language headers on error 400/404/500 pages 2022-01-25 16:59:30 +01:00
Raphael Michel
13a86fc6f3 Event ical feed: Do not show events more than 31 days in the past 2022-01-24 15:47:04 +01:00
Raphael Michel
9d6f11718a Work around performance issue in vobject library 2022-01-24 15:46:48 +01:00
Raphael Michel
c9d3428996 Extend check_order_transactions by number of tickets 2022-01-22 22:00:35 +01:00
Felix Schäfer
d4ef16b31a Fix #2320 - Move file upload "required" attrs manipulation from init to rendering (#2399) 2022-01-21 15:49:24 +01:00
Yuriko Matsunami
6a35e7d3cd Translated on translate.pretix.eu (Japanese)
Currently translated at 97.0% (167 of 172 strings)

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

powered by weblate
2022-01-21 15:49:03 +01:00
DJG Bayern
463443d606 Translations: Update Japanese
Currently translated at 0.1% (8 of 4582 strings)

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

powered by weblate
2022-01-21 15:49:03 +01:00
Raphael Michel
6f0da5c2ca TaxRules: Add internal_name and keep_gross_if_rate_changes (#2422)
Co-authored-by: ser8phin <eva.wolkwitz@gmx.de>
2022-01-21 15:39:27 +01:00
ser8phin
c1344422a5 Remove disabled attribute on checkbox (#2423)
Co-authored-by: Raphael Michel <michel@rami.io>
2022-01-19 21:38:14 +01:00
Raphael Michel
c2bd3dde44 GitHub actions: Do not run on 3.10 yet (too many warnings) 2022-01-19 17:12:15 +01:00
Raphael Michel
9e51736232 Fix GitHub actions scripts (No YAML, Python 3.10 is not 3.1) 2022-01-19 17:01:42 +01:00
Raphael Michel
5b27ce1265 Stop testing Python 3.6 on CI 2022-01-19 17:00:24 +01:00
Raphael Michel
0757542f4f Drop Python 3.6 compatibility 2022-01-19 16:49:19 +01:00
Raphael Michel
12be98c888 Update Pillow to 9.* 2022-01-19 16:46:43 +01:00
Raphael Michel
51e6b02aa9 Docs: Remove mention of local cache backend 2022-01-19 15:24:44 +01:00
Raphael Michel
acc4a167b1 Event series calendar: Fix incorrect show_names heuristic 2022-01-19 14:58:30 +01:00
Richard Schreiber
dd9429bbfa Fix: phone being "None" or format not recognized in checkout (#2420) 2022-01-18 12:27:57 +01:00
Richard Schreiber
768bb8c106 Add phone number to customer profile (Z#178346) (#2414) 2022-01-18 11:38:32 +01:00
Raphael Michel
cbdafac999 Web check-in: Fix search 2022-01-17 14:55:16 +01:00
Raphael Michel
96f694cf61 Translations: Update German (informal) (de_Informal)
Currently translated at 99.9% (4580 of 4582 strings)

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

powered by weblate
2022-01-14 16:12:13 +01:00
Raphael Michel
5576829ebf Translations: Update German
Currently translated at 100.0% (4582 of 4582 strings)

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

powered by weblate
2022-01-14 16:12:13 +01:00
Raphael Michel
b0d67e92ac Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2022-01-14 15:33:22 +01:00
Yuriko Matsunami
63e28723d2 Translated on translate.pretix.eu (Japanese)
Currently translated at 73.2% (126 of 172 strings)

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

powered by weblate
2022-01-14 14:51:58 +01:00
Mikkel Ricky
cc0656f169 Translations: Update Danish
Currently translated at 35.3% (1613 of 4565 strings)

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

powered by weblate
2022-01-14 14:51:58 +01:00
ser8phin
849c8e719a Fix #555 -- Preselect a single required add-on (#2395) 2022-01-14 14:46:04 +01:00
Raphael Michel
a3ec2a4061 Clarify help text of invoice_address_custom_field 2022-01-14 14:42:42 +01:00
Raphael Michel
00a7187a7a Duplicate line break before invoice deadline 2022-01-13 16:45:15 +01:00
Richard Schreiber
701c4f768e Improve add-to-cart checkbox for items with max. 1 per order (Z#178704) (#2413) 2022-01-12 17:10:00 +01:00
Aya Yabuki
cf751d38d2 Translated on translate.pretix.eu (Japanese)
Currently translated at 16.8% (29 of 172 strings)

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

powered by weblate
2022-01-12 16:21:14 +01:00
Aya Yabuki
888402a4bf Translated on translate.pretix.eu (Japanese)
Currently translated at 16.8% (29 of 172 strings)

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

powered by weblate
2022-01-12 16:21:14 +01:00
Aya Yabuki
1134f610fd Translated on translate.pretix.eu (Japanese)
Currently translated at 8.7% (15 of 172 strings)

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

powered by weblate
2022-01-12 16:21:14 +01:00
Raphael Michel
8ae4304c7d Add workaround for https://github.com/getsentry/responses/issues/464 2022-01-12 10:19:02 +01:00
Raphael Michel
357092ec44 API: Add InvoiceLine.subevent (#2411) 2022-01-10 14:11:06 +01:00
Raphael Michel
70a5c76d79 Allow tax rules to trigger approval requirement (#2409) 2022-01-10 14:10:51 +01:00
ser8phin
7a4db8ea23 Add approval requirement option to product variations (#2381) 2022-01-05 18:04:12 +01:00
Raphael Michel
223b160c0c Fix booked add-ons being hidden in order change due to hide_sold_out 2022-01-05 17:58:21 +01:00
Raphael Michel
30c1771d29 Thumbnail: Support for paletted PNG files 2022-01-04 16:26:13 +01:00
Raphael Michel
b3b7b9bbab Optimize rendering of very large calendars (#2406) 2022-01-04 10:48:48 +01:00
dependabot[bot]
be040cd6ea Bump @babel/core from 7.16.0 to 7.16.7 in /src/pretix/static/npm_dir (#2401)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-04 10:33:51 +01:00
dependabot[bot]
c6665ec2e6 Bump @rollup/plugin-node-resolve from 13.0.6 to 13.1.2 in /src/pretix/static/npm_dir (#2403)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-04 10:30:57 +01:00
dependabot[bot]
fd16ef1e4d Bump rollup from 2.60.2 to 2.62.0 in /src/pretix/static/npm_dir (#2402)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-04 10:30:51 +01:00
dependabot[bot]
39557fc452 Bump @babel/preset-env from 7.16.4 to 7.16.7 in /src/pretix/static/npm_dir (#2404)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-04 10:30:44 +01:00
cpoisnel
408397a639 Translations: Update French
Currently translated at 48.8% (2229 of 4565 strings)

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

powered by weblate
2022-01-04 10:30:34 +01:00
Raphael Michel
d4a2500204 Check-in list PDF: Escape HTML tags in names 2022-01-03 12:41:37 +01:00
Raphael Michel
e74d9e56cf Waiting list: Explain that you only get one ticket 2022-01-03 10:43:13 +01:00
Raphael Michel
f3767ab4ac Gift card: Log user who triggered reversal of transaction 2022-01-03 10:39:05 +01:00
Raphael Michel
5d13f5f885 Gift cards: Fix incorrect handling of return key 2022-01-03 10:38:54 +01:00
Raphael Michel
451d3fce05 Cookie consent: Fix crash without localStorage again 2021-12-22 10:29:27 +01:00
Raphael Michel
ccb61e0f56 Docs: Fix dead external link 2021-12-21 11:45:34 +01:00
Richard Schreiber
b6273adc57 Calendar-View: add short_month_day_format for week-views (#2392) 2021-12-21 11:19:58 +01:00
Richard Schreiber
0bf7bba6ba Fix: WEEK_FORMAT fallback in calender week-views (#2391)
* switch to context-week_format for fallback-handling

* set week_format fallback to en instead of de

* add french WEEK_FORMAT and WEEK_DAY_FORMAT
2021-12-21 10:10:13 +01:00
Raphael Michel
7090e0bae2 Event settings: Do not specify fields as optional that are actually required 2021-12-20 19:20:48 +01:00
Raphael Michel
c75cb0b8e3 Cookie consent: Fail softly if localStorage is unavailable 2021-12-20 16:11:33 +01:00
Raphael Michel
3dbf22f670 Remove django-compat from settings.py 2021-12-20 12:22:13 +01:00
Raphael Michel
f26cbdc257 Bump arabic-reshaper to 2.1.3 2021-12-20 09:52:38 +01:00
Raphael Michel
6b4adccee5 Bump django-hijack to 3.1.* 2021-12-20 09:51:52 +01:00
Raphael Michel
c2a8286022 Fix celery-specific issue in 9f4b834ab 2021-12-16 19:06:16 +01:00
Martin Gross
4145887a9b Web checkin: Redirect user to login if session expired (#2383)
Co-authored-by: Raphael Michel <michel@rami.io>
2021-12-16 18:35:09 +01:00
Raphael Michel
9f4b834abc Allow to attach files to order confirmation email (#2384)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2021-12-16 18:34:18 +01:00
Richard Schreiber
8fcc314f09 Add fixed scroll position when navigating calendar views (Z#177488) (#2385)
* add fixed scroll position when navigating calendar views

* change from local to sessionStorage

* add check for sessionStorage
2021-12-16 13:36:10 +01:00
Felix Rindt
94a7d02ab1 Fix event settings form considered changed even if unchanged (#1739)
Co-authored-by: Raphael Michel <michel@rami.io>
2021-12-16 11:27:18 +01:00
Raphael Michel
ad2943263c Fix unnecessary override of default settings 2021-12-16 10:31:46 +01:00
Raphael Michel
5210ac3a78 Reduce confusion about customer login with event level domains (#2380) 2021-12-15 16:47:08 +01:00
Raphael Michel
0e9600a7bf Fix test isolation issue 2021-12-15 16:46:50 +01:00
ser8phin
eccba09452 Add payment search page (#2335)
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2021-12-15 16:06:43 +01:00
Richard Schreiber
c8a830ecde Fix: change widget to use new date-based URLs in calendar-view (#2382) 2021-12-15 14:07:42 +01:00
Richard Schreiber
aed64d16f6 Improve calendar-navigation on organizer and events page (Z#177488) (#2373)
* hide icons for calendar-types and improve layout-breakpoints in calendar top-nav

* change month-selector to one dropdown "date"and redirect old URLs to new date-based URLs

* change week calendar to one dropdown "date“ and redirect old URLs to new date-based URLs
2021-12-14 16:38:32 +01:00
Raphael Michel
d16f6167f6 Fix rich_text crash on empty <a> element 2021-12-14 13:56:52 +01:00
Raphael Michel
77d59248e5 Translations: Update Galician
Currently translated at 1.3% (61 of 4565 strings)

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

powered by weblate
2021-12-14 13:30:11 +01:00
Raphael Michel
a0e05f8af6 Translations: Update Galician
Currently translated at 1.1% (52 of 4565 strings)

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

powered by weblate
2021-12-14 13:30:11 +01:00
Raphael Michel
9b8a47c8b8 Translations: Update Galician
Currently translated at 1.1% (52 of 4565 strings)

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

powered by weblate
2021-12-14 13:30:11 +01:00
Ismael Menéndez Fernández
b3d692276c Translations: Update Galician
Currently translated at 1.1% (52 of 4565 strings)

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

powered by weblate
2021-12-14 13:30:11 +01:00
DJG Bayern
55543e12f6 Translated on translate.pretix.eu (Japanese)
Currently translated at 7.5% (13 of 172 strings)

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

powered by weblate
2021-12-14 13:30:11 +01:00
Yuriko Matsunami
1e16185c02 Translated on translate.pretix.eu (Japanese)
Currently translated at 7.5% (13 of 172 strings)

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

powered by weblate
2021-12-14 13:30:11 +01:00
Raphael Michel
cd900e24bd Questions form: Do not persist values to questions hidden by dependencies 2021-12-13 15:46:58 +01:00
Raphael Michel
0dbedc07ce Fix CI dependency installation (#2376) 2021-12-13 15:24:27 +01:00
Raphael Michel
f71877b7fc Badges: Fix event copy data receiver not rewriting questions 2021-12-13 14:09:38 +01:00
Martin Gross
f69e270e4d Add filter for revoked devices (#2372)
Co-authored-by: Raphael Michel <michel@rami.io>
2021-12-13 12:47:43 +01:00
MrGamy
533939cae4 included missing adjective
fixes #2344
2021-12-10 19:29:45 +01:00
Ilona Zilgalve
91ec5fd78c Translated on translate.pretix.eu (Latvian)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2021-12-09 16:54:15 +01:00
Ilona Zilgalve
0056fb447b Translations: Update Latvian
Currently translated at 31.1% (1421 of 4565 strings)

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

powered by weblate
2021-12-09 16:54:15 +01:00
Ilona Zilgalve
20c4d12e98 Translations: Update Russian
Currently translated at 25.1% (1147 of 4565 strings)

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

powered by weblate
2021-12-09 16:54:15 +01:00
Ilona Zilgalve
e13c567e84 Translations: Update Latvian
Currently translated at 28.3% (1296 of 4565 strings)

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

powered by weblate
2021-12-09 16:54:15 +01:00
Ilona Zilgalve
9fef97a7c6 Translations: Update Russian
Currently translated at 24.9% (1139 of 4565 strings)

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

powered by weblate
2021-12-09 16:54:15 +01:00
Ilona Zilgalve
e68a995376 Translations: Update Latvian
Currently translated at 27.5% (1256 of 4565 strings)

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

powered by weblate
2021-12-09 16:54:15 +01:00
Ilona Zilgalve
6abdb40ef5 Translations: Update Latvian
Currently translated at 27.4% (1252 of 4565 strings)

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

powered by weblate
2021-12-09 16:54:15 +01:00
Ilona Zilgalve
43cc06b0a1 Translations: Update Russian
Currently translated at 24.4% (1115 of 4565 strings)

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

powered by weblate
2021-12-09 16:54:15 +01:00
Ondřej Sokol
d17476cd75 Translated on translate.pretix.eu (Czech)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2021-12-09 16:54:15 +01:00
Ondřej Sokol
5c3bfd2a71 Translations: Update Czech
Currently translated at 10.5% (482 of 4565 strings)

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

powered by weblate
2021-12-09 16:54:15 +01:00
Maico Timmerman
033b8d70e7 Email: Allow to override backend for custom SMTP connections (#2368) 2021-12-09 16:49:22 +01:00
Raphael Michel
bd22c2afc9 Set OrderRefund.execution_date on manual refund 2021-12-08 09:41:12 +01:00
Raphael Michel
b355733f53 Allow to link directly to voucher input form 2021-12-06 18:09:38 +01:00
Raphael Michel
e1f924c4ce Allow to reschedule a missed email 2021-12-06 17:36:49 +01:00
Raphael Michel
8038f4e173 Orders API: Allow to filter by subevent 2021-12-06 12:50:33 +01:00
Raphael Michel
5c55219d45 Allow to create new customers in backend (#2367) 2021-12-06 12:27:21 +01:00
Eva-Maria Obermann
bfd37af467 Translated on translate.pretix.eu (French)
Currently translated at 63.3% (109 of 172 strings)

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

powered by weblate
2021-12-06 12:27:12 +01:00
Eva-Maria Obermann
b2509e120c Translations: Update German
Currently translated at 100.0% (4565 of 4565 strings)

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

powered by weblate
2021-12-06 12:27:12 +01:00
ExtremeX-BB
e2339acd09 Translated on translate.pretix.eu (Chinese (Simplified))
Currently translated at 68.0% (117 of 172 strings)

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

powered by weblate
2021-12-06 12:27:12 +01:00
ExtremeX-BB
c15b4fa03c Translations: Update Chinese (Simplified)
Currently translated at 66.2% (3025 of 4565 strings)

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

powered by weblate
2021-12-06 12:27:12 +01:00
Ilona Zilgalve
c4aa2e0484 Translations: Update Latvian
Currently translated at 27.0% (1235 of 4565 strings)

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

powered by weblate
2021-12-06 12:27:12 +01:00
Ilona Zilgalve
361eeb7159 Translations: Update Russian
Currently translated at 24.4% (1114 of 4565 strings)

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

powered by weblate
2021-12-06 12:27:12 +01:00
Raphael Michel
0109e1806f OrderChangeManager: Move invoice reissuing after payment cancellation (#2359) 2021-12-06 12:26:53 +01:00
Raphael Michel
30aadac099 Fix isort change 2021-12-03 15:02:46 +01:00
dependabot[bot]
0458f1b2dc Bump @babel/preset-env from 7.16.0 to 7.16.4 in /src/pretix/static/npm_dir (#2360)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-03 14:40:06 +01:00
dependabot[bot]
e006ca3feb Bump @rollup/plugin-node-resolve from 11.2.1 to 13.0.6 in /src/pretix/static/npm_dir (#2361)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-03 14:39:27 +01:00
dependabot[bot]
1f31ee2ea1 Bump rollup from 2.59.0 to 2.60.2 in /src/pretix/static/npm_dir (#2362)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-03 14:39:02 +01:00
Richard Schreiber
2d37b0df77 Fix: Day calendar - scroll current .tick into view without window being scrolled (#2365) 2021-12-03 14:36:28 +01:00
Raphael Michel
4133e5ac4d Fix incorrect order change tests 2021-12-03 14:08:19 +01:00
Richard Schreiber
0fd3d0fe71 Fix #2363 – Email: change text-alignment from center to left (right for rtl) (#2364) 2021-12-03 13:44:06 +01:00
Raphael Michel
d0685e99ad Return URL: Append error/success message to query 2021-12-03 10:30:33 +01:00
Raphael Michel
c6fd5bc864 Self-service order change: Fix price constraints not actually being enforced 2021-12-03 10:04:07 +01:00
Raphael Michel
9fa935099f Email rules: Show warning when date was missed 2021-12-03 09:36:54 +01:00
Raphael Michel
83b5a325e3 Fix bug in 832235411 2021-11-30 22:52:34 +01:00
pretix translation bot
97e12c5003 Translations update from Weblate (#2356)
Co-authored-by: Raphael Michel <michel@rami.io>
2021-11-30 17:55:32 +01:00
Raphael Michel
e6db8340f2 Extend German spellcheck wordlist 2021-11-30 17:52:02 +01:00
Raphael Michel
3cf9caa5d3 Add "analytics" to wordlist 2021-11-30 17:26:28 +01:00
Ilona Zilgalve
2ffd68ace7 Translated on translate.pretix.eu (Latvian)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2021-11-30 17:26:12 +01:00
Ilona Zilgalve
0231be63b4 Translations: Update Latvian
Currently translated at 27.1% (1232 of 4537 strings)

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

powered by weblate
2021-11-30 17:26:12 +01:00
Ilona Zilgalve
fae8bc254e Translations: Update Russian
Currently translated at 24.5% (1113 of 4537 strings)

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

powered by weblate
2021-11-30 17:26:12 +01:00
Tonda Pavlík
1d5c700fa2 Translations: Update Czech
Currently translated at 10.4% (474 of 4537 strings)

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

powered by weblate
2021-11-30 17:26:12 +01:00
Raphael Michel
e61775d5c1 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2021-11-30 17:13:43 +01:00
Raphael Michel
e767c6a68d Add central cookie consent mechanism (#2330)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2021-11-30 17:12:17 +01:00
Raphael Michel
832235411f Add subevent location to order info in emails (#2354) 2021-11-30 13:21:36 +01:00
Raphael Michel
1f0f7b752f Payment provider API: Add confirm_button_name 2021-11-29 20:54:24 +01:00
Raphael Michel
3117eceb72 Validate VAT ID when changing invoice addresses 2021-11-29 20:36:20 +01:00
Raphael Michel
c1b39782fd Bump to 4.6.0.dev0 2021-11-29 15:47:08 +01:00
Raphael Michel
860cfc3227 Bump version to 4.5.0 2021-11-29 15:46:42 +01:00
pretix translation bot
45859a07dd Translations update from Weblate (#2352)
Co-authored-by: Raphael Michel <michel@rami.io>
2021-11-29 10:35:24 +01:00
dependabot[bot]
04fb8efc0d Update flake8 requirement from ==3.7.* to >=3.7,<4.1 in /src
Updates the requirements on [flake8](https://github.com/pycqa/flake8) to permit the latest version.
- [Release notes](https://github.com/pycqa/flake8/releases)
- [Commits](https://github.com/pycqa/flake8/compare/3.7.0...4.0.1)

---
updated-dependencies:
- dependency-name: flake8
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-29 09:53:14 +01:00
Raphael Michel
fdb8a3720b Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2021-11-29 09:28:15 +01:00
Raphael Michel
5638d68894 Raise some dependencies 2021-11-29 09:27:24 +01:00
Raphael Michel
f64042280a Tighten dependency ranges 2021-11-29 09:27:24 +01:00
Angel Saiz Velasco
50060cdc8d Translations: Update Spanish
Currently translated at 66.7% (2992 of 4483 strings)

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

powered by weblate
2021-11-29 09:19:44 +01:00
Ismael Menéndez Fernández
4499f58e3d Translated on translate.pretix.eu (Galician)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2021-11-29 09:19:44 +01:00
Ismael Menéndez Fernández
918e4a5a89 Translations: Update Galician
Currently translated at 0.7% (33 of 4483 strings)

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

powered by weblate
2021-11-29 09:19:44 +01:00
Ismael Menéndez Fernández
15a86fd796 Translated on translate.pretix.eu (Spanish)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2021-11-29 09:19:44 +01:00
Ismael Menéndez Fernández
4126d20f1c Translations: Update Spanish
Currently translated at 66.6% (2986 of 4483 strings)

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

powered by weblate
2021-11-29 09:19:44 +01:00
Eva-Maria Obermann
ea3edf83f8 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (4483 of 4483 strings)

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

powered by weblate
2021-11-29 09:19:44 +01:00
Eva-Maria Obermann
9a42819b56 Translations: Update German
Currently translated at 100.0% (4483 of 4483 strings)

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

powered by weblate
2021-11-29 09:19:44 +01:00
Marco Giacopuzzi
3e4ba28700 Translated on translate.pretix.eu (Italian)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2021-11-29 09:19:44 +01:00
Marco Giacopuzzi
9014ffcc28 Translations: Update Italian
Currently translated at 17.1% (770 of 4483 strings)

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

powered by weblate
2021-11-29 09:19:44 +01:00
Raphael Michel
48f4bcf88c Fix breaking multi-event exporters 2021-11-23 17:07:39 +01:00
Raphael Michel
b7dfb3697e Widget: Fix price box not shown for free-price events with one product 2021-11-23 11:13:09 +01:00
Richard Schreiber
475a5be351 Day calendar: Fix missing current-time-bar back for all browsers (#2342) 2021-11-22 15:12:51 +01:00
Richard Schreiber
8254d8f5cc Day-Calendar: improve width of row-names (#2341) 2021-11-22 15:09:40 +01:00
Raphael Michel
6f0f4755ef Restrict day calendar JS to day calendar page 2021-11-19 19:02:46 +01:00
Richard Schreiber
910a35dedc Fix: calculate day calendar grid in JS as chrome does not support calc-division in CSS-grid (#2340)
Co-authored-by: Raphael Michel <michel@rami.io>
2021-11-19 17:42:16 +01:00
Raphael Michel
e694bd8c21 Fix next crash in day calendar if there is no start time 2021-11-19 17:08:05 +01:00
Raphael Michel
29cf384c28 Fix crash in day calendar if there is no start time 2021-11-19 16:32:07 +01:00
Raphael Michel
492288f437 Allow customers to change add-ons on existing orders (#2283) 2021-11-19 14:59:54 +01:00
Raphael Michel
34e4f7e0fc Add day calendar to organizer page (#2100)
Co-authored-by: Richard Schreiber <wiffbi@gmail.com>
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2021-11-19 14:59:35 +01:00
Rasmus Kock Grusgaard
f6f3bbcce6 Translations: Update Danish
Currently translated at 35.9% (1613 of 4483 strings)

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

powered by weblate
2021-11-19 14:59:06 +01:00
Raphael Michel
16054893ed Avoid creation of manual payments with zero amount (#2325) 2021-11-19 12:02:36 +01:00
dependabot[bot]
f6038d2c39 Update django-statici18n requirement from ==1.9.* to >=1.9,<2.2 in /src (#2332)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-18 17:41:37 +01:00
dependabot[bot]
8d13b51271 Bump pycparser from 2.13 to 2.21 in /src (#2334)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-18 17:40:59 +01:00
Raphael Michel
83e1f365c2 Sendmail rules: Add warnings and scheduling view (#2328) 2021-11-18 12:48:27 +01:00
Raphael Michel
146e1aeb67 Upgrade mt-940 to 4.* (#2331) 2021-11-18 12:24:54 +01:00
dependabot[bot]
f9b2920984 Update libsass requirement from ==0.20.* to >=0.20,<0.22 in /src (#2315)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-18 12:14:24 +01:00
dependabot[bot]
2c01b214a7 Update pyflakes requirement from ==2.1.* to >=2.1,<2.5 in /src (#2313)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-18 12:14:01 +01:00
dependabot[bot]
fdab45e5ce Update bleach requirement from ==3.3.* to >=3.3,<4.2 in /src (#2317)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-18 12:13:17 +01:00
pretix translation bot
9d2cf18543 Translations update from Weblate (#2327)
Co-authored-by: +se <sebastiano@endsummercamp.org>
2021-11-18 12:12:42 +01:00
Martin Gross
2206ab1d35 Validate Swiss VAT ID against PROD and not TEST-env 2021-11-17 14:07:14 +01:00
Raphael Michel
ecd2c80dce Downgrade 'markdown' package (#2329) 2021-11-17 11:21:59 +01:00
Raphael Michel
3387df491a Fix error handling in Swiss VAT ID validation 2021-11-17 10:30:52 +01:00
pretix translation bot
b6974e0c77 Translations update from Weblate (#2319)
Co-authored-by: Maarten van den Berg <maartenberg1@gmail.com>
Co-authored-by: +se <sebastiano@endsummercamp.org>
2021-11-16 16:58:21 +01:00
Raphael Michel
31751cbd79 Stripe: Fix storage of failed refunds 2021-11-16 12:18:33 +01:00
Raphael Michel
993da5a392 VAT validation: Move cache to data directory 2021-11-16 10:21:08 +01:00
Richard Schreiber
72455209bb CSP: Strip keys with empty values from header (#2322) 2021-11-16 09:24:19 +01:00
Richard Schreiber
803aa0b70d Setup: Allow django-hijack v2.2 (#2321) 2021-11-16 09:24:06 +01:00
Bentrex95
954d86337c Docs: Fix typo in dev-setup-command (#2316) 2021-11-12 12:42:07 +01:00
Raphael Michel
38a58d62f3 Change default settings for background color, invoice attachmentes and name scheme (#2288) 2021-11-11 12:20:34 +01:00
Raphael Michel
e67b39a57b Increase padding if background color is set (#2301) 2021-11-11 12:20:20 +01:00
dependabot[bot]
148b67ac3f Update django-filter requirement from ==2.4.* to >=2.4,<21.2 in /src (#2311)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-11 11:14:35 +01:00
dependabot[bot]
d261cb3b6b Bump django-libsass from 0.8 to 0.9 in /src (#2312)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-11 11:14:07 +01:00
ser8phin
169a6c51b4 Add check to force users to change password (#2284) 2021-11-11 11:10:33 +01:00
Raphael Michel
245ad644ff Subevent calendar: Improve heuristic on when to show names (#2308) 2021-11-11 10:02:45 +01:00
Jaakko Rinta-Filppula
4fdce0d126 Translated on translate.pretix.eu (Finnish)
Currently translated at 50.0% (86 of 172 strings)

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

powered by weblate
2021-11-11 10:02:32 +01:00
Jaakko Rinta-Filppula
a542bc7a5a Translated on translate.pretix.eu (Finnish)
Currently translated at 19.0% (856 of 4483 strings)

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

powered by weblate
2021-11-11 10:02:32 +01:00
dependabot[bot]
3164919923 Update pytest-rerunfailures requirement from ==9.* to >=9,<11 in /src (#2303)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Raphael Michel <michel@rami.io>
2021-11-09 19:22:43 +01:00
dependabot[bot]
8085311eb6 Update django-localflavor requirement from ==3.0.* to >=3.0,<3.2 in /src (#2305)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-09 19:21:53 +01:00
dependabot[bot]
3887a65961 Update pytest-mock requirement from ==2.0.* to >=2.0,<3.7 in /src (#2302)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-09 19:20:47 +01:00
dependabot[bot]
b229c6156a Update chardet requirement from <3.1.0,>=3.0.2 to >=3.0.2,<4.1.0 in /src (#2304)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-09 19:20:40 +01:00
Raphael Michel
c45298544e Fix incorrect settings propagagion 2021-11-09 18:45:45 +01:00
Maarten van den Berg
7bb9d3fc3d Translated on translate.pretix.eu (Dutch)
Currently translated at 99.9% (4482 of 4483 strings)

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

powered by weblate
2021-11-09 17:25:38 +01:00
Ismael Menéndez Fernández
8607df5a9c Translated on translate.pretix.eu (Galician)
Currently translated at 31.3% (54 of 172 strings)

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

powered by weblate
2021-11-09 17:25:38 +01:00
Ismael Menéndez Fernández
c4150473fc Translated on translate.pretix.eu (Galician)
Currently translated at 0.4% (20 of 4483 strings)

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

powered by weblate
2021-11-09 17:25:38 +01:00
Martin Gross
172b2f74e0 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 100.0% (4483 of 4483 strings)

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

powered by weblate
2021-11-09 17:25:38 +01:00
Svyatoslav
9586f71dc2 Translated on translate.pretix.eu (Latvian)
Currently translated at 24.0% (1077 of 4483 strings)

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

powered by weblate
2021-11-09 17:25:38 +01:00
Raphael Michel
25692d180f Make weblate script more robust 2021-11-09 16:34:57 +01:00
Raphael Michel
ae047037dc Docs: Add style guide for commit messages (#2281)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2021-11-09 16:30:32 +01:00
dependabot[bot]
265106034b Update django-otp requirement from ==0.7.*,>=0.7.5 to >=0.7,<1.2 in /src (#2290)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-09 12:00:15 +01:00
Raphael Michel
dd0a4df914 Fix error 500 on non-ASCII attachment file names 2021-11-09 11:55:03 +01:00
dependabot[bot]
b0ae40c264 Bump rollup from 1.32.1 to 2.59.0 in /src/pretix/static/npm_dir (#2298)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-09 11:54:28 +01:00
dependabot[bot]
ad95815043 Update redis requirement from ==3.4.* to >=3.4,<3.6 in /src (#2293)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-09 11:54:07 +01:00
dependabot[bot]
f68522ec0d Bump @babel/core from 7.13.14 to 7.16.0 in /src/pretix/static/npm_dir (#2297)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-09 09:51:38 +01:00
dependabot[bot]
b831e57351 Bump @rollup/plugin-node-resolve from 11.2.0 to 11.2.1 in /src/pretix/static/npm_dir (#2299)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-09 09:50:08 +01:00
dependabot[bot]
51166786ee Update phonenumberslite requirement from ==8.11.* to >=8.11,<8.13 in /src (#2291)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-09 09:49:52 +01:00
dependabot[bot]
909e7906ff Update sentry-sdk requirement from ==1.1.* to >=1.1,<1.5 in /src (#2292)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-09 09:47:55 +01:00
dependabot[bot]
e185d5f0e7 Bump @babel/preset-env from 7.13.12 to 7.16.0 in /src/pretix/static/npm_dir (#2295)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-09 09:46:21 +01:00
dependabot[bot]
ce8edf621b Bump vue and vue-template-compiler in /src/pretix/static/npm_dir (#2296)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-09 09:45:24 +01:00
Raphael Michel
e58b512876 Fix ordering of questions in backend if all system questions are 0 2021-11-09 09:44:44 +01:00
Raphael Michel
d1754f6d1b GitHub: Enable dependabot (#2289) 2021-11-09 09:43:52 +01:00
Raphael Michel
ff2f1b7424 Fix incorrect check for enabled fields in QuestionList 2021-11-09 09:32:52 +01:00
Raphael Michel
fb1838a2f0 Fix incorrect help text 2021-11-09 09:32:52 +01:00
Raphael Michel
d7b05063a4 Allow to print event location on invoices (#2278)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2021-11-05 09:47:41 +01:00
Raphael Michel
f64a42d61a Stripe: Fix handling of charges without source 2021-11-04 18:21:29 +01:00
Raphael Michel
c1994e89a5 Stripe: Fix MultipleObjectsReturned in webhook 2021-11-04 17:58:24 +01:00
Raphael Michel
f37de1ad2f Invoice renderer: Do not show end date if same as start date 2021-11-04 17:34:44 +01:00
Raphael Michel
e1ff6f8590 Stripe: Look up charges by their source ID as well 2021-11-04 17:20:45 +01:00
Raphael Michel
a5dd22eb4d Reduce number of global locks needed for confirming payments 2021-11-04 17:18:48 +01:00
Raphael Michel
19cde63505 Fix incorrect setting if Invoice.full_invoice_no 2021-11-04 13:48:39 +01:00
Raphael Michel
754d4f4f62 Sendmail: Fix subevent-less rules in event series 2021-11-04 10:21:03 +01:00
Bentrex95
e433230573 Docs: Update dependencies for dev setup (#2282)
Co-authored-by: Raphael Michel <michel@rami.io>
2021-11-03 12:35:26 +01:00
Julia Luna
f8927396d3 API: Add endpoints for automated email rules (#2178)
Co-authored-by: Raphael Michel <michel@rami.io>
2021-11-03 11:49:01 +01:00
Raphael Michel
60be99fbb2 Another attempt at correct sanitization of HTML in invoice content (#2279) 2021-11-03 11:13:43 +01:00
Raphael Michel
0c508c5ba4 Fix remaining DST error in auto check-out 2021-11-03 09:34:50 +01:00
Richard Schreiber
ea6067ab3f Fix Outlook >= 2010 trimming header image (#2277)
* fix image cutoff with mso-line-height: at-least
* align text to the left; fully centered text is hard to read
* remove mso cellpadding-tables as they double up the spacing
* additionally add background-color to a table with width=100% for broader support (e.g. Yahoo and AOL)
2021-11-02 12:59:09 +01:00
Raphael Michel
9d0fa84277 Add nodejs to update notes 2021-10-31 18:32:16 +01:00
Raphael Michel
a6835d3b14 Fix bug in 03de0d5d2 2021-10-31 18:26:45 +01:00
Raphael Michel
9ff565f772 Fix unreadable active tab 2021-10-31 17:28:35 +01:00
Raphael Michel
5d41b20bae Fix crash in waiting list 2021-10-31 17:28:29 +01:00
Raphael Michel
03de0d5d2e Do not ask authenticated customers to re-type their email address 2021-10-29 17:23:26 +02:00
Raphael Michel
2937acdc66 Bump to 4.5.0.dev0 2021-10-29 15:38:52 +02:00
Raphael Michel
6fd09e99e2 Bump version to 4.4.0 2021-10-29 15:38:52 +02:00
Raphael Michel
290e14689d Fix check_order_transactions on SQLite 2021-10-29 15:38:52 +02:00
Raphael Michel
89c937089b Translated on translate.pretix.eu (Galician)
Currently translated at 0.0% (0 of 4483 strings)

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

powered by weblate
2021-10-29 14:17:23 +02:00
Raphael Michel
0e02febe76 Translated on translate.pretix.eu (German)
Currently translated at 100.0% (4483 of 4483 strings)

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

powered by weblate
2021-10-29 14:17:23 +02:00
Raphael Michel
771f822e5f Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 100.0% (4483 of 4483 strings)

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

powered by weblate
2021-10-29 14:17:23 +02:00
Raphael Michel
e8936551c0 Extend spellcheck word list 2021-10-29 13:58:29 +02:00
Raphael Michel
ea0f6dfc54 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2021-10-29 12:10:08 +02:00
Raphael Michel
abeddd360e Invoices: Change expected behaviour for switches in numbering scheme 2021-10-29 12:09:09 +02:00
Maarten van den Berg
c209d195bf Translated on translate.pretix.eu (Dutch)
Currently translated at 100.0% (172 of 172 strings)

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

powered by weblate
2021-10-29 10:24:22 +02:00
Maarten van den Berg
35c46d320c Translated on translate.pretix.eu (Dutch)
Currently translated at 99.9% (4470 of 4474 strings)

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

powered by weblate
2021-10-29 10:24:22 +02:00
Raphael Michel
30621568ab Added translation on translate.pretix.eu (Galician) 2021-10-29 10:24:22 +02:00
Raphael Michel
403c4f4499 Add Galician as an incubating language 2021-10-29 10:23:57 +02:00
Raphael Michel
884bba0088 Fix transaction creation during split order creation 2021-10-29 10:21:37 +02:00
Raphael Michel
2b52edd5b7 Remove wrong optimization 2021-10-28 11:12:16 +02:00
Richard Schreiber
a4aed96784 Fix: add support for rtl-languages to checkout-step-bars 2021-10-27 16:16:04 +02:00
Raphael Michel
4bdfd56264 E-mail layout with logo: Make image display:block for outlook 2021-10-27 11:31:33 +02:00
Raphael Michel
31f0b07325 FIx typo causing test failure 2021-10-27 11:09:00 +02:00
pretix translation bot
3f08f3a7f4 Translations update from Weblate (#2266)
Co-authored-by: Tony Pavlik <kontakt@playton.cz>
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Maarten van den Berg <maartenberg1@gmail.com>
2021-10-27 09:22:02 +02:00
Raphael Michel
93263e7567 money template filter: coerce None to 0.00 2021-10-26 18:07:37 +02:00
Raphael Michel
69cf62d2ca Fix missing or wrong create_transactions calls 2021-10-26 18:07:23 +02:00
Raphael Michel
bb353e5fde Improve detection of missing transactions 2021-10-26 18:06:49 +02:00
Raphael Michel
2dceff1218 Fix transaction creation issues and improve debugging 2021-10-26 11:33:44 +02:00
Raphael Michel
5ea8a8ef82 Ask and validate VAT IDs for Switzerland (#2259)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2021-10-26 11:20:45 +02:00
pretix translation bot
03a7a3303c Translations update from Weblate (#2264)
Co-authored-by: Tony Pavlik <kontakt@playton.cz>
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Jacek Wielemborek <github@d33.pl>
Co-authored-by: Maarten van den Berg <maartenberg1@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
2021-10-26 11:19:45 +02:00
Raphael Michel
2beb0b20ca Check-in API: Work around libpretixsync issue with space encoding 2021-10-26 10:46:28 +02:00
Richard Schreiber
24eea02e0d API: sort ordered items’ answers by questions’ position (#2182) 2021-10-26 09:42:01 +02:00
Raphael Michel
15ab9c72d3 Invoice renderer: Reduce a few spacings 2021-10-22 13:10:48 +02:00
Raphael Michel
c957d77fe0 Fix linter issues 2021-10-22 12:58:45 +02:00
Raphael Michel
7697018ca4 Order JSON export: Add a lot more fields 2021-10-22 12:43:41 +02:00
Raphael Michel
3980a7b2a7 Docs: Fix missing files 2021-10-22 11:06:23 +02:00
pretix translation bot
035bb56386 Translations update from Weblate (#2254)
Co-authored-by: Tony Pavlik <kontakt@playton.cz>
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Jacek Wielemborek <github@d33.pl>
Co-authored-by: Maarten van den Berg <maartenberg1@gmail.com>
2021-10-22 11:04:42 +02:00
Raphael Michel
837b03fff3 Add ugprade note to docs 2021-10-22 11:01:35 +02:00
Raphael Michel
d3dec72831 Add missing import 2021-10-22 10:26:10 +02:00
Raphael Michel
3d78f68d94 Docs: Add page on errors 2021-10-22 10:25:58 +02:00
Raphael Michel
faa43d4df8 Remove duplicate form field 2021-10-21 13:25:52 +02:00
Raphael Michel
78917afa1a Event settings API: Expose mail_days_order_expire_warning 2021-10-19 17:12:13 +02:00
Raphael Michel
4b53d39e3e Add debug command check_order_transactions 2021-10-19 17:10:08 +02:00
Raphael Michel
02db07cd25 Work around potential caching issue 2021-10-19 17:04:28 +02:00
Raphael Michel
19fb6c8c34 create_order_transactions: Make suitable for large datasets 2021-10-19 15:25:34 +02:00
Raphael Michel
0c25b2df92 Docs: Fix typo in index name 2021-10-19 15:25:15 +02:00
Raphael Michel
6a543e4557 Fix missing log message 2021-10-18 18:50:53 +02:00
Raphael Michel
846527546a Improve visual transaction table 2021-10-18 18:35:02 +02:00
Raphael Michel
c8cdb2b311 Log silent DirtyTransactionsForOrderException to sentry 2021-10-18 17:57:36 +02:00
Raphael Michel
96ff3d532d Fix logic error 2021-10-18 17:55:32 +02:00
Raphael Michel
8ebba9de86 Data model for transactional history (#2147) 2021-10-18 17:28:58 +02:00
Raphael Michel
c4e71011ee Update English wordlist 2021-10-18 13:24:38 +02:00
Raphael Michel
e71ad4bfba CSS: Always clear floats before drawing footer 2021-10-18 10:37:23 +02:00
Raphael Michel
05a5a69128 Lightbox: Remove .min.js and make dependency on gettext optional 2021-10-18 09:23:12 +02:00
Raphael Michel
bb83cd2f39 Fix duplicate margin 2021-10-17 19:16:19 +02:00
Raphael Michel
df26171ff1 Fix/Improve responsiveness of calendar pages 2021-10-17 18:55:01 +02:00
Raphael Michel
da937dc4e3 [a11y] Small fixes and improvements 2021-10-17 18:35:55 +02:00
Raphael Michel
bb9508ad96 Fix typo 2021-10-17 17:38:34 +02:00
Raphael Michel
41fed7d6a2 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 98.8% (170 of 172 strings)

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

powered by weblate
2021-10-17 17:37:17 +02:00
Raphael Michel
f441e9984d Translated on translate.pretix.eu (German)
Currently translated at 98.8% (170 of 172 strings)

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

powered by weblate
2021-10-17 17:37:17 +02:00
Raphael Michel
05c6155f37 Translated on translate.pretix.eu (German (informal) (de_Informal))
Currently translated at 100.0% (4474 of 4474 strings)

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

powered by weblate
2021-10-17 17:37:17 +02:00
Raphael Michel
3c096325bd Translated on translate.pretix.eu (German)
Currently translated at 100.0% (4474 of 4474 strings)

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

powered by weblate
2021-10-17 17:37:17 +02:00
Raphael Michel
d06a352df5 Update wordlist 2021-10-17 17:36:58 +02:00
Raphael Michel
ba7b1bb89e Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2021-10-17 16:57:30 +02:00
Richard Schreiber
3dcfa57b70 A11y improvements (#2081)
Co-authored-by: Raphael Michel <michel@rami.io>
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
2021-10-17 16:56:16 +02:00
Raphael Michel
cc13ca1c3f Fix #2165 -- Idempotency key errors from Stripe 2021-10-15 12:01:58 +02:00
Raphael Michel
aac67ebf83 Refs #2165 -- Lock payment object while processing Stripe response 2021-10-15 11:57:40 +02:00
Raphael Michel
b51e1cfc6f Fix #2241 -- Display timezone for sale start 2021-10-15 11:46:45 +02:00
Raphael Michel
f0508cdcc3 Fix #2228 -- Date filter behavior in order data export 2021-10-15 11:46:45 +02:00
Raphael Michel
9ed2dc7b46 Add exporter for gift card transactions 2021-10-15 11:46:45 +02:00
Raphael Michel
0e568a3fca Translated on translate.pretix.eu (Spanish)
Currently translated at 67.8% (2995 of 4413 strings)

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

powered by weblate
2021-10-15 11:18:45 +02:00
ityd
7f3606ee81 Translated on translate.pretix.eu (Spanish)
Currently translated at 67.8% (2996 of 4413 strings)

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

powered by weblate
2021-10-15 11:18:45 +02:00
DJG Bayern
b22d43860a Translated on translate.pretix.eu (Japanese)
Currently translated at 2.9% (5 of 171 strings)

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

powered by weblate
2021-10-15 11:18:45 +02:00
DJG Bayern
0f9b339f01 Translated on translate.pretix.eu (Japanese)
Currently translated at 0.1% (4 of 4413 strings)

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

powered by weblate
2021-10-15 11:18:45 +02:00
DJG Bayern
cd1e9c1740 Translated on translate.pretix.eu (Japanese)
Currently translated at 0.1% (2 of 4413 strings)

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

powered by weblate
2021-10-15 11:18:45 +02:00
Raphael Michel
aec1ce53fc Added translation on translate.pretix.eu (Japanese) 2021-10-15 11:18:45 +02:00
Raphael Michel
aae129be6a Added translation on translate.pretix.eu (Japanese) 2021-10-15 11:18:45 +02:00
Tony Pavlik
b906fe0fc3 Translated on translate.pretix.eu (Czech)
Currently translated at 8.8% (390 of 4413 strings)

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

powered by weblate
2021-10-15 11:18:45 +02:00
Adri
f0f1537e9c Translated on translate.pretix.eu (French)
Currently translated at 50.7% (2238 of 4413 strings)

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

powered by weblate
2021-10-15 11:18:45 +02:00
Raphael Michel
7b7e77d497 Subevent editor: Fix Quota.ignore_for_event_availability not being copied 2021-10-15 11:12:36 +02:00
Raphael Michel
9ac705cd88 Web check-in: Show subevent with check result 2021-10-14 18:48:19 +02:00
Richard Schreiber
01d9574ddf Fix #2244 -- Show products without category first on product-list (#2249) 2021-10-13 09:33:43 +02:00
Richard Schreiber
8121167d5e Control: Add drag and drop to sort categories and products (#2242)
* add drag and drop to categories

* add drag and drop to products

* add light grey background to dragged element

* add missing th, add sr-only desc of columns

* group up/down/move elements

* improve visualizing drag-area by dimming others

* change up/down-links to buttons in form-post

* limit sorting to POST requests

Co-authored-by: Raphael Michel <michel@rami.io>
2021-10-12 14:46:56 +02:00
Raphael Michel
dde4e12ce1 Fix bug in 6cd32400a 2021-10-11 17:36:57 +02:00
Raphael Michel
6cd32400ae Mails: Add elaborate retry logic for MS Exchange 2021-10-11 12:41:26 +02:00
Raphael Michel
8fa71ccad4 Show remaining quota on voucher redemption page 2021-10-08 18:08:28 +02:00
Raphael Michel
0f47bff5cd Allow to hide products that require membership (#2240)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2021-10-07 10:11:31 +02:00
Raphael Michel
f459f1f12d Fix logging error for automated emails 2021-10-07 10:08:30 +02:00
Richard Schreiber
65167cc290 Add new alert icons (#2226) 2021-10-06 12:31:08 +02:00
Raphael Michel
bc7300c393 Track if invoices have been sent via email (#2231) 2021-10-05 13:47:55 +02:00
Jaakko Rinta-Filppula
d8450202fe Translated on translate.pretix.eu (Finnish)
Currently translated at 50.2% (86 of 171 strings)

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

powered by weblate
2021-10-05 12:47:08 +02:00
Jaakko Rinta-Filppula
41d2bcc34f Translated on translate.pretix.eu (Finnish)
Currently translated at 19.3% (852 of 4413 strings)

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

powered by weblate
2021-10-05 12:47:08 +02:00
Fabian Rodriguez
0e1589013a Translated on translate.pretix.eu (French)
Currently translated at 63.7% (109 of 171 strings)

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

powered by weblate
2021-10-04 17:34:05 +02:00
cpoisnel
39f81617e1 Translated on translate.pretix.eu (French)
Currently translated at 63.7% (109 of 171 strings)

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

powered by weblate
2021-10-04 17:34:05 +02:00
cpoisnel
b394ef6de1 Translated on translate.pretix.eu (French)
Currently translated at 50.5% (2231 of 4413 strings)

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

powered by weblate
2021-10-04 17:34:05 +02:00
757 changed files with 576299 additions and 256590 deletions

View File

@@ -1,23 +0,0 @@
---
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.

53
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@@ -0,0 +1,53 @@
name: Bug report
description: Please only create issues for bug reports. Feature requests or general questions should start as a "Discussion" on GitHub.
body:
- type: markdown
attributes:
value: Please make sure to search our issues for similar bugs first! If bug has been reported already, react with a thumbs-up, and/or leave a comment providing further details.
- type: textarea
id: current
attributes:
label: Problem and impact
description: What problem you're running into? What impact does it have on you / your event?
placeholder: When trying to do ____, pretix suddenly shows me an error saying "...".
- type: textarea
id: expected
attributes:
label: Expected behaviour
description: Sometimes bugs are subtle and the expected behaviour may need some explanation. Leave empty if it's just "Don't be broken."
- type: textarea
id: reproduction
attributes:
label: Steps to reproduce
description: "Please give as much context as possible: Are there any settings that impact this behaviour?"
placeholder: |
1.
2.
3.
4.
- type: textarea
id: screenshots
attributes:
label: Screenshots
description: If possible, show screenshots of the problem.
- type: input
id: link
attributes:
label: Link
description: Link to the page where the bug occurs
- type: input
id: browser
attributes:
label: Browser (software, desktop or mobile?) and version
description: Leave empty for backend problems
- type: input
id: os
attributes:
label: Operating system, dependency versions
description: Leave empty for frontend problems
- type: input
id: version
attributes:
label: Version
description: The pretix version in use. (Leave empty if unknown.)

8
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,8 @@
blank_issues_enabled: true
contact_links:
- name: Community Support
url: https://github.com/pretix/pretix/discussions/categories/q-a
about: Not sure how to do Y? Please post your support requests in the Q&A section of our GitHub Discussions instead!
- name: Feature ideas
url: https://github.com/pretix/pretix/discussions/categories/ideas
about: Please post your idea in the Ideas section of our GitHub Discussions instead!

16
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,16 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "pip"
directory: "/src"
schedule:
interval: "daily"
versioning-strategy: increase
- package-ecosystem: "npm"
directory: "/src/pretix/static/npm_dir"
schedule:
interval: "monthly"

View File

@@ -14,16 +14,22 @@ on:
- 'src/pretix/static/**'
- 'src/tests/**'
permissions:
contents: read # to fetch code (actions/checkout)
env:
FORCE_COLOR: 1
jobs:
spelling:
name: Spellcheck
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
- name: Set up Python 3.9
uses: actions/setup-python@v1
with:
python-version: 3.8
python-version: 3.9
- uses: actions/cache@v1
with:
path: ~/.cache/pip
@@ -31,7 +37,7 @@ jobs:
restore-keys: |
${{ runner.os }}-pip-
- name: Install system packages
run: sudo apt update && sudo apt install enchant hunspell aspell-en
run: sudo apt update && sudo apt install enchant-2 hunspell aspell-en
- name: Install Dependencies
run: pip3 install -Ur requirements.txt
working-directory: ./doc

View File

@@ -12,16 +12,22 @@ on:
- 'doc/**'
- 'src/pretix/locale/**'
permissions:
contents: read # to fetch code (actions/checkout)
env:
FORCE_COLOR: 1
jobs:
compile:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
name: Check gettext syntax
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
- name: Set up Python 3.9
uses: actions/setup-python@v1
with:
python-version: 3.8
python-version: 3.9
- uses: actions/cache@v1
with:
path: ~/.cache/pip
@@ -40,14 +46,14 @@ jobs:
run: python manage.py compilejsi18n
working-directory: ./src
spelling:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
name: Spellcheck
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
- name: Set up Python 3.9
uses: actions/setup-python@v1
with:
python-version: 3.8
python-version: 3.9
- uses: actions/cache@v1
with:
path: ~/.cache/pip
@@ -55,7 +61,7 @@ jobs:
restore-keys: |
${{ runner.os }}-pip-
- name: Install system packages
run: sudo apt update && sudo apt install enchant hunspell hunspell-de-de aspell-en aspell-de
run: sudo apt update && sudo apt install enchant-2 hunspell hunspell-de-de aspell-en aspell-de
- name: Install Dependencies
run: pip3 install -e ".[dev]"
working-directory: ./src

View File

@@ -12,16 +12,22 @@ on:
- 'src/pretix/locale/**'
- 'src/pretix/static/**'
permissions:
contents: read # to fetch code (actions/checkout)
env:
FORCE_COLOR: 1
jobs:
isort:
name: isort
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
- name: Set up Python 3.9
uses: actions/setup-python@v1
with:
python-version: 3.8
python-version: 3.9
- uses: actions/cache@v1
with:
path: ~/.cache/pip
@@ -36,13 +42,13 @@ jobs:
working-directory: ./src
flake:
name: flake8
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
- name: Set up Python 3.9
uses: actions/setup-python@v1
with:
python-version: 3.8
python-version: 3.9
- uses: actions/cache@v1
with:
path: ~/.cache/pip
@@ -57,13 +63,13 @@ jobs:
working-directory: ./src
licenseheader:
name: licenseheaders
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
- name: Set up Python 3.9
uses: actions/setup-python@v1
with:
python-version: 3.8
python-version: 3.9
- name: Install Dependencies
run: pip3 install licenseheaders
- name: Run licenseheaders

View File

@@ -12,23 +12,29 @@ on:
- 'doc/**'
- 'src/pretix/locale/**'
permissions:
contents: read # to fetch code (actions/checkout)
env:
FORCE_COLOR: 1
jobs:
test:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
name: Tests
strategy:
matrix:
python-version: [3.6, 3.7, 3.8]
python-version: ["3.7", "3.9", "3.10"]
database: [sqlite, postgres, mysql]
exclude:
- database: mysql
python-version: 3.7
- database: sqlite
python-version: 3.7
python-version: "3.10"
- database: mysql
python-version: 3.6
python-version: "3.9"
- database: sqlite
python-version: 3.6
python-version: "3.7"
- database: sqlite
python-version: "3.10"
steps:
- uses: actions/checkout@v2
- uses: getong/mariadb-action@v1.1
@@ -55,9 +61,9 @@ jobs:
restore-keys: |
${{ runner.os }}-pip-
- name: Install system dependencies
run: sudo apt update && sudo apt install gettext mysql-client
run: sudo apt update && sudo apt install gettext mariadb-client
- name: Install Python dependencies
run: pip3 install -e ".[dev]" mysqlclient psycopg2-binary
run: pip3 install --ignore-requires-python -e ".[dev]" mysqlclient psycopg2-binary # We ignore that flake8 needs newer python as we don't run flake8 during tests
working-directory: ./src
- name: Run checks
run: python manage.py check
@@ -76,4 +82,4 @@ jobs:
with:
file: src/coverage.xml
fail_ci_if_error: true
if: matrix.database == 'postgres' && matrix.python-version == '3.8'
if: matrix.database == 'postgres' && matrix.python-version == '3.10'

View File

@@ -1 +0,0 @@
-r doc/requirements.txt

15
.readthedocs.yaml Normal file
View File

@@ -0,0 +1,15 @@
version: 2
sphinx:
configuration: doc/conf.py
build:
os: ubuntu-22.04
tools:
python: "3.8"
nodejs: "16"
apt_packages:
- gettext
python:
install:
- method: pip
path: ./src/
- requirements: doc/requirements.rtd.txt

View File

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

20
SECURITY.md Normal file
View File

@@ -0,0 +1,20 @@
# Security policy
## Reporting a vulnerability
If you discover a vulnerability with our software or server systems, please report it to us in private. Do not to attempt to harm our users, customer's data or our system's availability when looking for vulneratbilities.
Please contact us at security@pretix.eu with full details and steps to reproduce and allow reasonable time for us to resolve the issue before publishing your findings. If you wish to encrypt your email, you can find our GPG key [here](https://pretix.eu/.well-known/security@pretix.eu.asc).
We're not large enough to run a formal bug bounty program, but if you find a serious vulnerability in our service, we will find a way to show our gratitude.
## Version support
Security support is provided for the current stable release as well as the two previous stable releases.
Be sure to keep your pretix installation up to date.
New releases and security issues will be announced on our [blog](https://pretix.eu/about/en/blog/). If you
subscribe to our [newsletter](https://pretix.eu/about/en/blog/) in the "News about self-hosting pretix"
category, we will also send you an email on security issues.
Past security issues are listed [on our website](https://pretix.eu/about/en/security).

View File

@@ -2,6 +2,7 @@
file=/tmp/supervisor.sock
[supervisord]
environment = AUTOMIGRATE="skip"
logfile=/dev/stdout
logfile_maxbytes=0
loglevel=info

View File

@@ -157,7 +157,7 @@
<div class="rst-content">
{% include "breadcrumbs.html" %}
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div itemprop="articleBody" class="section">
{% block body %}{% endblock %}
</div>
<div class="articleComments">

View File

@@ -3155,14 +3155,14 @@ a .fa, a .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li a span.t
vertical-align: -15%
}
.wy-alert, .rst-content .note, .rst-content .attention, .rst-content .caution, .rst-content .danger, .rst-content .error, .rst-content .hint, .rst-content .important, .rst-content .tip, .rst-content .warning, .rst-content .seealso, .rst-content .admonition-todo {
.wy-alert, .rst-content .note, .rst-content .attention, .rst-content .caution, .rst-content .danger, .rst-content .error, .rst-content .hint, .rst-content .important, .rst-content .tip, .rst-content .warning, .rst-content .seealso, .rst-content .admonition-todo, .rst-content div.deprecated {
padding: 12px;
line-height: 24px;
margin-bottom: 24px;
background: #e7f2fa
}
.wy-alert-title, .rst-content .admonition-title {
.wy-alert-title, .rst-content .admonition-title, .rst-content .deprecated .versionmodified {
color: #fff;
font-weight: bold;
display: block;
@@ -6067,6 +6067,10 @@ url('../opensans_regular_macroman/OpenSans-Regular-webfont.svg#open_sansregular'
img.screenshot, a.screenshot img {
box-shadow: 0 4px 18px 0 rgba(0,0,0,0.1), 0 6px 20px 0 rgba(0,0,0,0.09);
}
section > a.screenshot {
display: block;
margin-bottom: 24px;
}
/* Changes */
.versionchanged {

View File

@@ -65,6 +65,9 @@ Example::
A comma-separated list of plugins that are not available even though they are installed.
Defaults to an empty string.
``plugins_show_meta``
Whether to show authors and versions of plugins, defaults to ``on``.
``auth_backends``
A comma-separated list of available auth backends. Defaults to ``pretix.base.auth.NativeAuthBackend``.
@@ -114,6 +117,9 @@ Example::
``loglevel``
Set console and file log level (``DEBUG``, ``INFO``, ``WARNING``, ``ERROR`` or ``CRITICAL``). Defaults to ``INFO``.
``request_id_header``
Specifies the name of a header that should be used for logging request IDs. Off by default.
Locale settings
---------------
@@ -220,12 +226,30 @@ Example::
``user``, ``password``
The SMTP user data to use for the connection. Empty by default.
``tls``, ``ssl``
Use STARTTLS or SSL for the SMTP connection. Off by default.
``from``
The email address to set as ``From`` header in outgoing emails by the system.
Default: ``pretix@localhost``
``tls``, ``ssl``
Use STARTTLS or SSL for the SMTP connection. Off by default.
``from_notifications``
The email address to set as ``From`` header in admin notification emails by the system.
Defaults to the value of ``from``.
``from_organizers``
The email address to set as ``From`` header in outgoing emails by the system sent on behalf of organizers.
Defaults to the value of ``from``.
``custom_sender_verification_required``
If this is on (the default), organizers need to verify email addresses they want to use as senders in their event.
``custom_sender_spf_string``
If this is set to a valid SPF string, pretix will show a warning if organizers use a sender address from a domain
that does not include this value.
``custom_smtp_allow_private_networks``
If this is off (the default), custom SMTP servers cannot be private network addresses.
``admins``
Comma-separated list of email addresses that should receive a report about every error code 500 thrown by pretix.
@@ -282,7 +306,7 @@ You can use an existing memcached server as pretix's caching backend::
``location``
The location of memcached, either a host:port combination or a socket file.
If no memcached is configured, pretix will use Django's built-in local-memory caching method.
If no memcached is configured, pretix will use redis for caching. If neither is configured, pretix will not use any caching.
.. note:: If you use memcached and you deploy pretix across multiple servers, you should use *one*
shared memcached instance, not multiple ones, because cache invalidations would not be
@@ -375,9 +399,9 @@ The two ``transport_options`` entries can be omitted in most cases.
If they are present they need to be a valid JSON dictionary.
For possible entries in that dictionary see the `Celery documentation`_.
To use redis with sentinels set the broker or backend to ``sentinel://sentinel_host_1:26379;sentinal_host_2:26379/0``
To use redis with sentinels set the broker or backend to ``sentinel://sentinel_host_1:26379;sentinel_host_2:26379/0``
and the respective transport_options to ``{"master_name":"mymaster"}``.
If your redis instances behind the sentinel have a password use ``sentinel://:my_password@sentinel_host_1:26379;sentinal_host_2:26379/0``.
If your redis instances behind the sentinel have a password use ``sentinel://:my_password@sentinel_host_1:26379;sentinel_host_2:26379/0``.
If your redis sentinels themselves have a password set the transport_options to ``{"master_name":"mymaster","sentinel_kwargs":{"password":"my_password"}}``.
Sentry
@@ -445,8 +469,10 @@ You can configure the maximum file size for uploading various files::
max_size_image = 12
; Max upload size for favicons in MiB, defaults to 1 MiB
max_size_favicon = 2
; Max upload size for email attachments in MiB, defaults to 10 MiB
; Max upload size for email attachments of manually sent emails in MiB, defaults to 10 MiB
max_size_email_attachment = 15
; Max upload size for email attachments of automatically sent emails in MiB, defaults to 1 MiB
max_size_email_auto_attachment = 2
; Max upload size for other files in MiB, defaults to 10 MiB
; This includes all file upload type order questions
max_size_other = 100

40
doc/admin/errors.rst Normal file
View File

@@ -0,0 +1,40 @@
.. _`admin-errors`:
Dealing with errors
===================
If you encounter an error in pretix, please follow the following steps to debug it:
* If the error message is shown on a **white page** and the last line of the error includes "nginx", the error is not with pretix
directly but with your nginx webserver. This might mean that pretix is not running, but it could also be something else.
Please first check your nginx error log. The default location is ``/var/log/nginx/error.log``.
* If it turns out pretix is not running, check the output of ``docker logs pretix`` for a docker installation and
``journalctl -u pretix-web.service`` for a manual installation.
* If the error message is an "**Internal Server Error**" in purple pretix design, please check pretix' log file which by default is at
``/var/pretix-data/logs/pretix.log`` if you installed with docker and ``/var/pretix/data/logs/pretix.log`` otherwise. If you don't
know how to interpret it, open a discussion on GitHub with the relevant parts of the log file.
* If the error message includes ``/usr/bin/env: node: No such file or directory``, you forgot to install ``node.js``
* If the error message includes ``OfflineGenerationError``, you might have forgot to run the ``rebuild`` step after a pretix update
or plugin installation.
* If the error message mentions your database server or redis server, make sure these are running and accessible.
* If pretix loads fine but certain actions (creating carts, orders, or exports, downloading tickets, sending emails) **take forever**,
``pretix-worker`` is not running. Check the output of ``docker logs pretix`` for a docker installation and
``journalctl -u pretix-worker.service`` for a manual installation.
* If the page loads but all **styles are missing**, you probably forgot to update your nginx configuration file after an upgrade of your
operating system's python version.
If you are unable to debug the issue any further, please open a **discussion** on GitHub in our `Q&A Forum`_. Do **not** open an issue
right away, since most things turn out not to be a bug in pretix but a mistake in your server configuration. Make sure to include
relevant log excerpts in your question.
If you're a pretix Enterprise customer, you can also reach out to support@pretix.eu with your issue right away.
.. _Q&A Forum: https://github.com/pretix/pretix/discussions/categories/q-a

View File

@@ -9,7 +9,9 @@ This documentation is for everyone who wants to install pretix on a server.
:maxdepth: 2
installation/index
updates
config
maintainance
scaling
errors
indexes

View File

@@ -50,7 +50,7 @@ Here is the currently recommended set of commands::
CREATE INDEX CONCURRENTLY pretix_addidx_orderpos_name
ON pretixbase_orderposition
USING gin (upper("attendee_name_cached") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_orderpos_scret
CREATE INDEX CONCURRENTLY pretix_addidx_orderpos_secret
ON pretixbase_orderposition
USING gin (upper("secret") gin_trgm_ops);
CREATE INDEX CONCURRENTLY pretix_addidx_orderpos_email

View File

@@ -36,9 +36,6 @@ Linux and firewalls, we recommend that you start with `ufw`_.
SSL certificates can be obtained for free these days. We also *do not* provide support for HTTP-only
installations except for evaluation purposes.
.. warning:: We recommend **PostgreSQL**. If you go for MySQL, make sure you run **MySQL 5.7 or newer** or
**MariaDB 10.2.7 or newer**.
.. warning:: By default, using `ufw` in conjunction will not have any effect. Please make sure to either bind the exposed
ports of your docker container explicitly to 127.0.0.1 or configure docker to respect any set up firewall
rules.
@@ -61,6 +58,9 @@ directory writable to the user that runs pretix inside the docker container::
Database
--------
.. warning:: **Please use PostgreSQL for all new installations**. If you need to go for MySQL, make sure you run
**MySQL 5.7 or newer** or **MariaDB 10.2.7 or newer**.
Next, we need a database and a database user. We can create these with any kind of database managing tool or directly on
our database's shell. Please make sure that UTF8 is used as encoding for the best compatibility. You can check this with
the following command::
@@ -91,6 +91,8 @@ When using MySQL, make sure you set the character set of the database to ``utf8m
mysql > CREATE DATABASE pretix DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
You will also need to make sure that ``sql_mode`` in your ``my.cnf`` file does **not** include ``ONLY_FULL_GROUP_BY``.
Redis
-----
@@ -106,6 +108,18 @@ Now restart redis-server::
# systemctl restart redis-server
In this setup, systemd will delete ``/var/run/redis`` on every redis restart, which will cause issues with pretix. To
prevent this, you can execute::
# systemctl edit redis-server
And insert the following::
[Service]
# Keep the directory around so that pretix.service in docker does not need to be
# restarted when redis is restarted.
RuntimeDirectoryPreserve=yes
.. warning:: Setting the socket permissions to 777 is a possible security problem. If you have untrusted users on your
system or have high security requirements, please don't do this and let redis listen to a TCP socket
instead. We recommend the socket approach because the TCP socket in combination with docker's networking
@@ -226,6 +240,9 @@ The following snippet is an example on how to configure a nginx proxy for pretix
listen 80 default_server;
listen [::]:80 ipv6only=on default_server;
server_name pretix.mydomain.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 default_server;
@@ -256,6 +273,8 @@ create an event and start selling tickets!
You should probably read :ref:`maintainance` next.
.. _`docker_updates`:
Updates
-------
@@ -271,6 +290,8 @@ Restarting the service can take a few seconds, especially if the update requires
Replace ``stable`` above with a specific version number like ``1.0`` or with ``latest`` for the development
version, if you want to.
Make sure to also read :ref:`update_notes` and the release notes of the version you are updating to.
.. _`docker_plugininstall`:
Install a plugin

View File

@@ -34,9 +34,6 @@ Linux and firewalls, we recommend that you start with `ufw`_.
SSL certificates can be obtained for free these days. We also *do not* provide support for HTTP-only
installations except for evaluation purposes.
.. warning:: We recommend **PostgreSQL**. If you go for MySQL, make sure you run **MySQL 5.7 or newer** or
**MariaDB 10.2.7 or newer**.
Unix user
---------
@@ -50,6 +47,9 @@ In this guide, all code lines prepended with a ``#`` symbol are commands that yo
Database
--------
.. warning:: **Please use PostgreSQL for all new installations**. If you need to go for MySQL, make sure you run
**MySQL 5.7 or newer** or **MariaDB 10.2.7 or newer**.
Having the database server installed, we still need a database and a database user. We can create these with any kind
of database managing tool or directly on our database's shell. Please make sure that UTF8 is used as encoding for the
best compatibility. You can check this with the following command::
@@ -65,6 +65,8 @@ When using MySQL, make sure you set the character set of the database to ``utf8m
mysql > CREATE DATABASE pretix DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
You will also need to make sure that ``sql_mode`` in your ``my.cnf`` file does **not** include ``ONLY_FULL_GROUP_BY``.
Package dependencies
--------------------
@@ -142,7 +144,7 @@ If you're running MySQL, also install the client library::
(venv)$ pip3 install mysqlclient
Note that you need Python 3.6 or newer. You can find out your Python version using ``python -V``.
Note that you need Python 3.7 or newer. You can find out your Python version using ``python -V``.
We also need to create a data directory::
@@ -223,6 +225,9 @@ The following snippet is an example on how to configure a nginx proxy for pretix
listen 80 default_server;
listen [::]:80 ipv6only=on default_server;
server_name pretix.mydomain.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 default_server;
@@ -259,14 +264,14 @@ The following snippet is an example on how to configure a nginx proxy for pretix
}
location /static/ {
alias /var/pretix/venv/lib/python3.7/site-packages/pretix/static.dist/;
alias /var/pretix/venv/lib/python3.10/site-packages/pretix/static.dist/;
access_log off;
expires 365d;
add_header Cache-Control "public";
}
}
.. note:: Remember to replace the ``python3.7`` in the ``/static/`` path in the config
.. note:: Remember to replace the ``python3.10`` in the ``/static/`` path in the config
above with your python version.
We recommend reading about setting `strong encryption settings`_ for your web server.
@@ -280,6 +285,8 @@ create an event and start selling tickets!
You should probably read :ref:`maintainance` next.
.. _`manual_updates`:
Updates
-------
@@ -294,6 +301,7 @@ To upgrade to a new pretix release, pull the latest code changes and run the fol
(venv)$ python -m pretix updatestyles
# systemctl restart pretix-web pretix-worker
Make sure to also read :ref:`update_notes` and the release notes of the version you are updating to.
.. _`manual_plugininstall`:
@@ -310,6 +318,27 @@ example::
(venv)$ python -m pretix rebuild
# systemctl restart pretix-web pretix-worker
System updates
--------------
After system updates, such as updates to a new Ubuntu or Debian release, you might be using a new Python version.
That's great, but requires some adjustments. First, adjust any old version paths in your nginx configuration file.
Then, re-create your Python environment::
$ source /var/pretix/venv/bin/activate
(venv)$ pip3 freeze > /tmp/pip-backup.txt
$ rm -rf /var/pretix/venv
$ python3 -m venv /var/pretix/venv
$ source /var/pretix/venv/bin/activate
(venv)$ pip3 install -U pip wheel setuptools
(venv)$ pip3 install -r /tmp/pip-backup.txt
Then, proceed like after any plugin installation::
(venv)$ python -m pretix migrate
(venv)$ python -m pretix rebuild
(venv)$ python -m pretix updatestyles
# systemctl restart pretix-web pretix-worker
.. _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

@@ -9,6 +9,8 @@ If you host your own pretix instance, you also need to care about the availabili
of your service and the safety of your data yourself. This page gives you some
information that you might need to do so properly.
.. _`backups`:
Backups
-------

51
doc/admin/updates.rst Normal file
View File

@@ -0,0 +1,51 @@
.. _`update_notes`:
Update notes
============
pretix receives regular feature and bugfix updates and we highly encourage you to always update to
the latest version for maximum quality and security. Updates are announces on our `blog`_. There are
usually 10 feature updates in a year, so you can expect a new release almost every month.
Pure bugfix releases are only issued in case of very critical bugs or security vulnerabilities. In these
case, we'll publish bugfix releases for the last three stable release branches.
Compatibility to plugins and in very rare cases API clients may break. For in-depth details on the
API changes of every version, please refer to the release notes published on our blog.
Upgrade steps
-------------
For the actual upgrade, you can usually just follow the steps from the installation guide for :ref:`manual installations <manual_updates>`
or :ref:`docker installations <docker_updates>` respectively.
Generally, it is always strongly recommended to perform a :ref:`backup <backups>` first.
It is possible to skip versions during updates, although we recommend not skipping over major version numbers
(i.e. if you want to go from 2.4 to 4.4, first upgrade to 3.0, then upgrade to 4.0, then to 4.4).
In addition to these standard update steps, the following list issues steps that should be taken when you upgrade
to specific versions for pretix. If you're skipping versions, please read the instructions for every version in
between as well.
Upgrade to 3.17.0 or newer
""""""""""""""""""""""""""
pretix 3.17 introduces a dependency on ``nodejs``, so you should install it on your system::
# apt install nodejs npm
Upgrade to 4.4.0 or newer
"""""""""""""""""""""""""
pretix 4.4 introduces a new data structure to store historical financial data. If you already have existing
data in your database, you will need to back-fill this data or you might get incorrect reports! This is not
done automatically as part of the usual update steps since it can take a while on large databases and you might
want to do it in parallel while the system is already running again. Please execute the following command::
(venv)$ python -m pretix create_order_transactions
Or, with a docker installation::
$ docker exec -it pretix.service pretix create_order_transactions
.. _blog: https://pretix.eu/about/en/blog/

View File

@@ -99,11 +99,43 @@ following endpoint:
"hardware_brand": "Samsung",
"hardware_model": "Galaxy S",
"software_brand": "pretixdroid",
"software_version": "4.1.0"
"software_version": "4.1.0",
"info": {"arbitrary": "data"}
}
You will receive a response equivalent to the response of your initialization request.
Device Information
------------------
You can request information about your device and the server with one call:
.. sourcecode:: http
GET /api/v1/device/info HTTP/1.1
Host: pretix.eu
The response will look like this:
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: application/json
{
"device": {
"organizer": "foo",
"device_id": 5,
"unique_serial": "HHZ9LW9JWP390VFZ",
"api_token": "1kcsh572fonm3hawalrncam4l1gktr2rzx25a22l8g9hx108o9oi0rztpcvwnfnd",
"name": "Bar",
"gate": {
"id": 3,
"name": "South entrance"
}
}
}
Creating a new API key
----------------------

View File

@@ -43,13 +43,16 @@ Possible permissions are:
* Can view vouchers
* Can change vouchers
.. _`rest-compat`:
Compatibility
-------------
We currently see pretix' API as a beta-stage feature. We therefore do not give any guarantees
for compatibility between feature releases of pretix (such as 1.5 and 1.6). However, as always,
we try not to break things when we don't need to. Any backwards-incompatible changes will be
prominently noted in the release notes.
We try to avoid any breaking changes to our API to avoid hassle on your end. If possible, we'll
build new features in a way that keeps all pre-existing API usage unchanged. In some cases,
this might not be possible or only possible with restrictions. In these case, any
backwards-incompatible changes will be prominently noted in the "Changes to the REST API"
section of our release notes. If possible, we will announce them multiple releases in advance.
We treat the following types of changes as *backwards-compatible* so we ask you to make sure
that your clients can deal with them properly:
@@ -58,6 +61,8 @@ that your clients can deal with them properly:
* Support of new HTTP methods for a given API endpoint
* Support of new query parameters for a given API endpoint
* New fields contained in API responses
* New possible values of enumeration-like fields
* Response body structure or message texts on failed requests (``4xx``, ``5xx`` response codes)
We treat the following types of changes as *backwards-incompatible*:

View File

@@ -97,7 +97,8 @@ For example, if you want users to be redirected to ``https://example.org/order/r
either enter ``https://example.org`` or ``https://example.org/order/``.
The user will be redirected back to your page instead of pretix' order confirmation page after the payment,
**regardless of whether it was successful or not**. Make sure you use our API to check if the payment actually
**regardless of whether it was successful or not**. We will append an ``error=…`` query parameter with an error
message, but you should not rely on that and instead make sure you use our API to check if the payment actually
worked! Your final URL could look like this::
https://test.pretix.eu/democon/3vjrh/order/NSLEZ/ujbrnsjzbq4dzhck/pay/123/?return_url=https%3A%2F%2Fexample.org%2Forder%2Freturn%3Ftx_id%3D1234

View File

@@ -17,8 +17,8 @@ The cart position resource contains the following public fields:
Field Type Description
===================================== ========================== =======================================================
id integer Internal ID of the cart position
cart_id string Identifier of the cart this belongs to. Needs to end
in "@api" for API-created positions.
cart_id string Identifier of the cart this belongs to, needs to end
in "@api" for API-created positions
datetime datetime Time of creation
expires datetime The cart position will expire at this time and no longer block quota
item integer ID of the item
@@ -29,22 +29,23 @@ attendee_name_parts object of strings Composition of
attendee_email string Specified attendee email address for this position (or ``null``)
voucher integer Internal ID of the voucher used for this position (or ``null``)
addon_to integer Internal ID of the position this position is an add-on for (or ``null``)
subevent integer ID of the date inside an event series this position belongs to (or ``null``).
is_bundled boolean If ``addon_to`` is set, this shows whether this is a bundled product or an addon product
subevent integer ID of the date inside an event series this position belongs to (or ``null``)
answers list of objects Answers to user-defined questions
├ question integer Internal ID of the answered question
├ answer string Text representation of the answer
├ 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
seat objects The assigned seat. Can be ``null``.
seat objects The assigned seat (or ``null``)
├ id integer Internal ID of the seat instance
├ name string Human-readable seat name
└ seat_guid string Identifier of the seat within the seating plan
===================================== ========================== =======================================================
.. versionchanged:: 3.0
.. versionchanged:: 4.14
This ``seat`` attribute has been added.
This ``is_bundled`` attribute has been added and the cart creation endpoints have been updated.
Cart position endpoints
@@ -87,6 +88,7 @@ Cart position endpoints
"attendee_email": null,
"voucher": null,
"addon_to": null,
"is_bundled": false,
"subevent": null,
"datetime": "2018-06-11T10:00:00Z",
"expires": "2018-06-11T10:00:00Z",
@@ -133,6 +135,7 @@ Cart position endpoints
"attendee_email": null,
"voucher": null,
"addon_to": null,
"is_bundled": false,
"subevent": null,
"datetime": "2018-06-11T10:00:00Z",
"expires": "2018-06-11T10:00:00Z",
@@ -168,16 +171,16 @@ Cart position endpoints
* does not validate if the event's ticket sales are already over or haven't started
* does not support add-on products at the moment
* does not validate constraints on add-on products at the moment
* does not check or calculate prices but believes any prices you send
* does not support the redemption of vouchers
* does not prevent you from buying items that can only be bought with a voucher
* does not support file upload questions
Note that more validation might be added in the future, so please do not rely on missing validation.
You can supply the following fields of the resource:
* ``cart_id`` (optional, needs to end in ``@api``)
@@ -189,8 +192,11 @@ Cart position endpoints
* ``attendee_email`` (optional)
* ``subevent`` (optional)
* ``expires`` (optional)
* ``includes_tax`` (optional)
* ``includes_tax`` (optional, **deprecated**, do not use, will be removed)
* ``sales_channel`` (optional)
* ``voucher`` (optional, expect a voucher code)
* ``addons`` (optional, expect a list of nested objects of cart positions)
* ``bundled`` (optional, expect a list of nested objects of cart positions)
* ``answers``
* ``question``
@@ -222,6 +228,12 @@ Cart position endpoints
"options": []
}
],
"addons": [
{
"item": 2,
"variation": null,
}
],
"subevent": null
}
@@ -233,7 +245,7 @@ Cart position endpoints
Vary: Accept
Content-Type: application/json
(Full cart position resource, see above.)
(Full cart position resource, see above, with additional nested objects "addons" and "bundled".)
:param organizer: The ``slug`` field of the organizer of the event to create a position for
:param event: The ``slug`` field of the event to create a position for
@@ -245,8 +257,8 @@ Cart position endpoints
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/cartpositions/bulk_create/
Creates multiple new cart position. This operation is deliberately not atomic, so each cart position can succeed
or fail individually, so the response code of the response is not the only thing to look at!
Creates multiple new cart position. **This operation is deliberately not atomic, so each cart position can succeed
or fail individually, so the response code of the response is not the only thing to look at!**
.. warning:: This endpoint is considered **experimental**. It might change at any time without prior notice.

View File

@@ -0,0 +1,346 @@
.. spelling:: checkin
.. _rest-checkin:
Check-in
========
This page describes special APIs built for ticket scanning apps. For managing check-in configuration or other operations,
please also see :ref:`rest-checkinlists`. The check-in list API also contains endpoints to obtain statistics or log
failed scans.
.. versionchanged:: 4.12
The endpoints listed on this page have been added.
.. _`rest-checkin-redeem`:
Checking a ticket in
--------------------
.. http:post:: /api/v1/organizers/(organizer)/checkinrpc/redeem/
Tries to redeem an order position, i.e. checks the attendee in (or out). This is the recommended endpoint to use
if you build any kind of scanning app that performs check-ins for scanned barcodes. It is safe to use with untrusted
inputs in the ``secret`` field.
This endpoint supports passing multiple check-in lists to perform a multi-event scan. However, each check-in list
passed needs to be from a distinct event.
:<json string secret: Scanned QR code corresponding to the ``secret`` attribute of a ticket.
:<json array lists: List of check-in list IDs to search on. No two check-in lists may be from the same event.
:<json string type: Send ``"exit"`` for an exit and ``"entry"`` (default) for an entry.
:<json datetime datetime: Specifies the datetime of the check-in. If not supplied, the current time will be used.
:<json boolean force: Specifies that the check-in should succeed regardless of revoked barcode, previous check-ins or required
questions that have not been filled. This is usually used to upload offline scans that already happened,
because there's no point in validating them since they happened whether they are valid or not. Defaults to ``false``.
:<json boolean questions_supported: When this parameter is set to ``true``, handling of questions is supported. If
you do not implement question handling in your user interface, you **must**
set this to ``false``. In that case, questions will just be ignored. Defaults
to ``true``.
:<json boolean ignore_unpaid: Specifies that the check-in should succeed even if the order is in pending state.
Defaults to ``false`` and only works when ``include_pending`` is set on the check-in
list.
:<json object answers: If questions are supported/required, you may/must supply a mapping of question IDs to their
respective answers. The answers should always be strings. In case of (multiple-)choice-type
answers, the string should contain the (comma-separated) IDs of the selected options.
:<json string nonce: You can set this parameter to a unique random value to identify this check-in. If you're sending
this request twice with the same nonce, the second request will also succeed but will always
create only one check-in object even when the previous request was successful as well. This
allows for a certain level of idempotency and enables you to re-try after a connection failure.
:>json string status: ``"ok"``, ``"incomplete"``, or ``"error"``
:>json string reason: Reason code, only set on status ``"error"``, see below for possible values.
:>json string reason_explanation: Human-readable explanation, only set on status ``"error"`` and reason ``"rules"``, can be null.
:>json object position: Copy of the matching order position (if any was found). The contents are the same as the
:ref:`order-position-resource`, with the following differences: (1) The ``checkins`` value
will only include check-ins for the selected list. (2) An additional boolean property
``require_attention`` will inform you whether either the order or the item have the
``checkin_attention`` flag set. (3) If ``attendee_name`` is empty, it may automatically fall
back to values from a parent product or from invoice addresses.
:>json boolean require_attention: Whether or not the ``require_attention`` flag is set on the item or order.
:>json object list: Excerpt of information about the matching :ref:`check-in list <rest-checkinlists>` (if any was found),
including the attributes ``id``, ``name``, ``event``, ``subevent``, and ``include_pending``.
:>json object questions: List of questions to be answered for check-in, only set on status ``"incomplete"``.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/checkinrpc/redeem/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
{
"secret": "M5BO19XmFwAjLd4nDYUAL9ISjhti0e9q",
"lists": [1],
"force": false,
"ignore_unpaid": false,
"nonce": "Pvrk50vUzQd0DhdpNRL4I4OcXsvg70uA",
"datetime": null,
"questions_supported": true,
"answers": {
"4": "XS"
}
}
**Example successful response**:
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
{
"status": "ok",
"position": {
},
"require_attention": false,
"list": {
"id": 1,
"name": "Default check-in list",
"event": "sampleconf",
"subevent": null,
"include_pending": false
}
}
**Example response with required questions**:
.. sourcecode:: http
HTTP/1.1 400 Bad Request
Content-Type: text/json
{
"status": "incomplete",
"position": {
},
"require_attention": false,
"list": {
"id": 1,
"name": "Default check-in list",
"event": "sampleconf",
"subevent": null,
"include_pending": false
},
"questions": [
{
"id": 1,
"question": {"en": "T-Shirt size"},
"type": "C",
"required": false,
"items": [1, 2],
"position": 1,
"identifier": "WY3TP9SL",
"ask_during_checkin": true,
"options": [
{
"id": 1,
"identifier": "LVETRWVU",
"position": 0,
"answer": {"en": "S"}
},
{
"id": 2,
"identifier": "DFEMJWMJ",
"position": 1,
"answer": {"en": "M"}
},
{
"id": 3,
"identifier": "W9AH7RDE",
"position": 2,
"answer": {"en": "L"}
}
]
}
]
}
**Example error response (invalid ticket)**:
.. sourcecode:: http
HTTP/1.1 404 Not Found
Content-Type: text/json
{
"detail": "Not found.",
"status": "error",
"reason": "invalid",
"reason_explanation": null,
"require_attention": false
}
**Example error response (known, but invalid ticket)**:
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: text/json
{
"status": "error",
"reason": "unpaid",
"reason_explanation": null,
"require_attention": false,
"list": {
"id": 1,
"name": "Default check-in list",
"event": "sampleconf",
"subevent": null,
"include_pending": false
},
"position": {
}
}
Possible error reasons:
* ``invalid`` - Ticket is not known.
* ``unpaid`` - Ticket is not paid for.
* ``canceled`` Ticket is canceled or expired.
* ``already_redeemed`` - Ticket already has been redeemed.
* ``product`` - Tickets with this product may not be scanned at this device.
* ``rules`` - Check-in prevented by a user-defined rule.
* ``ambiguous`` - Multiple tickets match scan, rejected.
* ``revoked`` - Ticket code has been revoked.
* ``error`` - Internal error.
In case of reason ``rules``, there might be an additional response field ``reason_explanation`` with a human-readable
description of the violated rules. However, that field can also be missing or be ``null``.
:param organizer: The ``slug`` field of the organizer to fetch
:statuscode 201: no error
:statuscode 400: Invalid or incomplete request, see above
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
:statuscode 404: The requested order position does not exist.
Performing a ticket search
--------------------------
.. http:get:: /api/v1/organizers/(organizer)/checkinrpc/search/
Returns a list of all order positions matching a given search request. The result is the same as
the :ref:`order-position-resource`, with the following differences:
* The ``checkins`` value will only include check-ins for the selected list.
* An additional boolean property ``require_attention`` will inform you whether either the order or the item
have the ``checkin_attention`` flag set.
* If ``attendee_name`` is empty, it will automatically fall back to values from a parent product or from invoice
addresses.
This endpoint supports passing multiple check-in lists to perform a multi-event search. However, each check-in list
passed needs to be from a distinct event.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/checkinrpc/search/?list=1&search=Peter 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": 23442,
"order": "ABC12",
"positionid": 1,
"item": 1345,
"variation": null,
"price": "23.00",
"attendee_name": "Peter",
"attendee_name_parts": {
"full_name": "Peter",
},
"attendee_email": null,
"voucher": null,
"tax_rate": "0.00",
"tax_rule": null,
"tax_value": "0.00",
"secret": "z3fsn8jyufm5kpk768q69gkbyr5f4h6w",
"addon_to": null,
"subevent": null,
"pseudonymization_id": "MQLJvANO3B",
"seat": null,
"checkins": [
{
"list": 1,
"type": "entry",
"gate": null,
"device": 2,
"datetime": "2017-12-25T12:45:23Z",
"auto_checked_in": true
}
],
"answers": [
{
"question": 12,
"answer": "Foo",
"options": []
}
],
"downloads": [
{
"output": "pdf",
"url": "https://pretix.eu/api/v1/organizers/bigevents/events/sampleconf/orderpositions/23442/download/pdf/"
}
]
}
]
}
:query string search: Fuzzy search matching the attendee name, order code, invoice address name as well as to the beginning of the secret.
:query integer list: The check-in list to search on, can be passed multiple times.
:query integer page: The page number in case of a multi-page result set, default is 1
:query string ignore_status: If set to ``true``, results will be returned regardless of the state of
the order they belong to and you will need to do your own filtering by order status.
:query string ordering: Manually set the ordering of results. Valid fields to be used are ``order__code``,
``order__datetime``, ``positionid``, ``attendee_name``, ``last_checked_in`` and ``order__email``. Default:
``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.
:query integer variation__in: Only return positions with one of the purchased item variation matching the given
comma-separated IDs.
:query string attendee_name: Only return positions with the given value in the attendee_name field. Also, add-on
products positions are shown if they refer to an attendee with the given name.
:query string secret: Only return positions with the given ticket secret.
:query string order__status: Only return positions with the given order status.
:query string order__status__in: Only return positions with one the given comma-separated order status.
:query boolean has_checkin: If set to ``true`` or ``false``, only return positions that have or have not been
checked in already.
:query integer subevent: Only return positions of the sub-event with the given ID
:query integer subevent__in: Only return positions of one of the sub-events with the given comma-separated IDs
:query integer addon_to: Only return positions that are add-ons to the position with the given ID.
:query integer addon_to__in: Only return positions that are add-ons to one of the positions with the given
comma-separated IDs.
:query string voucher: Only return positions with a specific voucher.
:query string voucher__code: Only return positions with a specific voucher code.
:param organizer: The ``slug`` field of the organizer to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer or check-in list does not exist **or** you have no permission to view this resource.
:statuscode 404: The requested check-in list does not exist.

View File

@@ -1,5 +1,7 @@
.. spelling:: checkin
.. _rest-checkinlists:
Check-in lists
==============
@@ -34,24 +36,12 @@ allow_multiple_entries boolean If ``true``, su
allow_entry_after_exit boolean If ``true``, subsequent scans of a ticket on this list are valid if the last scan of the ticket was an exit scan.
rules object Custom check-in logic. The contents of this field are currently not considered a stable API and modifications through the API are highly discouraged.
exit_all_at datetime Automatically check out (i.e. perform an exit scan) at this point in time. After this happened, this property will automatically be set exactly one day into the future. Note that this field is considered "internal configuration" and if you pull the list with ``If-Modified-Since``, the daily change in this field will not trigger a response.
addon_match boolean If ``true``, tickets on this list can be redeemed by scanning their parent ticket if this still leads to an unambiguous match.
===================================== ========================== =======================================================
.. versionchanged:: 3.9
.. versionchanged:: 4.12
The ``subevent`` attribute may now be ``null`` inside event series. The ``allow_multiple_entries``,
``allow_entry_after_exit``, and ``rules`` attributes have been added.
.. versionchanged:: 3.11
The ``subevent_match`` and ``exclude`` query parameters have been added.
.. versionchanged:: 3.12
The ``exit_all_at`` attribute has been added.
.. versionchanged:: 3.17
The ``ends_after`` and ``expand`` query parameters have been added.
The ``addon_match`` attribute has been added.
Endpoints
---------
@@ -94,6 +84,7 @@ Endpoints
"allow_entry_after_exit": true,
"exit_all_at": null,
"rules": {},
"addon_match": false,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -146,6 +137,7 @@ Endpoints
"allow_entry_after_exit": true,
"exit_all_at": null,
"rules": {},
"addon_match": false,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -245,6 +237,7 @@ Endpoints
"subevent": null,
"allow_multiple_entries": false,
"allow_entry_after_exit": true,
"addon_match": false,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -269,6 +262,7 @@ Endpoints
"subevent": null,
"allow_multiple_entries": false,
"allow_entry_after_exit": true,
"addon_match": false,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -323,6 +317,7 @@ Endpoints
"subevent": null,
"allow_multiple_entries": false,
"allow_entry_after_exit": true,
"addon_match": false,
"auto_checkin_sales_channels": [
"pretixpos"
]
@@ -415,6 +410,9 @@ Order position endpoints
* If ``attendee_name`` is empty, it will automatically fall back to values from a parent product or from invoice
addresses.
You can use this endpoint to implement a ticket search. We also provide a dedicated search input as part of our
:ref:`check-in API <rest-checkin>` that supports search across multiple events.
**Example request**:
.. sourcecode:: http
@@ -604,15 +602,23 @@ Order position endpoints
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
:statuscode 404: The requested order position or check-in list does not exist.
.. _`rest-checkin-redeem`:
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/checkinlists/(list)/positions/(id)/redeem/
Tries to redeem an order position, identified by its internal ID, i.e. checks the attendee in. This endpoint
accepts a number of optional requests in the body.
**Tip:** Instead of an ID, you can also use the ``secret`` field as the lookup parameter.
**Tip:** Instead of an ID, you can also use the ``secret`` field as the lookup parameter. In this case, you should
always set ``untrusted_input=true`` as a query parameter to avoid security issues.
.. note::
We no longer recommend using this API if you're building a ticket scanning application, as it has a few design
flaws that can lead to `security issues`_ or compatibility issues due to barcode content characters that are not
URL-safe. We recommend to use our new :ref:`check-in API <rest-checkin>` instead.
:query boolean untrusted_input: If set to true, the lookup parameter is **always** interpreted as a ``secret``, never
as an ``id``. This should be always set if you are passing through untrusted, scanned
data to avoid guessing of ticket IDs.
:<json boolean questions_supported: When this parameter is set to ``true``, handling of questions is supported. If
you do not implement question handling in your user interface, you **must**
set this to ``false``. In that case, questions will just be ignored. Defaults
@@ -733,12 +739,15 @@ Order position endpoints
Possible error reasons:
* ``unpaid`` - Ticket is not paid for
* ``canceled`` Ticket is canceled or expired. This reason is only sent when your request sets
* ``invalid`` - Ticket code not known.
* ``unpaid`` - Ticket is not paid for.
* ``canceled`` Ticket is canceled or expired. This reason is only sent when your request sets.
``canceled_supported`` to ``true``, otherwise these orders return ``unpaid``.
* ``already_redeemed`` - Ticket already has been redeemed
* ``product`` - Tickets with this product may not be scanned at this device
* ``rules`` - Check-in prevented by a user-defined rule
* ``already_redeemed`` - Ticket already has been redeemed.
* ``product`` - Tickets with this product may not be scanned at this device.
* ``rules`` - Check-in prevented by a user-defined rule.
* ``ambiguous`` - Multiple tickets match scan, rejected.
* ``revoked`` - Ticket code has been revoked.
In case of reason ``rules``, there might be an additional response field ``reason_explanation`` with a human-readable
description of the violated rules. However, that field can also be missing or be ``null``.
@@ -752,3 +761,6 @@ Order position endpoints
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
:statuscode 404: The requested order position or check-in list does not exist.
.. _security issues: https://pretix.eu/about/de/blog/20220705-release-4111/

View File

@@ -14,6 +14,10 @@ The customer resource contains the following public fields:
Field Type Description
===================================== ========================== =======================================================
identifier string Internal ID of the customer
external_identifier string External ID of the customer (or ``null``). This field can
be changed for customers created manually or through
the API, but is read-only for customers created through a
SSO integration.
email string Customer email address
name string Name of this customer (or ``null``)
name_parts object of strings Decomposition of name (i.e. given name, family name)
@@ -24,10 +28,17 @@ last_login datetime Date and time o
date_joined datetime Date and time of registration
locale string Preferred language of the customer
last_modified datetime Date and time of modification of the record
notes string Internal notes and comments (or ``null``)
password string Can only be set during creation of a new customer, will
not be included in any responses.
===================================== ========================== =======================================================
.. versionadded:: 4.0
.. versionchanged:: 4.3
Passwords can now be set through the API during customer creation.
Endpoints
---------
@@ -58,6 +69,7 @@ Endpoints
"results": [
{
"identifier": "8WSAJCJ",
"external_identifier": null,
"email": "customer@example.org",
"name": "John Doe",
"name_parts": {
@@ -69,7 +81,8 @@ Endpoints
"last_login": null,
"date_joined": "2021-04-06T13:44:22.809216Z",
"locale": "de",
"last_modified": "2021-04-06T13:44:22.809377Z"
"last_modified": "2021-04-06T13:44:22.809377Z",
"notes": null
}
]
}
@@ -103,6 +116,7 @@ Endpoints
{
"identifier": "8WSAJCJ",
"external_identifier": null,
"email": "customer@example.org",
"name": "John Doe",
"name_parts": {
@@ -114,7 +128,8 @@ Endpoints
"last_login": null,
"date_joined": "2021-04-06T13:44:22.809216Z",
"locale": "de",
"last_modified": "2021-04-06T13:44:22.809377Z"
"last_modified": "2021-04-06T13:44:22.809377Z",
"notes": null
}
:param organizer: The ``slug`` field of the organizer to fetch
@@ -125,7 +140,9 @@ Endpoints
.. http:post:: /api/v1/organizers/(organizer)/customers/
Creates a new customer
Creates a new customer. In addition to the fields defined on the resource, you can pass the field ``send_email``
to control whether the system should send an account activation email with a password reset link (defaults to
``false``).
**Example request**:
@@ -137,7 +154,9 @@ Endpoints
Content-Type: application/json
{
"email": "test@example.org"
"email": "test@example.org",
"password": "verysecret",
"send_email": true
}
**Example response**:
@@ -150,6 +169,7 @@ Endpoints
{
"identifier": "8WSAJCJ",
"external_identifier": null,
"email": "test@example.org",
...
}
@@ -166,8 +186,8 @@ Endpoints
the resource, other fields will be reset to default. With ``PATCH``, you only need to provide the fields that you
want to change.
You can change all fields of the resource except the ``identifier``, ``last_login``, ``date_joined``, ``name``,
and ``last_modified`` fields.
You can change all fields of the resource except the ``identifier``, ``last_login``, ``date_joined``,
``name`` (which is auto-generated from ``name_parts``), and ``last_modified`` fields.
**Example request**:
@@ -193,6 +213,7 @@ Endpoints
{
"identifier": "8WSAJCJ",
"external_identifier": null,
"email": "test@example.org",
}
@@ -226,6 +247,7 @@ Endpoints
{
"identifier": "8WSAJCJ",
"external_identifier": null,
"email": null,
}

View File

@@ -0,0 +1,306 @@
.. _`rest-discounts`:
Discounts
=========
Resource description
--------------------
Discounts provide a way to automatically reduce the price of a cart if it matches a given set of conditions.
Discounts are available to everyone. If you want to give a discount just to specific persons, look at
:ref:`vouchers <rest-vouchers>` instead. If you are interested in the behind-the-scenes details of how
discounts are calculated for a specific order, have a look at :ref:`our algorithm documentation <algorithms-pricing>`.
.. rst-class:: rest-resource-table
======================================== ========================== =======================================================
Field Type Description
======================================== ========================== =======================================================
id integer Internal ID of the discount rule
active boolean The discount will be ignored if this is ``false``
internal_name string A name for the rule used in the backend
position integer An integer, used for sorting the rules which are applied in order
sales_channels list of strings Sales channels this discount is available on, such as
``"web"`` or ``"resellers"``. Defaults to ``["web"]``.
available_from datetime The first date time at which this discount can be applied
(or ``null``).
available_until datetime The last date time at which this discount can be applied
(or ``null``).
subevent_mode strings Determines how the discount is handled when used in an
event series. Can be ``"mixed"`` (no special effect),
``"same"`` (discount is only applied for groups within
the same date), or ``"distinct"`` (discount is only applied
for groups with no two same dates).
condition_all_products boolean If ``true``, the discount applies to all items.
condition_limit_products list of integers If ``condition_all_products`` is not set, this is a list
of internal item IDs that the discount applies to.
condition_apply_to_addons boolean If ``true``, the discount applies to add-on products as well,
otherwise it only applies to top-level items. The discount never
applies to bundled products.
condition_ignore_voucher_discounted boolean If ``true``, the discount does not apply to products which have
been discounted by a voucher.
condition_min_count integer The minimum number of matching products for the discount
to be activated.
condition_min_value money (string) The minimum value of matching products for the discount
to be activated. Cannot be combined with ``condition_min_count``,
or with ``subevent_mode`` set to ``distinct``.
benefit_discount_matching_percent decimal (string) The percentage of price reduction for matching products.
benefit_only_apply_to_cheapest_n_matches integer If set higher than 0, the discount will only be applied to
the cheapest matches. Useful for a "3 for 2"-style discount.
Cannot be combined with ``condition_min_value``.
======================================== ========================== =======================================================
Endpoints
---------
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/discounts/
Returns a list of all discounts within a given event.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/discounts/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"active": true,
"internal_name": "3 for 2",
"position": 1,
"sales_channels": ["web"],
"available_from": null,
"available_until": null,
"subevent_mode": "mixed",
"condition_all_products": true,
"condition_limit_products": [],
"condition_apply_to_addons": true,
"condition_ignore_voucher_discounted": false,
"condition_min_count": 3,
"condition_min_value": "0.00",
"benefit_discount_matching_percent": "100.00",
"benefit_only_apply_to_cheapest_n_matches": 1
}
]
}
:query integer page: The page number in case of a multi-page result set, default is 1
:query boolean active: If set to ``true`` or ``false``, only discounts with this value for the field ``active`` will be
returned.
:query string ordering: Manually set the ordering of results. Valid fields to be used are ``id`` and ``position``.
Default: ``position``
: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)/events/(event)/discounts/(id)/
Returns information on one discount, identified by its ID.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/discounts/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"id": 1,
"active": true,
"internal_name": "3 for 2",
"position": 1,
"sales_channels": ["web"],
"available_from": null,
"available_until": null,
"subevent_mode": "mixed",
"condition_all_products": true,
"condition_limit_products": [],
"condition_apply_to_addons": true,
"condition_ignore_voucher_discounted": false,
"condition_min_count": 3,
"condition_min_value": "0.00",
"benefit_discount_matching_percent": "100.00",
"benefit_only_apply_to_cheapest_n_matches": 1
}
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
:param id: The ``id`` field of the discount 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:post:: /api/v1/organizers/(organizer)/events/(event)/discounts/
Creates a new discount
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/discounts/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"active": true,
"internal_name": "3 for 2",
"position": 1,
"sales_channels": ["web"],
"available_from": null,
"available_until": null,
"subevent_mode": "mixed",
"condition_all_products": true,
"condition_limit_products": [],
"condition_apply_to_addons": true,
"condition_ignore_voucher_discounted": false,
"condition_min_count": 3,
"condition_min_value": "0.00",
"benefit_discount_matching_percent": "100.00",
"benefit_only_apply_to_cheapest_n_matches": 1
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
{
"id": 1,
"active": true,
"internal_name": "3 for 2",
"position": 1,
"sales_channels": ["web"],
"available_from": null,
"available_until": null,
"subevent_mode": "mixed",
"condition_all_products": true,
"condition_limit_products": [],
"condition_apply_to_addons": true,
"condition_ignore_voucher_discounted": false,
"condition_min_count": 3,
"condition_min_value": "0.00",
"benefit_discount_matching_percent": "100.00",
"benefit_only_apply_to_cheapest_n_matches": 1
}
:param organizer: The ``slug`` field of the organizer of the event to create a discount for
:param event: The ``slug`` field of the event to create a discount for
:statuscode 201: no error
:statuscode 400: The discount could not be created due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to create this resource.
.. http:patch:: /api/v1/organizers/(organizer)/events/(event)/discounts/(id)/
Update a discount. You can also use ``PUT`` instead of ``PATCH``. With ``PUT``, you have to provide all fields of
the resource, other fields will be reset to default. With ``PATCH``, you only need to provide the fields that you
want to change.
You can change all fields of the resource except the ``id`` field.
**Example request**:
.. sourcecode:: http
PATCH /api/v1/organizers/bigevents/events/sampleconf/discounts/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 94
{
"active": false
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"id": 1,
"active": false,
"internal_name": "3 for 2",
"position": 1,
"sales_channels": ["web"],
"available_from": null,
"available_until": null,
"subevent_mode": "mixed",
"condition_all_products": true,
"condition_limit_products": [],
"condition_apply_to_addons": true,
"condition_ignore_voucher_discounted": false,
"condition_min_count": 3,
"condition_min_value": "0.00",
"benefit_discount_matching_percent": "100.00",
"benefit_only_apply_to_cheapest_n_matches": 1
}
:param organizer: The ``slug`` field of the organizer to modify
:param event: The ``slug`` field of the event to modify
:param id: The ``id`` field of the discount to modify
:statuscode 200: no error
:statuscode 400: The discount could not be modified due to invalid submitted data
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to change this resource.
.. http:delete:: /api/v1/organizers/(organizer)/events/(event)/discount/(id)/
Delete a discount.
**Example request**:
.. sourcecode:: http
DELETE /api/v1/organizers/bigevents/events/sampleconf/discount/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 204 No Content
Vary: Accept
:param organizer: The ``slug`` field of the organizer to modify
:param event: The ``slug`` field of the event to modify
:param id: The ``id`` field of the discount to delete
:statuscode 204: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to delete this resource.

View File

@@ -52,34 +52,9 @@ sales_channels list A list of sales
===================================== ========================== =======================================================
.. versionchanged:: 3.3
The attributes ``geo_lat`` and ``geo_lon`` have been added.
.. versionchanged:: 3.4
The attribute ``timezone`` has been added.
.. versionchanged:: 3.7
The attribute ``item_meta_properties`` has been added.
.. versionchanged:: 3.12
The attribute ``valid_keys`` has been added.
.. versionchanged:: 3.14
The attribute ``sales_channels`` has been added.
Endpoints
---------
.. versionchanged:: 3.3
The events resource can now be filtered by meta data attributes.
.. versionchanged:: 4.0
The ``clone_from`` parameter has been added to the event creation endpoint.
@@ -567,10 +542,6 @@ information about the properties.
.. warning:: This API is intended for advanced users. Even though we take care to validate your input, you will be
able to break your event using this API by creating situations of conflicting settings. Please take care.
.. versionchanged:: 3.6
Initial support for settings has been added to the API.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/settings/
Get current values of event settings.

View File

@@ -6,10 +6,6 @@ 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
@@ -182,7 +178,7 @@ endpoints:
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/"
"download": "https://pretix.eu/api/v1/organizers/bigevents/events/sampleconf/exporters/orderlist/download/29891ede-196f-4942-9e26-d055a36e98b8/3f279f13-c198-4137-b49b-9b360ce9fcce/"
}
:param organizer: The ``slug`` field of the organizer to fetch

View File

@@ -40,10 +40,6 @@ text string Custom text of
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.
@@ -257,10 +253,6 @@ Endpoints
"value": "15.37"
}
.. versionchanged:: 3.5
This endpoint now returns status code ``409`` if the transaction would lead to a negative gift card value.
:param organizer: The ``slug`` field of the organizer to modify
:param id: The ``id`` field of the gift card to modify
:query boolean include_accepted: Also show gift cards issued by other organizers that are accepted by this organizer.

View File

@@ -1,6 +1,11 @@
Resources and endpoints
=======================
With a few exceptions, this only lists resources bundled in the pretix core modules.
Additional endpoints are provided by pretix plugins. Some of them are documented
at :ref:`plugin-docs`.
.. toctree::
:maxdepth: 2
@@ -19,6 +24,8 @@ Resources and endpoints
orders
invoices
vouchers
discounts
checkin
checkinlists
waitinglist
customers
@@ -31,5 +38,7 @@ Resources and endpoints
webhooks
seatingplans
exporters
shredders
sendmail_rules
billing_invoices
billing_var
billing_var

View File

@@ -58,6 +58,12 @@ lines list of objects The actual invo
created before this field was introduced as well as for
all lines not created by a product (e.g. a shipping or
cancellation fee).
├ subevent integer Event series date ID used to create this line. Note that everything
about the subevent 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) as well as for all events that are not a series.
├ fee_type string Fee type, e.g. ``shipping``, ``service``, ``payment``,
``cancellation``, ``giftcard``, or ``other. Can be ``null`` for
all invoice lines
@@ -78,6 +84,12 @@ lines list of objects The actual invo
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.
├ event_location string Location 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 location 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
@@ -96,20 +108,18 @@ internal_reference string Customer's refe
===================================== ========================== =======================================================
.. versionchanged:: 3.4
The attribute ``lines.number`` has been added.
.. versionchanged:: 3.17
The attribute ``invoice_to_*``, ``invoice_from_*``, ``custom_field``, ``lines.item``, ``lines.variation``, ``lines.event_date_from``,
``lines.event_date_to``, and ``lines.attendee_name`` have been added.
``refers`` now returns an invoice number including the prefix.
.. versionchanged:: 4.1
The attributes ``fee_type`` and ``fee_internal_type`` have been added.
.. versionchanged:: 4.1
The attribute ``lines.event_location`` has been added.
.. versionchanged:: 4.6
The attribute ``lines.subevent`` has been added.
Endpoints
---------
@@ -175,10 +185,12 @@ Endpoints
"description": "Budget Ticket",
"item": 1234,
"variation": 245,
"subevent": null,
"fee_type": null,
"fee_internal_type": null,
"event_date_from": "2017-12-27T10:00:00Z",
"event_date_to": null,
"event_location": "Heidelberg",
"attendee_name": null,
"gross_value": "23.00",
"tax_value": "0.00",
@@ -263,10 +275,12 @@ Endpoints
"description": "Budget Ticket",
"item": 1234,
"variation": 245,
"subevent": null,
"fee_type": null,
"fee_internal_type": null,
"event_date_from": "2017-12-27T10:00:00Z",
"event_date_to": null,
"event_location": "Heidelberg",
"attendee_name": null,
"gross_value": "23.00",
"tax_value": "0.00",

View File

@@ -24,7 +24,12 @@ active boolean If ``false``, t
description multi-lingual string A public description of the variation. May contain
Markdown syntax or can be ``null``.
position integer An integer, used for sorting
require_approval boolean If ``true``, orders with this variation will need to be
approved by the event organizer before they can be
paid.
require_membership boolean If ``true``, booking this variation requires an active membership.
require_membership_hidden boolean If ``true`` and ``require_membership`` is set, this variation will
be hidden from users without a valid membership.
require_membership_types list of integers Internal IDs of membership types valid if ``require_membership`` is ``true``
sales_channels list of strings Sales channels this variation is available on, such as
``"web"`` or ``"resellers"``. Defaults to all existing sales channels.
@@ -38,8 +43,13 @@ available_until datetime The last date t
hide_without_voucher boolean If ``true``, this variation is only shown during the voucher
redemption process, but not in the normal shop
frontend.
meta_data object Values set for event-specific meta data parameters.
===================================== ========================== =======================================================
.. versionchanged:: 4.16
The ``meta_data`` attribute has been added.
Endpoints
---------
@@ -74,7 +84,9 @@ Endpoints
"en": "S"
},
"active": true,
"require_approval": false,
"require_membership": false,
"require_membership_hidden": false,
"require_membership_types": [],
"sales_channels": ["web"],
"available_from": null,
@@ -87,6 +99,7 @@ Endpoints
"default_price": "223.00",
"price": 223.0,
"original_price": null,
"meta_data": {}
},
{
"id": 3,
@@ -94,12 +107,15 @@ Endpoints
"en": "L"
},
"active": true,
"require_approval": false,
"require_membership": false,
"require_membership_hidden": false,
"require_membership_types": [],
"description": {},
"position": 1,
"default_price": null,
"price": 15.0
"price": 15.0,
"meta_data": {}
}
]
}
@@ -143,14 +159,17 @@ Endpoints
"price": "10.00",
"original_price": null,
"active": true,
"require_approval": false,
"require_membership": false,
"require_membership_hidden": false,
"require_membership_types": [],
"sales_channels": ["web"],
"available_from": null,
"available_until": null,
"hide_without_voucher": false,
"description": null,
"position": 0
"position": 0,
"meta_data": {}
}
:param organizer: The ``slug`` field of the organizer to fetch
@@ -178,14 +197,17 @@ Endpoints
"value": {"en": "Student"},
"default_price": "10.00",
"active": true,
"require_approval": false,
"require_membership": false,
"require_membership_hidden": false,
"require_membership_types": [],
"sales_channels": ["web"],
"available_from": null,
"available_until": null,
"hide_without_voucher": false,
"description": null,
"position": 0
"position": 0,
"meta_data": {}
}
**Example response**:
@@ -203,14 +225,17 @@ Endpoints
"price": "10.00",
"original_price": null,
"active": true,
"require_approval": false,
"require_membership": false,
"require_membership_hidden": false,
"require_membership_types": [],
"sales_channels": ["web"],
"available_from": null,
"available_until": null,
"hide_without_voucher": false,
"description": null,
"position": 0
"position": 0,
"meta_data": {}
}
:param organizer: The ``slug`` field of the organizer of the event/item to create a variation for
@@ -259,14 +284,17 @@ Endpoints
"price": "10.00",
"original_price": null,
"active": false,
"require_approval": false,
"require_membership": false,
"require_membership_hidden": false,
"require_membership_types": [],
"sales_channels": ["web"],
"available_from": null,
"available_until": null,
"hide_without_voucher": false,
"description": null,
"position": 1
"position": 1,
"meta_data": {}
}
:param organizer: The ``slug`` field of the organizer to modify

View File

@@ -70,6 +70,8 @@ require_approval boolean If ``true``, or
paid.
require_bundling boolean If ``true``, this item is only available as part of bundles.
require_membership boolean If ``true``, booking this item requires an active membership.
require_membership_hidden boolean If ``true`` and ``require_membership`` is set, this product will
be hidden from users without a valid membership.
require_membership_types list of integers Internal IDs of membership types valid if ``require_membership`` is ``true``
grant_membership_type integer If set to the internal ID of a membership type, purchasing this item will
create a membership of the given type.
@@ -105,6 +107,8 @@ variations list of objects A list with one
├ active boolean If ``false``, this variation will not be sold or shown.
├ description multi-lingual string A public description of the variation. May contain
├ require_membership boolean If ``true``, booking this variation requires an active membership.
├ require_membership_hidden boolean If ``true`` and ``require_membership`` is set, this variation will
be hidden from users without a valid membership.
├ require_membership_types list of integers Internal IDs of membership types valid if ``require_membership`` is ``true``
Markdown syntax or can be ``null``.
├ sales_channels list of strings Sales channels this variation is available on, such as
@@ -119,6 +123,7 @@ variations list of objects A list with one
├ hide_without_voucher boolean If ``true``, this variation is only shown during the voucher
redemption process, but not in the normal shop
frontend.
├ meta_data object Values set for event-specific meta data parameters.
└ position integer An integer, used for sorting
addons list of objects Definition of add-ons that can be chosen for this item.
Only writable during creation,
@@ -142,19 +147,19 @@ bundles list of objects Definition of b
meta_data object Values set for event-specific meta data parameters.
===================================== ========================== =======================================================
.. versionchanged:: 3.7
The attribute ``meta_data`` has been added.
.. versionchanged:: 3.10
The attribute ``multi_allowed`` has been added to ``addons``.
.. versionchanged:: 4.0
The attributes ``require_membership``, ``require_membership_types``, ``grant_membership_type``, ``grant_membership_duration_like_event``,
``grant_membership_duration_days`` and ``grant_membership_duration_months`` have been added.
.. versionchanged:: 4.4
The attributes ``require_membership_hidden`` attribute has been added.
.. versionchanged:: 4.16
The ``variations[x].meta_data`` attribute has been added.
Notes
-----
@@ -247,6 +252,7 @@ Endpoints
"available_until": null,
"hide_without_voucher": false,
"description": null,
"meta_data": {},
"position": 0
},
{
@@ -262,6 +268,7 @@ Endpoints
"available_until": null,
"hide_without_voucher": false,
"description": null,
"meta_data": {},
"position": 1
}
],
@@ -361,6 +368,7 @@ Endpoints
"available_from": null,
"available_until": null,
"hide_without_voucher": false,
"meta_data": {},
"position": 0
},
{
@@ -376,6 +384,7 @@ Endpoints
"available_until": null,
"hide_without_voucher": false,
"description": null,
"meta_data": {},
"position": 1
}
],
@@ -455,6 +464,7 @@ Endpoints
"available_until": null,
"hide_without_voucher": false,
"description": null,
"meta_data": {},
"position": 0
},
{
@@ -470,6 +480,7 @@ Endpoints
"available_until": null,
"hide_without_voucher": false,
"description": null,
"meta_data": {},
"position": 1
}
],
@@ -538,6 +549,7 @@ Endpoints
"available_until": null,
"hide_without_voucher": false,
"description": null,
"meta_data": {},
"position": 0
},
{
@@ -553,6 +565,7 @@ Endpoints
"available_until": null,
"hide_without_voucher": false,
"description": null,
"meta_data": {},
"position": 1
}
],
@@ -652,6 +665,7 @@ Endpoints
"available_until": null,
"hide_without_voucher": false,
"description": null,
"meta_data": {},
"position": 0
},
{
@@ -667,6 +681,7 @@ Endpoints
"available_until": null,
"hide_without_voucher": false,
"description": null,
"meta_data": {},
"position": 1
}
],

View File

@@ -60,6 +60,7 @@ invoice_address object Invoice address
├ state string Customer state (ISO 3166-2 code). Only supported in
AU, BR, CA, CN, MY, MX, and US.
├ internal_reference string Customer's internal reference to be printed on the invoice
├ custom_field string Custom invoice address field
├ vat_id string Customer VAT ID
└ vat_id_validated string ``true``, if the VAT ID has been validated against the
EU VAT service and validation was successful. This only
@@ -68,6 +69,7 @@ positions list of objects List of order p
non-canceled positions are included.
fees list of objects List of fees included in the order total. By default, only
non-canceled fees are included.
├ id integer Internal ID of the fee record
├ fee_type string Type of fee (currently ``payment``, ``passbook``,
``other``)
├ value money (string) Fee amount
@@ -96,30 +98,6 @@ last_modified datetime Last modificati
===================================== ========================== =======================================================
.. versionchanged:: 3.5
The ``order.fees.canceled`` attribute has been added.
.. versionchanged:: 3.8
The ``reactivate`` operation has been added.
.. versionchanged:: 3.10
The ``search`` query parameter has been added.
.. versionchanged:: 3.11
The ``exclude`` and ``subevent_after`` query parameter has been added.
.. versionchanged:: 3.13
The ``subevent_before`` query parameter has been added.
.. versionchanged:: 3.14
The ``phone`` attribute has been added.
.. versionchanged:: 4.0
The ``customer`` attribute has been added.
@@ -132,6 +110,18 @@ last_modified datetime Last modificati
The ``item`` and ``variation`` query parameters have been added.
.. versionchanged:: 4.6
The ``subevent`` query parameters has been added.
.. versionchanged:: 4.8
The ``order.fees.id`` attribute has been added.
.. versionchanged:: 4.15
The ``include`` query parameter has been added.
.. _order-position-resource:
@@ -168,6 +158,7 @@ tax_rule integer The ID of the u
secret string Secret code printed on the tickets for validation
addon_to integer Internal ID of the position this position is an add-on for (or ``null``)
subevent integer ID of the date inside an event series this position belongs to (or ``null``).
discount integer ID of a discount that has been used during the creation of this position in some way (or ``null``).
pseudonymization_id string A random ID, e.g. for use in lead scanning apps
checkins list of objects List of **successful** check-ins with this ticket
├ id integer Internal ID of the check-in event
@@ -195,27 +186,6 @@ pdf_data object Data object req
``pdf_data=true`` query parameter to your request.
===================================== ========================== =======================================================
.. versionchanged:: 3.3
The ``url`` of a ticket ``download`` can now also return a ``text/uri-list`` instead of a file. See
:ref:`order-position-ticket-download` for details.
.. versionchanged:: 3.5
The attribute ``canceled`` has been added.
.. versionchanged:: 3.8
The attributes ``company``, ``street``, ``zipcode``, ``city``, ``country``, and ``state`` have been added.
.. versionchanged:: 3.9
The ``checkin.type`` attribute has been added.
.. versionchanged:: 3.16
Answers to file questions are now returned as an URL.
.. _order-payment-resource:
Order payment resource
@@ -262,15 +232,20 @@ created datetime Date and time o
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
details object Refund-specific information. This is a dictionary
with various fields that can be different between
payment providers, versions, payment states, etc. If
you read this field, you always need to be able to
deal with situations where values that you expect are
missing. Mostly, the field contains various IDs that
can be used for matching with other systems. If a
payment provider does not implement this feature,
the object is empty.
===================================== ========================== =======================================================
List of all orders
------------------
.. versionchanged:: 3.5
The ``include_canceled_positions`` and ``include_canceled_fees`` query parameters have been added.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/
Returns a list of all orders within a given event.
@@ -361,6 +336,7 @@ List of all orders
"secret": "z3fsn8jyufm5kpk768q69gkbyr5f4h6w",
"addon_to": null,
"subevent": null,
"discount": null,
"pseudonymization_id": "MQLJvANO3B",
"seat": null,
"checkins": [
@@ -418,7 +394,7 @@ List of all orders
``last_modified``, and ``status``. Default: ``datetime``
:query string code: Only return orders that match the given order code
:query string status: Only return orders in the given order status (see above)
:query string search: Only return orders matching a given search query
:query string search: Only return orders matching a given search query (matching for names, email addresses, and company names)
:query integer item: Only return orders with a position that contains this item ID. *Warning:* Result will also include orders if they contain mixed items, and it will even return orders where the item is only contained in a canceled position.
:query integer variation: Only return orders with a position that contains this variation ID. *Warning:* Result will also include orders if they contain mixed items and variations, and it will even return orders where the variation is only contained in a canceled position.
:query boolean testmode: Only return orders with ``testmode`` set to ``true`` or ``false``
@@ -433,9 +409,11 @@ 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 integer subevent: Only return orders with a position that contains this subevent ID. *Warning:* Result will also include orders if they contain mixed subevents, and it will even return orders where the subevent is only contained in a canceled position.
: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.
:query string include: Include only the given field in the output, e.g. ``fees`` or ``positions.downloads``. Can be used as a performance optimization. Can be passed multiple times. ``include`` is applied before ``exclude``, so ``exclude`` takes precedence.
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
:resheader X-Page-Generated: The server time at the beginning of the operation. If you're using this API to fetch
@@ -447,10 +425,6 @@ List of all orders
Fetching individual orders
--------------------------
.. versionchanged:: 3.5
The ``include_canceled_positions`` and ``include_canceled_fees`` query parameters have been added.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/
Returns information on one order, identified by its order code.
@@ -535,6 +509,7 @@ Fetching individual orders
"secret": "z3fsn8jyufm5kpk768q69gkbyr5f4h6w",
"addon_to": null,
"subevent": null,
"discount": null,
"pseudonymization_id": "MQLJvANO3B",
"seat": null,
"checkins": [
@@ -599,13 +574,17 @@ Fetching individual orders
Order ticket download
---------------------
.. versionchanged:: 4.10
The API now supports ticket downloads for pending orders if allowed by the event settings.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/download/(output)/
Download tickets for an order, identified by its order code. Depending on the chosen output, the response might
be a ZIP file, PDF file or something else. The order details response contains a list of output options for this
particular order.
Tickets can be only downloaded if the order is paid and if ticket downloads are active. Note that in some cases the
Tickets can only be downloaded if ticket downloads are active and depending on event settings the order is either paid or pending. Note that in some cases the
ticket file might not yet have been created. In that case, you will receive a status code :http:statuscode:`409` and
you are expected to retry the request after a short period of waiting.
@@ -730,6 +709,37 @@ Generating new secrets
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to update this order.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/(id)/regenerate_secrets/
Triggers generation of a new ``secret`` attribute for a single order position.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/orderpositions/23/regenerate_secrets/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
(Full order position resource, see above.)
:param organizer: The ``slug`` field of the organizer of the event
:param event: The ``slug`` field of the event
:param code: The ``id`` field of the order position to update
:statuscode 200: no error
:statuscode 400: The order position could not be updated due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to update this order position.
Deleting orders
---------------
@@ -807,7 +817,7 @@ Creating orders
You can supply the following fields of the resource:
* ``code`` (optional)
* ``code`` (optional) Only ``A-Z`` and ``0-9``, but without ``O`` and ``1``.
* ``status`` (optional) Defaults to pending for non-free orders and paid for free orders. You can only set this to
``"n"`` for pending or ``"p"`` for paid. We will create a payment object for this order either in state ``created``
or in state ``confirmed``, depending on this value. If you create a paid order, the ``order_paid`` signal will
@@ -834,6 +844,7 @@ Creating orders
* ``comment`` (optional)
* ``custom_followup_at`` (optional)
* ``checkin_attention`` (optional)
* ``require_approval`` (optional)
* ``invoice_address`` (optional)
* ``company``
@@ -893,8 +904,9 @@ Creating orders
* ``force`` (optional). If set to ``true``, quotas will be ignored.
* ``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``. Used to be ``send_mail`` before pretix 3.14.
whether these emails are enabled for certain sales channels. If set to ``null``, behavior will be controlled by pretix'
settings based on the sales channels (added in pretix 4.7). Defaults to ``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
@@ -987,10 +999,6 @@ Creating orders
Order state operations
----------------------
.. versionchanged:: 3.12
The ``mark_paid`` operation now takes a ``send_email`` parameter.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/mark_paid/
Marks a pending or expired order as successfully paid.
@@ -1039,6 +1047,9 @@ Order state operations
will instead stay paid, but all positions will be removed (or marked as canceled) and replaced by the cancellation
fee as the only component of the order.
You can control whether the customer is notified through ``send_email`` (defaults to ``true``).
You can pass a ``comment`` that can be visible to the user if it is used in the email template.
**Example request**:
.. sourcecode:: http
@@ -1050,6 +1061,7 @@ Order state operations
{
"send_email": true,
"comment": "Event was canceled.",
"cancellation_fee": null
}
@@ -1388,10 +1400,6 @@ Sending e-mails
List of all order positions
---------------------------
.. versionchanged:: 3.5
The ``include_canceled_positions`` and ``include_canceled_fees`` query parameters have been added.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/
Returns a list of all order positions within a given event.
@@ -1435,6 +1443,7 @@ List of all order positions
"tax_rule": null,
"tax_value": "0.00",
"secret": "z3fsn8jyufm5kpk768q69gkbyr5f4h6w",
"discount": null,
"pseudonymization_id": "MQLJvANO3B",
"seat": null,
"addon_to": null,
@@ -1545,6 +1554,7 @@ Fetching individual positions
"secret": "z3fsn8jyufm5kpk768q69gkbyr5f4h6w",
"addon_to": null,
"subevent": null,
"discount": null,
"pseudonymization_id": "MQLJvANO3B",
"seat": null,
"checkins": [
@@ -1588,6 +1598,10 @@ Fetching individual positions
Order position ticket download
------------------------------
.. versionchanged:: 4.10
The API now supports ticket downloads for pending orders if allowed by the event settings.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/(id)/download/(output)/
Download tickets for one order position, identified by its internal ID.
@@ -1599,7 +1613,7 @@ Order position ticket download
The referenced URL can provide a download or a regular, human-viewable website - so it is advised to open this URL
in a webbrowser and leave it up to the user to handle the result.
Tickets can be only downloaded if the order is paid and if ticket downloads are active. Also, depending on event
Tickets can only be downloaded if ticket downloads are active and depending on event settings the order is either paid or pending. Also, depending on event
configuration downloads might be only unavailable for add-on products or non-admission products.
Note that in some cases the ticket file might not yet have been created. In that case, you will receive a status
code :http:statuscode:`409` and you are expected to retry the request after a short period of waiting.
@@ -1635,12 +1649,15 @@ Order position ticket download
:statuscode 409: The file is not yet ready and will now be prepared. Retry the request after waiting for a few
seconds.
.. _rest-orderpositions-manipulate:
Manipulating individual positions
---------------------------------
.. versionchanged:: 3.15
.. versionchanged:: 4.8
The ``PATCH`` method has been added for individual positions.
The ``PATCH`` method now supports changing items, variations, subevents, seats, prices, and tax rules.
The ``POST`` endpoint to add individual positions has been added.
.. http:patch:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/(id)/
@@ -1668,6 +1685,21 @@ Manipulating individual positions
and ``option_identifiers`` will be ignored. As a special case, you can submit the magic value
``"file:keep"`` as the answer to a file question to keep the current value without re-uploading it.
* ``item``
* ``variation``
* ``subevent``
* ``seat`` (specified as a string mapping to a ``string_guid``)
* ``price``
* ``tax_rule``
Changing parameters such as ``item`` or ``price`` will **not** automatically trigger creation of a new invoice,
you need to take care of that yourself.
**Example request**:
.. sourcecode:: http
@@ -1689,7 +1721,7 @@ Manipulating individual positions
Vary: Accept
Content-Type: application/json
(Full order resource, see above.)
(Full order position resource, see above.)
:param organizer: The ``slug`` field of the organizer of the event
:param event: The ``slug`` field of the event
@@ -1700,9 +1732,83 @@ Manipulating individual positions
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to update this order.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/
Adds a new position to an order. Currently, only the following fields are supported:
* ``order`` (mandatory, specified as a string mapping to a ``code``)
* ``addon_to`` (optional, specified as an integer mapping to the ``positionid`` of the parent position)
* ``item`` (mandatory)
* ``variation`` (mandatory depending on item)
* ``subevent`` (mandatory depending on event)
* ``seat`` (specified as a string mapping to a ``string_guid``, mandatory depending on event and item)
* ``price`` (default price will be used if unset)
* ``attendee_email``
* ``attendee_name_parts`` or ``attendee_name``
* ``company``
* ``street``
* ``zipcode``
* ``city``
* ``country``
* ``state``
* ``answers``: Validation is handled the same way as when creating orders through the API. You are therefore
expected to provide ``question``, ``answer``, and possibly ``options``. ``question_identifier``
and ``option_identifiers`` will be ignored. As a special case, you can submit the magic value
``"file:keep"`` as the answer to a file question to keep the current value without re-uploading it.
This will **not** automatically trigger creation of a new invoice, you need to take care of that yourself.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/orderpositions/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"order": "ABC12",
"item": 5,
"addon_to": 1
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
(Full order position resource, see above.)
:param organizer: The ``slug`` field of the organizer of the event
:param event: The ``slug`` field of the event
:statuscode 200: no error
:statuscode 400: The position could not be created due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to create this position.
.. http:delete:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/(id)/
Deletes an order position, identified by its internal ID.
Cancels an order position, identified by its internal ID.
**Example request**:
@@ -1728,18 +1834,132 @@ Manipulating individual positions
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
:statuscode 404: The requested order position does not exist.
Changing order contents
-----------------------
While you can :ref:`change positions individually <rest-orderpositions-manipulate>` sometimes it is necessary to make
multiple changes to an order at once within one transaction. This makes it possible to e.g. swap the seats of two
attendees in an order without running into conflicts. This interface also offers some possibilities not available
otherwise, such as splitting an order or changing fees.
.. versionchanged:: 4.8
This endpoint has been added to the system.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/change/
Performs a change operation on an order. You can supply the following fields:
* ``patch_positions``: A list of objects with the two keys ``position`` specifying an order position ID and
``body`` specifying the desired changed values of the position (``item``, ``variation``, ``subevent``, ``seat``,
``price``, ``tax_rule``).
* ``cancel_positions``: A list of objects with the single key ``position`` specifying an order position ID.
* ``split_positions``: A list of objects with the single key ``position`` specifying an order position ID.
* ``create_positions``: A list of objects describing new order positions with the same fields supported as when
creating them individually through the ``POST …/orderpositions/`` endpoint.
* ``patch_fees``: A list of objects with the two keys ``fee`` specifying an order fee ID and
``body`` specifying the desired changed values of the position (``value``).
* ``cancel_fees``: A list of objects with the single key ``fee`` specifying an order fee ID.
* ``recalculate_taxes``: If set to ``"keep_net"``, all taxes will be recalculated based on the tax rule and invoice
address, the net price will be kept. If set to ``"keep_gross"``, the gross price will be kept. If set to ``null``
(the default) the taxes are not recalculated.
* ``send_email``: If set to ``true``, the customer will be notified about the change. Defaults to ``false``.
* ``reissue_invoice``: If set to ``true`` and an invoice exists for the order, it will be canceled and a new invoice
will be issued. Defaults to ``true``.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/orders/ABC12/change/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"cancel_positions": [
{
"position": 12373
}
],
"patch_positions": [
{
"position": 12374,
"body": {
"item": 12,
"variation": None,
"subevent": 562,
"seat": "seat-guid-2",
"price": "99.99",
"tax_rule": 15
}
}
],
"split_positions": [
{
"position": 12375
}
],
"create_positions": [
{
"item": 12,
"variation": None,
"subevent": 562,
"seat": "seat-guid-2",
"price": "99.99",
"addon_to": 12374,
"attendee_name": "Peter",
}
],
"cancel_fees": [
{
"fee": 49
}
],
"change_fees": [
{
"fee": 51,
"body": {
"value": "12.00"
}
}
],
"reissue_invoice": true,
"send_email": true,
"recalculate_taxes": "keep_gross"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
(Full order position resource, see above.)
:param organizer: The ``slug`` field of the organizer of the event
:param event: The ``slug`` field of the event
:param code: The ``code`` field of the order to update
:statuscode 200: no error
:statuscode 400: The order could not be updated due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to update this order.
Order payment endpoints
-----------------------
.. versionchanged:: 3.6
Payments can now be created through the API.
.. versionchanged:: 3.12
The ``confirm`` operation now takes a ``send_email`` parameter.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/payments/
Returns a list of all payments for an order.
@@ -2045,6 +2265,7 @@ Order refund endpoints
"created": "2017-12-01T10:00:00Z",
"execution_date": "2017-12-04T12:13:12Z",
"comment": "Cancellation",
"details": {},
"provider": "banktransfer"
}
]
@@ -2088,6 +2309,7 @@ Order refund endpoints
"created": "2017-12-01T10:00:00Z",
"execution_date": "2017-12-04T12:13:12Z",
"comment": "Cancellation",
"details": {},
"provider": "banktransfer"
}
@@ -2145,6 +2367,7 @@ Order refund endpoints
"created": "2017-12-01T10:00:00Z",
"execution_date": null,
"comment": "Cancellation",
"details": {},
"provider": "manual"
}
@@ -2274,10 +2497,6 @@ Revoked ticket secrets
With some non-default ticket secret generation methods, a list of revoked ticket secrets is required for proper validation.
.. versionchanged:: 3.12
Added revocation lists.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/revokedsecrets/
Returns a list of all revoked secrets within a given event.

View File

@@ -109,10 +109,6 @@ information about the properties.
.. 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.

View File

@@ -76,26 +76,9 @@ dependency_value string An old version
for one value. **Deprecated.**
===================================== ========================== =======================================================
.. versionchanged:: 3.5
The attribute ``help_text`` has been added.
.. versionchanged:: 3.14
The attributes ``valid_*`` have been added.
.. versionchanged:: 3.18
The attribute ``valid_file_portrait`` have been added.
Endpoints
---------
.. versionchanged:: 1.15
The questions endpoint has been extended by the filter queries ``ask_during_checkin``, ``requred``, and
``identifier``.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/questions/
Returns a list of all questions within a given event.

View File

@@ -36,10 +36,6 @@ available_number integer Number of avail
slightly out of date. ``null`` means unlimited.
===================================== ========================== =======================================================
.. versionchanged:: 3.10
The attribute ``release_after_exit`` has been added.
.. versionchanged:: 4.1
The ``with_availability`` query parameter has been added.
@@ -89,7 +85,8 @@ Endpoints
:query integer page: The page number in case of a multi-page result set, default is 1
:query string ordering: Manually set the ordering of results. Valid fields to be used are ``id`` and ``position``.
Default: ``position``
:query integer subevent: Only return quotas of the sub-event with the given ID
:query integer subevent: Only return quotas of the sub-event with the given ID.
:query integer subevent__in: Only return quotas of sub-events with one the given IDs (comma-separated).
:query string with_availability: Set to ``true`` to get availability information. Can lead to increased answer times.
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch

View File

@@ -0,0 +1,281 @@
Automated email rules
=====================
Resource description
--------------------
Automated email rules that specify emails that the system will send automatically at a specific point in time, e.g.
the day of the event.
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
id integer Internal ID of the rule
enabled boolean If ``false``, the rule is ignored
subject multi-lingual string The subject of the email
template multi-lingual string The body of the email
all_products boolean If ``true``, the email is sent to buyers of all products
limit_products list of integers List of product IDs, if ``all_products`` is not set
include_pending boolean If ``true``, the email is sent to pending orders. If ``false``,
only paid orders are considered.
date_is_absolute boolean If ``true``, the email is set at a specific point in time.
send_date datetime If ``date_is_absolute`` is set: Date and time to send the email.
send_offset_days integer If ``date_is_absolute`` is not set, this is the number of days
before/after the email is sent.
send_offset_time time If ``date_is_absolute`` is not set, this is the time of day the
email is sent on the day specified by ``send_offset_days``.
offset_to_event_end boolean If ``true``, ``send_offset_days`` is relative to the event end
date. Otherwise it is relative to the event start date.
offset_is_after boolean If ``true``, ``send_offset_days`` is the number of days **after**
the event start or end date. Otherwise it is the number of days
**before**.
send_to string Can be ``"orders"`` if the email should be sent to customers
(one email per order),
``"attendees"`` if the email should be sent to every attendee,
or ``"both"``.
date. Otherwise it is relative to the event start date.
===================================== ========================== =======================================================
Endpoints
---------
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/sendmail_rules/
Returns a list of all rules configured for an event.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/sendmail_rules/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"enabled": true,
"subject": {"en": "See you tomorrow!"},
"template": {"en": "Don't forget your tickets, download them at {url}"},
"all_products": true,
"limit_products": [],
"include_pending": false,
"send_date": null,
"send_offset_days": 1,
"send_offset_time": "18:00",
"date_is_absolute": false,
"offset_to_event_end": false,
"offset_is_after": false,
"send_to": "orders"
}
]
}
:query page: The page number in case of a multi-page result set, default is 1
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the event to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer does not exist **or** you have no permission to view it.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/sendmail_rules/(id)/
Returns information on one rule, identified by its ID.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/sendmail_rules/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"id": 1,
"enabled": true,
"subject": {"en": "See you tomorrow!"},
"template": {"en": "Don't forget your tickets, download them at {url}"},
"all_products": true,
"limit_products": [],
"include_pending": false,
"send_date": null,
"send_offset_days": 1,
"send_offset_time": "18:00",
"date_is_absolute": false,
"offset_to_event_end": false,
"offset_is_after": false,
"send_to": "orders"
}
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
:param id: The ``id`` field of the rule to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event/rule does not exist **or** you have no permission to view it.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/sendmail_rules/
Create a new rule.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/sendmail_rules/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 166
{
"enabled": true,
"subject": {"en": "See you tomorrow!"},
"template": {"en": "Don't forget your tickets, download them at {url}"},
"all_products": true,
"limit_products": [],
"include_pending": false,
"send_date": null,
"send_offset_days": 1,
"send_offset_time": "18:00",
"date_is_absolute": false,
"offset_to_event_end": false,
"offset_is_after": false,
"send_to": "orders"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
{
"id": 1,
"enabled": true,
"subject": {"en": "See you tomorrow!"},
"template": {"en": "Don't forget your tickets, download them at {url}"},
"all_products": true,
"limit_products": [],
"include_pending": false,
"send_date": null,
"send_offset_days": 1,
"send_offset_time": "18:00",
"date_is_absolute": false,
"offset_to_event_end": false,
"offset_is_after": false,
"send_to": "orders"
}
:param organizer: The ``slug`` field of the organizer to create a rule for
:param event: The ``slug`` field of the event to create a rule for
:statuscode 201: no error
:statuscode 400: The rule could not be created due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to create rules.
.. http:patch:: /api/v1/organizers/(organizer)/events/(event)/sendmail_rules/(id)/
Update a rule. You can also use ``PUT`` instead of ``PATCH``. With ``PUT``, you have to provide all fields of
the resource, other fields will be reset to default. With ``PATCH``, you only need to provide the fields that you
want to change.
**Example request**:
.. sourcecode:: http
PATCH /api/v1/organizers/bigevents/events/sampleconf/sendmail_rules/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 34
{
"enabled": false,
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: text/javascript
{
"id": 1,
"enabled": false,
"subject": {"en": "See you tomorrow!"},
"template": {"en": "Don't forget your tickets, download them at {url}"},
"all_products": true,
"limit_products": [],
"include_pending": false,
"send_date": null,
"send_offset_days": 1,
"send_offset_time": "18:00",
"date_is_absolute": false,
"offset_to_event_end": false,
"offset_is_after": false,
"send_to": "orders"
}
:param organizer: The ``slug`` field of the organizer to modify
:param event: The ``slug`` field of the event to modify
:param id: The ``id`` field of the rule to modify
:statuscode 200: no error
:statuscode 400: The rule could not be modified due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event/rule does not exist **or** you have no permission to change it.
.. http:delete:: /api/v1/organizers/(organizer)/events/(event)/sendmail_rules/(id)/
Delete a rule.
**Example request**:
.. sourcecode:: http
DELETE /api/v1/organizers/bigevents/events/sampleconf/sendmail_rules/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 204 No Content
Vary: Accept
:param organizer: The ``slug`` field of the organizer to modify
:param event: The ``slug`` field of the event to modify
:param id: The ``id`` field of the rule to delete
:statuscode 204: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event/rule does not exist **or** you have no permission to change it **or** this rule cannot be deleted since it is currently in use.

View File

@@ -0,0 +1,177 @@
.. spelling:: checkin
Data shredders
==============
pretix and it's plugins include a number of data shredders that allow you to clear personal information from the system.
This page shows you how to use these shredders through the API.
.. versionchanged:: 4.12
This feature has been added to the API.
.. warning::
Unlike the user interface, the API will not force you to download tax-relevant data before you delete it.
Listing available shredders
---------------------------
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/shredders/
Returns a list of all exporters shredders for a given event.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/shredders/ 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": "question_answers",
"verbose_name": "Answers to questions"
}
]
}
: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.
Running an export
-----------------
Before you can delete data, you need to start a data 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)/shredders/export/
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 as well as the URL for the next step.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/shredders/export/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
{
"shredders": ["question_answers"]
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 202 Accepted
Vary: Accept
Content-Type: application/json
{
"download": "https://pretix.eu/api/v1/organizers/bigevents/events/sampleconf/shredders/download/29891ede-196f-4942-9e26-d055a36e98b8/3f279f13-c198-4137-b49b-9b360ce9fcce/",
"shred": "https://pretix.eu/api/v1/organizers/bigevents/events/sampleconf/shredders/shred/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 or event data is not ready to be deleted
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
Downloading the result
----------------------
When starting an export, you receive a ``download`` 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"}``. ``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 / belongs to a different API key.
Shredding the data
------------------
When starting an export, you receive a ``shred`` URL for actually shredding the data.
You can only start the actual shredding process after the export file was generated, however you are not forced to download
the file (we'd recommend it in most cases, though).
The download will no longer be possible after the shredding.
Since shredding often requires deleting large data sets, it might take longer than the duration of an HTTP request.
Therefore, shredding again is a two-step process. First you need to start a shredder task with one of the following to API
endpoints:
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/shredders/shred/(id1)/(id2)/
Starts an export task. If your input parameters validate correctly, a ``202 Accepted`` status code is returned.
The body points you to an URL you can use to check the status.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/shredders/shred/29891ede-196f-4942-9e26-d055a36e98b8/3f279f13-c198-4137-b49b-9b360ce9fcce/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 202 Accepted
Vary: Accept
Content-Type: application/json
{
"status": "https://pretix.eu/api/v1/organizers/bigevents/events/sampleconf/shredders/status/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 id1: Opaque value given to you in the previous response
:param id2: Opaque value given to you in the previous response
:statuscode 202: no error
:statuscode 400: Invalid input options
:statuscode 401: Authentication failure
:statuscode 404: The export does not exist / is expired / belongs to a different API key.
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to view this resource.
:statuscode 409: Your export is still running. The body will be JSON with the structure ``{"status": "running"}``. ``status`` can be ``waiting`` before the task is actually being processed. Please retry, but wait at least one second before you do.
:statuscode 410: Either the job has timed out or running the export has failed permanently. The body will be JSON with the structure ``{"status": "failed", "message": "Error message"}``
Checking the result
-------------------
When starting to shred, you receive a ``status`` URL for checking for success.
Running a ``GET`` request on that result will yield one of the following status codes:
* ``200 OK`` The shredding succeeded.
* ``409 Conflict`` Shredding is still running. The body will be JSON with the structure ``{"status": "running"}``. ``status`` can be ``waiting`` before the task is actually being processed. Please retry, but wait at least one second before you do.
* ``410 Gone`` We no longer know about this process, probably the process was started more than an hour ago. Might also occur after successful operations on small pretix installations without asynchronous task handling.
* ``417 Expectation Failed`` Running the export has failed permanently. The body will be JSON with the structure ``{"status": "failed", "message": "Error message"}``

View File

@@ -59,29 +59,13 @@ seat_category_mapping object An object mappi
last_modified datetime Last modification of this object
===================================== ========================== =======================================================
.. versionchanged:: 3.3
.. versionchanged:: 4.15
The attributes ``geo_lat`` and ``geo_lon`` have been added.
.. versionchanged:: 3.10
The ``disabled`` attribute has been added to ``item_price_overrides`` and ``variation_price_overrides``.
.. versionchanged:: 3.12
The ``last_modified`` attribute has been added.
.. versionchanged:: 3.18
The ``available_from``/``available_until`` attributes have been added to ``item_price_overrides`` and ``variation_price_overrides``.
The ``search`` query parameter has been added to filter sub-events by their name or location in any language.
Endpoints
---------
.. versionchanged:: 3.3
The sub-events resource can now be filtered by meta data attributes.
.. versionchanged:: 4.1
The ``with_availability_for`` parameter has been added.
@@ -147,6 +131,7 @@ Endpoints
:query is_future: If set to ``true`` (``false``), only events that happen currently or in the future are (not) returned.
:query is_past: If set to ``true`` (``false``), only events that are over are (not) returned.
:query ends_after: If set to a date and time, only events that happen during of after the given time are returned.
:query search: Only return events matching a given search query.
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the main event
:query datetime modified_since: Only return objects that have changed since the given date. Be careful: This does not
@@ -474,6 +459,7 @@ Endpoints
:query is_future: If set to ``true`` (``false``), only events that happen currently or in the future are (not) returned.
:query is_past: If set to ``true`` (``false``), only events that are over are (not) returned.
:query ends_after: If set to a date and time, only events that happen during of after the given time are returned.
:query sales_channel: If set to a sales channel identifier, the response will only contain subevents from events available on this sales channel.
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the event to fetch
:statuscode 200: no error

View File

@@ -16,15 +16,22 @@ Field Type Description
===================================== ========================== =======================================================
id integer Internal ID of the tax rule
name multi-lingual string The tax rules' name
internal_name string An optional name that is only used in the backend
rate decimal (string) Tax rate in percent
price_includes_tax boolean If ``true`` (default), tax is assumed to be included in
the specified product price
eu_reverse_charge boolean If ``true``, EU reverse charge rules are applied
home_country string Merchant country (required for reverse charge), can be
``null`` or empty string
keep_gross_if_rate_changes boolean If ``true``, changes of the tax rate based on custom
rules keep the gross price constant (default is ``false``)
===================================== ========================== =======================================================
.. versionchanged:: 4.6
The ``internal_name`` and ``keep_gross_if_rate_changes`` attributes have been added.
Endpoints
---------
@@ -56,9 +63,11 @@ Endpoints
{
"id": 1,
"name": {"en": "VAT"},
"internal_name": "VAT",
"rate": "19.00",
"price_includes_tax": true,
"eu_reverse_charge": false,
"keep_gross_if_rate_changes": false,
"home_country": "DE"
}
]
@@ -94,9 +103,11 @@ Endpoints
{
"id": 1,
"name": {"en": "VAT"},
"internal_name": "VAT",
"rate": "19.00",
"price_includes_tax": true,
"eu_reverse_charge": false,
"keep_gross_if_rate_changes": false,
"home_country": "DE"
}
@@ -140,9 +151,11 @@ Endpoints
{
"id": 1,
"name": {"en": "VAT"},
"internal_name": "VAT",
"rate": "19.00",
"price_includes_tax": true,
"eu_reverse_charge": false,
"keep_gross_if_rate_changes": false,
"home_country": "DE"
}
@@ -185,9 +198,11 @@ Endpoints
{
"id": 1,
"name": {"en": "VAT"},
"internal_name": "VAT",
"rate": "20.00",
"price_includes_tax": true,
"eu_reverse_charge": false,
"keep_gross_if_rate_changes": false,
"home_country": "DE"
}

View File

@@ -1,3 +1,5 @@
.. _`rest-vouchers`:
Vouchers
========
@@ -17,6 +19,8 @@ max_usages integer The maximum num
redeemed (default: 1).
redeemed integer The number of times this voucher already has been
redeemed.
min_usages integer The minimum number of times this voucher must be
redeemed on first usage (default: 1).
valid_until datetime The voucher expiration date (or ``null``).
block_quota boolean If ``true``, quota is blocked for this voucher.
allow_ignore_quota boolean If ``true``, this voucher can be redeemed even if a
@@ -46,10 +50,6 @@ show_hidden_items boolean Only if set to
===================================== ========================== =======================================================
.. versionchanged:: 3.4
The attribute ``seat`` has been added.
Endpoints
---------

View File

@@ -30,12 +30,6 @@ subevent integer ID of the date
===================================== ========================== =======================================================
.. versionchanged:: 1.15
The write operations ``POST``, ``PATCH``, ``PUT``, and ``DELETE`` have been added as well as a method to send out
vouchers.
Endpoints
---------

View File

@@ -36,10 +36,16 @@ The following values for ``action_types`` are valid with pretix core:
* ``pretix.event.order.canceled``
* ``pretix.event.order.reactivated``
* ``pretix.event.order.expired``
* ``pretix.event.order.expirychanged``
* ``pretix.event.order.modified``
* ``pretix.event.order.contact.changed``
* ``pretix.event.order.changed.*``
* ``pretix.event.order.refund.created``
* ``pretix.event.order.refund.created.externally``
* ``pretix.event.order.refund.requested``
* ``pretix.event.order.refund.done``
* ``pretix.event.order.refund.canceled``
* ``pretix.event.order.refund.failed``
* ``pretix.event.order.approved``
* ``pretix.event.order.denied``
* ``pretix.event.checkin``
@@ -50,6 +56,10 @@ The following values for ``action_types`` are valid with pretix core:
* ``pretix.subevent.added``
* ``pretix.subevent.changed``
* ``pretix.subevent.deleted``
* ``pretix.event.live.activated``
* ``pretix.event.live.deactivated``
* ``pretix.event.testmode.activated``
* ``pretix.event.testmode.deactivated``
Installed plugins might register more valid values.

View File

@@ -92,9 +92,10 @@ If any other status code is returned, we will assume you did not receive the cal
or ``304 Not Modified`` response will be treated as a failure. pretix will not follow any ``301`` or ``302`` redirect
headers and pretix will ignore all other information in your response headers or body.
If we do not receive a status code in the range of ``200`` and ``299``, pretix will retry to deliver for up to three
days with an exponential back off. Therefore, we recommend that you implement your endpoint in a way where calling it
multiple times for the same event due to a perceived error does not do any harm.
If we do not receive a status code in the range of ``200`` and ``299`` or do not receive any response within a 30 second
time frame, pretix will retry to deliver for up to three days with an exponential back off. Therefore, we recommend that
you implement your endpoint in a way where calling it multiple times for the same event due to a perceived error does
not do any harm.
There is only one exception: If status code ``410 Gone`` is returned, we will assume the
endpoint does not exist any more and automatically disable the webhook.

View File

@@ -2,12 +2,13 @@ Algorithms
==========
The business logic inside pretix is full of complex algorithms making decisions based on all the hundreds of settings
and input parameters available. Some of them are documented here as graphs, either because fully understanding them is very
and input parameters available. Some of them are documented here as graphs, either because fully understanding them is very important
when working on features close to them, or because they also need to be re-implemented by client-side components like our
ticket scanning apps and we want to ensure the implementations are as similar as possible to avoid confusion.
.. toctree::
:maxdepth: 2
pricing
checkin
layouts

View File

@@ -0,0 +1,180 @@
.. _`algorithms-pricing`:
Pricing algorithms
==================
With pretix being an e-commerce application, one of its core tasks is to determine the price of a purchase. With the
complexity allowed by our range of features, this is not a trivial task and there are many edge cases that need to be
clearly defined. The most challenging part about this is that there are many situations in which a price might change
while the user is going through the checkout process and we're learning more information about them or their purchase.
For example, prices change when
* The cart expires and the listed prices changed in the meantime
* The user adds an invoice address that triggers a change in taxation
* The user chooses a custom price for an add-on product and adjusts the price later on
* The user adds a voucher to their cart
* An automatic discount is applied
For the purposes of this page, we're making a distinction between "naive prices" (which are just a plain number like 23.00), and
"taxed prices" (which are a combination of a net price, a tax rate, and a gross price, like 19.33 + 19% = 23.00).
Computation of listed prices
----------------------------
When showing a list of products, e.g. on the event front page, we always need to show a price. This price is what we
call the "listed price" later on.
To compute the listed price, we first use the ``default_price`` attribute of the ``Item`` that is being shown.
If we are showing an ``ItemVariation`` and that variation has a ``default_price`` set on itself, the variation's price
takes precedence and replaces the item's price.
If we're in an event series and there exists a ``SubEventItem`` or ``SubEventItemVariation`` with a price set, the
subevent's price configuration takes precedence over both the item as well as the variation and replaces the listed price.
Listed prices are naive prices. Before we actually show them to the user, we need to check if ``TaxRule.price_includes_tax``
is set to determine if we need to add tax or subtract tax to get to the taxed price. We then consider the event's
``display_net_prices`` setting to figure out which way to present the taxed price in the interface.
Guarantees on listed prices
---------------------------
One goal of all further logic is that if a user sees a listed price, they are guaranteed to get the product at that
price as long as they complete their purchase within the cart expiration time frame. For example, if the cart expiration
time is set to 30 minutes and someone puts a item listed at €23 in their cart at 4pm, they can still complete checkout
at €23 until 4.30pm, even if the organizer decides to raise the price to €25 at 4.10pm. If they complete checkout after
4.30pm, their cart will be adjusted to the new price and the user will see a warning that the price has changed.
Computation of cart prices
--------------------------
Input
"""""
To ensure the guarantee mentioned above, even in the light of all possible dynamic changes, the ``listed_price``
is explicitly stored in the ``CartPosition`` model after the item has been added to the cart.
If ``Item.free_price`` is set, the user is allowed to voluntarily increase the price. In this case, the user's input
is stored as ``custom_price_input`` without much further validation for use further down below in the process.
If ``display_net_prices`` is set, the user's input is also considered to be a net price and ``custom_price_input_is_net``
is stored for the cart position. In any other case, the user's input is considered to be a gross price based on the tax
rules' default tax rate.
The computation of prices in the cart always starts from the ``listed_price``. The ``list_price`` is only computed
when adding the product to the cart or when extending the cart's lifetime after it expired. All other steps such as
creating an order based on the cart trust ``list_price`` without further checks.
Vouchers
""""""""
As a first step, the cart is checked for any voucher that should be applied to the position. If such a voucher exists,
it's discount (percentage or fixed) is applied to the listed price. The result of this is stored to ``price_after_voucher``.
Since ``listed_price`` naive, ``price_after_voucher`` is naive as well. As a consequence, if you have a voucher configured
to "set the price to €10", it depends on ``TaxRule.price_includes_tax`` again whether this is €10 including or excluding
taxes.
The ``price_after_voucher`` is only computed when adding the product to the cart or when extending the cart's
lifetime after it expired. It is also checked again when the order is created, since the available discount might have
changed due to the voucher's budget being (almost) exhausted.
Line price
""""""""""
The next step computes the final price of this position if it is the only position in the cart. This happens in "reverse
order", i.e. before the computation can be performed for a cart position, the step needs to be performed on all of its
bundled positions. The sum of ``price_after_voucher`` of all bundled positions is now called ``bundled_sum``.
First, the value from ``price_after_voucher`` will be processed by the applicable ``TaxRule.tax()`` (which is complex
in itself but is not documented here in detail at the moment).
If ``custom_price_input`` is not set, ``bundled_sum`` will be subtracted from the gross price and the net price is
adjusted accordingly. The result is stored as ``tax_rate`` and ``line_price_gross`` in the cart position.
If ``custom_price_input`` is set, the value will be compared to either the gross or the net value of the ``tax()``
result, depending on ``custom_price_input_is_net``. If the comparison yields that the custom price is higher, ``tax()``
will be called again . Then, ``bundled_sum`` will be subtracted from the gross price and the result is stored like
above.
The computation of ``line_price_gross`` from ``price_after_voucher``, ``custom_price_input``, and tax settings
is repeated after every change of anything in the cart or after every change of the invoice address.
Discounts
---------
After ``line_price_gross`` has been computed for all positions, the discount engine will run to apply any automatic
discounts. Organizers can add rules for automatic discounts in the pretix backend. These rules are ordered and
will be applied in order. Every cart position can only be "used" by one discount rule. "Used" can either mean that
the price of the position was actually discounted, but it can also mean that the position was required to enable
a discount for a different position, e.g. in case of a "buy 3 for the price of 2" offer.
The algorithm for applying an individual discount rule first starts with eliminating all products that do not match
the rule based on its product scope. Then, the algorithm is handled differently for different configurations.
Case 1: Discount based on minimum value without respect to subevents
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
* Check whether the gross sum of all positions is at least ``condition_min_value``, otherwise abort.
* Reduce the price of all positions by ``benefit_discount_matching_percent``.
* Mark all positions as "used" to hide them from further rules
Case 2: Discount based on minimum number of tickets without respect to subevents
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
* Check whether the number of all positions is at least ``condition_min_count``, otherwise abort.
* If ``benefit_only_apply_to_cheapest_n_maches`` is set,
* Sort all positions by price.
* Reduce the price of the first ``n_positions // condition_min_count * benefit_only_apply_to_cheapest_n_matches`` positions by ``benefit_discount_matching_percent``.
* Mark the first ``n_positions // condition_min_count * condition_min_count`` as "used" to hide them from further rules.
* Mark all positions as "used" to hide them from further rules.
* Else,
* Reduce the price of all positions by ``benefit_discount_matching_percent``.
* Mark all positions as "used" to hide them from further rules.
Case 3: Discount only for products of the same subevent
"""""""""""""""""""""""""""""""""""""""""""""""""""""""
* Split the cart into groups based on the subevent.
* Proceed with case 1 or 2 for every group.
Case 4: Discount only for products of distinct subevents
""""""""""""""""""""""""""""""""""""""""""""""""""""""""
* Let ``subevents`` be a list of distinct subevents in the cart.
* Let ``positions[subevent]`` be a list of positions for every subevent.
* Let ``current_group`` be the current group and ``groups`` the list of all groups.
* Repeat
* Order ``subevents`` by the length of their ``positions[subevent]`` list, starting with the longest list.
Do not count positions that are part of ``current_group`` already.
* Let ``candidates`` be the concatenation of all ``positions[subevent]`` lists with the same length as the
longest list.
* If ``candidates`` is empty, abort the repetition.
* Order ``candidates`` by their price, starting with the lowest price.
* Pick one entry from ``candidates`` and put it into ``current_group``. If ``current_group`` is shorter than
``benefit_only_apply_to_cheapest_n_matches``, we pick from the start (lowest price), otherwise we pick from
the end (highest price)
* If ``current_group`` is now ``condition_min_count``, remove all entries from ``current_group`` from
``positions[…]``, add ``current_group`` to ``groups``, and reset ``current_group`` to an empty group.
* For every position still left in a ``positions[…]`` list, try if there is any ``group`` in groups that it can
still be added to without violating the rule of distinct subevents
* For every group in ``groups``, proceed with case 1 or 2.
Flowchart
---------
.. image:: /images/cart_pricing.png

View File

@@ -20,20 +20,31 @@ Basically, three pre-defined flows are supported:
* Authentication mechanisms that rely on **redirection**, e.g. to an OAuth provider. These can be implemented by
supplying a ``authentication_url`` method and implementing a custom return view.
Authentication backends are *not* collected through a signal. Instead, they must explicitly be set through the
``auth_backends`` directive in the ``pretix.cfg`` :ref:`configuration file <config>`.
For security reasons, authentication backends are *not* automatically discovered through a signal. Instead, they must
explicitly be set through the ``auth_backends`` directive in the ``pretix.cfg`` :ref:`configuration file <config>`.
In each of these methods (``form_authenticate``, ``request_authenticate`` or your custom view) you are supposed to
either get an existing :py:class:`pretix.base.models.User` object from the database or create a new one. There are a
few rules you need to follow:
In each of these methods (``form_authenticate``, ``request_authenticate``, or your custom view) you are supposed to
use ``User.objects.get_or_create_for_backend`` to get a :py:class:`pretix.base.models.User` object from the database
or create a new one.
* You **MUST** only return users with the ``auth_backend`` attribute set to the ``identifier`` value of your backend.
There are a few rules you need to follow:
* You **MUST** create new users with the ``auth_backend`` attribute set to the ``identifier`` value of your backend.
* You **MUST** have some kind of identifier for a user that is globally unique and **SHOULD** never change, even if the
user's name or email address changes. This could e.g. be the ID of the user in an external database. The identifier
must not be longer than 190 characters. If you worry your backend might generated longer identifiers, consider
using a hash function to trim them to a constant length.
* You **SHOULD** not allow users created by other authentication backends to log in through your code, and you **MUST**
only create, modify or return users with ``auth_backend`` set to your backend.
* Every user object **MUST** have an email address. Email addresses are globally unique. If the email address is
already registered to a user who signs in through a different backend, you **SHOULD** refuse the login.
``User.objects.get_or_create_for_backend`` will follow these rules for you automatically. It works like this:
.. autoclass:: pretix.base.models.auth.UserManager
:members: get_or_create_for_backend
The backend interface
---------------------
@@ -59,6 +70,7 @@ The backend interface
.. automethod:: authentication_url
Logging users in
----------------
@@ -68,3 +80,45 @@ recommend that you use the following utility method to correctly set session val
authentication (if activated):
.. autofunction:: pretix.control.views.auth.process_login
A custom view that is called after a redirect from an external identity provider could look like this::
from django.contrib import messages
from django.shortcuts import redirect
from django.urls import reverse
from pretix.base.models import User
from pretix.base.models.auth import EmailAddressTakenError
from pretix.control.views.auth import process_login
def return_view(request):
# Verify validity of login with the external provider's API
api_response = my_verify_login_function(
code=request.GET.get('code')
)
try:
u = User.objects.get_or_create_for_backend(
'my_backend_name',
api_response['userid'],
api_response['email'],
set_always={
'fullname': '{} {}'.format(
api_response.get('given_name', ''),
api_response.get('family_name', ''),
),
},
set_on_creation={
'locale': api_response.get('locale').lower()[:2],
'timezone': api_response.get('zoneinfo', 'UTC'),
}
)
except EmailAddressTakenError:
messages.error(
request, _('We cannot create your user account as a user account in this system '
'already exists with the same email address.')
)
return redirect(reverse('control:auth.login'))
else:
return process_login(request, u, keep_logged_in=False)

View File

@@ -0,0 +1,119 @@
.. highlight:: python
:linenothreshold: 5
.. _`cookieconsent`:
Handling cookie consent
=======================
pretix includes an optional feature to handle cookie consent explicitly to comply with EU regulations.
If your plugin sets non-essential cookies or includes a third-party service that does so, you should
integrate with this feature.
Server-side integration
-----------------------
First, you need to declare that you are using non-essential cookies by responding to the following
signal:
.. automodule:: pretix.presale.signals
:members: register_cookie_providers
You are expected to return a list of ``CookieProvider`` objects instantiated from the following class:
.. class:: pretix.presale.cookies.CookieProvider
.. py:attribute:: CookieProvider.identifier
A short and unique identifier used to distinguish this cookie provider form others (required).
.. py:attribute:: CookieProvider.provider_name
A human-readable name of the entity of feature responsible for setting the cookie (required).
.. py:attribute:: CookieProvider.usage_classes
A list of enum values from the ``pretix.presale.cookies.UsageClass`` enumeration class, such as
``UsageClass.ANALYTICS``, ``UsageClass.MARKETING``, or ``UsageClass.SOCIAL`` (required).
.. py:attribute:: CookieProvider.privacy_url
A link to a privacy policy (optional).
Here is an example of such a receiver:
.. code-block:: python
@receiver(register_cookie_providers)
def recv_cookie_providers(sender, request, **kwargs):
return [
CookieProvider(
identifier='google_analytics',
provider_name='Google Analytics',
usage_classes=[UsageClass.ANALYTICS],
)
]
JavaScript-side integration
---------------------------
The server-side integration only causes the cookie provider to show up in the cookie dialog. You still
need to care about actually enforcing the consent state.
You can access the consent state through the ``window.pretix.cookie_consent`` variable. Whenever the
value changes, a ``pretix:cookie-consent:change`` event is fired on the ``document`` object.
The variable will generally have one of the following states:
.. rst-class:: rest-resource-table
================================================================ =====================================================
State Interpretation
================================================================ =====================================================
``pretix === undefined || pretix.cookie_consent === undefined`` Your JavaScript has loaded before the cookie consent
script. Wait for the event to be fired, then try again,
do not yet set a cookie.
``pretix.cookie_consent === null`` The cookie consent mechanism has not been enabled. This
usually means that you can set cookies however you like.
``pretix.cookie_consent[identifier] === undefined`` The cookie consent mechanism is loaded, but has no data
on your cookie yet, wait for the event to be fired, do not
yet set a cookie.
``pretix.cookie_consent[identifier] === true`` The user has consented to your cookie.
``pretix.cookie_consent[identifier] === false`` The user has actively rejected your cookie.
================================================================ =====================================================
If you are integrating e.g. a tracking provider with native cookie consent support such
as Facebook's Pixel, you can integrate it like this:
.. code-block:: javascript
var consent = (window.pretix || {}).cookie_consent;
if (consent !== null && !(consent || {}).facebook) {
fbq('consent', 'revoke');
}
fbq('init', ...);
document.addEventListener('pretix:cookie-consent:change', function (e) {
fbq('consent', (e.detail || {}).facebook ? 'grant' : 'revoke');
})
If you have a JavaScript function that you only want to load if consent for a specific ``identifier``
is given, you can wrap it like this:
.. code-block:: javascript
var consent_identifier = "youridentifier";
var consent = (window.pretix || {}).cookie_consent;
if (consent === null || (consent || {})[consent_identifier] === true) {
// Cookie consent tool is either disabled or consent is given
addScriptElement(src);
return;
}
// Either cookie consent tool has not loaded yet or consent is not given
document.addEventListener('pretix:cookie-consent:change', function onChange(e) {
var consent = e.detail || {};
if (consent === null || consent[consent_identifier] === true) {
addScriptElement(src);
document.removeEventListener('pretix:cookie-consent:change', onChange);
}
})

View File

@@ -60,7 +60,13 @@ The exporter class
.. py:attribute:: BaseExporter.event
The default constructor sets this property to the event we are currently
working for.
working for. This will be ``None`` if the exporter is run for multiple
events.
.. py:attribute:: BaseExporter.events
The default constructor sets this property to the list of events to work
on, regardless of whether the exporter is called for one or multiple events.
.. autoattribute:: identifier

View File

@@ -17,6 +17,7 @@ Contents:
shredder
import
customview
cookieconsent
auth
general
quality

View File

@@ -62,6 +62,8 @@ The provider class
.. autoattribute:: public_name
.. autoattribute:: confirm_button_name
.. autoattribute:: is_enabled
.. autoattribute:: priority
@@ -124,6 +126,8 @@ The provider class
.. automethod:: api_payment_details
.. automethod:: api_refund_details
.. automethod:: matching_id
.. automethod:: shred_payment_info
@@ -134,6 +138,10 @@ The provider class
.. autoattribute:: is_meta
.. autoattribute:: execute_payment_needs_user
.. autoattribute:: multi_use_supported
.. autoattribute:: test_mode_message
.. autoattribute:: requires_invoice_immediately

View File

@@ -45,13 +45,17 @@ Attribute Type Description
name string The human-readable name of your plugin
author string Your name
version string A human-readable version code of your plugin
description string A more verbose description of what your plugin does.
description string A more verbose description of what your plugin does. May contain HTML.
category string Category of a plugin. Either one of ``"FEATURE"``, ``"PAYMENT"``,
``"INTEGRATION"``, ``"CUSTOMIZATION"``, ``"FORMAT"``, or ``"API"``,
or any other string.
picture string (optional) Path to a picture resolvable through the static file system.
featured boolean (optional) ``False`` by default, can promote a plugin if it's something many users will want, use carefully.
visible boolean (optional) ``True`` by default, can hide a plugin so it cannot be normally activated.
restricted boolean (optional) ``False`` by default, restricts a plugin such that it can only be enabled
for an event by system administrators / superusers.
experimental boolean (optional) ``False`` by default, marks a plugin as an experimental feature in the plugins list.
picture string (optional) Path to a picture resolvable through the static file system.
compatibility string Specifier for compatible pretix versions.
================== ==================== ===========================================================
@@ -74,8 +78,10 @@ A working example would be:
name = _("PayPal")
author = _("the pretix team")
version = '1.0.0'
category = 'PAYMENT
category = 'PAYMENT'
picture = 'pretix_paypal/paypal_logo.svg'
visible = True
featured = False
restricted = False
description = _("This plugin allows you to receive payments via PayPal")
compatibility = "pretix>=2.7.0"
@@ -92,6 +98,7 @@ those will be displayed but not block the plugin execution.
The ``AppConfig`` class may implement a method ``is_available(event)`` that checks if a plugin
is available for a specific event. If not, it will not be shown in the plugin list of that event.
You should not define ``is_available`` and ``restricted`` on the same plugin.
Plugin registration
-------------------

View File

@@ -1,6 +1,11 @@
.. spelling:: Rebase rebasing
Coding style and quality
========================
Code
----
* Basically, we want all python code to follow the `PEP 8`_ standard. There are a few exceptions where
we see things differently or just aren't that strict. The ``setup.cfg`` file in the project's source
folder contains definitions that allow `flake8`_ to check for violations automatically. See :ref:`checksandtests`
@@ -20,8 +25,62 @@ Coding style and quality
test suite are in the style of Python's unit test module. If you extend those files, you might continue in this style,
but please use ``pytest`` style for any new test files.
* Please keep the first line of your commit messages short. When referencing an issue, please phrase it like
``Fix #123 -- Problems with order creation`` or ``Refs #123 -- Fix this part of that bug``.
Commits and Pull Requests
-------------------------
Most commits should start as pull requests, therefore this applies to the titles of pull requests as well since
the pull request title will become the commit message on merge. We prefer merging with GitHub's "Squash and merge"
feature if the PR contains multiple commits that do not carry value to keep. If there is value in keeping the
individual commits, we use "Rebase and merge" instead. Merge commits should be avoided.
* The commit message should start with a single subject line and can optionally be followed by a commit message body.
* The subject line should be the shortest possible representation of what the commit changes. Someone who reviewed
the commit should able to immediately remember the commit in a couple of weeks based on the subject line and tell
it apart from other commits.
* If there's additional useful information that we should keep, such as reasoning behind the commit, you can
add a longer body, separated from the first line by a blank line.
* The body should explain **what** you changed and more importantly **why** you changed it. There's no need to iterate
**how** you changed something.
* The subject line should be capitalized ("Add new feature" instead of "add new feature") and should not end with a period
("Add new feature" instead of "Add new feature.")
* The subject line should be written in imperative mood, as if you were giving a command what the computer should do if the
commit is applied. This is how generated commit messages by git itself are already written ("Merge branch …", "Revert …")
and makes for short and consistent messages.
* Good: "Fix typo in template"
* Good: "Add Chinese translation"
* Good: "Remove deprecated method"
* Good: "Bump version to 4.4.0"
* Bad: "Fixed bug with …"
* Bad: "Fixes bug with …"
* Bad: "Fixing bug …"
* If all changes in your commit are in context of a single feature or e.g. a bundled plugin, it makes sense to prefix the
subject line with the name of that feature. Examples:
* "API: Add support for PATCH on customers"
* "Docs: Add chapter on alpaca feeding"
* "Stripe: Fix duplicate payments"
* "Order change form: Fix incorrect validation"
* If your commit references a GitHub issue that is fully resolved by your commit, start your subject line with the issue
ID in the form of "Fix #1234 -- Crash in order list". In this case, you can omit the verb "Fix" at the beginning of the
second part of the message to avoid repetition of the word "fix". If your commit only partially resolves the issue, use
"Refs #1234 -- Crash in order list" instead.
* Applies to pretix employees only: If your commit references a sentry issue, please put it in parentheses at the end
of the subject line or inside the body ("Fix crash in order list (PRETIXEU-ABC)"). If your commit references a support
ticket, please put it in parentheses at the end of the subject line with a "Z#" prefix ("Fix crash in order list (Z#12345)").
* If your PR was open for a while and might cause conflicts on merge, please prefer rebasing it (``git rebase -i master``)
over merging ``master`` into your branch unless it is prohibitively complicated.
.. _PEP 8: https://legacy.python.org/dev/peps/pep-0008/

View File

@@ -92,6 +92,9 @@ Carts and Orders
.. autoclass:: pretix.base.models.OrderRefund
:members:
.. autoclass:: pretix.base.models.Transaction
:members:
.. autoclass:: pretix.base.models.CartPosition
:members:

View File

@@ -184,11 +184,6 @@ Most of these methods work identically on :class:`pretix.base.models.TeamAPIToke
Staff sessions
--------------
.. versionchanged:: 1.14
In 1.14, the ``User.is_superuser`` attribute has been deprecated and statically set to return ``False``. Staff
sessions have been newly introduced.
System administrators of a pretix instance are identified by the ``is_staff`` attribute on the user model. By default,
the regular permission rules apply for users with ``is_staff = True``. The only difference is that such users can
temporarily turn on "staff mode" via a button in the user interface that grants them **all permissions** as long as

View File

@@ -26,7 +26,7 @@ Your should install the following on your system:
* ``libssl`` (Debian package: ``libssl-dev``)
* ``libxml2`` (Debian package ``libxml2-dev``)
* ``libxslt`` (Debian package ``libxslt1-dev``)
* ``libenchant1c2a`` (Debian package ``libenchant1c2a``)
* ``libenchant-2-2`` (Debian package ``libenchant-2-2``)
* ``msgfmt`` (Debian package ``gettext``)
* ``git``
@@ -51,7 +51,12 @@ the dependencies might fail::
Working with the code
---------------------
The first thing you need are all the main application's dependencies::
If you do not have a recent installation of ``nodejs``, install it now::
curl -sL https://deb.nodesource.com/setup_17.x | sudo -E bash -
sudo apt install nodejs
To make sure it is on your path variable, close and reopen your terminal. Now, install the Python-level dependencies of pretix::
cd src/
pip3 install -e ".[dev]"

BIN
doc/images/cart_pricing.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@@ -0,0 +1,28 @@
@startuml
partition "For every cart position" {
(*) --> "Get default price from product"
--> if "Product has variations?" then
-->[yes] "Override with price from variation"
--> if "Event series?" then
-->[yes] "Override with price from subevent"
-down-> "Store as listed_price"
else
-down->[no] "Store as listed_price"
endif
else
-down->[no] "Store as listed_price"
endif
--> if "Voucher applied?" then
-->[yes] "Apply voucher pricing"
--> "Store as price_after_voucher"
else
-->[no] "Store as price_after_voucher"
endif
--> "Apply custom price if product allows\nApply tax rule\nSubtract bundled products"
--> "Store as line_price (gross), tax_rate"
}
--> "Apply discount engine"
--> "Store as price (gross)"
@enduml

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 274 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 175 KiB

View File

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

View File

@@ -52,6 +52,7 @@ Variable Description
``order_email`` E-mail address of the ticket purchaser
``product_id`` Internal ID of the purchased product
``product_variation`` Internal ID of the purchased product variation (or empty)
``secret`` The secret ticket code, would be used as the QR code for physical tickets
``attendee_name`` Full name of the ticket holder (or empty)
``attendee_name_*`` Name parts of the ticket holder, depending on configuration, e.g. ``attendee_name_given_name`` or ``attendee_name_family_name``
``attendee_email`` E-mail address of the ticket holder (or empty)
@@ -61,7 +62,7 @@ Variable Description
``attendee_city`` City of the ticket holder's address (or empty)
``attendee_country`` Country code of the ticket holder's address (or empty)
``attendee_state`` State of the ticket holder's address (or empty)
``answer[XYZ]`` Answer to the custom question with identifier ``XYZ``
``answers[XYZ]`` Answer to the custom question with identifier ``XYZ``
``invoice_name`` Full name of the invoice address (or empty)
``invoice_name_*`` Name parts of the invoice address, depending on configuration, e.g. ``invoice_name_given_name`` or ``invoice_name_family_name``
``invoice_company`` Company of the invoice address (or empty)
@@ -90,8 +91,10 @@ Field Type Description
===================================== ========================== =======================================================
id integer Internal content ID
title multi-lingual string The content title (required)
internal_name string An optional name that is only used in the backend
content_type string The type of content, valid values are ``webinar``, ``video``, ``livestream``, ``link``, ``file``
url string The location of the digital content
file file A downloadable file. Either ``url`` or ``file`` must be ``null``.
description multi-lingual string A public description of the item. May contain Markdown
syntax and is not required.
available_from datetime The first date time at which this content will be shown
@@ -143,6 +146,7 @@ API Endpoints
},
"content_type": "link",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"file": null,
"description": {
"en": "Watch our event live here on YouTube!"
},
@@ -190,6 +194,7 @@ API Endpoints
},
"content_type": "link",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"file": null,
"description": {
"en": "Watch our event live here on YouTube!"
},
@@ -228,6 +233,7 @@ API Endpoints
},
"content_type": "link",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"file": null,
"description": {
"en": "Watch our event live here on YouTube!"
},
@@ -254,6 +260,7 @@ API Endpoints
},
"content_type": "link",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"file": null,
"description": {
"en": "Watch our event live here on YouTube!"
},
@@ -308,6 +315,7 @@ API Endpoints
},
"content_type": "link",
"url": "https://mywebsite.com",
"file": null,
"description": {
"en": "Watch our event live here on YouTube!"
},

734
doc/plugins/exhibitors.rst Normal file
View File

@@ -0,0 +1,734 @@
Exhibitors
==========
The exhibitors plugin allows to manage exhibitors at your trade show or conference. After signing up your exhibitors
in the system, you can assign vouchers to exhibitors and give them access to the data of these vouchers. The exhibitors
module is also the basis of the pretixLEAD lead scanning application.
.. note:: On pretix Hosted, using the lead scanning feature of the exhibitors plugin can add additional costs
depending on your contract.
The plugin exposes two APIs. One (REST API) is intended for bulk-data operations from the admin side, and one
(App API) that is used by the pretixLEAD app.
REST API
---------
The REST API for exhibitors requires the usual :ref:`rest-auth`.
Resources
"""""""""
The exhibitors plugin provides a HTTP API that allows you to create new exhibitors.
The exhibitors resource contains the following public fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
id integer Internal exhibitor ID in pretix
name string Exhibitor name
internal_id string Can be used for the ID in your exhibition system, your customer ID, etc. Can be ``null``. Maximum 255 characters.
contact_name string Contact person (or ``null``)
contact_name_parts object of strings Decomposition of contact name (i.e. given name, family name)
contact_email string Contact person email address (or ``null``)
booth string Booth number (or ``null``). Maximum 100 characters.
locale string Locale for communication with the exhibitor (or ``null``).
access_code string Access code for the exhibitor to access their data or use the lead scanning app (read-only).
allow_lead_scanning boolean Enables lead scanning app
allow_lead_access boolean Enables access to data gathered by the lead scanning app
allow_voucher_access boolean Enables access to data gathered by exhibitor vouchers
comment string Internal comment, not shown to exhibitor
===================================== ========================== =======================================================
You can also access the scanned leads through the API which contains the following public fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
attendee_order string Order code of the order the scanned attendee belongs to
attendee_positionid integer ``positionid`` if the attendee within the order specified by ``attendee_order``
rating integer A rating of 0 to 5 stars (or ``null``)
notes string A note taken by the exhibitor after scanning
tags list of strings Additional tags selected by the exhibitor
first_upload datetime Date and time of the first upload of this lead
data list of objects Attendee data set that may be shown to the exhibitor based o
the event's configuration. Each entry contains the fields ``id``,
``label``, ``value``, and ``details``. ``details`` is usually empty
except in a few cases where it contains an additional list of objects
with ``value`` and ``label`` keys (e.g. splitting of names).
device_name string User-defined name for the device used for scanning (or ``null``).
===================================== ========================== =======================================================
Endpoints
"""""""""
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/exhibitors/
Returns a list of all exhibitors configured for an event.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/exhibitors/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"name": "Aperture Science",
"internal_id": null,
"contact_name": "Dr Cave Johnson",
"contact_name_parts": {
"_scheme": "salutation_title_given_family",
"family_name": "Johnson",
"given_name": "Cave",
"salutation": "",
"title": "Dr"
},
"contact_email": "johnson@as.example.org",
"booth": "A2",
"locale": "de",
"access_code": "VKHZ2FU8",
"allow_lead_scanning": true,
"allow_lead_access": true,
"allow_voucher_access": true,
"comment": ""
}
]
}
:query page: The page number in case of a multi-page result set, default is 1
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the event to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer or event does not exist **or** you have no permission to view it.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/exhibitors/(id)/
Returns information on one exhibitor, identified by its ID.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/exhibitors/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"id": 1,
"name": "Aperture Science",
"internal_id": null,
"contact_name": "Dr Cave Johnson",
"contact_name_parts": {
"_scheme": "salutation_title_given_family",
"family_name": "Johnson",
"given_name": "Cave",
"salutation": "",
"title": "Dr"
},
"contact_email": "johnson@as.example.org",
"booth": "A2",
"locale": "de",
"access_code": "VKHZ2FU8",
"allow_lead_scanning": true,
"allow_lead_access": true,
"allow_voucher_access": true,
"comment": ""
}
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
:param id: The ``id`` field of the exhibitor to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event/exhibitor does not exist **or** you have no permission to view it.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/exhibitors/(id)/leads/
Returns a list of all scanned leads of an exhibitor.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/exhibitors/1/leads/ 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": [
{
"attendee_order": "T0E7E",
"attendee_positionid": 1,
"rating": 1,
"notes": "",
"tags": [],
"first_upload": "2021-07-06T11:03:31.414491+01:00",
"data": [
{
"id": "attendee_name",
"label": "Attendee name",
"value": "Peter Miller",
"details": [
{"label": "Given name", "value": "Peter"},
{"label": "Family name", "value": "Miller"},
]
}
]
}
]
}
:query page: The page number in case of a multi-page result set, default is 1
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the event to fetch
:param id: The ``id`` field of the exhibitor to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer or event or exhibitor does not exist **or** you have no permission to view it.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/exhibitors/(id)/vouchers/
Returns a list of all vouchers connected to an exhibitor. The response contains the same data as described in
:ref:`rest-vouchers`.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/exhibitors/1/vouchers/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"code": "43K6LKM37FBVR2YG",
"max_usages": 1,
"redeemed": 0,
"valid_until": null,
"block_quota": false,
"allow_ignore_quota": false,
"price_mode": "set",
"value": "12.00",
"item": 1,
"variation": null,
"quota": null,
"tag": "testvoucher",
"comment": "",
"seat": null,
"subevent": null
}
]
}
:query page: The page number in case of a multi-page result set, default is 1
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the event to fetch
:param id: The ``id`` field of the exhibitor to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer or event or exhibitor does not exist **or** you have no permission to view it.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/exhibitors/(id)/vouchers/attach/
Attaches an **existing** voucher to an exhibitor. You need to send either the ``id`` **or** the ``code`` field of
the voucher.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/exhibitors/1/vouchers/attach/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
{
"id": 15
}
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/exhibitors/1/vouchers/attach/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
{
"code": "43K6LKM37FBVR2YG"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{}
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the event to use
:param id: The ``id`` field of the exhibitor to use
:statuscode 200: no error
:statuscode 400: Invalid data sent, e.g. voucher does not exist
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer or event or exhibitor does not exist **or** you have no permission to view it.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/exhibitors/
Create a new exhibitor.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/exhibitors/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 166
{
"name": "Aperture Science",
"internal_id": null,
"contact_name_parts": {
"_scheme": "salutation_title_given_family",
"family_name": "Johnson",
"given_name": "Cave",
"salutation": "",
"title": "Dr"
},
"contact_email": "johnson@as.example.org",
"booth": "A2",
"locale": "de",
"access_code": "VKHZ2FU8",
"allow_lead_scanning": true,
"allow_lead_access": true,
"allow_voucher_access": true,
"comment": ""
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
{
"id": 1,
"name": "Aperture Science",
"internal_id": null,
"contact_name": "Dr Cave Johnson",
"contact_name_parts": {
"_scheme": "salutation_title_given_family",
"family_name": "Johnson",
"given_name": "Cave",
"salutation": "",
"title": "Dr"
},
"contact_email": "johnson@as.example.org",
"booth": "A2",
"locale": "de",
"access_code": "VKHZ2FU8",
"allow_lead_scanning": true,
"allow_lead_access": true,
"allow_voucher_access": true,
"comment": ""
}
:param organizer: The ``slug`` field of the organizer to create new exhibitor for
:param event: The ``slug`` field of the event to create new exhibitor for
:statuscode 201: no error
:statuscode 400: The exhibitor could not be created due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to create exhibitors.
.. http:patch:: /api/v1/organizers/(organizer)/events/(event)/exhibitors/(id)/
Update an exhibitor. You can also use ``PUT`` instead of ``PATCH``. With ``PUT``, you have to provide all fields of
the resource, other fields will be reset to default. With ``PATCH``, you only need to provide the fields that you
want to change.
**Example request**:
.. sourcecode:: http
PATCH /api/v1/organizers/bigevents/events/sampleconf/digitalcontents/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 34
{
"internal_id": "ABC"
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: text/javascript
{
"id": 1,
"name": "Aperture Science",
"internal_id": "ABC",
"contact_name": "Dr Cave Johnson",
"contact_name_parts": {
"_scheme": "salutation_title_given_family",
"family_name": "Johnson",
"given_name": "Cave",
"salutation": "",
"title": "Dr"
},
"contact_email": "johnson@as.example.org",
"booth": "A2",
"locale": "de",
"access_code": "VKHZ2FU8",
"allow_lead_scanning": true,
"allow_lead_access": true,
"allow_voucher_access": true,
"comment": ""
}
:param organizer: The ``slug`` field of the organizer to modify
:param event: The ``slug`` field of the event to modify
:param id: The ``id`` field of the exhibitor to modify
:statuscode 200: no error
:statuscode 400: The exhibitor could not be modified due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event/exhibitor does not exist **or** you have no permission to change it.
.. http:delete:: /api/v1/organizers/(organizer)/events/(event)/exhibitors/(id)/
Delete an exhibitor.
.. warning:: This deletes all lead scan data and removes all connections to vouchers (the vouchers are not deleted).
**Example request**:
.. sourcecode:: http
DELETE /api/v1/organizers/bigevents/events/sampleconf/exhibitors/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 204 No Content
Vary: Accept
:param organizer: The ``slug`` field of the organizer to modify
:param event: The ``slug`` field of the event to modify
:param id: The ``id`` field of the exhibitor to delete
:statuscode 204: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event/exhibitor does not exist **or** you have no permission to change it
App API
-------
The App API is used for communication between the pretixLEAD app and the pretix server.
.. warning:: We consider this an internal API, it is not intended for external use. You may still use it, but
our :ref:`compatibility commitment <rest-compat>` does not apply.
Authentication
""""""""""""""
Every exhibitor has an "access code", usually consisting of 8 alphanumeric uppercase characters.
This access code is communicated to event exhibitors by the event organizers, so this is also what
exhibitors should enter into a login screen.
All API requests need to contain this access code as a header like this::
Authorization: Exhibitor ABCDE123
Exhibitor profile
"""""""""""""""""
Upon login and in regular intervals after that, the API should fetch the exhibitors profile.
This serves two purposes:
* Checking if the authorization code is actually valid
* Obtaining information that can be shown in the app
The resource consists of the following fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
name string Exhibitor name
booth string Booth number (or ``null``)
event object Object describing the event
├ name multi-lingual string Event name
├ imprint_url string URL to legal notice page. If not ``null``, a button in the app should link to this page.
├ privacy_url string URL to privacy notice page. If not ``null``, a button in the app should link to this page.
├ help_url string URL to help page. If not ``null``, a button in the app should link to this page.
├ terms_url string URL to terms of service. If not ``null``, a button in the app should link to this page.
├ logo_url string URL to event logo. If not ``null``, this logo may be shown in the app.
├ slug string Event short form
└ organizer string Organizer short form
notes boolean Specifies whether the exhibitor is allowed to take notes on leads
tags list of strings List of tags the exhibitor can assign to their leads
scan_types list of objects Only used for a special case, fixed value that external API consumers should ignore
===================================== ========================== =======================================================
.. http:get:: /exhibitors/api/v1/profile
**Example request:**
.. sourcecode:: http
GET /exhibitors/api/v1/profile HTTP/1.1
Authorization: Exhibitor ABCDE123
Accept: application/json, text/javascript
**Example response:**
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"name": "Aperture Science",
"booth": "A2",
"event": {
"name": {"en": "Sample conference", "de": "Beispielkonferenz"},
"slug": "bigevents",
"imprint_url": null,
"privacy_url": null,
"help_url": null,
"terms_url": null,
"logo_url": null,
"organizer": "sampleconf"
},
"notes": true,
"tags": ["foo", "bar"],
"scan_types": [
{
"key": "lead",
"label": "Lead Scanning"
}
]
}
:statuscode 200: no error
:statuscode 401: Invalid authentication code
Submitting a lead
"""""""""""""""""
After a ticket/badge is scanned, it should immediately be submitted to the server
so the scan is stored and information about the person can be shown in the app. The same
code can be submitted multiple times, so it's no problem to just submit it again after the
exhibitor set a note or a rating (0-5) inside the app.
On the request, you should set the following properties:
* ``code`` with the scanned barcode
* ``notes`` with the exhibitor's notes
* ``scanned`` with the date and time of the actual scan (not the time of the upload)
* ``scan_type`` set to ``lead`` statically
* ``tags`` with the list of selected tags
* ``rating`` with the rating assigned by the exhibitor
* ``device_name`` with a user-specified name of the device used for scanning (max. 190 characters), or ``null``
If you submit ``tags`` and ``rating`` to be ``null`` and ``notes`` to be ``""``, the server
responds with the previously saved information and will not delete that information. If you
supply other values, the information saved on the server will be overridden.
The response will also contain ``tags``, ``rating``, and ``notes``. Additionally,
it will include ``attendee`` with a list of ``fields`` that can be shown to the
user. Each field has an internal ``id``, a human-readable ``label``, and a ``value`` (all strings).
Note that the ``fields`` array can contain any number of dynamic keys!
Depending on the exhibitors permission and event configuration this might be empty,
or contain lots of details. The app should dynamically show these values (read-only)
with the labels sent by the server.
The request for this looks like this:
.. http:post:: /exhibitors/api/v1/leads/
**Example request:**
.. sourcecode:: http
POST /exhibitors/api/v1/leads/ HTTP/1.1
Authorization: Exhibitor ABCDE123
Accept: application/json, text/javascript
Content-Type: application/json
{
"code": "qrcodecontent",
"notes": "Great customer, wants our newsletter",
"scanned": "2020-10-18T12:24:23.000+00:00",
"scan_type": "lead",
"tags": ["foo"],
"rating": 4,
"device_name": "DEV1"
}
**Example response:**
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
{
"attendee": {
"fields": [
{
"id": "attendee_name",
"label": "Name",
"value": "Jon Doe",
"details": [
{"label": "Given name", "value": "John"},
{"label": "Family name", "value": "Doe"},
]
},
{
"id": "attendee_email",
"label": "Email",
"value": "test@example.com",
"details": []
}
]
},
"rating": 4,
"tags": ["foo"],
"notes": "Great customer, wants our newsletter"
}
:statuscode 200: No error, leads was not scanned for the first time
:statuscode 201: No error, leads was scanned for the first time
:statuscode 400: Invalid data submitted
:statuscode 401: Invalid authentication code
You can also fetch existing leads (if you are authorized to do so):
.. http:get:: /exhibitors/api/v1/leads/
**Example request:**
.. sourcecode:: http
GET /exhibitors/api/v1/leads/ HTTP/1.1
Authorization: Exhibitor ABCDE123
Accept: application/json, text/javascript
**Example response:**
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"attendee": {
"fields": [
{
"id": "attendee_name",
"label": "Name",
"value": "Jon Doe",
"details": [
{"label": "Given name", "value": "John"},
{"label": "Family name", "value": "Doe"},
]
},
{
"id": "attendee_email",
"label": "Email",
"value": "test@example.com",
"details": []
}
]
},
"rating": 4,
"tags": ["foo"],
"notes": "Great customer, wants our newsletter"
}
]
}
:statuscode 200: No error
:statuscode 401: Invalid authentication code
:statuscode 403: Not permitted to access bulk data

View File

@@ -0,0 +1,301 @@
Secrets Import
==============
Usually, pretix generates ticket secrets (i.e. the QR code used for scanning) itself. You can read more about this
process at :ref:`secret_generators`.
With the "Secrets Import" plugin, you can upload your own list of secrets to be used instead. This is useful for
integrating with third-party check-in systems.
API Resource description
-------------------------
The secrets import plugin provides a HTTP API that allows you to create new secrets.
The imported secret resource contains the following public fields:
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
id integer Internal ID of the secret
secret string Actual string content of the secret (QR code content)
used boolean Whether the secret was already used for a ticket. If ``true``,
the secret can no longer be deleted. Secrets are never used
twice, even if an order is canceled or deleted.
item integer Internal ID of a product, or ``null``. If set, the secret
will only be used for tickets of this product.
variation integer Internal ID of a product variation, or ``null``. If set, the secret
will only be used for tickets of this product variation.
subevent integer Internal ID of an event series date, or ``null``. If set, the secret
will only be used for tickets of this event series date.
===================================== ========================== =======================================================
API Endpoints
-------------
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/imported_secrets/
Returns a list of all secrets imported for an event.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/imported_secrets/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"secret": "foobar",
"used": false,
"item": null,
"variation": null,
"subevent": null
}
]
}
:query page: The page number in case of a multi-page result set, default is 1
:param organizer: The ``slug`` field of a valid organizer
:param event: The ``slug`` field of the event to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer or event does not exist **or** you have no permission to view it.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/imported_secrets/(id)/
Returns information on one secret, identified by its ID.
**Example request**:
.. sourcecode:: http
GET /api/v1/organizers/bigevents/events/sampleconf/imported_secrets/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"id": 1,
"secret": "foobar",
"used": false,
"item": null,
"variation": null,
"subevent": null
}
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
:param id: The ``id`` field of the secret to fetch
:statuscode 200: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event/secret does not exist **or** you have no permission to view it.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/imported_secrets/
Create a new secret.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/imported_secrets/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 166
{
"secret": "foobar",
"used": false,
"item": null,
"variation": null,
"subevent": null
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 201 Created
Vary: Accept
Content-Type: application/json
{
"id": 1,
"secret": "foobar",
"used": false,
"item": null,
"variation": null,
"subevent": null
}
:param organizer: The ``slug`` field of the organizer to a create new secret for
:param event: The ``slug`` field of the event to create a new secret for
:statuscode 201: no error
:statuscode 400: The secret could not be created due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to create secrets.
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/imported_secrets/bulk_create/
Create new secrets in bulk (up to 500 per request). The request either succeeds or fails entirely.
**Example request**:
.. sourcecode:: http
POST /api/v1/organizers/bigevents/events/sampleconf/imported_secrets/bulk_create/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 166
[
{
"secret": "foobar",
"used": false,
"item": null,
"variation": null,
"subevent": null
},
{
"secret": "baz",
"used": false,
"item": null,
"variation": null,
"subevent": null
}
]
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
[
{
"id": 1,
"secret": "foobar",
"used": false,
"item": null,
"variation": null,
"subevent": null
},
{
"id": 2,
"secret": "baz",
"used": false,
"item": null,
"variation": null,
"subevent": null
}
]
:param organizer: The ``slug`` field of the organizer to create new secrets for
:param event: The ``slug`` field of the event to create new secrets for
:statuscode 201: no error
:statuscode 400: The secrets could not be created due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event does not exist **or** you have no permission to create secrets.
.. http:patch:: /api/v1/organizers/(organizer)/events/(event)/imported_secrets/(id)/
Update a secret. You can also use ``PUT`` instead of ``PATCH``. With ``PUT``, you have to provide all fields of
the resource, other fields will be reset to default. With ``PATCH``, you only need to provide the fields that you
want to change.
**Example request**:
.. sourcecode:: http
PATCH /api/v1/organizers/bigevents/events/sampleconf/imported_secrets/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
Content-Type: application/json
Content-Length: 34
{
"item": 2
}
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: text/javascript
{
"id": 1,
"secret": "foobar",
"used": false,
"item": 2,
"variation": null,
"subevent": null
}
:param organizer: The ``slug`` field of the organizer to modify
:param event: The ``slug`` field of the event to modify
:param id: The ``id`` field of the secret to modify
:statuscode 200: no error
:statuscode 400: The secret could not be modified due to invalid submitted data.
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event/secret does not exist **or** you have no permission to change it.
.. http:delete:: /api/v1/organizers/(organizer)/events/(event)/imported_secrets/(id)/
Delete a secret. You can only delete secrets that have not yet been used.
**Example request**:
.. sourcecode:: http
DELETE /api/v1/organizers/bigevents/events/sampleconf/imported_secrets/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 204 No Content
Vary: Accept
:param organizer: The ``slug`` field of the organizer to modify
:param event: The ``slug`` field of the event to modify
:param id: The ``id`` field of the secret to delete
:statuscode 204: no error
:statuscode 401: Authentication failure
:statuscode 403: The requested organizer/event/secret does not exist **or** you have no permission to change it **or** the secret has already been used

View File

@@ -1,3 +1,5 @@
.. _`plugin-docs`:
Plugin documentation
====================
@@ -10,11 +12,14 @@ If you want to **create** a plugin, please go to the
:maxdepth: 2
list
pretixdroid
banktransfer
ticketoutputpdf
badges
campaigns
certificates
digital
exhibitors
shipping
imported_secrets
webinar
presale-saml

View File

@@ -5,6 +5,6 @@ List of plugins
===============
A detailed list of plugins that are available for pretix can be found on the
`project website`_.
`pretix Marketplace`_.
.. _project website: https://pretix.eu/about/en/plugins
.. _pretix Marketplace: https://marketplace.pretix.eu

View File

@@ -0,0 +1,405 @@
.. highlight:: ini
.. spelling::
IdP
skIDentity
ePA
NPA
Presale SAML Authentication
===========================
The Presale SAML Authentication plugin is an advanced plugin, which most event
organizers will not need to use. However, for the select few who do require
strong customer authentication that cannot be covered by the built-in customer
account functionality, this plugin allows pretix to connect to a SAML IdP and
perform authentication and retrieval of user information.
Usage of the plugin is governed by two separate sets of settings: The plugin
installation, the Service Provider (SP) configuration and the event
configuration.
Plugin installation and initial configuration
---------------------------------------------
.. note:: If you are a customer of our hosted `pretix.eu`_ offering, you can
skip this section.
The plugin is installed as any other plugin in the pretix ecosystem. As a
pretix system administrator, please follow the instructions in the the
:ref:`Administrator documentation <admindocs>`.
Once installed, you will need to assess, if you want (or need) your pretix
instance to be a single SP for all organizers and events or if every event
organizer has to provide their own SP.
Take the example of a university which runs pretix under an pretix Enterprise
agreement. Since they only provide ticketing services to themselves (every
organizer is still just a different department of the same university), a
single SP should be enough.
On the other hand, a reseller such as `pretix.eu`_ who services a multitude
of clients would not work that way. Here, every organizer is a separate
legal entity and as such will also need to provide their own SP configuration:
Company A will expect their SP to reflect their company - and not a generalized
"pretix SP".
Once you have decided on the mode of operation, the :ref:`Configuration file
<config>` needs to be extended to reflect your choice.
Example::
[presale-saml]
level=global
``level``
``global`` to use only a single, system-wide SP, ``organizer`` for multiple
SPs, configured on the organizer-level. Defaults to ``organizer``.
Service Provider configuration
------------------------------
Global Level
^^^^^^^^^^^^
.. note:: If you are a customer of our hosted `pretix.eu`_ offering, you can
skip this section and follow the instructions on the upcoming
Organizer Level settings.
As a user with administrative privileges, please activate them by clicking the
`Admin Mode` button in the top right hand corner.
You should now see a new menu-item titled `SAML` appear.
Organizer Level
^^^^^^^^^^^^^^^
Navigate to the organizer settings in the pretix backend. In the navigation
bar, you will find a menu-item titled `SAML` if your user has the `Can
change organizer settings` permission.
.. note:: If you are a customer of our hosted `pretix.eu`_ offering, the menu
will only appear once one of our friendly customer service agents
has enabled the Presale SAML Authentication plugin for at least one
of your events. Feel free to get in touch with us!
Setting up the SP
^^^^^^^^^^^^^^^^^
No matter where your SP configuration lives, you will be greeted by a very
long list of fields of which almost all of them will need to be filled. Please
don't be discouraged - most of the settings don't need to be decided by yourself
and/or are already preset with a sensible default setting.
If you are not sure what setting you should choose for any of the fields, you
should reach out to your IdP operator as they can tell you exactly what the IdP
expects and - more importantly - supports.
``IdP Metadata URL``
Please provide the URL where your IdP outputs its metadata. For most IdPs,
this URL is static and the same for all SPs. If you are a member of the
DFN-AAI, you can find the meta-data for the `Test-, Basic- and
Advanced-Federation`_ on their website. Please do talk with your local
IdP operator though, as you might not even need to go through the DFN-AAI
and might just use your institutions local IdP which will also host their
metadata on a different URL.
The URL needs to be publicly accessible, as saving the settings form will
fail if the IdP metadata cannot be retrieved. pretix will also automatically
refresh the IdP metadata on a regular basis.
``SP Entity Id``
By default, we recommend that you use the system-proposed metadata-URL as
the Entity Id of your SP. However, if so desired or required by your IdP,
you can also set any other, arbitrary URL as the SP Entity Id.
``SP Name / SP Decription``
Most IdP will display the name and description of your SP to the users
during authentication. The description field can be used to explain to the
users how their data is being used.
``SP X.509 Certificate / SP X.509 Private Key``
Your SP needs a certificate and a private key for said certificate. Please
coordinate with your IdP, if you are supposed to generate these yourself or
if they are provided to you.
``SP X.509 New Certificate``
As certificates have an expiry date, they need to be renewed on a regular
basis. In order to facilitate the rollover from the expiring to the new
certificate, you can provide the new certificate already before the expiration
of the existing one. That way, the system will automatically use the correct
one. Once the old certificate has expired and is not used anymore at all,
you can move the new certificate into the slot of the normal certificate and
keep the new slot empty for your next renewal process.
``Requested Attributes``
An IdP can hold a variety of attributes of an authenticating user. While
your IdP will dictate which of the available attributes your SP can consume
in theory, you will still need to define exactly which attributes the SP
should request.
The notation is a JSON list of objects with 5 attributes each:
* ``attributeValue``: Can be defaulted to ``[]``.
* ``friendlyName``: String used in the upcoming event-level settings to
retrieve the attributes data.
* ``isRequired``: Boolean indicating whether the IdP must enforce the
transmission of this attribute. In most cases, ``true`` is the best
choice.
* ``name``: String of the internal, technical name of the requested
attribute. Often starting with ``urn:mace:dir:attribute-def:``,
``urn:oid:`` or ``http://``/``https://``.
* ``nameFormat``: String describing the type of ``name`` that has been
set in the previous section. Often starting with
``urn:mace:shibboleth:1.0:`` or ``urn:oasis:names:tc:SAML:2.0:``.
Your IdP can provide you with a list of available attributes. See below
for a sample configuration in an academic context.
Note, that you can have multiple attributes with the same ``friendlyName``
but different ``name``s. This is often used in systems, where the same
information (for example a persons name) is saved in different fields -
for example because one institution is returning SAML 1.0 and other
institutions are returning SAML 2.0 style attributes. Typically, this only
occurs in mix environments like the DFN-AAI with a large number of
participants. If you are only using your own institutions IdP and not
authenticating anyone outside of your realm, this should not be a common
sight.
``Encrypt/Sign/Require ...``
Does what is says on the box - please inquire with your IdP for the
necessary settings. Most settings can be turned on as they increase security,
however some IdPs might stumble over some of them.
``Signature / Digest Algorithm``
Please chose appropriate algorithms, that both pretix/your SP and the IdP
can communicate with. A common source of issues when connecting to a
Shibboleth-based IdP is the Digest Algorithm: pretix does not support
``http://www.w3.org/2009/xmlenc11#rsa-oaep`` and authentication will fail
if the IdP enforces this.
``Technical/Support Contacts``
Those contacts are encoded into the SPs public meta data and might be
displayed to users having trouble authenticating. It is recommended to
provide a dedicated point of contact for technical issues, as those will
be the ones to change the configuration for the SP.
Event / Authentication configuration
------------------------------------
Basic settings
^^^^^^^^^^^^^^
Once the plugin has been enabled for a pretix event using the Plugins-menu from
the event's settings, a new *SAML* menu item will show up.
On this page, the actual authentication can be configured.
``Checkout Explanation``
Since most users probably won't be familiar with why they have to authenticate
to buy a ticket, you can provide them a small blurb here. Markdown is supported.
``Attribute RegEx``
By default, any successful authentication with the IdP will allow the user to
proceed with their purchase. Should the allowed audience needed to be restricted
further, a set of regular Expressions can be used to do this.
An Attribute RegEx of ``{}`` will allow any authenticated user to pass.
A RegEx of ``{ "affiliation": "^(employee@pretix.eu|staff@pretix.eu)$" }`` will
only allow user to pass which have the ``affiliation`` attribute and whose
attribute either matches ``employee@pretix.eu`` or ``staff@pretix.eu``.
Please make sure that the attribute you are querying is also requested from the
IdP in the first place - for a quick check you can have a look at the top of
the page where all currently configured attributes are listed.
``RegEx Fail Explanation``
Only used in conjunction with the above Attribute RegEx. Should the user not
pass the restrictions imposed by the regular expression, the user is shown
this error-message.
If you are - for example in an university context - restricting access to
students only, you might want to explain here that Employees are not allowed
to book tickets.
``Ticket Secret SAML Attribute``
In very specific instances, it might be desirable that the ticket-secret is
not the randomly one generated by pretix but rather based on one of the
users attributes - for example their unique ID or access card number.
To achieve this, the name of a SAML-attribute can be specified here.
It is however necessary to note, that even with this setting in use,
ticket-secrets need to be unique. This is why when this setting is enabled,
the default, pretix-generated ticket-secret is prefixed with the attributes
value.
Example: A users ``cardid`` attribute has the value of ``01189998819991197253``.
The default random ticket secret would have been
``yczygpw9877akz2xwdhtdyvdqwkv7npj``. The resulting new secret will now be
``01189998819991197253_yczygpw9877akz2xwdhtdyvdqwkv7npj``.
That way, the ticket secret is still unique, but when checking into an event,
the user can easily be searched and found using their identifier.
IdP-provided E-Mail addresses, names
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
By default, pretix will only authenticate the user and not process the received
data any further.
However, there are a few exceptions to this rule.
There are a few `magic` attributes that pretix will use to automatically populate
the corresponding fields within the checkout process **and lock them out from
user editing**.
* ``givenName`` and ``sn``: If both of those attributes are present and pretix
is configured to collect the users name, these attributes' values are used
for the given and family name respectively.
* ``email``: If this attribute is present, the E-Mail-address of the users will
be set to the one transmitted through the attributes.
The latter might pose a problem, if the IdP is transmitting an ``email`` attribute
which does contain a system-level mail address which is only used as an internal
identifier but not as a real mailbox. In this case, please consider setting the
``friendlyName`` of the attribute to a different value than ``email`` or removing
this field from the list of requested attributes altogether.
Saving attributes to questions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
By setting the ``internal identifier`` of a user-defined question to the same name
as a SAML attribute, pretix will save the value of said attribute into the question.
All the same as in the above section on E-Mail addresses, those fields become
non-editable by the user.
Please be aware that some specialty question types might not be compatible with
the SAML attributes due to specific format requirements. If in doubt (or if the
checkout fails/the information is not properly saved), try setting the question
type to a simple type like "Text (one line)".
Notes and configuration examples
--------------------------------
Requesting SAML 1.0 and 2.0 attributes from an academic IdP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This requests the ``eduPersonPrincipalName`` (also sometimes called EPPN),
``email``, ``givenName`` and ``sn`` both in SAML 1.0 and SAML 2.0 attributes.
.. sourcecode:: json
[
{
"attributeValue": [],
"friendlyName": "eduPersonPrincipalName",
"isRequired": true,
"name": "urn:mace:dir:attribute-def:eduPersonPrincipalName",
"nameFormat": "urn:mace:shibboleth:1.0:attributeNamespace:uri"
},
{
"attributeValue": [],
"friendlyName": "eduPersonPrincipalName",
"isRequired": true,
"name": "urn:oid:1.3.6.1.4.1.5923.1.1.1.6",
"nameFormat": "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
},
{
"attributeValue": [],
"friendlyName": "email",
"isRequired": true,
"name": "urn:mace:dir:attribute-def:mail",
"nameFormat": "urn:mace:shibboleth:1.0:attributeNamespace:uri"
},
{
"attributeValue": [],
"friendlyName": "email",
"isRequired": true,
"name": "urn:oid:0.9.2342.19200300.100.1.3",
"nameFormat": "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
},
{
"attributeValue": [],
"friendlyName": "givenName",
"isRequired": true,
"name": "urn:mace:dir:attribute-def:givenName",
"nameFormat": "urn:mace:shibboleth:1.0:attributeNamespace:uri"
},
{
"attributeValue": [],
"friendlyName": "givenName",
"isRequired": true,
"name": "urn:oid:2.5.4.42",
"nameFormat": "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
},
{
"attributeValue": [],
"friendlyName": "sn",
"isRequired": true,
"name": "urn:mace:dir:attribute-def:sn",
"nameFormat": "urn:mace:shibboleth:1.0:attributeNamespace:uri"
},
{
"attributeValue": [],
"friendlyName": "sn",
"isRequired": true,
"name": "urn:oid:2.5.4.4",
"nameFormat": "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
}
]
skIDentity IdP Metadata URL
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Since the IdP Metadata URL for `skIDentity`_ is not readily documented/visible
in their backend, we document it here:
``https://service.skidentity.de/fs/saml/metadata``
Requesting skIDentity attributes for electronic identity cards
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This requests the basic ``eIdentifier``, ``IDType``, ``IDIssuer``, and
``NameID`` from the `skIDentity`_ SAML service, which are available for
electronic ID cards such as the German ePA/NPA. (Other attributes such as
the name and address are available at additional cost from the IdP).
.. sourcecode:: json
[
{
"attributeValue": [],
"friendlyName": "eIdentifier",
"isRequired": true,
"name": "http://www.skidentity.de/att/eIdentifier",
"nameFormat": "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
},
{
"attributeValue": [],
"friendlyName": "IDType",
"isRequired": true,
"name": "http://www.skidentity.de/att/IDType",
"nameFormat": "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
},
{
"attributeValue": [],
"friendlyName": "IDIssuer",
"isRequired": true,
"name": "http://www.skidentity.de/att/IDIssuer",
"nameFormat": "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
},
{
"attributeValue": [],
"friendlyName": "NameID",
"isRequired": true,
"name": "http://www.skidentity.de/att/NameID",
"nameFormat": "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
}
]
.. _pretix.eu: https://pretix.eu
.. _Test-, Basic- and Advanced-Federation: https://doku.tid.dfn.de/en:metadata
.. _skIDentity: https://www.skidentity.de/

View File

@@ -1,368 +0,0 @@
pretixdroid HTTP API
====================
The pretixdroid plugin provides a HTTP API that the `pretixdroid Android app`_
uses to communicate with the pretix server.
.. warning:: This API is **DEPRECATED** and will probably go away soon. It is used **only** to serve the pretixdroid
Android app. There are no backwards compatibility guarantees on this API. We will not add features that
are not required for the Android App. There is a general-purpose :ref:`rest-api` that provides all
features that you need to check in.
.. versionchanged:: 1.12
Support for check-in-time questions has been added. The new API features are fully backwards-compatible and
negotiated live, so clients which do not need this feature can ignore the change. For this reason, the API version
has not been increased and is still set to 3.
.. versionchanged:: 1.13
Support for checking in unpaid tickets has been added.
.. http:post:: /pretixdroid/api/(organizer)/(event)/redeem/
Redeems a ticket, i.e. checks the user in.
**Example request**:
.. sourcecode:: http
POST /pretixdroid/api/demoorga/democon/redeem/?key=ABCDEF HTTP/1.1
Host: demo.pretix.eu
Accept: application/json, text/javascript
Content-Type: application/x-www-form-urlencoded
secret=az9u4mymhqktrbupmwkvv6xmgds5dk3&questions_supported=true
You **must** set the parameter secret.
You **must** set the parameter ``questions_supported`` to ``true`` **if** you support asking questions
back to the app operator. You **must not** set it if you do not support this feature. In that case, questions
will just be ignored.
You **may** set the additional parameter ``datetime`` in the body containing an ISO8601-encoded
datetime of the entry attempt. If you don"t, the current date and time will be used.
You **may** set the additional parameter ``force`` to indicate that the request should be logged
regardless of previous check-ins for the same ticket. This might be useful if you made the entry decision offline.
Questions will also always be ignored in this case (i.e. supplied answers will be saved, but no error will be
thrown if they are missing or invalid).
You **may** set the additional parameter ``nonce`` with a globally unique random value to identify this
check-in. This is meant to be used to prevent duplicate check-ins when you are just retrying after a connection
failure.
You **may** set the additional parameter ``ignore_unpaid`` to indicate that the check-in should be performed even
if the order is in pending state.
If questions are supported and required, you will receive a dictionary ``questions`` containing details on the
particular questions to ask. To answer them, just re-send your redemption request with additional parameters of
the form ``answer_<question>=<answer>``, e.g. ``answer_12=24``.
**Example successful response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: text/json
{
"status": "ok"
"version": 3,
"data": {
"secret": "az9u4mymhqktrbupmwkvv6xmgds5dk3",
"order": "ABCDE",
"item": "Standard ticket",
"item_id": 1,
"variation": null,
"variation_id": null,
"attendee_name": "Peter Higgs",
"attention": false,
"redeemed": true,
"checkin_allowed": true,
"addons_text": "Parking spot",
"paid": true
}
}
**Example response with required questions**:
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: text/json
{
"status": "incomplete"
"version": 3
"data": {
"secret": "az9u4mymhqktrbupmwkvv6xmgds5dk3",
"order": "ABCDE",
"item": "Standard ticket",
"item_id": 1,
"variation": null,
"variation_id": null,
"attendee_name": "Peter Higgs",
"attention": false,
"redeemed": true,
"checkin_allowed": true,
"addons_text": "Parking spot",
"paid": true
},
"questions": [
{
"id": 12,
"type": "C",
"question": "Choose a shirt size",
"required": true,
"position": 2,
"items": [1],
"options": [
{
"id": 24,
"answer": "M"
},
{
"id": 25,
"answer": "L"
}
]
}
]
}
**Example error response with data**:
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: text/json
{
"status": "error",
"reason": "already_redeemed",
"version": 3,
"data": {
"secret": "az9u4mymhqktrbupmwkvv6xmgds5dk3",
"order": "ABCDE",
"item": "Standard ticket",
"item_id": 1,
"variation": null,
"variation_id": null,
"attendee_name": "Peter Higgs",
"attention": false,
"redeemed": true,
"checkin_allowed": true,
"addons_text": "Parking spot",
"paid": true
}
}
**Example error response without data**:
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: text/json
{
"status": "error",
"reason": "unkown_ticket",
"version": 3
}
Possible error reasons:
* ``unpaid`` - Ticket is not paid for or has been refunded
* ``already_redeemed`` - Ticket already has been redeemed
* ``product`` - Tickets with this product may not be scanned at this device
* ``unknown_ticket`` - Secret does not match a ticket in the database
:query key: Secret API key
:statuscode 200: Valid request
:statuscode 404: Unknown organizer or event
:statuscode 403: Invalid authorization key
.. http:get:: /pretixdroid/api/(organizer)/(event)/search/
Searches for a ticket.
At most 25 results will be returned. **Queries with less than 4 characters will always return an empty result set.**
**Example request**:
.. sourcecode:: http
GET /pretixdroid/api/demoorga/democon/search/?key=ABCDEF&query=Peter HTTP/1.1
Host: demo.pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: text/json
{
"results": [
{
"secret": "az9u4mymhqktrbupmwkvv6xmgds5dk3",
"order": "ABCE6",
"item": "Standard ticket",
"variation": null,
"attendee_name": "Peter Higgs",
"redeemed": false,
"attention": false,
"checkin_allowed": true,
"addons_text": "Parking spot",
"paid": true
},
...
],
"version": 3
}
:query query: Search query
:query key: Secret API key
:statuscode 200: Valid request
:statuscode 404: Unknown organizer or event
:statuscode 403: Invalid authorization key
.. http:get:: /pretixdroid/api/(organizer)/(event)/download/
Download data for all tickets.
**Example request**:
.. sourcecode:: http
GET /pretixdroid/api/demoorga/democon/download/?key=ABCDEF HTTP/1.1
Host: demo.pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: text/json
{
"version": 3,
"results": [
{
"secret": "az9u4mymhqktrbupmwkvv6xmgds5dk3",
"order": "ABCE6",
"item": "Standard ticket",
"variation": null,
"attendee_name": "Peter Higgs",
"redeemed": false,
"attention": false,
"checkin_allowed": true,
"paid": true
},
...
],
"questions": [
{
"id": 12,
"type": "C",
"question": "Choose a shirt size",
"required": true,
"position": 2,
"items": [1],
"options": [
{
"id": 24,
"answer": "M"
},
{
"id": 25,
"answer": "L"
}
]
}
]
}
:query key: Secret API key
:statuscode 200: Valid request
:statuscode 404: Unknown organizer or event
:statuscode 403: Invalid authorization key
.. http:get:: /pretixdroid/api/(organizer)/(event)/status/
Returns status information, such as the total number of tickets and the
number of performed check-ins.
**Example request**:
.. sourcecode:: http
GET /pretixdroid/api/demoorga/democon/status/?key=ABCDEF HTTP/1.1
Host: demo.pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Content-Type: text/json
{
"checkins": 17,
"total": 42,
"version": 3,
"event": {
"name": "Demo Conference",
"slug": "democon",
"date_from": "2016-12-27T17:00:00Z",
"date_to": "2016-12-30T18:00:00Z",
"timezone": "UTC",
"url": "https://demo.pretix.eu/demoorga/democon/",
"organizer": {
"name": "Demo Organizer",
"slug": "demoorga"
},
},
"items": [
{
"name": "T-Shirt",
"id": 1,
"checkins": 1,
"admission": False,
"total": 1,
"variations": [
{
"name": "Red",
"id": 1,
"checkins": 1,
"total": 12
},
{
"name": "Blue",
"id": 2,
"checkins": 4,
"total": 8
}
]
},
{
"name": "Ticket",
"id": 2,
"checkins": 15,
"admission": True,
"total": 22,
"variations": []
}
]
}
:query key: Secret API key
:statuscode 200: Valid request
:statuscode 404: Unknown organizer or event
:statuscode 403: Invalid authorization key
.. _pretixdroid Android app: https://github.com/pretix/pretixdroid

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

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

10
doc/requirements.rtd.txt Normal file
View File

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

View File

@@ -1,5 +1,6 @@
-e ../src/
sphinx==2.3.*
jinja2==3.0.*
sphinx-rtd-theme
sphinxcontrib-httpdomain
sphinxcontrib-images

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

View File

@@ -17,6 +17,7 @@ bic
BIC
boolean
booleans
bugfix
cancelled
casted
Ceph
@@ -65,6 +66,7 @@ iterable
Jimdo
jwt
JWT
JWTs
libpretixprint
libsass
linters
@@ -77,6 +79,7 @@ mixin
mixins
multi
multidomain
multiplicator
namespace
namespaced
namespaces
@@ -86,7 +89,9 @@ nginx
nodejs
NotificationType
npm
OIDC
ons
OpenID
optimizations
overpayment
param
@@ -101,6 +106,7 @@ prepending
preprocessor
presale
pretix
pretixLEAD
pretixSCAN
pretixdroid
pretixPOS
@@ -130,6 +136,7 @@ serializer
serializers
sexualized
SQL
SSO
startup
stdout
stylesheet
@@ -156,6 +163,8 @@ untrusted
uptime
username
url
URI
URIs
validator
versa
versioning

View File

@@ -0,0 +1,210 @@
.. _customers:
Customer accounts
=================
By default, pretix only offers guest checkout, i.e. ticket buyers do not sign up and sign back in, but create a new
checkout session every time. In some situations it may be convenient to allow ticket buyers to create
accounts that they can later log in to again. Working with customer accounts is even required for some advanced
use cases such as described in the :ref:`seasontickets` article.
Enabling customer accounts
--------------------------
To enable customer accounts, head to your organizer page in the backend and then select "Settings" → "General" →
"Customer accounts" and turn on the checkbox "Allow customers to create accounts".
Using the other settings on the same tab you can fine-tune how the customer account system behaves:
.. thumbnail:: ../../screens/organizer/edit_customer.png
:align: center
:class: screenshot
Allow customers to log in with email address and password
In all simple setups, this option should be checked. If this checkbox is removed, it is impossible to log in or
sign up unless you connect a SSO provider (see below).
Match orders based on email address
If this option is selected, customers will see orders made with their email address within their account even if
they did not make those orders while logged in.
Name format, Allowed titles
This controls how we'll ask your customers for their name, similar to the respective settings on event level.
Managing customer accounts
--------------------------
After customer accounts have been enabled, you will find a new menu option "Customer accounts" in the organizer-level
main menu. The first sub-item, "Customers", allows you to search and inspect the list of your customer accounts, as well
as to create a new customer account from the backend:
.. thumbnail:: ../../screens/organizer/customers.png
:align: center
:class: screenshot
If you click on a customer ID, you can see all details of this customer account, including registration information,
active memberships, past ticket orders, and account history:
.. thumbnail:: ../../screens/organizer/customer.png
:align: center
:class: screenshot
You can also perform various actions from this view, such as:
- Send a password reset link
- Change registration information
- Anonymize the customer account (does not anonymize connected orders)
When creating or changing a customer, you will be presented with the following form:
.. thumbnail:: ../../screens/organizer/customer_edit.png
:align: center
:class: screenshot
Most fields, such as name, e-mail address, phone number, and language should be self-explanatory. The following fields
might require some explanation:
Account active
If this checkbox is removed, the customer will not be able to log in.
External identifier
This field can be used to cross-reference your customer database with other sources. For example, if the customer
already has a number in another system, you can insert that number here. This can be especially powerful if you
use our API for synchronization with an external system.
Verified email address
This checkbox signifies whether you have verified that this customer in fact controls the given email address.
This will automatically be checked after a successful registration or after a successful password reset. Before it
is checked, the customer will not be able to log in. You should usually not modify this field manually.
Notes
Entries in this field will only be visible to you and your team, not to the customer.
Single-Sign-On (SSO)
--------------------
"Single-Sign-On" (SSO) is a technical term for a situation in which a person can log in to multiple systems using just
one login. This can be convenient if you have multiple applications that are exposed to your customers: They won't have
to remember multiple passwords or understand how your application landscape is structured, they can just always log in
with the same credentials whenever they see your brand.
In this scenario, pretix can be **either** the "SSO provider" **or** the "SSO client".
If pretix is the SSO provider, pretix will be the central source of truth for your customer accounts and your other
applications can connect to pretix to use pretix's login functionality.
If pretix is the SSO client, one of your existing systems will be the source of truth for the customer accounts and
pretix will use that system's login functionality.
All SSO support for customer accounts in pretix is currently built on the `OpenID Connect`_ standard, a modern and
widely accepted standard for SSO in all industries.
Connecting SSO clients (pretix as the SSO provider)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To connect an external application as a SSO client, go to "Customer accounts" → "SSO clients" → "Create a new SSO client"
in your organizer account.
.. thumbnail:: ../../screens/organizer/customer_ssoclient_add.png
:align: center
:class: screenshot
You will need to fill out the following fields:
Active
If this checkbox is removed, the SSO client can not be used.
Application name
The name of your external application, e.g. "digital event marketplace".
Client type
For a server-side application which is able to store a secret that will be inaccessible to end users, chose
"confidential". For a client-side application, such as many mobile apps, choose "public".
Grant type
This value depends on the OpenID Connect implementation of your software.
Redirection URIs
One or multiple URIs that the user might be redirected to after the successful or failed login.
Allowed access scopes
The types of data the SSO client may access about the customer.
After you submitted all data, you will receive a client ID as well as a client secret. The client secret is shown
in the green success message and will only ever be shown once. If you need it again, use the option "Invalidate old
client secret and generate a new one".
You will need the client ID and client secret to configure your external application. The application will also likely
need some other information from you, such as your **issuer URI**. If you use pretix Hosted and your organizer account
does not have a custom domain, your issuer will be ``https://pretix.eu/myorgname``, where ``myorgname`` is the short
form of your organizer account. If you use a custom domain, such as ``tickets.mycompany.net``, then your issuer will be
``https://tickets.mycompany.net``.
Technical details
"""""""""""""""""
We implement `OpenID Connect Core 1.0`_, except for some optional parts that do not make sense for pretix or bring no
additional value. For example, we do not currently support encrypted tokens, offline access, refresh tokens, or passing
request parameters as JWTs.
We implement the provider metadata section from `OpenID Connect Discovery 1.0`_. You can find the endpoint relative
to the issuer URI as described above, for example ``http://pretix.eu/demo/.well-known/openid-configuration``.
We implement all three OpenID Connect Core flows:
- Authorization Code Flow (response type ``code``)
- Implicit Flow (response types ``id_token token`` and ``id_token``)
- Hybrid Flow (response types ``code id_token``, ``code id_token token``, and ``code token``)
We implement the response modes ``query`` and ``fragment``.
We currently offer the following scopes: ``openid``, ``profile``, ``email``, ``phone``
As well as the following standardized claims: ``iss``, ``aud``, ``exp``, ``iat``, ``auth_time``, ``nonce``, ``c_hash``,
``at_hash``, ``sub``, ``locale``, ``name``, ``given_name``, ``family_name``, ``middle_name``, ``nickname``, ``email``,
``email_verified``, ``phone_number``.
The various endpoints are located relative to the issuer URI as described above:
- Authorization: ``<issuer>/oauth2/v1/authorize``
- Token: ``<issuer>/oauth2/v1/token``
- User info: ``<issuer>/oauth2/v1/userinfo``
- Keys: ``<issuer>/oauth2/v1/keys``
We currently do not reproduce their documentation here as they follow the OpenID Connect and OAuth specifications
without any special behavior.
Connecting SSO providers (pretix as the SSO client)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To connect an external application as a SSO client, go to "Customer accounts" → "SSO providers" → "Create a new SSO provider"
in your organizer account.
.. thumbnail:: ../../screens/organizer/customer_ssoprovider_add.png
:align: center
:class: screenshot
The "Provider name" and "Login button label" is what we'll use to show the new login option to the user. For the actual
connection, we will require information such as the issuer URL, client ID, client secret, scope, and field (or claim)
names that you will receive from your SSO provider.
.. note::
If you want your customers to *only* use your SSO provider, it makes sense to turn off the "Allow customers to log in
with email address and password" settings option (see above).
Technical details
"""""""""""""""""
We assume that SSO providers fulfill the following requirements:
- Implementation according to `OpenID Connect Core 1.0`_.
- Published meta-data document at ``<issuer>/.well-known/openid-configuration`` as specified in `OpenID Connect Discovery 1.0`_.
- Support for Authorization code flow (``response_type=code``) with ``response_mode=query``.
- Support for client authentication using client ID and client secret and without public key cryptography.
.. _OpenID Connect: https://en.wikipedia.org/wiki/OpenID#OpenID_Connect_(OIDC)
.. _OpenID Connect Core 1.0: https://openid.net/specs/openid-connect-core-1_0.html
.. _OpenID Connect Discovery 1.0: https://openid.net/specs/openid-connect-discovery-1_0.html

View File

@@ -203,4 +203,4 @@ Then, please contact support@pretix.eu and we will enable DKIM for your domain o
.. _Sender Policy Framework: https://en.wikipedia.org/wiki/Sender_Policy_Framework
.. _SPF specification: http://www.openspf.org/SPF_Record_Syntax
.. _SPF specification: http://www.open-spf.org/SPF_Record_Syntax

View File

@@ -1,20 +1,44 @@
Use case: Group discounts
-------------------------
Often times, you want to give discounts for whole groups attending your event. pretix can't automatically discount based on volume, but there's still some ways you can set up group tickets.
Often times, you want to give discounts for whole groups attending your event.
Flexible group sizes
Automatic discounts
"""""""""""""""""""
pretix can automatically grant discounts if a certain condition is met, such as a specific group size. To set this up,
head to **Products**, **Discounts** in the event navigation and **Create a new discount**. You can choose a name so you
can later find this again. You can also optionally restrict the discount to a specific time frame or a specific sales
channel.
Next, either select **Apply to all products** or create a selection of products that are eligible for the discount.
For a **percentual group discount** similar to "if you buy at least 5 tickets, you get 20 percent off", set
**Minimum number of matching products** to "5" and **Percentual discount on matching products** to "20.00".
For a **buy-X-get-Y discount**, e.g. "if you buy 5 tickets, you get one free", set
**Minimum number of matching products** to "5", **Percentual discount on matching products** to "100.00", and
**Apply discount only to this number of matching products** to "1".
Fixed group packages
""""""""""""""""""""
If you want to give out discounted tickets to groups starting at a given size, but still billed per person, you can do so by creating a special **Group ticket** at the per-person price and set the **Minimum amount per order** option of the ticket to the minimal group size.
If you want to sell group tickets in fixed sizes, e.g. a table of eight at your gala dinner, you can use product bundles.
Assuming you already set up a ticket for admission of single persons, you then set up a second product **Table (8 persons)**
with a discounted full price. Then, head to the **Bundled products** tab of that product and add one bundle configuration
to include the single admission product **eight times**. Next, create an unlimited quota mapped to the new product.
This way, the purchase of a table will automatically create eight tickets, leading to a correct calculation of your total
quota and, as expected, eight persons on your check-in list. You can even ask for the individual names of the persons
during checkout.
Minimum order amount
""""""""""""""""""""
If you want to promote discounted group tickets in your price list, you can also do so by creating a special
**Group ticket** at the reduced per-person price and set the **Minimum amount per order** option of the ticket to the minimal
group size.
For more complex use cases, you can also use add-on products that can be chosen multiple times.
This way, your ticket can be bought an arbitrary number of times but no less than the given minimal amount per order.
Fixed group sizes
"""""""""""""""""
If you want to sell group tickets in fixed sizes, e.g. a table of eight at your gala dinner, you can use product bundles. Assuming you already set up a ticket for admission of single persons, you then set up a second product **Table (8 persons)** with a discounted full price. Then, head to the **Bundled products** tab of that product and add one bundle configuration to include the single admission product **eight times**. Next, create an unlimited quota mapped to the new product.
This way, the purchase of a table will automatically create eight tickets, leading to a correct calculation of your total quota and, as expected, eight persons on your check-in list. You can even ask for the individual names of the persons during checkout.

View File

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

View File

@@ -135,6 +135,10 @@ Alternatively, you can select one or more categories to be shown::
<pretix-widget event="https://pretix.eu/demo/democon/" categories="12,25"></pretix-widget>
Or variation IDs::
<pretix-widget event="https://pretix.eu/demo/democon/" variations="15,2,68"></pretix-widget>
Multi-event selection
---------------------
@@ -253,18 +257,21 @@ If you want, you can suppress us loading the widget and/or modify the user data
If you then later want to trigger loading the widgets, just call ``window.PretixWidget.buildWidgets()``.
Waiting for the widget to load
------------------------------
Waiting for the widget to load or close
---------------------------------------
If you want to run custom JavaScript once the widget is fully loaded, you can register a callback function. Note that
this function might be run multiple times, for example if you have multiple widgets on a page or if the user switches
e.g. from an event list to an event detail view::
If you want to run custom JavaScript once the widget is fully loaded or when it is closed, you can register callback
functions. Note that these function might be run multiple times, for example if you have multiple widgets on a page
or if the user switches e.g. from an event list to an event detail view::
<script type="text/javascript">
window.pretixWidgetCallback = function () {
window.PretixWidget.addLoadListener(function () {
console.log("Widget has loaded!");
});
window.PretixWidget.addCloseListener(function () {
console.log("Widget has been closed!");
});
}
</script>
@@ -309,6 +316,10 @@ Currently, the following attributes are understood by pretix itself:
always be modified. Note that this is not a security feature and can easily be overridden by users, so do not rely
on this for authentication.
* If ``data-consent="…"`` is given, the cookie consent mechanism will be initialized with consent for the given cookie
providers. All other providers will be disabled, no consent dialog will be shown. This is useful if you already
asked the user for consent and don't want them to be asked again. Example: ``data-consent="facebook,google_analytics"``
Any configured pretix plugins might understand more data fields. For example, if the appropriate plugins on pretix
Hosted or pretix Enterprise are active, you can pass the following fields:
@@ -400,7 +411,7 @@ Hosted or pretix Enterprise are active, you can pass the following fields:
};
</script>
If you use ```analytics.js` (Universal Analytics)::
If you use ``analytics.js`` (Universal Analytics)::
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
@@ -436,8 +447,4 @@ Hosted or pretix Enterprise are active, you can pass the following fields:
</script>
.. versionchanged:: 3.6
Dynamically opening the widget has been added in pretix 3.6.
.. _Let's Encrypt: https://letsencrypt.org/

View File

@@ -84,7 +84,9 @@ going to develop around pretix, for example connect to pretix through our API, y
- A voucher is a code that can be used for multiple purposes: To grant a discount to specific customers, to only
show certain products to certain customers, or to keep a seat open for someone specific even though you are
sold out. If a voucher is used to apply a discount, the price of the purchased product is reduced by the
discounted amount. Vouchers are connected to a specific event.
* - | |:gb:| **(Automatic) Discount**
| |:de:| (Automatischer) Rabatt
- Discounts can be used to automatically provide discounts to customers if their cart satisfies a certain condition.
* - | |:gb:| **Gift card**
| |:de:| Wertgutschein
- A :ref:`gift card <giftcards>` is a coupon representing an exact amount of money that can be used for purchases

View File

@@ -12,6 +12,7 @@ wanting to use pretix to sell tickets.
events/settings
events/structureguide
events/widget
customers/index
events/giftcards
faq
markdown

View File

@@ -1,6 +0,0 @@
build:
image: latest
python:
version: 3.6

View File

@@ -34,5 +34,7 @@ git push
# Unlock Weblate
for c in $COMPONENTS; do
wlc unlock $c;
done
for c in $COMPONENTS; do
wlc pull $c;
done

View File

@@ -13,6 +13,9 @@ recursive-include pretix/plugins/banktransfer/static *
recursive-include pretix/plugins/manualpayment/templates *
recursive-include pretix/plugins/manualpayment/static *
recursive-include pretix/plugins/paypal/templates *
recursive-include pretix/plugins/paypal/static *
recursive-include pretix/plugins/paypal2/templates *
recursive-include pretix/plugins/paypal2/static *
recursive-include pretix/plugins/pretixdroid/templates *
recursive-include pretix/plugins/pretixdroid/static *
recursive-include pretix/plugins/sendmail/templates *

View File

@@ -19,4 +19,4 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
__version__ = "4.4.0.dev0"
__version__ = "4.16.0.dev0"

View File

@@ -45,6 +45,8 @@ class PretixScanSecurityProfile(AllowListSecurityProfile):
allowlist = (
('GET', 'api-v1:version'),
('GET', 'api-v1:device.eventselection'),
('GET', 'api-v1:idempotency.query'),
('GET', 'api-v1:device.info'),
('POST', 'api-v1:device.update'),
('POST', 'api-v1:device.revoke'),
('POST', 'api-v1:device.roll'),
@@ -67,6 +69,8 @@ class PretixScanSecurityProfile(AllowListSecurityProfile):
('GET', 'api-v1:orderposition-pdf_image'),
('GET', 'api-v1:event.settings'),
('POST', 'api-v1:upload'),
('POST', 'api-v1:checkinrpc.redeem'),
('GET', 'api-v1:checkinrpc.search'),
)
@@ -76,6 +80,8 @@ class PretixScanNoSyncNoSearchSecurityProfile(AllowListSecurityProfile):
allowlist = (
('GET', 'api-v1:version'),
('GET', 'api-v1:device.eventselection'),
('GET', 'api-v1:idempotency.query'),
('GET', 'api-v1:device.info'),
('POST', 'api-v1:device.update'),
('POST', 'api-v1:device.revoke'),
('POST', 'api-v1:device.roll'),
@@ -96,6 +102,8 @@ class PretixScanNoSyncNoSearchSecurityProfile(AllowListSecurityProfile):
('GET', 'api-v1:orderposition-pdf_image'),
('GET', 'api-v1:event.settings'),
('POST', 'api-v1:upload'),
('POST', 'api-v1:checkinrpc.redeem'),
('GET', 'api-v1:checkinrpc.search'),
)
@@ -105,6 +113,8 @@ class PretixScanNoSyncSecurityProfile(AllowListSecurityProfile):
allowlist = (
('GET', 'api-v1:version'),
('GET', 'api-v1:device.eventselection'),
('GET', 'api-v1:idempotency.query'),
('GET', 'api-v1:device.info'),
('POST', 'api-v1:device.update'),
('POST', 'api-v1:device.revoke'),
('POST', 'api-v1:device.roll'),
@@ -126,6 +136,8 @@ class PretixScanNoSyncSecurityProfile(AllowListSecurityProfile):
('GET', 'api-v1:orderposition-pdf_image'),
('GET', 'api-v1:event.settings'),
('POST', 'api-v1:upload'),
('POST', 'api-v1:checkinrpc.redeem'),
('GET', 'api-v1:checkinrpc.search'),
)
@@ -135,6 +147,8 @@ class PretixPosSecurityProfile(AllowListSecurityProfile):
allowlist = (
('GET', 'api-v1:version'),
('GET', 'api-v1:device.eventselection'),
('GET', 'api-v1:idempotency.query'),
('GET', 'api-v1:device.info'),
('POST', 'api-v1:device.update'),
('POST', 'api-v1:device.revoke'),
('POST', 'api-v1:device.roll'),
@@ -151,6 +165,8 @@ class PretixPosSecurityProfile(AllowListSecurityProfile):
('GET', 'api-v1:ticketlayoutitem-list'),
('GET', 'api-v1:badgelayout-list'),
('GET', 'api-v1:badgeitem-list'),
('GET', 'api-v1:voucher-list'),
('GET', 'api-v1:voucher-detail'),
('GET', 'api-v1:order-list'),
('POST', 'api-v1:order-list'),
('GET', 'api-v1:order-detail'),
@@ -167,6 +183,8 @@ class PretixPosSecurityProfile(AllowListSecurityProfile):
('GET', 'api-v1:checkinlist-list'),
('POST', 'api-v1:checkinlistpos-redeem'),
('POST', 'plugins:pretix_posbackend:order.posprintlog'),
('POST', 'plugins:pretix_posbackend:order.poslock'),
('DELETE', 'plugins:pretix_posbackend:order.poslock'),
('DELETE', 'api-v1:cartposition-detail'),
('GET', 'api-v1:giftcard-list'),
('POST', 'api-v1:giftcard-transact'),
@@ -174,8 +192,12 @@ class PretixPosSecurityProfile(AllowListSecurityProfile):
('POST', 'plugins:pretix_posbackend:posreceipt-list'),
('POST', 'plugins:pretix_posbackend:posclosing-list'),
('POST', 'plugins:pretix_posbackend:posdebugdump-list'),
('POST', 'plugins:pretix_posbackend:posdebuglogentry-list'),
('POST', 'plugins:pretix_posbackend:posdebuglogentry-bulk-create'),
('GET', 'plugins:pretix_posbackend:poscashier-list'),
('POST', 'plugins:pretix_posbackend:stripeterminal.token'),
('POST', 'plugins:pretix_posbackend:stripeterminal.paymentintent'),
('PUT', 'plugins:pretix_posbackend:file.upload'),
('GET', 'api-v1:revokedsecrets-list'),
('GET', 'api-v1:event.settings'),
('GET', 'plugins:pretix_seating:event.event'),
@@ -183,6 +205,8 @@ class PretixPosSecurityProfile(AllowListSecurityProfile):
('GET', 'plugins:pretix_seating:event.plan'),
('GET', 'plugins:pretix_seating:selection.simple'),
('POST', 'api-v1:upload'),
('POST', 'api-v1:checkinrpc.redeem'),
('GET', 'api-v1:checkinrpc.search'),
)

View File

@@ -19,11 +19,17 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
import logging
import ujson
from rest_framework import exceptions
from rest_framework.response import Response
from rest_framework.views import exception_handler, status
from pretix.base.services.locking import LockTimeoutException
logger = logging.getLogger(__name__)
def custom_exception_handler(exc, context):
response = exception_handler(exc, context)
@@ -37,4 +43,7 @@ def custom_exception_handler(exc, context):
}
)
if isinstance(exc, exceptions.APIException):
logger.info(f'API Exception [{exc.status_code}]: {ujson.dumps(exc.detail)}')
return response

View File

@@ -0,0 +1,29 @@
# Generated by Django 3.2.12 on 2022-09-13 14:48
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0218_checkinlist_addon_match'),
('pretixapi', '0007_alter_webhookcall_target_url'),
]
operations = [
migrations.CreateModel(
name='WebHookCallRetry',
fields=[
('id', models.BigAutoField(primary_key=True, serialize=False)),
('retry_not_before', models.DateTimeField(auto_now_add=True)),
('retry_count', models.PositiveIntegerField(default=0)),
('action_type', models.CharField(max_length=255)),
('logentry', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='webhook_retries', to='pretixbase.logentry')),
('webhook', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='retries', to='pretixapi.webhook')),
],
options={
'unique_together': {('webhook', 'logentry')},
},
),
]

View File

@@ -0,0 +1,77 @@
# Generated by Django 3.2.16 on 2022-12-17 18:47
import uuid
import django.db.models.deletion
import oauth2_provider.generators
import oauth2_provider.models
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0226_itemvariationmetavalue'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('pretixapi', '0008_webhookcallretry'),
]
run_before = [
('oauth2_provider', '0002_auto_20190406_1805'),
]
operations = [
migrations.AddField(
model_name='oauthapplication',
name='algorithm',
field=models.CharField(default='', max_length=5),
),
migrations.AddField(
model_name='oauthgrant',
name='claims',
field=models.TextField(default=''),
preserve_default=False,
),
migrations.AddField(
model_name='oauthgrant',
name='code_challenge',
field=models.CharField(default='', max_length=128),
),
migrations.AddField(
model_name='oauthgrant',
name='code_challenge_method',
field=models.CharField(default='', max_length=10),
),
migrations.AddField(
model_name='oauthgrant',
name='nonce',
field=models.CharField(default='', max_length=255),
),
migrations.AlterField(
model_name='oauthapplication',
name='client_secret',
field=oauth2_provider.models.ClientSecretField(db_index=True, default=oauth2_provider.generators.generate_client_secret, max_length=255),
),
migrations.CreateModel(
name='OAuthIDToken',
fields=[
('id', models.BigAutoField(primary_key=True, serialize=False)),
('jti', models.UUIDField(default=uuid.uuid4, unique=True)),
('expires', models.DateTimeField()),
('scope', models.TextField()),
('created', models.DateTimeField(auto_now_add=True)),
('updated', models.DateTimeField(auto_now=True)),
('application', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.OAUTH2_PROVIDER_APPLICATION_MODEL)),
('organizers', models.ManyToManyField(to='pretixbase.Organizer')),
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pretixapi_oauthidtoken', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='oauthaccesstoken',
name='id_token',
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='access_token', to='pretixapi.oauthidtoken'),
),
]

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