Compare commits

..

89 Commits

Author SHA1 Message Date
Mira Weller
9099a38bc8 Use shorter OrderPosition.code 2024-09-24 12:43:48 +02:00
Mira Weller
7cb66879ba Add inline "json_script" as supported data source for select2 2024-09-23 18:47:09 +02:00
Mira Weller
29808ad92d Add full_code property to OrderPosition 2024-09-23 18:47:09 +02:00
dependabot[bot]
770c13a4f0 Update pypdf requirement from ==4.3.* to ==5.0.* (#4471)
Updates the requirements on [pypdf](https://github.com/py-pdf/pypdf) to permit the latest version.
- [Release notes](https://github.com/py-pdf/pypdf/releases)
- [Changelog](https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/py-pdf/pypdf/compare/4.3.0...5.0.0)

---
updated-dependencies:
- dependency-name: pypdf
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-19 11:34:23 +02:00
dependabot[bot]
5373d4d8ba Bump django-bootstrap3 from 24.2 to 24.3
Bumps [django-bootstrap3](https://github.com/zostera/django-bootstrap3) from 24.2 to 24.3.
- [Changelog](https://github.com/zostera/django-bootstrap3/blob/main/CHANGELOG.md)
- [Commits](https://github.com/zostera/django-bootstrap3/compare/v24.2...v24.3)

---
updated-dependencies:
- dependency-name: django-bootstrap3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-19 11:28:15 +02:00
Raphael Michel
42e673b5f6 Fix missing JS file name 2024-09-19 09:39:49 +02:00
Albizuri
7af2f2a87b Translations: Update Basque
Currently translated at 56.0% (3213 of 5737 strings)

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

powered by weblate
2024-09-18 16:25:32 +02:00
Tinna Sandström
e408521769 Translations: Update Swedish
Currently translated at 99.1% (5686 of 5736 strings)

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

powered by weblate
2024-09-18 16:25:32 +02:00
Raphael Michel
8ed0d36346 Fix another wrong waiting_list_active reference 2024-09-18 10:28:41 +02:00
Raphael Michel
14cbe99667 Stripe: Fix a leftover } 2024-09-17 17:54:57 +02:00
Raphael Michel
b059995eff Widget: Fix waiting list disable time based on subevent 2024-09-17 17:39:22 +02:00
Raphael Michel
100e8d0a4b Fix #4454 -- Resolve deprecation warning from celery 2024-09-17 13:36:35 +02:00
Raphael Michel
eb92e4d8e6 Render progress info on non-javascript fallback page for celery tasks (#4452)
* Render progress info on non-javascript fallback page for celery tasks

* Review notes
2024-09-17 13:29:27 +02:00
Raphael Michel
32d6ded003 Stricten password validation to match PCI DSS requirements (#4467)
* Stricten password validation to match PCI DSS requirements

* Review fix

* Fix a file header
2024-09-17 13:29:17 +02:00
Raphael Michel
aa07533693 Order import: Allow to set check-in attention and text (Z#23165806) (#4469) 2024-09-17 11:50:19 +02:00
dependabot[bot]
e7d01f91a6 Bump @babel/preset-env from 7.25.3 to 7.25.4 in /src/pretix/static/npm_dir (#4438)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.25.3 to 7.25.4.
- [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.25.4/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>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-17 11:42:33 +02:00
Raphael Michel
9616369f07 Formally deprecate eu_reverse_charge (#4470) 2024-09-17 11:39:32 +02:00
dependabot[bot]
af606090ba Update sentry-sdk requirement from ==2.13.* to ==2.14.* (#4455)
Updates the requirements on [sentry-sdk](https://github.com/getsentry/sentry-python) to permit the latest version.
- [Release notes](https://github.com/getsentry/sentry-python/releases)
- [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-python/compare/2.13.0...2.14.0)

---
updated-dependencies:
- dependency-name: sentry-sdk
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-16 16:46:28 +02:00
Svyatoslav
931f3eca1b Translations: Update Estonian
Currently translated at 0.1% (1 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Svyatoslav
36f306120e Translations: Update Latvian
Currently translated at 37.2% (2134 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Svyatoslav
a3ba0c97e9 Translations: Update Russian
Currently translated at 19.1% (1097 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Richard Schreiber
484d24b66c Translations: Add Estonian 2024-09-16 16:44:46 +02:00
Tinna Sandström
2d39d3cc8e Translations: Update Swedish
Currently translated at 99.1% (5686 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Kristian Feldsam
78b1adf423 Translations: Update Slovak
Currently translated at 29.3% (68 of 232 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Kristian Feldsam
c3eedcc396 Translations: Update Slovak
Currently translated at 92.5% (5307 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Tinna Sandström
682c328390 Translations: Update Swedish
Currently translated at 99.1% (5686 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Wikinaut
5230827f5e Translations: Update German
Currently translated at 100.0% (5736 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Arthur Nunes
dad9915435 Translations: Update Portuguese (Brazil)
Currently translated at 13.2% (759 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Wikinaut
a9d2c1eb34 Translations: Update German
Currently translated at 100.0% (5736 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Tinna Sandström
66fe45a478 Translations: Update Swedish
Currently translated at 86.2% (200 of 232 strings)

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

powered by weblate
2024-09-12 09:32:41 +02:00
Raphael Michel
24e2b1b9ab Import: Parse iso dates 2024-09-12 09:32:25 +02:00
Martin Gross
eebdce80cd OIDC: Respect token_endpoint_auth_methods_supported (Z#2164777) (#4459) 2024-09-11 16:40:42 +02:00
Kristian Feldsam
09af95ec20 Translations: Update Slovak
Currently translated at 92.1% (5283 of 5736 strings)

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

powered by weblate
2024-09-11 16:01:16 +02:00
Tinna Sandström
1ade674beb Translations: Update Swedish
Currently translated at 99.1% (5686 of 5736 strings)

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

powered by weblate
2024-09-11 16:01:16 +02:00
Kristian Feldsam
76ff59f9c2 Translations: Update Slovak
Currently translated at 6.4% (15 of 232 strings)

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

powered by weblate
2024-09-11 16:01:16 +02:00
Kristian Feldsam
0986522c2f Translations: Update Slovak
Currently translated at 6.0% (14 of 232 strings)

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

powered by weblate
2024-09-11 16:01:16 +02:00
Kristian Feldsam
91f4e731da Translations: Update Slovak
Currently translated at 92.0% (5280 of 5736 strings)

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

powered by weblate
2024-09-11 16:01:16 +02:00
Raphael Michel
98709286c6 Order cancellation: Fix crash on deleted order (PRETIXEU-AHP) 2024-09-10 14:00:11 +02:00
Raphael Michel
667c2555b2 AsyncMixin: Fix crash on invalid query string (PRETIXEU-AHG) 2024-09-10 14:00:08 +02:00
Raphael Michel
6f5acb1ca7 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (232 of 232 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Raphael Michel
65ec3e3fd6 Translations: Update German
Currently translated at 100.0% (232 of 232 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Richard Schreiber
1a8d0a973d Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (5736 of 5736 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Richard Schreiber
3c94631405 Translations: Update German
Currently translated at 100.0% (5736 of 5736 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Kristian Feldsam
1dda7732a5 Translations: Update Slovak
Currently translated at 4.7% (11 of 232 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Kristian Feldsam
33accf5f99 Translations: Update Slovak
Currently translated at 92.0% (5279 of 5736 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Tinna Sandström
be2efd9df2 Translations: Update Swedish
Currently translated at 99.1% (5686 of 5736 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Ahmad AlHarthi
fe69137a4e Translations: Update Arabic
Currently translated at 65.1% (3736 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Ayden Jahola
7ccfb3a27a Translations: Update Arabic
Currently translated at 65.1% (3736 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Ayden Jahola
b7205622dc Translations: Update Arabic
Currently translated at 65.1% (3736 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Ahmad AlHarthi
44da5b81b1 Translations: Update Arabic
Currently translated at 65.1% (3736 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Martin Gross
5a058342a6 Translations: Update Portuguese (Portugal)
Currently translated at 56.8% (132 of 232 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Martin Gross
2d15dc7ce5 Translations: Update Portuguese (Portugal)
Currently translated at 56.8% (132 of 232 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Martin Gross
dd4ccc864e Translations: Update Portuguese (Portugal)
Currently translated at 86.7% (4977 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Kristian Feldsam
b812f0affe Translations: Update Slovak
Currently translated at 3.8% (9 of 232 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Kristian Feldsam
2af4183ce6 Translations: Update Slovak
Currently translated at 92.0% (5279 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Albizuri
8ac0b93ca5 Translations: Update Basque
Currently translated at 55.9% (3209 of 5737 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Ronisson Cabral
51a1193f32 Translations: Update Portuguese (Portugal)
Currently translated at 56.0% (130 of 232 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Ronisson Cabral
002da2c9b7 Translations: Update Portuguese (Portugal)
Currently translated at 86.2% (4948 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Martin Gross
9a2ebe4e95 Refunds: Fix sortkey to work with not provided BICs (Z#23165187) (#4451) 2024-09-09 10:48:53 +02:00
Albizuri
bc6da2512a Translations: Update Basque
Currently translated at 48.4% (113 of 233 strings)

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

powered by weblate
2024-09-06 10:51:38 +02:00
Albizuri
6378dc69b8 Translations: Update Basque
Currently translated at 56.3% (3231 of 5737 strings)

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

powered by weblate
2024-09-06 10:51:38 +02:00
Richard Schreiber
2b53d04a19 Improve labels in mail settings for incomplete payments (#4444) 2024-09-06 08:53:08 +02:00
Richard Schreiber
7efe7b5ff7 Docs: fix typo for SSO provider instead of client 2024-09-05 13:02:20 +02:00
Alberto Ortega
ae5464d486 Translations: Update Spanish
Currently translated at 87.8% (5038 of 5736 strings)

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

powered by weblate
2024-09-05 11:09:47 +02:00
Tinna Sandström
67fec8d1f6 Translations: Update Swedish
Currently translated at 99.1% (5686 of 5736 strings)

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

powered by weblate
2024-09-05 11:09:47 +02:00
Albizuri
95a081676b Translations: Update Basque
Currently translated at 56.2% (3225 of 5737 strings)

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

powered by weblate
2024-08-30 09:17:49 +02:00
dependabot[bot]
7228a6304d Update protobuf requirement from ==5.27.* to ==5.28.* (#4430)
Updates the requirements on [protobuf](https://github.com/protocolbuffers/protobuf) to permit the latest version.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
- [Commits](https://github.com/protocolbuffers/protobuf/compare/v5.27.0-rc1...v5.28.0)

---
updated-dependencies:
- dependency-name: protobuf
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-30 09:11:23 +02:00
Raphael Michel
04b9134e36 Add Basque to languages 2024-08-29 16:52:54 +02:00
Albizuri
2e0769bc41 Translations: Update Basque
Currently translated at 54.4% (3126 of 5737 strings)

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

powered by weblate
2024-08-29 14:51:49 +02:00
Albizuri
4d2f854710 Translations: Update Basque
Currently translated at 48.0% (112 of 233 strings)

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

powered by weblate
2024-08-29 14:51:49 +02:00
Albizuri
b9ac9496d2 Translations: Update Basque
Currently translated at 52.7% (3026 of 5737 strings)

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

powered by weblate
2024-08-29 14:51:49 +02:00
Albizuri
a975f5dc50 Translations: Update Basque
Currently translated at 47.2% (110 of 233 strings)

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

powered by weblate
2024-08-29 14:51:49 +02:00
Albizuri
4ea1f6284a Translations: Update Basque
Currently translated at 47.5% (2726 of 5737 strings)

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

powered by weblate
2024-08-29 14:51:49 +02:00
Raphael Michel
a01d105829 Bank Transfer: Fix weird error code on duplicate match (Z#23164140) (#4428) 2024-08-29 13:58:37 +02:00
Raphael Michel
b1bfa1acee API: Provide useful device_id in checkins (Z#23163025) (#4427) 2024-08-29 12:36:27 +02:00
Raphael Michel
0b4e99c2d8 Fix inprecise wording 2024-08-28 16:41:37 +02:00
Raphael Michel
0cdce7a9cd Add payment_explanation to payment method change (Z#23164112) (#4424) 2024-08-28 15:12:16 +02:00
Richard Schreiber
464f625301 Seating: visually remove waitinglist headline for soldout seating 2024-08-28 14:36:30 +02:00
Richard Schreiber
0c1072503c A11y: improve/unify html-source for uncategorized products 2024-08-28 14:35:35 +02:00
Raphael Michel
9ead82839a API: Add show_dates_on_frontpage to device event settings 2024-08-28 13:47:24 +02:00
Albizuri
c346e3a7f4 Translations: Update Basque
Currently translated at 44.6% (2560 of 5737 strings)

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

powered by weblate
2024-08-28 12:10:11 +02:00
Tinna Sandström
a26f219faf Translations: Update Swedish
Currently translated at 99.0% (5684 of 5736 strings)

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

powered by weblate
2024-08-28 12:10:11 +02:00
Anarion Dunedain
74fb8e7d0c Translations: Update Polish
Currently translated at 100.0% (232 of 232 strings)

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

powered by weblate
2024-08-28 12:10:11 +02:00
Anarion Dunedain
b9dbeef1ef Translations: Update Polish
Currently translated at 100.0% (5736 of 5736 strings)

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

powered by weblate
2024-08-28 12:10:11 +02:00
Raphael Michel
54079797d2 Event list: Do not include old or inactive subevents in event list (Z#23163541) (#4415) 2024-08-28 09:28:35 +02:00
Raphael Michel
02a4ed4be2 Teams: Improve handling of revoked keys and team deletion (Z#23163674) (#4414) 2024-08-28 09:27:53 +02:00
Raphael Michel
7f7c95aedb Bump version to 2024.9.0.dev0 2024-08-28 09:18:59 +02:00
Raphael Michel
47af20d417 Bump version to 2024.8.0 2024-08-28 09:18:35 +02:00
Mira
91e69f793d Show weekday in subevent dates [Z#23161884] (#4383) 2024-08-27 22:22:44 +02:00
70 changed files with 34356 additions and 3019 deletions

View File

@@ -203,7 +203,8 @@ checkins list of objects List of **succe
├ datetime datetime Time of check-in
├ type string Type of scan (defaults to ``entry``)
├ gate integer Internal ID of the gate. Can be ``null``.
├ device integer Internal ID of the device. Can be ``null``.
├ device integer Internal ID of the device. Can be ``null``. **Deprecated**, since this ID is not otherwise used in the API and is therefore not very useful.
├ device_id integer Attribute ``device_id`` of the device. Can be ``null``.
└ auto_checked_in boolean Indicates if this check-in been performed automatically by the system
downloads list of objects List of ticket download options
├ output string Ticket output provider (e.g. ``pdf``, ``passbook``)

View File

@@ -20,8 +20,9 @@ internal_name string An optional nam
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. Will
be ignored if custom rules are set.
eu_reverse_charge boolean **DEPRECATED**. If ``true``, EU reverse charge rules
are applied. Will be ignored if custom rules are set.
Use custom rules instead.
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

View File

@@ -175,7 +175,7 @@ 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"
To connect an external application as a SSO provider, go to "Customer accounts" → "SSO providers" → "Create a new SSO provider"
in your organizer account.
.. thumbnail:: ../../screens/organizer/customer_ssoprovider_add.png

View File

@@ -36,7 +36,7 @@ dependencies = [
"css-inline==0.14.*",
"defusedcsv>=1.1.0",
"Django[argon2]==4.2.*,>=4.2.15",
"django-bootstrap3==24.2",
"django-bootstrap3==24.3",
"django-compressor==4.5.1",
"django-countries==7.6.*",
"django-filter==24.3",
@@ -76,12 +76,12 @@ dependencies = [
"phonenumberslite==8.13.*",
"Pillow==10.4.*",
"pretix-plugin-build",
"protobuf==5.27.*",
"protobuf==5.28.*",
"psycopg2-binary",
"pycountry",
"pycparser==2.22",
"pycryptodome==3.20.*",
"pypdf==4.3.*",
"pypdf==5.0.*",
"python-bidi==0.6.*", # Support for Arabic in reportlab
"python-dateutil==2.9.*",
"pytz",
@@ -91,7 +91,7 @@ dependencies = [
"redis==5.0.*",
"reportlab==4.2.*",
"requests==2.31.*",
"sentry-sdk==2.13.*",
"sentry-sdk==2.14.*",
"sepaxml==2.6.*",
"slimit",
"stripe==7.9.*",

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__ = "2024.8.0.dev0"
__version__ = "2024.9.0.dev0"

View File

@@ -80,6 +80,7 @@ ALL_LANGUAGES = [
('de', _('German')),
('de-informal', _('German (informal)')),
('ar', _('Arabic')),
('eu', _('Basque')),
('ca', _('Catalan')),
('zh-hans', _('Chinese (simplified)')),
('zh-hant', _('Chinese (traditional)')),

View File

@@ -896,6 +896,7 @@ class DeviceEventSettingsSerializer(EventSettingsSerializer):
'locale',
'last_order_modification_date',
'show_quota_left',
'show_dates_on_frontpage',
'max_items_per_order',
'attendee_names_asked',
'attendee_names_required',

View File

@@ -273,9 +273,15 @@ class AnswerSerializer(I18nAwareModelSerializer):
class CheckinSerializer(I18nAwareModelSerializer):
device_id = serializers.SlugRelatedField(
source='device',
slug_field='device_id',
read_only=True,
)
class Meta:
model = Checkin
fields = ('id', 'datetime', 'list', 'auto_checked_in', 'gate', 'device', 'type')
fields = ('id', 'datetime', 'list', 'auto_checked_in', 'gate', 'device', 'device_id', 'type')
class FailedCheckinSerializer(I18nAwareModelSerializer):

View File

@@ -377,7 +377,7 @@ def _checkin_list_position_queryset(checkinlists, ignore_status=False, ignore_pr
Prefetch(
'positions',
OrderPosition.objects.prefetch_related(
Prefetch('checkins', queryset=Checkin.objects.all()),
Prefetch('checkins', queryset=Checkin.objects.select_related('device')),
'item', 'variation', 'answers', 'answers__options', 'answers__question',
)
)

View File

@@ -78,7 +78,7 @@ class ReusableMediaViewSet(viewsets.ModelViewSet):
queryset=OrderPosition.objects.select_related(
'order', 'order__event', 'order__event__organizer', 'seat',
).prefetch_related(
Prefetch('checkins', queryset=Checkin.objects.all()),
Prefetch('checkins', queryset=Checkin.objects.select_related('device')),
'answers', 'answers__options', 'answers__question',
)
),

View File

@@ -258,7 +258,7 @@ class OrderViewSetMixin:
return Prefetch(
'positions',
opq.all().prefetch_related(
Prefetch('checkins', queryset=Checkin.objects.all()),
Prefetch('checkins', queryset=Checkin.objects.select_related('device')),
Prefetch('item', queryset=self.request.event.items.prefetch_related(
Prefetch('meta_values', ItemMetaValue.objects.select_related('property'), to_attr='meta_values_cached')
)),
@@ -279,7 +279,7 @@ class OrderViewSetMixin:
return Prefetch(
'positions',
opq.all().prefetch_related(
Prefetch('checkins', queryset=Checkin.objects.all()),
Prefetch('checkins', queryset=Checkin.objects.select_related('device')),
'item', 'variation',
Prefetch('answers', queryset=QuestionAnswer.objects.prefetch_related('options', 'question').order_by('question__position')),
'seat',
@@ -1092,7 +1092,7 @@ class OrderPositionViewSet(viewsets.ModelViewSet):
'item_meta_properties',
)
qs = qs.prefetch_related(
Prefetch('checkins', queryset=Checkin.objects.all()),
Prefetch('checkins', queryset=Checkin.objects.select_related("device")),
Prefetch('item', queryset=self.request.event.items.prefetch_related(
Prefetch('meta_values', ItemMetaValue.objects.select_related('property'),
to_attr='meta_values_cached')
@@ -1111,7 +1111,7 @@ class OrderPositionViewSet(viewsets.ModelViewSet):
Prefetch(
'positions',
qs.prefetch_related(
Prefetch('checkins', queryset=Checkin.objects.all()),
Prefetch('checkins', queryset=Checkin.objects.select_related('device')),
Prefetch('item', queryset=self.request.event.items.prefetch_related(
Prefetch('meta_values', ItemMetaValue.objects.select_related('property'),
to_attr='meta_values_cached')
@@ -1135,7 +1135,7 @@ class OrderPositionViewSet(viewsets.ModelViewSet):
)
else:
qs = qs.prefetch_related(
Prefetch('checkins', queryset=Checkin.objects.all()),
Prefetch('checkins', queryset=Checkin.objects.select_related("device")),
'answers', 'answers__options', 'answers__question',
).select_related(
'item', 'order', 'order__event', 'order__event__organizer', 'seat'

View File

@@ -32,13 +32,16 @@
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under the License.
import string
from collections import OrderedDict
from importlib import import_module
from django import forms
from django.conf import settings
from django.contrib.auth import authenticate
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.hashers import check_password, make_password
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _, ngettext
def get_auth_backends():
@@ -160,3 +163,62 @@ class NativeAuthBackend(BaseAuthBackend):
u = authenticate(request=request, email=form_data['email'].lower(), password=form_data['password'])
if u and u.auth_backend == self.identifier:
return u
class NumericAndAlphabeticPasswordValidator:
def validate(self, password, user=None):
has_numeric = any(c in string.digits for c in password)
has_alpha = any(c in string.ascii_letters for c in password)
if not has_numeric or not has_alpha:
raise ValidationError(
_(
"Your password must contain both numeric and alphabetic characters.",
),
code="password_numeric_and_alphabetic",
)
def get_help_text(self):
return _(
"Your password must contain both numeric and alphabetic characters.",
)
class HistoryPasswordValidator:
def __init__(self, history_length=4):
self.history_length = history_length
def validate(self, password, user=None):
from pretix.base.models import User
if not user or not user.pk or not isinstance(user, User):
return
for hp in user.historic_passwords.order_by("-created")[:self.history_length]:
if check_password(password, hp.password):
raise ValidationError(
ngettext(
"Your password may not be the same as your previous password.",
"Your password may not be the same as one of your %(history_length)s previous passwords.",
self.history_length,
),
code="password_history",
params={"history_length": self.history_length},
)
def get_help_text(self):
return ngettext(
"Your password may not be the same as your previous password.",
"Your password may not be the same as one of your %(history_length)s previous passwords.",
self.history_length,
) % {"history_length": self.history_length}
def password_changed(self, password, user=None):
if not user:
pass
user.historic_passwords.create(password=make_password(password))
user.historic_passwords.filter(
pk__in=user.historic_passwords.order_by("-created")[self.history_length:].values_list("pk", flat=True),
).delete()

View File

@@ -46,6 +46,8 @@ This module contains utilities for implementing OpenID Connect for customer auth
as well as an OpenID Provider (OP).
"""
pretix_token_endpoint_auth_methods = ['client_secret_basic', 'client_secret_post']
def _urljoin(base, path):
if not base.endswith("/"):
@@ -127,6 +129,16 @@ def oidc_validate_and_complete_config(config):
fields=", ".join(provider_config.get("claims_supported", []))
))
if "token_endpoint_auth_methods_supported" in provider_config:
token_endpoint_auth_methods_supported = provider_config.get("token_endpoint_auth_methods_supported",
["client_secret_basic"])
if not any(x in pretix_token_endpoint_auth_methods for x in token_endpoint_auth_methods_supported):
raise ValidationError(
_(f'No supported Token Endpoint Auth Methods supported: {token_endpoint_auth_methods_supported}').format(
token_endpoint_auth_methods_supported=", ".join(token_endpoint_auth_methods_supported)
)
)
config['provider_config'] = provider_config
return config
@@ -147,6 +159,18 @@ def oidc_authorize_url(provider, state, redirect_uri):
def oidc_validate_authorization(provider, code, redirect_uri):
endpoint = provider.configuration['provider_config']['token_endpoint']
# Wall of shame and RFC ignorant IDPs
if endpoint == 'https://www.linkedin.com/oauth/v2/accessToken':
token_endpoint_auth_method = 'client_secret_post'
else:
token_endpoint_auth_methods = provider.configuration['provider_config'].get(
'token_endpoint_auth_methods_supported', ['client_secret_basic']
)
token_endpoint_auth_method = [
x for x in pretix_token_endpoint_auth_methods if x in token_endpoint_auth_methods
][0]
params = {
# https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.3
# https://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint
@@ -154,6 +178,11 @@ def oidc_validate_authorization(provider, code, redirect_uri):
'code': code,
'redirect_uri': redirect_uri,
}
if token_endpoint_auth_method == 'client_secret_post':
params['client_id'] = provider.configuration['client_id']
params['client_secret'] = provider.configuration['client_secret']
try:
resp = requests.post(
endpoint,
@@ -161,7 +190,10 @@ def oidc_validate_authorization(provider, code, redirect_uri):
headers={
'Accept': 'application/json',
},
auth=(provider.configuration['client_id'], provider.configuration['client_secret']),
auth=(
provider.configuration['client_id'],
provider.configuration['client_secret']
) if token_endpoint_auth_method == 'client_secret_basic' else None,
)
resp.raise_for_status()
data = resp.json()

View File

@@ -0,0 +1,36 @@
# Generated by Django 4.2.15 on 2024-09-16 15:10
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("pretixbase", "0269_order_api_meta"),
]
operations = [
migrations.CreateModel(
name="HistoricPassword",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False
),
),
("created", models.DateTimeField(auto_now_add=True)),
("password", models.CharField(max_length=128)),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="historic_passwords",
to=settings.AUTH_USER_MODEL,
),
),
],
),
]

View File

@@ -213,7 +213,13 @@ class DatetimeColumnMixin:
except (ValueError, TypeError):
pass
else:
raise ValidationError(_("Could not parse {value} as a date and time.").format(value=value))
try:
d = datetime.datetime.fromisoformat(value)
if not d.tzinfo:
d = d.replace(tzinfo=self.timezone)
return d
except (ValueError, TypeError):
raise ValidationError(_("Could not parse {value} as a date and time.").format(value=value))
class DecimalColumnMixin:

View File

@@ -40,8 +40,8 @@ from phonenumbers import SUPPORTED_REGIONS
from pretix.base.forms.questions import guess_country
from pretix.base.modelimport import (
DatetimeColumnMixin, DecimalColumnMixin, ImportColumn, SubeventColumnMixin,
i18n_flat,
BooleanColumnMixin, DatetimeColumnMixin, DecimalColumnMixin, ImportColumn,
SubeventColumnMixin, i18n_flat,
)
from pretix.base.models import (
Customer, ItemVariation, OrderPosition, Question, QuestionAnswer,
@@ -604,6 +604,22 @@ class Comment(ImportColumn):
order.comment = value or ''
class CheckinAttentionColumn(BooleanColumnMixin, ImportColumn):
identifier = 'checkin_attention'
verbose_name = gettext_lazy('Requires special attention')
def assign(self, value, order, position, invoice_address, **kwargs):
order.checkin_attention = value
class CheckinTextColumn(ImportColumn):
identifier = 'checkin_text'
verbose_name = gettext_lazy('Check-in text')
def assign(self, value, order, position, invoice_address, **kwargs):
order.checkin_text = value
class QuestionColumn(ImportColumn):
def __init__(self, event, q):
self.q = q
@@ -742,6 +758,8 @@ def get_order_import_columns(event):
ValidUntil(event),
Locale(event),
Saleschannel(event),
CheckinAttentionColumn(event),
CheckinTextColumn(event),
Expires(event),
Comment(event),
]

View File

@@ -654,3 +654,9 @@ class WebAuthnDevice(Device):
@property
def webauthnpubkey(self):
return websafe_decode(self.pub_key)
class HistoricPassword(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="historic_passwords")
created = models.DateTimeField(auto_now_add=True)
password = models.CharField(verbose_name=_("Password"), max_length=128)

View File

@@ -2835,6 +2835,14 @@ class OrderPosition(AbstractPosition):
(self.order.event.settings.change_allow_user_addons and ItemAddOn.objects.filter(base_item_id__in=[op.item_id for op in positions]).exists())
)
@property
def code(self):
"""
A ticket code which is unique among all events of a single organizer,
built by the order code and the position number.
"""
return '{order_code}-{position}'.format(order_code=self.order.code, position=self.positionid)
class Transaction(models.Model):
"""

View File

@@ -29,6 +29,8 @@ from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models
from django.utils.deconstruct import deconstructible
from django.utils.formats import localize
from django.utils.functional import lazy
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _, pgettext
from i18nfield.fields import I18nCharField
from i18nfield.strings import LazyI18nString
@@ -120,6 +122,8 @@ EU_CURRENCIES = {
}
VAT_ID_COUNTRIES = EU_COUNTRIES | {'CH', 'NO'}
format_html_lazy = lazy(format_html, str)
def is_eu_country(cc):
cc = str(cc)
@@ -193,11 +197,17 @@ class TaxRule(LoggedModel):
eu_reverse_charge = models.BooleanField(
verbose_name=_("Use EU reverse charge taxation rules"),
default=False,
help_text=_("Not recommended. Most events will NOT be qualified for reverse charge since the place of "
"taxation is the location of the event. This option disables charging VAT for all customers "
"outside the EU and for business customers in different EU countries who entered a valid EU VAT "
"ID. Only enable this option after consulting a tax counsel. No warranty given for correct tax "
"calculation. USE AT YOUR OWN RISK.")
help_text=format_html_lazy(
'<span class="label label-warning" data-toggle="tooltip" title="{}">{}</span> {}',
_('This feature will be removed in the future as it does not handle VAT for non-business customers in '
'other EU countries in a way that works for all organizers. Use custom rules instead.'),
_('DEPRECATED'),
_("Not recommended. Most events will NOT be qualified for reverse charge since the place of "
"taxation is the location of the event. This option disables charging VAT for all customers "
"outside the EU and for business customers in different EU countries who entered a valid EU VAT "
"ID. Only enable this option after consulting a tax counsel. No warranty given for correct tax "
"calculation. USE AT YOUR OWN RISK.")
),
)
home_country = FastCountryField(
verbose_name=_('Merchant country'),

View File

@@ -1295,7 +1295,8 @@ DEFAULTS = {
'form_kwargs': dict(
label=_("Show event times and dates on the ticket shop"),
help_text=_("If disabled, no date or time will be shown on the ticket shop's front page. This settings "
"does however not affect the display in other locations."),
"also affects a few other locations, however it should not be expected that the date of the "
"event is shown nowhere to users."),
)
},
'show_date_to': {

View File

@@ -30,7 +30,9 @@ from celery import states
from celery.result import AsyncResult
from django.conf import settings
from django.contrib import messages
from django.core.exceptions import PermissionDenied, ValidationError
from django.core.exceptions import (
BadRequest, PermissionDenied, ValidationError,
)
from django.core.files.uploadedfile import UploadedFile
from django.db import transaction
from django.http import HttpResponse, JsonResponse, QueryDict
@@ -131,6 +133,8 @@ class AsyncMixin:
return data
def get_result(self, request):
if not request.GET.get('async_id'):
raise BadRequest("No async_id given")
res = AsyncResult(request.GET.get('async_id'))
if 'ajax' in self.request.GET:
return JsonResponse(self._return_ajax_result(res, timeout=0.25))
@@ -140,7 +144,12 @@ class AsyncMixin:
return self.success(res.info)
else:
return self.error(res.info)
return render(request, 'pretixpresale/waiting.html')
state, info = res.state, res.info
return render(request, 'pretixpresale/waiting.html', {
'started': state in ('PROGRESS', 'STARTED'),
'percentage': info.get('value', 0) if isinstance(info, dict) else 0,
'steps': info.get('steps', []) if isinstance(info, dict) else None,
})
def success(self, value):
smes = self.get_success_message(value)
@@ -208,6 +217,8 @@ class AsyncAction(AsyncMixin):
def get(self, request, *args, **kwargs):
if 'async_id' in request.GET and settings.HAS_CELERY:
if not request.GET.get('async_id'):
raise BadRequest("No async_id given")
return self.get_result(request)
return self.http_method_not_allowed(request)

View File

@@ -1143,12 +1143,12 @@ class MailSettingsForm(FormPlaceholderMixin, SettingsForm):
widget=I18nTextInput,
)
mail_subject_order_incomplete_payment = I18nFormField(
label=_("Subject"),
label=_("Subject (if an incomplete payment was received)"),
required=False,
widget=I18nTextInput,
)
mail_text_order_incomplete_payment = I18nFormField(
label=_("Text"),
label=_("Text (if an incomplete payment was received)"),
required=False,
widget=I18nMarkdownTextarea,
help_text=_("This email only applies to payment methods that can receive incomplete payments, "

View File

@@ -102,16 +102,24 @@
</tr>
</thead>
<tbody>
{% for t in team.active_tokens %}
{% for t in tokens %}
<tr>
<td>
<td {% if not t.active %}class="text-muted"{% endif %}>
{% if not t.active %}
<del>
{% endif %}
{{ t.name }}
{% if not t.active %}
</del>
{% endif %}
</td>
<td class="text-right flip">
<button type="submit" name="remove-token" value="{{ t.id }}"
class="btn btn-danger btn-sm btn-block">
<i class="fa fa-times"></i> {% trans "Remove" %}
</button>
{% if t.active %}
<button type="submit" name="remove-token" value="{{ t.id }}"
class="btn btn-danger btn-sm btn-block">
<i class="fa fa-times"></i> {% trans "Remove" %}
</button>
{% endif %}
</td>
</tr>
{% endfor %}

View File

@@ -686,14 +686,24 @@ class TeamDeleteView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin,
try:
self.object.log_action('pretix.team.deleted', user=self.request.user)
self.object.delete()
except ProtectedError:
messages.error(
self.request,
_(
'The team could not be deleted as some constraints (e.g. data created by '
'plug-ins) do not allow it.'
except ProtectedError as e:
is_logs = any(isinstance(e, LogEntry) for e in e.protected_objects)
if is_logs:
messages.error(
self.request,
_(
"The team could not be deleted because the team or one of its API tokens is part of "
"historical audit logs."
)
)
else:
messages.error(
self.request,
_(
'The team could not be deleted as some constraints (e.g. data created by '
'plug-ins) do not allow it.'
)
)
)
return redirect(success_url)
messages.success(request, _('The selected team has been deleted.'))
@@ -723,6 +733,7 @@ class TeamMemberView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin,
ctx = super().get_context_data(**kwargs)
ctx['add_form'] = self.add_form
ctx['add_token_form'] = self.add_token_form
ctx['tokens'] = self.object.tokens.order_by("-active", "name", "pk")
return ctx
def _send_invite(self, instance):

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-05-08 07:07+0000\n"
"Last-Translator: AbdelatifAitBara <aitbaraabdelatif@outlook.com>\n"
"PO-Revision-Date: 2024-09-09 06:00+0000\n"
"Last-Translator: Ahmad AlHarthi <to.ahmad@pm.me>\n"
"Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix/ar/"
">\n"
"Language: ar\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Weblate 5.4.3\n"
"X-Generator: Weblate 5.7\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -38,7 +38,7 @@ msgstr "العربية"
#: pretix/_base_settings.py:83
msgid "Catalan"
msgstr ""
msgstr "الكتالانية"
#: pretix/_base_settings.py:84
msgid "Chinese (simplified)"
@@ -46,7 +46,7 @@ msgstr "الصينية (المبسطة)"
#: pretix/_base_settings.py:85
msgid "Chinese (traditional)"
msgstr ""
msgstr "الصينية (التقليدية)"
#: pretix/_base_settings.py:86
msgid "Czech"
@@ -74,7 +74,7 @@ msgstr "الفنلندية"
#: pretix/_base_settings.py:92
msgid "Galician"
msgstr ""
msgstr "الجاليكية"
#: pretix/_base_settings.py:93
msgid "Greek"
@@ -94,7 +94,7 @@ msgstr "لاتفيفية"
#: pretix/_base_settings.py:97
msgid "Norwegian Bokmål"
msgstr ""
msgstr "النرويجية"
#: pretix/_base_settings.py:98
msgid "Polish"
@@ -110,7 +110,7 @@ msgstr "البرتغالية (البرازيل)"
#: pretix/_base_settings.py:101
msgid "Romanian"
msgstr ""
msgstr "الرومانية"
#: pretix/_base_settings.py:102
msgid "Russian"
@@ -118,11 +118,11 @@ msgstr "الروسية"
#: pretix/_base_settings.py:103
msgid "Slovak"
msgstr ""
msgstr "السلوفاكية"
#: pretix/_base_settings.py:104
msgid "Swedish"
msgstr ""
msgstr "السويدية"
#: pretix/_base_settings.py:105
msgid "Spanish"
@@ -134,7 +134,7 @@ msgstr "التركية"
#: pretix/_base_settings.py:107
msgid "Ukrainian"
msgstr ""
msgstr "الأوكرانية"
#: pretix/api/auth/devicesecurity.py:31
msgid ""
@@ -149,16 +149,12 @@ msgid "pretixSCAN"
msgstr "بريتكس pretixSCAN"
#: pretix/api/auth/devicesecurity.py:90
#, fuzzy
#| msgid "pretixSCAN (kiosk mode, online only)"
msgid "pretixSCAN (kiosk mode, no order sync, no search)"
msgstr "pretixSCAN (وضع kiosk، عبر الانترنت فقط)"
msgstr "pretixSCAN (وضع kiosk، لا مزامنة للطلبات ولا بحث)"
#: pretix/api/auth/devicesecurity.py:124
#, fuzzy
#| msgid "pretixSCAN (kiosk mode, online only)"
msgid "pretixSCAN (online only, no order sync)"
msgstr "pretixSCAN (وضع kiosk، عبر الانترنت فقط)"
msgstr "pretixSCAN (وضع kiosk، لا مزامنة للطلبات)"
#: pretix/api/auth/devicesecurity.py:159
msgid "pretixPOS"
@@ -177,10 +173,8 @@ msgid "Allowed URIs list, space separated"
msgstr "قائمة العناوين المسموح بها, مفصولة بمسافة"
#: pretix/api/models.py:47
#, fuzzy
#| msgid "Allowed URIs list, space separated"
msgid "Allowed Post Logout URIs list, space separated"
msgstr "قائمة العناوين المسموح بها، مفصولة بمسافة"
msgstr "قائمة العناوين المسموح بها بعد تسجيل الخروج، مفصولة بمسافة"
#: pretix/api/models.py:51 pretix/base/models/customers.py:395
#: pretix/plugins/paypal/payment.py:113 pretix/plugins/paypal2/payment.py:110
@@ -263,10 +257,9 @@ msgid "Unknown plugin: '{name}'."
msgstr "إضافة غير معروفة: '{name}'."
#: pretix/api/serializers/event.py:295
#, fuzzy, python-brace-format
#| msgid "Unknown plugin: '{name}'."
#, python-brace-format
msgid "Restricted plugin: '{name}'."
msgstr "إضافة غير معروفة: '{name}'."
msgstr "إضافة مقيدة: '{name}'."
#: pretix/api/serializers/item.py:86 pretix/api/serializers/item.py:148
#: pretix/api/serializers/item.py:359
@@ -292,7 +285,7 @@ msgstr ""
#: pretix/api/serializers/item.py:306
msgid "Only admission products can currently be personalized."
msgstr ""
msgstr "يمكن حاليًا تخصيص منتجات القبول فقط."
#: pretix/api/serializers/item.py:317
msgid ""
@@ -327,26 +320,19 @@ msgid "This type of question cannot be asked during check-in."
msgstr "لا يمكن طرح هذا النوع من الأسئلة أثناء تسجيل الدخول."
#: pretix/api/serializers/item.py:531 pretix/control/forms/item.py:142
#, fuzzy
#| msgid "This type of question cannot be asked during check-in."
msgid "This type of question cannot be shown during check-in."
msgstr "لا يمكن طرح هذا النوع من الأسئلة أثناء تسجيل الدخول."
msgstr "لا يمكن عرض هذا النوع من الأسئلة أثناء تسجيل الدخول."
#: pretix/api/serializers/media.py:108
#, fuzzy
#| msgid ""
#| "A gift card with the same secret already exists in your or an affiliated "
#| "organizer account."
msgid ""
"A medium with the same identifier and type already exists in your organizer "
"account."
msgstr "توجد مسبقا بطاقة هدايا بنفس السر في حسابك أو حساب منظم تابع."
msgstr "توجد وسيلة بنفس المعرف والنوع في حساب المنظم الخاص بك."
#: pretix/api/serializers/order.py:78
#, fuzzy, python-brace-format
#| msgid "Your input was invalid, please try again."
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr "كان الإدخال غير صالحة، يرجى المحاولة مرة أخرى."
msgstr "\"{input}\" ادخال غير صالحة، يرجى المحاولة مرة أخرى."
#: pretix/api/serializers/order.py:1316 pretix/api/views/cart.py:224
#: pretix/base/services/orders.py:1530
@@ -401,7 +387,7 @@ msgstr "تم استخدام رمز كود الخصم هذا سابقا لأقص
#: pretix/api/views/checkin.py:604 pretix/api/views/checkin.py:611
msgid "Medium connected to other event"
msgstr ""
msgstr "الوسيط متصل بحدث آخر"
#: pretix/api/views/oauth.py:107 pretix/control/logdisplay.py:475
#, python-brace-format
@@ -413,17 +399,17 @@ msgstr "تم تفويض التطبيق \"{application_name}\" للوصول إل
#: pretix/api/views/order.py:603 pretix/control/views/orders.py:1587
#: pretix/presale/views/order.py:743 pretix/presale/views/order.py:816
msgid "You cannot generate an invoice for this order."
msgstr "لا يمكنك توليد فاتورة لهذا الطلب."
msgstr "لا يمكن انشاء فاتورة لهذا الطلب."
#: pretix/api/views/order.py:608 pretix/control/views/orders.py:1589
#: pretix/presale/views/order.py:745 pretix/presale/views/order.py:818
msgid "An invoice for this order already exists."
msgstr "توجد فاتورة مصدرة لهذا الطلب مسبقا."
msgstr "توجد فاتورة مصدرة لهذا الطلب مسبقاً."
#: pretix/api/views/order.py:634 pretix/control/views/orders.py:1715
#: pretix/control/views/users.py:143
msgid "There was an error sending the mail. Please try again later."
msgstr "حدث خطأ أثناء إرسال البريد. الرجاء المحاولة مرة أخرى في وقت لاحق."
msgstr "حدث خطأ اثناء ارسال البريد الاكتروني. الرجاء المحاولة مرة أخرى لاحقاً."
#: pretix/api/views/order.py:712 pretix/base/services/cart.py:215
#: pretix/base/services/orders.py:186 pretix/presale/views/order.py:800
@@ -432,11 +418,11 @@ msgstr "أحد المنتجات المختارة غير متوفر في البل
#: pretix/api/webhooks.py:237 pretix/base/notifications.py:233
msgid "New order placed"
msgstr "تم تقديم طلب جديد"
msgstr "تم وضع طلب جديد"
#: pretix/api/webhooks.py:241 pretix/base/notifications.py:239
msgid "New order requires approval"
msgstr "طلب جديد يتطلب الموافقة."
msgstr "الطلب الجديد بحاجة إلى موافقة"
#: pretix/api/webhooks.py:245 pretix/base/notifications.py:245
msgid "Order marked as paid"

View File

@@ -5,8 +5,8 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-08-27 16:02+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"PO-Revision-Date: 2024-09-13 21:00+0000\n"
"Last-Translator: Wikinaut <mail@tgries.de>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix/de/"
">\n"
"Language: de\n"
@@ -5997,8 +5997,9 @@ msgid ""
"your organizer accounts and your events."
msgstr ""
"Sollte kurz sein und darf nur Kleinbuchstaben, Zahlen, Bindestriche und "
"Punkte enthalten. Jede Kurzform kann nur einmal benutzt werden und wird in "
"URLs zu Ihrem Veranstalterkonto und Ihren Veranstaltern."
"Punkte enthalten. Jede Kurzform kann nur einmal vergeben werden. Sie wird in "
"URLs verwendet, um auf Ihr Veranstalterkonto und Ihre Veranstaltungen zu "
"verweisen."
#: pretix/base/models/organizer.py:97 pretix/control/navigation.py:348
#: pretix/control/templates/pretixcontrol/oauth/authorized.html:19
@@ -6880,9 +6881,9 @@ msgid ""
"Create an invoice for orders using bank transfer immediately if the event is "
"otherwise configured to create invoices after payment is completed."
msgstr ""
"Generiere Rechnungen für Bestellungen die Banküberweisung als "
"Zahlungsmethode nutzen sofort, auch wenn die Veranstaltung konfiguriert ist "
"Rechnungen erst nach Zahlungseingang zu generieren."
"Generiere Rechnungen für Bestellungen sofort, wenn Banküberweisung als "
"Zahlungsmethode genutzt wird, und zwar auch dann, wenn die Veranstaltung so "
"konfiguriert ist, Rechnungen erst nach Zahlungseingang zu generieren."
#: pretix/base/payment.py:1259
msgid "Offsetting"
@@ -24187,7 +24188,7 @@ msgid ""
"generated by plugins. If you want to embed a logo or other images, use a "
"custom background instead."
msgstr ""
"Sie können diese Funktion nutzen um dynamische Bilder z.B. aus Fragefeldern "
"Sie können diese Funktion nutzen, um dynamische Bilder z.B. aus Fragefeldern "
"oder aus Erweiterungen einzubinden. Wenn Sie ein Logo oder andere statische "
"Bilder einbinden wollen, nutzen Sie stattdessen einen eigenen Hintergrund."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-08-27 16:02+0000\n"
"PO-Revision-Date: 2024-09-10 07:17+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
"de/>\n"
@@ -572,10 +572,8 @@ msgid "Group of objects"
msgstr "Gruppe von Objekten"
#: pretix/static/pretixcontrol/js/ui/editor.js:899
#, fuzzy
#| msgid "Text object"
msgid "Text object (deprecated)"
msgstr "Text-Objekt"
msgstr "Text-Objekt (veraltet)"
#: pretix/static/pretixcontrol/js/ui/editor.js:901
msgid "Text box"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-08-27 16:00+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"PO-Revision-Date: 2024-09-10 07:17+0000\n"
"Last-Translator: Richard Schreiber <schreiber@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
"pretix/pretix/de_Informal/>\n"
"Language: de_Informal\n"
@@ -5993,8 +5993,9 @@ msgid ""
"your organizer accounts and your events."
msgstr ""
"Sollte kurz sein und darf nur Kleinbuchstaben, Zahlen, Bindestriche und "
"Punkte enthalten. Jede Kurzform darf nur einmal vergeben werden und wird in "
"URLs zu deinem Veranstalter und deinen Veranstalterkonten verwendet."
"Punkte enthalten. Jede Kurzform kann nur einmal vergeben werden. Sie wird in "
"URLs verwendet, um auf dein Veranstalterkonto und deine Veranstaltungen zu "
"verweisen."
#: pretix/base/models/organizer.py:97 pretix/control/navigation.py:348
#: pretix/control/templates/pretixcontrol/oauth/authorized.html:19

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-08-27 16:00+0000\n"
"PO-Revision-Date: 2024-09-10 07:17+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
"pretix/pretix-js/de_Informal/>\n"
@@ -571,10 +571,8 @@ msgid "Group of objects"
msgstr "Gruppe von Objekten"
#: pretix/static/pretixcontrol/js/ui/editor.js:899
#, fuzzy
#| msgid "Text object"
msgid "Text object (deprecated)"
msgstr "Text-Objekt"
msgstr "Text-Objekt (veraltet)"
#: pretix/static/pretixcontrol/js/ui/editor.js:901
msgid "Text box"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-07-23 10:22+0000\n"
"PO-Revision-Date: 2024-09-03 00:00+0000\n"
"Last-Translator: Alberto Ortega <ortega16.cieza@gmail.com>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix/"
"es/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.2\n"
"X-Generator: Weblate 5.7\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -3984,8 +3984,9 @@ msgstr ""
#: pretix/base/models/customers.py:299 pretix/base/models/orders.py:1513
#: pretix/base/models/orders.py:3175 pretix/base/settings.py:1096
#, fuzzy
msgid "Company name"
msgstr "Nombre de la Compañía"
msgstr "Razón Social / Organización"
#: pretix/base/models/customers.py:303 pretix/base/models/orders.py:1517
#: pretix/base/models/orders.py:3182 pretix/base/settings.py:81

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-08-26 15:00+0000\n"
"PO-Revision-Date: 2024-09-06 08:47+0000\n"
"Last-Translator: Albizuri <oier@puntu.eus>\n"
"Language-Team: Basque <https://translate.pretix.eu/projects/pretix/pretix-js/"
"eu/>\n"
@@ -602,7 +602,7 @@ msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:913
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr ""
msgstr "Sarrera diseinua"
#: pretix/static/pretixcontrol/js/ui/editor.js:1250
#: pretix/static/pretixcontrol/js/ui/editor.js:972
@@ -720,16 +720,18 @@ msgid ""
"The items in your cart are no longer reserved for you. You can still "
"complete your order as long as theyre available."
msgstr ""
"Zure saskiko produktuak ez daude zuretzat erreserbatuta. Oraindik ere zure "
"eskaera bete dezakezu, baldin eta eskuragarri badaude."
#: pretix/static/pretixpresale/js/ui/cart.js:45
msgid "Cart expired"
msgstr ""
msgstr "Saskia iraungita"
#: pretix/static/pretixpresale/js/ui/cart.js:50
msgid "The items in your cart are reserved for you for one minute."
msgid_plural "The items in your cart are reserved for you for {num} minutes."
msgstr[0] ""
msgstr[1] ""
msgstr[0] "Zure saskiko produktuak minutu -ez erreserbatuta daude zuretzat."
msgstr[1] "Zure saskiko produktuak {num} minutuz erreserbatuta daude zuretzat."
#: pretix/static/pretixpresale/js/ui/main.js:203
msgid "The organizer keeps %(currency)s %(amount)s"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2023-11-03 22:00+0000\n"
"Last-Translator: Jāzeps Benjamins Baško <jazeps.basko@gmail.com>\n"
"PO-Revision-Date: 2024-09-16 13:00+0000\n"
"Last-Translator: Svyatoslav <slava@digitalarthouse.eu>\n"
"Language-Team: Latvian <https://translate.pretix.eu/projects/pretix/pretix/"
"lv/>\n"
"Language: lv\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
"X-Generator: Weblate 5.1.1\n"
"X-Generator: Weblate 5.7\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -31361,7 +31361,7 @@ msgstr "Lūdzu, izvēlieties pasākumu, lai izmantotu kuponu/promokodu."
#: pretix/presale/templates/pretixpresale/event/index.html:82
msgid "View other date"
msgstr "Skatīt citu datumu"
msgstr "Skatīt citus datumus vai notikumus"
#: pretix/presale/templates/pretixpresale/event/index.html:87
msgid "Choose date to book a ticket"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-07-01 16:00+0000\n"
"PO-Revision-Date: 2024-08-28 10:03+0000\n"
"Last-Translator: Anarion Dunedain <anarion80@gmail.com>\n"
"Language-Team: Polish <https://translate.pretix.eu/projects/pretix/pretix/pl/"
">\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.6.1\n"
"X-Generator: Weblate 5.7\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -259,10 +259,9 @@ msgid "Unknown plugin: '{name}'."
msgstr "Nieznany plugin: '{name}'."
#: pretix/api/serializers/event.py:295
#, fuzzy, python-brace-format
#| msgid "Unknown plugin: '{name}'."
#, python-brace-format
msgid "Restricted plugin: '{name}'."
msgstr "Nieznany plugin: '{name}'."
msgstr "Plugin z ograniczeniami: '{name}'."
#: pretix/api/serializers/item.py:86 pretix/api/serializers/item.py:148
#: pretix/api/serializers/item.py:359
@@ -505,10 +504,8 @@ msgid "Order denied"
msgstr "Zamówienie odrzucone"
#: pretix/api/webhooks.py:313
#, fuzzy
#| msgid "Order denied"
msgid "Order deleted"
msgstr "Zamówienie odrzucone"
msgstr "Zamówienie skasowane"
#: pretix/api/webhooks.py:317
msgid "Ticket checked in"
@@ -2287,10 +2284,8 @@ msgid "Order comment"
msgstr "Komentarz do zamówienia"
#: pretix/base/exporters/orderlist.py:622
#, fuzzy
#| msgid "Add-On to position #%(posid)s"
msgid "Add-on to position ID"
msgstr "Dodatek do pozycji #%(posid)s"
msgstr "Dodatek do pozycji ID"
#: pretix/base/exporters/orderlist.py:650 pretix/base/pdf.py:340
msgid "Invoice address street"
@@ -3873,6 +3868,10 @@ msgid ""
"replacement, our new plugin \"Auto check-in\" can be used. When we remove "
"this option, we will automatically migrate your event to use the new plugin."
msgstr ""
"Ta opcja jest przestarzała i zostanie usunięta w ciągu najbliższych "
"miesięcy. Jako zamiennik można użyć naszej nowej wtyczki „Auto check-in”. "
"Gdy usuniemy tę opcję, automatycznie zmigrujemy Twoje wydarzenie do "
"korzystania z nowej wtyczki."
#: pretix/base/models/checkin.py:340
msgid "Entry"
@@ -5711,10 +5710,8 @@ msgid "Meta information"
msgstr "Metadane"
#: pretix/base/models/orders.py:303
#, fuzzy
#| msgid "Meta information"
msgid "API meta information"
msgstr "Metadane"
msgstr "Metadane API"
#: pretix/base/models/orders.py:392 pretix/plugins/sendmail/forms.py:236
#: pretix/plugins/sendmail/forms.py:391 pretix/plugins/sendmail/views.py:272
@@ -8041,10 +8038,9 @@ msgstr ""
"wydarzenia."
#: pretix/base/services/mail.py:121
#, fuzzy
#| msgid "The selected media type is not enabled in your organizer settings."
msgid "This prefix has been set in your event or organizer settings."
msgstr "Wybrany typ nośnika nie jest włączony w ustawieniach organizatora."
msgstr ""
"Prefiks ten został ustawiony w ustawieniach wydarzenia lub organizatora."
#: pretix/base/services/mail.py:278
#, python-brace-format
@@ -9675,6 +9671,11 @@ msgid ""
"if they want more than one ticket, as every entry only grants one single "
"ticket at a time."
msgstr ""
"Przy zwiększonym limicie klient może poprosić o więcej niż jeden bilet na "
"konkretny produkt przy użyciu tego samego, unikalnego adresu e-mail. Jednak "
"niezależnie od tego ustawienia, klient będzie musiał wypełnić formularz "
"listy oczekujących wielokrotnie, jeśli chce otrzymać więcej niż jeden bilet, "
"ponieważ każdy wpis przyznaje tylko jeden bilet na raz."
#: pretix/base/settings.py:1493
msgid "Show number of check-ins to customer"
@@ -11705,10 +11706,9 @@ msgstr ""
"Data ostatniej płatności nie może przypadać przed końcem przedsprzedaży."
#: pretix/base/settings.py:3811
#, fuzzy, python-brace-format
#| msgid "Please enter a valid sales channel."
#, python-brace-format
msgid "The value \"{identifier}\" is not a valid sales channel."
msgstr "Wprowadź dostępny kanał sprzedaży."
msgstr "Wartość \"{identifier} nie jest prawidłowym kanałem sprzedaży."
#: pretix/base/settings.py:3826
msgid "This needs to be disabled if other NFC-based types are active."
@@ -15034,19 +15034,14 @@ msgid "or"
msgstr "lub"
#: pretix/control/forms/vouchers.py:293
#, fuzzy
#| msgid ""
#| "You can either supply a list of email addresses with one email address "
#| "per line, or a CSV file with a title column and one or more of the "
#| "columns \"email\", \"number\", \"name\", or \"tag\"."
msgid ""
"You can either supply a list of email addresses with one email address per "
"line, or the contents of a CSV file with a title column and one or more of "
"the columns \"email\", \"number\", \"name\", or \"tag\"."
msgstr ""
"Możesz dostarczyć listę adresów e-mail z jednym adresem e-mail na wiersz lub "
"plik CSV z kolumną tytułu i jedną lub kilkoma kolumnami \"e-mail\", "
"\"numer\", \"nazwa\" lub \"tag\"."
"zawartość pliku CSV z kolumną tytułu i jedną lub kilkoma kolumnami \"e-mail\""
", \"numer\", \"nazwa\" lub \"tag\"."
#: pretix/control/forms/vouchers.py:327
msgid "Maximum usages per voucher"
@@ -19187,17 +19182,12 @@ msgstr ""
"używana razem z funkcją minimalnej odległości w naszym module planu miejsc."
#: pretix/control/templates/pretixcontrol/event/settings.html:377
#, fuzzy
#| msgctxt "sendmail_form"
#| msgid "Waiting for"
msgid "Waiting customers"
msgstr "Oczekiwanie na"
msgstr "Oczekujący klienci"
#: pretix/control/templates/pretixcontrol/event/settings.html:383
#, fuzzy
#| msgid "Enable waiting list"
msgid "Manage waiting list"
msgstr "Włącz listę oczekujących"
msgstr "Zarządzaj listą oczekujących"
#: pretix/control/templates/pretixcontrol/event/settings.html:396
msgid "Item metadata"
@@ -21128,6 +21118,9 @@ msgid ""
"will not affect the membership. Memberships can be managed in the customer "
"account."
msgstr ""
"Sprzedaż tej pozycji spowodowała utworzenie członkostwa. Zmiana produktu w "
"tym miejscu nie wpłynie na członkostwo. Członkostwem można zarządzać na "
"koncie klienta."
#: pretix/control/templates/pretixcontrol/order/change.html:208
#: pretix/control/templates/pretixcontrol/order/change.html:426
@@ -21178,6 +21171,9 @@ msgid ""
"ticket here will not affect the membership. Memberships can be managed in "
"the customer account."
msgstr ""
"Sprzedaż tej pozycji spowodowała utworzenie członkostwa. Zmiana ważności "
"biletu w tym miejscu nie wpłynie na członkostwo. Członkostwem można "
"zarządzać na koncie klienta."
#: pretix/control/templates/pretixcontrol/order/change.html:290
msgid ""
@@ -23943,30 +23939,24 @@ msgid "Flow multiple lines downward from specified position"
msgstr "Wypełnij wiele linii w dół od określonej pozycji"
#: pretix/control/templates/pretixcontrol/pdf/index.html:452
#, fuzzy
#| msgid "Automatically refund money if possible"
msgid "Automatically reduce font size to fit content"
msgstr "Automatycznie zwróć pieniądze, jeśli to możliwe"
msgstr "Automatyczne zmniejsz rozmiar czcionki w celu dopasowania do treści"
#: pretix/control/templates/pretixcontrol/pdf/index.html:458
msgid "Allow long words to be split (preview is not accurate)"
msgstr ""
msgstr "Zezwalaj na dzielenie długich słów (podgląd nie jest dokładny)"
#: pretix/control/templates/pretixcontrol/pdf/index.html:469
msgid "Add a new object"
msgstr "Dodaj nowy obiekt"
#: pretix/control/templates/pretixcontrol/pdf/index.html:474
#, fuzzy
#| msgid "Text color"
msgid "Text box"
msgstr "Kolor tekstu"
msgstr "Pole tekstowe"
#: pretix/control/templates/pretixcontrol/pdf/index.html:478
#, fuzzy
#| msgid "Event created"
msgid "Text (deprecated)"
msgstr "Wydarzenie utworzone"
msgstr "Tekst (przestarzałe)"
#: pretix/control/templates/pretixcontrol/pdf/index.html:482
msgid "QR code for Check-In"
@@ -24005,6 +23995,9 @@ msgid ""
"use pretixPRINT version %(print_version)s (or newer) or pretixSCAN Desktop "
"version %(scan_version)s (or newer)."
msgstr ""
"Ten układ wykorzystuje nowe funkcje. Jeśli drukujesz ze swojego urządzenia, "
"upewnij się, że używasz pretixPRINT w wersji %(print_version)s (lub nowszej) "
"lub pretixSCAN Desktop w wersji %(scan_version)s (lub nowszej)."
#: pretix/control/templates/pretixcontrol/pdf/placeholders.html:16
msgid "Available placeholders"
@@ -27223,133 +27216,99 @@ msgstr "Zespół Pretix"
#: pretix/plugins/autocheckin/apps.py:39
msgid "Automatically check-in specific tickets after they have been sold."
msgstr ""
msgstr "Automatycznie odpraw określone bilety po ich sprzedaży."
#: pretix/plugins/autocheckin/forms.py:60
#: pretix/plugins/autocheckin/models.py:82
#, fuzzy
#| msgid "All payment providers"
msgid "Only including usage of payment providers"
msgstr "Wszyscy dostawcy płatności"
msgstr "Tylko z uwzględnieniem korzystania z dostawców usług płatniczych"
#: pretix/plugins/autocheckin/forms.py:120
#, fuzzy
#| msgid "All actions"
msgid "All variations"
msgstr "Wszystkie działania"
msgstr "Wszystkie warianty"
#: pretix/plugins/autocheckin/forms.py:248
msgid ""
"When restricting by payment method, the rule should run after the payment "
"was received."
msgstr ""
"W przypadku ograniczenia według metody płatności reguła powinna zostać "
"uruchomiona po otrzymaniu płatności."
#: pretix/plugins/autocheckin/models.py:36
#, fuzzy
#| msgid "New order placed"
msgid "After order was placed"
msgstr "Złożono zamówienie"
msgstr "Po złożeniu zamówienia"
#: pretix/plugins/autocheckin/models.py:37
#, fuzzy
#| msgid "Mark order as paid"
msgid "After order was paid"
msgstr "Oznacz zamówienie jako opłacone"
msgstr "Po opłaceniu zamówienia"
#: pretix/plugins/autocheckin/models.py:48
#, fuzzy
#| msgid "If you keep this empty, all input will be allowed."
msgid ""
"If you keep this empty, all lists that match the purchased product will be "
"used."
msgstr ""
"Jeśli pozostawisz to pole puste, wszystkie dane wejściowe będą dozwolone."
"Jeśli to pole pozostanie puste, użyte zostaną wszystkie listy pasujące do "
"zakupionego produktu."
#: pretix/plugins/autocheckin/models.py:59
#, fuzzy
#| msgid "Add sales channel"
msgid "All sales channels"
msgstr "Dodaj kanał sprzedaży"
msgstr "Wszystkie kanały sprzedaży"
#: pretix/plugins/autocheckin/models.py:69
#, fuzzy
#| msgid "Product variations"
msgid "All products and variations"
msgstr "Warianty produktu"
msgstr "Wszystkie produkty i warianty produktu"
#: pretix/plugins/autocheckin/models.py:78
#, fuzzy
#| msgid "Enable payment method"
msgid "All payment methods"
msgstr "Aktywuj metodę płatności"
msgstr "Wszystkie metody płatności"
#: pretix/plugins/autocheckin/signals.py:47
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/add.html:13
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/edit.html:13
#, fuzzy
#| msgid "Automated check-in"
msgid "Auto check-in"
msgstr "Automatyczna odprawa"
msgstr "Auto-odprawa"
#: pretix/plugins/autocheckin/signals.py:70
#, fuzzy
#| msgid "An email rule was created"
msgid "An auto check-in rule was created"
msgstr "Utworzono regułę wiadomości e-mail"
msgstr "Utworzono regułę auto-odprawy"
#: pretix/plugins/autocheckin/signals.py:72
#, fuzzy
#| msgid "An email rule was updated"
msgid "An auto check-in rule was updated"
msgstr "Zaktualizowano regułę wiadomości e-mail"
msgstr "Zaktualizowano regułę auto-odprawy"
#: pretix/plugins/autocheckin/signals.py:75
#, fuzzy
#| msgid "An email rule was deleted"
msgid "An auto check-in rule was deleted"
msgstr "Usunięto regułę wiadomości e-mail"
msgstr "Usunięto regułę auto-odprawy"
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/add.html:4
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/add.html:6
#, fuzzy
#| msgid "Custom check-in rule"
msgid "Create auto check-in rule"
msgstr "Niestandardowa reguła odprawy"
msgstr "Utwórz regułę auto-odprawy"
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/add.html:18
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/edit.html:18
#, fuzzy
#| msgctxt "discount"
#| msgid "Condition"
msgid "Conditions"
msgstr "Stan"
msgstr "Warunki"
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/delete.html:4
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/delete.html:6
#, fuzzy
#| msgid "Delete check-in list"
msgid "Delete auto check-in rule"
msgstr "Usuń listę odpraw"
msgstr "Usuń regułę auto-odprawy"
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/delete.html:9
#, fuzzy
#| msgid "Are you sure you want to delete the gate?"
msgid "Are you sure you want to delete the auto check-in rule?"
msgstr "Czy na pewno chcesz usunąć bramkę?"
msgstr "Czy na pewno chcesz usunąć regułę auto-odprawy?"
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/edit.html:4
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/edit.html:6
#, fuzzy
#| msgid "Custom check-in rule"
msgid "Auto check-in rule"
msgstr "Niestandardowa reguła odprawy"
msgstr "Reguła auto-odprawy"
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:5
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:7
#, fuzzy
#| msgid "Custom check-in rule"
msgid "Auto check-in rules"
msgstr "Niestandardowa reguła odprawy"
msgstr "Reguły auto-odprawy"
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:11
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_list.html:96
@@ -27358,16 +27317,12 @@ msgstr "Nie stworzyłeś jeszcze żadnych zasad."
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:17
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:22
#, fuzzy
#| msgid "Create a new check-in list"
msgid "Create a new check-in rule"
msgstr "Utwórz nową listę odpraw"
msgstr "Utwórz nową regułę odpraw"
#: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:32
#, fuzzy
#| msgid "Payment method"
msgid "Payment methods"
msgstr "Metoda płatności"
msgstr "Metody płatności"
#: pretix/plugins/autocheckin/views.py:119 pretix/plugins/sendmail/views.py:628
msgid "Your rule has been created."
@@ -29040,6 +28995,9 @@ msgid ""
"Refunding the amount via PayPal failed: The original payment does not "
"contain the required information to issue an automated refund."
msgstr ""
"Zwrot kwoty za pośrednictwem systemu PayPal nie powiódł się: Oryginalna "
"płatność nie zawiera informacji wymaganych do automatycznego zwrotu "
"pieniędzy."
#: pretix/plugins/paypal2/payment.py:1087
msgid "PayPal APM"
@@ -30684,26 +30642,20 @@ msgstr ""
"WeChat. Prosimy o zachowanie danych logowania."
#: pretix/plugins/stripe/payment.py:1788
#, fuzzy
#| msgid "WeChat Pay via Stripe"
msgid "Revolut Pay via Stripe"
msgstr "WeChat Pay przez Stripe"
msgstr "Revolut Pay przez Stripe"
#: pretix/plugins/stripe/payment.py:1789
msgid "Revolut Pay"
msgstr ""
msgstr "Revolut Pay"
#: pretix/plugins/stripe/payment.py:1793
#, fuzzy
#| msgid ""
#| "This payment method is available to users of the Chinese app WeChat. "
#| "Please keep your login information available."
msgid ""
"This payment method is available to users of the Revolut app. Please keep "
"your login information available."
msgstr ""
"Ta metoda płatności jest dostępna dla użytkowników chińskiej aplikacji "
"WeChat. Prosimy o zachowanie danych logowania."
"Ta metoda płatności jest dostępna dla użytkowników aplikacji Revolut. "
"Prosimy o zachowanie danych logowania."
#: pretix/plugins/stripe/payment.py:1807
msgid "PayPal via Stripe"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-06-27 17:00+0000\n"
"PO-Revision-Date: 2024-08-28 10:03+0000\n"
"Last-Translator: Anarion Dunedain <anarion80@gmail.com>\n"
"Language-Team: Polish <https://translate.pretix.eu/projects/pretix/pretix-js/"
"pl/>\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.6.1\n"
"X-Generator: Weblate 5.7\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -572,16 +572,12 @@ msgid "Group of objects"
msgstr "Grupa obiektów"
#: pretix/static/pretixcontrol/js/ui/editor.js:899
#, fuzzy
#| msgid "Text object"
msgid "Text object (deprecated)"
msgstr "Obiekt tekstowy"
msgstr "Obiekt tekstowy (przestarzały)"
#: pretix/static/pretixcontrol/js/ui/editor.js:901
#, fuzzy
#| msgid "Text object"
msgid "Text box"
msgstr "Obiekt tekstowy"
msgstr "Pole tekstowe"
#: pretix/static/pretixcontrol/js/ui/editor.js:903
msgid "Barcode area"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-06-18 20:00+0000\n"
"Last-Translator: \"L. Pereira\" <l@tia.mat.br>\n"
"PO-Revision-Date: 2024-09-13 06:00+0000\n"
"Last-Translator: Arthur Nunes <coletivosuburbano@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
"pretix/pretix/pt_BR/>\n"
"Language: pt_BR\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.5.5\n"
"X-Generator: Weblate 5.7\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -37,7 +37,7 @@ msgstr "Árabe"
#: pretix/_base_settings.py:83
msgid "Catalan"
msgstr ""
msgstr "Catalão"
#: pretix/_base_settings.py:84
msgid "Chinese (simplified)"
@@ -117,11 +117,11 @@ msgstr "Russo"
#: pretix/_base_settings.py:103
msgid "Slovak"
msgstr ""
msgstr "Eslovaco"
#: pretix/_base_settings.py:104
msgid "Swedish"
msgstr ""
msgstr "Sueco"
#: pretix/_base_settings.py:105
msgid "Spanish"
@@ -256,10 +256,9 @@ msgid "Unknown plugin: '{name}'."
msgstr "Plugin desconhecido: '{name}'."
#: pretix/api/serializers/event.py:295
#, fuzzy, python-brace-format
#| msgid "Unknown plugin: '{name}'."
#, python-brace-format
msgid "Restricted plugin: '{name}'."
msgstr "Plugin desconhecido: '{name}'."
msgstr "Plugin restrito: '{name}'."
#: pretix/api/serializers/item.py:86 pretix/api/serializers/item.py:148
#: pretix/api/serializers/item.py:359
@@ -498,10 +497,8 @@ msgid "Order denied"
msgstr "Pedido negado"
#: pretix/api/webhooks.py:313
#, fuzzy
#| msgid "Order denied"
msgid "Order deleted"
msgstr "Pedido negado"
msgstr "Pedido deletado"
#: pretix/api/webhooks.py:317
msgid "Ticket checked in"
@@ -645,13 +642,15 @@ msgstr "Compra online"
#: pretix/base/channels.py:174
msgid "API"
msgstr ""
msgstr "API"
#: pretix/base/channels.py:175
msgid ""
"API sales channels come with no built-in functionality, but may be used for "
"custom integrations."
msgstr ""
"Os canais de vendas da API não vêm com nenhuma funcionalidade incorporada, "
"mas podem ser usados para integrações personalizadas."
#: pretix/base/context.py:45
#, python-brace-format
@@ -1051,8 +1050,6 @@ msgid "No"
msgstr "Não"
#: pretix/base/exporters/dekodi.py:42 pretix/base/exporters/invoices.py:66
#, fuzzy
#| msgid "Invoices"
msgctxt "export_category"
msgid "Invoices"
msgstr "Faturas"
@@ -1084,16 +1081,12 @@ msgid "Date range"
msgstr "Intervalo de datas"
#: pretix/base/exporters/dekodi.py:237 pretix/base/exporters/invoices.py:77
#, fuzzy
#| msgid ""
#| "Only include invoices issued on or after this date. Note that the invoice "
#| "date does not always correspond to the order or payment date."
msgid ""
"Only include invoices issued in this time frame. Note that the invoice date "
"does not always correspond to the order or payment date."
msgstr ""
"Incluir apenas as faturas emitidas a partir desta data. Observe que a data "
"da fatura não corresponde sempre à ordem ou à data de pagamento."
"Inclua apenas as faturas emitidas nesse período. Observe que a data da "
"fatura nem sempre corresponde à data do pedido ou do pagamento."
#: pretix/base/exporters/events.py:47
msgid "Event data"
@@ -1522,9 +1515,6 @@ msgid "Payment providers"
msgstr "Provedores de pagamento"
#: pretix/base/exporters/invoices.py:285 pretix/base/exporters/invoices.py:388
#, fuzzy
#| msgctxt "invoice"
#| msgid "Cancellation"
msgid "Cancellation"
msgstr "Cancelamento"
@@ -1830,6 +1820,10 @@ msgid ""
"sheets, one with a line for every order, one with a line for every order "
"position, and one with a line for every additional fee charged in an order."
msgstr ""
"Faça o download de uma planilha de todos os pedidos. A planilha incluirá "
"três planilhas, uma com uma linha para cada pedido, uma com uma linha para "
"cada posição do pedido e uma com uma linha para cada taxa adicional cobrada "
"em um pedido."
#: pretix/base/exporters/orderlist.py:100 pretix/base/models/orders.py:330
#: pretix/control/navigation.py:253 pretix/control/navigation.py:360
@@ -1866,10 +1860,8 @@ msgstr "Mostrar opções de múltipla escolha agrupadas em uma coluna"
#: pretix/base/exporters/orderlist.py:131
#: pretix/plugins/reports/exporters.py:701
#, fuzzy
#| msgid "Only include orders created on or after this date."
msgid "Only include orders created within this date range."
msgstr "Incluir apenas pedidos criados a partir desta data."
msgstr "Incluir somente os pedidos criados dentro desse intervalo de datas."
#: pretix/base/exporters/orderlist.py:135 pretix/base/notifications.py:194
#: pretix/base/pdf.py:234 pretix/plugins/badges/exporters.py:484
@@ -1880,16 +1872,12 @@ msgid "Event date"
msgstr "Data do evento"
#: pretix/base/exporters/orderlist.py:138
#, fuzzy
#| msgid ""
#| "Only include orders including at least one ticket for a date on or after "
#| "this date. Will also include other dates in case of mixed orders!"
msgid ""
"Only include orders including at least one ticket for a date in this range. "
"Will also include other dates in case of mixed orders!"
msgstr ""
"Incluir apenas pedidos que possuam pelo menos um ingresso para esta data ou "
"após a mesma. Também incluirá outras datas em caso de pedidos mistos!"
"Incluir apenas pedidos que incluam pelo menos um ingresso para uma data "
"nesse intervalo. Também incluiremos outras datas no caso de pedidos mistos!"
#: pretix/base/exporters/orderlist.py:261
#: pretix/base/exporters/orderlist.py:440
@@ -2046,7 +2034,7 @@ msgstr "Canal de vendas"
#: pretix/base/exporters/orderlist.py:621 pretix/base/models/orders.py:275
#: pretix/control/forms/filter.py:240
msgid "Follow-up date"
msgstr ""
msgstr "Data de acompanhamento"
#: pretix/base/exporters/orderlist.py:286
#: pretix/control/templates/pretixcontrol/orders/index.html:151
@@ -2064,11 +2052,8 @@ msgstr "Endereço de e-mail verificado"
#: pretix/base/exporters/orderlist.py:288
#: pretix/base/exporters/orderlist.py:465
#: pretix/base/exporters/orderlist.py:659
#, fuzzy
#| msgctxt "refund_source"
#| msgid "Customer"
msgid "External customer ID"
msgstr "Cliente"
msgstr "ID do cliente externo"
#: pretix/base/exporters/orderlist.py:293
#, python-brace-format
@@ -2228,10 +2213,8 @@ msgstr "ID Proteção de Dados"
#: pretix/base/exporters/orderlist.py:611 pretix/control/forms/filter.py:677
#: pretix/control/templates/pretixcontrol/order/change.html:274
#, fuzzy
#| msgid "Device name"
msgid "Ticket secret"
msgstr "Nome do dispositivo"
msgstr "Segredo do bilhete"
#: pretix/base/exporters/orderlist.py:612 pretix/base/modelimport_orders.py:569
#: pretix/base/modelimport_vouchers.py:272
@@ -2266,7 +2249,7 @@ msgstr "Número do assento"
#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:108
#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:110
msgid "Blocked"
msgstr ""
msgstr "Bloqueado"
#: pretix/base/exporters/orderlist.py:618 pretix/base/modelimport_orders.py:499
#: pretix/base/models/orders.py:2466
@@ -2275,10 +2258,8 @@ msgstr ""
#: pretix/plugins/checkinlists/exporters.py:702
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:22
#: pretix/presale/templates/pretixpresale/organizers/customer_profile.html:131
#, fuzzy
#| msgid "Paid orders"
msgid "Valid from"
msgstr "Ordens pagas"
msgstr "Válido a partir de"
#: pretix/base/exporters/orderlist.py:619 pretix/base/modelimport_orders.py:507
#: pretix/base/modelimport_vouchers.py:111 pretix/base/models/orders.py:2471
@@ -2297,45 +2278,29 @@ msgid "Order comment"
msgstr "Comentário do pedido"
#: pretix/base/exporters/orderlist.py:622
#, fuzzy
#| msgid "Position ID"
msgid "Add-on to position ID"
msgstr "ID Posição"
msgstr "Complemento da ID de posição"
#: pretix/base/exporters/orderlist.py:650 pretix/base/pdf.py:340
#, fuzzy
#| msgctxt "invoice"
#| msgid "Invoice date"
msgid "Invoice address street"
msgstr "Data da fatura"
msgstr "Rua do endereço da fatura"
#: pretix/base/exporters/orderlist.py:650 pretix/base/pdf.py:345
#, fuzzy
#| msgctxt "invoice"
#| msgid "Invoice date"
msgid "Invoice address ZIP code"
msgstr "Data da fatura"
msgstr "CEP do Endereço da fatura"
#: pretix/base/exporters/orderlist.py:650 pretix/base/pdf.py:350
#, fuzzy
#| msgctxt "invoice"
#| msgid "Invoice date"
msgid "Invoice address city"
msgstr "Data da fatura"
msgstr "Cidade do Endereço da fatura"
#: pretix/base/exporters/orderlist.py:651 pretix/base/pdf.py:360
#, fuzzy
#| msgctxt "invoice"
#| msgid "Invoice date"
msgid "Invoice address country"
msgstr "Data da fatura"
msgstr "Estado do Endereço da fatura"
#: pretix/base/exporters/orderlist.py:652
#, fuzzy
#| msgid "Invoice address name"
msgctxt "address"
msgid "Invoice address state"
msgstr "Endereço da fatura"
msgstr "Estado do endereço da fatura"
#: pretix/base/exporters/orderlist.py:660 pretix/control/navigation.py:303
#: pretix/control/templates/pretixcontrol/checkin/lists.html:6
@@ -2345,13 +2310,11 @@ msgstr "Endereço da fatura"
#: pretix/control/templates/pretixcontrol/subevents/detail.html:162
#: pretix/plugins/checkinlists/apps.py:44
msgid "Check-in lists"
msgstr ""
msgstr "Listas de check-in"
#: pretix/base/exporters/orderlist.py:822
#, fuzzy
#| msgid "Creation date"
msgid "Order transaction data"
msgstr "Data de criação"
msgstr "Dados de transações de pedidos"
#: pretix/base/exporters/orderlist.py:824
msgid ""
@@ -2359,12 +2322,14 @@ msgid ""
"changes to products, prices or tax rates. The information is only accurate "
"for changes made with pretix versions released after October 2021."
msgstr ""
"Faça o download de uma planilha de todas as alterações substanciais em "
"pedidos, ou seja, todas as alterações em produtos, preços ou taxas de "
"impostos. As informações são precisas apenas para alterações feitas com "
"versões pretix lançadas após outubro de 2021."
#: pretix/base/exporters/orderlist.py:840
#, fuzzy
#| msgid "Only include orders created on or after this date."
msgid "Only include transactions created within this date range."
msgstr "Incluir apenas pedidos criados a partir desta data."
msgstr "Inclua apenas as transações criadas dentro desse intervalo de datas."
#: pretix/base/exporters/orderlist.py:875 pretix/base/models/event.py:659
#: pretix/base/models/items.py:424 pretix/base/models/items.py:1979
@@ -2393,25 +2358,19 @@ msgstr "Evento"
#: pretix/plugins/paypal2/templates/pretixplugins/paypal2/control_legacy.html:15
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:75
msgid "Currency"
msgstr ""
msgstr "Moeda"
#: pretix/base/exporters/orderlist.py:883
#, fuzzy
#| msgid "Creation date"
msgid "Transaction date"
msgstr "Data de criação"
msgstr "Data da transação"
#: pretix/base/exporters/orderlist.py:884
#, fuzzy
#| msgid "Creation date"
msgid "Transaction time"
msgstr "Data de criação"
msgstr "Hora da transação"
#: pretix/base/exporters/orderlist.py:885
#, fuzzy
#| msgid "Order data"
msgid "Old data"
msgstr "Informação do pedido"
msgstr "Dados antigos"
#: pretix/base/exporters/orderlist.py:888 pretix/base/models/items.py:1502
#: pretix/control/templates/pretixcontrol/order/transactions.html:22

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-06-08 18:00+0000\n"
"Last-Translator: David Vaz <davidmgvaz@gmail.com>\n"
"PO-Revision-Date: 2024-09-08 10:55+0000\n"
"Last-Translator: Martin Gross <gross@rami.io>\n"
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
"pretix/pretix/pt_PT/>\n"
"Language: pt_PT\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.5.5\n"
"X-Generator: Weblate 5.7\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -7940,28 +7940,24 @@ msgid "number of entries today"
msgstr "número de entradas hoje"
#: pretix/base/services/checkin.py:318
#, fuzzy, python-brace-format
#| msgid "number of entries today"
#, python-brace-format
msgid "number of entries since {datetime}"
msgstr "número de entradas hoje"
msgstr "número de entradas hoje {datetime}"
#: pretix/base/services/checkin.py:319
#, fuzzy, python-brace-format
#| msgid "number of entries today"
#, python-brace-format
msgid "number of entries before {datetime}"
msgstr "número de entradas hoje"
msgstr "número de entradas hoje {datetime}"
#: pretix/base/services/checkin.py:320
#, fuzzy, python-brace-format
#| msgid "number of entries today"
#, python-brace-format
msgid "number of days with an entry since {datetime}"
msgstr "número de entradas hoje"
msgstr "número de entradas hoje {datetime}"
#: pretix/base/services/checkin.py:321
#, fuzzy, python-brace-format
#| msgid "number of entries today"
#, python-brace-format
msgid "number of days with an entry before {datetime}"
msgstr "número de entradas hoje"
msgstr "número de entradas hoje {datetime}"
#: pretix/base/services/checkin.py:322
msgid "week day"
@@ -8029,16 +8025,14 @@ msgid "This order is not yet approved."
msgstr "Esta encomenda não está pendente de aprovação."
#: pretix/base/services/checkin.py:999 pretix/base/services/checkin.py:1003
#, fuzzy, python-brace-format
#| msgid "Only allowed after {datetime}"
#, python-brace-format
msgid "This ticket is only valid after {datetime}."
msgstr "Permitido após {datetime}"
msgstr "Permitido após {datetime}."
#: pretix/base/services/checkin.py:1013 pretix/base/services/checkin.py:1017
#, fuzzy, python-brace-format
#| msgid "This ticket has already been redeemed."
#, python-brace-format
msgid "This ticket was only valid before {datetime}."
msgstr "Este bilhete já foi resgatado."
msgstr "Este bilhete já foi resgatado {datetime}."
#: pretix/base/services/checkin.py:1048
msgid "This order position has an invalid product for this check-in list."
@@ -8098,10 +8092,8 @@ msgid "Export failed"
msgstr "Ficheiros exportados"
#: pretix/base/services/export.py:206
#, fuzzy
#| msgid "Permission denied"
msgid "Permission denied."
msgstr "Permissão negada"
msgstr "Permissão negada."
#: pretix/base/services/export.py:221
msgid "Your exported data exceeded the size limit for scheduled exports."
@@ -8172,14 +8164,7 @@ msgid "New invoice: {number}"
msgstr "Nova fatura: {number}"
#: pretix/base/services/invoices.py:528
#, fuzzy, python-brace-format
#| msgid ""
#| "Hello,\n"
#| "\n"
#| "a new invoice for {event} has been created, see attached.\n"
#| "\n"
#| "We are sending this email because you configured us to do so in your "
#| "event settings."
#, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -8190,7 +8175,7 @@ msgid ""
msgstr ""
"Olá,\n"
"\n"
"Uma nova fatura para {event} foi criada, consulte anexo.\n"
"Uma nova fatura a ordem {order} em {event} foi criada, consulte anexo.\n"
"\n"
"Estamos a enviar este e -mail porque configurou para fazê -lo nas suas "
"configurações de evento."
@@ -8314,20 +8299,17 @@ msgstr ""
"vezes, que é o valor máximo."
#: pretix/base/services/memberships.py:227
#, fuzzy, python-brace-format
#| msgid ""
#| "You are trying to use a membership of type \"{type}\" for an event taking "
#| "place at {date}, however you already used the same membership for a "
#| "different ticket at the same time."
#, python-brace-format
msgid ""
"You are trying to use a membership of type \"{type}\" for a ticket valid "
"from {valid_from} until {valid_until}, however you already used the same "
"membership for a different ticket that overlaps with this time frame "
"({conflict_from} {conflict_until})."
msgstr ""
"Está a tentar usar uma associação do tipo \"{type}\" para um evento que "
"ocorre em {date}, no entanto, já usou a mesma associação para um ticket "
"diferente ao mesmo tempo."
"Está a tentar utilizar uma adesão do tipo \"{type}\" para um bilhete válido "
"de {valid_from} até {valid_until}, no entanto já usou a mesma adesão para um "
"bilhete diferente que se sobrepõe a este prazo ({conflict_from} "
"{conflict_until})."
#: pretix/base/services/memberships.py:231
#: pretix/base/services/memberships.py:233
@@ -8736,10 +8718,8 @@ msgstr ""
"Algo aconteceu no seu evento após a exportação, por favor tente novamente."
#: pretix/base/services/shredder.py:177
#, fuzzy
#| msgid "Payment completed."
msgid "Data shredding completed"
msgstr "Pagamento completo."
msgstr "Pagamento completo"
#: pretix/base/services/stats.py:215
msgid "Uncategorized"
@@ -9248,10 +9228,9 @@ msgstr ""
"%y (sem século) para inserir o ano da factura, ou %m e %d para o dia do mês."
#: pretix/base/settings.py:684 pretix/base/settings.py:706
#, fuzzy, python-brace-format
#| msgid "Please do not use special characters in names."
#, python-brace-format
msgid "Please only use the characters {allowed} in this field."
msgstr "Por favor não use caracteres especiais em nomes."
msgstr "Por favor, utilize apenas os caracteres {allowed} neste campo."
#: pretix/base/settings.py:697
msgid "Invoice number prefix for cancellations"
@@ -10085,21 +10064,16 @@ msgid "No modifications after order was submitted"
msgstr ""
#: pretix/base/settings.py:1669 pretix/base/settings.py:1678
#, fuzzy
#| msgid "Only pending or paid orders can be changed."
msgid "Only the person who ordered can make changes"
msgstr "Apenas encomendas pendentes ou pagas podem ser alteradas."
msgstr "Apenas encomendas pendentes ou pagas podem ser alteradas"
#: pretix/base/settings.py:1670 pretix/base/settings.py:1679
msgid "Both the attendee and the person who ordered can make changes"
msgstr ""
#: pretix/base/settings.py:1674
#, fuzzy
#| msgid "Allow customers to modify their information after they checked in."
msgid "Allow customers to modify their information"
msgstr ""
"Permitir que os clientes modifiquem as suas informações após o check -in."
msgstr "Permitir que os clientes modifique as suas informações"
#: pretix/base/settings.py:1689
msgid "Allow customers to modify their information after they checked in."
@@ -11089,17 +11063,7 @@ msgstr ""
"A sua equipa {event}"
#: pretix/base/settings.py:2530 pretix/base/settings.py:2567
#, fuzzy, python-brace-format
#| msgid ""
#| "Hello {attendee_name},\n"
#| "\n"
#| "a ticket for {event} has been ordered for you.\n"
#| "\n"
#| "You can view the details and status of your ticket here:\n"
#| "{url}\n"
#| "\n"
#| "Best regards, \n"
#| "Your {event} team"
#, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -11111,7 +11075,7 @@ msgid ""
"Best regards, \n"
"Your {event} team"
msgstr ""
"Olá {attendee_name},\n"
"Olá,\n"
"\n"
"um bilhete para {event} foi pedido para si.\n"
"\n"
@@ -11928,10 +11892,9 @@ msgid "The last payment date cannot be before the end of presale."
msgstr "A última data de pagamento não pode ser antes do final da pré-venda."
#: pretix/base/settings.py:3811
#, fuzzy, python-brace-format
#| msgid "Please enter a valid sales channel."
#, python-brace-format
msgid "The value \"{identifier}\" is not a valid sales channel."
msgstr "Por favor, indique um canal de vendas válido."
msgstr "O valor \"{identifier}\" não é um canal de vendas válido."
#: pretix/base/settings.py:3826
msgid "This needs to be disabled if other NFC-based types are active."
@@ -15480,18 +15443,20 @@ msgid "A new secret has been generated for position #{posid}."
msgstr "Um novo segredo foi gerado para a posição #{posid}."
#: pretix/control/logdisplay.py:165
#, fuzzy, python-brace-format
#| msgid "This order position has been canceled."
#, python-brace-format
msgid ""
"The validity start date for position #{posid} has been changed to {value}."
msgstr "Esta posição encomenda foi cancelada."
msgstr ""
"A data de início de validade para a posição #{posid} foi alterada para "
"{value}."
#: pretix/control/logdisplay.py:171
#, fuzzy, python-brace-format
#| msgid "This order position has been canceled."
#, python-brace-format
msgid ""
"The validity end date for position #{posid} has been changed to {value}."
msgstr "Esta posição encomenda foi cancelada."
msgstr ""
"A data de final de validade para a posição #{posid} foi alterada para "
"{value}."
#: pretix/control/logdisplay.py:176
#, fuzzy, python-brace-format
@@ -17536,10 +17501,7 @@ msgid "Delete check-ins"
msgstr "Excluir lista de check-in"
#: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:15
#, fuzzy, python-format
#| msgid ""
#| "Are you sure you want to delete the check-in list <strong>%(name)s</"
#| "strong>?"
#, python-format
msgid ""
"Are you sure you want to permanently delete the check-ins of <strong>one "
"ticket</strong>."
@@ -17547,11 +17509,11 @@ msgid_plural ""
"Are you sure you want to permanently delete the check-ins of "
"<strong>%(count)s tickets</strong>?"
msgstr[0] ""
"Tem certeza de que deseja apagar a lista de check-in <strong>%(name)s</"
"strong>?"
"Tem certeza de que deseja apagar a lista de check-in "
"<strong>%(count)s</strong>?"
msgstr[1] ""
"Tem certeza de que deseja apagar a lista de check-in <strong>%(name)s</"
"strong>?"
"Tem certeza de que deseja apagar a lista de check-in "
"<strong>%(count)s</strong>?"
#: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:24
#: pretix/control/templates/pretixcontrol/checkin/list_delete.html:18
@@ -20761,11 +20723,8 @@ msgstr ""
"produto foi definido"
#: pretix/control/templates/pretixcontrol/items/discounts.html:111
#, fuzzy
#| msgctxt "discount"
#| msgid "Condition"
msgid "Condition:"
msgstr "Doença"
msgstr "Doença:"
#: pretix/control/templates/pretixcontrol/items/discounts.html:126
msgid "Applies to:"
@@ -22936,10 +22895,8 @@ msgid "Channel type"
msgstr "Tipo de digitalização"
#: pretix/control/templates/pretixcontrol/organizers/channel_delete.html:5
#, fuzzy
#| msgid "Sales channel"
msgid "Delete sales channel:"
msgstr "Canal de vendas"
msgstr "Canal de vendas:"
#: pretix/control/templates/pretixcontrol/organizers/channel_delete.html:10
#, fuzzy
@@ -22960,10 +22917,8 @@ msgstr ""
"sua data de término para o passado."
#: pretix/control/templates/pretixcontrol/organizers/channel_edit.html:6
#, fuzzy
#| msgid "Sales channel"
msgid "Sales channel:"
msgstr "Canal de vendas"
msgstr "Canal de vendas:"
#: pretix/control/templates/pretixcontrol/organizers/channels.html:8
msgid ""
@@ -26957,10 +26912,9 @@ msgid "Your export schedule has been saved, but no next export is planned."
msgstr ""
#: pretix/control/views/orders.py:2704 pretix/control/views/organizer.py:1859
#, fuzzy, python-brace-format
#| msgid "Export date"
#, python-brace-format
msgid "Export: {title}"
msgstr "Data de Exportação"
msgstr "Exportação: {title}"
#: pretix/control/views/orders.py:2705 pretix/control/views/organizer.py:1861
#, python-brace-format
@@ -28336,10 +28290,9 @@ msgid "The invoice was sent to the designated email address."
msgstr "Digite o mesmo endereço de e-mail duas vezes."
#: pretix/plugins/banktransfer/signals.py:132
#, fuzzy, python-brace-format
#| msgid "Invoice number"
#, python-brace-format
msgid "Invoice {invoice_number}"
msgstr "Número da factura"
msgstr "Factura {invoice_number}"
#: pretix/plugins/banktransfer/signals.py:137
#, python-brace-format
@@ -29761,10 +29714,9 @@ msgstr ""
#: pretix/plugins/reports/accountingreport.py:644
#: pretix/plugins/reports/accountingreport.py:694
#, fuzzy, python-brace-format
#| msgid "Extend payment term"
#, python-brace-format
msgid "Pending payments at {datetime}"
msgstr "Estender prazo de pagamento"
msgstr "Pagamentos pendentes em {datetime}"
#: pretix/plugins/reports/accountingreport.py:751
#: pretix/plugins/reports/accountingreport.py:789
@@ -30441,16 +30393,13 @@ msgid "There are no matching recipients for your selection."
msgstr "Não há encomendas correspondentes a esta selecção."
#: pretix/plugins/sendmail/views.py:223
#, fuzzy, python-format
#| msgid ""
#| "Your message has been queued and will be sent to the contact addresses of "
#| "%d orders in the next few minutes."
#, python-format
msgid ""
"Your message has been queued and will be sent to the contact addresses of %s "
"in the next few minutes."
msgstr ""
"A sua mensagem foi colocada na fila e será enviada para os endereços de "
"contato de %d pedidos nos próximos minutos."
"contato de %s pedidos nos próximos minutos."
#: pretix/plugins/sendmail/views.py:253
#, fuzzy
@@ -30478,12 +30427,11 @@ msgid ""
msgstr ""
#: pretix/plugins/sendmail/views.py:516
#, fuzzy, python-format
#| msgid "Waiting list entry"
#, python-format
msgid "%(number)s waiting list entry"
msgid_plural "%(number)s waiting list entries"
msgstr[0] "Entrada em fila de espera"
msgstr[1] "Entrada em fila de espera"
msgstr[0] "%(number)s entrada em fila de espera"
msgstr[1] "%(number)s entrada em fila de espera"
#: pretix/plugins/statistics/apps.py:30 pretix/plugins/statistics/apps.py:33
#: pretix/plugins/statistics/signals.py:37
@@ -31438,16 +31386,12 @@ msgid "Enter the entity number, reference number, and amount."
msgstr ""
#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:25
#, fuzzy
#| msgid "Invoice number"
msgid "Entity number:"
msgstr "Número da factura"
msgstr "Número da factura:"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:26
#, fuzzy
#| msgid "Reference code"
msgid "Reference number:"
msgstr "Código de referência"
msgstr "Código de referência:"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:35
msgid ""
@@ -33379,7 +33323,7 @@ msgstr "Participe da lista de espera"
#: pretix/presale/templates/pretixpresale/event/voucher.html:437
msgctxt "free_tickets"
msgid "Register"
msgstr "Registo"
msgstr "Registro"
#: pretix/presale/templates/pretixpresale/event/index.html:222
#: pretix/presale/templates/pretixpresale/event/voucher.html:442
@@ -33858,11 +33802,11 @@ msgstr "Total: %(total)s"
#: pretix/presale/templates/pretixpresale/event/position.html:7
msgid "Registration details"
msgstr "Detalhes do registo"
msgstr "Detalhes do registro"
#: pretix/presale/templates/pretixpresale/event/position.html:10
msgid "Your registration"
msgstr "O seu registo"
msgstr "O seu registro"
#: pretix/presale/templates/pretixpresale/event/position.html:31
msgid "Your items"
@@ -34741,16 +34685,13 @@ msgstr ""
"disponível atualmente."
#: pretix/presale/views/waiting.py:141
#, fuzzy, python-brace-format
#| msgid ""
#| "We've added you to the waiting list. You will receive an email as soon as "
#| "this product gets available again."
#, python-brace-format
msgid ""
"We've added you to the waiting list. We will send an email to {email} as "
"soon as this product gets available again."
msgstr ""
"Adicionamos você à lista de espera. Você receberá um email assim que este "
"produto estiver disponível novamente."
"Adicionámos à lista de espera. Enviaremos um e-mail para {email} assim que "
"este produto estiver novamente disponível."
#: pretix/presale/views/waiting.py:169
msgid "We could not find you on our waiting list."

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-06-08 18:00+0000\n"
"Last-Translator: David Vaz <davidmgvaz@gmail.com>\n"
"PO-Revision-Date: 2024-09-08 11:04+0000\n"
"Last-Translator: Martin Gross <gross@rami.io>\n"
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
"pretix/pretix-js/pt_PT/>\n"
"Language: pt_PT\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.5.5\n"
"X-Generator: Weblate 5.7\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -292,10 +292,8 @@ msgid "Information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
#, fuzzy
#| msgid "Unknown error."
msgid "Unknown ticket"
msgstr "Erro desconhecido."
msgstr "Bilhete desconhecido"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
@@ -805,21 +803,19 @@ msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:20
msgctxt "widget"
msgid "Select"
msgstr ""
msgstr "Selecionar"
#: pretix/static/pretixpresale/js/widget/widget.js:21
#, javascript-format
msgctxt "widget"
msgid "Select %s"
msgstr ""
msgstr "Selecionados %s"
#: pretix/static/pretixpresale/js/widget/widget.js:22
#, fuzzy, javascript-format
#| msgctxt "widget"
#| msgid "See variations"
#, javascript-format
msgctxt "widget"
msgid "Select variant %s"
msgstr "Ver alternativas"
msgstr "Selecione variantes %s"
#: pretix/static/pretixpresale/js/widget/widget.js:23
msgctxt "widget"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-05-13 21:00+0000\n"
"Last-Translator: Serhii Horichenko <m@sgg.im>\n"
"PO-Revision-Date: 2024-09-16 13:00+0000\n"
"Last-Translator: Svyatoslav <slava@digitalarthouse.eu>\n"
"Language-Team: Russian <https://translate.pretix.eu/projects/pretix/pretix/"
"ru/>\n"
"Language: ru\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.4.3\n"
"X-Generator: Weblate 5.7\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -32313,7 +32313,7 @@ msgstr "Пожалуйста, выберите конкретный вариан
#: pretix/presale/templates/pretixpresale/event/index.html:82
msgid "View other date"
msgstr "Посмотреть другую дату"
msgstr "Посмотреть другие даты или мероприятия"
#: pretix/presale/templates/pretixpresale/event/index.html:87
msgid "Choose date to book a ticket"

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-06-26 22:00+0000\n"
"PO-Revision-Date: 2024-09-15 18:00+0000\n"
"Last-Translator: Kristian Feldsam <feldsam@gmail.com>\n"
"Language-Team: Slovak <https://translate.pretix.eu/projects/pretix/pretix-js/"
"sk/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 5.6.1\n"
"X-Generator: Weblate 5.7\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -156,7 +156,7 @@ msgstr ""
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
msgid "Paid orders"
msgstr ""
msgstr "Zaplatené objednávky"
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27
msgid "Total revenue"
@@ -176,15 +176,15 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr ""
msgstr "Vyberte zoznam na odbavenie"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr ""
msgstr "Nenašli sa žiadne aktívne zoznamy na odbavenie."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr ""
msgstr "Prepnúť zoznam odbavení"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
@@ -274,7 +274,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr ""
msgstr "Už použitá vstupenka"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
@@ -282,7 +282,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr ""
msgstr "Neznáma vstupenka"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
@@ -318,7 +318,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr ""
msgstr "Odbavené vstupenky"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
@@ -398,6 +398,9 @@ msgid ""
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
"Momentálne odosielame vašu požiadavku na server. Ak to trvá dlhšie ako jednu "
"minútu, skontrolujte svoje internetové pripojenie a potom znovu načítajte "
"túto stránku a skúste to znova."
#: pretix/static/pretixbase/js/asynctask.js:301
#: pretix/static/pretixcontrol/js/ui/main.js:71
@@ -546,7 +549,7 @@ msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr ""
msgstr "QR na odbavenie"
#: pretix/static/pretixcontrol/js/ui/editor.js:543
msgid "The PDF background file could not be loaded for the following reason:"
@@ -683,6 +686,8 @@ msgid ""
"The items in your cart are no longer reserved for you. You can still "
"complete your order as long as theyre available."
msgstr ""
"Vstupenky v košíku už nie sú pre Vás rezervované. Objednávku môžete "
"dokončiť, ak sú stále k dispozícii."
#: pretix/static/pretixpresale/js/ui/cart.js:45
msgid "Cart expired"
@@ -691,8 +696,9 @@ msgstr ""
#: pretix/static/pretixpresale/js/ui/cart.js:50
msgid "The items in your cart are reserved for you for one minute."
msgid_plural "The items in your cart are reserved for you for {num} minutes."
msgstr[0] ""
msgstr[1] ""
msgstr[0] "Vstupenky v košíku sú pre Vás rezervované jednu minútu."
msgstr[1] "Vstupenky v košíku sú pre Vás rezervované {num} minúty."
msgstr[2] "Vstupenky v košíku sú pre Vás rezervované {num} minút."
#: pretix/static/pretixpresale/js/ui/main.js:203
msgid "The organizer keeps %(currency)s %(amount)s"
@@ -704,11 +710,11 @@ msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:227
msgid "Please enter the amount the organizer can keep."
msgstr ""
msgstr "Zadajte sumu, ktorú si organizátor môže ponechať."
#: pretix/static/pretixpresale/js/ui/main.js:449
msgid "Please enter a quantity for one of the ticket types."
msgstr ""
msgstr "Vyberte si prosím aspoň jednu vstupenku."
#: pretix/static/pretixpresale/js/ui/main.js:485
msgid "required"
@@ -730,131 +736,131 @@ msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:16
msgctxt "widget"
msgid "Quantity"
msgstr ""
msgstr "Počet"
#: pretix/static/pretixpresale/js/widget/widget.js:17
msgctxt "widget"
msgid "Decrease quantity"
msgstr ""
msgstr "Znížiť počet"
#: pretix/static/pretixpresale/js/widget/widget.js:18
msgctxt "widget"
msgid "Increase quantity"
msgstr ""
msgstr "Zvýšiť počet"
#: pretix/static/pretixpresale/js/widget/widget.js:19
msgctxt "widget"
msgid "Price"
msgstr ""
msgstr "Cena"
#: pretix/static/pretixpresale/js/widget/widget.js:20
msgctxt "widget"
msgid "Select"
msgstr ""
msgstr "Vybrať"
#: pretix/static/pretixpresale/js/widget/widget.js:21
#, javascript-format
msgctxt "widget"
msgid "Select %s"
msgstr ""
msgstr "Vybrať %s"
#: pretix/static/pretixpresale/js/widget/widget.js:22
#, javascript-format
msgctxt "widget"
msgid "Select variant %s"
msgstr ""
msgstr "Vybrať variantu %s"
#: pretix/static/pretixpresale/js/widget/widget.js:23
msgctxt "widget"
msgid "Sold out"
msgstr ""
msgstr "Vypredané"
#: pretix/static/pretixpresale/js/widget/widget.js:24
msgctxt "widget"
msgid "Buy"
msgstr ""
msgstr "Kúpiť"
#: pretix/static/pretixpresale/js/widget/widget.js:25
msgctxt "widget"
msgid "Register"
msgstr ""
msgstr "Registrovať sa"
#: pretix/static/pretixpresale/js/widget/widget.js:26
msgctxt "widget"
msgid "Reserved"
msgstr ""
msgstr "Rezervované"
#: pretix/static/pretixpresale/js/widget/widget.js:27
msgctxt "widget"
msgid "FREE"
msgstr ""
msgstr "ZADARMO"
#: pretix/static/pretixpresale/js/widget/widget.js:28
msgctxt "widget"
msgid "from %(currency)s %(price)s"
msgstr ""
msgstr "z %(currency)s %(price)s"
#: pretix/static/pretixpresale/js/widget/widget.js:29
msgctxt "widget"
msgid "incl. %(rate)s% %(taxname)s"
msgstr ""
msgstr "vrátane %(rate)s% %(taxname)s"
#: pretix/static/pretixpresale/js/widget/widget.js:30
msgctxt "widget"
msgid "plus %(rate)s% %(taxname)s"
msgstr ""
msgstr "plus %(rate)s% %(taxname)s"
#: pretix/static/pretixpresale/js/widget/widget.js:31
msgctxt "widget"
msgid "incl. taxes"
msgstr ""
msgstr "vrátane dane"
#: pretix/static/pretixpresale/js/widget/widget.js:32
msgctxt "widget"
msgid "plus taxes"
msgstr ""
msgstr "plus daň"
#: pretix/static/pretixpresale/js/widget/widget.js:33
#, javascript-format
msgctxt "widget"
msgid "currently available: %s"
msgstr ""
msgstr "aktuálne k dispozícii: %s"
#: pretix/static/pretixpresale/js/widget/widget.js:34
msgctxt "widget"
msgid "Only available with a voucher"
msgstr ""
msgstr "K dispozícii len s poukážkou"
#: pretix/static/pretixpresale/js/widget/widget.js:35
msgctxt "widget"
msgid "Not yet available"
msgstr ""
msgstr "Zatiaľ nedostupné"
#: pretix/static/pretixpresale/js/widget/widget.js:36
msgctxt "widget"
msgid "Not available anymore"
msgstr ""
msgstr "Už nie je k dispozícii"
#: pretix/static/pretixpresale/js/widget/widget.js:37
msgctxt "widget"
msgid "Currently not available"
msgstr ""
msgstr "Momentálne nie je k dispozícii"
#: pretix/static/pretixpresale/js/widget/widget.js:38
#, javascript-format
msgctxt "widget"
msgid "minimum amount to order: %s"
msgstr ""
msgstr "minimálna suma na objednávku: %s"
#: pretix/static/pretixpresale/js/widget/widget.js:39
msgctxt "widget"
msgid "Close ticket shop"
msgstr ""
msgstr "Zatvoriť obchod so vstupenkami"
#: pretix/static/pretixpresale/js/widget/widget.js:40
msgctxt "widget"
msgid "The ticket shop could not be loaded."
msgstr ""
msgstr "Obchod so vstupenkami sa nepodarilo načítať."
#: pretix/static/pretixpresale/js/widget/widget.js:41
msgctxt "widget"
@@ -862,16 +868,18 @@ msgid ""
"There are currently a lot of users in this ticket shop. Please open the shop "
"in a new tab to continue."
msgstr ""
"V súčasnosti je v tomto obchode so vstupenkami veľa používateľov. Ak chcete "
"pokračovať, otvorte obchod v novej karte."
#: pretix/static/pretixpresale/js/widget/widget.js:43
msgctxt "widget"
msgid "Open ticket shop"
msgstr ""
msgstr "Otvoriť obchod so vstupenkami"
#: pretix/static/pretixpresale/js/widget/widget.js:44
msgctxt "widget"
msgid "The cart could not be created. Please try again later"
msgstr ""
msgstr "Nákupný košík sa nepodarilo vytvoriť. Skúste to prosím neskôr"
#: pretix/static/pretixpresale/js/widget/widget.js:45
msgctxt "widget"
@@ -879,11 +887,14 @@ msgid ""
"We could not create your cart, since there are currently too many users in "
"this ticket shop. Please click \"Continue\" to retry in a new tab."
msgstr ""
"Nepodarilo sa nám vytvoriť Váš nákupný košík, pretože v tomto obchode je "
"momentálne príliš veľa používateľov. Kliknutím na tlačidlo „Pokračovať“ to "
"skúste znova v novej karte."
#: pretix/static/pretixpresale/js/widget/widget.js:47
msgctxt "widget"
msgid "Waiting list"
msgstr ""
msgstr "Čakací zoznam"
#: pretix/static/pretixpresale/js/widget/widget.js:48
msgctxt "widget"
@@ -891,86 +902,88 @@ msgid ""
"You currently have an active cart for this event. If you select more "
"products, they will be added to your existing cart."
msgstr ""
"V súčasnosti máte aktívny nákupný košík pre toto podujatie. Ak si vyberiete "
"ďalšie vstupenky, pridajú sa do vášho existujúceho košíka."
#: pretix/static/pretixpresale/js/widget/widget.js:50
msgctxt "widget"
msgid "Resume checkout"
msgstr ""
msgstr "Pokračovať v objednávke"
#: pretix/static/pretixpresale/js/widget/widget.js:51
msgctxt "widget"
msgid "Redeem a voucher"
msgstr ""
msgstr "Uplatnenie poukážky"
#: pretix/static/pretixpresale/js/widget/widget.js:52
msgctxt "widget"
msgid "Redeem"
msgstr ""
msgstr "Uplatniť"
#: pretix/static/pretixpresale/js/widget/widget.js:53
msgctxt "widget"
msgid "Voucher code"
msgstr ""
msgstr "Kód poukážky"
#: pretix/static/pretixpresale/js/widget/widget.js:54
msgctxt "widget"
msgid "Close"
msgstr ""
msgstr "Zatvoriť"
#: pretix/static/pretixpresale/js/widget/widget.js:55
msgctxt "widget"
msgid "Continue"
msgstr ""
msgstr "Pokračovať"
#: pretix/static/pretixpresale/js/widget/widget.js:56
msgctxt "widget"
msgid "Show variants"
msgstr ""
msgstr "Zobraziť varianty"
#: pretix/static/pretixpresale/js/widget/widget.js:57
msgctxt "widget"
msgid "Hide variants"
msgstr ""
msgstr "Skryť varianty"
#: pretix/static/pretixpresale/js/widget/widget.js:58
msgctxt "widget"
msgid "Choose a different event"
msgstr ""
msgstr "Vybrať iné podujatie"
#: pretix/static/pretixpresale/js/widget/widget.js:59
msgctxt "widget"
msgid "Choose a different date"
msgstr ""
msgstr "Vybrať iný dátum"
#: pretix/static/pretixpresale/js/widget/widget.js:60
msgctxt "widget"
msgid "Back"
msgstr ""
msgstr "Späť"
#: pretix/static/pretixpresale/js/widget/widget.js:61
msgctxt "widget"
msgid "Next month"
msgstr ""
msgstr "Nasledujúci mesiac"
#: pretix/static/pretixpresale/js/widget/widget.js:62
msgctxt "widget"
msgid "Previous month"
msgstr ""
msgstr "Predchádzajúci mesiac"
#: pretix/static/pretixpresale/js/widget/widget.js:63
msgctxt "widget"
msgid "Next week"
msgstr ""
msgstr "Nasledujúci týždeň"
#: pretix/static/pretixpresale/js/widget/widget.js:64
msgctxt "widget"
msgid "Previous week"
msgstr ""
msgstr "Predchádzajúci týždeň"
#: pretix/static/pretixpresale/js/widget/widget.js:65
msgctxt "widget"
msgid "Open seat selection"
msgstr ""
msgstr "Zobraziť výber sedadiel"
#: pretix/static/pretixpresale/js/widget/widget.js:66
msgctxt "widget"
@@ -979,11 +992,14 @@ msgid ""
"add yourself to the waiting list. We will then notify if seats are available "
"again."
msgstr ""
"Niektoré alebo všetky kategórie vstupeniek sú v súčasnosti vypredané. Ak "
"chcete, môžete sa pridať na zoznam čakateľov. Budeme vás informovať, ak sa "
"miesta uvoľnia."
#: pretix/static/pretixpresale/js/widget/widget.js:67
msgctxt "widget"
msgid "Load more"
msgstr ""
msgstr "Načítať viac"
#: pretix/static/pretixpresale/js/widget/widget.js:69
msgid "Mo"

File diff suppressed because it is too large Load Diff

View File

@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-06-27 17:00+0000\n"
"Last-Translator: Erik Löfman <erik@disruptiveventures.se>\n"
"Language-Team: Swedish <https://translate.pretix.eu/projects/pretix/pretix-"
"js/sv/>\n"
"PO-Revision-Date: 2024-09-12 03:00+0000\n"
"Last-Translator: Tinna Sandström <tinna@coeo.events>\n"
"Language-Team: Swedish <https://translate.pretix.eu/projects/pretix/"
"pretix-js/sv/>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.1\n"
"X-Generator: Weblate 5.7\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -727,8 +727,8 @@ msgstr "Varukorgen har gått ut"
#: pretix/static/pretixpresale/js/ui/cart.js:50
msgid "The items in your cart are reserved for you for one minute."
msgid_plural "The items in your cart are reserved for you for {num} minutes."
msgstr[0] "Artiklarna i din varukorg är reserverade för dig i en minut."
msgstr[1] "Artiklarna i din varukorg är reserverade för dig i {num} minuter."
msgstr[0] "Produkterna i din bokning är reserverade för dig i en minut."
msgstr[1] "Produkterna i din bokning är reserverade för dig i {num} minuter."
#: pretix/static/pretixpresale/js/ui/main.js:203
msgid "The organizer keeps %(currency)s %(amount)s"
@@ -819,7 +819,7 @@ msgstr "Köp"
#: pretix/static/pretixpresale/js/widget/widget.js:25
msgctxt "widget"
msgid "Register"
msgstr "Registrera"
msgstr "BOKA"
#: pretix/static/pretixpresale/js/widget/widget.js:26
msgctxt "widget"
@@ -829,7 +829,7 @@ msgstr "Reserverad"
#: pretix/static/pretixpresale/js/widget/widget.js:27
msgctxt "widget"
msgid "FREE"
msgstr "GRATIS"
msgstr "ANTAL"
#: pretix/static/pretixpresale/js/widget/widget.js:28
msgctxt "widget"
@@ -921,7 +921,7 @@ msgstr "Öppna biljettbutik"
#: pretix/static/pretixpresale/js/widget/widget.js:44
msgctxt "widget"
msgid "The cart could not be created. Please try again later"
msgstr "Varukorgen kunde inte skapas. Vänligen försök senare"
msgstr "Bokningen kunde inte skapas. Vänligen försök senare."
#: pretix/static/pretixpresale/js/widget/widget.js:45
msgctxt "widget"
@@ -929,9 +929,8 @@ msgid ""
"We could not create your cart, since there are currently too many users in "
"this ticket shop. Please click \"Continue\" to retry in a new tab."
msgstr ""
"Vi kunde inte skapa din varukorg, då det just nu är många användare i den "
"här biljettbutiken. Klicka på \"Fortsätt\" för att försöka på nytt i en ny "
"flik."
"Vi kunde inte skapa din bokning, då det just nu är många användare i den här "
"biljettbutiken. Klicka på \"Fortsätt\" för att försöka på nytt i en ny flik."
#: pretix/static/pretixpresale/js/widget/widget.js:47
msgctxt "widget"
@@ -944,13 +943,13 @@ msgid ""
"You currently have an active cart for this event. If you select more "
"products, they will be added to your existing cart."
msgstr ""
"Du har för tillfället en aktiv varukorg för den här eventet. Om du väljer "
"fler artiklar, kommer de att läggas till din befintliga varukorg."
"Du har för tillfället en pågående bokning för den här eventet. Om du väljer "
"fler produkter, kommer de att läggas till din befintliga bokning."
#: pretix/static/pretixpresale/js/widget/widget.js:50
msgctxt "widget"
msgid "Resume checkout"
msgstr "Fortsätt med ditt köp"
msgstr "Fortsätt med ditt bokningen"
#: pretix/static/pretixpresale/js/widget/widget.js:51
msgctxt "widget"

View File

@@ -162,6 +162,21 @@ def _handle_transaction(trans: BankTransaction, matches: tuple, event: Event = N
else:
trans.order = orders[0]
if len(orders) > 1:
# Multi-match! Can we split this automatically?
order_pending_sum = sum(o.pending_sum for o in orders)
if order_pending_sum != trans.amount:
# we can't :( this needs to be dealt with by a human
trans.state = BankTransaction.STATE_NOMATCH
trans.message = gettext_noop('Automatic split to multiple orders not possible.')
trans.save()
return
# we can!
splits = [(o, o.pending_sum) for o in orders]
else:
splits = [(orders[0], trans.amount)]
for o in orders:
if o.status == Order.STATUS_PAID and o.pending_sum <= Decimal('0.00'):
trans.state = BankTransaction.STATE_DUPLICATE
@@ -179,21 +194,6 @@ def _handle_transaction(trans: BankTransaction, matches: tuple, event: Event = N
trans.save()
return
if len(orders) > 1:
# Multi-match! Can we split this automatically?
order_pending_sum = sum(o.pending_sum for o in orders)
if order_pending_sum != trans.amount:
# we can't :( this needs to be dealt with by a human
trans.state = BankTransaction.STATE_NOMATCH
trans.message = gettext_noop('Automatic split to multiple orders not possible.')
trans.save()
return
# we can!
splits = [(o, o.pending_sum) for o in orders]
else:
splits = [(orders[0], trans.amount)]
trans.state = BankTransaction.STATE_VALID
for order, amount in splits:
info_data = {

View File

@@ -669,7 +669,7 @@ class OrganizerActionView(OrganizerBanktransferView, OrganizerPermissionRequired
def _row_key_func(row):
return row['iban'], row['bic']
return row['iban'], row.get('bic') or ''
def _unite_transaction_rows(transaction_rows):

View File

@@ -10,7 +10,7 @@
<script type="text/plain" id="stripe_payment_intent_client_secret">{{ payment_intent_client_secret }}</script>
{% if payment_intent_next_action_redirect_url %}
<script type="text/plain" id="stripe_payment_intent_next_action_redirect_url">{{ payment_intent_next_action_redirect_url }}</script>
{% endif %}}
{% endif %}
{% if payment_intent_redirect_action_handling %}
<script type="text/plain" id="stripe_payment_intent_redirect_action_handling">{{ payment_intent_redirect_action_handling }}</script>
{% endif %}

View File

@@ -19,6 +19,7 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
import functools
import hashlib
import ipaddress
import random
@@ -27,7 +28,7 @@ from django import forms
from django.conf import settings
from django.contrib.auth.hashers import check_password
from django.contrib.auth.password_validation import (
password_validators_help_texts, validate_password,
get_password_validators, password_validators_help_texts, validate_password,
)
from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.core import signing
@@ -271,6 +272,11 @@ class RegistrationForm(forms.Form):
return customer
@functools.lru_cache(maxsize=None)
def get_customer_password_validators():
return get_password_validators(settings.CUSTOMER_AUTH_PASSWORD_VALIDATORS)
class SetPasswordForm(forms.Form):
required_css_class = 'required'
error_messages = {
@@ -311,7 +317,7 @@ class SetPasswordForm(forms.Form):
def clean_password(self):
password1 = self.cleaned_data.get('password', '')
if validate_password(password1, user=self.customer) is not None:
if validate_password(password1, user=self.customer, password_validators=get_customer_password_validators()) is not None:
raise forms.ValidationError(_(password_validators_help_texts()), code='pw_invalid')
return password1
@@ -405,7 +411,7 @@ class ChangePasswordForm(forms.Form):
def clean_password(self):
password1 = self.cleaned_data.get('password', '')
if validate_password(password1, user=self.customer) is not None:
if validate_password(password1, user=self.customer, password_validators=get_customer_password_validators()) is not None:
raise forms.ValidationError(_(password_validators_help_texts()), code='pw_invalid')
return password1

View File

@@ -6,13 +6,16 @@
{% load eventsignal %}
{% load rich_text %}
{% for tup in items_by_category %}
<section {% if tup.0 %}aria-labelledby="category-{{ tup.0.id }}"{% else %}aria-label="{% trans "Uncategorized items" %}"{% endif %}{% if tup.0.description %} aria-describedby="category-info-{{ tup.0.id }}"{% endif %}>
{% if tup.0 %}
{% if tup.0 %}
<section aria-labelledby="category-{{ tup.0.id }}"{% if tup.0.description %} aria-describedby="category-info-{{ tup.0.id }}"{% endif %}>
<h3 id="category-{{ tup.0.id }}">{{ tup.0.name }}</h3>
{% if tup.0.description %}
<div id="category-info-{{ tup.0.id }}">{{ tup.0.description|localize|rich_text }}</div>
{% endif %}
{% endif %}
{% else %}
<section aria-labelledby="category-none">
<h3 id="category-none" class="sr-only">{% trans "Uncategorized items" %}</h3>
{% endif %}
{% for item in tup.1 %}
{% if item.has_variations %}
<article aria-labelledby="item-{{ item.pk }}-legend"{% if item.description %} aria-describedby="item-{{ item.pk }}-description"{% endif %} class="item-with-variations{% if event.settings.show_variations_expanded %} details-open{% endif %}" id="item-{{ item.pk }}">

View File

@@ -31,7 +31,7 @@
<span class="label label-success">{% trans "Book now" %}</span>
{% endif %}
{% endif %}
{% elif event.waiting_list_active and subev.best_availability_state >= 0 %}
{% elif subev.waiting_list_active and subev.best_availability_state >= 0 %}
<span class="label label-warning">{% trans "Waiting list" %}</span>
{% elif subev.best_availability_state == 20 %}
<span class="label label-danger">{% trans "Reserved" %}</span>

View File

@@ -185,7 +185,7 @@
{% if waitinglist_seated %}
<aside class="front-page" aria-labelledby="waiting-list">
<h3 id="waiting-list">{% trans "Waiting list" %}</h3>
<h3 id="waiting-list" class="sr-only">{% trans "Waiting list" %}</h3>
<div class="row">
<div class="col-md-8 col-sm-6 col-xs-12">
<p>

View File

@@ -1,6 +1,7 @@
{% extends "pretixpresale/event/base.html" %}
{% load i18n %}
{% load eventurl %}
{% load rich_text %}
{% load money %}
{% block title %}{% trans "Change payment method" %}{% endblock %}
{% block custom_header %}
@@ -23,6 +24,9 @@
{% endif %}
<form method="post">
{% csrf_token %}
{% if event.settings.payment_explanation %}
{{ event.settings.payment_explanation|rich_text }}
{% endif %}
<div class="panel-group" id="payment_accordion">
{% for p in providers %}
<div class="panel panel-default" data-total="{{ p.total|money_numberfield:request.event.currency }}">

View File

@@ -38,7 +38,7 @@
<script src="{% statici18n request.LANGUAGE_CODE %}" async></script>
{% endif %}
{% if request.session.iframe_session %}
{% compress js %}
{% compress js file iframeresizer %}
<script type="text/javascript" src="{% static "iframeresizer/iframeResizer.contentWindow.js" %}"></script>
{% endcompress %}
{% endif %}

View File

@@ -21,6 +21,23 @@
<h1>{% trans "We are processing your request …" %}</h1>
{% if percentage %}
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-{{ percentage|floatformat:0 }}">
</div>
</div>
{% if steps %}
<ol class="steps">
{% for step in steps %}
<li>
<span class="fa fa-fw {% if step.done %}fa-check text-success{% else %}fa-cog fa-spin text-muted{% endif %}"></span>
{{ step.label }}
</li>
{% endfor %}
</ol>
{% endif %}
{% endif %}
<p>
{% trans "If this takes longer than a few minutes, please contact us." %}
</p>

View File

@@ -982,6 +982,11 @@ class OrderCancelDo(EventViewMixin, OrderDetailMixin, AsyncAction, View):
def get_error_url(self):
return self.get_order_url()
def get(self, request, *args, **kwargs):
if not self.order:
raise Http404(_('Unknown order code or not authorized to access this order.'))
return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
if not self.order:
raise Http404(_('Unknown order code or not authorized to access this order.'))

View File

@@ -186,14 +186,23 @@ class EventListMixin:
query = Q(is_public=True) & Q(live=True)
qs = self.request.organizer.events.using(settings.DATABASE_REPLICA).filter(query)
qs = qs.filter(Q(all_sales_channels=True) | Q(limit_sales_channels=self.request.sales_channel))
show_old = "old" in self.request.GET
subevent_filter = Q(subevents__active=True, subevents__is_public=True)
if not show_old:
subevent_filter &= Q(
Q(subevents__date_to__gte=now()) | Q(subevents__date_from__gte=now())
)
qs = qs.annotate(
min_from=Min('subevents__date_from'),
min_to=Min('subevents__date_to'),
max_from=Max('subevents__date_from'),
max_to=Max('subevents__date_to'),
max_fromto=Greatest(Max('subevents__date_to'), Max('subevents__date_from')),
min_from=Min('subevents__date_from', filter=subevent_filter),
min_to=Min('subevents__date_to', filter=subevent_filter),
max_from=Max('subevents__date_from', filter=subevent_filter),
max_to=Max('subevents__date_to', filter=subevent_filter),
max_fromto=Greatest(Max('subevents__date_to', filter=subevent_filter), Max('subevents__date_from', filter=subevent_filter)),
)
if "old" in self.request.GET:
if show_old:
date_q = Q(date_to__lt=now()) | (Q(date_to__isnull=True) & Q(date_from__lt=now()))
qs = qs.filter(
Q(Q(has_subevents=False) & date_q) | Q(

View File

@@ -417,7 +417,7 @@ class WidgetAPIProductList(EventListMixin, View):
else:
availability['text'] = gettext('Book now')
availability['reason'] = 'ok'
elif event.waiting_list_active and (ev.best_availability_state is not None and ev.best_availability_state >= 0):
elif ev.waiting_list_active and (ev.best_availability_state is not None and ev.best_availability_state >= 0):
availability['color'] = 'orange'
availability['text'] = gettext('Waiting list')
availability['reason'] = 'waitinglist'
@@ -719,7 +719,7 @@ class WidgetAPIProductList(EventListMixin, View):
'display_net_prices': request.event.settings.display_net_prices,
'use_native_spinners': request.event.settings.widget_use_native_spinners,
'show_variations_expanded': request.event.settings.show_variations_expanded,
'waiting_list_enabled': request.event.waiting_list_active,
'waiting_list_enabled': (self.subevent or request.event).waiting_list_active,
'voucher_explanation_text': str(rich_text(request.event.settings.voucher_explanation_text, safelinks=False)),
'error': None,
'cart_exists': False

View File

@@ -340,6 +340,7 @@ if HAS_CELERY:
CELERY_BROKER_TRANSPORT_OPTIONS = loads(config.get('celery', 'broker_transport_options'))
if HAS_CELERY_BACKEND_TRANSPORT_OPTS:
CELERY_RESULT_BACKEND_TRANSPORT_OPTIONS = loads(config.get('celery', 'backend_transport_options'))
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True
else:
CELERY_TASK_ALWAYS_EAGER = True
@@ -714,6 +715,10 @@ BOOTSTRAP3 = {
}
PASSWORD_HASHERS = [
# Note that when updating this, all user passwords will be re-hashed on next login, however,
# the HistoricPassword model will not be changed automatically. In case a serious issue with a hasher
# comes to light, dropping the contents of the HistoricPassword table might be the more risk-adequate
# decision.
"django.contrib.auth.hashers.Argon2PasswordHasher",
"django.contrib.auth.hashers.PBKDF2PasswordHasher",
"django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
@@ -725,7 +730,44 @@ AUTH_PASSWORD_VALIDATORS = [
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
"OPTIONS": {
# To fulfill per PCI DSS requirement 8.3.6
"min_length": 12,
},
},
{
# To fulfill per PCI DSS requirement 8.3.6
'NAME': 'pretix.base.auth.NumericAndAlphabeticPasswordValidator',
},
{
"NAME": "pretix.base.auth.HistoryPasswordValidator",
"OPTIONS": {
# To fulfill per PCI DSS requirement 8.3.7
"history_length": 4,
},
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
CUSTOMER_AUTH_PASSWORD_VALIDATORS = [
# For customer accounts, we apply a little less strict requirements to provide a risk-adequate
# user experience.
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
"OPTIONS": {
"min_length": 8,
},
},
{
'NAME': 'pretix.base.auth.NumericAndAlphabeticPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',

View File

@@ -9,7 +9,7 @@
"version": "0.0.0",
"dependencies": {
"@babel/core": "^7.25.2",
"@babel/preset-env": "^7.25.3",
"@babel/preset-env": "^7.25.4",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-node-resolve": "^15.2.3",
"rollup": "^2.79.1",
@@ -43,9 +43,9 @@
}
},
"node_modules/@babel/compat-data": {
"version": "7.25.2",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
"integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
"integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
"engines": {
"node": ">=6.9.0"
}
@@ -99,11 +99,11 @@
}
},
"node_modules/@babel/generator": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
"integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
"integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
"dependencies": {
"@babel/types": "^7.25.0",
"@babel/types": "^7.25.6",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
@@ -185,18 +185,16 @@
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
},
"node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz",
"integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
"integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.24.7",
"@babel/helper-environment-visitor": "^7.24.7",
"@babel/helper-function-name": "^7.24.7",
"@babel/helper-member-expression-to-functions": "^7.24.7",
"@babel/helper-member-expression-to-functions": "^7.24.8",
"@babel/helper-optimise-call-expression": "^7.24.7",
"@babel/helper-replace-supers": "^7.24.7",
"@babel/helper-replace-supers": "^7.25.0",
"@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
"@babel/helper-split-export-declaration": "^7.24.7",
"@babel/traverse": "^7.25.4",
"semver": "^6.3.1"
},
"engines": {
@@ -239,9 +237,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz",
"integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==",
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
"integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
"dependencies": {
"@babel/helper-compilation-targets": "^7.22.6",
"@babel/helper-plugin-utils": "^7.22.5",
@@ -253,29 +251,6 @@
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/@babel/helper-environment-visitor": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
"integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
"dependencies": {
"@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
"integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
"dependencies": {
"@babel/template": "^7.24.7",
"@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.24.8",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
@@ -392,17 +367,6 @@
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-split-export-declaration": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
"integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
"dependencies": {
"@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.24.8",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
@@ -467,11 +431,11 @@
}
},
"node_modules/@babel/parser": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
"integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
"integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
"dependencies": {
"@babel/types": "^7.25.2"
"@babel/types": "^7.25.6"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -797,14 +761,14 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz",
"integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz",
"integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==",
"dependencies": {
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-remap-async-to-generator": "^7.25.0",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/traverse": "^7.25.0"
"@babel/traverse": "^7.25.4"
},
"engines": {
"node": ">=6.9.0"
@@ -858,12 +822,12 @@
}
},
"node_modules/@babel/plugin-transform-class-properties": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz",
"integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
"integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.7"
"@babel/helper-create-class-features-plugin": "^7.25.4",
"@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -889,15 +853,15 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz",
"integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
"integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.24.7",
"@babel/helper-compilation-targets": "^7.24.8",
"@babel/helper-compilation-targets": "^7.25.2",
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-replace-supers": "^7.25.0",
"@babel/traverse": "^7.25.0",
"@babel/traverse": "^7.25.4",
"globals": "^11.1.0"
},
"engines": {
@@ -1314,12 +1278,12 @@
}
},
"node_modules/@babel/plugin-transform-private-methods": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz",
"integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
"integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.7"
"@babel/helper-create-class-features-plugin": "^7.25.4",
"@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -1504,12 +1468,12 @@
}
},
"node_modules/@babel/plugin-transform-unicode-sets-regex": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz",
"integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
"integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.7"
"@babel/helper-create-regexp-features-plugin": "^7.25.2",
"@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -1519,11 +1483,11 @@
}
},
"node_modules/@babel/preset-env": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz",
"integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz",
"integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==",
"dependencies": {
"@babel/compat-data": "^7.25.2",
"@babel/compat-data": "^7.25.4",
"@babel/helper-compilation-targets": "^7.25.2",
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-validator-option": "^7.24.8",
@@ -1552,13 +1516,13 @@
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
"@babel/plugin-transform-arrow-functions": "^7.24.7",
"@babel/plugin-transform-async-generator-functions": "^7.25.0",
"@babel/plugin-transform-async-generator-functions": "^7.25.4",
"@babel/plugin-transform-async-to-generator": "^7.24.7",
"@babel/plugin-transform-block-scoped-functions": "^7.24.7",
"@babel/plugin-transform-block-scoping": "^7.25.0",
"@babel/plugin-transform-class-properties": "^7.24.7",
"@babel/plugin-transform-class-properties": "^7.25.4",
"@babel/plugin-transform-class-static-block": "^7.24.7",
"@babel/plugin-transform-classes": "^7.25.0",
"@babel/plugin-transform-classes": "^7.25.4",
"@babel/plugin-transform-computed-properties": "^7.24.7",
"@babel/plugin-transform-destructuring": "^7.24.8",
"@babel/plugin-transform-dotall-regex": "^7.24.7",
@@ -1586,7 +1550,7 @@
"@babel/plugin-transform-optional-catch-binding": "^7.24.7",
"@babel/plugin-transform-optional-chaining": "^7.24.8",
"@babel/plugin-transform-parameters": "^7.24.7",
"@babel/plugin-transform-private-methods": "^7.24.7",
"@babel/plugin-transform-private-methods": "^7.25.4",
"@babel/plugin-transform-private-property-in-object": "^7.24.7",
"@babel/plugin-transform-property-literals": "^7.24.7",
"@babel/plugin-transform-regenerator": "^7.24.7",
@@ -1599,10 +1563,10 @@
"@babel/plugin-transform-unicode-escapes": "^7.24.7",
"@babel/plugin-transform-unicode-property-regex": "^7.24.7",
"@babel/plugin-transform-unicode-regex": "^7.24.7",
"@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
"@babel/plugin-transform-unicode-sets-regex": "^7.25.4",
"@babel/preset-modules": "0.1.6-no-external-plugins",
"babel-plugin-polyfill-corejs2": "^0.4.10",
"babel-plugin-polyfill-corejs3": "^0.10.4",
"babel-plugin-polyfill-corejs3": "^0.10.6",
"babel-plugin-polyfill-regenerator": "^0.6.1",
"core-js-compat": "^3.37.1",
"semver": "^6.3.1"
@@ -1665,15 +1629,15 @@
}
},
"node_modules/@babel/traverse": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
"integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
"integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
"dependencies": {
"@babel/code-frame": "^7.24.7",
"@babel/generator": "^7.25.0",
"@babel/parser": "^7.25.3",
"@babel/generator": "^7.25.6",
"@babel/parser": "^7.25.6",
"@babel/template": "^7.25.0",
"@babel/types": "^7.25.2",
"@babel/types": "^7.25.6",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -1682,9 +1646,9 @@
}
},
"node_modules/@babel/types": {
"version": "7.25.2",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
"integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
"integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
"dependencies": {
"@babel/helper-string-parser": "^7.24.8",
"@babel/helper-validator-identifier": "^7.24.7",
@@ -2023,12 +1987,12 @@
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
"version": "0.10.4",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
"integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
"version": "0.10.6",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz",
"integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==",
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.6.1",
"core-js-compat": "^3.36.1"
"@babel/helper-define-polyfill-provider": "^0.6.2",
"core-js-compat": "^3.38.0"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -2108,9 +2072,9 @@
}
},
"node_modules/browserslist": {
"version": "4.23.2",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
"integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
"version": "4.23.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
"integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
"funding": [
{
"type": "opencollective",
@@ -2126,9 +2090,9 @@
}
],
"dependencies": {
"caniuse-lite": "^1.0.30001640",
"electron-to-chromium": "^1.4.820",
"node-releases": "^2.0.14",
"caniuse-lite": "^1.0.30001646",
"electron-to-chromium": "^1.5.4",
"node-releases": "^2.0.18",
"update-browserslist-db": "^1.1.0"
},
"bin": {
@@ -2315,11 +2279,11 @@
}
},
"node_modules/core-js-compat": {
"version": "3.37.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
"integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
"version": "3.38.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz",
"integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==",
"dependencies": {
"browserslist": "^4.23.0"
"browserslist": "^4.23.3"
},
"funding": {
"type": "opencollective",
@@ -3120,9 +3084,9 @@
"optional": true
},
"node_modules/node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g=="
},
"node_modules/normalize-path": {
"version": "3.0.0",
@@ -4064,9 +4028,9 @@
}
},
"@babel/compat-data": {
"version": "7.25.2",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
"integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ=="
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
"integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ=="
},
"@babel/core": {
"version": "7.25.2",
@@ -4103,11 +4067,11 @@
}
},
"@babel/generator": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
"integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
"integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
"requires": {
"@babel/types": "^7.25.0",
"@babel/types": "^7.25.6",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
@@ -4175,18 +4139,16 @@
}
},
"@babel/helper-create-class-features-plugin": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz",
"integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
"integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.24.7",
"@babel/helper-environment-visitor": "^7.24.7",
"@babel/helper-function-name": "^7.24.7",
"@babel/helper-member-expression-to-functions": "^7.24.7",
"@babel/helper-member-expression-to-functions": "^7.24.8",
"@babel/helper-optimise-call-expression": "^7.24.7",
"@babel/helper-replace-supers": "^7.24.7",
"@babel/helper-replace-supers": "^7.25.0",
"@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
"@babel/helper-split-export-declaration": "^7.24.7",
"@babel/traverse": "^7.25.4",
"semver": "^6.3.1"
},
"dependencies": {
@@ -4215,9 +4177,9 @@
}
},
"@babel/helper-define-polyfill-provider": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz",
"integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==",
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
"integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
"requires": {
"@babel/helper-compilation-targets": "^7.22.6",
"@babel/helper-plugin-utils": "^7.22.5",
@@ -4226,23 +4188,6 @@
"resolve": "^1.14.2"
}
},
"@babel/helper-environment-visitor": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
"integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
"requires": {
"@babel/types": "^7.24.7"
}
},
"@babel/helper-function-name": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
"integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
"requires": {
"@babel/template": "^7.24.7",
"@babel/types": "^7.24.7"
}
},
"@babel/helper-member-expression-to-functions": {
"version": "7.24.8",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
@@ -4323,14 +4268,6 @@
"@babel/types": "^7.24.7"
}
},
"@babel/helper-split-export-declaration": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
"integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
"requires": {
"@babel/types": "^7.24.7"
}
},
"@babel/helper-string-parser": {
"version": "7.24.8",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
@@ -4377,11 +4314,11 @@
}
},
"@babel/parser": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
"integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
"integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
"requires": {
"@babel/types": "^7.25.2"
"@babel/types": "^7.25.6"
}
},
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
@@ -4588,14 +4525,14 @@
}
},
"@babel/plugin-transform-async-generator-functions": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz",
"integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz",
"integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==",
"requires": {
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-remap-async-to-generator": "^7.25.0",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/traverse": "^7.25.0"
"@babel/traverse": "^7.25.4"
}
},
"@babel/plugin-transform-async-to-generator": {
@@ -4625,12 +4562,12 @@
}
},
"@babel/plugin-transform-class-properties": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz",
"integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
"integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
"requires": {
"@babel/helper-create-class-features-plugin": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.7"
"@babel/helper-create-class-features-plugin": "^7.25.4",
"@babel/helper-plugin-utils": "^7.24.8"
}
},
"@babel/plugin-transform-class-static-block": {
@@ -4644,15 +4581,15 @@
}
},
"@babel/plugin-transform-classes": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz",
"integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
"integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.24.7",
"@babel/helper-compilation-targets": "^7.24.8",
"@babel/helper-compilation-targets": "^7.25.2",
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-replace-supers": "^7.25.0",
"@babel/traverse": "^7.25.0",
"@babel/traverse": "^7.25.4",
"globals": "^11.1.0"
}
},
@@ -4901,12 +4838,12 @@
}
},
"@babel/plugin-transform-private-methods": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz",
"integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
"integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
"requires": {
"@babel/helper-create-class-features-plugin": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.7"
"@babel/helper-create-class-features-plugin": "^7.25.4",
"@babel/helper-plugin-utils": "^7.24.8"
}
},
"@babel/plugin-transform-private-property-in-object": {
@@ -5013,20 +4950,20 @@
}
},
"@babel/plugin-transform-unicode-sets-regex": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz",
"integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
"integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
"requires": {
"@babel/helper-create-regexp-features-plugin": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.7"
"@babel/helper-create-regexp-features-plugin": "^7.25.2",
"@babel/helper-plugin-utils": "^7.24.8"
}
},
"@babel/preset-env": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz",
"integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz",
"integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==",
"requires": {
"@babel/compat-data": "^7.25.2",
"@babel/compat-data": "^7.25.4",
"@babel/helper-compilation-targets": "^7.25.2",
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-validator-option": "^7.24.8",
@@ -5055,13 +4992,13 @@
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
"@babel/plugin-transform-arrow-functions": "^7.24.7",
"@babel/plugin-transform-async-generator-functions": "^7.25.0",
"@babel/plugin-transform-async-generator-functions": "^7.25.4",
"@babel/plugin-transform-async-to-generator": "^7.24.7",
"@babel/plugin-transform-block-scoped-functions": "^7.24.7",
"@babel/plugin-transform-block-scoping": "^7.25.0",
"@babel/plugin-transform-class-properties": "^7.24.7",
"@babel/plugin-transform-class-properties": "^7.25.4",
"@babel/plugin-transform-class-static-block": "^7.24.7",
"@babel/plugin-transform-classes": "^7.25.0",
"@babel/plugin-transform-classes": "^7.25.4",
"@babel/plugin-transform-computed-properties": "^7.24.7",
"@babel/plugin-transform-destructuring": "^7.24.8",
"@babel/plugin-transform-dotall-regex": "^7.24.7",
@@ -5089,7 +5026,7 @@
"@babel/plugin-transform-optional-catch-binding": "^7.24.7",
"@babel/plugin-transform-optional-chaining": "^7.24.8",
"@babel/plugin-transform-parameters": "^7.24.7",
"@babel/plugin-transform-private-methods": "^7.24.7",
"@babel/plugin-transform-private-methods": "^7.25.4",
"@babel/plugin-transform-private-property-in-object": "^7.24.7",
"@babel/plugin-transform-property-literals": "^7.24.7",
"@babel/plugin-transform-regenerator": "^7.24.7",
@@ -5102,10 +5039,10 @@
"@babel/plugin-transform-unicode-escapes": "^7.24.7",
"@babel/plugin-transform-unicode-property-regex": "^7.24.7",
"@babel/plugin-transform-unicode-regex": "^7.24.7",
"@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
"@babel/plugin-transform-unicode-sets-regex": "^7.25.4",
"@babel/preset-modules": "0.1.6-no-external-plugins",
"babel-plugin-polyfill-corejs2": "^0.4.10",
"babel-plugin-polyfill-corejs3": "^0.10.4",
"babel-plugin-polyfill-corejs3": "^0.10.6",
"babel-plugin-polyfill-regenerator": "^0.6.1",
"core-js-compat": "^3.37.1",
"semver": "^6.3.1"
@@ -5152,23 +5089,23 @@
}
},
"@babel/traverse": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
"integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
"integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
"requires": {
"@babel/code-frame": "^7.24.7",
"@babel/generator": "^7.25.0",
"@babel/parser": "^7.25.3",
"@babel/generator": "^7.25.6",
"@babel/parser": "^7.25.6",
"@babel/template": "^7.25.0",
"@babel/types": "^7.25.2",
"@babel/types": "^7.25.6",
"debug": "^4.3.1",
"globals": "^11.1.0"
}
},
"@babel/types": {
"version": "7.25.2",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
"integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
"integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
"requires": {
"@babel/helper-string-parser": "^7.24.8",
"@babel/helper-validator-identifier": "^7.24.7",
@@ -5403,12 +5340,12 @@
}
},
"babel-plugin-polyfill-corejs3": {
"version": "0.10.4",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
"integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
"version": "0.10.6",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz",
"integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==",
"requires": {
"@babel/helper-define-polyfill-provider": "^0.6.1",
"core-js-compat": "^3.36.1"
"@babel/helper-define-polyfill-provider": "^0.6.2",
"core-js-compat": "^3.38.0"
}
},
"babel-plugin-polyfill-regenerator": {
@@ -5470,13 +5407,13 @@
}
},
"browserslist": {
"version": "4.23.2",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
"integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
"version": "4.23.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
"integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
"requires": {
"caniuse-lite": "^1.0.30001640",
"electron-to-chromium": "^1.4.820",
"node-releases": "^2.0.14",
"caniuse-lite": "^1.0.30001646",
"electron-to-chromium": "^1.5.4",
"node-releases": "^2.0.18",
"update-browserslist-db": "^1.1.0"
}
},
@@ -5615,11 +5552,11 @@
}
},
"core-js-compat": {
"version": "3.37.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
"integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
"version": "3.38.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz",
"integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==",
"requires": {
"browserslist": "^4.23.0"
"browserslist": "^4.23.3"
}
},
"css": {
@@ -6215,9 +6152,9 @@
"optional": true
},
"node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g=="
},
"normalize-path": {
"version": "3.0.0",

View File

@@ -5,7 +5,7 @@
"scripts": {},
"dependencies": {
"@babel/core": "^7.25.2",
"@babel/preset-env": "^7.25.3",
"@babel/preset-env": "^7.25.4",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-node-resolve": "^15.2.3",
"vue": "^2.7.16",

View File

@@ -552,6 +552,16 @@ var form_handlers = function (el) {
language: $("body").attr("data-select2-locale"),
});
el.find('[data-model-select2=json_script]').each(function() {
const selectedValue = this.value;
this.replaceChildren();
$(this).select2({
theme: "bootstrap",
language: $("body").attr("data-select2-locale"),
data: JSON.parse($(this.getAttribute('data-select2-src')).text()),
}).val(selectedValue).trigger('change');
});
el.find('input[data-typeahead-url]').each(function () {
var $inp = $(this);
if ($inp.data("ttTypeahead") || $inp.hasClass("tt-hint")) {

View File

@@ -18,3 +18,18 @@ body {
font-size: 200px;
color: $brand-primary;
}
.progress {
max-width: 450px;
margin: 0 auto 20px;
}
.steps {
max-width: 450px;
text-align: left;
margin: 0 auto 20px;
list-style-type: none;
padding: 0;
}
@for $i from 0 through 100 {
.progress-bar-#{$i} { width: 1% * $i; }
}

View File

@@ -498,6 +498,7 @@ def test_list_all_items_positions(token_client, organizer, event, clist, clist_a
'datetime': c.datetime.isoformat().replace('+00:00', 'Z'),
'auto_checked_in': False,
'device': None,
'device_id': None,
'gate': None,
'type': 'entry',
}
@@ -540,6 +541,7 @@ def test_list_all_items_positions(token_client, organizer, event, clist, clist_a
'datetime': c.datetime.isoformat().replace('+00:00', 'Z'),
'auto_checked_in': False,
'device': None,
'device_id': None,
'gate': None,
'type': 'entry',
}

View File

@@ -959,7 +959,7 @@ def test_refund_cancel(token_client, organizer, event, order):
@pytest.mark.django_db
def test_orderposition_list(token_client, organizer, event, order, item, subevent, subevent2, question):
def test_orderposition_list(token_client, organizer, device, event, order, item, subevent, subevent2, question, django_assert_num_queries):
i2 = copy.copy(item)
i2.pk = None
i2.save()
@@ -1060,19 +1060,22 @@ def test_orderposition_list(token_client, organizer, event, order, item, subeven
with scopes_disabled():
cl = event.checkin_lists.create(name="Default")
c = op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=datetime.timezone.utc), list=cl)
c = op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=datetime.timezone.utc), list=cl, device=device)
op.checkins.create(datetime=datetime.datetime(2017, 12, 26, 10, 0, 0, tzinfo=datetime.timezone.utc), list=cl, successful=False)
res['checkins'] = [{ # successful only
'id': c.pk,
'datetime': '2017-12-26T10:00:00Z',
'list': cl.pk,
'auto_checked_in': False,
'device': None,
'device': device.pk,
'device_id': device.device_id,
'gate': None,
'type': 'entry'
}]
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=true'.format(organizer.slug, event.slug))
with django_assert_num_queries(15):
resp = token_client.get(
'/api/v1/organizers/{}/events/{}/orderpositions/?has_checkin=true'.format(organizer.slug, event.slug)
)
assert [res] == resp.data['results']
op.subevent = subevent

View File

@@ -66,7 +66,7 @@ def inputfile_factory(multiplier=1):
'A': 'GHIJK432',
'B': 'Ticket',
'C': 'False',
'D': '2021-05-28 11:00:00',
'D': '2021-05-28T11:00:00+00:00',
'E': '2',
'F': '1',
},

View File

@@ -337,7 +337,7 @@ class RegistrationFormTest(TestCase):
response = self.client.post('/control/register', {
'email': 'dummy@dummy.dummy',
'password': 'foobarbar',
'password': 'f00barbarbar',
'password_repeat': ''
})
self.assertEqual(response.status_code, 200)
@@ -347,8 +347,8 @@ class RegistrationFormTest(TestCase):
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy')
response = self.client.post('/control/register', {
'email': 'dummy@dummy.dummy',
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
})
self.assertEqual(response.status_code, 200)
@@ -356,8 +356,8 @@ class RegistrationFormTest(TestCase):
def test_success(self):
response = self.client.post('/control/register', {
'email': 'dummy@dummy.dummy',
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
})
self.assertEqual(response.status_code, 302)
assert time.time() - self.client.session['pretix_auth_login_time'] < 60
@@ -367,8 +367,8 @@ class RegistrationFormTest(TestCase):
def test_disabled(self):
response = self.client.post('/control/register', {
'email': 'dummy@dummy.dummy',
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
})
self.assertEqual(response.status_code, 403)
@@ -376,8 +376,8 @@ class RegistrationFormTest(TestCase):
def test_no_native_auth(self):
response = self.client.post('/control/register', {
'email': 'dummy@dummy.dummy',
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
})
self.assertEqual(response.status_code, 403)
@@ -593,8 +593,8 @@ class PasswordRecoveryFormTest(TestCase):
response = self.client.post(
'/control/forgot/recover?id=%d&token=foo' % self.user.id,
{
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
}
)
self.assertEqual(response.status_code, 302)
@@ -615,8 +615,8 @@ class PasswordRecoveryFormTest(TestCase):
response = self.client.post(
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
}
)
self.assertEqual(response.status_code, 302)
@@ -630,13 +630,13 @@ class PasswordRecoveryFormTest(TestCase):
response = self.client.post(
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
}
)
self.assertEqual(response.status_code, 302)
self.user = User.objects.get(id=self.user.id)
self.assertTrue(self.user.check_password('foobarbar'))
self.assertTrue(self.user.check_password('f00barbarbar'))
def test_recovery_valid_token_empty_passwords(self):
token = default_token_generator.make_token(self.user)
@@ -645,7 +645,7 @@ class PasswordRecoveryFormTest(TestCase):
response = self.client.post(
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': 'foobarbar',
'password': 'f00barbarbar',
'password_repeat': ''
}
)
@@ -660,7 +660,7 @@ class PasswordRecoveryFormTest(TestCase):
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': '',
'password_repeat': 'foobarbar'
'password_repeat': 'f00barbarbar'
}
)
self.assertEqual(response.status_code, 200)
@@ -697,6 +697,48 @@ class PasswordRecoveryFormTest(TestCase):
self.user = User.objects.get(id=self.user.id)
self.assertTrue(self.user.check_password('demo'))
def test_recovery_valid_token_password_reuse(self):
self.user.set_password("GsvdU4gGZDb4J9WgIhLNcZT9PO7CZ3")
self.user.save()
self.user.set_password("hLPqPpuZIjouGBk9xTLu1aXYqjpRYS")
self.user.save()
self.user.set_password("Jn2nQSa25ZJAc5GUI1HblrneWCXotD")
self.user.save()
self.user.set_password("cboaBj3yIfgnQeKClDgvKNvWC69cV1")
self.user.save()
self.user.set_password("Kkj8f3kGXbXmbgcwHBgf3WKmzkUOhM")
self.user.save()
assert self.user.historic_passwords.count() == 4
token = default_token_generator.make_token(self.user)
response = self.client.get('/control/forgot/recover?id=%d&token=%s' % (self.user.id, token))
self.assertEqual(response.status_code, 200)
response = self.client.post(
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': 'cboaBj3yIfgnQeKClDgvKNvWC69cV1',
'password_repeat': 'cboaBj3yIfgnQeKClDgvKNvWC69cV1'
}
)
self.assertEqual(response.status_code, 200)
self.user = User.objects.get(id=self.user.id)
self.assertTrue(self.user.check_password('Kkj8f3kGXbXmbgcwHBgf3WKmzkUOhM'))
token = default_token_generator.make_token(self.user)
response = self.client.get('/control/forgot/recover?id=%d&token=%s' % (self.user.id, token))
self.assertEqual(response.status_code, 200)
response = self.client.post(
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': 'GsvdU4gGZDb4J9WgIhLNcZT9PO7CZ3',
'password_repeat': 'GsvdU4gGZDb4J9WgIhLNcZT9PO7CZ3'
}
)
self.assertEqual(response.status_code, 302)
self.user = User.objects.get(id=self.user.id)
self.assertTrue(self.user.check_password('GsvdU4gGZDb4J9WgIhLNcZT9PO7CZ3'))
def test_recovery_valid_token_short_passwords(self):
token = default_token_generator.make_token(self.user)
response = self.client.get('/control/forgot/recover?id=%d&token=%s' % (self.user.id, token))
@@ -704,8 +746,8 @@ class PasswordRecoveryFormTest(TestCase):
response = self.client.post(
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': 'foobar',
'password_repeat': 'foobar'
'password': 'foobarfooba',
'password_repeat': 'foobarfooba'
}
)
self.assertEqual(response.status_code, 200)

View File

@@ -349,8 +349,8 @@ def test_invite_new_user(event, admin_team, client):
assert b'<form' in resp.content
resp = client.post('/control/invite/{}'.format(i.token), {
'email': 'dummy@example.org',
'password': 'asdsdgfgjh',
'password_repeat': 'asdsdgfgjh'
'password': 'asdsdgfgjh1234567',
'password_repeat': 'asdsdgfgjh1234567'
}, follow=True)
assert b'alert-success' in resp.content

View File

@@ -112,8 +112,8 @@ class UserSettingsTest(SoupTest):
self.user.auth_backend = 'test_request'
self.user.save()
self.save({
'new_pw': 'foobarbar',
'new_pw_repeat': 'foobarbar',
'new_pw': 'f00barbarbar',
'new_pw_repeat': 'f00barbarbar',
'old_pw': 'barfoofoo',
})
pw = self.user.password
@@ -122,13 +122,13 @@ class UserSettingsTest(SoupTest):
def test_change_password_success(self):
doc = self.save({
'new_pw': 'foobarbar',
'new_pw_repeat': 'foobarbar',
'new_pw': 'f00barbarbar',
'new_pw_repeat': 'f00barbarbar',
'old_pw': 'barfoofoo',
})
assert doc.select(".alert-success")
self.user = User.objects.get(pk=self.user.pk)
assert self.user.check_password("foobarbar")
assert self.user.check_password("f00barbarbar")
def test_change_password_short(self):
doc = self.save({
@@ -171,6 +171,28 @@ class UserSettingsTest(SoupTest):
})
assert doc.select(".alert-danger")
def test_change_password_history(self):
doc = self.save({
'new_pw': 'qvuSpukdKWUV7m7PoRrWwpCd2Taij9',
'new_pw_repeat': 'qvuSpukdKWUV7m7PoRrWwpCd2Taij9',
'old_pw': 'barfoofoo',
})
assert doc.select(".alert-success")
doc = self.save({
'new_pw': '9UQl4lSwHLMVUIMgw0L1X8XEFmyvdn',
'new_pw_repeat': '9UQl4lSwHLMVUIMgw0L1X8XEFmyvdn',
'old_pw': 'qvuSpukdKWUV7m7PoRrWwpCd2Taij9',
})
assert doc.select(".alert-success")
doc = self.save({
'new_pw': 'qvuSpukdKWUV7m7PoRrWwpCd2Taij9',
'new_pw_repeat': 'qvuSpukdKWUV7m7PoRrWwpCd2Taij9',
'old_pw': '9UQl4lSwHLMVUIMgw0L1X8XEFmyvdn',
})
assert doc.select(".alert-danger")
def test_needs_password_change(self):
self.user.needs_password_change = True
self.user.save()
@@ -187,8 +209,8 @@ class UserSettingsTest(SoupTest):
self.user.needs_password_change = True
self.user.save()
self.save({
'new_pw': 'foobarbar',
'new_pw_repeat': 'foobarbar',
'new_pw': 'f00barbarbar',
'new_pw_repeat': 'f00barbarbar',
'old_pw': 'barfoofoo'
})
self.user.refresh_from_db()

View File

@@ -471,6 +471,33 @@ def test_split_payment_success(env, orga_job):
assert o4.payments.get().amount == Decimal('12.00')
@pytest.mark.django_db
def test_valid_plus_invalid_match(env, orga_job):
with scopes_disabled():
o4 = Order.objects.create(
code='99999', event=env[0],
status=Order.STATUS_PAID,
datetime=now(), expires=now() + timedelta(days=10),
total=12,
sales_channel=env[0].organizer.sales_channels.get(identifier="web"),
)
o4.payments.create(
provider='paypal',
state=OrderPayment.PAYMENT_STATE_CONFIRMED,
amount=o4.total
)
process_banktransfers(orga_job, [{
'payer': 'Karla Kundin',
'reference': 'Bestellungen DUMMY-1Z3AS DUMMY-99999',
'date': '2016-01-26',
'amount': '.00'
}])
with scopes_disabled():
job = BankImportJob.objects.last()
t = job.transactions.last()
assert t.state == BankTransaction.STATE_NOMATCH
@pytest.mark.django_db
def test_split_payment_mismatch(env, orga_job):
with scopes_disabled():

View File

@@ -773,7 +773,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
'poweredby': '<a href="https://pretix.eu" target="_blank" rel="noopener">ticketing powered by pretix</a>',
'events': [
{'availability': {'color': 'none', 'text': 'Event series'},
'date_range': 'Dec. 29, 2018 Jan. 4, 2019',
'date_range': 'Jan. 1st 4th, 2019',
'event_url': 'http://example.com/ccc/30c3/',
'location': '',
'name': '30C3'},